]> git.saurik.com Git - apple/hfs.git/commitdiff
hfs-183.1.tar.gz mac-os-x-1063 mac-os-x-1064 mac-os-x-1065 mac-os-x-1066 mac-os-x-1067 mac-os-x-1068 v183.1
authorApple <opensource@apple.com>
Fri, 11 Dec 2009 03:54:36 +0000 (03:54 +0000)
committerApple <opensource@apple.com>
Fri, 11 Dec 2009 03:54:36 +0000 (03:54 +0000)
30 files changed:
APPLE_LICENSE [new file with mode: 0644]
CopyHFSMeta/Data.h [new file with mode: 0644]
CopyHFSMeta/DeviceWrapper.c [new file with mode: 0644]
CopyHFSMeta/Gather.c [new file with mode: 0644]
CopyHFSMeta/Makefile [new file with mode: 0644]
CopyHFSMeta/ScanExtents.c [new file with mode: 0644]
CopyHFSMeta/Sparse.h [new file with mode: 0644]
CopyHFSMeta/SparseBundle.c [new file with mode: 0644]
CopyHFSMeta/dump.c [new file with mode: 0644]
CopyHFSMeta/hfsmeta.h [new file with mode: 0644]
CopyHFSMeta/main.c [new file with mode: 0644]
CopyHFSMeta/misc.c [new file with mode: 0644]
Makefile
Makefile.postamble [deleted file]
Makefile.preamble [deleted file]
PB.project [deleted file]
dpkg/control [new file with mode: 0644]
hfs_japanese/CustomInfo.xml [new file with mode: 0644]
hfs_japanese/Makefile [new file with mode: 0644]
hfs_japanese/Makefile.postamble [new file with mode: 0644]
hfs_japanese/Makefile.preamble [new file with mode: 0644]
hfs_japanese/PB.project [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/CFStub.h [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/Makefile [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/PB.project [new file with mode: 0644]
hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c [new file with mode: 0644]

diff --git a/APPLE_LICENSE b/APPLE_LICENSE
new file mode 100644 (file)
index 0000000..fcc528b
--- /dev/null
@@ -0,0 +1,105 @@
+APPLE PUBLIC SOURCE LICENSE
+Version 1.2 January 4, 2001
+
+1.  General; Definitions. This License applies to any program or other work which Apple Computer, Inc. ("Apple") makes publicly available and which contains a notice placed by Apple identifying such program or work as "Original Code" and stating that it is subject to the terms of this Apple Public Source License version 1.2 (or subsequent version thereof) ("License"). As used in this License:
+
+1.1  "Applicable Patent Rights" mean: (a) in the case where Apple is the grantor of rights, (i) claims of patents that are now or hereafter acquired, owned by or assigned to Apple and (ii) that cover subject matter contained in the Original Code, but only to the extent necessary to use, reproduce and/or distribute the Original Code without infringement; and (b) in the case where You are the grantor of rights, (i) claims of patents that are now or hereafter acquired, owned by or assigned to You and (ii) that cover subject matter in Your Modifications, taken alone or in combination with Original Code.
+
+1.2  "Contributor" means any person or entity that creates or contributes to the creation of Modifications.
+
+1.3  "Covered Code" means the Original Code, Modifications, the combination of Original Code and any Modifications, and/or any respective portions thereof.
+
+1.4  "Deploy" means to use, sublicense or distribute Covered Code other than for Your internal research and development (R&D) and/or Personal Use, and includes without limitation, any and all internal use or distribution of Covered Code within Your business or organization except for R&D use and/or Personal Use, as well as direct or indirect sublicensing or distribution of Covered Code by You to any third party in any form or manner. 
+
+1.5  "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+
+1.6  "Modifications" mean any addition to, deletion from, and/or change to, the substance and/or structure of the Original Code, any previous Modifications, the combination of Original Code and any previous Modifications, and/or any respective portions thereof. When code is released as a series of files, a Modification is: (a) any addition to or deletion from the contents of a file containing Covered Code; and/or (b) any new file or other representation of computer program statements that contains any part of Covered Code. 
+
+1.7  "Original Code" means (a) the Source Code of a program or other work as originally made available by Apple under this License, including the Source Code of any updates or upgrades to such programs or works made available by Apple under this License, and that has been expressly identified by Apple as such in the header file(s) of such work; and (b) the object code compiled from such Source Code and originally made available by Apple under this License.
+
+1.8  "Personal Use" means use of Covered Code by an individual solely for his or her personal, private and non-commercial purposes. An individual's use of Covered Code in his or her capacity as an officer, employee, member, independent contractor or agent of a corporation, business or organization (commercial or non-commercial) does not qualify as Personal Use. 
+
+1.9  "Source Code" means the human readable form of a program or other work that is suitable for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an executable (object code).
+
+1.10  "You" or "Your" means an individual or a legal entity exercising rights under this License. For legal entities, "You" or "Your" includes any entity which controls, is controlled by, or is under common control with, You, where "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+
+2.  Permitted Uses; Conditions & Restrictions. Subject to the terms and conditions of this License, Apple hereby grants You, effective on the date You accept this License and download the Original Code, a world-wide, royalty-free, non-exclusive license, to the extent of Apple's Applicable Patent Rights and copyrights covering the Original Code, to do the following:
+
+2.1  You may use, reproduce, display, perform, modify and distribute Original Code, with or without Modifications, solely for Your internal research and development and/or Personal Use, provided that in each instance:
+
+       (a)  You must retain and reproduce in all copies of Original Code the copyright and other proprietary notices and disclaimers of Apple as they appear in the Original Code, and keep intact all notices in the Original Code that refer to this License; and 
+
+       (b)  You must include a copy of this License with every copy of Source Code of Covered Code and documentation You distribute, and You may not offer or impose any terms on such Source Code that alter or restrict this License or the recipients' rights hereunder, except as permitted under Section 6.
+
+2.2  You may use, reproduce, display, perform, modify and Deploy Covered Code, provided that in each instance:
+
+       (a)  You must satisfy all the conditions of Section 2.1 with respect to the Source Code of the Covered Code; 
+
+       (b)  You must duplicate, to the extent it does not already exist, the notice in Exhibit A in each file of the Source Code of all Your Modifications, and cause the modified files to carry prominent notices stating that You changed the files and the date of any change;
+
+       (c)  You must make Source Code of all Your Deployed Modifications publicly available under the terms of this License, including the license grants set forth in Section 3 below, for as long as you Deploy the Covered Code or twelve (12) months from the date of initial Deployment, whichever is longer. You should preferably distribute the Source Code of Your Deployed Modifications electronically (e.g. download from a web site); and
+
+       (d)  if You Deploy Covered Code in object code, executable form only, You must include a prominent notice, in the code itself as well as in related documentation, stating that Source Code of the Covered Code is available under the terms of this License with information on how and where to obtain such Source Code. 
+
+2.3  You expressly acknowledge and agree that although Apple and each Contributor grants the licenses to their respective portions of the Covered Code set forth herein, no assurances are provided by Apple or any Contributor that the Covered Code does not infringe the patent or other intellectual property rights of any other entity. Apple and each Contributor disclaim any liability to You for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, You hereby assume sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow You to distribute the Covered Code, it is Your responsibility to acquire that license before distributing the Covered Code.
+
+3.  Your Grants. In consideration of, and as a condition to, the licenses granted to You under this License:
+
+       (a)  You hereby grant to Apple and all third parties a non-exclusive, royalty-free license, under Your Applicable Patent Rights and other intellectual property rights (other than patent) owned or controlled by You, to use, reproduce, display, perform, modify, distribute and Deploy Your Modifications of the same scope and extent as Apple's licenses under Sections 2.1 and 2.2; and 
+
+       (b)  You hereby grant to Apple and its subsidiaries a non-exclusive, worldwide, royalty-free, perpetual and irrevocable license, under Your Applicable Patent Rights and other intellectual property rights (other than patent) owned or controlled by You, to use, reproduce, display, perform, modify or have modified (for Apple and/or its subsidiaries), sublicense and distribute Your Modifications, in any form, through multiple tiers of distribution.
+
+4.  Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In each such instance, You must make sure the requirements of this License are fulfilled for the Covered Code or any portion thereof. 
+
+5.  Limitations on Patent License. Except as expressly stated in Section 2, no other patent rights, express or implied, are granted by Apple herein. Modifications and/or Larger Works may require additional patent licenses from Apple which Apple may grant in its sole discretion. 
+
+6.  Additional Terms. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations and/or other rights consistent with the scope of the license granted herein ("Additional Terms") to one or more recipients of Covered Code. However, You may do so only on Your own behalf and as Your sole responsibility, and not on behalf of Apple or any Contributor. You must obtain the recipient's agreement that any such Additional Terms are offered by You alone, and You hereby agree to indemnify, defend and hold Apple and every Contributor harmless for any liability incurred by or claims asserted against Apple or such Contributor by reason of any such Additional Terms. 
+
+7.  Versions of the License. Apple may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Once Original Code has been published under a particular version of this License, You may continue to use it under the terms of that version. You may also choose to use such Original Code under the terms of any subsequent version of this License published by Apple. No one other than Apple has the right to modify the terms applicable to Covered Code created under this License. 
+
+8.  NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in part pre-release, untested, or not fully tested works. The Covered Code may contain errors that could cause failures or loss of data, and may be incomplete or contain inaccuracies. You expressly acknowledge and agree that use of the Covered Code, or any portion thereof, is at Your sole and entire risk. THE COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. APPLE AND EACH CONTRIBUTOR DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. You acknowledge that the Covered Code is not intended for use in the operation of nuclear facilities, aircraft navigation, communication systems, or air traffic control machines in which case the failure of the Covered Code could lead to death, personal injury, or severe physical or environmental damage.
+
+9.  LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple's total liability to You for all damages (other than as may be required by applicable law) under this License exceed the amount of fifty dollars ($50.00).
+
+10.  Trademarks. This License does not grant any rights to use the trademarks or trade names "Apple", "Apple Computer", "Mac OS X", "Mac OS X Server", "QuickTime", "QuickTime Streaming Server" or any other trademarks or trade names belonging to Apple (collectively "Apple Marks") or to any trademark or trade name belonging to any Contributor. No Apple Marks may be used to endorse or promote products derived from the Original Code other than as permitted by and in strict compliance at all times with Apple's third party trademark usage guidelines which are posted at http://www.apple.com/legal/guidelinesfor3rdparties.html. 
+
+11.  Ownership. Subject to the licenses granted under this License, each Contributor retains all rights, title and interest in and to any Modifications made by such Contributor. Apple retains all rights, title and interest in and to the Original Code and any Modifications made by or on behalf of Apple ("Apple Modifications"), and such Apple Modifications will not be automatically subject to this License. Apple may, at its sole discretion, choose to license such Apple Modifications under this License, or on different terms from those contained in this License or may choose not to license them at all. 
+
+12.  Termination. 
+
+12.1  Termination. This License and the rights granted hereunder will terminate:
+
+       (a)automatically without notice from Apple if You fail to comply with any term(s) of this License and fail to cure such breach within 30 days of becoming aware of such breach; 
+
+       (b)immediately in the event of the circumstances described in Section 13.5(b); or
+
+       (c)automatically without notice from Apple if You, at any time during the term of this License, commence an action for patent infringement against Apple.
+
+12.2  Effect of Termination. Upon termination, You agree to immediately stop any further use, reproduction, modification, sublicensing and distribution of the Covered Code and to destroy all copies of the Covered Code that are in your possession or control. All sublicenses to the Covered Code which have been properly granted prior to termination shall survive any termination of this License. Provisions which, by their nature, should remain in effect beyond thetermination of this License shall survive, including but not limited to Sections 3, 5, 8, 9, 10, 11, 12.2 and 13. No party will be liable to any other for compensation, indemnity or damages of any sort solely as a result of terminating this License in accordance with its terms, and termination of this License will be without prejudice to any other right or remedy of any party.
+
+13.  Miscellaneous.
+
+13.1  Government End Users. The Covered Code is a "commercial item" as defined in FAR 2.101. Government software and technical data rights in the Covered Code include only those rights customarily provided to the public as defined in this License. This customary commercial license in technical data and software is provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software or Computer Software Documentation). Accordingly, all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+
+13.2  Relationship of Parties. This License will not be construed as creating an agency, partnership, joint venture or any other form of legal association between or amongYou, Apple or any Contributor, and You will not represent to the contrary, whether expressly, by implication, appearance or otherwise.
+
+13.3  Independent Development. Nothing in this License will impair Apple's right to acquire, license, develop, have others develop for it, market and/or distribute technology or products that perform the same or similar functions as, or otherwise compete with, Modifications, Larger Works, technology or products that You may develop, produce, market or distribute.
+
+13.4  Waiver; Construction. Failure by Apple or any Contributor to enforce any provision of this License will not be deemed a waiver of future enforcement of that or any other provision. Any law or regulation which provides that the language of a contract shall be construed against the drafter will not apply to this License.
+
+13.5  Severability. (a) If for any reason a court of competent jurisdiction finds any provision of this License, or portion thereof, to be unenforceable, that provision of the License will be enforced to the maximum extent permissible so as to effect the economic benefits and intent of the parties, and the remainder of this License will continue in full force and effect. (b) Notwithstanding the foregoing, if applicable law prohibits or restricts You from fully and/or specifically complying with Sections 2 and/or 3 or prevents the enforceability of either of those Sections, this License will immediately terminate and You must immediately discontinue any use of the Covered Code and destroy all copies of it that are in your possession or control.
+
+13.6  Dispute Resolution. Any litigation or other dispute resolution between You and Apple relating to this License shall take place in the Northern District of California, and You and Apple hereby consent to the personal jurisdiction of, and venue in, the state and federal courts within that District with respect to this License. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded.
+
+13.7  Entire Agreement; Governing Law. This License constitutes the entire agreement between the parties with respect to the subject matter hereof. This License shall be governed by the lawsof the United States and the State of California, except that body of California law concerning conflicts of law. 
+
+Where You are located in the province of Quebec, Canada, the following clause applies: The parties hereby confirm that they have requested that this License and all related documents be drafted in English. Les parties ont exigé que le présent contrat et tous les documents connexes soient rédigés en anglais. 
+
+EXHIBIT A. 
+
+"Portions Copyright (c) 1999-2001 Apple Computer, Inc. All Rights Reserved.
+
+This file contains Original Code and/or Modifications of Original Code as defined in and that are subject to the Apple Public Source License Version 1.2 (the 'License'). You may not use this file except in compliance with the License. Please obtain a copy of the License at http://www.apple.com/publicsource and read it before using this file.
+
+The Original Code and all software distributed under the License are distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the specific language governing rights and limitations under the License." 
+
diff --git a/CopyHFSMeta/Data.h b/CopyHFSMeta/Data.h
new file mode 100644 (file)
index 0000000..6f183bf
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef _DATA_H
+# define _DATA_H
+
+/*
+ * Data-manipulating functions and structures, used to
+ * create the skeleton copy.
+ */
+struct DeviceInfo;
+struct VolumeDescriptor;
+struct IOWrapper;
+
+/*
+ * We treat each data structure in the filesystem as
+ * a <start, length> pair.
+ */
+struct Extents {
+       off_t base;
+       off_t length;
+};
+typedef struct Extents Extents_t;
+
+#define kExtentCount   100
+
+/*
+ * The in-core representation consists of a linked
+ * list of an array of extents, up to 100 in each element.
+ */
+struct ExtentList {
+       size_t count;
+       Extents_t extents[kExtentCount];
+       struct ExtentList *next;
+};
+typedef struct ExtentList ExtentList_t;
+
+/*
+ * The in-core description of the volume:  an input source,
+ * a description of the volume, the linked list of extents,
+ * the total number of bytes, and the number of linked list
+ * elements.
+ */
+struct VolumeObjects {
+       struct DeviceInfo *devp;
+       struct VolumeDescriptor *vdp;
+       size_t count;
+       off_t byteCount;
+       ExtentList_t *list;
+};
+typedef struct VolumeObjects VolumeObjects_t;
+
+extern VolumeObjects_t *InitVolumeObject(struct DeviceInfo *devp, struct VolumeDescriptor *vdp);
+extern int AddExtent(VolumeObjects_t *vop, off_t start, off_t length);
+extern void PrintVolumeObject(VolumeObjects_t*);
+extern int CopyObjectsToDest(VolumeObjects_t*, struct IOWrapper *wrapper, off_t skip);
+
+extern void WriteGatheredData(const char *, VolumeObjects_t*);
+
+#endif /* _DATA_H */
diff --git a/CopyHFSMeta/DeviceWrapper.c b/CopyHFSMeta/DeviceWrapper.c
new file mode 100644 (file)
index 0000000..27c9116
--- /dev/null
@@ -0,0 +1,152 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <err.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <sys/disk.h>
+
+#include "hfsmeta.h"
+
+/*
+ * Functions to wrap around a device.
+ */
+#define MIN(a, b) \
+       ({ __typeof(a) __a = (a); __typeof(b) __b = (b); \
+               __a < __b ? __a : __b; })
+
+struct DeviceWrapperContext {
+       char *pathname;
+       size_t blockSize;
+       off_t devSize;
+       int fd;
+};
+
+static int
+noClean(struct IOWrapper *ctx)
+{
+       // Conceivably, we could erase the entire device
+       return 0;
+}
+
+static ssize_t
+doRead(struct IOWrapper *ctx, off_t start, void *buffer, off_t len)
+{
+       // For now, just do a pread
+       struct DeviceWrapperContext *dctx = (struct DeviceWrapperContext*)ctx->context;
+
+       return pread(dctx->fd, buffer, (size_t)len, start);
+}
+
+static ssize_t
+writeExtent(struct IOWrapper *context, DeviceInfo_t *devp, off_t start, off_t len, void (^bp)(off_t))
+{
+       const size_t bufSize = 1024 * 1024;
+       struct DeviceWrapperContext *ctx = (struct DeviceWrapperContext*)context->context;
+       uint8_t buffer[bufSize];
+       off_t total = 0;
+
+       if (debug) printf("Writing extent <%lld, %lld> to device %s", start, len, ctx->pathname);
+
+       while (total < len) {
+               ssize_t nread;
+               size_t amt = MIN(bufSize, len - total);
+               nread = pread(devp->fd, buffer, amt, start + total);
+               if (nread == -1) {
+                       warn("Cannot read from device at offset %lld", start + total);
+                       return -1;
+               }
+               (void)pwrite(ctx->fd, (char*)buffer + total, amt, start + total);
+               bp(amt);
+               total += amt;
+       }
+       return 0;
+}
+
+/*
+ * Device files can't have progress information stored, so we don't do anything.
+ */
+static off_t
+GetProgress(struct IOWrapper *context)
+{
+       return 0;
+}
+static void
+SetProgress(struct IOWrapper *context, off_t progr)
+{
+       return;
+}
+
+struct IOWrapper *
+InitDeviceWrapper(const char *path, DeviceInfo_t *devp)
+{
+       struct DeviceWrapperContext ctx = { 0 };
+       struct DeviceWrapperContext *retctx = NULL;
+       IOWrapper_t *retval = NULL;
+       struct stat sb;
+       uint64_t blockCount;
+       char rawname[strlen(path) + 2]; // /dev/disk5 -> /dev/rdisk5
+
+       if (strncmp(path, "/dev/disk", 9) == 0) {
+               // Need to make it into a raw device name
+               sprintf(rawname, "/dev/rdisk%s", path + 9);
+       } else {
+               strcpy(rawname, path);
+       }
+
+       if (lstat(rawname, &sb) == -1) {
+               warn("cannot examine raw device %s", rawname);
+               goto done;
+       }
+       if ((sb.st_mode & S_IFMT) != S_IFCHR) {
+               warnx("device %s is not a raw device", rawname);
+               goto done;
+       }
+
+       ctx.pathname = strdup(rawname);
+
+       ctx.fd = open(rawname, O_RDWR);
+       if (ctx.fd == -1) {
+               warn("Cannot open device %s for reading and writing", rawname);
+               goto done;
+       }
+
+       if (ioctl(ctx.fd, DKIOCGETBLOCKSIZE, &ctx.blockSize) == -1) {
+               ctx.blockSize = 512;    // A reasonable default
+       }
+       if (ioctl(ctx.fd, DKIOCGETBLOCKCOUNT, &blockCount) == -1) {
+               warn("Cannot block count for device %s", rawname);
+               goto done;
+       }
+       ctx.devSize = ctx.blockSize * blockCount;
+
+       if (ctx.devSize != devp->size) {
+               warnx("Device %s is not the same size (%lld) as source device (%lld)", rawname, ctx.devSize, devp->size);
+               goto done;
+       }
+
+       ctx.pathname = strdup(rawname);
+       retctx = malloc(sizeof(ctx));
+       if (retctx == NULL) {
+               warn("Cannot allocate space for device context");
+               goto done;
+       }
+       *retctx = ctx;
+       retval = malloc(sizeof(*retval));
+       if (retval == NULL) {
+               warn("Cannot allocate space for device wrapper");
+               goto done;
+       }
+       retval->context = retctx;
+       retval->reader = &doRead;
+       retval->writer = &writeExtent;
+       retval->getprog = &GetProgress;
+       retval->setprog = &SetProgress;
+       retval->cleanup = &noClean;
+
+done:
+       return retval;
+}
diff --git a/CopyHFSMeta/Gather.c b/CopyHFSMeta/Gather.c
new file mode 100644 (file)
index 0000000..27c4c7a
--- /dev/null
@@ -0,0 +1,142 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <err.h>
+#include <errno.h>
+#include <zlib.h>
+
+#include "hfsmeta.h"
+#include "Data.h"
+
+struct HFSDataObject {
+       int64_t offset;
+       int64_t size;
+};
+typedef struct HFSDataObject HFSDataObject;
+
+enum {
+       kHFSInfoHeaderVersion = 1,
+};
+
+
+#define MIN(a, b) \
+       ({ __typeof(a) __a = (a); __typeof(b) __b = (b); \
+               __a < __b ? __a : __b; })
+
+struct HFSInfoHeader {
+       uint32_t        version;
+       uint32_t        deviceBlockSize;
+       int64_t rawDeviceSize;
+       int32_t size;   // Size of header
+       int32_t objectCount;
+};
+
+static ssize_t
+WriteExtent(gzFile outf, DeviceInfo_t *devp, off_t start, off_t len)
+{
+       const size_t bufSize = 1024 * 1024;
+       uint8_t buffer[bufSize];
+       off_t total = 0;
+
+       while (total < len) {
+               ssize_t nread;
+               size_t amt = MIN(bufSize, len - total);
+               ssize_t nwritten;
+               nread = pread(devp->fd, buffer, amt, start + total);
+               if (nread == -1) {
+                       warn("Cannot read from device at offset %lld", start + total);
+                       return -1;
+               }
+               if (nread != amt) {
+                       warnx("Tried to read %zu bytes, only read %zd", amt, nread);
+               }
+               nwritten = gzwrite(outf, (char*)buffer, amt);
+               if (nwritten == -1) {
+                       warn("tried to gzwrite %zu bytes", amt);
+                       return -1;
+               } else if (nwritten != amt) {
+                       warnx("tried to gzwrite %zu bytes, only wrote %u", amt, nwritten);
+                       total += nwritten;
+               } else
+                       total += amt;
+       }
+       return 0;
+}
+
+void
+WriteGatheredData(const char *pathname, VolumeObjects_t *vop)
+{
+       int fd;
+       gzFile outf;
+       struct HFSInfoHeader hdr = { 0 };
+       HFSDataObject *objs = NULL, *op;
+       ExtentList_t *ep;
+       int i;
+
+       hdr.version = S32(kHFSInfoHeaderVersion);
+       hdr.deviceBlockSize = S32((uint32_t)vop->devp->blockSize);
+       hdr.rawDeviceSize = S64(vop->devp->size);
+       hdr.objectCount = S32(vop->count);
+       hdr.size = S32(sizeof(hdr) + sizeof(HFSDataObject) * vop->count);
+
+       objs = malloc(sizeof(HFSDataObject) * vop->count);
+       if (objs == NULL) {
+               warn("Unable to allocate space for data objects (%zu bytes)", sizeof(HFSDataObject)* vop->count);
+               goto done;
+       }
+
+       op = objs;
+       for (ep = vop->list;
+            ep;
+            ep = ep->next) {
+               int i;
+               for (i = 0; i < ep->count; i++) {
+                       op->offset = S64(ep->extents[i].base);
+                       op->size = S64(ep->extents[i].length);
+                       op++;
+               }
+       }
+
+       fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
+       if (fd == -1) {
+               warn("cannot create gather file %s", pathname);
+               goto done;
+       }
+       outf = gzdopen(fd, "wb");
+       if (outf == NULL) {
+               warn("Cannot create gz descriptor from file %s", pathname);
+               close(fd);
+               goto done;
+       }
+
+       gzwrite(outf, &hdr, sizeof(hdr));
+       gzwrite(outf, objs, sizeof(HFSDataObject) * vop->count);
+
+       int count = 0;
+       for (ep = vop->list;
+            ep;
+            ep = ep->next) {
+               int i;
+               for (i = 0; i < ep->count; i++) {
+                       if (verbose)
+                               fprintf(stderr, "Writing extent <%lld, %lld>\n", ep->extents[i].base, ep->extents[i].length);
+                       if (WriteExtent(outf, vop->devp, ep->extents[i].base, ep->extents[i].length) == -1) {
+                               if (verbose)
+                                       fprintf(stderr, "\tWrite failed\n");
+                               break;
+                       }
+                       count++;
+               }
+       }
+       gzclose(outf);
+       if (count != vop->count)
+               fprintf(stderr, "WHOAH!  we're short by %zd objects!\n", vop->count - count);
+
+
+done:
+       if (objs)
+               free(objs);
+       return;
+
+}
diff --git a/CopyHFSMeta/Makefile b/CopyHFSMeta/Makefile
new file mode 100644 (file)
index 0000000..6f49bee
--- /dev/null
@@ -0,0 +1,16 @@
+Project = CopyHFSMeta
+ProductType = tool
+Install_Dir = /System/Library/Filesystems/hfs.fs/Contents/Resources
+
+CFILES= main.c misc.c ScanExtents.c dump.c SparseBundle.c \
+       DeviceWrapper.c Gather.c \
+       ${OBJROOT}/${Project}/_version.c
+
+${OBJROOT}/${Project}/_version.c:
+       /Developer/Makefiles/bin/version.pl CopyHFSMeta > $@
+
+Extra_LD_Flags= -framework CoreFoundation -lz
+
+include $(MAKEFILEPATH)/CoreOS/ReleaseControl/BSDCommon.make
+
+
diff --git a/CopyHFSMeta/ScanExtents.c b/CopyHFSMeta/ScanExtents.c
new file mode 100644 (file)
index 0000000..ebfd33c
--- /dev/null
@@ -0,0 +1,216 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
+#include <errno.h>
+
+#include "hfsmeta.h"
+#include "Data.h"
+
+/*
+ * Functions to scan through the extents overflow file, grabbing
+ * overflow extents for the special files.
+ */
+
+/*
+ * Given an extent record, return the logical block address (in the volume)
+ * for the requested block offset into the file.  It returns 0 if it can't
+ * find it.
+ */
+static unsigned int
+FindBlock(HFSPlusExtentRecord *erp, unsigned int blockNum)
+{
+       unsigned int lba = 0;
+       unsigned int base = 0;
+       HFSPlusExtentDescriptor *ep = &(*erp)[0];
+       int i;
+
+       for (i = 0; i < kHFSPlusExtentDensity; i++) {
+               if (ep->startBlock == 0 || ep->blockCount == 0)
+                       break;
+               if ((base + S32(ep->blockCount)) > blockNum) {
+                       lba = S32(ep->startBlock) + (blockNum - base);
+                       break;
+               }
+               base += S32(ep->blockCount);
+               ep++;
+       }
+       return lba;
+}
+
+/*
+ * Get the given node from the extents-overflow file.  Returns -1 on error, and
+ * 0 on success.
+ */
+static int
+GetNode(DeviceInfo_t *devp, HFSPlusVolumeHeader *hp, int nodeNum, int blocksPerNode, void *nodePtr)
+{
+       int retval = 0;
+       unsigned char *ptr, *endPtr;
+       unsigned int offset;
+       HFSPlusExtentRecord *erp = &hp->extentsFile.extents;
+
+       ptr = nodePtr;
+       endPtr = ptr + (blocksPerNode * S32(hp->blockSize));
+       offset = nodeNum * blocksPerNode;
+
+       /*
+        * We have two block sizes to consider here.  The device blocksize, and the
+        * btree node size.
+        */
+       while (ptr < endPtr) {
+               ssize_t rv;
+               off_t lba;
+               int i;
+
+
+               lba = FindBlock(erp, offset);
+               if (lba == 0) {
+                       warnx("Cannot find block %u in extents overflow file", offset);
+                       return -1;
+               }
+               lba = lba * S32(hp->blockSize);
+               for (i = 0; i < S32(hp->blockSize) / devp->blockSize; i++) {
+//                     printf("Trying to get block %lld\n", lba + i);
+                       rv = GetBlock(devp, lba + (i * devp->blockSize), ptr);
+                       if (rv == -1) {
+                               warnx("Cannot read block %u in extents overflow file", lba + i);
+                               return -1;
+                       }
+                       ptr += devp->blockSize;
+               }
+               offset++;
+       }
+
+done:
+       return retval;
+}
+
+/*
+ * Scan through an extentes overflow node, looking for File ID's less than
+ * the first user file ID.  For each one it finds, it adds the extents to
+ * the volume structure list.  It returns the number of the next node
+ * (which will be 0 when we've hit the end of the list); it also returns 0
+ * when it encounters a CNID larger than the system files'.
+ */
+static unsigned int
+ScanNode(VolumeObjects_t *vop, uint8_t *nodePtr, size_t nodeSize, off_t blockSize)
+{
+       u_int16_t *offsetPtr;
+       BTNodeDescriptor *descp;
+       int indx;
+       int numRecords;
+       HFSPlusExtentKey *keyp;
+       HFSPlusExtentRecord *datap;
+       uint8_t *recp;
+       unsigned int retval;
+
+       descp = (BTNodeDescriptor*)nodePtr;
+
+       if (descp->kind != kBTLeafNode)
+               return 0;
+
+       numRecords = S16(descp->numRecords);
+       offsetPtr = (u_int16_t*)((uint8_t*)nodePtr + nodeSize);
+
+       retval = S32(descp->fLink);
+       for (indx = 1; indx <= numRecords; indx++) {
+               int recOffset = S16(offsetPtr[-indx]);
+               recp = nodePtr + recOffset;
+               if (recp > (nodePtr + nodeSize)) {
+                       return -1;      // Corrupt node
+               }
+               keyp = (HFSPlusExtentKey*)recp;
+               datap = (HFSPlusExtentRecord*)(recp + sizeof(HFSPlusExtentKey));
+//             printf("Node index #%d:  fileID = %u\n", indx, S32(keyp->fileID));
+               if (S32(keyp->fileID) >= kHFSFirstUserCatalogNodeID) {
+                       if (debug) printf("Done scanning extents overflow file\n");
+                       retval = 0;
+                       break;
+               } else {
+                       int i;
+                       for (i = 0; i < kHFSPlusExtentDensity; i++) {
+                               off_t start = S32((*datap)[i].startBlock) * (off_t)blockSize;
+                               off_t len = S32((*datap)[i].blockCount) * (off_t)blockSize;
+                               if (start && len)
+                                       AddExtent(vop, start, len);
+                       }
+               }
+       }
+
+       return retval;
+}
+
+/*
+ * Given a volme structure list, scan through the extents overflow file
+ * looking for system-file extents (those with a CNID < 16).  If useAltHdr
+ * is set, it'll use the extents overflow descriptor in the alternate header.
+ */
+int
+ScanExtents(VolumeObjects_t *vop, int useAltHdr)
+{
+       int retval = -1;
+       ssize_t rv;
+       char buffer[vop->devp->blockSize];
+       struct RootNode {
+               BTNodeDescriptor desc;
+               BTHeaderRec header;
+       } *headerNode;
+       HFSPlusVolumeHeader *hp;
+       HFSPlusExtentRecord *erp;
+       off_t vBlockSize;
+       size_t tBlockSize;
+       int blocksPerNode;
+       void *nodePtr = NULL;
+       unsigned int nodeNum = 0;
+
+       hp = useAltHdr ? &vop->vdp->altHeader : & vop->vdp->priHeader;
+       vBlockSize = S32(hp->blockSize);
+
+       rv = GetBlock(vop->devp, S32(hp->extentsFile.extents[0].startBlock) * vBlockSize, buffer);
+       if (rv == -1) {
+               warnx("Cannot get btree header node for extents file for %s header", useAltHdr ? "alternate" : "primary");
+               retval = -1;
+               goto done;
+       }
+       headerNode = (struct RootNode*)buffer;
+
+       if (headerNode->desc.kind != kBTHeaderNode) {
+               warnx("Root node is not a header node (%x)", headerNode->desc.kind);
+               goto done;
+       }
+
+       tBlockSize = S16(headerNode->header.nodeSize);
+       blocksPerNode = tBlockSize / vBlockSize;
+
+       nodePtr = malloc(tBlockSize);
+       if (nodePtr == NULL) {
+               warn("cannot allocate buffer for node");
+               goto done;
+       }
+       nodeNum = S32(headerNode->header.firstLeafNode);
+
+       if (debug) printf("nodenum = %u\n", nodeNum);
+
+       /*
+        * Iterate through the leaf nodes.
+        */
+       while (nodeNum != 0) {
+               if (debug) printf("Getting node %u\n", nodeNum);
+
+               rv = GetNode(vop->devp, hp, nodeNum, blocksPerNode, nodePtr);
+               if (rv == -1) {
+                       warnx("Cannot get node %u", nodeNum);
+                       retval = -1;
+                       goto done;
+               }
+               nodeNum = ScanNode(vop, nodePtr, tBlockSize, vBlockSize);
+       }
+       retval = 0;
+
+done:
+       if (nodePtr)
+               free(nodePtr);
+       return retval;
+
+}
diff --git a/CopyHFSMeta/Sparse.h b/CopyHFSMeta/Sparse.h
new file mode 100644 (file)
index 0000000..abfc008
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _SPARSE_H
+# define _SPARSE_H
+
+struct IOWrapper;
+
+extern struct IOWrapper *InitSparseBundle(const char *, DeviceInfo_t*);
+
+#endif /* _SPARSE_H */
diff --git a/CopyHFSMeta/SparseBundle.c b/CopyHFSMeta/SparseBundle.c
new file mode 100644 (file)
index 0000000..e342d47
--- /dev/null
@@ -0,0 +1,460 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <err.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <removefile.h>
+
+#include <CoreFoundation/CoreFoundation.h>
+
+#include "hfsmeta.h"
+#include "Sparse.h"
+
+/*
+ * Routines to maniupulate a sparse bundle.
+ * N.B.:  The sparse bundle format it uses is a subset of
+ * the real sparse bundle format:  no partition map, and
+ * no encryption.
+ */
+
+#define MIN(a, b) \
+       ({ __typeof(a) __a = (a); __typeof(b) __b = (b); \
+               __a < __b ? __a : __b; })
+
+/*
+ * Context for the sparse bundle routines.  The path name,
+ * size of the band files, and cached file descriptor and
+ * band numbers, to reduce the amount of pathname lookups
+ * required.
+ */
+struct SparseBundleContext {
+       char *pathname;
+       size_t bandSize;
+       int cfd;        // Cached file descriptor
+       int cBandNum;   // cached bandfile number
+};
+
+static const int kBandSize = 8388608;
+
+// Prototype bundle Info.plist file
+static const char *bundlePrototype =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+"<plist version=\"1.0\">\n"
+"<dict>\n"
+                "\t<key>CFBundleInfoDictionaryVersion</key>\n"
+                "\t<string>6.0</string>\n"
+                "\t<key>band-size</key>\n"
+                "\t<integer>%d</integer>\n"
+                "\t<key>bundle-backingstore-version</key>\n"
+                "\t<integer>1</integer>\n"
+                "\t<key>diskimage-bundle-type</key>\n"
+                "\t<string>com.apple.diskimage.sparsebundle</string>\n"
+                "\t<key>size</key>\n"
+                "\t<integer>%llu</integer>\n"
+"</dict>\n"
+       "</plist>\n";
+
+/*
+ * Read from a sparse bundle.  If the band file doesn't exist, or is shorter than
+ * what we need to get from it, we pad out with 0's.
+ */
+static ssize_t
+doSparseRead(struct IOWrapper *context, off_t offset, void *buffer, off_t len)
+{
+       struct SparseBundleContext *ctx = context->context;
+       off_t blockSize = ctx->bandSize;
+       size_t nread = 0;
+       ssize_t retval = -1;
+
+       while (nread < len) {
+               off_t bandNum = (offset + nread) / blockSize;   // Which band file to use
+               off_t bandOffset = (offset + nread) % blockSize;        // how far to go into the file
+               size_t amount = MIN(len - nread, blockSize - bandOffset);       // How many bytes to write in this band file
+               struct stat sbuf;
+               char *bandName;
+               ssize_t n;;
+               int fd;
+
+               asprintf(&bandName, "%s/bands/%x", ctx->pathname, bandNum);
+               fd = open(bandName, O_RDONLY);
+               if (fd == -1) {
+                       if (errno == ENOENT) {
+                               // Doesn't exist, so we just write zeroes
+                               free(bandName);
+                               memset(buffer + nread, 0, amount);
+                               nread += amount;
+                               continue;
+                       }
+                       warn("Cannot open band file %s for offset %llu", bandName, offset + nread);
+                       retval = -1;
+                       free(bandName);
+                       goto done;
+               }
+               n = pread(fd, (char*)buffer + nread, amount, bandOffset);
+               if (n == -1) {
+                       warn("Cannot write to band file %s/band/%x for offset %llu for amount %zu", ctx->pathname, bandNum, offset+nread, amount);
+                       close(fd);
+                       goto done;
+               }
+               if (n < amount) {       // hit EOF, pad out with zeroes
+                       memset(buffer + nread + amount, 0, amount - n);
+               }
+               nread += n;
+       }
+       retval = nread;
+done:
+       return retval;
+       
+}
+
+/*
+ * Write a chunk of data to a bundle.
+ */
+static ssize_t
+doSparseWrite(IOWrapper_t *context, off_t offset, void *buffer, size_t len)
+{
+       struct SparseBundleContext *ctx = context->context;
+       off_t blockSize = ctx->bandSize;
+       size_t written = 0;
+       ssize_t retval = -1;
+
+       while (written < len) {
+               off_t bandNum = (offset + written) / blockSize; // Which band file to use
+               off_t bandOffset = (offset + written) % blockSize;      // how far to go into the file
+               size_t amount = MIN(len - written, blockSize - bandOffset);     // How many bytes to write in this band file
+               char *bandName;
+               ssize_t nwritten;
+               int fd;
+
+               if (ctx->cfd == -1 || ctx->cBandNum != bandNum) {
+                               if (ctx->cfd != -1)
+                                       close(ctx->cfd);
+                               asprintf(&bandName, "%s/bands/%x", ctx->pathname, bandNum);
+                               fd = open(bandName, O_WRONLY | O_CREAT, 0666);
+                               if (fd == -1) {
+                                       warn("Cannot open band file %s for offset %llu", bandName, offset + written);
+                                       retval = -1;
+                                       goto done;
+                               }
+                               free(bandName);
+                               bandName = NULL;
+                               ctx->cfd = fd;
+                               ctx->cBandNum = bandNum;
+               } else {
+                       fd = ctx->cfd;
+               }
+               nwritten = pwrite(fd, (char*)buffer + written, amount, bandOffset);
+               if (nwritten == -1) {
+                       warn("Cannot write to band file %s/band/%x for offset %llu for amount %zu", ctx->pathname, bandNum, offset+written, amount);
+                       close(fd);
+                       ctx->cfd = -1;
+                       retval = -1;
+                       goto done;
+               }
+               (void)fcntl(fd, F_FULLFSYNC, 0);
+               written += nwritten;
+       }
+       retval = written;
+done:
+       return retval;
+       
+}
+
+/*
+ * Write a given extent (<start, length> pair) from an input device to the
+ * sparse bundle.  We also use a block to update progress.
+ */
+static ssize_t
+WriteExtentToSparse(struct IOWrapper * context, DeviceInfo_t *devp, off_t start, off_t len, void (^bp)(off_t))
+{
+       const size_t bufSize = 1024 * 1024;
+       uint8_t buffer[bufSize];
+       off_t total = 0;
+
+       if (debug) printf("Writing extent <%lld, %lld>\n", start, len);
+       while (total < len) {
+               ssize_t nread;
+               ssize_t nwritten;
+               size_t amt = MIN(bufSize, len - total);
+               nread = pread(devp->fd, buffer, amt, start + total);
+               if (nread == -1) {
+                       warn("Cannot read from device at offset %lld", start + total);
+                       return -1;
+               }
+               if (nread < amt) {
+                       warnx("Short read from source device -- got %zd, expected %zd", nread, amt);
+               }
+               nwritten = doSparseWrite(context, start + total, buffer, nread);
+               if (nwritten == -1)
+                       return -1;
+               bp(nread);
+               total += nread;
+       }
+       if (debug) printf("\twrote %lld\n", total);
+       return 0;
+}
+
+static const CFStringRef kBandSizeKey = CFSTR("band-size");
+static const CFStringRef kDevSizeKey = CFSTR("size");
+
+/*
+ * We need to be able to get the size of the "device" from a sparse bundle;
+ * we do this by using CF routines to parse the Info.plist file, and then
+ * get the two keys we care about:  band-size (size of the band files), and
+ * size (size -- in bytes -- of the "disk").
+ */
+static int
+GetSizesFromPlist(const char *path, size_t *bandSize, off_t *devSize)
+{
+       int retval = -1;
+       CFReadStreamRef inFile = NULL;
+       CFURLRef inFileURL = NULL;
+       CFStringRef cfPath = NULL;
+       CFPropertyListRef cfDict = NULL;
+       CFNumberRef cfVal = NULL;
+       int tmpInt;
+       long long tmpLL;
+
+
+       inFileURL = CFURLCreateFromFileSystemRepresentation(NULL, path, strlen(path), FALSE);
+       if (inFileURL == NULL) {
+               if (debug) warn("Cannot create url from pathname %s", path);
+               goto done;
+       }
+
+       inFile = CFReadStreamCreateWithFile(NULL, inFileURL);
+       if (inFile == NULL) {
+               if (debug) warn("cannot create read stream from path %s", path);
+               goto done;
+       }
+
+       if (CFReadStreamOpen(inFile) == FALSE) {
+               if (debug) warn("cannot open read stream");
+               goto done;
+       }
+
+       cfDict = CFPropertyListCreateWithStream(NULL, inFile, 0, 0, NULL, NULL);
+       if (cfDict == NULL) {
+               if (debug) warnx("cannot create propertly list from stream for path %s", path);
+               goto done;
+       }
+
+       cfVal = CFDictionaryGetValue(cfDict, kBandSizeKey);
+       if (cfVal == NULL) {
+               if (debug) warnx("cannot get bandsize key from plist");
+               goto done;
+       }
+
+       if (CFNumberGetValue(cfVal, kCFNumberIntType, &tmpInt) == false) {
+               if (debug) warnx("cannot get value from band size number");
+               goto done;
+       } else {
+               *bandSize = tmpInt;
+       }
+
+       cfVal = CFDictionaryGetValue(cfDict, kDevSizeKey);
+       if (cfVal == NULL) {
+               if (debug) warnx("cannot get dev size key from plist");
+               goto done;
+       }
+       if (CFNumberGetValue(cfVal, kCFNumberLongLongType, &tmpLL) == false) {
+               goto done;
+       } else {
+               *devSize = tmpLL;
+       }
+       retval = 0;
+
+done:
+
+       if (cfPath)
+               CFRelease(cfPath);
+       if (inFileURL)
+               CFRelease(inFileURL);
+       if (inFile)
+               CFRelease(inFile);
+       if (cfDict)
+               CFRelease(cfDict);
+       return retval;
+}
+
+#define kProgressName "HC.progress.txt"
+
+/*
+ * Get the progress state from a sparse bundle.  If it's not there, then
+ * no progress.
+ */
+static off_t
+GetProgress(struct IOWrapper *context)
+{
+       struct SparseBundleContext *ctx = context->context;
+       FILE *fp = NULL;
+       off_t retval = 0;
+       char progFile[strlen(ctx->pathname) + sizeof(kProgressName) + 2];       // '/' and NUL
+
+       sprintf(progFile, "%s/%s", ctx->pathname, kProgressName);
+       fp = fopen(progFile, "r");
+       if (fp == NULL) {
+               goto done;
+       }
+       if (fscanf(fp, "%llu", &retval) != 1) {
+               retval = 0;
+       }
+       fclose(fp);
+done:
+       return retval;
+}
+
+/*
+ * Write the progress information out.  This involves writing a file in
+ * the sparse bundle with the amount -- in bytes -- we've written so far.
+ */
+static void
+SetProgress(struct IOWrapper *context, off_t prog)
+{
+       struct SparseBundleContext *ctx = context->context;
+       FILE *fp = NULL;
+       char progFile[strlen(ctx->pathname) + sizeof(kProgressName) + 2];       // '/' and NUL
+
+       sprintf(progFile, "%s/%s", ctx->pathname, kProgressName);
+       if (prog == 0) {
+               remove(progFile);
+       } else {
+               fp = fopen(progFile, "w");
+               if (fp) {
+                       (void)fprintf(fp, "%llu\n", prog);
+                       fclose(fp);
+               }
+       }
+       return;
+}
+
+/*
+ * Clean up.  This is used when we have to initialize the bundle, but don't
+ * have any progress information -- in that case, we don't want to have any
+ * of the old band files laying around.  We use removefile() to recursively
+ * remove them, but keep the bands directory.
+ */
+int
+doCleanup(struct IOWrapper *ctx)
+{
+       struct SparseBundleContext *context = ctx->context;
+       int rv = 0;
+       char bandsDir[strlen(context->pathname) + sizeof("/bands") + 1];        // 1 for NUL
+
+       sprintf(bandsDir, "%s/bands", context->pathname);
+
+       if (debug)
+               fprintf(stderr, "Cleaning up, about to call removefile\n");
+       rv = removefile(bandsDir, NULL, REMOVEFILE_RECURSIVE | REMOVEFILE_KEEP_PARENT);
+       if (debug)
+               fprintf(stderr, "removefile returned %d\n", rv);
+
+       return (rv == 0) ? 0 : -1;
+}
+
+/*
+ * Initialize the IOWrapper structure for a sparse bundle.  This will
+ * create the bundle directory (but not its parents!) if needed, and
+ * will populate it out.  It checks to see if there is an existing bundle
+ * of the same name, and, if so, ensures that the izes are correct.  Then
+ * it sets up all the function pointers.
+ */
+struct IOWrapper *
+InitSparseBundle(const char *path, DeviceInfo_t *devp)
+{
+       struct SparseBundleContext ctx = { 0 };
+       struct SparseBundleContext *retctx = NULL;
+       IOWrapper_t *retval = NULL;
+       struct stat sb;
+       char tmpname[strlen(path) + sizeof("Info.plist") + 2];  // '/' + NUL
+
+       if (strstr(path, ".sparsebundle") == NULL) {
+               asprintf(&ctx.pathname, "%s.sparsebundle", path);
+       } else {
+               ctx.pathname = strdup(path);
+       }
+
+       if (lstat(ctx.pathname, &sb) == -1) {
+               if (errno != ENOENT) {
+                       warn("cannot check sparse bundle %s", ctx.pathname);
+                       goto done;
+               }
+               if (mkdir(ctx.pathname, 0777) == -1) {
+                       warn("cannot create sparse bundle %s", ctx.pathname);
+                       goto done;
+               }
+       } else if ((sb.st_mode & S_IFMT) != S_IFDIR) {
+               warnx("sparse bundle object %s is not a directory", ctx.pathname);
+               goto done;
+       }
+       sprintf(tmpname, "%s/Info.plist", ctx.pathname);
+       if (stat(tmpname, &sb) != -1) {
+               size_t bandSize = 0;
+               off_t devSize = 0;
+               if (GetSizesFromPlist(tmpname, &bandSize, &devSize) == -1) {
+                       warnx("Existing sparse bundle can't be parsed");
+                       goto done;
+               }
+               if (debug)
+                       printf("Existing sparse bundle size = %lld, bandsize = %zu\n", devSize, bandSize);
+
+               if (devSize != devp->size) {
+                       warnx("Existing sparse bundle size (%lld) != dev size (%lld)", devSize, devp->size);
+                       goto done;
+               }
+               ctx.bandSize = bandSize;
+       } else {
+               FILE *fp = fopen(tmpname, "w");
+               if (fp == NULL) {
+                       warn("cannot create sparse bundle info plist %s", tmpname);
+                       goto done;
+               }
+               ctx.bandSize = kBandSize;
+               fprintf(fp, bundlePrototype, kBandSize, devp->size);
+               fclose(fp);
+               sprintf(tmpname, "%s/Info.bckup", ctx.pathname);
+               fp = fopen(tmpname, "w");
+               if (fp) {
+                       fprintf(fp, bundlePrototype, kBandSize, devp->size);
+                       fclose(fp);
+               }
+               sprintf(tmpname, "%s/bands", ctx.pathname);
+               if (mkdir(tmpname, 0777) == -1) {
+                       warn("cannot create bands directory in sparse bundle %s", ctx.pathname);
+                       goto done;
+               }
+               sprintf(tmpname, "%s/token", ctx.pathname);
+               close(open(tmpname, O_CREAT | O_TRUNC, 0666));
+       }
+
+       retval = malloc(sizeof(*retval));
+       if (retval == NULL) {
+               free(retval);
+               retval = NULL;
+               goto done;
+       }
+       retctx = malloc(sizeof(*retctx));
+       if (retctx) {
+               *retctx = ctx;
+               retctx->cfd = -1;
+
+       }
+       retval->writer = &WriteExtentToSparse;
+       retval->reader = &doSparseRead;
+       retval->getprog = &GetProgress;
+       retval->setprog = &SetProgress;
+       retval->cleanup = &doCleanup;
+
+       retval->context = retctx;
+done:
+       if (retval == NULL) {
+               if (ctx.pathname)
+                       free(ctx.pathname);
+       }
+       return retval;
+}
diff --git a/CopyHFSMeta/dump.c b/CopyHFSMeta/dump.c
new file mode 100644 (file)
index 0000000..67067e4
--- /dev/null
@@ -0,0 +1,74 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#define MIN(a, b) \
+       ({ __typeof(a) _a = (a); __typeof(b) _b = (b);  \
+               (_a < _b) ? _a : _b; })
+
+enum { WIDTH = 16, };
+
+/*
+ * Debug functions only.
+ */
+void
+DumpData(const void *data, size_t len)
+{
+       unsigned char *base = (unsigned char*)data;
+       unsigned char *end = base + len;
+       unsigned char *cp = base;
+       int allzeroes = 0;
+
+       while (cp < end) {
+               unsigned char *tend = MIN(end, cp + WIDTH);
+               unsigned char *tmp;
+               int i;
+               size_t gap = (cp + WIDTH) - tend;
+
+               if (gap != 0 || tend == end)
+                       allzeroes = 0;
+               if (allzeroes) {
+                       for (tmp = cp; tmp < tend; tmp++) {
+                               if (*tmp) {
+                                       allzeroes = 0;
+                                       break;
+                               }
+                       }
+                       if (allzeroes == 1) {
+                               printf(". . .\n");
+                               allzeroes = 2;
+                       }
+                       if (allzeroes) {
+                               cp += WIDTH;
+                               continue;
+                       }
+               }
+               allzeroes = 1;
+
+               printf("%04x:  ", (int)(cp - base));
+               for (i = 0, tmp = cp; tmp < tend; tmp++) {
+                       printf("%02x", *tmp);
+                       if (++i % 2 == 0)
+                               printf(" ");
+                       if (*tmp)
+                               allzeroes = 0;
+               }
+               for (i = gap; i >= 0; i--) {
+                       printf("  ");
+                       if (i % 2 == 1)
+                               printf(" ");
+               }
+               printf("    |");
+               for (tmp = cp; tmp < tend; tmp++) {
+                       printf("%c", isalnum(*tmp) ? *tmp : '.');
+               }
+               for (i = 0; i < gap; i++) {
+                       printf(" ");
+               }
+               printf("|\n");
+               cp += WIDTH;
+       }
+
+       return;
+
+}
diff --git a/CopyHFSMeta/hfsmeta.h b/CopyHFSMeta/hfsmeta.h
new file mode 100644 (file)
index 0000000..52d9540
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _HFS_META_H
+# define _HFS_META_H
+
+# include <libkern/OSByteOrder.h>
+# include <hfs/hfs_format.h>
+
+# include "Data.h"
+
+/*
+ * The in-core description of the volume.  We care about
+ * the primary and alternate header locations, the alternate
+ * and primary journal offset locations, the size of the device,
+ * the two headers, and the two journal info blocks.
+ */
+struct VolumeDescriptor {
+       off_t priOffset;        // Offset of primary volume header
+       off_t altOffset;        // Offset of alternate volume header
+       off_t priJInfoOffset;   // Offset of journal info block from primary header
+       off_t altJInfoOffset;   // and for the alt.  May be the same as the above.
+       off_t deviceSize;       // The size of the entire device
+       JournalInfoBlock        priJournal;     // Primary journal block
+       JournalInfoBlock        altJournal;     // Alternate journal, if different
+       HFSPlusVolumeHeader priHeader;  // The primary header
+       HFSPlusVolumeHeader altHeader;  // And the alternate
+};
+typedef struct VolumeDescriptor VolumeDescriptor_t;
+
+/*
+ * The input device description.
+ */
+struct DeviceInfo {
+       char *devname;
+       int fd;
+       off_t size;
+       int blockSize;
+       off_t blockCount;
+};
+typedef struct DeviceInfo DeviceInfo_t;
+
+# define S16(x)        OSSwapBigToHostInt16(x)
+# define S32(x)        OSSwapBigToHostInt32(x)
+# define S64(x)        OSSwapBigToHostInt64(x)
+
+ssize_t GetBlock(DeviceInfo_t*, off_t, uint8_t*);
+int ScanExtents(VolumeObjects_t *, int);
+
+/*
+ * The IOWrapper structure is used to do input and output on
+ * the target -- which may be a device node, or a sparse bundle.
+ * writer() is used to copy a particular amount of data from the source device;
+ * reader() is used to get some data from the destination device (e.g., the header);
+ * getprog() is used to find what the stored progress was (if any);
+ * setprog() is used to write out the progress status so far.
+ * cleanup() is called when the copy is done.
+ */
+struct IOWrapper {
+       ssize_t (*writer)(struct IOWrapper *ctx,DeviceInfo_t *devp, off_t start, off_t len, void (^bp)(off_t));
+       ssize_t (*reader)(struct IOWrapper *ctx, off_t start, void *buffer, off_t len);
+       off_t (*getprog)(struct IOWrapper *ctx);
+       void (*setprog)(struct IOWrapper *ctx, off_t prog);
+       int (*cleanup)(struct IOWrapper *ctx);
+       void *context;
+};
+typedef struct IOWrapper IOWrapper_t;
+
+extern int debug, verbose, printProgress;
+
+#endif /* _HFS_META_H */
diff --git a/CopyHFSMeta/main.c b/CopyHFSMeta/main.c
new file mode 100644 (file)
index 0000000..ba830fd
--- /dev/null
@@ -0,0 +1,475 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <err.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/disk.h>
+#include <sys/sysctl.h>
+#include <hfs/hfs_mount.h>
+#include "hfsmeta.h"
+#include "Data.h"
+#include "Sparse.h"
+
+/*
+ * Used to automatically run a corruption program after the
+ * copying is done.  Only used during development.  Uncomment
+ * to use.
+ */
+//#define TESTINJECT   1
+
+static const char *kAppleInternal = "/AppleInternal";
+static const char *kTestProgram = "HC-Inject-Errors";
+
+int verbose;
+int debug;
+int printProgress;
+
+/*
+ * Exit status values.  We use some errno values because
+ * they are convenient.
+ * kGoodExit:  we finished copying, and no problems.
+ * kNoSpaceExit:  Not enough space for the skeleton copy.
+ * kCopyIOExit:  An I/O error occurred.  This may not be fatal,
+ *     as it may just mean the source device went away.  We
+ *     can continue later, perhaps.
+ * kIntrExit:  The copying was interrupted.  As above, this may
+ *     not be fatal.
+ * kBadExit:  Any other problem.
+ */
+enum {
+       kGoodExit = 0,
+       kNoSpaceExit = ENOSPC,
+       kCopyIOExit = EIO,
+       kIntrExit = EINTR,
+       kBadExit = 1,
+};
+
+/*
+ * Open the source device.  In addition to opening the device,
+ * this also attempts to flush the journal, and then sets up a
+ * DeviceInfo_t object that will be used when doing the actual
+ * reading.
+ */
+static DeviceInfo_t *
+OpenDevice(const char *devname)
+{
+       char *rawname;
+       DeviceInfo_t *retval = NULL;
+       int fd;
+       DeviceInfo_t dev = { 0 };
+       struct stat sb;
+       struct vfsconf vfc;
+
+       if (stat(devname, &sb) == -1) {
+               err(kBadExit, "cannot open device %s", devname);
+       }
+       /*
+        * We only allow a character device (e.g., /dev/rdisk1s2)
+        * If we're given a non-character device, we'll try to turn
+        * into a character device assuming a name pattern of /dev/rdisk*
+        */
+       if ((sb.st_mode & S_IFMT) == S_IFCHR) {
+               dev.devname = strdup(devname);
+       } else if (strncmp(devname, "/dev/disk", 9) == 0) {
+               // Turn "/dev/diskFoo" into "/dev/rdiskFoo"
+               char tmpname[strlen(devname) + 2];
+               (void)snprintf(tmpname, sizeof(tmpname), "/dev/rdisk%s", devname + sizeof("/dev/disk") - 1);
+               if (stat(tmpname, &sb) == -1) {
+                       err(kBadExit, "cannot open raw device %s", tmpname);
+               }
+               if ((sb.st_mode & S_IFMT) != S_IFCHR) {
+                       errx(kBadExit, "raw device %s is not a raw device", tmpname);
+               }
+               dev.devname = strdup(tmpname);
+       } else {
+               errx(kBadExit, "device name `%s' does not fit pattern", devname);
+       }
+       // Only use an exclusive open if we're not debugging.
+       fd = open(dev.devname, O_RDONLY | (debug ? 0 : O_EXLOCK));
+       if (fd == -1) {
+               err(kBadExit, "cannot open raw device %s", dev.devname);
+       }
+       // Get the block size and counts for the device.
+       if (ioctl(fd, DKIOCGETBLOCKSIZE, &dev.blockSize) == -1) {
+               dev.blockSize = 512;    // Sane default, I hope
+       }
+       if (ioctl(fd, DKIOCGETBLOCKCOUNT, &dev.blockCount) == -1) {
+               err(kBadExit, "cannot get size of device %s", dev.devname);
+       }
+       /*
+        * Attempt to flush the buffer.  This works even with a file descriptor
+        * opened for read-only.  If it fails, we just warn, but don't abort.
+        */
+       if (getvfsbyname("hfs", &vfc) == 0) {
+               int rv;
+               int mib[4];
+
+               mib[0] = CTL_VFS;
+               mib[1] = vfc.vfc_typenum;
+               mib[2] = HFS_REPLAY_JOURNAL;
+               mib[3] = fd;
+               if (debug)
+                       fprintf(stderr, "about to replay journal\n");
+               rv = sysctl(mib, 4, NULL, NULL, NULL, 0);
+               if (rv == -1) {
+                       warn("cannot replay journal");
+               }
+       }
+
+       dev.size = dev.blockCount * dev.blockSize;
+       dev.fd = fd;
+
+       retval = malloc(sizeof(*retval));
+       if (retval == NULL) {
+               err(kBadExit, "cannot allocate device info structure");
+       }
+       *retval = dev;
+       return retval;
+}
+
+/*
+ * Get the header and alternate header for a device.
+ */
+VolumeDescriptor_t *
+VolumeInfo(DeviceInfo_t *devp)
+{
+       uint8_t buffer[devp->blockSize];
+       VolumeDescriptor_t *vdp = NULL, vd = { 0 };
+       ssize_t rv;
+
+       vd.priOffset = 1024;    // primary volume header is at 1024 bytes
+       vd.altOffset = devp->size - 1024;       // alternate header is 1024 bytes from the end
+
+       rv = GetBlock(devp, vd.priOffset, buffer);
+       if (rv == -1) {
+               err(kBadExit, "cannot get primary volume header for device %s", devp->devname);
+       }
+       vd.priHeader = *(HFSPlusVolumeHeader*)buffer;
+
+       rv = GetBlock(devp, vd.altOffset, buffer);
+       if (rv == -1) {
+               err(kBadExit, "cannot get alternate volume header for device %s", devp->devname);
+       }
+       vd.altHeader = *(HFSPlusVolumeHeader*)buffer;
+
+       vdp = malloc(sizeof(*vdp));
+       *vdp = vd;
+
+       return vdp;
+}
+
+/*
+ * Compare two volume headers to see if they're the same.  Some fields
+ * we may not care about, so we only compare specific fields.  Note that
+ * since we're looking for equality, we don't need to byte swap.
+ */
+int
+CompareVolumeHeaders(HFSPlusVolumeHeader *left, HFSPlusVolumeHeader *right)
+{
+       if (left->signature != right->signature ||
+           left->version != right->version ||
+           left->modifyDate != right->modifyDate ||
+           left->fileCount != right->fileCount ||
+           left->folderCount != right->folderCount ||
+           left->nextAllocation != right->nextAllocation ||
+           left->nextCatalogID != right->nextCatalogID ||
+           left->writeCount != right->writeCount)
+               return 0;
+       return 1;
+}
+
+/*
+ * Only two (currently) types of signatures are valid: H+ and HX.
+ */
+static int
+IsValidSigWord(uint16_t word) {
+       if (word == kHFSPlusSigWord ||
+           word == kHFSXSigWord)
+               return 1;
+       return 0;
+}
+
+/*
+ * Add the volume headers to the in-core volume information list.
+ */
+int
+AddHeaders(VolumeObjects_t *vop)
+{
+       int retval = 1;
+       HFSPlusVolumeHeader *hp;
+       uint8_t buffer[vop->devp->blockSize];
+       ssize_t rv;
+
+       hp = &vop->vdp->priHeader;
+
+       if (IsValidSigWord(S16(hp->signature)) == 0) {
+               warnx("primary volume header signature = %x, invalid", S16(hp->signature));
+               retval = 0;
+       }
+       AddExtent(vop, 1024, 512);
+
+       hp = &vop->vdp->altHeader;
+
+       if (IsValidSigWord(S16(hp->signature)) == 0) {
+               warnx("alternate volume header signature = %x, invalid", S16(hp->signature));
+               retval = 0;
+       }
+       AddExtent(vop, vop->vdp->altOffset, 512);
+
+done:
+       return retval;
+}
+
+/*
+ * Add the journal information to the in-core volume list.
+ * This means the journal info block, the journal itself, and
+ * the contents of the same as described by the alternate volume
+ * header (if it's different from the primary volume header).
+ */
+void
+AddJournal(VolumeObjects_t *vop)
+{
+       DeviceInfo_t *devp = vop->devp;
+       uint8_t buffer[devp->blockSize];
+       ssize_t rv;
+       HFSPlusVolumeHeader *php, *ahp;
+       JournalInfoBlock *jib;
+
+       php = &vop->vdp->priHeader;
+       ahp = &vop->vdp->altHeader;
+
+       if (php->journalInfoBlock) {
+               off_t jOffset = (off_t)S32(php->journalInfoBlock) * S32(php->blockSize);
+               rv = GetBlock(devp, jOffset, buffer);
+               if (rv == -1) {
+                       err(kBadExit, "cannot get primary header's copy of journal info block");
+               }
+               AddExtent(vop, jOffset, sizeof(buffer));
+               jib = (JournalInfoBlock*)buffer;
+               if (S32(jib->flags) & kJIJournalInFSMask) {
+                       AddExtent(vop, S64(jib->offset), S64(jib->size));
+               }
+       }
+
+       if (ahp->journalInfoBlock &&
+           ahp->journalInfoBlock != php->journalInfoBlock) {
+               off_t jOffset = (off_t)S32(ahp->journalInfoBlock) * S32(ahp->blockSize);
+               rv = GetBlock(devp, jOffset, buffer);
+               if (rv == -1) {
+                       err(kBadExit, "cannot get alternate header's copy of journal info block");
+               }
+               AddExtent(vop, jOffset, sizeof(buffer));
+               jib = (JournalInfoBlock*)buffer;
+               if (S32(jib->flags) & kJIJournalInFSMask) {
+                       AddExtent(vop, S64(jib->offset), S64(jib->size));
+               }
+       }
+
+}
+
+/*
+ * Add the extents for the special files in the volume header.  Compare
+ * them with the alternate volume header's versions, and if they're different,
+ * add that as well.
+ */
+void
+AddFileExtents(VolumeObjects_t *vop)
+{
+       int useAlt = 0;
+#define ADDEXTS(vop, file) \
+       do { \
+               off_t pSize = S32(vop->vdp->priHeader.blockSize);       \
+               off_t aSize = S32(vop->vdp->altHeader.blockSize);       \
+               int i;                                                  \
+               if (debug) printf("Adding " #file " extents\n");                \
+               for (i = 0; i < kHFSPlusExtentDensity; i++) {           \
+                       HFSPlusExtentDescriptor *ep = &vop->vdp->priHeader. file .extents[i]; \
+                       HFSPlusExtentDescriptor *ap = &vop->vdp->altHeader. file .extents[i]; \
+                       if (debug) printf("\tExtent <%u, %u>\n", S32(ep->startBlock), S32(ep->blockCount)); \
+                       if (ep->startBlock && ep->blockCount) {         \
+                               AddExtent(vop, S32(ep->startBlock) * pSize, S32(ep->blockCount) * pSize); \
+                               if (memcmp(ep, ap, sizeof(*ep)) != 0) { \
+                                       AddExtent(vop, S32(ap->startBlock) * aSize, S32(ap->blockCount) * aSize); \
+                                       useAlt = 1;                     \
+                               }                                       \
+                       }                                               \
+               }                                                       \
+       } while (0)
+
+       ADDEXTS(vop, allocationFile);
+       ADDEXTS(vop, extentsFile);
+       ADDEXTS(vop, catalogFile);
+       ADDEXTS(vop, attributesFile);
+       ADDEXTS(vop, startupFile);
+
+#undef ADDEXTS
+
+       ScanExtents(vop, 0);
+       if (useAlt)
+               ScanExtents(vop, useAlt);
+
+       return;
+}
+
+static void
+usage(const char *progname)
+{
+
+       errx(kBadExit, "usage: %s [-vdpS] [-g gatherFile] [-r <bytes>] <src device> <destination>", progname);
+}
+
+
+main(int ac, char **av)
+{
+       char *src = NULL;
+       char *dst = NULL;
+       DeviceInfo_t *devp = NULL;
+       VolumeDescriptor_t *vdp = NULL;
+       VolumeObjects_t *vop = NULL;
+       IOWrapper_t *wrapper = NULL;
+       int ch;
+       off_t restart = 0;
+       int printEstimate = 0;
+       const char *progname = av[0];
+       char *gather = NULL;
+       int force = 0;
+       int retval = kGoodExit;
+
+       while ((ch = getopt(ac, av, "fvdg:Spr:")) != -1) {
+               switch (ch) {
+               case 'v':       verbose++; break;
+               case 'd':       debug++; verbose++; break;
+               case 'S':       printEstimate = 1; break;
+               case 'p':       printProgress = 1; break;
+               case 'r':       restart = strtoull(optarg, NULL, 0); break;
+               case 'g':       gather = strdup(optarg); break;
+               case 'f':       force = 1; break;
+               default:        usage(progname);
+               }
+       }
+
+       ac -= optind;
+       av += optind;
+
+       if (ac == 0 || ac > 2) {
+               usage(progname);
+       }
+       src = av[0];
+       if (ac == 2)
+               dst = av[1];
+
+       // Start by opening the input device
+       devp = OpenDevice(src);
+       if (devp == NULL) {
+               errx(kBadExit, "cannot get device information for %s", src);
+       }
+
+       // Get the volume information.
+       vdp = VolumeInfo(devp);
+
+       // Start creating the in-core volume list
+       vop = InitVolumeObject(devp, vdp);
+
+       // Add the volume headers
+       if (AddHeaders(vop) == 0) {
+               errx(kBadExit, "Invalid volume header(s) for %s", src);
+       }
+       // Add the journal and file extents
+       AddJournal(vop);
+       AddFileExtents(vop);
+
+       if (debug)
+               PrintVolumeObject(vop);
+
+       if (printEstimate) {
+               printf("Estimate %llu\n", vop->byteCount);
+       }
+
+       // Create a gatherHFS-compatible file, if requested.
+       if (gather) {
+               WriteGatheredData(gather, vop);
+       }
+
+       /*
+        * If we're given a destination, initialize it.
+        */
+       if (dst) {
+               wrapper = InitSparseBundle(dst, devp);
+       }
+
+       if (wrapper) {
+               // See if we're picking up from a previous copy
+               if (restart == 0) {
+                       restart = wrapper->getprog(wrapper);
+                       if (debug) {
+                               fprintf(stderr, "auto-restarting at offset %lld\n", restart);
+                       }
+               }
+               // "force" in this case means try even if the space estimate says we won't succeed.
+               if (force == 0) {
+                       struct statfs sfs;
+                       if (statfs(dst, &sfs) != -1) {
+                               off_t freeSpace = (off_t)sfs.f_bsize * (off_t)sfs.f_bfree;
+                               if (freeSpace < (vop->byteCount - restart)) {
+                                       errx(kNoSpaceExit, "free space (%lld) < required space (%lld)", freeSpace, vop->byteCount - restart);
+                               }
+                       }
+               }
+
+               /*
+                * If we're restarting, we need to compare the volume headers and see if
+                * they're the same.  If they're not, we need to start from the beginning.
+                */
+               if (restart) {
+                       HFSPlusVolumeHeader priHeader, altHeader;
+
+                       if (wrapper->reader(wrapper, 1024, &priHeader, sizeof(priHeader)) != -1) {
+                               if (CompareVolumeHeaders(&priHeader, &vop->vdp->priHeader) == 0) {
+                                       restart = 0;
+                               } else {
+                                       if (wrapper->reader(wrapper, vop->vdp->altOffset, &altHeader, sizeof(altHeader)) != -1) {
+                                               if (CompareVolumeHeaders(&altHeader, &vop->vdp->altHeader) == 0) {
+                                                       restart = 0;
+                                               }
+                                       }
+                               }
+                       }
+                       if (restart == 0) {
+                               if (verbose)
+                                       warnx("Destination volume does not match source, starting from beginning");
+                       }
+               }
+
+               // And start copying the objects.
+               if (CopyObjectsToDest(vop, wrapper, restart) == -1) {
+                       if (errno == EIO)
+                               retval = kCopyIOExit;
+                       else if (errno == EINTR)
+                               retval = kIntrExit;
+                       else
+                               retval = kBadExit;
+                       err(retval, "CopyObjectsToDest failed");
+               } else {
+#if TESTINJECT
+                       // Copy finished, let's see if we should run a test program
+                       if (access(kAppleInternal, 0) != -1) {
+                               char *home = getenv("HOME");
+                               if (home) {
+                                       char *pName;
+                                       pName = malloc(strlen(home) + strlen(kTestProgram) + 2);        // '/' and NUL
+                                       if (pName) {
+                                               sprintf(pName, "%s/%s", home, kTestProgram);
+                                               execl(pName, kTestProgram, dst, NULL);
+                                       }
+                               }
+                       }
+#endif
+               }
+       }
+
+       return retval;
+}
+
diff --git a/CopyHFSMeta/misc.c b/CopyHFSMeta/misc.c
new file mode 100644 (file)
index 0000000..c0c870f
--- /dev/null
@@ -0,0 +1,218 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <err.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/disk.h>
+
+#include "hfsmeta.h"
+
+#define MIN(a, b) \
+       ({ __typeof(a) __a = (a); __typeof(b) __b = (b); \
+               __a < __b ? __a : __b; })
+
+/*
+ * Get a block from a given input device.
+ */
+ssize_t
+GetBlock(DeviceInfo_t *devp, off_t offset, uint8_t *buffer)
+{
+       ssize_t retval = -1;
+       off_t baseOffset = (offset / devp->blockSize) * devp->blockSize;
+
+       retval = pread(devp->fd, buffer, devp->blockSize, baseOffset);
+       if (retval != devp->blockSize) {
+               warn("GetBlock: pread returned %zd", retval);
+       }
+       if (offset != baseOffset) {
+               size_t off = offset % devp->blockSize;
+               memmove(buffer, buffer + off, devp->blockSize - off);
+       }
+       retval = 0;
+done:
+       return retval;
+}
+
+/*
+ * Initialize a VolumeObject.  Simple function.
+ */
+VolumeObjects_t *
+InitVolumeObject(struct DeviceInfo *devp, struct VolumeDescriptor *vdp)
+{
+       VolumeObjects_t *retval = NULL;
+
+       retval = malloc(sizeof(*retval));
+       if (retval) {
+               retval->devp = devp;
+               retval->vdp = vdp;
+               retval->count = 0;
+               retval->byteCount = 0;
+               retval->list = NULL;
+       }
+
+done:
+       return retval;
+}
+
+/*
+ * Add an extent (<start, length> pair) to a volume list.
+ * Note that this doesn't try to see if an extent is already
+ * in the list; the presumption is that an fsck_hfs run will
+ * note overlapping extents in that case.  It adds the extents
+ * in groups of kExtentCount; the goal here is to minimize the
+ * number of objects we allocate, while still trying to keep
+ * the waste memory allocation low.
+ */
+int
+AddExtent(VolumeObjects_t *vdp, off_t start, off_t length)
+{
+       int retval = 0;
+       size_t indx;
+       ExtentList_t **ep = &vdp->list;
+
+       if (debug) printf("AddExtent(%p, %lld, %lld)\n", vdp, start, length);
+       while (*ep) {
+               if ((*ep)->count < kExtentCount) {
+                       indx = (*ep)->count;
+                       (*ep)->extents[indx].base = start;
+                       (*ep)->extents[indx].length = length;
+                       (*ep)->count++;
+                       break;
+               } else {
+                       ep = &(*ep)->next;
+               }
+       }
+       if (*ep == NULL) {
+               *ep = malloc(sizeof(ExtentList_t));
+               if (*ep == NULL) {
+                       err(1, "cannot allocate a new ExtentList object");
+               }
+               (*ep)->count = 1;
+               (*ep)->extents[0].base = start;
+               (*ep)->extents[0].length = length;
+               (*ep)->next = NULL;
+       }
+       vdp->count++;
+       vdp->byteCount += length;
+
+done:
+       return retval;
+}
+
+// Debugging function
+void
+PrintVolumeObject(VolumeObjects_t *vop)
+{
+       ExtentList_t *exts;
+
+       printf("Volume Information\n");
+       if (vop->devp) {
+               printf("\tDevice %s\n", vop->devp->devname);
+               printf("\t\tSize %lld\n", vop->devp->size);
+               printf("\t\tBlock size %d\n", vop->devp->blockSize);
+               printf("\t\tBlock Count %lld\n", vop->devp->blockCount);
+       }
+       printf("\tObject count %zu\n", vop->count);
+       printf("\tByte count %lld\n", vop->byteCount);
+       printf("\tExtent list:\n");
+       for (exts = vop->list;
+            exts;
+            exts = exts->next) {
+               int indx;
+               for (indx = 0; indx < exts->count; indx++) {
+                       printf("\t\t<%lld, %lld>\n", exts->extents[indx].base, exts->extents[indx].length);
+               }
+       }
+       return;
+}
+
+/*
+ * The main routine:  given a Volume descriptor, copy the metadata from it
+ * to the given destination object (a device or sparse bundle).  It keeps
+ * track of progress, and also takes an amount to skip (which happens if it's
+ * resuming an earlier, interrupted copy).
+ */
+int
+CopyObjectsToDest(VolumeObjects_t *vop, struct IOWrapper *wrapper, off_t skip)
+{
+       ExtentList_t *exts;
+       off_t total = 0;
+
+       if (skip == 0) {
+               wrapper->cleanup(wrapper);
+       }
+       for (exts = vop->list;
+            exts;
+            exts = exts->next) {
+               int indx;
+               for (indx = 0; indx < exts->count; indx++) {
+                       off_t start = exts->extents[indx].base;
+                       off_t len = exts->extents[indx].length;
+                       if (skip < len) {
+                               __block off_t totalWritten;
+                               void (^bp)(off_t);
+
+                               if (skip) {
+                                       off_t amt = MIN(skip, len);
+                                       len -= amt;
+                                       start += amt;
+                                       total += amt;
+                                       skip -= amt;
+                                       wrapper->setprog(wrapper, total);
+                                       if (debug)
+                                               printf("* * * Wrote %lld of %lld\n", total, vop->byteCount);
+                                       else
+                                               printf("%d%%\n", (int)((total * 100) / vop->byteCount));
+                                       fflush(stdout);
+                               }
+                               totalWritten = total;
+                               if (printProgress) {
+                                       bp = ^(off_t amt) {
+                                               totalWritten += amt;
+                                               wrapper->setprog(wrapper, totalWritten);
+                                               if (debug)
+                                                       printf("* * Wrote %lld of %lld (%d%%)\n", totalWritten, vop->byteCount, (int)((totalWritten * 100) / vop->byteCount));
+                                               else
+                                                       printf("%d%%\n", (int)((totalWritten * 100) / vop->byteCount));
+                                               fflush(stdout);
+                                               return;
+                                       };
+                               } else {
+                                       bp = ^(off_t amt) {
+                                               totalWritten += amt;
+                                               return;
+                                       };
+                               }
+                               if (wrapper->writer(wrapper, vop->devp, start, len, bp) == -1) {
+                                       int t = errno;
+                                       if (verbose)
+                                               warnx("Writing extent <%lld, %lld> failed", start, len);
+                                       errno = t;
+                                       return -1;
+                               }
+                               total = totalWritten;
+                       } else {
+                               skip -= len;
+                               total += len;
+                               if (printProgress) {
+                                       wrapper->setprog(wrapper, total);
+                                       if (debug)
+                                               printf("Wrote %lld of %lld\n", total, vop->byteCount);
+                                       else
+                                               printf("%d%%\n", (int)((total * 100) / vop->byteCount));
+                                       fflush(stdout);
+                               }
+                       }
+               }
+       }
+
+       if (total == vop->byteCount) {
+               wrapper->setprog(wrapper, 0);   // remove progress
+       }
+
+       return 0;
+}
index 786ad47a3cc339c34dae93e182e327ae16527750..a373447649e12f7a6a15057803edad5f9445e40e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,45 +1,6 @@
-#
-# Generated by the Apple Project Builder.
-#
-# NOTE: Do NOT change this file -- Project Builder maintains it.
-#
-# Put all of your customizations in files called Makefile.preamble
-# and Makefile.postamble (both optional), and Makefile will include them.
-#
+Project = hfs
 
-NAME = hfs
+SubProjects = hfs_util CopyHFSMeta
 
-PROJECTVERSION = 2.8
-PROJECT_TYPE = Aggregate
+include $(MAKEFILEPATH)/CoreOS/ReleaseControl/BSDCommon.make
 
-TOOLS = hfs_util
-
-OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
-
-MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
-CODE_GEN_STYLE = DYNAMIC
-MAKEFILE = aggregate.make
-LIBS =
-DEBUG_LIBS = $(LIBS)
-PROF_LIBS = $(LIBS)
-
-
-NEXTSTEP_PB_CFLAGS = -Wno-four-char-constants -Wall -Werror -D_DARWIN_USE_64_BIT_INODE
-
-
-NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
-WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
-PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
-NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
-WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
-PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
-
-include $(MAKEFILEDIR)/platform.make
-
--include Makefile.preamble
-
-include $(MAKEFILEDIR)/$(MAKEFILE)
-
--include Makefile.postamble
-
--include Makefile.dependencies
diff --git a/Makefile.postamble b/Makefile.postamble
deleted file mode 100644 (file)
index db6b4a2..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-###############################################################################
-#  Makefile.postamble
-#  Copyright 1997, Apple Computer, Inc.
-#
-#  Use this makefile, which is imported after all other makefiles, to
-#  override attributes for a project's Makefile environment. This allows you  
-#  to take advantage of the environment set up by the other Makefiles. 
-#  You can also define custom rules at the end of this file.
-#
-###############################################################################
-# 
-# These variables are exported by the standard makefiles and can be 
-# used in any customizations you make.  They are *outputs* of
-# the Makefiles and should be used, not set.
-# 
-#  PRODUCTS: products to install.  All of these products will be placed in
-#       the directory $(DSTROOT)$(INSTALLDIR)
-#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
-#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
-#  OFILE_DIR: Directory into which .o object files are generated.
-#  DERIVED_SRC_DIR: Directory used for all other derived files
-#
-#  ALL_CFLAGS:  flags to pass when compiling .c files
-#  ALL_MFLAGS:  flags to pass when compiling .m files
-#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
-#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
-#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
-#  ALL_LDFLAGS:  flags to pass when linking object files
-#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
-#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
-#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
-#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
-#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
-#
-#  NAME: name of application, bundle, subproject, palette, etc.
-#  LANGUAGE: langage in which the project is written (default "English")
-#  LOCAL_RESOURCES: localized resources (e.g. nib's, images) of project
-#  GLOBAL_RESOURCES: non-localized resources of project
-#
-#  SRCROOT:  base directory in which to place the new source files
-#  SRCPATH:  relative path from SRCROOT to present subdirectory
-#
-#  INSTALLDIR: Directory the product will be installed into by 'install' target
-#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
-#        to prefix this with DSTROOT when you use it.
-#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
-#       to prefix this with DSTROOT when you use it.
-#
-#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
-#
-###############################################################################
-
-# Some compiler flags can be overridden here for certain build situations.
-#
-#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
-#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
-#      to -g)
-#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
-#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
-#      to -O)
-#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
-#      to -pg -DPROFILE)
-#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
-#      the include path (defaults to -I.)
-#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
-#      passed to ld/libtool (defaults to nothing)
-
-
-# Library and Framework projects only:
-#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
-#      against the framework will run against the correct version even if
-#      the current version of the framework changes.  You may override this
-#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
-#      development cycle, but be sure to restore it before installing.
-
-
-# Ownership and permissions of files installed by 'install' target
-
-#INSTALL_AS_USER = root
-        # User/group ownership 
-#INSTALL_AS_GROUP = wheel
-        # (probably want to set both of these) 
-#INSTALL_PERMISSIONS =
-        # If set, 'install' chmod's executable to this
-
-
-# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
-# down further with -x or, if they load no bundles, with no options at all).
-
-#STRIPFLAGS = -S
-
-
-#########################################################################
-# Put rules to extend the behavior of the standard Makefiles here.  Include them in
-# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
-#
-# You should avoid redefining things like "install" or "app", as they are
-# owned by the top-level Makefile API and no context has been set up for where 
-# derived files should go.
-#
diff --git a/Makefile.preamble b/Makefile.preamble
deleted file mode 100644 (file)
index 6f6f22e..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-###############################################################################
-#  Makefile.preamble
-#  Copyright 1997, Apple Computer, Inc.
-#
-#  Use this makefile for configuring the standard application makefiles 
-#  associated with ProjectBuilder. It is included before the main makefile.
-#  In Makefile.preamble you set attributes for a project, so they are available
-#  to the project's makefiles.  In contrast, you typically write additional rules or 
-#  override built-in behavior in the Makefile.postamble.
-#  
-#  Each directory in a project tree (main project plus subprojects) should 
-#  have its own Makefile.preamble and Makefile.postamble.
-###############################################################################
-#
-# Before the main makefile is included for this project, you may set:
-#
-#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
-#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
-
-# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
-# inherited by all nested sub-projects, but the LOCAL_ versions of the same
-# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
-# Build Attributes inspector if at all possible.  To override the default flags
-# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
-# variables below are *inputs* to the build process and distinct from the override
-# settings done (less often) in the Makefile.postamble.
-#
-#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
-#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
-#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
-#      flags in OTHER_MFLAGS, etc.
-#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
-#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
-#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
-#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
-#      precompiling header files
-#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
-#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
-#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
-#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
-#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
-
-OTHER_CFLAGS =  
-
-# These variables provide hooks enabling you to add behavior at almost every 
-# stage of the make:
-#
-#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
-#    AFTER_PREBUILD: targets to build after installing headers for a subproject
-#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
-#    BEFORE_BUILD: targets to make before a build, but after subprojects
-#    AFTER_BUILD: targets to make after a build
-#
-#    BEFORE_INSTALL: targets to build before installing the product
-#    AFTER_INSTALL: targets to build after installing the product
-#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
-#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
-#
-#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
-#         subproject
-#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
-#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
-#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
-#
-#    BEFORE_DEPEND: targets to build before building dependencies for a
-#        subproject
-#    AFTER_DEPEND: targets to build after building dependencies for a
-#        subproject
-#
-#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
-#        updated every time the project is built.  If NO, the dependency
-#        file is only built when the depend target is invoked.
-
-# Framework-related variables:
-#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
-#      where to put the framework's DLL.  This variable defaults to 
-#      $(INSTALLDIR)/../Executables
-
-# Library-related variables:
-#    PUBLIC_HEADER_DIR:  Determines where public exported header files
-#      should be installed.  Do not include $(DSTROOT) in this value --
-#      it is prefixed automatically.
-#    PRIVATE_HEADER_DIR:  Determines where private exported header files
-#      should be installed.  Do not include $(DSTROOT) in this value --
-#      it is prefixed automatically.
-#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
-#      whether the libraries produced are statically linked when they
-#      are used or if they are dynamically loadable. <<default?>>
-#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
-#      where to put the library's DLL.  This variable defaults to 
-#      $(INSTALLDIR)/../Executables
-#
-#    INSTALL_AS_USER: owner of the intalled products (default root)
-#    INSTALL_AS_GROUP: group of the installed products (default wheel)
-#    INSTALL_PERMISSION: permissions of the installed product (default o+rX)
-#
-#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
-#      passed on the command line to recursive invocations of make.  Note that
-#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
-#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
-#      OTHER_RECURSIVE_VARIABLES. 
-
-# Additional headers to export beyond those in the PB.project:
-#    OTHER_PUBLIC_HEADERS
-#    OTHER_PROJECT_HEADERS
-#    OTHER_PRIVATE_HEADERS
-
-# Additional files for the project's product: <<path relative to proj?>>
-#    OTHER_RESOURCES: (non-localized) resources for this project
-#    OTHER_OFILES: relocatables to be linked into this project
-#    OTHER_LIBS: more libraries to link against
-#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
-#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
-#    OTHER_GARBAGE: additional files to be removed by `make clean'
-
-# Set this to YES if you don't want a final libtool call for a library/framework.
-#    BUILD_OFILES_LIST_ONLY
-
-# To include a version string, project source must exist in a directory named 
-# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
-# OTHER_GENERATED_OFILES = $(VERS_OFILE)
-
-# This definition will suppress stripping of debug symbols when an executable
-# is installed.  By default it is YES.
-# STRIP_ON_INSTALL = NO
diff --git a/PB.project b/PB.project
deleted file mode 100644 (file)
index fff5953..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    DYNAMIC_CODE_GEN = YES; 
-    FILESTABLE = {
-        H_FILES = (HFSVolumes.h); 
-        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
-        SUBPROJECTS = (hfs_util); 
-    }; 
-    LANGUAGE = English; 
-    LOCALIZABLE_FILES = {}; 
-    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
-    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
-    NEXTSTEP_COMPILEROPTIONS = "-Wno-four-char-constants"; 
-    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
-    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
-    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
-    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
-    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
-    PROJECTNAME = hfs; 
-    PROJECTTYPE = Aggregate; 
-    PROJECTVERSION = 2.8; 
-    TARGETS = (); 
-    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
-    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
-    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
-}
diff --git a/dpkg/control b/dpkg/control
new file mode 100644 (file)
index 0000000..d97b20e
--- /dev/null
@@ -0,0 +1,4 @@
+Package: hfs
+Maintainer: Darwin Developers <darwin-development@public.lists.apple.com>
+Description: HFS/HFS+ commands
+Build-Depends: build-base, diskdev-cmds, extentools, perl, corefoundation, xnu, carbonheaders, project-makefiles
diff --git a/hfs_japanese/CustomInfo.xml b/hfs_japanese/CustomInfo.xml
new file mode 100644 (file)
index 0000000..6d239da
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+    <key>Name</key>
+       <string>HFS_Japanese.kmod</string>
+    <key>Vendor</key>
+       <string>Apple</string>
+    <key>Version</key>
+       <string>0.1</string>
+    <key>Date</key>
+       <string>January 31, 2000</string>
+</dict>
+</plist>
+
diff --git a/hfs_japanese/Makefile b/hfs_japanese/Makefile
new file mode 100644 (file)
index 0000000..a328bd5
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# Generated by the Apple Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = hfs_japanese
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Kernel Extension
+
+TOOLS = hfs_japanese.kmodproj
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble\
+            CustomInfo.xml
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = kext.make
+NEXTSTEP_INSTALLDIR = /System/Library/Extensions
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+BUNDLE_EXTENSION = kext
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/hfs_japanese/Makefile.postamble b/hfs_japanese/Makefile.postamble
new file mode 100644 (file)
index 0000000..e82b537
--- /dev/null
@@ -0,0 +1,108 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
+
+SYS_EXTENSIONS_DIR = /System/Library/Extensions
+HFS_ENCODINGS_DIR = /System/Library/Filesystems/hfs.fs/Encodings
+
+after_install:
+       $(MKDIRS) $(DSTROOT)/$(HFS_ENCODINGS_DIR)
+       $(CP) $(DSTROOT)/$(SYS_EXTENSIONS_DIR)/hfs_japanese.kext/HFS_Japanese.kmod $(DSTROOT)/$(HFS_ENCODINGS_DIR)/
+       $(RM) -rf $(DSTROOT)/$(SYS_EXTENSIONS_DIR)/hfs_japanese.kext
diff --git a/hfs_japanese/Makefile.preamble b/hfs_japanese/Makefile.preamble
new file mode 100644 (file)
index 0000000..c1624b4
--- /dev/null
@@ -0,0 +1,137 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/hfs_japanese/PB.project b/hfs_japanese/PB.project
new file mode 100644 (file)
index 0000000..56f70cb
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    BUNDLE_EXTENSION = kext; 
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, CustomInfo.xml); 
+        SUBPROJECTS = (hfs_japanese.kmodproj); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_INSTALLDIR = /System/Library/Extensions; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PROJECTNAME = hfs_japanese; 
+    PROJECTTYPE = "Kernel Extension"; 
+    PROJECTVERSION = 2.8; 
+}
diff --git a/hfs_japanese/hfs_japanese.kmodproj/CFStub.h b/hfs_japanese/hfs_japanese.kmodproj/CFStub.h
new file mode 100644 (file)
index 0000000..80a6306
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.2 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <sys/types.h>
+
+#if !defined(TRUE)
+    #define TRUE       1
+#endif
+
+#if !defined(FALSE)
+    #define FALSE      0
+#endif
+
+typedef u_int8_t       UInt8;
+typedef u_int16_t      UniChar;
+typedef u_int16_t      UInt16;
+typedef u_int32_t      UInt32;
+typedef u_int32_t      UniCharCount;
+typedef unsigned char  Boolean;
+typedef unsigned char  Str31[32];
+
+
+#define kCFStringEncodingMacJapanese   1
+
+/* Values for flags argument for the conversion functions below.  These can be combined, but the three NonSpacing behavior flags are exclusive.
+*/
+enum {
+    kCFStringEncodingAllowLossyConversion = 1, // Uses fallback functions to substitutes non mappable chars
+    kCFStringEncodingBasicDirectionLeftToRight = (1 << 1), // Converted with original direction left-to-right.
+    kCFStringEncodingBasicDirectionRightToLeft = (1 << 2), // Converted with original direction right-to-left.
+    kCFStringEncodingSubstituteCombinings = (1 << 3), // Uses fallback function to combining chars.
+    kCFStringEncodingComposeCombinings = (1 << 4), // Checks mappable precomposed equivalents for decomposed sequences.  This is the default behavior.
+    kCFStringEncodingIgnoreCombinings = (1 << 5), // Ignores combining chars.
+    kCFStringEncodingUseCanonical = (1 << 6), // Always use canonical form
+    kCFStringEncodingUseHFSPlusCanonical = (1 << 7), // Always use canonical form but leaves 0x2000 ranges
+    kCFStringEncodingPrependBOM = (1 << 8), // Prepend BOM sequence (i.e. ISO2022KR)
+    kCFStringEncodingDisableCorporateArea = (1 << 9), // Disable the usage of 0xF8xx area for Apple proprietary chars in converting to UniChar, resulting loosely mapping.
+};
+
+enum {
+    kCFStringEncodingConversionSuccess = 0,
+    kCFStringEncodingInvalidInputStream = 1,
+    kCFStringEncodingInsufficientOutputBufferLength = 2,
+    kCFStringEncodingConverterUnavailable = 3,
+};
+
+
+extern UInt32 __CFToMacJapanese(UInt32 flags, const UniChar *characters,
+               UInt32 numChars, UInt8 *bytes, UInt32 maxByteLen, UInt32 *usedByteLen);
+
+extern UInt32 __CFFromMacJapanese(UInt32 flags, const UInt8 *bytes, UInt32 numBytes,
+               UniChar *characters, UInt32 maxCharLen, UInt32 *usedCharLen);
+
diff --git a/hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml b/hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml
new file mode 100644 (file)
index 0000000..bffd52d
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+<key>Module</key>
+    <dict>
+        <key>Name</key>
+            <string>HFS_Japanese.kmod</string>
+        <key>File</key>
+            <string>HFS_Japanese.kmod</string>
+        <key>Requires</key>
+            <array></array>
+        <key>Initialize</key>
+            <string>hfs_japanese_start</string>
+        <key>Finalize</key>
+            <string>hfs_japanese_stop</string>
+        <key>Target</key>
+            <string>Kernel</string>
+        <key>Format</key>
+            <string>mach-o</string>
+    </dict>
+</dict>
+</plist>
diff --git a/hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c b/hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c
new file mode 100644 (file)
index 0000000..bcf92b1
--- /dev/null
@@ -0,0 +1,2066 @@
+/* JapaneseConverter.c 
+ * Copyright 1998, Apple Computer, Inc. All rights reserved.
+ * Responsibility: Aki Inoue
+ */
+
+#include <string.h>
+#include "CFStub.h"
+
+/* Convenience functions for converter development */
+typedef struct _CFStringEncodingUnicodeTo8BitCharMap {
+    UniChar _u;
+    UInt8 _c;
+} CFStringEncodingUnicodeTo8BitCharMap;
+
+
+#define CFCharMappingDefinitionWithSize(theSize)               \
+typedef struct _CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize {\
+    UniChar startChar;\
+    UInt16 bytes[theSize];\
+} CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize;\
+static __inline__ UInt16 CFStringEncodingUnicodeTo16BitEncodingWithArray##theSize(const CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize *theTable, UInt32 numElem, UniChar character) {\
+    const CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize *p, *q, *divider;\
+    if ((character < theTable[0].startChar) || (character > theTable[numElem-1].startChar + theSize)) {\
+        return 0;\
+    }\
+    p = theTable;\
+    q = p + (numElem-1);\
+    while (p <= q) {\
+        divider = p + ((q - p) >> 1);  /* divide by 2 */\
+        if (character < divider->startChar) { q = divider - 1; }\
+        else if (character < (divider->startChar + theSize)) { return divider->bytes[character - divider->startChar]; }\
+        else { p = divider + 1; }\
+    }\
+    return 0;\
+}
+
+
+Boolean CFStringEncodingIsDecomposableCharacter(UniChar character, Boolean isHFSPlusCanonical) {
+    /* Japanese codepoints 0x3000 ~ 0x30FF */
+    static const unsigned long __JapaneseDecompBitmap[] = {
+        0x00000000, 0x00000000, 0x000AAAAA, 0xA540DB6C,        /* 0x3000 */
+        0x00000802, 0x000AAAAA, 0xA540DB6C, 0x000009E2,        /* 0x3080 */
+    };
+    return ((character > 0x3000) && (character < 0x3100) && (__JapaneseDecompBitmap[(character - 0x3000) / 32] & (1 << (31 - ((character - 0x3000) % 32)))) ? TRUE : FALSE);
+}
+
+UInt32 CFStringEncodingDecomposeCharacter(UInt32 flags, UniChar character, UniChar *characters) {
+    /* Handle HIRAGANA LETTERs */
+    switch(character) {
+        case 0x3071: *characters = 0x306F; *(characters + 1) = 0x309A; break; /* PA */
+        case 0x3074: *characters = 0x3072; *(characters + 1) = 0x309A; break; /* PI */
+        case 0x3077: *characters = 0x3075; *(characters + 1) = 0x309A; break; /* PU */
+        case 0x307A: *characters = 0x3078; *(characters + 1) = 0x309A; break; /* PE */
+
+        case 0x307D: *characters = 0x307B; *(characters + 1) = 0x309A; break; /* PO */
+        case 0x3094: *characters = 0x3046; *(characters + 1) = 0x3099; break; /* VU */
+        case 0x30D1: *characters = 0x30CF; *(characters + 1) = 0x309A; break; /* PA */
+        case 0x30D4: *characters = 0x30D2; *(characters + 1) = 0x309A; break; /* PI */
+
+        case 0x30D7: *characters = 0x30D5; *(characters + 1) = 0x309A; break; /* PU */
+        case 0x30DA: *characters = 0x30D8; *(characters + 1) = 0x309A; break; /* PE */
+        case 0x30DD: *characters = 0x30DB; *(characters + 1) = 0x309A; break; /* PO */
+        case 0x30F4: *characters = 0x30A6; *(characters + 1) = 0x3099; break; /* VU */
+
+        case 0x30F7: *characters = 0x30EF; *(characters + 1) = 0x3099; break; /* VA */
+        case 0x30F8: *characters = 0x30F0; *(characters + 1) = 0x3099; break; /* VI */
+        case 0x30F9: *characters = 0x30F1; *(characters + 1) = 0x3099; break; /* VE */
+        case 0x30FA: *characters = 0x30F2; *(characters + 1) = 0x3099; break; /* VO */
+
+    default:
+        /* the rest (41 of them) have a simple conversion */
+        *characters = character - 1;
+        *(characters + 1) = 0x3099;
+        break;
+    }
+    return 2;
+}
+
+#if 0
+CFCharMappingDefinitionWithSize(4);
+#endif
+CFCharMappingDefinitionWithSize(16);
+CFCharMappingDefinitionWithSize(32);
+
+#define NUM_TOJIS_CHARMAP 1182
+static CFStringEncodingUnicodeTo16BitCharMapWithArray16 __CFToJISCharMap [NUM_TOJIS_CHARMAP] = {
+  {0xA0, {0xA0, 0x0, 0x2171, 0x2172, 0x0, 0x5C, 0x0, 0x2178, 0x212F, 0xFD, 0x0, 0x0, 0x224C, 0x0, 0x0, 0x0, }},
+  {0xB0, {0x216B, 0x215E, 0x0, 0x0, 0x212D, 0x0, 0x2279, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0xC5, {0x2272, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0xD7, {0x215F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0xF7, {0x2160, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x391, {0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262A, 0x262B, 0x262C, 0x262D, 0x262E, 0x262F, 0x2630, }},
+  {0x3A1, {0x2631, 0x0, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637, 0x2638, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3B1, {0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F, 0x2650, }},
+  {0x3C1, {0x2651, 0x0, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, 0x2657, 0x2658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x401, {0x2727, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2721, }},
+  {0x411, {0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, 0x2732, }},
+  {0x421, {0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, 0x2751, }},
+  {0x431, {0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x275F, 0x2760, 0x2761, 0x2762, }},
+  {0x441, {0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 0x2770, 0x2771, 0x0, }},
+  {0x451, {0x2757, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2010, {0x213E, 0x0, 0x0, 0x0, 0x213D, 0x0, 0x2142, 0x0, 0x2146, 0x2147, 0x0, 0x0, 0x2148, 0x2149, 0x0, 0x0, }},
+  {0x2020, {0x2277, 0x2278, 0x0, 0x0, 0x0, 0x2145, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2030, {0x2273, 0x0, 0x216C, 0x216D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2228, 0x0, 0x0, 0x2131, 0x0, }},
+  {0x2103, {0x216E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2113, {0x2B31, 0x0, 0x0, 0x2B7B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B7D, 0xFE, }},
+  {0x212B, {0x2272, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2160, {0x2A21, 0x2A22, 0x2A23, 0x2A24, 0x2A25, 0x2A26, 0x2A27, 0x2A28, 0x2A29, 0x2A2A, 0x2A2B, 0x2A2C, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2170, {0x2A35, 0x2A36, 0x2A37, 0x2A38, 0x2A39, 0x2A3A, 0x2A3B, 0x2A3C, 0x2A3D, 0x2A3E, 0x2A3F, 0x2A40, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2190, {0x222B, 0x222C, 0x222A, 0x222D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x21C4, {0x2C4E, 0x2C4F, 0x2C4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x224D, 0x0, }},
+  {0x21D4, {0x224E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x21E6, {0x2C52, 0x2C53, 0x2C51, 0x2C54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2200, {0x224F, 0x0, 0x225F, 0x2250, 0x0, 0x0, 0x0, 0x2260, 0x223A, 0x0, 0x0, 0x223B, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2212, {0x215D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2265, 0x0, 0x0, 0x2267, 0x2167, 0x2F22, 0x225C, 0x0, }},
+  {0x2227, {0x224A, 0x224B, 0x2241, 0x2240, 0x2269, 0x226A, 0x0, 0x2F21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2168, 0x2268, 0x0, }},
+  {0x223D, {0x2266, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2252, {0x2262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2162, 0x2261, }},
+  {0x2266, {0x2165, 0x2166, 0x0, 0x0, 0x2263, 0x2264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2282, {0x223E, 0x223F, 0x0, 0x0, 0x223C, 0x223D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x22A5, {0x225D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x22BF, {0x2F23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x22EF, {0x2144, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2312, {0x225E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2460, {0x2921, 0x2922, 0x2923, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, 0x292A, 0x292B, 0x292C, 0x292D, 0x292E, 0x292F, 0x2930, }},
+  {0x2470, {0x2931, 0x2932, 0x2933, 0x2934, 0x293F, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294A, }},
+  {0x2480, {0x294B, 0x294C, 0x294D, 0x294E, 0x294F, 0x2950, 0x2951, 0x2952, 0x2972, 0x2973, 0x2974, 0x2975, 0x2976, 0x2977, 0x2978, 0x2979, }},
+  {0x2490, {0x297A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2A5D, 0x2A5E, 0x2A5F, 0x2A60, }},
+  {0x24A0, {0x2A61, 0x2A62, 0x2A63, 0x2A64, 0x2A65, 0x2A66, 0x2A67, 0x2A68, 0x2A69, 0x2A6A, 0x2A6B, 0x2A6C, 0x2A6D, 0x2A6E, 0x2A6F, 0x2A70, }},
+  {0x24B0, {0x2A71, 0x2A72, 0x2A73, 0x2A74, 0x2A75, 0x2A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2500, {0x2821, 0x282C, 0x2822, 0x282D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2823, 0x0, 0x0, 0x282E, }},
+  {0x2510, {0x2824, 0x0, 0x0, 0x282F, 0x2826, 0x0, 0x0, 0x2831, 0x2825, 0x0, 0x0, 0x2830, 0x2827, 0x283C, 0x0, 0x0, }},
+  {0x2520, {0x2837, 0x0, 0x0, 0x2832, 0x2829, 0x283E, 0x0, 0x0, 0x2839, 0x0, 0x0, 0x2834, 0x2828, 0x0, 0x0, 0x2838, }},
+  {0x2530, {0x283D, 0x0, 0x0, 0x2833, 0x282A, 0x0, 0x0, 0x283A, 0x283F, 0x0, 0x0, 0x2835, 0x282B, 0x0, 0x0, 0x283B, }},
+  {0x2542, {0x2840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2836, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x25A0, {0x2223, 0x2222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x25B2, {0x2225, 0x2224, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2227, 0x2226, 0x0, 0x0, 0x0, 0x0, }},
+  {0x25C6, {0x2221, 0x217E, 0x0, 0x0, 0x0, 0x217B, 0x0, 0x0, 0x217D, 0x217C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x25EF, {0x227E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2605, {0x217A, 0x2179, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2C36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x261C, {0x2C4A, 0x2C4B, 0x2C49, 0x2C4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2640, {0x216A, 0x0, 0x2169, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2660, {0x2C25, 0x2C23, 0x2C24, 0x2C26, 0x2C21, 0x2C27, 0x2C28, 0x2C22, 0x0, 0x0, 0x2276, 0x0, 0x0, 0x2275, 0x0, 0x2274, }},
+  {0x2776, {0x295D, 0x295E, 0x295F, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3000, {0x2121, 0x2122, 0x2123, 0x2137, 0x2C37, 0x2139, 0x213A, 0x213B, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, }},
+  {0x3010, {0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2141, 0x2F35, 0x0, 0x2F36, }},
+  {0x3020, {0x2C35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3041, {0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F, 0x2430, }},
+  {0x3051, {0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F, 0x2440, }},
+  {0x3061, {0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F, 0x2450, }},
+  {0x3071, {0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F, 0x2460, }},
+  {0x3081, {0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, 0x2470, }},
+  {0x3091, {0x2471, 0x2472, 0x2473, 0x2F49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x212B, 0x212C, 0x2135, 0x2136, 0x0, 0x0, }},
+  {0x30A1, {0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F, 0x2530, }},
+  {0x30B1, {0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F, 0x2540, }},
+  {0x30C1, {0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254A, 0x254B, 0x254C, 0x254D, 0x254E, 0x254F, 0x2550, }},
+  {0x30D1, {0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, }},
+  {0x30E1, {0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x256D, 0x256E, 0x256F, 0x2570, }},
+  {0x30F1, {0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2F4B, 0x2F4C, 0x2F4D, 0x2F4E, 0x2126, 0x213C, 0x2133, 0x2134, 0x0, 0x0, }},
+  {0x322A, {0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x2D27, 0x2D21, 0x2D2E, 0x2D31, 0x2D34, 0x2D30, 0x2D35, 0x2D33, 0x2D29, 0x2D39, 0x2D2C, }},
+  {0x323A, {0x2D2D, 0x2D32, 0x2D36, 0x2D37, 0x2D2F, 0x2D38, 0x2D28, 0x0, 0x2D2A, 0x2D2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3296, {0x2D79, 0x0, 0x2D7B, 0x2D7E, 0x0, 0x0, 0x0, 0x2D7A, 0x2D7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2D73, 0x2D74, }},
+  {0x32A6, {0x2D75, 0x2D76, 0x2D77, 0x2D78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3300, {0x2E3F, 0x0, 0x0, 0x2E29, 0x0, 0x2E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E32, 0x0, 0x0, }},
+  {0x3314, {0x2E24, 0x2E2C, 0x2E25, 0x0, 0x2E2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E40, 0x0, 0x0, 0x0, 0x2E22, 0x2E34, }},
+  {0x3326, {0x2E35, 0x2E2D, 0x0, 0x0, 0x2E41, 0x2E37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E42, 0x0, 0x2E27, 0x0, 0x0, }},
+  {0x3336, {0x2E2A, 0x0, 0x0, 0x2E30, 0x0, 0x2E36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E33, 0x0, 0x0, 0x0, }},
+  {0x3347, {0x2E43, 0x0, 0x2E21, 0x2E2F, 0x0, 0x0, 0x2E23, 0x2E28, 0x0, 0x0, 0x2E2E, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3357, {0x2E31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x337B, {0x2E6A, 0x2E69, 0x2E68, 0x2E67, 0x2E7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B3B, 0x2B3C, 0x2B3D, 0x0, 0x0, 0x0, }},
+  {0x338E, {0x2B2B, 0x2B2D, 0x2B3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B2F, 0x2B30, 0x2B32, 0x0, 0x0, 0x0, 0x2B21, 0x2B23, }},
+  {0x339E, {0x2B29, 0x2B22, 0x2B24, 0x2B27, 0x2B2A, 0x0, 0x2B25, 0x2B28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x33B0, {0x2B36, 0x2B35, 0x2B34, 0x2B33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x33C4, {0x2B2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B39, 0x0, 0x2B7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x33D4, {0x2B38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4E00, {0x306C, 0x437A, 0x0, 0x3C37, 0x0, 0x0, 0x0, 0x4B7C, 0x3E66, 0x3B30, 0x3E65, 0x323C, 0x0, 0x4954, 0x4D3F, 0x0, }},
+  {0x4E10, {0x5022, 0x312F, 0x0, 0x0, 0x336E, 0x5023, 0x4024, 0x5242, 0x3556, 0x4A3A, 0x0, 0x0, 0x0, 0x0, 0x3E67, 0x0, }},
+  {0x4E21, {0x4E3E, 0x0, 0x0, 0x0, 0x0, 0x4A42, 0x0, 0x0, 0x0, 0x5024, 0x0, 0x0, 0x4366, 0x0, 0x0, 0x0, }},
+  {0x4E31, {0x5025, 0x367A, 0x0, 0x0, 0x0, 0x5026, 0x0, 0x345D, 0x4330, 0x0, 0x3C67, 0x5027, 0x0, 0x0, 0x5028, 0x0, }},
+  {0x4E42, {0x5029, 0x4735, 0x0, 0x3557, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4737, 0x0, 0x4663, 0x3843, 0x4B33, 0x0, 0x0, }},
+  {0x4E55, {0x6949, 0x502A, 0x3E68, 0x502B, 0x3235, 0x0, 0x0, 0x0, 0x3665, 0x3870, 0x4C69, 0x0, 0x0, 0x5626, 0x0, 0x0, }},
+  {0x4E71, {0x4D70, 0x0, 0x467D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3425, 0x0, 0x3535, }},
+  {0x4E82, {0x502C, 0x0, 0x0, 0x502D, 0x4E3B, 0x0, 0x4D3D, 0x4168, 0x502F, 0x3B76, 0x4673, 0x0, 0x5032, 0x0, 0x0, 0x313E, }},
+  {0x4E92, {0x385F, 0x0, 0x385E, 0x3066, 0x0, 0x0, 0x4F4B, 0x4F4A, 0x0, 0x3A33, 0x3021, 0x0, 0x5033, 0x5034, 0x5035, 0x4B34, }},
+  {0x4EA2, {0x5036, 0x0, 0x3872, 0x3067, 0x4B72, 0x0, 0x357C, 0x0, 0x0, 0x357D, 0x357E, 0x4462, 0x4E3C, 0x0, 0x5037, 0x0, }},
+  {0x4EB3, {0x5038, 0x0, 0x0, 0x5039, 0x0, 0x0, 0x0, 0x3F4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D3A, 0x3F4E, 0x503E, }},
+  {0x4EC4, {0x503C, 0x0, 0x503D, 0x3558, 0x0, 0x0, 0x3A23, 0x3270, 0x0, 0x503B, 0x503A, 0x4A29, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4ED4, {0x3B46, 0x3B45, 0x423E, 0x503F, 0x4955, 0x4067, 0x0, 0x0, 0x0, 0x2138, 0x5040, 0x5042, 0x0, 0x0, 0x0, 0x4265, }},
+  {0x4EE4, {0x4E61, 0x304A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5041, 0x323E, 0x0, 0x3644, 0x0, 0x4367, 0x0, }},
+  {0x4EF6, {0x376F, 0x5043, 0x0, 0x0, 0x0, 0x4724, 0x0, 0x0, 0x0, 0x0, 0x0, 0x346B, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4F09, {0x5044, 0x304B, 0x0, 0x0, 0x3860, 0x346C, 0x497A, 0x4832, 0x3559, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4F1A, {0x3271, 0x0, 0x5067, 0x4541, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4F2F, {0x476C, 0x5046, 0x0, 0x0, 0x0, 0x483C, 0x0, 0x4E62, 0x0, 0x3F2D, 0x0, 0x3B47, 0x0, 0x3B77, 0x3240, 0x0, }},
+  {0x4F43, {0x4451, 0x0, 0x0, 0x4322, 0x504A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x304C, 0x4463, 0x3D3B, 0x3A34, 0x4D24, 0x0, }},
+  {0x4F53, {0x424E, 0x0, 0x323F, 0x0, 0x5049, 0x0, 0x4D3E, 0x5045, 0x5047, 0x3A6E, 0x5048, 0x5524, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4F69, {0x5050, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5053, 0x5051, 0x0, 0x0, 0x3242, 0x0, 0x4A3B, 0x504B, 0x0, 0x0, }},
+  {0x4F7B, {0x504F, 0x3873, 0x0, 0x0, 0x3B48, 0x0, 0x0, 0x0, 0x3426, 0x0, 0x0, 0x5054, 0x0, 0x504C, 0x0, 0x0, }},
+  {0x4F8B, {0x4E63, 0x0, 0x3B78, 0x0, 0x504D, 0x0, 0x5052, 0x0, 0x0, 0x0, 0x0, 0x5055, 0x0, 0x504E, 0x0, 0x0, }},
+  {0x4F9B, {0x3621, 0x0, 0x304D, 0x0, 0x0, 0x3622, 0x3241, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4FAB, {0x5525, 0x0, 0x4B79, 0x496E, 0x3874, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F2F, 0x4E37, 0x0, 0x0, 0x0, 0x0, }},
+  {0x4FBF, {0x4A58, 0x0, 0x0, 0x3738, 0x4225, 0x3264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D53, 0x0, 0x0, 0x0, 0x5059, }},
+  {0x4FD0, {0x505E, 0x505C, 0x0, 0x0, 0x5057, 0x0, 0x0, 0x422F, 0x505A, 0x0, 0x505D, 0x505B, 0x0, 0x4A5D, 0x0, 0x5058, }},
+  {0x4FE1, {0x3F2E, 0x0, 0x4B73, 0x505F, 0x5060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D24, 0x506D, 0x0, }},
+  {0x4FF3, {0x4750, 0x0, 0x4936, 0x5068, 0x0, 0x4A70, 0x0, 0x3236, 0x0, 0x0, 0x0, 0x506C, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5005, {0x5066, 0x506F, 0x0, 0x0, 0x4152, 0x0, 0x3844, 0x0, 0x475C, 0x0, 0x6047, 0x0, 0x506E, 0x455D, 0x0, 0x5063, }},
+  {0x5016, {0x3876, 0x0, 0x0, 0x3875, 0x5061, 0x0, 0x0, 0x0, 0x0, 0x3C5A, 0x0, 0x5069, 0x0, 0x4A6F, 0x434D, 0x5065, }},
+  {0x5026, {0x3771, 0x0, 0x5062, 0x506A, 0x5064, 0x4E51, 0x506B, 0x4F41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5036, {0x3666, 0x0, 0x0, 0x3770, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5070, 0x0, 0x0, }},
+  {0x5047, {0x5071, 0x5075, 0x304E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A50, 0x5074, 0x0, 0x0, 0x0, 0x0, 0x5073, 0x5077, }},
+  {0x505A, {0x5076, 0x0, 0x4464, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3772, 0x0, 0x0, 0x0, 0x0, }},
+  {0x506C, {0x5078, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C45, 0x0, 0x4226, 0x4465, 0x3676, 0x0, 0x5079, 0x0, 0x0, 0x0, }},
+  {0x507D, {0x3536, 0x0, 0x0, 0x507A, 0x0, 0x0, 0x0, 0x0, 0x507C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x508D, {0x4B35, 0x0, 0x0, 0x0, 0x3766, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B31, 0x4877, 0x507B, 0x0, 0x0, }},
+  {0x50AC, {0x3A45, 0x4D43, 0x0, 0x0, 0x0, 0x0, 0x507E, 0x5123, 0x507D, 0x3A44, 0x0, 0x3D7D, 0x0, 0x0, 0x0, 0x0, }},
+  {0x50BE, {0x3739, 0x0, 0x0, 0x0, 0x5124, 0x0, 0x0, 0x364F, 0x0, 0x0, 0x0, 0x5121, 0x5122, 0x0, 0x0, 0x462F, }},
+  {0x50CF, {0x417C, 0x0, 0x3623, 0x0, 0x0, 0x0, 0x4B4D, 0x5125, 0x0, 0x0, 0x0, 0x4E3D, 0x0, 0x0, 0x0, 0x5126, }},
+  {0x50E3, {0x5129, 0x0, 0x5127, 0x0, 0x414E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5128, 0x512A, 0x0, 0x0, 0x0, 0x0, }},
+  {0x50F5, {0x512C, 0x0, 0x0, 0x0, 0x512B, 0x0, 0x4A48, 0x0, 0x0, 0x0, 0x0, 0x3537, 0x512E, 0x512F, 0x0, 0x322F, }},
+  {0x5109, {0x512D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C74, 0x0, 0x5132, 0x5131, 0x5130, 0x0, 0x5056, }},
+  {0x511A, {0x5133, 0x0, 0x0, 0x0, 0x0, 0x3D7E, 0x0, 0x5134, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x512A, {0x4D25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C59, 0x0, 0x0, 0x0, 0x0, 0x5136, 0x0, 0x0, }},
+  {0x513A, {0x5135, 0x5138, 0x5137, 0x0, 0x0, 0x5139, 0x513A, 0x3074, 0x0, 0x3835, 0x373B, 0x3D3C, 0x437B, 0x3624, 0x4068, 0x3877, }},
+  {0x514B, {0x396E, 0x513C, 0x4C48, 0x4546, 0x0, 0x3B79, 0x0, 0x513B, 0x0, 0x513D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x455E, }},
+  {0x515C, {0x3375, 0x0, 0x0, 0x0, 0x0, 0x0, 0x513E, 0x0, 0x0, 0x467E, 0x0, 0x0, 0x4134, 0x5140, 0x5141, 0x482C, }},
+  {0x516C, {0x3878, 0x4F3B, 0x5142, 0x0, 0x0, 0x3626, 0x0, 0x0, 0x0, 0x4A3C, 0x4236, 0x3671, 0x4535, 0x0, 0x0, 0x0, }},
+  {0x517C, {0x3773, 0x0, 0x0, 0x0, 0x5143, 0x0, 0x5144, 0x0, 0x0, 0x4662, 0x315F, 0x0, 0x0, 0x5147, 0x3A7D, 0x0, }},
+  {0x518C, {0x5146, 0x3A46, 0x0, 0x5148, 0x666E, 0x5149, 0x4B41, 0x514A, 0x0, 0x514B, 0x514C, 0x3E69, 0x0, 0x3C4C, 0x0, 0x0, }},
+  {0x51A0, {0x3427, 0x0, 0x514F, 0x0, 0x514D, 0x4C3D, 0x514E, 0x0, 0x495A, 0x5150, 0x5151, 0x5152, 0x455F, 0x0, 0x0, 0x0, }},
+  {0x51B0, {0x5156, 0x5154, 0x5155, 0x5153, 0x3A63, 0x5157, 0x4C6A, 0x4E64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5158, 0x0, 0x0, }},
+  {0x51C4, {0x4028, 0x5159, 0x3D5A, 0x0, 0x0, 0x515A, 0x0, 0x437C, 0x4E3F, 0x4560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x51D6, {0x5245, 0x0, 0x0, 0x0, 0x0, 0x515B, 0x7425, 0x3645, 0x0, 0x0, 0x515C, 0x4B5E, 0x0, 0x0, 0x0, 0x0, }},
+  {0x51E6, {0x3D68, 0x427C, 0x0, 0x515E, 0x4664, 0x0, 0x0, 0x515F, 0x0, 0x0, 0x5160, 0x332E, 0x0, 0x0, 0x0, 0x5161, }},
+  {0x51F6, {0x3627, 0x0, 0x464C, 0x317A, 0x3D50, 0x0, 0x0, 0x4821, 0x5162, 0x0, 0x4561, 0x0, 0x0, 0x3F4F, 0x5163, 0x0, }},
+  {0x5206, {0x4A2C, 0x405A, 0x3422, 0x0, 0x3429, 0x5164, 0x0, 0x0, 0x5166, 0x0, 0x0, 0x373A, 0x0, 0x0, 0x5165, 0x0, }},
+  {0x5217, {0x4E73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x483D, 0x4A4C, 0x0, }},
+  {0x5227, {0x5167, 0x0, 0x4D78, 0x5168, 0x0, 0x0, 0x0, 0x5169, 0x0, 0x457E, 0x0, 0x0, 0x516A, 0x0, 0x0, 0x4029, }},
+  {0x5237, {0x3A7E, 0x3774, 0x516B, 0x3B49, 0x396F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4466, 0x516D, 0x0, 0x0, }},
+  {0x5247, {0x4227, 0x0, 0x0, 0x3A6F, 0x516E, 0x516F, 0x4130, 0x0, 0x516C, 0x0, 0x0, 0x0, 0x0, 0x5171, 0x0, 0x4B36, }},
+  {0x525B, {0x3964, 0x0, 0x0, 0x5170, 0x0, 0x0, 0x0, 0x0, 0x3775, 0x3A5E, 0x476D, 0x0, 0x0, 0x0, 0x5174, 0x5172, }},
+  {0x526F, {0x497B, 0x3E6A, 0x517B, 0x3364, 0x5175, 0x5173, 0x414F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5177, 0x0, }},
+  {0x527F, {0x5176, 0x0, 0x0, 0x0, 0x3344, 0x0, 0x0, 0x0, 0x3760, 0x517C, 0x4E2D, 0x0, 0x0, 0x0, 0x5178, 0x0, }},
+  {0x5291, {0x517D, 0x517A, 0x0, 0x5179, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E4F, 0x0, 0x0, 0x0, 0x3879, 0x3243, }},
+  {0x52A3, {0x4E74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D75, 0x4558, 0x3965, 0x5222, 0x5223, 0x0, 0x0, 0x0, 0x4E65, 0x0, }},
+  {0x52B4, {0x4F2B, 0x5225, 0x0, 0x0, 0x0, 0x387A, 0x0, 0x0, 0x5224, 0x0, 0x332F, 0x0, 0x0, 0x5226, 0x0, 0x4B56, }},
+  {0x52C5, {0x443C, 0x0, 0x4D26, 0x0, 0x4A59, 0x0, 0x0, 0x0, 0x5227, 0x0, 0x0, 0x0, 0x0, 0x7055, 0x0, 0x0, }},
+  {0x52D5, {0x4630, 0x0, 0x5228, 0x342A, 0x4C33, 0x0, 0x0, 0x0, 0x3E21, 0x5229, 0x4A67, 0x522D, 0x0, 0x402A, 0x522A, 0x3650, }},
+  {0x52E6, {0x522B, 0x342B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x372E, 0x522E, 0x0, 0x522F, }},
+  {0x52F8, {0x5230, 0x5231, 0x3C5B, 0x0, 0x0, 0x0, 0x387B, 0x4C5E, 0x0, 0x4C68, 0x4677, 0x0, 0x0, 0x4A71, 0x5232, 0x0, }},
+  {0x5308, {0x5233, 0x0, 0x0, 0x0, 0x0, 0x5235, 0x0, 0x5237, 0x5236, 0x0, 0x0, 0x0, 0x0, 0x5238, 0x323D, 0x4B4C, }},
+  {0x5319, {0x3A7C, 0x5239, 0x0, 0x0, 0x4159, 0x0, 0x0, 0x3E22, 0x3629, 0x0, 0x523A, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x532A, {0x485B, 0x0, 0x0, 0x0, 0x0, 0x523B, 0x0, 0x523C, 0x0, 0x523D, 0x0, 0x0, 0x0, 0x0, 0x523E, 0x4924, }},
+  {0x533A, {0x3668, 0x3065, 0x0, 0x0, 0x0, 0x463F, 0x523F, 0x3D3D, 0x0, 0x4069, 0x0, 0x5241, 0x5240, 0x3E23, 0x3861, 0x5243, }},
+  {0x534A, {0x483E, 0x0, 0x0, 0x5244, 0x0, 0x0, 0x0, 0x485C, 0x4234, 0x426E, 0x3628, 0x0, 0x0, 0x466E, 0x4331, 0x0, }},
+  {0x535A, {0x476E, 0x0, 0x4B4E, 0x0, 0x5246, 0x0, 0x406A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3735, 0x0, 0x0, 0x5247, }},
+  {0x536E, {0x5248, 0x312C, 0x3075, 0x346D, 0x0, 0x4228, 0x3551, 0x4D71, 0x0, 0x524B, 0x3237, 0x0, 0x0, 0x524A, 0x0, 0x0, }},
+  {0x537F, {0x362A, 0x0, 0x0, 0x524C, 0x0, 0x4C71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5396, {0x524D, 0x0, 0x4E52, 0x0, 0x387C, 0x0, 0x0, 0x0, 0x0, 0x3836, 0x524E, 0x0, 0x0, 0x0, 0x0, 0x5250, }},
+  {0x53A6, {0x524F, 0x0, 0x3F5F, 0x3139, 0x0, 0x0, 0x0, 0x315E, 0x5251, 0x0, 0x5252, 0x0, 0x0, 0x3837, 0x0, 0x0, }},
+  {0x53B6, {0x5253, 0x0, 0x0, 0x0, 0x0, 0x356E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B32, 0x5254, 0x0, 0x0, }},
+  {0x53C8, {0x4B74, 0x3A35, 0x355A, 0x4D27, 0x4150, 0x483F, 0x3C7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D47, 0x0, 0x3C68, 0x3C75, }},
+  {0x53D9, {0x3D76, 0x0, 0x4840, 0x0, 0x0, 0x0, 0x5257, 0x0, 0x3143, 0x4151, 0x387D, 0x3845, 0x3667, 0x0, 0x0, 0x525B, }},
+  {0x53E9, {0x4321, 0x427E, 0x362B, 0x3E24, 0x525C, 0x525A, 0x3244, 0x4266, 0x3C38, 0x3B4B, 0x3126, 0x0, 0x0, 0x3370, 0x3966, 0x3B4A, }},
+  {0x53FA, {0x525D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x525E, 0x0, 0x3549, 0x3346, 0x0, 0x0, 0x0, 0x3967, 0x3548, }},
+  {0x540A, {0x445F, 0x3125, 0x4631, 0x4C3E, 0x3921, 0x4D79, 0x4547, 0x387E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x541B, {0x372F, 0x0, 0x5267, 0x0, 0x3663, 0x4B4A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x485D, 0x0, 0x0, 0x5266, 0x0, }},
+  {0x542B, {0x345E, 0x5261, 0x5262, 0x5264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5265, 0x0, 0x355B, 0x3F61, 0x0, }},
+  {0x543B, {0x4A2D, 0x5263, 0x525F, 0x3863, 0x0, 0x5260, 0x0, 0x4F24, 0x0, 0x0, 0x0, 0x4A72, 0x0, 0x4468, 0x3862, 0x3970, }},
+  {0x544E, {0x5268, 0x0, 0x0, 0x465D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x545F, {0x526C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C7E, 0x0, 0x3C76, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5470, {0x526F, 0x526D, 0x0, 0x4C23, 0x0, 0x526A, 0x5273, 0x526E, 0x0, 0x0, 0x0, 0x5271, 0x3846, 0x4C3F, 0x0, 0x0, }},
+  {0x5480, {0x5272, 0x0, 0x0, 0x0, 0x5274, 0x0, 0x5276, 0x0, 0x0, 0x0, 0x0, 0x3A70, 0x4F42, 0x0, 0x526B, 0x5269, }},
+  {0x5490, {0x5275, 0x0, 0x5270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x54A2, {0x5278, 0x0, 0x5323, 0x527A, 0x0, 0x0, 0x527E, 0x0, 0x0, 0x5321, 0x527B, 0x0, 0x0, 0x533E, 0x0, 0x0, }},
+  {0x54B2, {0x3A69, 0x3331, 0x0, 0x0, 0x0, 0x0, 0x5279, 0x0, 0x0, 0x0, 0x5325, 0x3076, 0x5324, 0x0, 0x3025, 0x494A, }},
+  {0x54C2, {0x5322, 0x0, 0x527C, 0x0, 0x0, 0x5277, 0x527D, 0x3A48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x54D8, {0x5326, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3077, 0x532F, 0x0, 0x0, 0x5327, 0x5328, 0x0, }},
+  {0x54E8, {0x3E25, 0x4B69, 0x0, 0x0, 0x0, 0x532D, 0x532C, 0x0, 0x0, 0x0, 0x452F, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x54FA, {0x532E, 0x0, 0x0, 0x532B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3134, 0x0, 0x3A36, 0x3F30, 0x0, 0x0, }},
+  {0x550F, {0x5329, 0x4562, 0x0, 0x0, 0x0, 0x532A, 0x0, 0x3022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x552E, {0x5334, 0x4D23, 0x0, 0x3E27, 0x0, 0x533A, 0x0, 0x0, 0x0, 0x0, 0x5339, 0x5330, 0x0, 0x0, 0x0, 0x0, }},
+  {0x553E, {0x4243, 0x0, 0x5331, 0x0, 0x0, 0x0, 0x426F, 0x5336, 0x3E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5333, 0x0, }},
+  {0x554F, {0x4C64, 0x0, 0x0, 0x0, 0x373C, 0x0, 0x0, 0x5337, 0x5338, 0x0, 0x0, 0x0, 0x0, 0x5335, 0x533B, 0x0, }},
+  {0x5563, {0x5332, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x557B, {0x5341, 0x5346, 0x0, 0x5342, 0x0, 0x533D, 0x0, 0x0, 0x5347, 0x4131, 0x0, 0x0, 0x5349, 0x0, 0x3922, 0x533F, }},
+  {0x558B, {0x437D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5343, 0x533C, 0x342D, }},
+  {0x559C, {0x346E, 0x3365, 0x5344, 0x5340, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3776, 0x534A, 0x5348, 0x4153, 0x354A, }},
+  {0x55AC, {0x362C, 0x0, 0x5345, 0x0, 0x3674, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3144, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x55C4, {0x534E, 0x534C, 0x0, 0x5427, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x55D4, {0x5351, 0x0, 0x0, 0x0, 0x0, 0x0, 0x534B, 0x0, 0x534F, 0x0, 0x0, 0x534D, 0x0, 0x0, 0x0, 0x3B4C, }},
+  {0x55E4, {0x5350, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x55F7, {0x5353, 0x0, 0x5358, 0x0, 0x0, 0x0, 0x5356, 0x5355, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4332, }},
+  {0x5609, {0x3245, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5352, 0x0, 0x5354, 0x3E28, 0x3133, }},
+  {0x561B, {0x5357, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x325E, 0x0, }},
+  {0x562F, {0x5362, 0x0, 0x3E7C, 0x535E, 0x0, 0x535C, 0x0, 0x535D, 0x0, 0x535F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5642, {0x313D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4139, 0x0, 0x5359, 0x0, 0x535A, 0x0, }},
+  {0x565B, {0x337A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5361, 0x0, 0x0, 0x0, 0x346F, 0x0, 0x5364, }},
+  {0x566B, {0x5360, 0x5363, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A2E, 0x0, 0x0, 0x0, 0x4655, 0x0, 0x4838, }},
+  {0x5680, {0x5366, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5365, 0x3345, 0x0, 0x0, 0x5367, 0x0, 0x0, 0x0, 0x0, 0x536A, }},
+  {0x5694, {0x5369, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5368, 0x0, 0x4739, 0x0, }},
+  {0x56A5, {0x536B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x536C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x536E, }},
+  {0x56B6, {0x536D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5370, 0x0, 0x0, 0x0, 0x5373, 0x5371, 0x536F, 0x5372, 0x0, 0x0, }},
+  {0x56C8, {0x5374, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5375, 0x0, 0x0, 0x5376, 0x0, 0x5377, 0x0, 0x0, 0x0, 0x5378, }},
+  {0x56D8, {0x5145, 0x0, 0x3C7C, 0x3B4D, 0x0, 0x0, 0x3273, 0x0, 0x3078, 0x0, 0x0, 0x4344, 0x0, 0x0, 0x0, 0x0, }},
+  {0x56EE, {0x5379, 0x0, 0x3A24, 0x0, 0x304F, 0x3F5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x537A, 0x3847, 0x0, 0x0, 0x3971, }},
+  {0x56FF, {0x537C, 0x537B, 0x0, 0x0, 0x4A60, 0x537D, 0x0, 0x0, 0x0, 0x5421, 0x537E, 0x0, 0x5422, 0x0, 0x5423, 0x0, }},
+  {0x570F, {0x3777, 0x0, 0x0, 0x3160, 0x5424, 0x0, 0x0, 0x5426, 0x0, 0x5425, 0x0, 0x0, 0x0, 0x5428, 0x0, 0x0, }},
+  {0x571F, {0x455A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5429, 0x3035, 0x3A5F, 0x0, 0x0, 0x0, 0x0, 0x373D, 0x0, }},
+  {0x5730, {0x434F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x542A, 0x542B, 0x0, 0x0, 0x542D, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5740, {0x542E, 0x0, 0x3A64, 0x0, 0x0, 0x0, 0x0, 0x3651, 0x0, 0x0, 0x4B37, 0x0, 0x0, 0x0, 0x542C, 0x542F, }},
+  {0x5750, {0x3A41, 0x3923, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5761, {0x5433, 0x0, 0x0, 0x3A25, 0x0, 0x4333, 0x0, 0x0, 0x5430, 0x445A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x577F, {0x5434, 0x0, 0x0, 0x3F62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5432, 0x5435, 0x0, 0x373F, 0x0, 0x0, 0x0, }},
+  {0x5793, {0x5436, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5437, 0x0, 0x3924, }},
+  {0x57A3, {0x3340, 0x5439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x543A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x543B, 0x0, 0x0, }},
+  {0x57B3, {0x5438, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5431, 0x0, 0x0, }},
+  {0x57C3, {0x543C, 0x0, 0x0, 0x543D, 0x0, 0x0, 0x0, 0x0, 0x4B64, 0x0, 0x0, 0x3E6B, 0x0, 0x0, 0x0, 0x543F, }},
+  {0x57D3, {0x5440, 0x543E, 0x0, 0x5442, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4738, 0x0, 0x0, 0x3068, 0x4956, 0x0, 0x0, }},
+  {0x57E3, {0x5443, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x57F4, {0x3E7D, 0x0, 0x0, 0x3C39, 0x0, 0x475D, 0x3470, 0x0, 0x3A6B, 0x0, 0x0, 0x0, 0x4B59, 0x0, 0x4632, 0x0, }},
+  {0x5805, {0x3778, 0x424F, 0x0, 0x0, 0x0, 0x5441, 0x5444, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5815, {0x4244, 0x0, 0x0, 0x0, 0x5445, 0x0, 0x0, 0x0, 0x5446, 0x0, 0x0, 0x0, 0x5448, 0x0, 0x0, 0x4469, }},
+  {0x582A, {0x342E, 0x0, 0x0, 0x0, 0x0, 0x7421, 0x3161, 0x4A73, 0x0, 0x0, 0x3E6C, 0x4548, 0x0, 0x0, 0x0, 0x0, }},
+  {0x583A, {0x3A66, 0x0, 0x0, 0x544E, 0x0, 0x0, 0x4A3D, 0x4E5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x584A, {0x3274, 0x544A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x413A, 0x544D, 0x0, 0x4563, 0x0, 0x0, 0x4549, 0x4564, 0x4839, }},
+  {0x585A, {0x444D, 0x0, 0x0, 0x0, 0x3A49, 0x0, 0x0, 0x0, 0x5449, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3176, }},
+  {0x586B, {0x4536, 0x0, 0x0, 0x0, 0x0, 0x544B, 0x0, 0x5447, 0x0, 0x0, 0x3F50, 0x0, 0x0, 0x0, 0x544F, 0x0, }},
+  {0x587E, {0x3D4E, 0x0, 0x0, 0x0, 0x0, 0x362D, 0x0, 0x5450, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5893, {0x4A68, 0x0, 0x0, 0x0, 0x417D, 0x0, 0x0, 0x0, 0x0, 0x4446, 0x0, 0x0, 0x5452, 0x0, 0x0, 0x0, }},
+  {0x58A8, {0x4B4F, 0x0, 0x0, 0x5453, 0x0, 0x0, 0x5458, 0x0, 0x0, 0x0, 0x0, 0x4A2F, 0x0, 0x0, 0x0, 0x0, }},
+  {0x58B8, {0x5457, 0x5451, 0x5454, 0x5456, 0x0, 0x0, 0x3A26, 0x0, 0x0, 0x4A49, 0x0, 0x0, 0x0, 0x5459, 0x0, 0x4345, }},
+  {0x58CA, {0x3275, 0x0, 0x3E6D, 0x0, 0x0, 0x0, 0x0, 0x545B, 0x0, 0x545A, 0x0, 0x3968, 0x0, 0x545C, 0x545E, 0x545D, }},
+  {0x58DC, {0x5460, 0x0, 0x5455, 0x5462, 0x0, 0x0, 0x0, 0x0, 0x5461, 0x545F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B4E, }},
+  {0x58EC, {0x3F51, 0x0, 0x4154, 0x5463, 0x403C, 0x306D, 0x4764, 0x0, 0x0, 0x0, 0x0, 0x445B, 0x0, 0x5465, 0x5464, 0x5466, }},
+  {0x58FC, {0x5467, 0x5468, 0x0, 0x0, 0x0, 0x0, 0x5469, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A51, 0x546A, 0x0, }},
+  {0x590F, {0x3246, 0x546B, 0x0, 0x0, 0x0, 0x0, 0x4D3C, 0x3330, 0x0, 0x5249, 0x3D48, 0x423F, 0x546C, 0x4C6B, 0x0, 0x0, }},
+  {0x5922, {0x4C34, 0x0, 0x0, 0x546E, 0x0, 0x4267, 0x0, 0x4537, 0x4240, 0x4957, 0x546F, 0x5470, 0x317B, 0x0, 0x0, 0x3C3A, }},
+  {0x5932, {0x5471, 0x0, 0x0, 0x0, 0x0, 0x3050, 0x5472, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5473, 0x0, 0x0, 0x0, }},
+  {0x5944, {0x3162, 0x0, 0x0, 0x3471, 0x4660, 0x4A74, 0x0, 0x0, 0x0, 0x0, 0x5477, 0x4155, 0x5476, 0x3740, 0x0, 0x0, }},
+  {0x5954, {0x4B5B, 0x5475, 0x0, 0x4565, 0x5479, 0x0, 0x5478, 0x0, 0x0, 0x0, 0x0, 0x0, 0x547B, 0x0, 0x547A, 0x0, }},
+  {0x5965, {0x317C, 0x0, 0x547C, 0x3E29, 0x547E, 0x4325, 0x0, 0x547D, 0x0, 0x4A33, 0x0, 0x0, 0x0, 0x0, 0x3D77, 0x455B, }},
+  {0x5978, {0x5521, 0x0, 0x0, 0x0, 0x0, 0x3925, 0x0, 0x0, 0x0, 0x5522, 0x4721, 0x485E, 0x4C51, 0x0, 0x0, 0x0, }},
+  {0x598A, {0x4725, 0x0, 0x0, 0x552B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3538, 0x0, 0x0, 0x4D45, 0x0, 0x0, 0x4C2F, }},
+  {0x599B, {0x562C, 0x0, 0x5523, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5526, 0x0, 0x4245, 0x0, 0x0, 0x4B38, 0x0, 0x0, }},
+  {0x59AC, {0x454A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5527, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B65, 0x0, 0x3A4A, }},
+  {0x59BE, {0x3E2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5528, 0x0, 0x0, 0x3B50, 0x0, 0x3B4F, 0x0, 0x0, }},
+  {0x59D0, {0x3039, 0x3848, 0x0, 0x402B, 0x3051, 0x0, 0x0, 0x0, 0x0, 0x552C, 0x552D, 0x0, 0x552A, 0x0, 0x0, 0x0, }},
+  {0x59E5, {0x3138, 0x342F, 0x0, 0x5529, 0x0, 0x4C45, 0x4931, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x59F6, {0x3028, 0x0, 0x0, 0x0, 0x0, 0x3079, 0x0, 0x0, 0x0, 0x3B51, 0x0, 0x3052, 0x0, 0x3023, 0x0, 0x0, }},
+  {0x5A09, {0x5532, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5530, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C3C, }},
+  {0x5A1A, {0x5533, 0x0, 0x5531, 0x0, 0x0, 0x552F, 0x3F31, 0x0, 0x0, 0x0, 0x0, 0x552E, 0x0, 0x0, 0x0, 0x4A5A, }},
+  {0x5A2F, {0x3864, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5537, 0x5538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E2B, 0x0, 0x0, }},
+  {0x5A40, {0x5534, 0x4F2C, 0x0, 0x0, 0x0, 0x0, 0x474C, 0x0, 0x0, 0x5536, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5A5A, {0x3A27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5539, 0x0, 0x0, 0x0, 0x4958, 0x0, 0x0, 0x0, }},
+  {0x5A6A, {0x553A, 0x0, 0x5535, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5A7F, {0x4C3B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5A92, {0x475E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x553B, 0x4932, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5ABC, {0x553C, 0x5540, 0x553D, 0x0, 0x0, 0x3247, 0x553F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C3B, 0x0, 0x553E, }},
+  {0x5ACC, {0x3779, 0x0, 0x0, 0x0, 0x554C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5545, 0x5542, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5AE1, {0x4364, 0x0, 0x5541, 0x0, 0x0, 0x5543, 0x0, 0x0, 0x5544, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5AFA, {0x5546, 0x5547, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3472, }},
+  {0x5B0B, {0x5549, 0x5548, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554A, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5B22, {0x3E6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554D, 0x0, 0x445C, 0x0, 0x0, 0x0, 0x3145, 0x0, }},
+  {0x5B32, {0x554B, 0x0, 0x0, 0x0, 0x554E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554F, 0x0, 0x5552, 0x0, }},
+  {0x5B43, {0x5550, 0x0, 0x5551, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B52, 0x5553, 0x0, }},
+  {0x5B54, {0x3926, 0x5554, 0x0, 0x3B7A, 0x4238, 0x0, 0x5555, 0x5556, 0x3B5A, 0x3927, 0x0, 0x4C52, 0x0, 0x0, 0x0, 0x3528, }},
+  {0x5B64, {0x3849, 0x5557, 0x3358, 0x0, 0x0, 0x5558, 0x0, 0x4239, 0x0, 0x0, 0x0, 0x0, 0x5559, 0x5623, 0x0, 0x555A, }},
+  {0x5B75, {0x555B, 0x0, 0x0, 0x555C, 0x0, 0x555E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x555F, 0x0, 0x0, 0x5560, 0x0, }},
+  {0x5B85, {0x4270, 0x0, 0x3127, 0x3C69, 0x3042, 0x0, 0x4157, 0x3430, 0x3C35, 0x0, 0x3928, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5B95, {0x4566, 0x0, 0x3D21, 0x3431, 0x4368, 0x446A, 0x3038, 0x3539, 0x4A75, 0x0, 0x3C42, 0x0, 0x0, 0x3552, 0x406B, 0x3C3C, }},
+  {0x5BA5, {0x4D28, 0x5561, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x355C, 0x0, 0x3A4B, 0x0, 0x0, 0x3332, 0x3163, }},
+  {0x5BB5, {0x3E2C, 0x3248, 0x0, 0x5562, 0x4D46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D49, 0x0, 0x0, 0x3C64, 0x5563, 0x3473, }},
+  {0x5BC5, {0x4652, 0x4C29, 0x5564, 0x0, 0x5565, 0x0, 0x0, 0x4959, 0x0, 0x0, 0x0, 0x5567, 0x0, 0x3428, 0x3677, 0x5566, }},
+  {0x5BDB, {0x3432, 0x0, 0x3F32, 0x556B, 0x3B21, 0x0, 0x3249, 0x556A, 0x0, 0x5568, 0x556C, 0x5569, 0x472B, 0x5C4D, 0x3F33, 0x0, }},
+  {0x5BEB, {0x556D, 0x0, 0x0, 0x4E40, 0x0, 0x556E, 0x0, 0x0, 0x5570, 0x0, 0x437E, 0x556F, 0x0, 0x4023, 0x0, 0x3B7B, }},
+  {0x5BFE, {0x4250, 0x3C77, 0x0, 0x4975, 0x406C, 0x0, 0x3C4D, 0x5571, 0x3E2D, 0x5572, 0x5573, 0x3053, 0x423A, 0x3F52, 0x0, 0x5574, }},
+  {0x5C0E, {0x4633, 0x3E2E, 0x0, 0x3E2F, 0x0, 0x5575, 0x0, 0x0, 0x406D, 0x0, 0x0, 0x0, 0x3E30, 0x0, 0x0, 0x0, }},
+  {0x5C20, {0x5576, 0x0, 0x5577, 0x0, 0x4C60, 0x0, 0x0, 0x0, 0x5578, 0x0, 0x0, 0x0, 0x0, 0x3646, 0x0, 0x0, }},
+  {0x5C31, {0x3D22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5579, 0x557A, 0x3C5C, 0x3F2C, 0x4674, 0x3F54, 0x4878, 0x4722, 0x3649, }},
+  {0x5C41, {0x557B, 0x0, 0x0, 0x0, 0x356F, 0x557C, 0x0, 0x367E, 0x0, 0x464F, 0x3230, 0x0, 0x3B53, 0x557D, 0x5622, 0x5621, }},
+  {0x5C51, {0x367D, 0x0, 0x557E, 0x0, 0x4538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4230, 0x0, 0x454B, }},
+  {0x5C61, {0x3C48, 0x0, 0x0, 0x4158, 0x4D7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5624, 0x0, 0x5625, 0x4656, 0x0, }},
+  {0x5C71, {0x3B33, 0x0, 0x0, 0x0, 0x0, 0x5627, 0x0, 0x0, 0x5628, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5C8C, {0x5629, 0x0, 0x0, 0x0, 0x3474, 0x562A, 0x0, 0x0, 0x562B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5CA1, {0x322C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x413B, 0x3464, 0x0, 0x562D, 0x4C28, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5CB1, {0x4252, 0x0, 0x3359, 0x0, 0x0, 0x562F, 0x5631, 0x345F, 0x0, 0x0, 0x562E, 0x5630, 0x0, 0x5633, 0x0, 0x0, }},
+  {0x5CC5, {0x5632, 0x0, 0x5634, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5CD9, {0x5635, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x463D, 0x362E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3265, }},
+  {0x5CE9, {0x5636, 0x563B, 0x0, 0x0, 0x5639, 0x0, 0x4A77, 0x4A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4567, 0x0, 0x0, }},
+  {0x5CFA, {0x5638, 0x3D54, 0x0, 0x5637, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F72, 0x0, 0x0, }},
+  {0x5D0B, {0x563C, 0x0, 0x0, 0x3A6A, 0x0, 0x0, 0x5642, 0x0, 0x0, 0x5643, 0x563D, 0x3333, 0x563E, 0x5647, 0x5646, 0x5645, }},
+  {0x5D1B, {0x5641, 0x0, 0x0, 0x0, 0x5640, 0x0, 0x0, 0x5644, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A78, 0x0, }},
+  {0x5D4B, {0x564B, 0x5648, 0x0, 0x564A, 0x0, 0x4D72, 0x0, 0x5649, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5D5C, {0x563F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F73, 0x0, 0x0, }},
+  {0x5D6C, {0x564C, 0x0, 0x0, 0x3A37, 0x0, 0x0, 0x0, 0x564D, 0x0, 0x0, 0x564E, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5D82, {0x5651, 0x0, 0x5650, 0x0, 0x0, 0x564F, 0x0, 0x0, 0x0, 0x4568, 0x563A, 0x0, 0x0, 0x0, 0x5657, 0x0, }},
+  {0x5D9D, {0x5653, 0x0, 0x0, 0x0, 0x0, 0x5652, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5654, }},
+  {0x5DAE, {0x5655, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5658, 0x0, 0x0, 0x4E66, 0x0, 0x5659, 0x5656, }},
+  {0x5DC9, {0x565A, 0x0, 0x0, 0x3460, 0x565B, 0x0, 0x0, 0x0, 0x0, 0x565D, 0x565C, 0x0, 0x0, 0x565E, 0x0, 0x0, }},
+  {0x5DDB, {0x565F, 0x0, 0x406E, 0x3D23, 0x0, 0x0, 0x3D64, 0x0, 0x4163, 0x0, 0x3929, 0x3A38, 0x392A, 0x3570, 0x0, 0x0, }},
+  {0x5DEB, {0x5660, 0x0, 0x0, 0x3A39, 0x0, 0x0, 0x384A, 0x5661, 0x4C26, 0x4743, 0x5662, 0x0, 0x392B, 0x0, 0x0, 0x0, }},
+  {0x5DFB, {0x342C, 0x0, 0x4327, 0x3652, 0x0, 0x0, 0x0, 0x3B54, 0x495B, 0x0, 0x0, 0x4841, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5E0B, {0x5663, 0x3475, 0x0, 0x0, 0x0, 0x0, 0x5666, 0x0, 0x0, 0x0, 0x0, 0x4421, 0x0, 0x0, 0x5665, 0x5664, }},
+  {0x5E1B, {0x5667, 0x0, 0x446B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F63, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5E2B, {0x3B55, 0x0, 0x404A, 0x0, 0x4253, 0x3522, 0x0, 0x0, 0x4422, 0x0, 0x0, 0x5668, 0x5669, 0x3E6F, 0x0, 0x0, }},
+  {0x5E3D, {0x4B39, 0x0, 0x0, 0x566C, 0x0, 0x0, 0x566B, 0x566A, 0x497D, 0x0, 0x5673, 0x0, 0x0, 0x0, 0x0, 0x4B5A, }},
+  {0x5E4E, {0x566D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x566F, 0x4B6B, 0x0, 0x566E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5E5F, {0x5670, 0x0, 0x4828, 0x5671, 0x4A3E, 0x5672, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5E72, {0x3433, 0x4A3F, 0x472F, 0x5674, 0x5675, 0x0, 0x392C, 0x3434, 0x5676, 0x3838, 0x4D44, 0x4D29, 0x3476, 0x5678, 0x0, 0x4423, }},
+  {0x5E83, {0x392D, 0x3E31, 0x0, 0x0, 0x485F, 0x0, 0x0, 0x3E32, 0x0, 0x0, 0x0, 0x0, 0x3D78, 0x0, 0x0, 0x0, }},
+  {0x5E95, {0x446C, 0x4A79, 0x4539, 0x0, 0x0, 0x392E, 0x0, 0x495C, 0x0, 0x0, 0x0, 0x5679, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5EA6, {0x4559, 0x3A42, 0x0, 0x0, 0x0, 0x384B, 0x0, 0x446D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3043, }},
+  {0x5EB6, {0x3D6E, 0x392F, 0x4D47, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x567A, 0x567B, 0x4751, 0x0, 0x0, }},
+  {0x5EC8, {0x567C, 0x4E77, 0x4F2D, 0x0, 0x0, 0x0, 0x0, 0x567E, 0x567D, 0x0, 0x0, 0x3347, 0x0, 0x0, 0x5721, 0x0, }},
+  {0x5EDA, {0x5724, 0x5725, 0x0, 0x5723, 0x0, 0x4940, 0x3E33, 0x5727, 0x5726, 0x5722, 0x0, 0x0, 0x0, 0x0, 0x5728, 0x5729, }},
+  {0x5EEC, {0x572A, 0x0, 0x0, 0x0, 0x572D, 0x572B, 0x0, 0x572C, 0x572E, 0x0, 0x3164, 0x446E, 0x572F, 0x0, 0x377A, 0x3276, }},
+  {0x5EFC, {0x4736, 0x0, 0x5730, 0x467B, 0x0, 0x4A5B, 0x0, 0x5731, 0x4F2E, 0x0, 0x0, 0x0, 0x0, 0x5732, 0x4A40, 0x5735, }},
+  {0x5F0C, {0x5021, 0x5031, 0x0, 0x3C30, 0x4675, 0x5736, 0x0, 0x355D, 0x4424, 0x307A, 0x5737, 0x4A26, 0x3930, 0x0, 0x0, 0x4350, }},
+  {0x5F1F, {0x446F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C6F, 0x3839, 0x384C, 0x0, 0x5738, 0x0, 0x0, 0x0, 0x5739, 0x0, }},
+  {0x5F2F, {0x573F, 0x0, 0x3C65, 0x0, 0x0, 0x0, 0x4425, 0x0, 0x362F, 0x573A, 0x0, 0x0, 0x0, 0x492B, 0x0, 0x4346, }},
+  {0x5F41, {0x573B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x573C, 0x0, 0x3630, 0x0, 0x573D, 0x0, 0x573E, 0x0, 0x0, }},
+  {0x5F51, {0x5740, 0x0, 0x4576, 0x0, 0x0, 0x5741, 0x5742, 0x0, 0x5743, 0x0, 0x0, 0x5734, 0x5733, 0x0, 0x0, 0x0, }},
+  {0x5F61, {0x5744, 0x3741, 0x0, 0x0, 0x0, 0x4927, 0x0, 0x0, 0x3A4C, 0x4937, 0x4426, 0x494B, 0x5745, 0x0, 0x0, 0x3E34, }},
+  {0x5F71, {0x3146, 0x0, 0x5746, 0x0, 0x0, 0x0, 0x5747, 0x0, 0x4C72, 0x0, 0x0, 0x4860, 0x0, 0x0, 0x574A, 0x317D, }},
+  {0x5F81, {0x402C, 0x5749, 0x5748, 0x3742, 0x4254, 0x0, 0x574E, 0x574C, 0x0, 0x574B, 0x4E27, 0x3865, 0x0, 0x0, 0x0, 0x3D79, }},
+  {0x5F91, {0x574D, 0x454C, 0x3D3E, 0x0, 0x0, 0x0, 0x4640, 0x5751, 0x5750, 0x0, 0x0, 0x0, 0x0, 0x574F, 0x0, 0x5752, }},
+  {0x5FA1, {0x3866, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5753, 0x497C, 0x3D5B, 0x0, 0x0, 0x5754, 0x4879, 0x0, 0x0, }},
+  {0x5FB3, {0x4641, 0x4427, 0x0, 0x0, 0x0, 0x0, 0x4530, 0x0, 0x0, 0x5755, 0x352B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5FC3, {0x3F34, 0x0, 0x492C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3477, 0x4726, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5FD6, {0x5756, 0x3B56, 0x4B3A, 0x4B3B, 0x0, 0x0, 0x317E, 0x575B, 0x0, 0x0, 0x4369, 0x0, 0x0, 0x0, 0x5758, 0x0, }},
+  {0x5FEB, {0x3277, 0x0, 0x0, 0x0, 0x0, 0x582D, 0x575A, 0x0, 0x0, 0x0, 0x4730, 0x0, 0x0, 0x5759, 0x0, 0x0, }},
+  {0x5FFB, {0x5757, 0x0, 0x397A, 0x0, 0x575D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x600E, {0x5763, 0x5769, 0x5761, 0x0, 0x455C, 0x0, 0x0, 0x5766, 0x495D, 0x0, 0x0, 0x5760, 0x0, 0x5765, 0x4E67, 0x3B57, }},
+  {0x6020, {0x4255, 0x575E, 0x0, 0x0, 0x0, 0x355E, 0x5768, 0x402D, 0x3165, 0x5762, 0x3278, 0x5767, 0x0, 0x0, 0x0, 0x3631, }},
+  {0x6031, {0x5764, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x576A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6041, {0x576C, 0x5776, 0x5774, 0x0, 0x0, 0x5771, 0x0, 0x0, 0x0, 0x5770, 0x4E78, 0x0, 0x5772, 0x0, 0x0, 0x3632, }},
+  {0x6052, {0x3931, 0x0, 0x0, 0x3D7A, 0x0, 0x0, 0x0, 0x5779, 0x576B, 0x0, 0x0, 0x0, 0x0, 0x576F, 0x575F, 0x0, }},
+  {0x6062, {0x327A, 0x5773, 0x5775, 0x4351, 0x0, 0x0, 0x3A28, 0x3238, 0x576D, 0x5778, 0x5777, 0x3633, 0x0, 0x4229, 0x3366, 0x0, }},
+  {0x6075, {0x3743, 0x0, 0x576E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x577A, 0x0, 0x577D, 0x5821, }},
+  {0x6089, {0x3C3D, 0x0, 0x5827, 0x4470, 0x577B, 0x0, 0x0, 0x0, 0x0, 0x5825, 0x0, 0x3279, 0x0, 0x5823, 0x5824, 0x0, }},
+  {0x609A, {0x577E, 0x5822, 0x0, 0x0, 0x0, 0x3867, 0x4D2A, 0x0, 0x0, 0x3435, 0x0, 0x0, 0x3159, 0x5826, 0x0, 0x473A, }},
+  {0x60AA, {0x302D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4861, 0x575C, 0x582C, 0x5830, 0x4C65, 0x0, 0x5829, 0x0, }},
+  {0x60BC, {0x4569, 0x582E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E70, 0x582F, 0x4657, 0x0, 0x0, 0x0, 0x0, }},
+  {0x60D1, {0x4F47, 0x0, 0x582B, 0x0, 0x0, 0x0, 0x0, 0x5831, 0x0, 0x397B, 0x0, 0x404B, 0x0, 0x0, 0x3054, 0x582A, }},
+  {0x60E1, {0x5828, 0x0, 0x415A, 0x0, 0x0, 0x0, 0x577C, 0x3B34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4246, }},
+  {0x60F1, {0x583D, 0x0, 0x415B, 0x5838, 0x0, 0x5835, 0x5836, 0x0, 0x3C66, 0x5839, 0x583C, 0x0, 0x0, 0x0, 0x0, 0x5837, }},
+  {0x6101, {0x3D25, 0x0, 0x583A, 0x0, 0x0, 0x5834, 0x0, 0x4C7C, 0x4C7B, 0x0, 0x0, 0x0, 0x583E, 0x583F, 0x3055, 0x0, }},
+  {0x6115, {0x5833, 0x0, 0x0, 0x0, 0x0, 0x3672, 0x3026, 0x0, 0x0, 0x0, 0x3436, 0x0, 0x583B, 0x0, 0x0, 0x0, }},
+  {0x6127, {0x5843, 0x5842, 0x0, 0x0, 0x0, 0x5847, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5848, 0x0, 0x0, }},
+  {0x613C, {0x5846, 0x5849, 0x5841, 0x5845, 0x0, 0x0, 0x584A, 0x0, 0x584B, 0x0, 0x0, 0x5840, 0x3B7C, 0x0, 0x5844, 0x4256, }},
+  {0x614C, {0x3932, 0x5832, 0x3F35, 0x0, 0x0, 0x0, 0x0, 0x5858, 0x0, 0x4A69, 0x0, 0x0, 0x584E, 0x584F, 0x5850, 0x0, }},
+  {0x615D, {0x5857, 0x0, 0x5856, 0x0, 0x0, 0x4B7D, 0x3437, 0x0, 0x5854, 0x0, 0x3745, 0x3334, 0x0, 0x0, 0x5851, 0x0, }},
+  {0x616E, {0x4E38, 0x5853, 0x3056, 0x5855, 0x0, 0x584C, 0x5852, 0x5859, 0x3744, 0x584D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x617E, {0x4D5D, 0x0, 0x0, 0x0, 0x4D2B, 0x0, 0x0, 0x0, 0x0, 0x585C, 0x0, 0x0, 0x5860, 0x0, 0x0, 0x0, }},
+  {0x618E, {0x417E, 0x0, 0x4E79, 0x5861, 0x0, 0x0, 0x585E, 0x0, 0x585B, 0x0, 0x0, 0x585A, 0x585F, 0x0, 0x0, 0x0, }},
+  {0x61A4, {0x4A30, 0x0, 0x0, 0x4634, 0x0, 0x3746, 0x0, 0x5862, 0x585D, 0x0, 0x5863, 0x0, 0x0, 0x0, 0x377B, 0x0, }},
+  {0x61B6, {0x3231, 0x0, 0x0, 0x0, 0x586B, 0x0, 0x0, 0x0, 0x3438, 0x0, 0x0, 0x0, 0x0, 0x5869, 0x0, 0x0, }},
+  {0x61C6, {0x586A, 0x3A29, 0x5868, 0x5866, 0x5865, 0x586C, 0x5864, 0x586E, 0x0, 0x0, 0x327B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x61E3, {0x5870, 0x0, 0x0, 0x586F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4428, }},
+  {0x61F4, {0x5873, 0x0, 0x5871, 0x5867, 0x377C, 0x0, 0x5872, 0x0, 0x5876, 0x5875, 0x5877, 0x5874, 0x5878, 0x0, 0x0, 0x0, }},
+  {0x6208, {0x5879, 0x587A, 0x4A6A, 0x0, 0x587C, 0x587B, 0x3D3F, 0x0, 0x402E, 0x3266, 0x327C, 0x0, 0x587D, 0x0, 0x303F, 0x0, }},
+  {0x621A, {0x404C, 0x587E, 0x0, 0x6C43, 0x5921, 0x3761, 0x0, 0x5922, 0x0, 0x0, 0x0, 0x0, 0x406F, 0x0, 0x0, 0x0, }},
+  {0x622A, {0x5923, 0x0, 0x0, 0x0, 0x5924, 0x353A, 0x5925, 0x0, 0x5926, 0x5927, 0x4257, 0x0, 0x0, 0x0, 0x384D, 0x0, }},
+  {0x623B, {0x4C61, 0x0, 0x0, 0x0, 0x4B3C, 0x3D6A, 0x5928, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4070, 0x6E3D, 0x4862, 0x0, }},
+  {0x624B, {0x3C6A, 0x0, 0x3A4D, 0x5929, 0x0, 0x0, 0x0, 0x0, 0x4247, 0x0, 0x4A27, 0x0, 0x0, 0x4271, 0x0, 0x0, }},
+  {0x625B, {0x592C, 0x0, 0x0, 0x592A, 0x0, 0x592D, 0x0, 0x0, 0x592B, 0x0, 0x0, 0x0, 0x0, 0x592E, 0x0, 0x0, }},
+  {0x626E, {0x4A31, 0x0, 0x0, 0x3037, 0x0, 0x0, 0x0, 0x0, 0x495E, 0x0, 0x0, 0x4863, 0x0, 0x0, 0x592F, 0x0, }},
+  {0x627E, {0x5932, 0x3E35, 0x353B, 0x0, 0x5930, 0x5937, 0x3E36, 0x0, 0x0, 0x0, 0x0, 0x5931, 0x4744, 0x0, 0x0, 0x0, }},
+  {0x6291, {0x4D5E, 0x5933, 0x5934, 0x5938, 0x456A, 0x5935, 0x3933, 0x405E, 0x0, 0x0, 0x5946, 0x4834, 0x0, 0x4272, 0x0, 0x0, }},
+  {0x62AB, {0x4864, 0x5A2D, 0x0, 0x0, 0x0, 0x0, 0x4A7A, 0x0, 0x0, 0x0, 0x4471, 0x0, 0x0, 0x0, 0x4B75, 0x0, }},
+  {0x62BB, {0x593B, 0x3221, 0x436A, 0x0, 0x0, 0x0, 0x0, 0x5944, 0x0, 0x0, 0x4334, 0x593E, 0x5945, 0x5940, 0x5947, 0x5943, }},
+  {0x62CC, {0x5942, 0x476F, 0x0, 0x593C, 0x327D, 0x593A, 0x3571, 0x4273, 0x5936, 0x0, 0x0, 0x5939, 0x3934, 0x405B, 0x0, 0x3E37, }},
+  {0x62DC, {0x5941, 0x4752, 0x0, 0x0, 0x3572, 0x3348, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x62EC, {0x3367, 0x3F21, 0x5949, 0x594E, 0x0, 0x594A, 0x0, 0x377D, 0x0, 0x594F, 0x3B22, 0x3969, 0x0, 0x0, 0x0, 0x0, }},
+  {0x62FE, {0x3D26, 0x593D, 0x0, 0x3B7D, 0x594C, 0x0, 0x0, 0x0, 0x0, 0x3B58, 0x594D, 0x3044, 0x0, 0x0, 0x5948, 0x0, }},
+  {0x6311, {0x4429, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3573, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3634, 0x0, }},
+  {0x6327, {0x594B, 0x3027, 0x0, 0x0, 0x3A43, 0x0, 0x0, 0x0, 0x3F36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x633A, {0x4472, 0x0, 0x0, 0x4854, 0x5951, 0x415E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x422A, }},
+  {0x634C, {0x3B2B, 0x5952, 0x0, 0x5954, 0x5950, 0x0, 0x0, 0x0, 0x0, 0x4A61, 0x0, 0x443D, 0x0, 0x0, 0x0, 0x0, }},
+  {0x635C, {0x415C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A7B, 0x3C4E, 0x5960, 0x0, 0x595F, }},
+  {0x636E, {0x3F78, 0x0, 0x0, 0x0, 0x377E, 0x0, 0x0, 0x0, 0x5959, 0x3E39, 0x0, 0x0, 0x4668, 0x4731, 0x0, 0x0, }},
+  {0x6380, {0x5957, 0x0, 0x0, 0x415D, 0x0, 0x0, 0x0, 0x0, 0x3C78, 0x595C, 0x0, 0x0, 0x3E38, 0x0, 0x5956, 0x595B, }},
+  {0x6392, {0x4753, 0x0, 0x0, 0x0, 0x5955, 0x0, 0x3721, 0x0, 0x0, 0x335D, 0x0, 0x0, 0x0, 0x595D, 0x4E2B, 0x3A4E, }},
+  {0x63A2, {0x4335, 0x595A, 0x0, 0x405C, 0x0, 0x3935, 0x3F64, 0x3166, 0x413C, 0x5958, 0x3545, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x63B2, {0x3747, 0x0, 0x444F, 0x595E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x415F, 0x0, 0x0, 0x5961, 0x0, 0x5963, 0x0, }},
+  {0x63C3, {0x4237, 0x5969, 0x0, 0x5964, 0x0, 0x0, 0x5966, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4941, 0x4473, 0x0, 0x5967, }},
+  {0x63D6, {0x4D2C, 0x0, 0x0, 0x0, 0x4D48, 0x3439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x302E, 0x0, 0x5965, 0x0, 0x0, }},
+  {0x63E9, {0x5962, 0x0, 0x0, 0x0, 0x0, 0x3478, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3167, 0x0, 0x5968, 0x0, 0x0, }},
+  {0x63FA, {0x4D49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x596C, 0x0, 0x0, 0x0, }},
+  {0x640D, {0x423B, 0x0, 0x5973, 0x0, 0x0, 0x0, 0x596D, 0x0, 0x0, 0x596A, 0x5971, 0x0, 0x0, 0x0, 0x0, 0x5953, }},
+  {0x6426, {0x596E, 0x0, 0x5972, 0x0, 0x0, 0x0, 0x4842, 0x456B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x596B, 0x0, }},
+  {0x6436, {0x596F, 0x0, 0x0, 0x0, 0x3748, 0x0, 0x0, 0x0, 0x3A71, 0x0, 0x0, 0x0, 0x405D, 0x0, 0x0, 0x0, }},
+  {0x644E, {0x5977, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4526, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6467, {0x5974, 0x0, 0x4B60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5975, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5976, }},
+  {0x6478, {0x4C4E, 0x0, 0x4022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3762, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6488, {0x597D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B35, 0x597A, 0x0, 0x5979, 0x0, 0x0, }},
+  {0x649A, {0x4732, 0x0, 0x0, 0x0, 0x4635, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4531, 0x597B, 0x0, 0x0, 0x0, 0x597C, }},
+  {0x64AB, {0x496F, 0x0, 0x4745, 0x3B23, 0x0, 0x4071, 0x0, 0x4B50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3349, 0x0, }},
+  {0x64BB, {0x5A25, 0x597E, 0x0, 0x0, 0x0, 0x0, 0x4D4A, 0x5A27, 0x0, 0x0, 0x5A23, 0x0, 0x5A24, 0x0, 0x0, 0x0, }},
+  {0x64CD, {0x4160, 0x0, 0x0, 0x0, 0x0, 0x5A22, 0x0, 0x593F, 0x0, 0x0, 0x0, 0x5A26, 0x0, 0x5A21, 0x0, 0x0, }},
+  {0x64E0, {0x5A2B, 0x5A2C, 0x4527, 0x5A2E, 0x0, 0x0, 0x3B24, 0x5A29, 0x0, 0x0, 0x0, 0x0, 0x353C, 0x0, 0x0, 0x5A2F, }},
+  {0x64F1, {0x5A28, 0x5A33, 0x0, 0x5A32, 0x0, 0x5A31, 0x0, 0x0, 0x0, 0x5A34, 0x0, 0x0, 0x5A36, 0x3E71, 0x0, 0x5A35, }},
+  {0x6505, {0x5A39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6518, {0x5A37, 0x0, 0x0, 0x0, 0x5A38, 0x5970, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A3B, 0x5A3A, 0x0, 0x0, 0x0, }},
+  {0x652A, {0x5978, 0x5A3C, 0x5A30, 0x0, 0x0, 0x3B59, 0x0, 0x0, 0x0, 0x0, 0x5A3D, 0x5A3E, 0x5A40, 0x5A3F, 0x5A41, 0x327E, }},
+  {0x653B, {0x3936, 0x0, 0x0, 0x4A7C, 0x402F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x384E, 0x0, 0x0, 0x5A43, 0x0, 0x0, }},
+  {0x654D, {0x5A46, 0x0, 0x4952, 0x0, 0x355F, 0x0, 0x0, 0x0, 0x5A45, 0x5A44, 0x4754, 0x5A47, 0x3635, 0x0, 0x0, 0x0, }},
+  {0x655D, {0x5A49, 0x5A48, 0x0, 0x0, 0x0, 0x343A, 0x3B36, 0x0, 0x0, 0x4658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3749, }},
+  {0x6570, {0x3F74, 0x0, 0x5A4A, 0x0, 0x4030, 0x4528, 0x0, 0x495F, 0x5A4B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6582, {0x5A4C, 0x5A4D, 0x0, 0x0, 0x0, 0x4A38, 0x555D, 0x4046, 0x0, 0x0, 0x494C, 0x0, 0x3A58, 0x0, 0x4865, 0x4843, }},
+  {0x6597, {0x454D, 0x0, 0x4E41, 0x0, 0x5A4F, 0x3C50, 0x0, 0x0, 0x5A50, 0x0, 0x3036, 0x0, 0x0, 0x3654, 0x404D, 0x0, }},
+  {0x65A7, {0x4960, 0x0, 0x0, 0x0, 0x5A51, 0x3B42, 0x4347, 0x0, 0x3B5B, 0x3F37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x65B7, {0x5A52, 0x0, 0x4A7D, 0x0, 0x0, 0x3177, 0x3B5C, 0x0, 0x0, 0x0, 0x5A55, 0x0, 0x5A53, 0x5A56, 0x4E39, 0x5A54, }},
+  {0x65CB, {0x407B, 0x5A57, 0x0, 0x0, 0x4232, 0x0, 0x0, 0x5A58, 0x0, 0x0, 0x0, 0x0, 0x347A, 0x0, 0x5A5A, 0x0, }},
+  {0x65DB, {0x5A59, 0x0, 0x0, 0x0, 0x0, 0x5A5B, 0x5A5C, 0x347B, 0x0, 0x0, 0x467C, 0x4336, 0x356C, 0x3B5D, 0x4161, 0x0, }},
+  {0x65EC, {0x3D5C, 0x3030, 0x0, 0x0, 0x0, 0x5A5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3222, 0x5A61, }},
+  {0x6602, {0x3937, 0x5A60, 0x0, 0x0, 0x3A2B, 0x3E3A, 0x0, 0x0, 0x5A5F, 0x0, 0x3E3B, 0x0, 0x4C40, 0x3A2A, 0x0, 0x0, }},
+  {0x6613, {0x3057, 0x404E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A66, 0x0, 0x0, 0x4031, 0x3147, 0x0, 0x0, }},
+  {0x6625, {0x3D55, 0x0, 0x4B66, 0x3A72, 0x0, 0x0, 0x0, 0x0, 0x3E3C, 0x0, 0x4027, 0x0, 0x0, 0x0, 0x0, 0x5A65, }},
+  {0x6635, {0x5A63, 0x5A64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x436B, 0x0, 0x0, 0x5B26, 0x0, 0x5A6A, 0x3B7E, 0x3938, 0x5A68, }},
+  {0x6649, {0x5A69, 0x0, 0x3F38, 0x0, 0x0, 0x0, 0x5A67, 0x0, 0x0, 0x3B2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x665D, {0x5A6C, 0x5A6B, 0x5A70, 0x0, 0x0, 0x5A71, 0x0, 0x5A6D, 0x0, 0x3322, 0x5A6E, 0x5A6F, 0x4855, 0x0, 0x0, 0x0, }},
+  {0x666E, {0x4961, 0x374A, 0x5A72, 0x0, 0x0, 0x0, 0x4032, 0x0, 0x3E3D, 0x0, 0x0, 0x0, 0x4352, 0x0, 0x0, 0x0, }},
+  {0x6681, {0x3647, 0x0, 0x5A73, 0x5A77, 0x0, 0x0, 0x324B, 0x5A74, 0x5A76, 0x0, 0x0, 0x0, 0x0, 0x5A75, 0x0, 0x0, }},
+  {0x6691, {0x3D6B, 0x0, 0x0, 0x0, 0x0, 0x4348, 0x3045, 0x5A78, 0x0, 0x0, 0x0, 0x0, 0x5A79, 0x0, 0x0, 0x0, }},
+  {0x66A2, {0x442A, 0x0, 0x0, 0x0, 0x4E71, 0x0, 0x0, 0x0, 0x0, 0x3B43, 0x0, 0x0, 0x4A6B, 0x0, 0x0, 0x0, }},
+  {0x66B4, {0x4B3D, 0x0, 0x0, 0x0, 0x5B22, 0x5A7B, 0x0, 0x0, 0x5A7E, 0x0, 0x5A7D, 0x0, 0x0, 0x5A7A, 0x0, 0x0, }},
+  {0x66C4, {0x5B21, 0x0, 0x0, 0x465E, 0x0, 0x5A7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x66D6, {0x5B23, 0x0, 0x0, 0x3D6C, 0x5B24, 0x0, 0x4D4B, 0x4778, 0x0, 0x0, 0x5B25, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x66E6, {0x5B27, 0x0, 0x0, 0x5B28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B29, 0x0, 0x364A, 0x3148, 0x3939, 0x5B2A, }},
+  {0x66F7, {0x5B2B, 0x3D71, 0x4162, 0x0, 0x0, 0x5258, 0x413E, 0x413D, 0x4258, 0x3A47, 0x0, 0x0, 0x5072, 0x0, 0x0, 0x0, }},
+  {0x6708, {0x376E, 0x4D2D, 0x0, 0x4A7E, 0x0, 0x497E, 0x0, 0x5B2C, 0x0, 0x0, 0x0, 0x0, 0x3A73, 0x443F, 0x5B2D, 0x4F2F, }},
+  {0x671B, {0x4B3E, 0x0, 0x442B, 0x5B2E, 0x347C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B2F, 0x5B30, 0x4C5A, 0x0, 0x4C24, }},
+  {0x672B, {0x4B76, 0x4B5C, 0x3B25, 0x5B32, 0x0, 0x0, 0x3C6B, 0x0, 0x0, 0x4B51, 0x0, 0x5B34, 0x5B37, 0x5B36, 0x0, 0x3479, }},
+  {0x673D, {0x3560, 0x0, 0x5B33, 0x0, 0x5B35, 0x0, 0x0, 0x0, 0x0, 0x5B38, 0x0, 0x0, 0x3F79, 0x0, 0x0, 0x0, }},
+  {0x674E, {0x4D7B, 0x3049, 0x3A60, 0x423C, 0x0, 0x3C5D, 0x0, 0x0, 0x3E73, 0x0, 0x0, 0x5B3B, 0x0, 0x0, 0x454E, 0x0, }},
+  {0x675E, {0x5B39, 0x422B, 0x5B3A, 0x3E72, 0x4C5D, 0x5B3C, 0x5B3D, 0x4D68, 0x0, 0x0, 0x0, 0x0, 0x5B42, 0x0, 0x0, 0x393A, }},
+  {0x676F, {0x4755, 0x5B3F, 0x456C, 0x5A5E, 0x5A62, 0x0, 0x354F, 0x0, 0x4747, 0x0, 0x0, 0x0, 0x0, 0x5B41, 0x0, 0x3E3E, }},
+  {0x677F, {0x4844, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B47, 0x0, 0x487A, 0x0, 0x5B3E, 0x0, 0x5B44, 0x5B43, 0x0, 0x0, }},
+  {0x6790, {0x404F, 0x0, 0x0, 0x0, 0x0, 0x4B6D, 0x0, 0x4E53, 0x0, 0x0, 0x4B67, 0x0, 0x324C, 0x3B5E, 0x0, 0x0, }},
+  {0x67A0, {0x4F48, 0x5B46, 0x3F75, 0x0, 0x0, 0x0, 0x5B45, 0x0, 0x0, 0x5B40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x384F, }},
+  {0x67B3, {0x5B4C, 0x5B4A, 0x0, 0x324D, 0x5B48, 0x5B4E, 0x5B54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4248, 0x0, }},
+  {0x67C4, {0x4A41, 0x0, 0x5B56, 0x0, 0x0, 0x0, 0x4922, 0x0, 0x0, 0x0, 0x5B55, 0x4770, 0x4B3F, 0x343B, 0x0, 0x4077, }},
+  {0x67D4, {0x3D40, 0x0, 0x0, 0x0, 0x4453, 0x0, 0x4D2E, 0x0, 0x0, 0x5B51, 0x5B50, 0x0, 0x0, 0x0, 0x5B52, 0x0, }},
+  {0x67E4, {0x5B4F, 0x0, 0x0, 0x5B57, 0x0, 0x5B4D, 0x0, 0x0, 0x5B4B, 0x0, 0x5B53, 0x5B49, 0x0, 0x436C, 0x0, 0x4C78, }},
+  {0x67F4, {0x3C46, 0x3A74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A3A, 0x0, 0x0, 0x4B6F, 0x3341, 0x0, 0x0, 0x444E, 0x464A, }},
+  {0x6804, {0x3149, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4072, }},
+  {0x6816, {0x4034, 0x372A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B59, 0x0, 0x0, 0x393B, 0x337C, 0x0, 0x0, 0x0, }},
+  {0x6829, {0x5B5B, 0x3374, 0x5B61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B5E, 0x0, 0x4073, 0x0, 0x0, 0x0, 0x334B, }},
+  {0x6839, {0x3A2C, 0x0, 0x0, 0x334A, 0x3A4F, 0x0, 0x0, 0x5B5C, 0x3765, 0x374B, 0x456D, 0x0, 0x0, 0x5B5A, 0x0, 0x3046, }},
+  {0x684D, {0x5B5D, 0x5B5F, 0x0, 0x364D, 0x372C, 0x0, 0x343C, 0x354B, 0x0, 0x0, 0x0, 0x0, 0x5B62, 0x0, 0x0, 0x3A79, }},
+  {0x685D, {0x4B71, 0x0, 0x3B37, 0x0, 0x0, 0x0, 0x5B63, 0x0, 0x0, 0x0, 0x4930, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6874, {0x5B6F, 0x0, 0x3233, 0x5B64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B75, 0x5B65, 0x0, 0x4E42, 0x0, 0x5B6C, }},
+  {0x6885, {0x475F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B74, 0x0, 0x5B67, 0x0, 0x0, 0x0, 0x3034, 0x5B69, }},
+  {0x6897, {0x393C, 0x0, 0x0, 0x0, 0x5B6B, 0x0, 0x5B6A, 0x0, 0x5B66, 0x5B71, 0x0, 0x3E3F, 0x0, 0x0, 0x0, 0x546D, }},
+  {0x68A7, {0x3868, 0x4D7C, 0x0, 0x0, 0x0, 0x0, 0x5B68, 0x0, 0x4474, 0x3323, 0x3A2D, 0x0, 0x5B60, 0x0, 0x5B70, 0x3361, }},
+  {0x68B9, {0x5B6E, 0x5B72, 0x0, 0x456E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x347E, 0x0, 0x5C32, 0x0, 0x0, }},
+  {0x68C9, {0x4C49, 0x5B77, 0x347D, 0x0, 0x5B7E, 0x0, 0x0, 0x0, 0x0, 0x4B40, 0x0, 0x5C21, 0x5C23, 0x0, 0x5C27, 0x5B79, }},
+  {0x68DA, {0x432A, 0x0, 0x0, 0x0, 0x0, 0x456F, 0x5C2B, 0x5B7C, 0x0, 0x5C28, 0x0, 0x0, 0x0, 0x5C22, 0x0, 0x0, }},
+  {0x68EE, {0x3F39, 0x5C2C, 0x0, 0x0, 0x4033, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C2A, 0x343D, 0x0, 0x0, 0x0, }},
+  {0x6900, {0x4F50, 0x5B76, 0x0, 0x0, 0x5C26, 0x3058, 0x0, 0x0, 0x5B78, 0x0, 0x0, 0x4C3A, 0x5B7D, 0x3F22, 0x4447, 0x5B73, }},
+  {0x6912, {0x5C25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F7A, 0x5C2F, 0x3371, 0x3821, 0x0, 0x0, 0x0, 0x0, 0x5C31, }},
+  {0x6922, {0x5B7A, 0x5C30, 0x0, 0x5C29, 0x5B7B, 0x0, 0x5C2D, 0x0, 0x5C2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C3F, 0x0, }},
+  {0x6934, {0x464E, 0x0, 0x5C24, 0x0, 0x0, 0x5C3B, 0x0, 0x0, 0x0, 0x5C3D, 0x0, 0x4458, 0x0, 0x0, 0x0, 0x0, }},
+  {0x694A, {0x4D4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4976, 0x5C38, 0x424A, 0x0, 0x0, 0x0, 0x5C3E, }},
+  {0x695A, {0x413F, 0x0, 0x5C35, 0x5C42, 0x5C41, 0x0, 0x466F, 0x5C40, 0x466A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x696A, {0x5C44, 0x5C37, 0x0, 0x3648, 0x5C3A, 0x3D5D, 0x0, 0x0, 0x0, 0x4760, 0x5C3C, 0x364B, 0x0, 0x5C34, 0x5C36, 0x5C33, }},
+  {0x697C, {0x4F30, 0x335A, 0x5C39, 0x0, 0x0, 0x5C43, 0x3335, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A67, 0x0, }},
+  {0x698E, {0x315D, 0x0, 0x0, 0x5C54, 0x0, 0x0, 0x4F31, 0x5C57, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F3A, 0x5C56, 0x0, }},
+  {0x69A0, {0x5C55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C46, 0x0, }},
+  {0x69B1, {0x5C63, 0x5C45, 0x0, 0x5C58, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C50, 0x0, 0x0, 0x5C4B, 0x5C48, 0x0, }},
+  {0x69C1, {0x5C49, 0x0, 0x5C51, 0x0, 0x0, 0x0, 0x7422, 0x0, 0x0, 0x5C4E, 0x393D, 0x4448, 0x4164, 0x5C4C, 0x0, 0x5C47, }},
+  {0x69D3, {0x5C4A, 0x0, 0x0, 0x0, 0x0, 0x4D4D, 0x4B6A, 0x0, 0x0, 0x0, 0x5C4F, 0x5C59, 0x0, 0x0, 0x0, 0x0, }},
+  {0x69E7, {0x5C61, 0x5C5A, 0x0, 0x0, 0x5C67, 0x0, 0x5C65, 0x0, 0x0, 0x0, 0x0, 0x5C60, 0x0, 0x0, 0x0, 0x0, }},
+  {0x69F9, {0x5C5F, 0x0, 0x4450, 0x0, 0x4165, 0x0, 0x5C5D, 0x0, 0x0, 0x5C5B, 0x0, 0x0, 0x5C62, 0x0, 0x0, 0x0, }},
+  {0x6A0A, {0x5C68, 0x4875, 0x5C6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C69, 0x5C6C, 0x5C66, 0x0, 0x0, 0x4374, 0x0, 0x4938, }},
+  {0x6A1B, {0x5C5C, 0x0, 0x0, 0x5C64, 0x3E40, 0x0, 0x4C4F, 0x5C78, 0x5C6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3822, 0x3223, }},
+  {0x6A2B, {0x335F, 0x0, 0x0, 0x5C53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E41, 0x5C70, 0x0, 0x5C77, 0x3C79, 0x3372, }},
+  {0x6A3D, {0x432E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C6D, 0x0, 0x0, 0x5C72, 0x5C76, 0x0, 0x0, 0x3636, 0x0, }},
+  {0x6A58, {0x354C, 0x5C74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3521, 0x0, 0x464B, 0x5C73, 0x0, 0x0, 0x0, 0x5C75, 0x0, }},
+  {0x6A72, {0x5C6F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3360, 0x4349, 0x0, }},
+  {0x6A84, {0x5C7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C7A, 0x3869, 0x0, 0x5C79, 0x0, 0x0, 0x0, }},
+  {0x6A97, {0x5D21, 0x0, 0x0, 0x0, 0x0, 0x5B58, 0x0, 0x0, 0x0, 0x5C7B, 0x0, 0x5C7D, 0x5C7E, 0x0, 0x0, 0x0, }},
+  {0x6AAA, {0x5D2C, 0x0, 0x5D28, 0x0, 0x5B6D, 0x0, 0x0, 0x0, 0x0, 0x5D27, 0x0, 0x0, 0x0, 0x0, 0x5D26, 0x0, }},
+  {0x6ABB, {0x5D23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C6A, 0x5D25, 0x5D24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6AD1, {0x5D2A, 0x0, 0x4F26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D2D, 0x367B, 0x0, 0x0, 0x5D29, 0x5D2B, 0x0, }},
+  {0x6AE8, {0x4827, 0x0, 0x5D2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6AFA, {0x5D32, 0x5D2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D73, 0x5D30, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6B0A, {0x5C5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D33, 0x0, 0x0, 0x0, 0x5D34, 0x0, 0x0, 0x0, }},
+  {0x6B1D, {0x3135, 0x0, 0x5D36, 0x3767, 0x3C21, 0x0, 0x3655, 0x0, 0x0, 0x0, 0x3224, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6B32, {0x4D5F, 0x0, 0x0, 0x0, 0x0, 0x5D38, 0x5D37, 0x5D3A, 0x353D, 0x0, 0x0, 0x3656, 0x343E, 0x0, 0x0, 0x0, }},
+  {0x6B43, {0x5D3D, 0x0, 0x0, 0x0, 0x5D3C, 0x0, 0x5D3E, 0x0, 0x0, 0x324E, 0x0, 0x4337, 0x0, 0x5D3F, 0x0, 0x0, }},
+  {0x6B53, {0x343F, 0x5D41, 0x0, 0x0, 0x0, 0x0, 0x5D40, 0x0, 0x5D42, 0x0, 0x0, 0x0, 0x5D43, 0x0, 0x5D44, 0x3B5F, }},
+  {0x6B63, {0x4035, 0x3A21, 0x0, 0x4970, 0x0, 0x0, 0x4A62, 0x4F44, 0x0, 0x0, 0x0, 0x0, 0x3B75, 0x0, 0x0, 0x0, }},
+  {0x6B73, {0x3A50, 0x4E72, 0x0, 0x0, 0x0, 0x5D45, 0x5D46, 0x0, 0x3B60, 0x0, 0x0, 0x0, 0x5D47, 0x5D48, 0x0, 0x0, }},
+  {0x6B83, {0x5D4A, 0x5D49, 0x0, 0x4B58, 0x0, 0x0, 0x3D5E, 0x3C6C, 0x3B44, 0x0, 0x5D4B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6B95, {0x5D4D, 0x3F23, 0x0, 0x5D4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D4F, }},
+  {0x6BAA, {0x5D50, 0x5D51, 0x0, 0x0, 0x0, 0x5D52, 0x0, 0x5D54, 0x5D53, 0x5D55, 0x3225, 0x434A, 0x0, 0x5D56, 0x0, 0x0, }},
+  {0x6BBA, {0x3B26, 0x334C, 0x5D57, 0x0, 0x0, 0x4542, 0x544C, 0x0, 0x0, 0x0, 0x0, 0x3523, 0x5D58, 0x0, 0x0, 0x0, }},
+  {0x6BCB, {0x5D59, 0x0, 0x4A6C, 0x4B68, 0x0, 0x0, 0x0, 0x4647, 0x5D5A, 0x4866, 0x0, 0x0, 0x0, 0x487B, 0x0, 0x0, }},
+  {0x6BDB, {0x4C53, 0x0, 0x0, 0x0, 0x5D5B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6BEB, {0x5D5D, 0x5D5C, 0x0, 0x0, 0x5D5F, 0x0, 0x0, 0x0, 0x5D5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6C08, {0x5D61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B61, 0x0, 0x4C31, 0x0, 0x5D62, 0x5D63, 0x0, 0x0, 0x3524, }},
+  {0x6C1B, {0x5D64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D66, 0x5D65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6C34, {0x3F65, 0x0, 0x0, 0x4939, 0x314A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4845, 0x0, 0x4475, 0x3D41, 0x3561, 0x0, }},
+  {0x6C4E, {0x4846, 0x0, 0x3C2E, 0x0, 0x0, 0x0, 0x0, 0x5D68, 0x0, 0x3440, 0x0, 0x0, 0x3178, 0x0, 0x0, 0x4672, }},
+  {0x6C5E, {0x5D67, 0x393E, 0x4353, 0x0, 0x5D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D71, 0x0, 0x5D6A, 0x0, 0x0, 0x0, }},
+  {0x6C70, {0x4241, 0x0, 0x3562, 0x5D72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3768, 0x0, 0x0, 0x3525, 0x5D70, 0x0, }},
+  {0x6C81, {0x5D6E, 0x5D6B, 0x4D60, 0x0, 0x0, 0x0, 0x0, 0x4440, 0x0, 0x0, 0x0, 0x4659, 0x5D6C, 0x0, 0x0, 0x5D74, }},
+  {0x6C92, {0x5D73, 0x3723, 0x0, 0x0, 0x322D, 0x0, 0x0, 0x3A3B, 0x5D6D, 0x5D6F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B57, }},
+  {0x6CA2, {0x4274, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B77, 0x0, 0x0, 0x5D7C, 0x0, 0x0, 0x5D7D, }},
+  {0x6CB3, {0x324F, 0x0, 0x0, 0x0, 0x0, 0x4A28, 0x4C7D, 0x5E21, 0x3C23, 0x3E42, 0x5D78, 0x5D7E, 0x3168, 0x0, 0x3637, 0x0, }},
+  {0x6CC4, {0x5D75, 0x5D7A, 0x0, 0x0, 0x0, 0x4074, 0x4771, 0x0, 0x4867, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D77, }},
+  {0x6CD5, {0x4B21, 0x0, 0x5D79, 0x0, 0x5E24, 0x0, 0x5E22, 0x0, 0x5D7B, 0x0, 0x0, 0x0, 0x4B22, 0x4748, 0x3563, 0x0, }},
+  {0x6CE5, {0x4525, 0x0, 0x0, 0x436D, 0x0, 0x5E25, 0x0, 0x0, 0x0, 0x0, 0x5E23, 0x4259, 0x5D76, 0x0, 0x314B, 0x0, }},
+  {0x6D0B, {0x4D4E, 0x5E30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E2F, 0x0, 0x0, 0x0, 0x0, 0x4076, 0x0, 0x5E2C, 0x0, }},
+  {0x6D1B, {0x4D6C, 0x0, 0x0, 0x4636, 0x5E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4445, 0x0, 0x0, 0x0, 0x314C, 0x393F, }},
+  {0x6D2B, {0x5E29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D27, 0x5E2E, 0x0, 0x5E2D, 0x5E28, 0x0, 0x5E2B, 0x0, 0x0, }},
+  {0x6D3B, {0x3368, 0x0, 0x5E2A, 0x4749, 0x0, 0x0, 0x4E2E, 0x0, 0x0, 0x3E74, 0x4075, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6D59, {0x5E36, 0x5E34, 0x0, 0x494D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E31, 0x5E33, 0x0, 0x313A, 0x0, 0x0, }},
+  {0x6D69, {0x3940, 0x4F32, 0x0, 0x333D, 0x0, 0x4962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D61, 0x0, 0x0, 0x3324, 0x3F3B, }},
+  {0x6D79, {0x5E35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E3A, 0x0, 0x0, 0x3E43, }},
+  {0x6D8C, {0x4D30, 0x0, 0x5E37, 0x0, 0x0, 0x0, 0x0, 0x5E32, 0x0, 0x5E38, 0x0, 0x0, 0x0, 0x4E5E, 0x0, 0x4573, }},
+  {0x6D9C, {0x4642, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6DAF, {0x3336, 0x0, 0x0, 0x3155, 0x0, 0x0, 0x5E3E, 0x0, 0x0, 0x5E41, 0x0, 0x0, 0x0, 0x4E43, 0x0, 0x0, }},
+  {0x6DC0, {0x4D64, 0x0, 0x0, 0x0, 0x0, 0x5E48, 0x5E42, 0x5E3F, 0x0, 0x0, 0x0, 0x4E54, 0x5E45, 0x0, 0x0, 0x0, }},
+  {0x6DD1, {0x3D4A, 0x5E47, 0x0, 0x0, 0x5E4C, 0x0, 0x0, 0x4571, 0x5E4A, 0x0, 0x0, 0x0, 0x0, 0x5E44, 0x0, 0x0, }},
+  {0x6DE1, {0x4338, 0x0, 0x0, 0x5E4B, 0x0, 0x5E40, 0x0, 0x5E46, 0x0, 0x5E4D, 0x307C, 0x5E43, 0x0, 0x5E4E, 0x0, 0x0, }},
+  {0x6DF1, {0x3F3C, 0x0, 0x3D5F, 0x0, 0x4A25, 0x0, 0x3A2E, 0x0, 0x5E3B, 0x5E49, 0x453A, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6E05, {0x4036, 0x0, 0x3369, 0x3A51, 0x3E44, 0x5E3D, 0x3D42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x374C, 0x0, }},
+  {0x6E15, {0x5E3C, 0x0, 0x0, 0x0, 0x5E52, 0x3D6D, 0x383A, 0x0, 0x5E61, 0x0, 0x5E5B, 0x3574, 0x454F, 0x0, 0x5E56, 0x5E5F, }},
+  {0x6E25, {0x302F, 0x3132, 0x0, 0x0, 0x3239, 0x0, 0x5E58, 0x422C, 0x5E4F, 0x5E51, 0x3941, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6E38, {0x5E62, 0x0, 0x5E5D, 0x0, 0x0, 0x0, 0x5E55, 0x0, 0x0, 0x0, 0x0, 0x5E5C, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6E4A, {0x4C2B, 0x0, 0x0, 0x5E5A, 0x5E5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3850, 0x0, 0x3E45, 0x0, }},
+  {0x6E5B, {0x4339, 0x0, 0x0, 0x0, 0x5E54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D2F, 0x0, 0x0, 0x0, }},
+  {0x6E6B, {0x5E57, 0x0, 0x0, 0x5E50, 0x4572, 0x0, 0x0, 0x5E53, 0x0, 0x0, 0x0, 0x5E59, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6E7E, {0x4F51, 0x3C3E, 0x4B7E, 0x0, 0x5E63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x482E, 0x0, }},
+  {0x6E8F, {0x5E6F, 0x383B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D60, 0x0, 0x5E65, 0x0, 0x0, 0x0, 0x4E2F, 0x3942, 0x0, }},
+  {0x6E9F, {0x5E72, 0x0, 0x0, 0x306E, 0x0, 0x0, 0x5E70, 0x0, 0x0, 0x0, 0x0, 0x5E64, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6EAF, {0x5E6A, 0x0, 0x0, 0x5E6C, 0x0, 0x0, 0x0, 0x4D4F, 0x5E67, 0x0, 0x0, 0x452E, 0x0, 0x0, 0x5E69, 0x0, }},
+  {0x6EC2, {0x5E71, 0x0, 0x5E6B, 0x4C47, 0x0, 0x0, 0x0, 0x5E66, 0x0, 0x3C22, 0x5E7E, 0x0, 0x0, 0x0, 0x0, 0x336A, }},
+  {0x6ED3, {0x5E68, 0x5E6D, 0x5E6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x426C, 0x425A, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6EEC, {0x5E76, 0x0, 0x0, 0x5E7C, 0x0, 0x0, 0x5E7A, 0x0, 0x4529, 0x0, 0x0, 0x5F23, 0x5E77, 0x0, 0x0, 0x0, }},
+  {0x6EFE, {0x5E78, 0x5E60, 0x0, 0x3579, 0x493A, 0x0, 0x0, 0x0, 0x3C3F, 0x0, 0x0, 0x3977, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6F0F, {0x4F33, 0x0, 0x5E74, 0x0, 0x5F22, 0x3169, 0x4166, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6F20, {0x4779, 0x0, 0x3441, 0x4E7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C21, 0x4452, 0x0, 0x0, 0x0, }},
+  {0x6F31, {0x5E7B, 0x5E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4132, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F21, 0x5E79, 0x0, }},
+  {0x6F41, {0x5E73, 0x0, 0x0, 0x0, 0x3443, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6F54, {0x3769, 0x0, 0x0, 0x0, 0x5F2F, 0x0, 0x0, 0x5F2A, 0x4078, 0x0, 0x0, 0x3363, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6F64, {0x3D61, 0x0, 0x5F33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F2C, 0x442C, 0x5F29, 0x4459, 0x0, 0x0, 0x0, }},
+  {0x6F74, {0x5F4C, 0x0, 0x0, 0x0, 0x5F26, 0x0, 0x5F25, 0x0, 0x5F2E, 0x0, 0x0, 0x0, 0x5F28, 0x5F27, 0x5F2D, 0x0, }},
+  {0x6F84, {0x4021, 0x0, 0x5F24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F30, 0x0, 0x0, 0x5F31, 0x0, 0x0, }},
+  {0x6F97, {0x3442, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F36, 0x0, 0x5F35, 0x5F37, 0x0, 0x0, }},
+  {0x6FAA, {0x5F3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4543, 0x0, 0x5F34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F38, }},
+  {0x6FC0, {0x3763, 0x4279, 0x5F32, 0x473B, 0x0, 0x0, 0x5F39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x6FD4, {0x5F3E, 0x5F3C, 0x0, 0x0, 0x5F3F, 0x0, 0x0, 0x5F42, 0x0, 0x0, 0x0, 0x5F3B, 0x396A, 0x4728, 0x0, 0x0, }},
+  {0x6FE4, {0x5E39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D74, 0x5F3D, 0x0, 0x5F41, 0x4275, 0x0, 0x5F40, 0x0, 0x5F2B, }},
+  {0x6FF6, {0x6F69, 0x0, 0x0, 0x0, 0x5F45, 0x0, 0x0, 0x0, 0x5F49, 0x0, 0x0, 0x5F47, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7009, {0x5F43, 0x0, 0x5F44, 0x0, 0x0, 0x0, 0x5F48, 0x0, 0x5F46, 0x0, 0x0, 0x0, 0x494E, 0x0, 0x0, 0x5F4E, }},
+  {0x701A, {0x5F4B, 0x5F4A, 0x0, 0x5F4D, 0x4654, 0x5F4F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4375, 0x426D, 0x0, 0x0, }},
+  {0x702C, {0x4025, 0x0, 0x0, 0x0, 0x5F50, 0x0, 0x5F52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x703E, {0x5F51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E75, 0x0, }},
+  {0x7051, {0x5F53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4667, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7063, {0x5F54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3250, 0x0, 0x0, 0x0, 0x4574, 0x3325, 0x0, 0x0, }},
+  {0x7078, {0x3564, 0x0, 0x0, 0x0, 0x3C5E, 0x3A52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7089, {0x4F27, 0x3F66, 0x0, 0x0, 0x0, 0x316A, 0x0, 0x0, 0x0, 0x5F56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7099, {0x5F55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x70AC, {0x5F59, 0x433A, 0x5F5C, 0x5F57, 0x0, 0x0, 0x0, 0x5F5B, 0x0, 0x0, 0x0, 0x0, 0x5F5A, 0x4540, 0x3059, 0x0, }},
+  {0x70C8, {0x4E75, 0x0, 0x0, 0x5F5E, 0x0, 0x0, 0x0, 0x3128, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x70D9, {0x5F60, 0x0, 0x0, 0x0, 0x5F5F, 0x0, 0x5F5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x70F1, {0x5F58, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B23, 0x0, 0x0, 0x0, 0x5F62, 0x0, 0x0, 0x0, }},
+  {0x7109, {0x5F61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x316B, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7119, {0x5F64, 0x4A32, 0x0, 0x5F63, 0x0, 0x0, 0x0, 0x0, 0x4C35, 0x0, 0x0, 0x0, 0x0, 0x3E47, 0x0, 0x0, }},
+  {0x7136, {0x4133, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7149, {0x4E7B, 0x0, 0x0, 0x5F6A, 0x0, 0x4079, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F66, 0x5F6B, 0x0, 0x0, }},
+  {0x7159, {0x316C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F69, 0x0, 0x4761, 0x5F65, 0x5F68, 0x3E48, 0x0, }},
+  {0x7169, {0x4851, 0x0, 0x0, 0x5F6C, 0x0, 0x3C51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x717D, {0x407A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F6F, 0x0, 0x0, 0x0, 0x5F67, 0x0, 0x3727, 0x0, 0x0, }},
+  {0x718F, {0x5F6D, 0x0, 0x0, 0x0, 0x0, 0x4D50, 0x5F70, 0x0, 0x0, 0x0, 0x7426, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x719F, {0x3D4F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F71, 0x0, 0x0, 0x0, 0x5F72, 0x0, 0x0, }},
+  {0x71B1, {0x472E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F74, 0x0, 0x0, 0x0, 0x0, 0x5F75, 0x0, 0x0, }},
+  {0x71C3, {0x4733, 0x0, 0x0, 0x0, 0x0, 0x4575, 0x5F77, 0x0, 0x0, 0x0, 0x0, 0x5F79, 0x0, 0x4E55, 0x0, 0x5F76, }},
+  {0x71D4, {0x5F78, 0x316D, 0x0, 0x5F73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x535B, 0x5F7A, 0x0, 0x0, 0x0, }},
+  {0x71E5, {0x4167, 0x3B38, 0x5F7C, 0x0, 0x0, 0x0, 0x0, 0x5F7B, 0x3F24, 0x5259, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x71F5, {0x5F7D, 0x0, 0x0, 0x0, 0x6021, 0x0, 0x5F6E, 0x5F7E, 0x0, 0x0, 0x6022, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7206, {0x477A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6023, 0x0, 0x0, 0x6024, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x721B, {0x6025, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6026, 0x0, 0x445E, }},
+  {0x722C, {0x6028, 0x6027, 0x0, 0x0, 0x6029, 0x0, 0x602A, 0x0, 0x0, 0x3C5F, 0x4963, 0x0, 0x0, 0x0, 0x4C6C, 0x602B, }},
+  {0x723C, {0x602C, 0x4156, 0x3C24, 0x602D, 0x602E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602F, 0x4A52, 0x4847, 0x0, 0x0, 0x6030, }},
+  {0x724C, {0x4757, 0x0, 0x0, 0x0, 0x0, 0x0, 0x442D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6031, 0x3267, 0x0, 0x356D, }},
+  {0x725D, {0x4C46, 0x0, 0x4C36, 0x0, 0x3234, 0x4F34, 0x0, 0x0, 0x0, 0x0, 0x4B52, 0x0, 0x4A2A, 0x0, 0x0, 0x0, }},
+  {0x7272, {0x4037, 0x0, 0x6032, 0x0, 0x0, 0x0, 0x0, 0x4643, 0x0, 0x0, 0x0, 0x3823, 0x6033, 0x0, 0x3A54, 0x6035, }},
+  {0x7282, {0x6034, 0x0, 0x0, 0x0, 0x0, 0x6036, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7292, {0x6037, 0x0, 0x0, 0x0, 0x6038, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x353E, 0x0, }},
+  {0x72A2, {0x6039, 0x0, 0x0, 0x0, 0x0, 0x603A, 0x0, 0x0, 0x0, 0x0, 0x3824, 0x0, 0x0, 0x4848, 0x0, 0x0, }},
+  {0x72B2, {0x603C, 0x0, 0x0, 0x0, 0x3E75, 0x0, 0x0, 0x603B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x72C2, {0x3638, 0x603D, 0x603F, 0x0, 0x603E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6040, 0x0, 0x3851, 0x0, }},
+  {0x72D2, {0x6041, 0x0, 0x0, 0x0, 0x0, 0x3669, 0x0, 0x4140, 0x0, 0x397D, 0x0, 0x0, 0x0, 0x0, 0x6043, 0x6044, }},
+  {0x72E2, {0x6042, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C6D, 0x0, 0x0, 0x4648, 0x3639, 0x0, 0x0, 0x0, 0x0, }},
+  {0x72F7, {0x6046, 0x432C, 0x6045, 0x0, 0x0, 0x4F35, 0x4762, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x730A, {0x6049, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x604B, 0x6048, 0x0, 0x0, }},
+  {0x731B, {0x4C54, 0x604A, 0x604C, 0x0, 0x4E44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6050, 0x0, 0x0, 0x0, 0x604F, 0x4376, }},
+  {0x732B, {0x472D, 0x0, 0x0, 0x3825, 0x604E, 0x0, 0x0, 0x0, 0x0, 0x604D, 0x0, 0x4D31, 0x4D32, 0x0, 0x0, 0x0, }},
+  {0x733E, {0x6051, 0x316E, 0x0, 0x0, 0x0, 0x0, 0x3976, 0x3B62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x734E, {0x6052, 0x6053, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6055, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7363, {0x3D43, 0x0, 0x0, 0x0, 0x0, 0x6057, 0x0, 0x6056, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6058, 0x0, 0x334D, }},
+  {0x7375, {0x605A, 0x0, 0x0, 0x6059, 0x0, 0x605C, 0x605B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x383C, }},
+  {0x7387, {0x4E28, 0x0, 0x364C, 0x0, 0x3226, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x366A, }},
+  {0x73A9, {0x3461, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E68, 0x605E, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x73BB, {0x6060, 0x0, 0x0, 0x0, 0x0, 0x6061, 0x0, 0x3251, 0x0, 0x0, 0x0, 0x0, 0x0, 0x605D, 0x0, 0x3B39, }},
+  {0x73CD, {0x4441, 0x605F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x73DE, {0x6064, 0x0, 0x3C6E, 0x0, 0x0, 0x0, 0x0, 0x6062, 0x0, 0x0, 0x0, 0x0, 0x373E, 0x0, 0x0, 0x4849, }},
+  {0x73EE, {0x6063, 0x0, 0x0, 0x607E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6069, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x73FE, {0x383D, 0x0, 0x0, 0x0, 0x0, 0x3565, 0x0, 0x6066, 0x4D7D, 0x0, 0x0, 0x4E30, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7422, {0x4276, 0x0, 0x0, 0x6068, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7432, {0x606A, 0x4E56, 0x3657, 0x487C, 0x474A, 0x0, 0x0, 0x0, 0x606B, 0x0, 0x0, 0x0, 0x0, 0x606D, 0x0, 0x6070, }},
+  {0x7455, {0x606C, 0x0, 0x0, 0x0, 0x606F, 0x386A, 0x314D, 0x6071, 0x0, 0x3F70, 0x606E, 0x4E5C, 0x0, 0x0, 0x6074, 0x7424, }},
+  {0x7469, {0x6072, 0x6075, 0x0, 0x0, 0x0, 0x0, 0x6067, 0x6073, 0x0, 0x0, 0x3A3C, 0x0, 0x0, 0x6076, 0x0, 0x0, }},
+  {0x747E, {0x6077, 0x0, 0x0, 0x0, 0x0, 0x4D7E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6078, 0x0, 0x0, }},
+  {0x749E, {0x6079, 0x0, 0x0, 0x0, 0x6065, 0x0, 0x0, 0x0, 0x0, 0x607A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x74B0, {0x3444, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C25, 0x0, 0x0, }},
+  {0x74CA, {0x607B, 0x0, 0x0, 0x0, 0x0, 0x607C, 0x0, 0x0, 0x0, 0x0, 0x607D, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x74DC, {0x313B, 0x0, 0x0, 0x0, 0x6121, 0x0, 0x493B, 0x6122, 0x0, 0x0, 0x3424, 0x6123, 0x0, 0x6124, 0x0, 0x0, }},
+  {0x74EE, {0x6125, 0x0, 0x6127, 0x6128, 0x6126, 0x0, 0x0, 0x0, 0x4953, 0x612A, 0x6129, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7503, {0x612C, 0x612B, 0x612D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x612E, 0x6130, 0x612F, 0x0, 0x0, 0x3979, 0x0, }},
+  {0x7513, {0x6132, 0x0, 0x6131, 0x0, 0x0, 0x3445, 0x0, 0x3F53, 0x0, 0x453C, 0x0, 0x6133, 0x4038, 0x0, 0x0, 0x0, }},
+  {0x7523, {0x3B3A, 0x0, 0x3179, 0x6134, 0x0, 0x4D51, 0x0, 0x0, 0x4A63, 0x6135, 0x0, 0x0, 0x0, 0x4544, 0x4D33, 0x3943, }},
+  {0x7533, {0x3F3D, 0x0, 0x0, 0x0, 0x434B, 0x5234, 0x0, 0x442E, 0x3268, 0x6136, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7544, {0x6137, 0x0, 0x613C, 0x0, 0x0, 0x613A, 0x6139, 0x5A42, 0x3326, 0x6138, 0x0, 0x305A, 0x0, 0x482A, 0x0, 0x0, }},
+  {0x7554, {0x484A, 0x0, 0x0, 0x0, 0x0, 0x4E31, 0x613D, 0x613B, 0x435C, 0x4026, 0x0, 0x0, 0x482B, 0x0, 0x492D, 0x0, }},
+  {0x7564, {0x613F, 0x4E2C, 0x374D, 0x6140, 0x0, 0x613E, 0x4856, 0x6141, 0x0, 0x6142, 0x0, 0x0, 0x305B, 0x0, 0x0, 0x3E76, }},
+  {0x7574, {0x6147, 0x0, 0x6144, 0x466D, 0x6143, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3526, 0x0, 0x0, 0x614A, 0x0, }},
+  {0x7586, {0x6145, 0x6146, 0x0, 0x6149, 0x6148, 0x4925, 0x0, 0x0, 0x4142, 0x4141, 0x0, 0x353F, 0x0, 0x0, 0x614B, 0x0, }},
+  {0x759A, {0x614C, 0x0, 0x0, 0x614D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x614F, 0x0, 0x614E, 0x0, 0x0, 0x0, 0x0, }},
+  {0x75AB, {0x3156, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6157, 0x4868, 0x6151, 0x0, 0x6153, 0x0, 0x0, 0x6155, 0x3F3E, 0x0, }},
+  {0x75BC, {0x6156, 0x6154, 0x3C40, 0x0, 0x0, 0x0, 0x6150, 0x6152, 0x0, 0x4942, 0x0, 0x3E49, 0x0, 0x0, 0x6159, 0x0, }},
+  {0x75CD, {0x6158, 0x0, 0x0, 0x0, 0x0, 0x615A, 0x0, 0x3C26, 0x3A2F, 0x0, 0x0, 0x4577, 0x615B, 0x0, 0x444B, 0x0, }},
+  {0x75DE, {0x615D, 0x0, 0x0, 0x0, 0x4E21, 0x615C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4169, 0x0, 0x0, 0x0, 0x0, }},
+  {0x75F0, {0x6162, 0x0, 0x6164, 0x6165, 0x4354, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6163, 0x0, 0x6160, 0x0, 0x615E, 0x615F, }},
+  {0x7601, {0x6161, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6168, 0x0, 0x6166, 0x0, 0x6167, 0x0, 0x0, 0x0, }},
+  {0x761F, {0x6169, 0x616B, 0x616C, 0x616D, 0x0, 0x616E, 0x0, 0x0, 0x616A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7630, {0x6170, 0x0, 0x0, 0x0, 0x616F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6171, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7642, {0x4E45, 0x0, 0x0, 0x0, 0x6174, 0x6172, 0x6173, 0x0, 0x0, 0x0, 0x3462, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7652, {0x4C7E, 0x0, 0x0, 0x0, 0x4A4A, 0x0, 0x6176, 0x0, 0x0, 0x0, 0x6175, 0x0, 0x0, 0x0, 0x0, 0x6177, }},
+  {0x7662, {0x6178, 0x0, 0x0, 0x0, 0x0, 0x617C, 0x6179, 0x617A, 0x617B, 0x0, 0x617D, 0x0, 0x0, 0x0, 0x617E, 0x0, }},
+  {0x7672, {0x6221, 0x0, 0x0, 0x0, 0x6222, 0x0, 0x6223, 0x0, 0x482F, 0x4550, 0x6224, 0x4772, 0x4934, 0x0, 0x6225, 0x0, }},
+  {0x7683, {0x6226, 0x452A, 0x0, 0x3327, 0x3944, 0x6227, 0x0, 0x0, 0x6228, 0x0, 0x0, 0x6229, 0x0, 0x3B29, 0x0, 0x0, }},
+  {0x7693, {0x622B, 0x0, 0x0, 0x622A, 0x0, 0x0, 0x622C, 0x622D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x76AE, {0x4869, 0x0, 0x622E, 0x0, 0x0, 0x0, 0x622F, 0x0, 0x0, 0x7369, 0x6230, 0x6231, 0x6232, 0x0, 0x0, 0x0, }},
+  {0x76BF, {0x3B2E, 0x0, 0x0, 0x6233, 0x4756, 0x0, 0x0, 0x4B5F, 0x0, 0x314E, 0x0, 0x3157, 0x0, 0x0, 0x6234, 0x0, }},
+  {0x76D2, {0x6236, 0x0, 0x0, 0x0, 0x6235, 0x4570, 0x0, 0x0, 0x0, 0x4039, 0x5D39, 0x0, 0x6237, 0x4C41, 0x0, 0x6238, }},
+  {0x76E3, {0x3446, 0x4857, 0x6239, 0x0, 0x623A, 0x0, 0x0, 0x623B, 0x0, 0x0, 0x0, 0x4C5C, 0x0, 0x0, 0x0, 0x4C55, }},
+  {0x76F4, {0x443E, 0x0, 0x0, 0x0, 0x416A, 0x0, 0x0, 0x623D, 0x0, 0x0, 0x3D62, 0x0, 0x0, 0x3E4A, 0x0, 0x0, }},
+  {0x7704, {0x6240, 0x0, 0x0, 0x623F, 0x623E, 0x487D, 0x0, 0x3447, 0x3829, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x771B, {0x6246, 0x0, 0x0, 0x6243, 0x3F3F, 0x4C32, 0x0, 0x0, 0x0, 0x6242, 0x6244, 0x6245, 0x0, 0x0, 0x6241, 0x0, }},
+  {0x7737, {0x6247, 0x6248, 0x0, 0x442F, 0x0, 0x3463, 0x0, 0x0, 0x0, 0x4365, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7747, {0x6249, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x775A, {0x624A, 0x624D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F67, 0x0, 0x4644, 0x0, 0x624E, 0x4B53, 0x0, 0x624B, 0x0, }},
+  {0x776B, {0x624C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6251, 0x0, }},
+  {0x777E, {0x6250, 0x624F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6253, 0x0, 0x0, }},
+  {0x778E, {0x6252, 0x0, 0x0, 0x6254, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x779E, {0x6256, 0x0, 0x6255, 0x0, 0x0, 0x0, 0x0, 0x4A4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D56, 0x4E46, }},
+  {0x77B0, {0x6257, 0x0, 0x0, 0x4637, 0x0, 0x0, 0x6258, 0x0, 0x0, 0x6259, 0x0, 0x625D, 0x625B, 0x625C, 0x0, 0x625A, }},
+  {0x77C7, {0x625E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x625F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x77D7, {0x6260, 0x0, 0x0, 0x6261, 0x4C37, 0x6262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C70, 0x6263, 0x0, 0x434E, 0x0, }},
+  {0x77E7, {0x476A, 0x0, 0x366B, 0x0, 0x0, 0x0, 0x433B, 0x6264, 0x363A, 0x0, 0x0, 0x0, 0x4050, 0x0, 0x0, 0x0, }},
+  {0x77FC, {0x6265, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x780C, {0x6266, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6267, 0x0, 0x3826, 0x3A55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7820, {0x6269, 0x0, 0x0, 0x0, 0x0, 0x4556, 0x3A56, 0x354E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7832, {0x4B24, 0x0, 0x474B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4557, 0x0, 0x0, 0x0, 0x0, 0x395C, 0x0, 0x0, }},
+  {0x7845, {0x626B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x785D, {0x3E4B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E32, 0x3945, }},
+  {0x786F, {0x3827, 0x0, 0x0, 0x4823, 0x0, 0x626D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x626F, 0x0, 0x0, }},
+  {0x7881, {0x386B, 0x0, 0x0, 0x0, 0x0, 0x626E, 0x4476, 0x0, 0x0, 0x0, 0x0, 0x6271, 0x3337, 0x626C, 0x0, 0x0, }},
+  {0x7891, {0x486A, 0x0, 0x3130, 0x0, 0x3A6C, 0x0, 0x4F52, 0x0, 0x0, 0x6270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x78A3, {0x6272, 0x0, 0x0, 0x0, 0x4A4B, 0x0, 0x4059, 0x6274, 0x0, 0x0, 0x0, 0x0, 0x6275, 0x0, 0x0, 0x0, }},
+  {0x78B5, {0x6273, 0x0, 0x0, 0x0, 0x0, 0x334E, 0x0, 0x627B, 0x0, 0x627A, 0x0, 0x0, 0x3C27, 0x0, 0x0, 0x0, }},
+  {0x78C5, {0x627C, 0x6277, 0x0, 0x0, 0x0, 0x627D, 0x6278, 0x0, 0x0, 0x0, 0x0, 0x4858, 0x6276, 0x0, 0x0, 0x6279, }},
+  {0x78DA, {0x6322, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6321, 0x4B61, 0x0, }},
+  {0x78EC, {0x627E, 0x0, 0x0, 0x306B, 0x0, 0x0, 0x0, 0x0, 0x6324, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x78FD, {0x6323, 0x0, 0x0, 0x0, 0x3E4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6325, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x790E, {0x4143, 0x0, 0x0, 0x6327, 0x6326, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6328, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7926, {0x6268, 0x0, 0x0, 0x0, 0x626A, 0x632A, 0x6329, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x793A, {0x3C28, 0x0, 0x4E69, 0x0, 0x3C52, 0x0, 0x632B, 0x3737, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3540, 0x3527, 0x3B63, }},
+  {0x7950, {0x4D34, 0x0, 0x0, 0x6331, 0x0, 0x6330, 0x4144, 0x632D, 0x0, 0x0, 0x632F, 0x0, 0x0, 0x3D4B, 0x3F40, 0x632E, }},
+  {0x7960, {0x632C, 0x0, 0x472A, 0x0, 0x0, 0x3E4D, 0x0, 0x0, 0x493C, 0x0, 0x0, 0x0, 0x0, 0x3A57, 0x0, 0x0, }},
+  {0x7977, {0x4578, 0x0, 0x0, 0x6332, 0x0, 0x0, 0x0, 0x0, 0x6333, 0x6349, 0x3658, 0x0, 0x0, 0x4F3D, 0x4135, 0x0, }},
+  {0x798A, {0x6334, 0x0, 0x0, 0x3252, 0x4477, 0x4A21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x799D, {0x6335, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x357A, 0x6336, 0x0, 0x0, 0x6338, 0x0, 0x0, }},
+  {0x79AE, {0x6339, 0x0, 0x4729, 0x0, 0x0, 0x633A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x633B, 0x633C, 0x0, 0x0, 0x3659, }},
+  {0x79BE, {0x3253, 0x4645, 0x3D28, 0x3B64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x633D, 0x0, 0x3D29, 0x0, 0x0, }},
+  {0x79D1, {0x324A, 0x4943, 0x0, 0x0, 0x633E, 0x0, 0x0, 0x486B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4145, 0x0, }},
+  {0x79E1, {0x6341, 0x0, 0x6342, 0x4769, 0x0, 0x3F41, 0x633F, 0x0, 0x4361, 0x0, 0x0, 0x6340, 0x0, 0x0, 0x0, 0x3E4E, }},
+  {0x79FB, {0x305C, 0x0, 0x0, 0x0, 0x0, 0x3529, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6343, 0x0, 0x0, }},
+  {0x7A0B, {0x4478, 0x0, 0x6344, 0x4047, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C2D, 0x0, 0x0, 0x4923, 0x6345, 0x6346, 0x4355, }},
+  {0x7A1C, {0x4E47, 0x0, 0x0, 0x6348, 0x6347, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7A2E, {0x3C6F, 0x0, 0x0, 0x634A, 0x3070, 0x0, 0x0, 0x0, 0x0, 0x634D, 0x0, 0x0, 0x0, 0x634B, 0x3254, 0x374E, }},
+  {0x7A3E, {0x634C, 0x3946, 0x3972, 0x0, 0x4A66, 0x634E, 0x0, 0x0, 0x4B54, 0x0, 0x0, 0x6350, 0x0, 0x0, 0x0, 0x4051, }},
+  {0x7A4E, {0x314F, 0x323A, 0x302C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x634F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7A61, {0x6351, 0x6352, 0x3E77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6353, 0x0, 0x334F, 0x0, 0x0, 0x0, 0x0, 0x6355, }},
+  {0x7A74, {0x376A, 0x0, 0x3566, 0x0, 0x0, 0x6356, 0x3675, 0x0, 0x0, 0x6357, 0x0, 0x407C, 0x0, 0x464D, 0x0, 0x4060, }},
+  {0x7A84, {0x3A75, 0x0, 0x0, 0x0, 0x6358, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4362, 0x416B, }},
+  {0x7A95, {0x635A, 0x635C, 0x6359, 0x635B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3722, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7AA9, {0x635D, 0x3726, 0x0, 0x0, 0x0, 0x3567, 0x4D52, 0x635F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6360, 0x0, 0x0, }},
+  {0x7ABA, {0x312E, 0x0, 0x0, 0x0, 0x0, 0x6363, 0x0, 0x0, 0x0, 0x3376, 0x6362, 0x6361, 0x0, 0x6365, 0x635E, 0x0, }},
+  {0x7ACA, {0x6366, 0x4E29, 0x0, 0x6367, 0x0, 0x6368, 0x0, 0x0, 0x5474, 0x636A, 0x0, 0x6369, 0x0, 0x0, 0x0, 0x636B, }},
+  {0x7ADA, {0x636C, 0x0, 0x4E35, 0x636D, 0x0, 0x706F, 0x3E4F, 0x636E, 0x636F, 0x3D57, 0x0, 0x4638, 0x6370, 0x0, 0x0, 0x0, }},
+  {0x7AEA, {0x4328, 0x0, 0x0, 0x6371, 0x0, 0x433C, 0x6372, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3625, 0x0, 0x513F, 0x435D, }},
+  {0x7AFA, {0x3C33, 0x0, 0x0, 0x0, 0x0, 0x3448, 0x0, 0x0, 0x6373, 0x0, 0x6422, 0x0, 0x6376, 0x0, 0x3568, 0x0, }},
+  {0x7B0A, {0x6375, 0x6424, 0x0, 0x0, 0x0, 0x6374, 0x0, 0x3E50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6378, 0x6379, }},
+  {0x7B1B, {0x452B, 0x0, 0x0, 0x637A, 0x0, 0x335E, 0x0, 0x0, 0x0, 0x0, 0x3F5A, 0x4964, 0x0, 0x637C, 0x0, 0x0, }},
+  {0x7B2C, {0x4268, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6377, 0x0, 0x637B, 0x637D, 0x0, 0x0, 0x3A7B, 0x0, 0x0, }},
+  {0x7B45, {0x6426, 0x492E, 0x0, 0x4826, 0x4579, 0x0, 0x365A, 0x6425, 0x6423, 0x0, 0x4835, 0x637E, 0x435E, 0x457B, 0x0, 0x457A, }},
+  {0x7B56, {0x3A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6438, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6428, }},
+  {0x7B67, {0x642A, 0x0, 0x0, 0x0, 0x0, 0x642D, 0x0, 0x642E, 0x0, 0x642B, 0x642C, 0x0, 0x0, 0x6429, 0x6427, 0x0, }},
+  {0x7B7A, {0x6421, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A4F, 0x3255, 0x0, 0x0, }},
+  {0x7B8B, {0x6435, 0x0, 0x6432, 0x0, 0x6437, 0x0, 0x0, 0x6436, 0x0, 0x4773, 0x4C27, 0x0, 0x3B3B, 0x6430, 0x6439, 0x6434, }},
+  {0x7B9C, {0x6433, 0x642F, 0x0, 0x6431, 0x0, 0x3449, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x433D, 0x0, }},
+  {0x7BAD, {0x407D, 0x0, 0x0, 0x0, 0x4822, 0x0, 0x0, 0x643E, 0x0, 0x0, 0x0, 0x4824, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7BC0, {0x4061, 0x643B, 0x0, 0x0, 0x484F, 0x0, 0x643F, 0x4A53, 0x0, 0x435B, 0x0, 0x643A, 0x643C, 0x0, 0x0, 0x643D, }},
+  {0x7BDD, {0x6440, 0x0, 0x0, 0x3C44, 0x0, 0x0, 0x0, 0x4646, 0x6445, 0x6444, 0x0, 0x0, 0x6441, 0x0, 0x0, 0x0, }},
+  {0x7BED, {0x4F36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x644A, 0x0, 0x0, 0x644E, 0x644B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7C00, {0x6447, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6448, 0x0, 0x0, 0x0, 0x0, 0x0, 0x644D, 0x0, 0x0, }},
+  {0x7C11, {0x6442, 0x5255, 0x6449, 0x6443, 0x0, 0x0, 0x644C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6452, 0x0, }},
+  {0x7C21, {0x344A, 0x0, 0x644F, 0x0, 0x0, 0x0, 0x6450, 0x0, 0x0, 0x6451, 0x6454, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7C37, {0x6453, 0x4876, 0x0, 0x0, 0x0, 0x0, 0x6455, 0x4E7C, 0x4A6D, 0x645A, 0x0, 0x0, 0x6457, 0x0, 0x0, 0x0, }},
+  {0x7C4C, {0x6456, 0x4052, 0x0, 0x6459, 0x645B, 0x0, 0x0, 0x0, 0x6458, 0x0, 0x645F, 0x0, 0x645C, 0x0, 0x0, 0x0, }},
+  {0x7C5F, {0x645D, 0x6446, 0x0, 0x0, 0x0, 0x645E, 0x6460, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6461, 0x0, 0x0, }},
+  {0x7C73, {0x4A46, 0x0, 0x6462, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C62, 0x0, 0x0, 0x364E, 0x3729, }},
+  {0x7C83, {0x6463, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A34, 0x0, 0x3F68, 0x0, 0x4C30, 0x0, 0x0, 0x6464, 0x0, 0x4E33, }},
+  {0x7C95, {0x4774, 0x0, 0x4146, 0x4734, 0x0, 0x0, 0x3D4D, 0x0, 0x0, 0x0, 0x3040, 0x0, 0x6469, 0x6467, 0x0, 0x6465, }},
+  {0x7CA5, {0x3421, 0x0, 0x3E51, 0x646A, 0x0, 0x0, 0x6468, 0x0, 0x6466, 0x646E, 0x0, 0x0, 0x646D, 0x646C, 0x646B, 0x0, }},
+  {0x7CB9, {0x646F, 0x0, 0x0, 0x0, 0x6470, 0x403A, 0x0, 0x6471, 0x0, 0x6473, 0x0, 0x0, 0x6472, 0x0, 0x0, 0x0, }},
+  {0x7CCA, {0x3852, 0x0, 0x0, 0x0, 0x4138, 0x0, 0x0, 0x0, 0x6475, 0x0, 0x0, 0x0, 0x457C, 0x0, 0x6474, 0x0, }},
+  {0x7CDC, {0x6476, 0x0, 0x4A35, 0x416C, 0x3947, 0x0, 0x6477, 0x0, 0x0, 0x0, 0x0, 0x4E48, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7CEF, {0x6479, 0x0, 0x0, 0x647A, 0x0, 0x647B, 0x0, 0x647C, 0x0, 0x3B65, 0x0, 0x647D, 0x374F, 0x0, 0x0, 0x356A, }},
+  {0x7D00, {0x352A, 0x0, 0x6521, 0x0, 0x4C73, 0x3948, 0x647E, 0x0, 0x0, 0x0, 0x6524, 0x4C66, 0x0, 0x473C, 0x0, 0x0, }},
+  {0x7D10, {0x4933, 0x0, 0x0, 0x0, 0x3D63, 0x6523, 0x0, 0x3C53, 0x3949, 0x3B66, 0x3569, 0x4A36, 0x6522, 0x0, 0x0, 0x0, }},
+  {0x7D20, {0x4147, 0x4B42, 0x3A77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B67, 0x445D, 0x0, 0x6527, 0x4E5F, }},
+  {0x7D30, {0x3A59, 0x0, 0x6528, 0x3F42, 0x0, 0x652A, 0x0, 0x0, 0x0, 0x3E52, 0x3A30, 0x0, 0x0, 0x0, 0x0, 0x6529, }},
+  {0x7D42, {0x3D2A, 0x383E, 0x4148, 0x6525, 0x652B, 0x0, 0x0, 0x0, 0x0, 0x6526, 0x3750, 0x0, 0x652E, 0x6532, 0x376B, 0x0, }},
+  {0x7D56, {0x652D, 0x0, 0x0, 0x0, 0x0, 0x6536, 0x0, 0x0, 0x394A, 0x0, 0x0, 0x4D6D, 0x303C, 0x6533, 0x0, 0x0, }},
+  {0x7D66, {0x356B, 0x0, 0x6530, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6531, 0x0, 0x0, 0x457D, 0x652F, 0x652C, 0x0, 0x3328, }},
+  {0x7D76, {0x4064, 0x0, 0x0, 0x3828, 0x0, 0x0, 0x0, 0x6538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7D89, {0x6535, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6537, 0x0, 0x0, 0x0, 0x6534, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7D99, {0x3751, 0x4233, 0x6539, 0x416E, 0x0, 0x0, 0x6546, 0x0, 0x0, 0x6542, 0x653C, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7DAB, {0x6540, 0x3C7A, 0x305D, 0x653B, 0x6543, 0x6547, 0x394B, 0x4C56, 0x0, 0x4456, 0x653D, 0x0, 0x0, 0x6545, 0x0, 0x653A, }},
+  {0x7DBB, {0x433E, 0x0, 0x653F, 0x303D, 0x4C4A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x653E, 0x0, 0x0, 0x365B, }},
+  {0x7DCB, {0x486C, 0x0, 0x0, 0x0, 0x416D, 0x0, 0x4E50, 0x3D6F, 0x0, 0x0, 0x656E, 0x0, 0x0, 0x6548, 0x0, 0x407E, }},
+  {0x7DDC, {0x6544, 0x6549, 0x654B, 0x0, 0x4479, 0x654E, 0x0, 0x0, 0x654A, 0x0, 0x0, 0x0, 0x4A54, 0x344B, 0x0, 0x0, }},
+  {0x7DEC, {0x4C4B, 0x0, 0x0, 0x305E, 0x0, 0x0, 0x654D, 0x0, 0x4E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x654C, }},
+  {0x7E01, {0x316F, 0x0, 0x0, 0x466C, 0x654F, 0x0, 0x0, 0x0, 0x6556, 0x6550, 0x6557, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7E12, {0x6553, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x477B, 0x0, 0x0, 0x3C4A, 0x6555, 0x0, 0x6552, }},
+  {0x7E22, {0x6558, 0x6551, 0x0, 0x0, 0x3D44, 0x0, 0x0, 0x0, 0x0, 0x4B25, 0x0, 0x0, 0x3D4C, 0x0, 0x0, 0x6554, }},
+  {0x7E32, {0x6560, 0x0, 0x0, 0x655C, 0x0, 0x655F, 0x0, 0x655D, 0x6561, 0x655B, 0x0, 0x6541, 0x4053, 0x0, 0x0, 0x484B, }},
+  {0x7E43, {0x655E, 0x0, 0x0, 0x6559, 0x0, 0x0, 0x0, 0x4121, 0x3752, 0x0, 0x3D2B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7E54, {0x3F25, 0x4136, 0x6564, 0x0, 0x0, 0x6566, 0x6567, 0x0, 0x0, 0x6563, 0x6565, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7E66, {0x655A, 0x6562, 0x0, 0x656A, 0x6569, 0x0, 0x0, 0x4B7A, 0x0, 0x0, 0x372B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7E79, {0x6568, 0x0, 0x656C, 0x656B, 0x656F, 0x0, 0x6571, 0x0, 0x0, 0x3B3C, 0x656D, 0x0, 0x0, 0x0, 0x0, 0x6572, }},
+  {0x7E89, {0x6573, 0x0, 0x0, 0x6574, 0x0, 0x657A, 0x453B, 0x6576, 0x0, 0x6575, 0x6577, 0x6578, 0x0, 0x6579, 0x0, 0x0, }},
+  {0x7E9B, {0x657B, 0x657C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7F36, {0x344C, 0x0, 0x657D, 0x0, 0x657E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6621, }},
+  {0x7F4C, {0x6622, 0x6623, 0x6624, 0x0, 0x6625, 0x6626, 0x0, 0x0, 0x6628, 0x6627, 0x0, 0x0, 0x6629, 0x0, 0x0, 0x0, }},
+  {0x7F5F, {0x662A, 0x662B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x662E, 0x662C, 0x662D, 0x3A61, 0x3753, 0x0, 0x0, 0x4356, }},
+  {0x7F70, {0x4833, 0x0, 0x3D70, 0x0, 0x0, 0x474D, 0x0, 0x486D, 0x662F, 0x586D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7F82, {0x6630, 0x6632, 0x0, 0x4D65, 0x6631, 0x6634, 0x6633, 0x0, 0x4D53, 0x0, 0x6635, 0x0, 0x487E, 0x0, 0x0, 0x0, }},
+  {0x7F94, {0x6636, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6639, 0x0, 0x0, 0x6638, 0x6637, 0x0, 0x0, 0x0, 0x0, 0x663A, }},
+  {0x7FA4, {0x3732, 0x0, 0x0, 0x0, 0x4122, 0x3541, 0x0, 0x0, 0x0, 0x0, 0x663E, 0x663B, 0x0, 0x0, 0x663C, 0x0, }},
+  {0x7FB6, {0x663F, 0x0, 0x6640, 0x663D, 0x0, 0x0, 0x0, 0x3129, 0x0, 0x0, 0x0, 0x3227, 0x0, 0x0, 0x0, 0x6642, }},
+  {0x7FC6, {0x6643, 0x0, 0x0, 0x0, 0x6644, 0x0, 0x4D62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D2C, 0x0, 0x6646, 0x6645, }},
+  {0x7FE0, {0x3F69, 0x6647, 0x0, 0x0, 0x0, 0x0, 0x6648, 0x0, 0x0, 0x6649, 0x0, 0x3465, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7FF0, {0x344D, 0x0, 0x0, 0x664A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x664B, 0x0, 0x4B5D, 0x4D63, 0x0, 0x0, 0x0, }},
+  {0x8000, {0x4D54, 0x4F37, 0x0, 0x394D, 0x664E, 0x3C54, 0x664D, 0x0, 0x0, 0x0, 0x0, 0x664F, 0x3C29, 0x0, 0x0, 0x0, }},
+  {0x8010, {0x4251, 0x0, 0x6650, 0x0, 0x0, 0x394C, 0x0, 0x4C57, 0x6651, 0x6652, 0x0, 0x0, 0x6653, 0x0, 0x0, 0x0, }},
+  {0x8021, {0x6654, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6655, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8033, {0x3C2A, 0x0, 0x0, 0x4C6D, 0x0, 0x0, 0x0, 0x0, 0x6657, 0x0, 0x433F, 0x0, 0x6656, 0x0, 0x0, 0x0, }},
+  {0x8046, {0x6659, 0x0, 0x0, 0x0, 0x6658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x665A, 0x0, 0x0, 0x0, }},
+  {0x8056, {0x403B, 0x0, 0x665B, 0x0, 0x665C, 0x0, 0x0, 0x0, 0x4A39, 0x665D, 0x0, 0x416F, 0x665E, 0x0, 0x0, 0x0, }},
+  {0x8068, {0x665F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E7E, 0x6662, 0x0, 0x6661, 0x6660, 0x4430, 0x0, 0x6663, 0x3F26, }},
+  {0x8079, {0x6664, 0x0, 0x0, 0x0, 0x6665, 0x4F38, 0x6666, 0x0, 0x0, 0x0, 0x0, 0x6667, 0x6669, 0x6668, 0x4825, 0x0, }},
+  {0x8089, {0x4679, 0x0, 0x4F3E, 0x4829, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x666B, 0x0, 0x0, 0x3E53, 0x0, 0x492A, }},
+  {0x809A, {0x666C, 0x666A, 0x0, 0x344E, 0x0, 0x0, 0x0, 0x3854, 0x3B68, 0x0, 0x0, 0x486E, 0x0, 0x0, 0x0, 0x382A, }},
+  {0x80AA, {0x4B43, 0x0, 0x666F, 0x666D, 0x0, 0x394E, 0x0, 0x394F, 0x3069, 0x0, 0x3A68, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x80BA, {0x4759, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x305F, 0x6674, 0x0, 0x4340, 0x0, 0x0, 0x0, }},
+  {0x80CC, {0x4758, 0x0, 0x425B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6676, 0x0, 0x0, 0x6672, 0x6675, 0x6670, }},
+  {0x80DD, {0x6673, 0x4B26, 0x0, 0x0, 0x3855, 0x0, 0x0, 0x307D, 0x6671, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x80EF, {0x6678, 0x0, 0x6679, 0x0, 0x0, 0x4639, 0x0, 0x0, 0x0, 0x363B, 0x0, 0x0, 0x0, 0x6726, 0x473D, 0x0, }},
+  {0x8102, {0x3B69, 0x0, 0x0, 0x363C, 0x4048, 0x4F46, 0x4C2E, 0x6677, 0x4054, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x811A, {0x3553, 0x667A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x667C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x667B, }},
+  {0x812F, {0x667D, 0x0, 0x4326, 0x0, 0x473E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4431, 0x0, 0x0, 0x0, 0x0, 0x6723, }},
+  {0x8146, {0x6722, 0x0, 0x0, 0x0, 0x0, 0x667E, 0x0, 0x0, 0x3F55, 0x0, 0x4965, 0x6725, 0x0, 0x6724, 0x3950, 0x4F53, }},
+  {0x815F, {0x6735, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6729, 0x672A, 0x0, 0x0, 0x0, 0x0, 0x3C70, 0x0, 0x0, 0x6728, }},
+  {0x8170, {0x3978, 0x6727, 0x0, 0x0, 0x672B, 0x0, 0x0, 0x0, 0x4432, 0x4A22, 0x4123, 0x0, 0x0, 0x0, 0x0, 0x425C, }},
+  {0x8180, {0x672F, 0x0, 0x6730, 0x672C, 0x0, 0x0, 0x0, 0x0, 0x672D, 0x0, 0x672E, 0x0, 0x0, 0x0, 0x0, 0x3951, }},
+  {0x8193, {0x6736, 0x0, 0x6732, 0x0, 0x0, 0x0, 0x0, 0x4966, 0x0, 0x4B6C, 0x4928, 0x0, 0x0, 0x6731, 0x0, 0x0, }},
+  {0x81A3, {0x6734, 0x6733, 0x0, 0x0, 0x0, 0x4B44, 0x6737, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6738, 0x0, 0x0, }},
+  {0x81B3, {0x4137, 0x0, 0x6739, 0x0, 0x0, 0x673B, 0x0, 0x673F, 0x0, 0x0, 0x673C, 0x673A, 0x473F, 0x673D, 0x0, 0x673E, }},
+  {0x81C6, {0x3232, 0x0, 0x6745, 0x6740, 0x0, 0x0, 0x0, 0x6741, 0x0, 0x0, 0x0, 0x6742, 0x0, 0x4221, 0x0, 0x0, }},
+  {0x81D8, {0x6744, 0x6743, 0x6746, 0x0, 0x0, 0x0, 0x0, 0x6747, 0x6748, 0x0, 0x0, 0x3F43, 0x0, 0x3269, 0x0, 0x6749, }},
+  {0x81E8, {0x4E57, 0x0, 0x3C2B, 0x0, 0x0, 0x3D2D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B6A, 0x4357, 0x0, 0x0, 0x0, }},
+  {0x81FA, {0x674A, 0x674B, 0x3131, 0x0, 0x674C, 0x0, 0x0, 0x674D, 0x674E, 0x0, 0x0, 0x674F, 0x0, 0x6750, 0x363D, 0x5A2A, }},
+  {0x820A, {0x6751, 0x0, 0x4065, 0x6752, 0x3C4B, 0x0, 0x6753, 0x0, 0x5030, 0x0, 0x0, 0x0, 0x6754, 0x4A5E, 0x345C, 0x0, }},
+  {0x821B, {0x4124, 0x3D58, 0x0, 0x4971, 0x3D2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6755, 0x3952, }},
+  {0x822B, {0x6756, 0x484C, 0x0, 0x6764, 0x0, 0x0, 0x0, 0x0, 0x6758, 0x0, 0x4249, 0x4775, 0x383F, 0x6757, 0x4125, 0x0, }},
+  {0x8240, {0x6759, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x447A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8258, {0x675B, 0x675A, 0x675D, 0x0, 0x0, 0x675C, 0x0, 0x675E, 0x0, 0x0, 0x6760, 0x0, 0x675F, 0x0, 0x344F, 0x0, }},
+  {0x8268, {0x6761, 0x0, 0x6762, 0x6763, 0x0, 0x0, 0x3A31, 0x4E49, 0x0, 0x6765, 0x3F27, 0x0, 0x0, 0x0, 0x3170, 0x6766, }},
+  {0x8278, {0x6767, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6768, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x828B, {0x3072, 0x0, 0x6769, 0x0, 0x0, 0x0, 0x0, 0x676A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4967, 0x0, }},
+  {0x829D, {0x3C47, 0x0, 0x676C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3329, 0x3032, 0x0, 0x0, 0x0, 0x0, 0x676B, 0x676E, }},
+  {0x82AD, {0x474E, 0x0, 0x3F44, 0x0, 0x3256, 0x0, 0x4B27, 0x0, 0x0, 0x0, 0x0, 0x375D, 0x365C, 0x0, 0x676D, 0x0, }},
+  {0x82BD, {0x326A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3423, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x82D1, {0x3171, 0x6772, 0x4E6A, 0x425D, 0x0, 0x0, 0x4944, 0x0, 0x677E, 0x0, 0x3257, 0x677C, 0x0, 0x677A, 0x6771, 0x0, }},
+  {0x82E1, {0x676F, 0x0, 0x6770, 0x0, 0x3C63, 0x366C, 0x4377, 0x0, 0x0, 0x0, 0x4651, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x82F1, {0x3151, 0x0, 0x6774, 0x6773, 0x0, 0x0, 0x0, 0x0, 0x6779, 0x6775, 0x6778, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8302, {0x4C50, 0x6777, 0x3258, 0x337D, 0x677B, 0x0, 0x0, 0x677D, 0x0, 0x0, 0x0, 0x0, 0x3754, 0x0, 0x0, 0x0, }},
+  {0x8316, {0x6823, 0x682C, 0x682D, 0x0, 0x0, 0x0, 0x302B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6834, 0x0, 0x0, }},
+  {0x8328, {0x3071, 0x0, 0x0, 0x682B, 0x0, 0x0, 0x0, 0x682A, 0x0, 0x6825, 0x6824, 0x0, 0x6822, 0x6821, 0x4363, 0x0, }},
+  {0x8338, {0x427B, 0x6827, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6826, 0x0, 0x0, 0x0, 0x0, 0x6829, 0x0, 0x0, }},
+  {0x8349, {0x4170, 0x3755, 0x0, 0x0, 0x0, 0x0, 0x3141, 0x6828, 0x0, 0x3953, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4171, }},
+  {0x8373, {0x683A, 0x0, 0x683B, 0x0, 0x3259, 0x0, 0x0, 0x0, 0x322E, 0x6838, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8385, {0x682E, 0x0, 0x6836, 0x0, 0x683D, 0x6837, 0x0, 0x0, 0x0, 0x6835, 0x0, 0x0, 0x0, 0x0, 0x6776, 0x0, }},
+  {0x8396, {0x6833, 0x0, 0x0, 0x0, 0x682F, 0x0, 0x0, 0x0, 0x3450, 0x6831, 0x683C, 0x0, 0x6832, 0x0, 0x0, 0x0, }},
+  {0x83A8, {0x683E, 0x0, 0x6830, 0x477C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D69, 0x0, 0x0, 0x0, 0x6839, 0x0, 0x0, }},
+  {0x83BD, {0x684F, 0x0, 0x0, 0x0, 0x6847, 0x0, 0x0, 0x0, 0x3F7B, 0x0, 0x0, 0x0, 0x0, 0x3546, 0x0, 0x365D, }},
+  {0x83CE, {0x6842, 0x0, 0x0, 0x0, 0x0, 0x325B, 0x0, 0x0, 0x3E54, 0x0, 0x6845, 0x0, 0x0, 0x0, 0x3A5A, 0x0, }},
+  {0x83DF, {0x4551, 0x684A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A6E, 0x0, 0x6841, 0x0, 0x0, 0x0, }},
+  {0x83EF, {0x325A, 0x3856, 0x4929, 0x684B, 0x0, 0x683F, 0x0, 0x0, 0x6848, 0x0, 0x0, 0x0, 0x6852, 0x0, 0x6843, 0x0, }},
+  {0x8403, {0x6844, 0x463A, 0x0, 0x0, 0x6849, 0x0, 0x0, 0x0, 0x6846, 0x4B28, 0x684C, 0x3060, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8413, {0x6840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x684E, 0x0, 0x684D, }},
+  {0x8429, {0x476B, 0x6854, 0x0, 0x685F, 0x0, 0x0, 0x0, 0x0, 0x337E, 0x0, 0x0, 0x0, 0x6862, 0x0, 0x0, 0x6850, }},
+  {0x843C, {0x6855, 0x4D6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x685E, 0x0, 0x0, 0x4D55, 0x0, 0x0, }},
+  {0x844E, {0x4E2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4378, 0x0, 0x0, 0x0, 0x336B, 0x0, 0x0, }},
+  {0x8461, {0x4972, 0x6864, 0x4621, 0x0, 0x0, 0x3031, 0x0, 0x0, 0x685D, 0x0, 0x6859, 0x4172, 0x6853, 0x685B, 0x6860, 0x0, }},
+  {0x8471, {0x472C, 0x0, 0x0, 0x0, 0x302A, 0x0, 0x6858, 0x0, 0x6861, 0x4978, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8482, {0x685C, 0x0, 0x6857, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E55, 0x0, 0x0, 0x0, 0x0, 0x3D2F, 0x0, }},
+  {0x8494, {0x3C2C, 0x0, 0x0, 0x0, 0x0, 0x4C58, 0x0, 0x0, 0x4947, 0x0, 0x0, 0x6867, 0x0, 0x6870, 0x0, 0x0, }},
+  {0x84AD, {0x685A, 0x0, 0x0, 0x0, 0x0, 0x3377, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E78, 0x6865, 0x0, 0x686A, 0x4173, }},
+  {0x84BF, {0x6866, 0x0, 0x686D, 0x0, 0x0, 0x435F, 0x0, 0x686E, 0x0, 0x0, 0x4D56, 0x6863, 0x3338, 0x0, 0x6869, 0x0, }},
+  {0x84D0, {0x686C, 0x4C2C, 0x0, 0x0, 0x0, 0x0, 0x686F, 0x0, 0x0, 0x6868, 0x686B, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x84EC, {0x4B29, 0x0, 0x4F21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6873, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x84FC, {0x687A, 0x0, 0x0, 0x6872, 0x3C43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6851, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8511, {0x4A4E, 0x0, 0x4C22, 0x6879, 0x6878, 0x0, 0x6874, 0x6875, 0x0, 0x3136, 0x0, 0x0, 0x0, 0x0, 0x6877, 0x0, }},
+  {0x8521, {0x6871, 0x0, 0x0, 0x0, 0x0, 0x4455, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6876, 0x307E, 0x0, 0x0, 0x0, }},
+  {0x8535, {0x4222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A43, 0x0, 0x0, 0x687B, 0x6921, 0x0, 0x4859, 0x0, }},
+  {0x8548, {0x687E, 0x3E56, 0x3C49, 0x6923, 0x0, 0x0, 0x363E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6924, 0x0, 0x4979, }},
+  {0x8558, {0x687D, 0x0, 0x6856, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x687C, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8568, {0x4F4F, 0x4622, 0x4973, 0x0, 0x0, 0x692B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6931, }},
+  {0x857E, {0x6932, 0x0, 0x6925, 0x0, 0x0, 0x0, 0x4776, 0x0, 0x0, 0x692F, 0x6927, 0x0, 0x6929, 0x0, 0x0, 0x0, }},
+  {0x8590, {0x6933, 0x6928, 0x0, 0x0, 0x692C, 0x0, 0x0, 0x3172, 0x0, 0x4665, 0x0, 0x692D, 0x6930, 0x0, 0x0, 0x0, }},
+  {0x85A4, {0x6926, 0x0, 0x4126, 0x0, 0x692A, 0x3B27, 0x3F45, 0x3730, 0x4C74, 0x0, 0x4C79, 0x3D72, 0x0, 0x0, 0x0, 0x0, }},
+  {0x85B9, {0x6937, 0x6935, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4F4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x85C9, {0x6934, 0x0, 0x0, 0x0, 0x4D75, 0x0, 0x6936, 0x6938, 0x0, 0x0, 0x0, 0x0, 0x6939, 0x0, 0x0, 0x0, }},
+  {0x85DC, {0x693C, 0x693A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4623, 0x693B, 0x0, 0x0, 0x0, 0x484D, 0x692E, 0x0, }},
+  {0x85F7, {0x3D73, 0x0, 0x693D, 0x6942, 0x4174, 0x0, 0x0, 0x6941, 0x0, 0x0, 0x0, 0x6922, 0x0, 0x0, 0x0, 0x6943, }},
+  {0x8607, {0x4149, 0x0, 0x0, 0x693E, 0x6940, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x693F, 0x0, 0x0, 0x5D31, }},
+  {0x8617, {0x5D22, 0x0, 0x0, 0x6945, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6944, 0x0, 0x0, 0x0, 0x0, }},
+  {0x862D, {0x4D76, 0x0, 0x623C, 0x6946, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x863F, {0x6947, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6948, 0x3857, }},
+  {0x8650, {0x3554, 0x0, 0x0, 0x0, 0x694A, 0x515D, 0x0, 0x0, 0x0, 0x0, 0x3575, 0x0, 0x4E3A, 0x0, 0x3673, 0x694B, }},
+  {0x8667, {0x694C, 0x0, 0x0, 0x0, 0x436E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x694D, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8679, {0x467A, 0x0, 0x303A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x868A, {0x3263, 0x6952, 0x6953, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x694E, 0x0, 0x3B3D, 0x0, 0x0, 0x0, 0x0, }},
+  {0x86A3, {0x694F, 0x4742, 0x0, 0x0, 0x0, 0x0, 0x6950, 0x6951, 0x695B, 0x0, 0x0, 0x0, 0x6955, 0x6958, 0x0, 0x0, }},
+  {0x86B6, {0x6954, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6956, 0x0, }},
+  {0x86C6, {0x6957, 0x3C58, 0x0, 0x6959, 0x0, 0x4341, 0x0, 0x3756, 0x3342, 0x0, 0x0, 0x0, 0x0, 0x0, 0x695C, 0x0, }},
+  {0x86D9, {0x333F, 0x0, 0x6961, 0x0, 0x0, 0x695D, 0x6960, 0x0, 0x0, 0x0, 0x0, 0x483A, 0x0, 0x0, 0x0, 0x0, }},
+  {0x86E9, {0x695E, 0x0, 0x0, 0x695F, 0x4948, 0x485A, 0x6962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x427D, }},
+  {0x86F9, {0x696C, 0x0, 0x6968, 0x0, 0x0, 0x326B, 0x0, 0x6966, 0x0, 0x4B2A, 0x6967, 0x0, 0x0, 0x6964, 0x0, 0x6965, }},
+  {0x8709, {0x696A, 0x696D, 0x0, 0x0, 0x696B, 0x0, 0x0, 0x0, 0x6969, 0x6963, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4358, }},
+  {0x871A, {0x6974, 0x0, 0x4C2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6972, 0x0, 0x0, 0x0, 0x6973, }},
+  {0x8734, {0x696E, 0x0, 0x0, 0x6970, 0x0, 0x0, 0x0, 0x6971, 0x0, 0x0, 0x0, 0x696F, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8749, {0x4066, 0x0, 0x4F39, 0x6978, 0x0, 0x6979, 0x0, 0x0, 0x0, 0x0, 0x6A21, 0x0, 0x3F2A, 0x0, 0x697B, 0x0, }},
+  {0x8759, {0x697E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6976, 0x6975, 0x0, 0x0, 0x6A22, 0x0, 0x0, 0x325C, 0x0, 0x697C, }},
+  {0x876A, {0x6A23, 0x0, 0x0, 0x0, 0x697D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x697A, 0x0, 0x4433, 0x0, 0x6977, 0x0, }},
+  {0x877F, {0x4768, 0x0, 0x0, 0x6A27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D3B, 0x0, }},
+  {0x879F, {0x6A26, 0x0, 0x0, 0x6A25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A2E, 0x0, 0x0, 0x0, }},
+  {0x87AF, {0x6A28, 0x0, 0x0, 0x0, 0x6A30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D66, 0x6A33, 0x0, 0x6A2A, 0x0, }},
+  {0x87C0, {0x6A2B, 0x0, 0x0, 0x0, 0x6A2F, 0x0, 0x6A32, 0x6A31, 0x0, 0x0, 0x0, 0x6A29, 0x0, 0x0, 0x0, 0x0, }},
+  {0x87D0, {0x6A2C, 0x0, 0x6A3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x87E0, {0x6A36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A34, }},
+  {0x87F2, {0x6A35, 0x0, 0x0, 0x0, 0x6A3A, 0x6A3B, 0x0, 0x332A, 0x0, 0x3542, 0x0, 0x0, 0x6A39, 0x0, 0x0, 0x0, }},
+  {0x8805, {0x6A24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A38, 0x6A3C, 0x6A37, 0x0, 0x6A3E, 0x0, 0x0, 0x0, }},
+  {0x8815, {0x6A40, 0x6A3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A42, 0x6A41, 0x695A, 0x0, }},
+  {0x8827, {0x6A46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A43, 0x0, 0x0, 0x0, 0x0, 0x6A44, }},
+  {0x8839, {0x6A45, 0x0, 0x6A47, 0x0, 0x0, 0x0, 0x0, 0x376C, 0x0, 0x6A49, 0x0, 0x6A48, 0x0, 0x3D30, 0x0, 0x0, }},
+  {0x884C, {0x3954, 0x5E27, 0x0, 0x0, 0x0, 0x0, 0x6A4A, 0x3D51, 0x0, 0x0, 0x0, 0x3339, 0x0, 0x6A4B, 0x0, 0x3152, }},
+  {0x885D, {0x3E57, 0x6A4C, 0x0, 0x0, 0x3955, 0x6A4D, 0x3061, 0x0, 0x0, 0x0, 0x0, 0x493D, 0x0, 0x0, 0x6A4E, 0x0, }},
+  {0x8870, {0x3F6A, 0x0, 0x6A55, 0x0, 0x0, 0x6A52, 0x0, 0x436F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A53, 0x6A50, 0x365E, }},
+  {0x8881, {0x6A4F, 0x6A56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3736, 0x0, 0x0, 0x425E, 0x0, 0x6A5C, 0x0, 0x0, 0x0, }},
+  {0x8892, {0x6A58, 0x0, 0x0, 0x0, 0x4235, 0x6A57, 0x0, 0x6A5A, 0x0, 0x0, 0x0, 0x0, 0x6A51, 0x0, 0x0, 0x0, }},
+  {0x88A2, {0x6A5B, 0x0, 0x6A5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x486F, 0x0, 0x0, 0x6A59, 0x0, 0x6A5E, 0x6A60, }},
+  {0x88B4, {0x3853, 0x6A54, 0x0, 0x3041, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A5F, 0x0, 0x3A5B, 0x4E76, 0x6A61, }},
+  {0x88C4, {0x6A62, 0x4175, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E22, 0x0, 0x0, 0x0, 0x0, }},
+  {0x88D4, {0x6A63, 0x4D35, 0x0, 0x0, 0x6A64, 0x6A65, 0x0, 0x0, 0x4A64, 0x6A66, 0x0, 0x3A40, 0x0, 0x4E23, 0x0, 0x0, }},
+  {0x88E8, {0x6A6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A6C, 0x3E58, 0x6A6A, 0x0, 0x0, 0x0, }},
+  {0x88F8, {0x4D67, 0x6A67, 0x0, 0x0, 0x6A69, 0x403D, 0x3F7E, 0x0, 0x0, 0x0, 0x6A68, 0x0, 0x6A6D, 0x0, 0x0, 0x4A23, }},
+  {0x890A, {0x6A6F, 0x0, 0x6A6E, 0x0, 0x0, 0x0, 0x336C, 0x0, 0x4B2B, 0x6A70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x891D, {0x6A7C, 0x6A72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A73, 0x0, 0x0, 0x0, 0x0, 0x6A74, 0x6A75, 0x0, }},
+  {0x8936, {0x6A79, 0x0, 0x6A7A, 0x0, 0x0, 0x6A78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A76, 0x0, 0x6A71, 0x6A77, 0x0, }},
+  {0x894C, {0x6A7B, 0x7037, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3228, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x895E, {0x6A7E, 0x365F, 0x6A7D, 0x0, 0x0, 0x0, 0x6B22, 0x0, 0x6B21, 0x0, 0x0, 0x0, 0x6B24, 0x0, 0x0, 0x6B23, }},
+  {0x896F, {0x6B25, 0x0, 0x0, 0x3D31, 0x0, 0x6B26, 0x0, 0x0, 0x6B27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B28, }},
+  {0x897F, {0x403E, 0x0, 0x4D57, 0x0, 0x6B29, 0x0, 0x0, 0x4A24, 0x4746, 0x6B2A, 0x0, 0x6B2B, 0x382B, 0x0, 0x0, 0x0, }},
+  {0x898F, {0x352C, 0x0, 0x0, 0x0, 0x6B2C, 0x0, 0x0, 0x3B6B, 0x4741, 0x6B2D, 0x0, 0x3350, 0x0, 0x0, 0x0, 0x0, }},
+  {0x89A1, {0x6B2E, 0x0, 0x0, 0x0, 0x0, 0x6B30, 0x4D77, 0x0, 0x6B2F, 0x3F46, 0x0, 0x6B31, 0x0, 0x0, 0x6B32, 0x0, }},
+  {0x89B2, {0x6B33, 0x3451, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B34, 0x0, 0x0, 0x6B35, 0x0, 0x6B36, 0x6B37, 0x0, }},
+  {0x89D2, {0x3351, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B38, 0x0, 0x6B39, 0x6B3A, 0x0, 0x0, 0x0, 0x0, }},
+  {0x89E3, {0x3272, 0x0, 0x0, 0x3F28, 0x6B3B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x89F4, {0x6B3C, 0x0, 0x0, 0x0, 0x6B3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3840, 0x0, 0x447B, 0x6B3E, }},
+  {0x8A08, {0x3757, 0x0, 0x3F56, 0x0, 0x6B41, 0x0, 0x4624, 0x0, 0x6B40, 0x0, 0x0, 0x3731, 0x0, 0x0, 0x6B3F, 0x4277, }},
+  {0x8A18, {0x352D, 0x0, 0x0, 0x6B42, 0x0, 0x6B43, 0x0, 0x3E59, 0x0, 0x0, 0x0, 0x376D, 0x0, 0x6B44, 0x0, 0x0, }},
+  {0x8A2A, {0x4B2C, 0x0, 0x0, 0x405F, 0x0, 0x0, 0x0, 0x3576, 0x0, 0x4C75, 0x414A, 0x0, 0x6B45, 0x0, 0x0, 0x0, }},
+  {0x8A3A, {0x3F47, 0x4370, 0x3E5A, 0x0, 0x0, 0x0, 0x0, 0x6B46, 0x0, 0x0, 0x0, 0x0, 0x6B49, 0x0, 0x6B4A, 0x0, }},
+  {0x8A50, {0x3A3E, 0x4242, 0x6B48, 0x0, 0x3E5B, 0x493E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B47, 0x0, 0x0, 0x3B6C, 0x0, }},
+  {0x8A60, {0x3153, 0x0, 0x6B4E, 0x3758, 0x0, 0x0, 0x3B6E, 0x0, 0x0, 0x3B6D, 0x0, 0x4F4D, 0x6B4D, 0x6B4C, 0x4127, 0x0, }},
+  {0x8A70, {0x354D, 0x4F43, 0x333A, 0x3E5C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B4B, 0x0, 0x0, 0x0, }},
+  {0x8A82, {0x6B50, 0x0, 0x6B51, 0x6B4F, 0x0, 0x3858, 0x0, 0x4D40, 0x0, 0x0, 0x3B6F, 0x4727, 0x0, 0x0, 0x0, 0x6B54, }},
+  {0x8A93, {0x4040, 0x0, 0x4342, 0x0, 0x0, 0x4D36, 0x0, 0x6B57, 0x0, 0x0, 0x0, 0x386C, 0x0, 0x403F, 0x6B53, 0x0, }},
+  {0x8AA3, {0x6B58, 0x386D, 0x6B55, 0x6B56, 0x0, 0x6B52, 0x0, 0x0, 0x0, 0x4062, 0x4649, 0x0, 0x0, 0x432F, 0x0, 0x325D, }},
+  {0x8AB9, {0x4870, 0x0, 0x0, 0x3543, 0x0, 0x0, 0x4434, 0x0, 0x0, 0x6B5B, 0x0, 0x6B59, 0x0, 0x0, 0x434C, 0x0, }},
+  {0x8ACB, {0x4041, 0x3452, 0x6B5A, 0x0, 0x3F5B, 0x0, 0x0, 0x4E4A, 0x0, 0x0, 0x0, 0x4F40, 0x0, 0x0, 0x0, 0x6B5C, }},
+  {0x8ADB, {0x6B67, 0x4435, 0x0, 0x6B66, 0x0, 0x6B63, 0x6B6B, 0x6B64, 0x0, 0x6B60, 0x0, 0x447C, 0x6B5F, 0x0, 0x0, 0x0, }},
+  {0x8AEB, {0x6B5D, 0x0, 0x4D21, 0x3B70, 0x0, 0x0, 0x6B61, 0x0, 0x6B5E, 0x0, 0x0, 0x0, 0x6B65, 0x3D74, 0x0, 0x3841, }},
+  {0x8AFE, {0x427A, 0x0, 0x4B45, 0x315A, 0x3062, 0x0, 0x4625, 0x0, 0x0, 0x6B69, 0x0, 0x0, 0x0, 0x0, 0x6B68, 0x0, }},
+  {0x8B0E, {0x4666, 0x0, 0x6B6D, 0x0, 0x0, 0x0, 0x6B62, 0x0, 0x6B6C, 0x6B6E, 0x0, 0x382C, 0x6B6A, 0x3956, 0x0, 0x3C55, }},
+  {0x8B20, {0x6B6F, 0x4D58, 0x0, 0x0, 0x0, 0x0, 0x6B72, 0x0, 0x6B75, 0x0, 0x0, 0x6B73, 0x4935, 0x0, 0x0, 0x0, }},
+  {0x8B33, {0x6B70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3660, 0x0, 0x0, 0x0, 0x0, 0x6B74, 0x0, 0x0, 0x6B76, 0x0, }},
+  {0x8B49, {0x6B7A, 0x0, 0x0, 0x6B77, 0x0, 0x6B79, 0x6B78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B7B, 0x0, 0x3C31, }},
+  {0x8B5A, {0x6B7D, 0x6B7C, 0x4968, 0x0, 0x0, 0x6C21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3759, 0x0, 0x0, 0x0, }},
+  {0x8B6B, {0x6B7E, 0x6C22, 0x0, 0x0, 0x6C23, 0x3544, 0x6641, 0x3E79, 0x0, 0x6C24, 0x0, 0x0, 0x386E, 0x0, 0x0, 0x0, }},
+  {0x8B7D, {0x6C25, 0x0, 0x0, 0x6C26, 0x0, 0x0, 0x3B3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A4E, 0x0, 0x6C27, }},
+  {0x8B8E, {0x6C28, 0x0, 0x3D32, 0x0, 0x6C29, 0x6C2A, 0x0, 0x0, 0x6C2B, 0x0, 0x0, 0x6C2C, 0x6C2D, 0x0, 0x0, 0x0, }},
+  {0x8C37, {0x432B, 0x0, 0x0, 0x6C2E, 0x0, 0x0, 0x0, 0x0, 0x6C30, 0x0, 0x6C2F, 0x0, 0x0, 0x0, 0x0, 0x4626, }},
+  {0x8C48, {0x6C31, 0x0, 0x4B2D, 0x0, 0x6C32, 0x0, 0x6C33, 0x0, 0x6C34, 0x0, 0x0, 0x0, 0x0, 0x6C35, 0x0, 0x0, }},
+  {0x8C5A, {0x465A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E5D, 0x6C36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8C6A, {0x396B, 0x502E, 0x6C37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C38, 0x493F, }},
+  {0x8C7A, {0x6C39, 0x0, 0x6C41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C3A, 0x0, 0x0, 0x6C3C, 0x0, 0x0, 0x0, 0x6C3B, }},
+  {0x8C8A, {0x6C3D, 0x0, 0x4B46, 0x6C3E, 0x6C3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C40, 0x0, 0x0, 0x0, 0x6C42, 0x0, }},
+  {0x8C9D, {0x332D, 0x4467, 0x0, 0x4969, 0x3A62, 0x3957, 0x0, 0x0, 0x0, 0x0, 0x494F, 0x325F, 0x484E, 0x6C45, 0x3453, 0x4055, }},
+  {0x8CAD, {0x6C44, 0x6C49, 0x4379, 0x4C63, 0x0, 0x6C47, 0x6C48, 0x352E, 0x0, 0x6C4A, 0x4763, 0x425F, 0x0, 0x0, 0x4871, 0x453D, }},
+  {0x8CBD, {0x6C46, 0x0, 0x4B47, 0x326C, 0x6C4C, 0x4F28, 0x4442, 0x4F45, 0x0, 0x0, 0x3B71, 0x6C4B, 0x0, 0x4231, 0x0, 0x0, }},
+  {0x8CCD, {0x6C5C, 0x4128, 0x0, 0x0, 0x4678, 0x0, 0x4950, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C4F, 0x3B3F, 0x3B72, }},
+  {0x8CDE, {0x3E5E, 0x0, 0x4765, 0x0, 0x382D, 0x6C4E, 0x6C4D, 0x0, 0x496A, 0x0, 0x0, 0x0, 0x3C41, 0x0, 0x0, 0x4552, }},
+  {0x8CFA, {0x6C51, 0x6C52, 0x3958, 0x6C50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C53, 0x6C54, 0x0, 0x6C56, 0x4223, 0x0, }},
+  {0x8D0A, {0x6C55, 0x3466, 0x0, 0x6C58, 0x0, 0x6C57, 0x6C59, 0x0, 0x0, 0x6C5B, 0x6C5D, 0x0, 0x6C5E, 0x0, 0x0, 0x0, }},
+  {0x8D64, {0x4056, 0x0, 0x3C4F, 0x6C5F, 0x0, 0x0, 0x0, 0x3352, 0x0, 0x6C60, 0x0, 0x0, 0x4176, 0x6C61, 0x0, 0x6C62, }},
+  {0x8D74, {0x496B, 0x0, 0x0, 0x352F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C63, 0x0, 0x0, }},
+  {0x8D85, {0x4436, 0x0, 0x0, 0x0, 0x0, 0x315B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8D99, {0x6C64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C71, 0x0, 0x0, 0x0, 0x0, 0x3F76, }},
+  {0x8DB3, {0x422D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C67, 0x0, 0x0, 0x0, 0x6C66, 0x0, 0x0, 0x0, 0x6C65, }},
+  {0x8DCB, {0x6C6D, 0x6C6B, 0x0, 0x0, 0x6C68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C6A, 0x0, 0x0, 0x0, 0x6C69, }},
+  {0x8DDB, {0x6C6C, 0x0, 0x3577, 0x0, 0x6C70, 0x0, 0x4057, 0x0, 0x6C71, 0x0, 0x0, 0x0, 0x0, 0x3859, 0x0, 0x6C6E, }},
+  {0x8DEB, {0x6C6F, 0x0, 0x0, 0x0, 0x4F29, 0x0, 0x0, 0x0, 0x4437, 0x0, 0x4129, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8DFC, {0x6C72, 0x0, 0x0, 0x6C75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C73, 0x6C74, 0x4D59, 0x0, }},
+  {0x8E0F, {0x4627, 0x6C78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C76, 0x6C77, }},
+  {0x8E1F, {0x6C79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D29, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8E30, {0x6C7C, 0x0, 0x0, 0x0, 0x6C7D, 0x6C7B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8E42, {0x6C7A, 0x0, 0x447D, 0x0, 0x0, 0x6D21, 0x6D25, 0x6D22, 0x6C7E, 0x0, 0x6D23, 0x0, 0x0, 0x0, 0x6D24, 0x0, }},
+  {0x8E55, {0x6D2B, 0x0, 0x0, 0x0, 0x6D26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4058, 0x6D28, 0x0, 0x0, 0x6D2A, 0x6D27, }},
+  {0x8E72, {0x6D2D, 0x0, 0x3D33, 0x0, 0x6D2C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D2E, 0x0, 0x0, 0x0, 0x0, 0x6D2F, }},
+  {0x8E84, {0x6D32, 0x6D31, 0x0, 0x6D30, 0x0, 0x0, 0x6D34, 0x6D33, 0x0, 0x4C76, 0x0, 0x0, 0x0, 0x6D36, 0x0, 0x6D35, }},
+  {0x8E94, {0x6D37, 0x0, 0x0, 0x0, 0x0, 0x6D38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D3A, 0x0, 0x0, }},
+  {0x8EAA, {0x6D39, 0x3F48, 0x6D3B, 0x0, 0x0, 0x366D, 0x6D3C, 0x6D3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8EBE, {0x6D3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D40, 0x6D3D, 0x0, 0x6D41, 0x0, 0x3C56, 0x6D42, 0x3530, 0x3733, }},
+  {0x8ED2, {0x382E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D43, 0x0, 0x0, 0x0, 0x4670, 0x0, 0x0, }},
+  {0x8EE2, {0x453E, 0x6D44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D47, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8EF8, {0x3C34, 0x0, 0x0, 0x6D46, 0x6D45, 0x375A, 0x6D48, 0x0, 0x0, 0x0, 0x0, 0x3353, 0x0, 0x6D4A, 0x0, 0x0, }},
+  {0x8F09, {0x3A5C, 0x6D49, 0x0, 0x6D52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D4C, 0x6D4E, 0x4A65, 0x6D4B, 0x0, 0x0, 0x0, }},
+  {0x8F19, {0x6D4D, 0x0, 0x6D51, 0x6D4F, 0x3531, 0x0, 0x6D50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D53, 0x0, 0x0, }},
+  {0x8F29, {0x475A, 0x4E58, 0x0, 0x0, 0x0, 0x0, 0x3D34, 0x0, 0x0, 0x0, 0x6D54, 0x0, 0x0, 0x0, 0x0, 0x4D22, }},
+  {0x8F39, {0x6D56, 0x0, 0x6D55, 0x0, 0x0, 0x6D59, 0x4D41, 0x0, 0x0, 0x6D58, 0x0, 0x336D, 0x6D57, 0x6D5C, 0x0, 0x0, }},
+  {0x8F49, {0x6D5B, 0x0, 0x0, 0x6D5A, 0x4532, 0x6D5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D5E, 0x0, }},
+  {0x8F5C, {0x6D5F, 0x0, 0x0, 0x396C, 0x0, 0x3725, 0x6D60, 0x6D61, 0x6D62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8F9B, {0x3F49, 0x6D63, 0x0, 0x3C2D, 0x6D64, 0x0, 0x0, 0x0, 0x6D65, 0x0, 0x0, 0x0, 0x5221, 0x517E, 0x0, 0x0, }},
+  {0x8FAD, {0x6D66, 0x6570, 0x6D67, 0x4324, 0x3F2B, 0x4740, 0x0, 0x0, 0x0, 0x0, 0x6D68, 0x0, 0x0, 0x4A55, 0x4454, 0x397E, }},
+  {0x8FBF, {0x4329, 0x0, 0x0, 0x312A, 0x0, 0x4B78, 0x3F57, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x375E, }},
+  {0x8FD1, {0x3661, 0x0, 0x0, 0x4A56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x8FE2, {0x6D6B, 0x0, 0x0, 0x6D6A, 0x3260, 0x0, 0x0, 0x4676, 0x6D6C, 0x4777, 0x0, 0x4533, 0x0, 0x6D6D, 0x3D52, 0x0, }},
+  {0x8FF4, {0x6D6F, 0x0, 0x0, 0x4C42, 0x6D7E, 0x6D71, 0x6D72, 0x0, 0x0, 0x4449, 0x0, 0x0, 0x4260, 0x4177, 0x0, 0x4628, }},
+  {0x9005, {0x6D70, 0x3555, 0x0, 0x0, 0x0, 0x0, 0x6D79, 0x0, 0x6D76, 0x6E25, 0x4629, 0x4360, 0x6D73, 0x0, 0x447E, 0x4553, }},
+  {0x9015, {0x6D74, 0x6D78, 0x3F60, 0x0, 0x4767, 0x444C, 0x0, 0x0, 0x4042, 0x6D77, 0x422E, 0x4224, 0x6D75, 0x3029, 0x4F22, 0x0, }},
+  {0x9027, {0x6D7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4261, 0x0, 0x0, 0x3D35, 0x3F4A, 0x0, 0x0, 0x6D7C, 0x6D7B, }},
+  {0x9038, {0x306F, 0x6D7D, 0x0, 0x0, 0x492F, 0x0, 0x6E27, 0x0, 0x0, 0x465B, 0x3F6B, 0x0, 0x0, 0x4359, 0x0, 0x3678, }},
+  {0x9049, {0x6E26, 0x4D37, 0x313F, 0x0, 0x4A57, 0x3261, 0x6E21, 0x6E22, 0x6E23, 0x6E24, 0x463B, 0x4323, 0x3063, 0x6E28, 0x0, 0x6E29, }},
+  {0x9059, {0x7423, 0x0, 0x0, 0x423D, 0x0, 0x6E2A, 0x0, 0x3173, 0x414C, 0x0, 0x382F, 0x0, 0x4D5A, 0x0, 0x0, 0x6E2B, }},
+  {0x9069, {0x452C, 0x0, 0x0, 0x0, 0x4178, 0x3C57, 0x6E2C, 0x0, 0x0, 0x6E2F, 0x0, 0x0, 0x3D65, 0x6E2D, 0x412B, 0x412A, }},
+  {0x907A, {0x3064, 0x0, 0x4E4B, 0x6E31, 0x0, 0x4872, 0x6E33, 0x6E32, 0x6E30, 0x6364, 0x3454, 0x0, 0x0, 0x6D6E, 0x0, 0x6E35, }},
+  {0x908A, {0x6E34, 0x0, 0x0, 0x0, 0x0, 0x6E36, 0x0, 0x4D38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x90A3, {0x4661, 0x0, 0x0, 0x4B2E, 0x0, 0x6E37, 0x0, 0x3C59, 0x0, 0x0, 0x0, 0x0, 0x6E38, 0x0, 0x6E39, 0x0, }},
+  {0x90B5, {0x6E3A, 0x0, 0x0, 0x4521, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x306A, 0x0, 0x0, 0x0, }},
+  {0x90CA, {0x3959, 0x0, 0x0, 0x0, 0x4F3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x90DB, {0x6E3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3734, 0x6E3B, 0x0, 0x6E3C, 0x0, 0x0, 0x0, 0x4974, 0x0, 0x0, }},
+  {0x90ED, {0x3354, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D39, 0x0, 0x363F, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x90FD, {0x4554, 0x0, 0x0, 0x0, 0x0, 0x6E3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9112, {0x6E40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x912D, {0x4522, 0x0, 0x0, 0x6E43, 0x0, 0x6E42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9149, {0x4653, 0x6E44, 0x3D36, 0x3C60, 0x475B, 0x4371, 0x0, 0x0, 0x0, 0x3C72, 0x0, 0x3F6C, 0x0, 0x6E45, 0x0, 0x6E46, }},
+  {0x9162, {0x3F5D, 0x6E47, 0x0, 0x6E48, 0x0, 0x0, 0x0, 0x6E49, 0x4D6F, 0x0, 0x3D37, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9172, {0x6E4B, 0x6E4A, 0x0, 0x395A, 0x0, 0x3973, 0x3B40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9182, {0x6E4E, 0x0, 0x0, 0x0, 0x0, 0x3D66, 0x0, 0x6E4D, 0x0, 0x6E4C, 0x0, 0x4269, 0x0, 0x0, 0x386F, 0x0, }},
+  {0x9192, {0x4043, 0x0, 0x0, 0x0, 0x0, 0x4830, 0x0, 0x0, 0x0, 0x0, 0x3D39, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x91A2, {0x6E4F, 0x0, 0x3E5F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E52, 0x6E50, 0x0, 0x0, 0x0, 0x6E51, 0x0, 0x0, }},
+  {0x91B4, {0x6E54, 0x6E53, 0x0, 0x0, 0x3E7A, 0x0, 0x6E55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E56, 0x6E57, 0x0, 0x0, }},
+  {0x91C6, {0x4850, 0x3A53, 0x3C61, 0x6E58, 0x0, 0x6E59, 0x4E24, 0x3D45, 0x4C6E, 0x4E4C, 0x6E5A, 0x3662, 0x0, 0x0, 0x0, 0x0, }},
+  {0x91D6, {0x6E5B, 0x0, 0x4523, 0x0, 0x0, 0x6E5E, 0x3378, 0x3F4B, 0x0, 0x6E5C, 0x0, 0x6E5D, 0x0, 0x4460, 0x0, 0x0, }},
+  {0x91E6, {0x4B55, 0x367C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E60, }},
+  {0x91F6, {0x6E61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E5F, 0x0, 0x0, 0x6E63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x920D, {0x465F, 0x3343, 0x0, 0x0, 0x6E67, 0x0, 0x0, 0x6E64, 0x6E66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x921E, {0x6E62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F4F, 0x0, 0x0, 0x6E65, 0x0, }},
+  {0x9234, {0x4E6B, 0x0, 0x0, 0x385A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E6F, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9244, {0x4534, 0x6E6A, 0x0, 0x0, 0x6E6D, 0x6E6B, 0x0, 0x6E70, 0x0, 0x0, 0x0, 0x0, 0x6E71, 0x0, 0x0, 0x0, }},
+  {0x9257, {0x6E69, 0x0, 0x0, 0x6E76, 0x3174, 0x0, 0x0, 0x6E68, 0x0, 0x0, 0x0, 0x482D, 0x0, 0x6E6C, 0x0, 0x3E60, }},
+  {0x9271, {0x395B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B48, 0x0, 0x3664, }},
+  {0x9283, {0x3D46, 0x0, 0x463C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x412D, 0x0, }},
+  {0x9293, {0x6E74, 0x0, 0x6E6E, 0x6E73, 0x0, 0x4C43, 0x0, 0x4438, 0x6E75, 0x6E72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x92AD, {0x412C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E79, 0x0, 0x6E78, 0x0, 0x0, 0x0, }},
+  {0x92CF, {0x6E77, 0x0, 0x0, 0x4B2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x92E4, {0x3D7B, 0x0, 0x0, 0x0, 0x0, 0x6E7A, 0x4A5F, 0x0, 0x0, 0x3154, 0x0, 0x0, 0x0, 0x0, 0x4946, 0x4372, }},
+  {0x92F8, {0x3578, 0x0, 0x6E7C, 0x0, 0x395D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B2C, 0x0, }},
+  {0x930F, {0x6E7B, 0x3F6D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F6E, 0x6F21, 0x6F23, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9320, {0x3E7B, 0x0, 0x6F22, 0x6F24, 0x0, 0x0, 0x3653, 0x0, 0x4945, 0x0, 0x0, 0x3C62, 0x4F23, 0x0, 0x6E7E, 0x3A78, }},
+  {0x9332, {0x4F3F, 0x0, 0x0, 0x6F26, 0x0, 0x0, 0x0, 0x0, 0x6F25, 0x6F27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9344, {0x6E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4669, 0x0, 0x4555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9354, {0x4457, 0x0, 0x6F2C, 0x0, 0x0, 0x0, 0x0, 0x4343, 0x6F28, 0x0, 0x0, 0x0, 0x6F29, 0x0, 0x0, 0x0, }},
+  {0x936C, {0x372D, 0x0, 0x6F2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3830, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x937C, {0x6F2A, 0x0, 0x3E61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x938C, {0x3379, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F30, 0x0, 0x3A3F, 0x4179, 0x0, 0x0, 0x444A, 0x0, }},
+  {0x93A7, {0x333B, 0x0, 0x0, 0x0, 0x0, 0x6F2E, 0x6F2F, 0x4443, 0x0, 0x6F2D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x93B9, {0x6F31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F37, 0x0, 0x0, 0x0, 0x0, 0x6F3A, }},
+  {0x93D0, {0x6F39, 0x452D, 0x0, 0x0, 0x0, 0x0, 0x6F32, 0x6F33, 0x6F36, 0x0, 0x0, 0x0, 0x0, 0x6F38, 0x0, 0x0, }},
+  {0x93E1, {0x3640, 0x0, 0x0, 0x6F3B, 0x6F35, 0x0, 0x0, 0x6F34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9403, {0x6F3F, 0x0, 0x0, 0x0, 0x6F40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F41, 0x0, 0x0, }},
+  {0x9413, {0x6F3E, 0x6F3D, 0x0, 0x0, 0x0, 0x3E62, 0x462A, 0x6F3C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F45, 0x0, }},
+  {0x942B, {0x6F43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F44, 0x6F42, 0x0, 0x4278, 0x0, 0x6F46, }},
+  {0x9441, {0x6F47, 0x0, 0x0, 0x6F49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9451, {0x3455, 0x6F48, 0x4C7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F54, 0x6F4A, 0x0, 0x0, 0x6F4D, 0x0, 0x6F4B, }},
+  {0x9462, {0x6F4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F50, 0x0, }},
+  {0x9475, {0x6F51, 0x0, 0x6F52, 0x0, 0x0, 0x0, 0x0, 0x6F55, 0x6F53, 0x6F56, 0x6F58, 0x0, 0x6F57, 0x0, 0x0, 0x0, }},
+  {0x9577, {0x4439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C67, 0x0, 0x6F59, 0x412E, 0x0, 0x0, 0x0, }},
+  {0x9587, {0x6F5A, 0x0, 0x4A44, 0x6F5B, 0x332B, 0x0, 0x0, 0x0, 0x313C, 0x0, 0x3457, 0x0, 0x3456, 0x6F5C, 0x0, 0x6F5D, }},
+  {0x9598, {0x6F5E, 0x6F5F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F60, 0x0, 0x3458, 0x3355, 0x395E, 0x4836, 0x0, 0x6F62, }},
+  {0x95A8, {0x6F61, 0x0, 0x0, 0x0, 0x0, 0x6F63, 0x0, 0x0, 0x0, 0x0, 0x315C, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x95B9, {0x6F66, 0x0, 0x6F65, 0x6F64, 0x0, 0x6F67, 0x0, 0x0, 0x0, 0x0, 0x6F6A, 0x0, 0x0, 0x0, 0x3047, 0x0, }},
+  {0x95CA, {0x6F68, 0x0, 0x6F6C, 0x6F6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F6E, 0x6F6D, 0x6F6F, 0x0, 0x462E, 0x0, }},
+  {0x95DC, {0x6F70, 0x0, 0x0, 0x0, 0x0, 0x6F71, 0x6F73, 0x0, 0x0, 0x6F72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x961C, {0x496C, 0x0, 0x0, 0x0, 0x0, 0x6F74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F75, 0x0, 0x3A65, 0x0, }},
+  {0x962E, {0x6F76, 0x6F77, 0x0, 0x0, 0x4B49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x414B, 0x0, 0x0, }},
+  {0x963F, {0x3024, 0x424B, 0x0, 0x6F78, 0x0, 0x496D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F7B, 0x6F79, 0x395F, 0x0, }},
+  {0x964F, {0x6F7A, 0x3842, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A45, 0x6F7D, 0x7021, 0x6F7E, }},
+  {0x965F, {0x7022, 0x0, 0x0, 0x3121, 0x3F58, 0x3D7C, 0x3459, 0x7023, 0x0, 0x0, 0x0, 0x4766, 0x0, 0x7025, 0x0, 0x0, }},
+  {0x9670, {0x3122, 0x0, 0x7024, 0x4444, 0x0, 0x4E4D, 0x462B, 0x6F7C, 0x4E26, 0x0, 0x3831, 0x0, 0x0, 0x4D5B, 0x0, 0x0, }},
+  {0x9685, {0x3679, 0x4E34, 0x0, 0x3728, 0x0, 0x4262, 0x6721, 0x0, 0x7026, 0x332C, 0x3F6F, 0x0, 0x0, 0x0, 0x0, 0x3356, }},
+  {0x9695, {0x7028, 0x0, 0x7029, 0x7027, 0x3764, 0x0, 0x3A5D, 0x3E63, 0x0, 0x0, 0x0, 0x3123, 0x0, 0x0, 0x4E59, 0x0, }},
+  {0x96A7, {0x702B, 0x6E2E, 0x0, 0x702A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x702E, 0x702C, 0x702D, 0x0, 0x702F, 0x0, 0x7030, }},
+  {0x96B7, {0x4E6C, 0x7031, 0x7032, 0x0, 0x4049, 0x483B, 0x0, 0x0, 0x0, 0x3F7D, 0x3467, 0x0, 0x0, 0x4D3A, 0x326D, 0x3D38, }},
+  {0x96C7, {0x385B, 0x0, 0x7035, 0x0, 0x7034, 0x3B73, 0x7036, 0x7033, 0x0, 0x0, 0x3B28, 0x0, 0x0, 0x0, 0x703A, 0x6A2D, }},
+  {0x96D9, {0x5256, 0x0, 0x3F77, 0x7038, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E25, 0x4671, 0x0, 0x0, 0x0, 0x0, 0x312B, }},
+  {0x96EA, {0x4063, 0x3C36, 0x0, 0x0, 0x0, 0x0, 0x4A37, 0x0, 0x3140, 0x0, 0x0, 0x0, 0x4E6D, 0x4D6B, 0x0, 0x703B, }},
+  {0x96FB, {0x4545, 0x0, 0x0, 0x0, 0x0, 0x3C7B, 0x0, 0x0, 0x0, 0x703C, 0x0, 0x703D, 0x3F4C, 0x703E, 0x0, 0x4E6E, }},
+  {0x970D, {0x7039, 0x7040, 0x7042, 0x0, 0x7041, 0x0, 0x703F, 0x0, 0x0, 0x7043, 0x0, 0x0, 0x7044, 0x0, 0x0, 0x417A, }},
+  {0x971E, {0x3262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7045, 0x0, 0x0, 0x4C38, 0x0, 0x0, 0x7046, 0x0, 0x0, 0x0, }},
+  {0x9730, {0x7047, 0x0, 0x4F2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B31, 0x7048, 0x0, 0x0, 0x0, 0x7049, 0x704A, 0x0, }},
+  {0x9742, {0x704E, 0x0, 0x704B, 0x0, 0x704C, 0x0, 0x704D, 0x704F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9752, {0x4044, 0x0, 0x0, 0x0, 0x4C77, 0x0, 0x0, 0x4045, 0x0, 0x0, 0x7050, 0x0, 0x4873, 0x0, 0x7051, 0x7353, }},
+  {0x9762, {0x4C4C, 0x0, 0x7052, 0x0, 0x7053, 0x0, 0x7054, 0x3357, 0x0, 0x7056, 0x0, 0x3F59, 0x0, 0x0, 0x0, 0x7057, }},
+  {0x9774, {0x3724, 0x0, 0x0, 0x0, 0x0, 0x7058, 0x705C, 0x0, 0x705A, 0x0, 0x0, 0x0, 0x0, 0x705B, 0x0, 0x0, }},
+  {0x9784, {0x3373, 0x7059, 0x705D, 0x0, 0x0, 0x0, 0x0, 0x705E, 0x0, 0x3048, 0x0, 0x705F, 0x7060, 0x0, 0x0, 0x0, }},
+  {0x9798, {0x3E64, 0x0, 0x0, 0x0, 0x7061, 0x0, 0x0, 0x0, 0x3547, 0x0, 0x0, 0x7064, 0x0, 0x0, 0x7063, 0x0, }},
+  {0x97A8, {0x7062, 0x0, 0x0, 0x6B71, 0x0, 0x4A5C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7065, 0x7066, 0x0, 0x0, 0x0, }},
+  {0x97C3, {0x7067, 0x0, 0x0, 0x7068, 0x0, 0x7069, 0x0, 0x0, 0x706A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x97D3, {0x345A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x706B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x97ED, {0x706C, 0x4723, 0x0, 0x0, 0x0, 0x706E, 0x323B, 0x0, 0x7071, 0x7070, 0x0, 0x0, 0x0, 0x0, 0x3124, 0x0, }},
+  {0x97FF, {0x3641, 0x0, 0x4A47, 0x443A, 0x3A22, 0x0, 0x3960, 0x3D67, 0x0, 0x3F5C, 0x0, 0x0, 0x0, 0x7073, 0x0, 0x0, }},
+  {0x980F, {0x7072, 0x4D42, 0x3468, 0x4852, 0x465C, 0x0, 0x0, 0x0, 0x3F7C, 0x4E4E, 0x0, 0x375B, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9821, {0x7076, 0x0, 0x0, 0x7075, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B4B, 0x462C, 0x0, 0x0, 0x0, }},
+  {0x9834, {0x3150, 0x0, 0x0, 0x7077, 0x7074, 0x0, 0x0, 0x4951, 0x4D6A, 0x7078, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9846, {0x7079, 0x0, 0x0, 0x0, 0x0, 0x707B, 0x426A, 0x335B, 0x335C, 0x707A, 0x0, 0x0, 0x0, 0x0, 0x3469, 0x3832, }},
+  {0x9858, {0x346A, 0x0, 0x0, 0x453F, 0x0, 0x0, 0x4E60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x385C, }},
+  {0x986B, {0x707C, 0x0, 0x0, 0x0, 0x707D, 0x707E, 0x7121, 0x0, 0x7123, 0x7122, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x98A8, {0x4977, 0x0, 0x7124, 0x0, 0x0, 0x0, 0x0, 0x7125, 0x0, 0x7126, 0x0, 0x0, 0x0, 0x0, 0x7127, 0x0, }},
+  {0x98C3, {0x7129, 0x7128, 0x0, 0x712A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x98DB, {0x4874, 0x664C, 0x0, 0x0, 0x3F29, 0x0, 0x0, 0x3532, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x712B, 0x0, }},
+  {0x98EB, {0x712C, 0x0, 0x522C, 0x5D3B, 0x4853, 0x0, 0x0, 0x307B, 0x0, 0x303B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x98FC, {0x3B74, 0x4B30, 0x3E7E, 0x0, 0x0, 0x0, 0x0, 0x712D, 0x0, 0x4C5F, 0x0, 0x0, 0x0, 0x712E, 0x4D5C, 0x0, }},
+  {0x990C, {0x3142, 0x0, 0x0, 0x0, 0x3B41, 0x0, 0x712F, 0x326E, 0x7130, 0x0, 0x0, 0x0, 0x7131, 0x0, 0x0, 0x0, }},
+  {0x991D, {0x7133, 0x7134, 0x0, 0x7136, 0x7132, 0x0, 0x0, 0x7135, 0x0, 0x0, 0x0, 0x345B, 0x0, 0x0, 0x0, 0x7137, }},
+  {0x992E, {0x7138, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7139, }},
+  {0x993E, {0x713A, 0x0, 0x0, 0x0, 0x713B, 0x0, 0x0, 0x713D, 0x0, 0x0, 0x0, 0x713C, 0x0, 0x713F, 0x7142, 0x0, }},
+  {0x9950, {0x713E, 0x7140, 0x7141, 0x0, 0x0, 0x7143, 0x0, 0x3642, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9996, {0x3C73, 0x7144, 0x7145, 0x3961, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7146, }},
+  {0x99A8, {0x333E, 0x0, 0x0, 0x0, 0x474F, 0x7147, 0x7148, 0x0, 0x0, 0x0, 0x0, 0x435A, 0x466B, 0x0, 0x0, 0x0, }},
+  {0x99BC, {0x7149, 0x0, 0x0, 0x0, 0x0, 0x477D, 0x0, 0x0, 0x424C, 0x3158, 0x366E, 0x0, 0x366F, 0x0, 0x0, 0x0, }},
+  {0x99D0, {0x4373, 0x714E, 0x3670, 0x0, 0x0, 0x326F, 0x0, 0x0, 0x714D, 0x0, 0x0, 0x714B, 0x0, 0x714C, 0x0, 0x714A, }},
+  {0x99E2, {0x7158, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x714F, 0x7150, 0x0, 0x0, 0x7151, }},
+  {0x99F2, {0x7152, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7154, 0x0, 0x0, 0x7153, 0x0, 0x0, 0x0, 0x3D59, 0x0, 0x7155, }},
+  {0x9A05, {0x7157, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3533, 0x7156, 0x0, 0x0, 0x417B, 0x3833, 0x0, }},
+  {0x9A19, {0x7159, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x424D, }},
+  {0x9A2B, {0x715A, 0x0, 0x0, 0x0, 0x0, 0x462D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x715B, 0x0, 0x0, 0x0, }},
+  {0x9A3E, {0x7160, 0x0, 0x715E, 0x0, 0x715D, 0x715F, 0x0, 0x715C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7162, }},
+  {0x9A55, {0x7161, 0x0, 0x7164, 0x0, 0x0, 0x3643, 0x7163, 0x0, 0x0, 0x0, 0x7165, 0x0, 0x0, 0x7166, 0x0, 0x7168, }},
+  {0x9A65, {0x7167, 0x0, 0x0, 0x0, 0x7169, 0x716B, 0x716A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9AA8, {0x397C, 0x0, 0x0, 0x0, 0x0, 0x716C, 0x0, 0x0, 0x716D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9AB8, {0x333C, 0x0, 0x0, 0x0, 0x716E, 0x0, 0x0, 0x0, 0x716F, 0x0, 0x0, 0x0, 0x3F71, 0x0, 0x0, 0x0, }},
+  {0x9ACF, {0x7170, 0x0, 0x7171, 0x0, 0x7172, 0x7173, 0x0, 0x0, 0x0, 0x3962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7174, }},
+  {0x9ADF, {0x7175, 0x0, 0x0, 0x7176, 0x7177, 0x0, 0x0, 0x7178, 0x0, 0x0, 0x0, 0x4831, 0x717A, 0x0, 0x4926, 0x717B, }},
+  {0x9AEF, {0x7179, 0x0, 0x717D, 0x0, 0x0, 0x717C, 0x0, 0x0, 0x717E, 0x0, 0x0, 0x0, 0x7221, 0x0, 0x0, 0x0, }},
+  {0x9B06, {0x7222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9B18, {0x7223, 0x0, 0x7224, 0x0, 0x0, 0x0, 0x0, 0x7225, 0x0, 0x0, 0x7226, 0x7227, 0x0, 0x7228, 0x0, 0x7229, }},
+  {0x9B28, {0x722A, 0x722B, 0x722C, 0x0, 0x0, 0x0, 0x722D, 0x722E, 0x0, 0x5D35, 0x722F, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9B3B, {0x6478, 0x3534, 0x0, 0x0, 0x0, 0x0, 0x3321, 0x3A32, 0x7231, 0x7230, 0x4C25, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9B4D, {0x7233, 0x7234, 0x7232, 0x0, 0x7235, 0x0, 0x0, 0x4B62, 0x0, 0x0, 0x0, 0x7236, 0x0, 0x357B, 0x0, 0x0, }},
+  {0x9B6F, {0x4F25, 0x0, 0x0, 0x0, 0x0, 0x7237, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9B83, {0x7239, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x303E, 0x0, 0x0, 0x723A, 0x4A2B, }},
+  {0x9B93, {0x7238, 0x0, 0x0, 0x723B, 0x723C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x723D, 0x723E, 0x0, 0x0, }},
+  {0x9BA8, {0x723F, 0x0, 0x4B6E, 0x3B2D, 0x0, 0x3A7A, 0x412F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7240, 0x0, 0x0, 0x0, }},
+  {0x9BB9, {0x7243, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7241, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7244, 0x0, 0x0, }},
+  {0x9BC9, {0x3871, 0x7242, 0x0, 0x0, 0x0, 0x0, 0x7245, 0x0, 0x7246, 0x7247, 0x0, 0x724B, 0x0, 0x3B2A, 0x0, 0x0, }},
+  {0x9BDB, {0x4264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x724C, 0x7249, 0x7248, 0x724A, 0x0, 0x0, 0x0, 0x375F, 0x0, 0x0, }},
+  {0x9BF0, {0x7250, 0x724F, 0x724E, 0x0, 0x0, 0x3033, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9C04, {0x725A, 0x0, 0x7256, 0x0, 0x7257, 0x7253, 0x7259, 0x0, 0x7255, 0x3362, 0x0, 0x0, 0x4F4C, 0x0, 0x7258, 0x7254, }},
+  {0x9C14, {0x7252, 0x7251, 0x0, 0x0, 0x0, 0x0, 0x0, 0x725C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x725F, 0x0, 0x0, }},
+  {0x9C24, {0x725E, 0x725D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4949, 0x725B, 0x3073, 0x7260, 0x0, 0x7262, 0x0, }},
+  {0x9C39, {0x336F, 0x724D, 0x3137, 0x0, 0x0, 0x7264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7263, 0x7261, 0x432D, }},
+  {0x9C52, {0x4B70, 0x0, 0x0, 0x0, 0x0, 0x4E5A, 0x0, 0x0, 0x7265, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7266, 0x0, }},
+  {0x9C67, {0x7267, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7268, }},
+  {0x9C78, {0x7269, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9CE5, {0x443B, 0x0, 0x726A, 0x0, 0x4837, 0x0, 0x726F, 0x726B, 0x0, 0x0, 0x0, 0x726C, 0x0, 0x0, 0x4B31, 0x4C44, }},
+  {0x9CF6, {0x4650, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7270, 0x0, 0x0, }},
+  {0x9D06, {0x7271, 0x463E, 0x726E, 0x726D, 0x0, 0x0, 0x0, 0x0, 0x322A, 0x0, 0x0, 0x0, 0x7279, 0x0, 0x0, 0x7278, }},
+  {0x9D1B, {0x3175, 0x0, 0x0, 0x0, 0x7276, 0x0, 0x0, 0x0, 0x7275, 0x0, 0x0, 0x7273, 0x0, 0x337B, 0x0, 0x7272, }},
+  {0x9D2B, {0x3C32, 0x3229, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9D3B, {0x3963, 0x0, 0x0, 0x727C, 0x727B, 0x0, 0x727A, 0x0, 0x0, 0x7277, 0x0, 0x727D, 0x0, 0x727E, 0x0, 0x0, }},
+  {0x9D50, {0x7325, 0x7324, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7326, 0x0, 0x0, 0x312D, 0x7321, 0x7322, 0x0, }},
+  {0x9D60, {0x3974, 0x4C39, 0x0, 0x0, 0x7323, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B32, 0x0, 0x0, 0x732B, }},
+  {0x9D72, {0x7327, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x732C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9D87, {0x7329, 0x0, 0x7328, 0x0, 0x0, 0x0, 0x0, 0x0, 0x375C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9D9A, {0x732D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x732E, 0x0, 0x0, 0x0, 0x0, 0x732F, }},
+  {0x9DAB, {0x732A, 0x0, 0x0, 0x0, 0x7274, 0x0, 0x0, 0x7330, 0x0, 0x4461, 0x0, 0x0, 0x0, 0x7334, 0x0, 0x7335, }},
+  {0x9DBB, {0x7333, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7332, 0x7338, 0x0, 0x7331, 0x0, 0x7336, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9DCF, {0x7337, 0x0, 0x0, 0x0, 0x733A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7339, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9DE6, {0x733C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x733D, 0x0, 0x733E, 0x0, 0x0, 0x4F49, 0x0, 0x0, 0x0, }},
+  {0x9DF8, {0x733B, 0x426B, 0x3A6D, 0x0, 0x0, 0x733F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9E1A, {0x7340, 0x7341, 0x0, 0x0, 0x7342, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9E75, {0x7343, 0x0, 0x0, 0x3834, 0x7344, 0x0, 0x0, 0x0, 0x7345, 0x0, 0x3C2F, 0x0, 0x7346, 0x0, 0x0, 0x0, }},
+  {0x9E88, {0x7347, 0x0, 0x0, 0x7348, 0x7349, 0x0, 0x0, 0x0, 0x0, 0x734C, 0x734A, 0x4F3C, 0x0, 0x734B, 0x0, 0x4E6F, }},
+  {0x9E9D, {0x734D, 0x0, 0x4E5B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x734E, 0x477E, 0x0, 0x0, 0x734F, 0x7351, 0x0, 0x0, }},
+  {0x9EAD, {0x7352, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7350, 0x396D, 0x4C4D, 0x4B63, 0x5677, }},
+  {0x9EBE, {0x5D60, 0x4B7B, 0x0, 0x0, 0x0, 0x0, 0x322B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7354, 0x3550, }},
+  {0x9ECE, {0x7355, 0x7356, 0x7357, 0x0, 0x3975, 0x0, 0x7358, 0x0, 0x0, 0x0, 0x6054, 0x4C5B, 0x0, 0x4263, 0x7359, 0x735B, }},
+  {0x9EDE, {0x735A, 0x0, 0x735C, 0x0, 0x0, 0x0, 0x0, 0x735D, 0x0, 0x0, 0x735E, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9EEF, {0x735F, 0x0, 0x0, 0x0, 0x0, 0x7360, 0x0, 0x7361, 0x7362, 0x0, 0x7363, 0x0, 0x7364, 0x7365, 0x7366, 0x0, }},
+  {0x9F07, {0x7367, 0x7368, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4524, 0x0, 0x0, 0x0, 0x0, 0x385D, 0x0, 0x736A, 0x0, }},
+  {0x9F20, {0x414D, 0x736B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x736C, 0x0, 0x0, 0x0, }},
+  {0x9F3B, {0x4921, 0x0, 0x0, 0x736D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x736E, }},
+  {0x9F4B, {0x6337, 0x0, 0x0, 0x6C5A, 0x706D, 0x0, 0x0, 0x736F, 0x0, 0x7370, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9F5F, {0x7372, 0x7373, 0x7374, 0x4E70, 0x7371, 0x0, 0x0, 0x7375, 0x7376, 0x0, 0x0, 0x7378, 0x0, 0x7377, 0x0, 0x0, }},
+  {0x9F72, {0x737A, 0x0, 0x0, 0x0, 0x737B, 0x7379, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x9F8D, {0x4E36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x737C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x737D, }},
+  {0x9F9D, {0x6354, 0x0, 0x0, 0x737E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0xFE30, {0x7545, 0x753D, 0x0, 0x7532, 0x0, 0x754A, 0x754B, 0x7550, 0x7551, 0x754C, 0x754D, 0x755A, 0x755B, 0x7554, 0x7555, 0x7552, }},
+  {0xFE40, {0x7553, 0x7556, 0x7557, 0x7558, 0x7559, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0xFF01, {0x212A, 0x0, 0x2174, 0x2170, 0x2173, 0x2175, 0x0, 0x214A, 0x214B, 0x2176, 0x215C, 0x2124, 0x213E, 0x2125, 0x213F, 0x2330, }}, // Added 0xFF0D<->0x213E for HYPHEN compatibility
+  {0xFF11, {0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, 0x2177, }},
+  {0xFF21, {0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234A, 0x234B, 0x234C, 0x234D, 0x234E, 0x234F, 0x2350, }},
+  {0xFF31, {0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235A, 0x214E, 0x2140, 0x214F, 0x2130, 0x2132, 0x212E, }},
+  {0xFF41, {0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F, 0x2370, }},
+  {0xFF51, {0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0x2141, 0x0, 0x0, }},
+  {0xFFE5, {0x216F, }},
+};
+
+static inline UInt16 __CFToJIS(UniChar character) { // Charset is based on MacJapanese & JIS0212
+    UInt16 bytes = CFStringEncodingUnicodeTo16BitEncodingWithArray16(__CFToJISCharMap, NUM_TOJIS_CHARMAP, character);
+
+    return (bytes ? bytes : 0xFFFD);
+}
+
+#define NUM_FROMJIS0208_CHARMAP 243
+static CFStringEncodingUnicodeTo16BitCharMapWithArray32 __CFFromJIS0208CharMap [NUM_FROMJIS0208_CHARMAP] = {
+  {0x2121, {0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0xB4, 0xFF40, 0xA8, 0xFF3E, 0x203E, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2014, 0x2010, 0xFF0F, 0xFF3C, }},
+  {0x2141, {0x301C, 0x2016, 0xFF5C, 0x22EF, 0x2025, 0x2018, 0x2019, 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0xB1, 0xD7, 0xF7, }},
+  {0x2161, {0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234, 0x2642, 0x2640, 0xB0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04, 0xA2, 0xA3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0xA7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x0, 0x0, }},
+  {0x2221, {0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, }},
+  {0x2241, {0x2229, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2227, 0x2228, 0xAC, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, }},
+  {0x2261, {0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, 0xB6, 0x0, 0x0, 0x0, 0x0, 0x25EF, 0x0, 0x0, }},
+  {0x2330, {0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, }},
+  {0x2350, {0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, }},
+  {0x2370, {0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2421, {0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, }},
+  {0x2441, {0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, }},
+  {0x2461, {0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2521, {0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, }},
+  {0x2541, {0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0, }},
+  {0x2561, {0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2621, {0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, 0x3A0, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, 0x3A8, 0x3A9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2641, {0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, 0x3C0, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, 0x3C8, 0x3C9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2721, {0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x401, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, }},
+  {0x2741, {0x42F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x451, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, }},
+  {0x2761, {0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2821, {0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, }},
+  {0x2921, {0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, 0x2470, 0x2471, 0x2472, 0x2473, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2474, 0x2475, }},
+  {0x2941, {0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2776, 0x2777, 0x2778, 0x2779, }},
+  {0x2961, {0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F, 0x2490, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2A21, {0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, }},
+  {0x2A5D, {0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2B21, {0x339C, 0x339F, 0x339D, 0x33A0, 0x33A4, 0x0, 0x33A1, 0x33A5, 0x339E, 0x33A2, 0x338E, 0x0, 0x338F, 0x33C4, 0x3396, 0x3397, 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x2109, 0x33D4, 0x33CB, 0x3390, 0x3385, 0x3386, 0x3387, 0x0, 0x0, 0x0, }},
+  {0x2B7B, {0x2116, 0x33CD, 0x2121, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2C21, {0x2664, 0x2667, 0x2661, 0x2662, 0x2660, 0x2663, 0x2665, 0x2666, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3020, 0x260E, 0x3004, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2C49, {0x261E, 0x261C, 0x261D, 0x261F, 0x21C6, 0x21C4, 0x21C5, 0x0, 0x21E8, 0x21E6, 0x21E7, 0x21E9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2D21, {0x3230, 0x322A, 0x322B, 0x322C, 0x322D, 0x322E, 0x322F, 0x3240, 0x3237, 0x3242, 0x3243, 0x3239, 0x323A, 0x3231, 0x323E, 0x3234, 0x3232, 0x323B, 0x3236, 0x3233, 0x3235, 0x323C, 0x323D, 0x323F, 0x3238, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2D73, {0x32A4, 0x32A5, 0x32A6, 0x32A7, 0x32A8, 0x32A9, 0x3296, 0x329D, 0x3298, 0x329E, 0x0, 0x3299, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2E21, {0x3349, 0x3322, 0x334D, 0x3314, 0x3316, 0x3305, 0x3333, 0x334E, 0x3303, 0x3336, 0x3318, 0x3315, 0x3327, 0x3351, 0x334A, 0x3339, 0x3357, 0x330D, 0x3342, 0x3323, 0x3326, 0x333B, 0x332B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3300, 0x331E, }},
+  {0x2E41, {0x332A, 0x3331, 0x3347, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2E67, {0x337E, 0x337D, 0x337C, 0x337B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x337F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2F21, {0x222E, 0x221F, 0x22BF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x301D, 0x301F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x2F49, {0x3094, 0x0, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x3021, {0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, }},
+  {0x3041, {0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, }},
+  {0x3061, {0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D, 0x0, 0x0, }},
+  {0x3121, {0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, }},
+  {0x3141, {0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712, }},
+  {0x3161, {0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC, 0x0, 0x0, }},
+  {0x3221, {0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, }},
+  {0x3241, {0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, }},
+  {0x3261, {0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539, 0x0, 0x0, }},
+  {0x3321, {0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, }},
+  {0x3341, {0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F, }},
+  {0x3361, {0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x0, 0x0, }},
+  {0x3421, {0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, }},
+  {0x3441, {0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, }},
+  {0x3461, {0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4, 0x0, 0x0, }},
+  {0x3521, {0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, }},
+  {0x3541, {0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D, }},
+  {0x3561, {0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC, 0x0, 0x0, }},
+  {0x3621, {0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, }},
+  {0x3641, {0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, }},
+  {0x3661, {0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48, 0x0, 0x0, }},
+  {0x3721, {0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, }},
+  {0x3741, {0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287, }},
+  {0x3761, {0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x0, 0x0, }},
+  {0x3821, {0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, }},
+  {0x3841, {0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, }},
+  {0x3861, {0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411, 0x0, 0x0, }},
+  {0x3921, {0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, }},
+  {0x3941, {0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805, }},
+  {0x3961, {0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC, 0x0, 0x0, }},
+  {0x3A21, {0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, }},
+  {0x3A41, {0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, }},
+  {0x3A61, {0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237, 0x0, 0x0, }},
+  {0x3B21, {0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, }},
+  {0x3B41, {0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B, }},
+  {0x3B61, {0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642, 0x0, 0x0, }},
+  {0x3C21, {0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, }},
+  {0x3C41, {0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, }},
+  {0x3C61, {0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468, 0x0, 0x0, }},
+  {0x3D21, {0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, }},
+  {0x3D41, {0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96, }},
+  {0x3D61, {0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F, 0x0, 0x0, }},
+  {0x3E21, {0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, }},
+  {0x3E41, {0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, }},
+  {0x3E61, {0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE, 0x0, 0x0, }},
+  {0x3F21, {0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, }},
+  {0x3F41, {0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, }},
+  {0x3F61, {0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE, 0x0, 0x0, }},
+  {0x4021, {0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, }},
+  {0x4041, {0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, }},
+  {0x4061, {0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA, 0x0, 0x0, }},
+  {0x4121, {0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, }},
+  {0x4141, {0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD, }},
+  {0x4161, {0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E, 0x0, 0x0, }},
+  {0x4221, {0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, }},
+  {0x4241, {0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, }},
+  {0x4261, {0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA, 0x0, 0x0, }},
+  {0x4321, {0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, }},
+  {0x4341, {0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, }},
+  {0x4361, {0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x0, 0x0, }},
+  {0x4421, {0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, }},
+  {0x4441, {0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, }},
+  {0x4461, {0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013, 0x0, 0x0, }},
+  {0x4521, {0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, }},
+  {0x4541, {0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD, }},
+  {0x4561, {0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230, 0x0, 0x0, }},
+  {0x4621, {0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, }},
+  {0x4641, {0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, }},
+  {0x4661, {0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165, 0x0, 0x0, }},
+  {0x4721, {0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, }},
+  {0x4741, {0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973, }},
+  {0x4761, {0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x0, 0x0, }},
+  {0x4821, {0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, }},
+  {0x4841, {0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, }},
+  {0x4861, {0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E, 0x0, 0x0, }},
+  {0x4921, {0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, }},
+  {0x4941, {0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7, }},
+  {0x4961, {0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D, 0x0, 0x0, }},
+  {0x4A21, {0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, }},
+  {0x4A41, {0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, }},
+  {0x4A61, {0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B, 0x0, 0x0, }},
+  {0x4B21, {0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, }},
+  {0x4B41, {0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469, }},
+  {0x4B61, {0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x0, 0x0, }},
+  {0x4C21, {0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, }},
+  {0x4C41, {0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, }},
+  {0x4C61, {0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652, 0x0, 0x0, }},
+  {0x4D21, {0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, }},
+  {0x4D41, {0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83, }},
+  {0x4D61, {0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483, 0x0, 0x0, }},
+  {0x4E21, {0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, }},
+  {0x4E41, {0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, }},
+  {0x4E61, {0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F, 0x0, 0x0, }},
+  {0x4F21, {0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, }},
+  {0x4F41, {0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, 0x6E7E, 0x7897, 0x8155, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x5021, {0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, }},
+  {0x5041, {0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, }},
+  {0x5061, {0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2, 0x0, 0x0, }},
+  {0x5121, {0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, }},
+  {0x5141, {0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0, }},
+  {0x5161, {0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8, 0x0, 0x0, }},
+  {0x5221, {0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, }},
+  {0x5241, {0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, }},
+  {0x5261, {0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8, 0x0, 0x0, }},
+  {0x5321, {0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, }},
+  {0x5341, {0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B, }},
+  {0x5361, {0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709, 0x0, 0x0, }},
+  {0x5421, {0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, }},
+  {0x5441, {0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, }},
+  {0x5461, {0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969, 0x0, 0x0, }},
+  {0x5521, {0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, }},
+  {0x5541, {0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83, }},
+  {0x5561, {0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53, 0x0, 0x0, }},
+  {0x5621, {0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, }},
+  {0x5641, {0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, }},
+  {0x5661, {0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF, 0x0, 0x0, }},
+  {0x5721, {0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, }},
+  {0x5741, {0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019, }},
+  {0x5761, {0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A, 0x0, 0x0, }},
+  {0x5821, {0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, }},
+  {0x5841, {0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, }},
+  {0x5861, {0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B, 0x0, 0x0, }},
+  {0x5921, {0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, }},
+  {0x5941, {0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369, }},
+  {0x5961, {0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x0, 0x0, }},
+  {0x5A21, {0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, }},
+  {0x5A41, {0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, }},
+  {0x5A61, {0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC, 0x0, 0x0, }},
+  {0x5B21, {0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, }},
+  {0x5B41, {0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3, }},
+  {0x5B61, {0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD, 0x0, 0x0, }},
+  {0x5C21, {0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, }},
+  {0x5C41, {0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, }},
+  {0x5C61, {0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3, 0x0, 0x0, }},
+  {0x5D21, {0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, }},
+  {0x5D41, {0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE, }},
+  {0x5D61, {0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x0, 0x0, }},
+  {0x5E21, {0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, }},
+  {0x5E41, {0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, }},
+  {0x5E61, {0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC, 0x0, 0x0, }},
+  {0x5F21, {0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, }},
+  {0x5F41, {0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9, }},
+  {0x5F61, {0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC, 0x0, 0x0, }},
+  {0x6021, {0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, }},
+  {0x6041, {0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, }},
+  {0x6061, {0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1, 0x0, 0x0, }},
+  {0x6121, {0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, }},
+  {0x6141, {0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC, }},
+  {0x6161, {0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670, 0x0, 0x0, }},
+  {0x6221, {0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, }},
+  {0x6241, {0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, }},
+  {0x6261, {0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC, 0x0, 0x0, }},
+  {0x6321, {0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, }},
+  {0x6341, {0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6, }},
+  {0x6361, {0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50, 0x0, 0x0, }},
+  {0x6421, {0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, }},
+  {0x6441, {0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, }},
+  {0x6461, {0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06, 0x0, 0x0, }},
+  {0x6521, {0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, }},
+  {0x6541, {0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32, }},
+  {0x6561, {0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A, 0x0, 0x0, }},
+  {0x6621, {0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, }},
+  {0x6641, {0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, }},
+  {0x6661, {0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B, 0x0, 0x0, }},
+  {0x6721, {0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, }},
+  {0x6741, {0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262, }},
+  {0x6761, {0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9, 0x0, 0x0, }},
+  {0x6821, {0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, }},
+  {0x6841, {0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, }},
+  {0x6861, {0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548, 0x0, 0x0, }},
+  {0x6921, {0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, }},
+  {0x6941, {0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF, }},
+  {0x6961, {0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759, 0x0, 0x0, }},
+  {0x6A21, {0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, }},
+  {0x6A41, {0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, }},
+  {0x6A61, {0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E, 0x0, 0x0, }},
+  {0x6B21, {0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, }},
+  {0x6B41, {0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, }},
+  {0x6B61, {0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B, 0x0, 0x0, }},
+  {0x6C21, {0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, }},
+  {0x6C41, {0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, }},
+  {0x6C61, {0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A, 0x0, 0x0, }},
+  {0x6D21, {0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, }},
+  {0x6D41, {0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62, }},
+  {0x6D61, {0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x0, 0x0, }},
+  {0x6E21, {0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, }},
+  {0x6E41, {0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, }},
+  {0x6E61, {0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E, 0x0, 0x0, }},
+  {0x6F21, {0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, }},
+  {0x6F41, {0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0, }},
+  {0x6F61, {0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E, 0x0, 0x0, }},
+  {0x7021, {0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, }},
+  {0x7041, {0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, }},
+  {0x7061, {0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870, 0x0, 0x0, }},
+  {0x7121, {0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, }},
+  {0x7141, {0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E, }},
+  {0x7161, {0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x0, 0x0, }},
+  {0x7221, {0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, }},
+  {0x7241, {0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, }},
+  {0x7261, {0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48, 0x0, 0x0, }},
+  {0x7321, {0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, }},
+  {0x7341, {0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4, }},
+  {0x7361, {0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0, 0x0, 0x0, }},
+  {0x7421, {0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }},
+  {0x7532, {0xFE33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE30, 0x0, 0x0, 0x0, 0x0, 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0x0, 0x0, 0xFE37, 0xFE38, }},
+  {0x7552, {0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3B, 0xFE3C, }},
+};
+
+static inline UniChar __CFFromJIS0208(UInt16 bytes) {
+    UniChar ch = CFStringEncodingUnicodeTo16BitEncodingWithArray32(__CFFromJIS0208CharMap, NUM_FROMJIS0208_CHARMAP, bytes);
+    return (ch ? ch : 0xFFFD);
+}
+
+
+/* Precomposition */
+static Boolean __CFIsValidCombiningCharJapanese(UniChar character) {
+    switch (character) {
+        case 0x0306:
+        case 0x0308:
+        case 0x0338:
+        case 0x3099:
+        case 0x309A:
+            return TRUE;
+
+        default:
+            return FALSE;
+    }
+}
+
+static inline UniChar __CFPrecomposeCharJapanese(const UniChar *character, Boolean isMacJapanese) {
+    UniChar ch = *character;
+
+    switch (*(character + 1)) {
+        case 0x0306:
+            if ((ch == 0x0418) || (ch == 0x0438)) return ch + 1;
+            break;
+
+        case 0x0308:
+            if (ch == 0x0415) return 0x0401;
+            else if (ch == 0x0435) return 0x0451;
+            break;
+
+        case 0x0338:
+            if (ch == 0x003D) return 0x2260;
+            break;
+
+        case 0x3099:
+            switch (ch) {
+                case 0x3046: return (isMacJapanese ? 0x3094 : 0);
+                case 0x30A6: return (isMacJapanese ? 0x30F4 : 0);
+                case 0x30EF: return (isMacJapanese ? 0x30F7 : 0);
+                case 0x30F0: return (isMacJapanese ? 0x30F8 : 0);
+                case 0x30F1: return (isMacJapanese ? 0x30F9 : 0);
+                case 0x30F2: return (isMacJapanese ? 0x30FA : 0);
+                case 0x30FD: return (isMacJapanese ? 0x30FE : 0);
+                default: return ch + 1;
+            }
+            break;
+
+        case 0x309A:
+            return ch + 2;
+    }
+    return 0;
+}
+
+/* Shift JIS */
+#define _CFFromShiftJISEUDC(sjisVal) ((sjisVal) - 0xF040 + 0xE000 - ((((sjisVal) & 0x0F00) >> 8) * 0x44 + ((sjisVal) & 0x0080 ? 1 : 0)))
+#define _CFToShiftJISEUDC(uniVal) (((uniVal) - 0xE000) + 0xF040 + ((((uniVal) - 0xE000) / 0xBC * 0x44) + ((uniVal) - 0xE000) % 0xBC / 0x3F))
+
+static inline void JIS0208ToShiftJIS(UInt16 jis, UInt8 *sjis) {
+    UInt8 hiByte = (jis >> 8);
+    UInt8 loByte = (jis & 0x7f);
+
+    loByte += ((hiByte & 1) ? 0x1f : 0x7d);
+    hiByte = ((hiByte - 0x21) >> 1) + 0x81;
+    if (loByte >= 0x7f) loByte++;
+    if (hiByte > 0x9f) hiByte += 0x40;
+    *sjis = hiByte;
+    *(sjis+1) = loByte;
+}
+
+static inline UInt16 ShiftJISToJIS0208(const UInt8 *sjis) {
+    UInt8 hiByte = *sjis;
+    UInt8 loByte = *(sjis+1);
+
+    hiByte -= (hiByte <= 0x9f) ? 0x71 : 0xb1;
+    hiByte = hiByte * 2 +1;
+    if (loByte > 0x7f) loByte--;
+    if (loByte  >=  0x9e) {
+        loByte -= 0x7d, hiByte++;
+    } else {
+        loByte -= 0x1f;
+    }
+    return (hiByte << 8) | loByte;
+}
+
+/* MacOS Japanese */
+static inline UInt16 __CFLookupF86XSeq(const UniChar *characters, const UniChar *table, UInt32 size) {
+    const UniChar *u1, *u2;
+    UInt32 length;
+
+    while (*table) {
+        u1 = characters;
+        u2 = table + 1;
+        for (length = size - 1;length;length--) if (*u1++ != *u2++) break;
+        if (!length) return *table;
+        table += size;
+    }
+
+    return 0;
+}
+
+static struct {
+    UInt16 word;
+    UniChar seq[2];
+} __CFF860SeqTable[] = {
+    {0x8591, {0x0030, 0x002E}},
+    {0x85AD, {0x0058, 0x0056}},
+    {0x85C1, {0x0078, 0x0076}},
+    {0x865D, {0x0054, 0x0042}},
+    {0x86CE, {0x2193, 0x2191}},
+    {0},
+};
+
+static struct {
+    UInt16 word;
+    UniChar seq[3];
+} __CFF861SeqTable[] = {
+    {0x85AC, {0x0058, 0x0049, 0x0056}},
+    {0x85C0, {0x0078, 0x0069, 0x0076}},
+    {0x869E, {0x0046, 0x0041, 0x0058}},
+    {0},
+};
+
+static struct {
+    UInt16 word;
+    UniChar seq[4];
+} __CFF862SeqTable[] = {
+    {0x85AB, {0x0058, 0x0049, 0x0049, 0x0049}},
+    {0x85BF, {0x0078, 0x0069, 0x0069, 0x0069}},
+    {0x87FB, {0x6709, 0x9650, 0x4F1A, 0x793E}},
+    {0x87FC, {0x8CA1, 0x56E3, 0x6CD5, 0x4EBA}},
+    {0},
+};
+
+UInt32 __CFToMacJapanese(UInt32 flags, const UniChar *characters, UInt32 numChars, UInt8 *bytes, UInt32 maxByteLen, UInt32 *usedByteLen) {
+    UInt32 processedCharLen = 0;
+    UInt32 theUsedByteLen = 0;
+    UniChar ch;
+    Boolean mapBackSlushToYen = (flags & kCFStringEncodingUseHFSPlusCanonical ? TRUE : FALSE);
+
+    while ((processedCharLen < numChars) && (!maxByteLen || ((theUsedByteLen < maxByteLen) || ((flags & kCFStringEncodingComposeCombinings) && __CFIsValidCombiningCharJapanese(*characters))))) {
+        ch = *characters;
+
+        if (ch < 0x80) {
+            theUsedByteLen++;
+            if (maxByteLen) *bytes++ = (mapBackSlushToYen && ch == 0x5c ? 0x80 : (UInt8)ch);
+        } else if ((ch >= 0xFF61) && (ch <= 0xFF9F)) {
+            theUsedByteLen++;
+            if (maxByteLen) *bytes++ = (UInt8)(ch - 0xFF61 + 0xA1);
+        } else {
+            UInt16 word;
+
+            if ((word = __CFToJIS(ch)) <= 0xFF) {
+                theUsedByteLen++;
+                if (maxByteLen) *bytes++ = (UInt8)word;
+            } else if (word < 0x8000) {
+                theUsedByteLen += 2;
+                if (maxByteLen) {
+                    if (theUsedByteLen > maxByteLen) break;
+                    JIS0208ToShiftJIS(word, bytes);
+                    bytes += 2;
+                }
+            } else if ((ch >= 0xE000) && (ch <= 0xE98B)) { // EUDC
+                word = _CFToShiftJISEUDC(ch);
+                theUsedByteLen += 2;
+                if (maxByteLen) {
+                    if (theUsedByteLen > maxByteLen) break;
+                    *bytes++ = (word >> 8); *bytes++ = (word & 0xFF);
+                }
+            } else if ((word == 0xFFFD) && ((processedCharLen > 0) || ((ch & 0xFFF0) == 0xF860)) && !(flags & kCFStringEncodingSubstituteCombinings)) {
+                if (flags & kCFStringEncodingComposeCombinings) {
+                    if (__CFIsValidCombiningCharJapanese(ch)) {
+                        if ((word = __CFToJIS(__CFPrecomposeCharJapanese((characters - 1), TRUE))) < 0x8000) {
+                            if (maxByteLen) {
+                                JIS0208ToShiftJIS(word, bytes - (*(bytes - 1) == 0x003D ? 1 : 2)); // Should have cleaner solution for backtracking ?
+                            }
+                         } else {
+                             *usedByteLen = theUsedByteLen;
+                             return processedCharLen;
+                         }
+                    } else if (ch == 0x20DD) {
+                        switch (*(characters - 1)) {
+                            case 0x5927: word = 0x8791; break;
+                            case 0x5C0F: word = 0x8792; break;
+                            case 0x63A7: word = 0x879D; break;
+                            default:
+                                *usedByteLen = theUsedByteLen;
+                                return processedCharLen;
+                        }
+
+                        if (maxByteLen) {
+                            *(bytes - 2) = (word >> 8);
+                            *(bytes - 1) = (word & 0xFF);
+                        }
+                    } else if (ch == 0xF87A) {
+                        switch (*(characters - 1)) {
+                            case 0x21E6: word = 0x86D4; break;
+                            case 0x21E7: word = 0x86D5; break;
+                            case 0x21E8: word = 0x86D3; break;
+                            case 0x21E9: word = 0x86D6; break;
+                            default:
+                                *usedByteLen = theUsedByteLen;
+                                return processedCharLen;
+                        }
+
+                        if (maxByteLen) {
+                            *(bytes - 2) = (word >> 8);
+                            *(bytes - 1) = (word & 0xFF);
+                        }
+                    } else if (ch == 0xF87E) {
+                        switch (*(characters - 1)) {
+                            case 0x2010: word = 0xEB5D; break;
+                            case 0x2016: word = 0xEB61; break;
+                            case 0x203E: word = 0xEB50; break;
+                            case 0x22EF: word = 0xEB63; break;
+                            case 0x3001: word = 0xEB41; break;
+                            case 0x3002: word = 0xEB42; break;
+                            case 0x301C: word = 0xEB60; break;
+                            case 0x3041: word = 0xEC9F; break;
+                            case 0x3043: word = 0xECA1; break;
+                            case 0x3045: word = 0xECA3; break;
+                            case 0x3047: word = 0xECA5; break;
+                            case 0x3049: word = 0xECA7; break;
+                            case 0x3063: word = 0xECC1; break;
+                            case 0x3083: word = 0xECE1; break;
+                            case 0x3085: word = 0xECE3; break;
+                            case 0x3087: word = 0xECE5; break;
+                            case 0x308E: word = 0xECEC; break;
+                            case 0x30A1: word = 0xED40; break;
+                            case 0x30A3: word = 0xED42; break;
+                            case 0x30A5: word = 0xED44; break;
+                            case 0x30A7: word = 0xED46; break;
+                            case 0x30A9: word = 0xED48; break;
+                            case 0x30C3: word = 0xED62; break;
+                            case 0x30E3: word = 0xED83; break;
+                            case 0x30E5: word = 0xED85; break;
+                            case 0x30E7: word = 0xED87; break;
+                            case 0x30EE: word = 0xED8E; break;
+                            case 0x30F5: word = 0xED95; break;
+                            case 0x30F6: word = 0xED96; break;
+                            case 0x30FC: word = 0xEB5B; break;
+                            case 0xFF1D: word = 0xEB81; break;
+                            case 0xFF3B: word = 0xEB6D; break;
+                            case 0xFF3D: word = 0xEB6E; break;
+                            case 0xFF5C: word = 0xEB62; break;
+                            default:
+                                *usedByteLen = theUsedByteLen;
+                                return processedCharLen;
+                        }
+
+                        if (maxByteLen) {
+                            *(bytes - 2) = (word >> 8);
+                            *(bytes - 1) = (word & 0xFF);
+                        }
+                    } else if (ch == 0xF87F) {
+                        switch (*(characters - 1)) {
+                            case 0xFF47: word = 0x864B; break;
+                            case 0xFF4D: word = 0x8645; break;
+                            default:
+                                *usedByteLen = theUsedByteLen;
+                                return processedCharLen;
+                        }
+
+                        if (maxByteLen) {
+                            *(bytes - 2) = (word >> 8);
+                            *(bytes - 1) = (word & 0xFF);
+                        }
+                    } else if (ch == 0xF860) {
+                        if (((processedCharLen + 3) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF860SeqTable, 3))) break;
+                        if (maxByteLen) {
+                            *bytes++ = (word >> 8); *bytes++ = (word & 0xFF);
+                        }
+                        theUsedByteLen += 2;
+                        characters += 1;
+                        processedCharLen += 2;
+                    } else if (ch == 0xF861) {
+                        if (((processedCharLen + 4) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF861SeqTable, 4))) break;
+                        if (maxByteLen) {
+                            *bytes++ = (word >> 8); *bytes++ = (word & 0xFF);
+                        }
+                        theUsedByteLen += 2;
+                        characters += 2;
+                        processedCharLen += 3;
+                    } else if (ch == 0xF862) {
+                        if (((processedCharLen + 5) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF862SeqTable, 5))) break;
+                        if (maxByteLen) {
+                            *bytes++ = (word >> 8); *bytes++ = (word & 0xFF);
+                        }
+                        theUsedByteLen += 2;
+                        characters += 3;
+                        processedCharLen += 4;
+                    } else {
+                        break;
+                    }
+                }
+            } else {
+                break;
+            }
+        }
+        characters++;
+        processedCharLen++;
+    }
+
+    *usedByteLen = theUsedByteLen;
+    return processedCharLen;
+}
+
+static inline UInt16 __CFFromMacJapaneseCore(const UInt8 *bytes, UInt32 numBytes, UniChar *character, Boolean mapBackSlushToYen) {
+    if ((*bytes <= 0x80) || (*bytes == 0xA0)) { // ASCII
+        if (mapBackSlushToYen) {
+            *character = (*bytes == 0x5C ? (UniChar)0xA5 : (*bytes == 0x80 ? (UniChar)0x5C : (UniChar)*bytes));
+        } else {
+            *character = (UniChar)*bytes;
+        }
+        return 1;
+    } else if (*bytes > 0xA0 && *bytes < 0xE0) { // Half width Kana
+        *character = (UniChar)(*bytes - 0xA1 + 0xFF61);
+        return 1;
+    } else {
+        switch (*bytes) {
+            case 0xFD: *character = 0x00A9; return 1;
+            case 0xFE: *character = 0x2122; return 1;
+            case 0xFF: *character = 0x2026; return 1;
+
+            default:
+                if (numBytes > 1) {
+                    if ((*character = __CFFromJIS0208(ShiftJISToJIS0208(bytes))) != 0xFFFD) {
+                        return 2;
+                    } else if (((*bytes >= 0xF0) && (*bytes <= 0xFC)) && ((*(bytes + 1) >= 0x40) && (*(bytes + 1) <= 0xFC) && (*(bytes + 1) != 0x7F))) { // EUDC
+                        *character = _CFFromShiftJISEUDC(*bytes << 8 | *(bytes + 1));
+                        return 2;
+                    }
+                }
+        }
+       return 0;
+    }
+}
+
+/* This table maps MacJapanese encoded word to index into the tables below.  Most 2bits are used for decomposed len selector */
+#define NUM_FROM_MACJAPANESE_DECOMP 55
+static const CFStringEncodingUnicodeTo8BitCharMap macjapanese_to_uni_decomp[NUM_FROM_MACJAPANESE_DECOMP] = {
+    {0x8591, 65}, // digit zero full stop
+    {0x85AB, 194}, // roman numeral thirteen
+    {0x85AC, 131}, // roman numeral fourteen
+    {0x85AD, 68}, // roman numeral fifteen
+    {0x85BF, 197}, // small roman numeral thirteen
+    {0x85C0, 134}, // small roman numeral fourteen
+    {0x85C1, 71}, // small roman numeral fifteen
+    {0x8645, 1}, // square m
+    {0x864B, 2}, // square g
+    {0x865D, 72}, // square TB
+    {0x869E, 137}, // FAX sign
+    {0x86CE, 74}, // downwards arrow leftwards of upwards arrow
+    {0x86D3, 3}, // rightwards black arrow
+    {0x86D4, 4}, // leftwards black arrow
+    {0x86D5, 5}, // upwards black arrow
+    {0x86D6, 6}, // downwards black arrow
+    {0x8791, 7}, // ideograph big + COMBINING ENCLOSING CIRCLE
+    {0x8792, 8}, // ideograph small + COMBINING ENCLOSING CIRCLE
+    {0x879D, 9}, // ideograph memo + COMBINING ENCLOSING CIRCLE
+    {0x87FB, 203}, // square "limited company, ltd. [yuugen gaisha]"
+    {0x87FC, 204}, // square "foundation [zaidan houjin]"
+    {0xEB41, 10}, // vertical form for IDEOGRAPHIC COMMA
+    {0xEB42, 11}, // vertical form for IDEOGRAPHIC FULL STOP
+    {0xEB50, 12}, // vertical form for OVERLINE
+    {0xEB5B, 13}, // vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK
+    {0xEB5D, 14}, // vertical form for HYPHEN
+    {0xEB60, 15}, // vertical form for WAVE DASH
+    {0xEB61, 16}, // vertical form for DOUBLE VERTICAL LINE
+    {0xEB62, 17}, // vertical form for FULLWIDTH VERTICAL LINE
+    {0xEB63, 18}, // vertical form for MIDLINE HORIZONTAL ELLIPSIS
+    {0xEB6D, 19}, // vertical form for FULLWIDTH LEFT SQUARE BRACKET
+    {0xEB6E, 20}, // vertical form for FULLWIDTH RIGHT SQUARE BRACKET
+    {0xEB81, 21}, // vertical form for FULLWIDTH EQUALS SIGN
+    {0xEC9F, 22}, // vertical form for HIRAGANA LETTER SMALL A
+    {0xECA1, 23}, // vertical form for HIRAGANA LETTER SMALL I
+    {0xECA3, 24}, // vertical form for HIRAGANA LETTER SMALL U
+    {0xECA5, 25}, // vertical form for HIRAGANA LETTER SMALL E
+    {0xECA7, 26}, // vertical form for HIRAGANA LETTER SMALL O
+    {0xECC1, 27}, // vertical form for HIRAGANA LETTER SMALL TU
+    {0xECE1, 28}, // vertical form for HIRAGANA LETTER SMALL YA
+    {0xECE3, 29}, // vertical form for HIRAGANA LETTER SMALL YU
+    {0xECE5, 30}, // vertical form for HIRAGANA LETTER SMALL YO
+    {0xECEC, 31}, // vertical form for HIRAGANA LETTER SMALL WA
+    {0xED40, 32}, // vertical form for KATAKANA LETTER SMALL A
+    {0xED42, 33}, // vertical form for KATAKANA LETTER SMALL I
+    {0xED44, 34}, // vertical form for KATAKANA LETTER SMALL U
+    {0xED46, 35}, // vertical form for KATAKANA LETTER SMALL E
+    {0xED48, 36}, // vertical form for KATAKANA LETTER SMALL O
+    {0xED62, 37}, // vertical form for KATAKANA LETTER SMALL TU
+    {0xED83, 38}, // vertical form for KATAKANA LETTER SMALL YA
+    {0xED85, 39}, // vertical form for KATAKANA LETTER SMALL YU
+    {0xED87, 40}, // vertical form for KATAKANA LETTER SMALL YO
+    {0xED8E, 41}, // vertical form for KATAKANA LETTER SMALL WA
+    {0xED95, 42}, // vertical form for KATAKANA LETTER SMALL KA
+    {0xED96, 43}, // vertical form for KATAKANA LETTER SMALL KE 
+};
+
+static const struct {
+    const UniChar seq[2];
+} __CFTwoCharDecompSeqTable[] = {
+    {{0xFF4D, 0xF87F}}, // square m
+    {{0xFF47, 0xF87F}}, // square g
+    {{0x21E8, 0xF87A}}, // rightwards black arrow
+    {{0x21E6, 0xF87A}}, // leftwards black arrow
+    {{0x21E7, 0xF87A}}, // upwards black arrow
+    {{0x21E9, 0xF87A}}, // downwards black arrow
+    {{0x5927, 0x20DD}}, // ideograph big ,  COMBINING ENCLOSING CIRCLE
+    {{0x5C0F, 0x20DD}}, // ideograph small ,  COMBINING ENCLOSING CIRCLE
+    {{0x63A7, 0x20DD}}, // ideograph memo ,  COMBINING ENCLOSING CIRCLE
+    {{0x3001, 0xF87E}}, // vertical form for IDEOGRAPHIC COMMA
+    {{0x3002, 0xF87E}}, // vertical form for IDEOGRAPHIC FULL STOP
+    {{0x203E, 0xF87E}}, // vertical form for OVERLINE
+    {{0x30FC, 0xF87E}}, // vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK
+    {{0x2010, 0xF87E}}, // vertical form for HYPHEN
+    {{0x301C, 0xF87E}}, // vertical form for WAVE DASH
+    {{0x2016, 0xF87E}}, // vertical form for DOUBLE VERTICAL LINE
+    {{0xFF5C, 0xF87E}}, // vertical form for FULLWIDTH VERTICAL LINE
+    {{0x22EF, 0xF87E}}, // vertical form for MIDLINE HORIZONTAL ELLIPSIS
+    {{0xFF3B, 0xF87E}}, // vertical form for FULLWIDTH LEFT SQUARE BRACKET
+    {{0xFF3D, 0xF87E}}, // vertical form for FULLWIDTH RIGHT SQUARE BRACKET
+    {{0xFF1D, 0xF87E}}, // vertical form for FULLWIDTH EQUALS SIGN
+    {{0x3041, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL A
+    {{0x3043, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL I
+    {{0x3045, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL U
+    {{0x3047, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL E
+    {{0x3049, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL O
+    {{0x3063, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL TU
+    {{0x3083, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YA
+    {{0x3085, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YU
+    {{0x3087, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YO
+    {{0x308E, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL WA
+    {{0x30A1, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL A
+    {{0x30A3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL I
+    {{0x30A5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL U
+    {{0x30A7, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL E
+    {{0x30A9, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL O
+    {{0x30C3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL TU
+    {{0x30E3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YA
+    {{0x30E5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YU
+    {{0x30E7, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YO
+    {{0x30EE, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL WA
+    {{0x30F5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL KA
+    {{0x30F6, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL KE 
+};
+
+static const struct {
+    const UniChar seq[5];
+} __CFF86XCharDecompSeqTable[] = {
+    {{0xF860, 0x0030, 0x002E}}, // digit zero full stop
+    {{0xF862, 0x0058, 0x0049, 0x0049, 0x0049}}, // roman numeral thirteen
+    {{0xF861, 0x0058, 0x0049, 0x0056}}, // roman numeral fourteen
+    {{0xF860, 0x0058, 0x0056}}, // roman numeral fifteen
+    {{0xF862, 0x0078, 0x0069, 0x0069, 0x0069}}, // small roman numeral thirteen
+    {{0xF861, 0x0078, 0x0069, 0x0076}}, // small roman numeral fourteen
+    {{0xF860, 0x0078, 0x0076}}, // small roman numeral fifteen
+    {{0xF860, 0x0054, 0x0042}}, // square TB
+    {{0xF861, 0x0046, 0x0041, 0x0058}}, // FAX sign
+    {{0xF860, 0x2193, 0x2191}}, // downwards arrow leftwards of upwards arrow
+    {{0xF862, 0x6709, 0x9650, 0x4F1A, 0x793E}}, // square "limited company, ltd. [yuugen gaisha]"
+    {{0xF862, 0x8CA1, 0x56E3, 0x6CD5, 0x4EBA}}, // square "foundation [zaidan houjin]"
+};
+
+static inline void __usncpy(UniChar *c1, const UniChar *c2, UInt32 length) {
+    while (length--) *c1++ = *c2++;
+}
+
+
+/* Binary searches CFStringEncodingUnicodeTo8BitCharMap */
+static inline Boolean CFStringEncodingUnicodeTo8BitEncoding(const CFStringEncodingUnicodeTo8BitCharMap *theTable, UInt32 numElem, UniChar character, UInt8 *ch) {
+    const CFStringEncodingUnicodeTo8BitCharMap *p, *q, *divider;
+
+    if ((character < theTable[0]._u) || (character > theTable[numElem-1]._u)) {
+        return 0;
+    }
+    p = theTable;
+    q = p + (numElem-1);
+    while (p <= q) {
+        divider = p + ((q - p) >> 1);  /* divide by 2 */
+        if (character < divider->_u) { q = divider - 1; }
+        else if (character > divider->_u) { p = divider + 1; }
+        else { *ch = divider->_c; return 1; }
+    }
+    return 0;
+}
+
+UInt32 __CFFromMacJapanese(UInt32 flags, const UInt8 *bytes, UInt32 numBytes, UniChar *characters, UInt32 maxCharLen, UInt32 *usedCharLen) {
+    UInt32 processedByteLen = 0;
+    UniChar character;
+    UInt16 usedLen;
+    UniChar decompBuffer[5];
+    UInt16 decompUsedLen;
+    UInt32 noF86x = (flags & kCFStringEncodingDisableCorporateArea);
+    Boolean mapBackSlushToYen = (flags & kCFStringEncodingUseHFSPlusCanonical ? TRUE : FALSE);
+    *usedCharLen = 0;
+
+    while (numBytes && (!maxCharLen || (*usedCharLen < maxCharLen))) {
+        if (!(usedLen = __CFFromMacJapaneseCore(bytes, numBytes, &character, mapBackSlushToYen))) {
+            UInt8 byte;
+
+            if ((numBytes > 1) && CFStringEncodingUnicodeTo8BitEncoding(macjapanese_to_uni_decomp, NUM_FROM_MACJAPANESE_DECOMP, (*bytes << 8) | *(bytes + 1), &byte)) {
+                UInt8 length = (byte >> 6) + 2;
+                UInt8 isLongSeq = (length > 2);
+                if (noF86x && (isLongSeq || (__CFTwoCharDecompSeqTable[(byte & 0x3F) - 1].seq[1] != 0x20DD))) length--; // Remove 0xF86x char from length
+
+                if (maxCharLen) {
+                    if (*usedCharLen +  length > maxCharLen) break;
+                    __usncpy(characters, (isLongSeq ? __CFF86XCharDecompSeqTable[(byte & 0x3F) - 1].seq + (noF86x ? 1 : 0) : __CFTwoCharDecompSeqTable[(byte & 0x3F) - 1].seq), length);
+                    characters += length;
+                }
+                *usedCharLen += length;
+                processedByteLen += 2;
+                bytes += 2;
+                numBytes -= 2;
+                continue;
+            } else {
+                break;
+            }
+        }
+
+        if ((flags & kCFStringEncodingUseCanonical) && CFStringEncodingIsDecomposableCharacter(character, (flags & kCFStringEncodingUseHFSPlusCanonical) != FALSE)) {
+            UniChar *decompPtr = decompBuffer;
+            decompUsedLen = CFStringEncodingDecomposeCharacter(flags, character, decompPtr);
+            (*usedCharLen) += decompUsedLen;
+            if (maxCharLen) {
+                if (*usedCharLen > maxCharLen) return processedByteLen;
+                while (decompUsedLen-- > 0) *characters++ = *decompPtr++;
+            }
+        } else {
+            if (maxCharLen) *(characters++) = character;
+            (*usedCharLen)++;
+        }
+        processedByteLen += usedLen;
+        bytes += usedLen;
+        numBytes -= usedLen;
+    }
+
+    return processedByteLen;
+}
+
diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile b/hfs_japanese/hfs_japanese.kmodproj/Makefile
new file mode 100644 (file)
index 0000000..e2885bb
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# Generated by the Apple Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = HFS_Japanese.kmod
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Kernel Module
+
+HFILES = CFStub.h
+
+CFILES = hfs_japanese.c JapaneseConverter.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble\
+            CustomInfo.xml
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = kmod.make
+NEXTSTEP_INSTALLDIR = /System/Library/Extensions
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+NEXTSTEP_PB_CFLAGS = -Wno-format -Wno-four-char-constants
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(JDKBINDIR)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble b/hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble b/hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..c1624b4
--- /dev/null
@@ -0,0 +1,137 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/hfs_japanese/hfs_japanese.kmodproj/PB.project b/hfs_japanese/hfs_japanese.kmodproj/PB.project
new file mode 100644 (file)
index 0000000..428c241
--- /dev/null
@@ -0,0 +1,25 @@
+{
+    DYNAMIC_CODE_GEN = NO; 
+    FILESTABLE = {
+        H_FILES = (CFStub.h); 
+        OTHER_LINKED = (hfs_japanese.c, JapaneseConverter.c); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, CustomInfo.xml); 
+    }; 
+    LANGUAGE = English; 
+    LOCALIZABLE_FILES = {}; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_COMPILEROPTIONS = "-Wno-format -Wno-four-char-constants"; 
+    NEXTSTEP_INSTALLDIR = /System/Library/Extensions; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = HFS_Japanese.kmod; 
+    PROJECTTYPE = "Kernel Module"; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c b/hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c
new file mode 100644 (file)
index 0000000..652f63d
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.2 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#include <mach/mach_types.h>
+#include <mach/kmod.h>
+
+#include "CFStub.h"
+#include <hfs/hfs_encodings.h>
+
+
+int
+MacJapaneseToUnicode(Str31 hfs_str, UniChar *uni_str, UniCharCount maxCharLen, UniCharCount *usedCharLen)
+{
+       UInt32 processedChars;
+
+       processedChars = __CFFromMacJapanese(kCFStringEncodingUseCanonical | kCFStringEncodingUseHFSPlusCanonical,
+                                       &hfs_str[1],
+                                       hfs_str[0],
+                                       uni_str,
+                                       maxCharLen,
+                                       usedCharLen);
+
+       if (processedChars == (UInt32)hfs_str[0])
+               return (0);
+       else
+               return (-1);
+}
+
+int
+UnicodeToMacJapanese(UniChar *uni_str, UniCharCount unicodeChars, Str31 hfs_str)
+{
+       UniCharCount srcCharsUsed;
+       UInt32 usedByteLen = 0;
+
+        srcCharsUsed = __CFToMacJapanese(kCFStringEncodingComposeCombinings | kCFStringEncodingUseHFSPlusCanonical,
+                                       uni_str,
+                                       unicodeChars,
+                                       (UInt8*)&hfs_str[1],
+                                       sizeof(Str31) - 1,
+                                       &usedByteLen);
+
+       hfs_str[0] = usedByteLen;
+
+       if (srcCharsUsed == unicodeChars)
+               return (0);
+       else
+               return (-1);
+}
+
+
+__private_extern__ int
+hfs_japanese_start(kmod_info_t *ki, void *data)
+{
+       int result;
+
+       result = hfs_addconverter(ki->id, kCFStringEncodingMacJapanese,
+                       MacJapaneseToUnicode, UnicodeToMacJapanese);
+
+       return (result == 0 ? KERN_SUCCESS : KERN_FAILURE);
+}
+
+__private_extern__ int
+hfs_japanese_stop(kmod_info_t *ki, void *data)
+{
+       int result;
+
+       result = hfs_remconverter(ki->id, kCFStringEncodingMacJapanese);
+
+       return (result == 0 ? KERN_SUCCESS : KERN_FAILURE);
+}
+
+
+