8183978: Remove ICU layout code from OpenJDK
authorprr
Fri, 13 Oct 2017 08:54:00 -0700
changeset 47386 a26c8a7739f0
parent 47385 8d56044a9850
child 47387 4d711a58bb3b
8183978: Remove ICU layout code from OpenJDK Reviewed-by: srl, serb
make/mapfiles/libfontmanager/mapfile-vers
src/java.desktop/share/classes/sun/font/SunLayoutEngine.java
src/java.desktop/share/native/libfontmanager/FontInstanceAdapter.cpp
src/java.desktop/share/native/libfontmanager/FontInstanceAdapter.h
src/java.desktop/share/native/libfontmanager/layout/AlternateSubstSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/AlternateSubstSubtables.h
src/java.desktop/share/native/libfontmanager/layout/AnchorTables.cpp
src/java.desktop/share/native/libfontmanager/layout/AnchorTables.h
src/java.desktop/share/native/libfontmanager/layout/ArabicLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/ArabicLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/ArabicShaping.cpp
src/java.desktop/share/native/libfontmanager/layout/ArabicShaping.h
src/java.desktop/share/native/libfontmanager/layout/AttachmentPosnSubtables.h
src/java.desktop/share/native/libfontmanager/layout/CanonData.cpp
src/java.desktop/share/native/libfontmanager/layout/CanonShaping.cpp
src/java.desktop/share/native/libfontmanager/layout/CanonShaping.h
src/java.desktop/share/native/libfontmanager/layout/CharSubstitutionFilter.h
src/java.desktop/share/native/libfontmanager/layout/ClassDefinitionTables.cpp
src/java.desktop/share/native/libfontmanager/layout/ClassDefinitionTables.h
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertion.h
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertionProc2.cpp
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertionProc2.h
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc.cpp
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc.h
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc2.cpp
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc2.h
src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstitution.h
src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.h
src/java.desktop/share/native/libfontmanager/layout/CoverageTables.cpp
src/java.desktop/share/native/libfontmanager/layout/CoverageTables.h
src/java.desktop/share/native/libfontmanager/layout/CursiveAttachmentSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/CursiveAttachmentSubtables.h
src/java.desktop/share/native/libfontmanager/layout/DefaultCharMapper.h
src/java.desktop/share/native/libfontmanager/layout/DeviceTables.cpp
src/java.desktop/share/native/libfontmanager/layout/DeviceTables.h
src/java.desktop/share/native/libfontmanager/layout/ExtensionSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/ExtensionSubtables.h
src/java.desktop/share/native/libfontmanager/layout/Features.cpp
src/java.desktop/share/native/libfontmanager/layout/GDEFMarkFilter.cpp
src/java.desktop/share/native/libfontmanager/layout/GDEFMarkFilter.h
src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine2.cpp
src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine2.h
src/java.desktop/share/native/libfontmanager/layout/GlyphDefinitionTables.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphDefinitionTables.h
src/java.desktop/share/native/libfontmanager/layout/GlyphIterator.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphIterator.h
src/java.desktop/share/native/libfontmanager/layout/GlyphLookupTables.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphLookupTables.h
src/java.desktop/share/native/libfontmanager/layout/GlyphPositionAdjustments.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphPositionAdjustments.h
src/java.desktop/share/native/libfontmanager/layout/GlyphPositioningTables.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphPositioningTables.h
src/java.desktop/share/native/libfontmanager/layout/GlyphPosnLookupProc.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphPosnLookupProc.h
src/java.desktop/share/native/libfontmanager/layout/GlyphSubstLookupProc.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphSubstLookupProc.h
src/java.desktop/share/native/libfontmanager/layout/GlyphSubstitutionTables.cpp
src/java.desktop/share/native/libfontmanager/layout/GlyphSubstitutionTables.h
src/java.desktop/share/native/libfontmanager/layout/HanLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/HanLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/HangulLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/HangulLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/ICUFeatures.h
src/java.desktop/share/native/libfontmanager/layout/IndicClassTables.cpp
src/java.desktop/share/native/libfontmanager/layout/IndicLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/IndicLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/IndicRearrangement.h
src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.h
src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/IndicReordering.cpp
src/java.desktop/share/native/libfontmanager/layout/IndicReordering.h
src/java.desktop/share/native/libfontmanager/layout/KernTable.cpp
src/java.desktop/share/native/libfontmanager/layout/KernTable.h
src/java.desktop/share/native/libfontmanager/layout/KhmerLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/KhmerLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/KhmerReordering.cpp
src/java.desktop/share/native/libfontmanager/layout/KhmerReordering.h
src/java.desktop/share/native/libfontmanager/layout/LEFontInstance.cpp
src/java.desktop/share/native/libfontmanager/layout/LEFontInstance.h
src/java.desktop/share/native/libfontmanager/layout/LEGlyphFilter.h
src/java.desktop/share/native/libfontmanager/layout/LEGlyphStorage.cpp
src/java.desktop/share/native/libfontmanager/layout/LEGlyphStorage.h
src/java.desktop/share/native/libfontmanager/layout/LEInsertionList.cpp
src/java.desktop/share/native/libfontmanager/layout/LEInsertionList.h
src/java.desktop/share/native/libfontmanager/layout/LELanguages.h
src/java.desktop/share/native/libfontmanager/layout/LEScripts.h
src/java.desktop/share/native/libfontmanager/layout/LEStandalone.h
src/java.desktop/share/native/libfontmanager/layout/LESwaps.h
src/java.desktop/share/native/libfontmanager/layout/LETableReference.h
src/java.desktop/share/native/libfontmanager/layout/LETypes.h
src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/LayoutTables.h
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc.cpp
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc.h
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc2.cpp
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc2.h
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstSubtables.h
src/java.desktop/share/native/libfontmanager/layout/LigatureSubstitution.h
src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.h
src/java.desktop/share/native/libfontmanager/layout/LookupTables.cpp
src/java.desktop/share/native/libfontmanager/layout/LookupTables.h
src/java.desktop/share/native/libfontmanager/layout/Lookups.cpp
src/java.desktop/share/native/libfontmanager/layout/Lookups.h
src/java.desktop/share/native/libfontmanager/layout/MPreFixups.cpp
src/java.desktop/share/native/libfontmanager/layout/MPreFixups.h
src/java.desktop/share/native/libfontmanager/layout/MarkArrays.cpp
src/java.desktop/share/native/libfontmanager/layout/MarkArrays.h
src/java.desktop/share/native/libfontmanager/layout/MarkToBasePosnSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/MarkToBasePosnSubtables.h
src/java.desktop/share/native/libfontmanager/layout/MarkToLigaturePosnSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/MarkToLigaturePosnSubtables.h
src/java.desktop/share/native/libfontmanager/layout/MarkToMarkPosnSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/MarkToMarkPosnSubtables.h
src/java.desktop/share/native/libfontmanager/layout/MirroredCharData.cpp
src/java.desktop/share/native/libfontmanager/layout/MorphStateTables.h
src/java.desktop/share/native/libfontmanager/layout/MorphTables.cpp
src/java.desktop/share/native/libfontmanager/layout/MorphTables.h
src/java.desktop/share/native/libfontmanager/layout/MorphTables2.cpp
src/java.desktop/share/native/libfontmanager/layout/MultipleSubstSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/MultipleSubstSubtables.h
src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubst.h
src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc.cpp
src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc.h
src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc2.cpp
src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc2.h
src/java.desktop/share/native/libfontmanager/layout/OpenTypeLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/OpenTypeLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/OpenTypeTables.h
src/java.desktop/share/native/libfontmanager/layout/OpenTypeUtilities.cpp
src/java.desktop/share/native/libfontmanager/layout/OpenTypeUtilities.h
src/java.desktop/share/native/libfontmanager/layout/PairPositioningSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/PairPositioningSubtables.h
src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguage.cpp
src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguage.h
src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguageTags.cpp
src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguageTags.h
src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.h
src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor.h
src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/ShapingTypeData.cpp
src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor.h
src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/SinglePositioningSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/SinglePositioningSubtables.h
src/java.desktop/share/native/libfontmanager/layout/SingleSubstitutionSubtables.cpp
src/java.desktop/share/native/libfontmanager/layout/SingleSubstitutionSubtables.h
src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.h
src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor.h
src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/StateTables.h
src/java.desktop/share/native/libfontmanager/layout/SubstitutionLookups.cpp
src/java.desktop/share/native/libfontmanager/layout/SubstitutionLookups.h
src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor.h
src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/SunLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/ThaiLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/ThaiLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/ThaiShaping.cpp
src/java.desktop/share/native/libfontmanager/layout/ThaiShaping.h
src/java.desktop/share/native/libfontmanager/layout/ThaiStateTables.cpp
src/java.desktop/share/native/libfontmanager/layout/TibetanLayoutEngine.cpp
src/java.desktop/share/native/libfontmanager/layout/TibetanLayoutEngine.h
src/java.desktop/share/native/libfontmanager/layout/TibetanReordering.cpp
src/java.desktop/share/native/libfontmanager/layout/TibetanReordering.h
src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor.cpp
src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor.h
src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor2.cpp
src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor2.h
src/java.desktop/share/native/libfontmanager/layout/ValueRecords.cpp
src/java.desktop/share/native/libfontmanager/layout/ValueRecords.h
--- a/make/mapfiles/libfontmanager/mapfile-vers	Thu Oct 12 10:40:45 2017 +0530
+++ b/make/mapfiles/libfontmanager/mapfile-vers	Fri Oct 13 08:54:00 2017 -0700
@@ -41,8 +41,6 @@
                 Java_sun_font_StrikeCache_freeLongPointer;
                 Java_sun_font_StrikeCache_freeIntMemory;
                 Java_sun_font_StrikeCache_freeLongMemory;
-                Java_sun_font_SunLayoutEngine_initGVIDs;
-                Java_sun_font_SunLayoutEngine_nativeLayout;
                 Java_sun_font_SunLayoutEngine_shape;
                 Java_sun_font_X11TextRenderer_doDrawGlyphList;
 		Java_sun_java2d_loops_DrawGlyphListAA_DrawGlyphListAA;
--- a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java	Thu Oct 12 10:40:45 2017 +0530
+++ b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java	Fri Oct 13 08:54:00 2017 -0700
@@ -102,21 +102,8 @@
  * suffice.
  * */
 public final class SunLayoutEngine implements LayoutEngine, LayoutEngineFactory {
-    private static native void initGVIDs();
-    private static final boolean useICU;
     static {
         FontManagerNativeLibrary.load();
-        initGVIDs();
-        String le = java.security.AccessController.doPrivileged(
-            new sun.security.action.
-                GetPropertyAction("sun.font.layoutengine", ""));
-        useICU = le.equals("icu");
-        String verbose = java.security.AccessController.doPrivileged(
-            new sun.security.action.
-                GetPropertyAction("sun.font.layoutengine.verbose", ""));
-        if ("true".equalsIgnoreCase(verbose)) {
-            System.out.println("Using " + (useICU ? "icu." : "harfbuzz."));
-        }
     }
 
     private LayoutEngineKey key;
@@ -180,34 +167,19 @@
         Font2D font = key.font();
         FontStrike strike = font.getStrike(desc);
         long layoutTables = font.getLayoutTableCache();
-        if (useICU) {
-        nativeLayout(font, strike, mat, gmask, baseIndex,
-             tr.text, tr.start, tr.limit, tr.min, tr.max,
-             key.script(), key.lang(), typo_flags, pt, data,
-             font.getUnitsPerEm(), layoutTables);
-        } else {
-            long pNativeFont = font.getPlatformNativeFontPtr(); // used on OSX
-            // pScaler probably not needed long term.
-            long pScaler = 0L;
-            if (font instanceof FileFont) {
-                pScaler = ((FileFont)font).getScaler().nativeScaler;
-            }
-            shape(font, strike, ptSize, mat, pScaler, pNativeFont,
-                  layoutTables, isAAT(font),
-                  tr.text, data, key.script(),
-                  tr.start, tr.limit, baseIndex, pt,
-                  typo_flags, gmask);
-         }
+        long pNativeFont = font.getPlatformNativeFontPtr(); // used on OSX
+        // pScaler probably not needed long term.
+        long pScaler = 0L;
+        if (font instanceof FileFont) {
+            pScaler = ((FileFont)font).getScaler().nativeScaler;
+        }
+        shape(font, strike, ptSize, mat, pScaler, pNativeFont,
+              layoutTables, isAAT(font),
+              tr.text, data, key.script(),
+              tr.start, tr.limit, baseIndex, pt,
+              typo_flags, gmask);
     }
 
-    /* Native method to invoke ICU layout engine */
-    private static native void
-        nativeLayout(Font2D font, FontStrike strike, float[] mat, int gmask,
-             int baseIndex, char[] chars, int offset, int limit,
-             int min, int max, int script, int lang, int typo_flags,
-             Point2D.Float pt, GVData data, long upem, long layoutTables);
-
-
     /* Native method to invoke harfbuzz layout engine */
     private static native boolean
         shape(Font2D font, FontStrike strike, float ptSize, float[] mat,
--- a/src/java.desktop/share/native/libfontmanager/FontInstanceAdapter.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2001 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- */
-
-#include "FontInstanceAdapter.h"
-
-FontInstanceAdapter::FontInstanceAdapter(JNIEnv *theEnv,
-                                         jobject theFont2D,
-                                         jobject theFontStrike,
-                                         float *matrix,
-                                         le_int32 xRes, le_int32 yRes,
-                                         le_int32 theUPEM,
-                                         TTLayoutTableCache *ltables)
-    : env(theEnv), font2D(theFont2D), fontStrike(theFontStrike),
-      xppem(0), yppem(0),
-      xScaleUnitsToPoints(0), yScaleUnitsToPoints(0),
-      xScalePixelsToUnits(0), yScalePixelsToUnits(0),
-      upem(theUPEM), layoutTables(ltables)
-{
-    xPointSize = euclidianDistance(matrix[0], matrix[1]);
-    yPointSize = euclidianDistance(matrix[2], matrix[3]);
-
-    txMat[0] = matrix[0]/xPointSize;
-    txMat[1] = matrix[1]/xPointSize;
-    txMat[2] = matrix[2]/yPointSize;
-    txMat[3] = matrix[3]/yPointSize;
-
-    xppem = ((float) xRes / 72) * xPointSize;
-    yppem = ((float) yRes / 72) * yPointSize;
-
-    xScaleUnitsToPoints = xPointSize / upem;
-    yScaleUnitsToPoints = yPointSize / upem;
-
-    xScalePixelsToUnits = upem / xppem;
-    yScalePixelsToUnits = upem / yppem;
-};
-
-
-static const LETag cacheMap[LAYOUTCACHE_ENTRIES] = {
-  GPOS_TAG, GDEF_TAG, GSUB_TAG, MORT_TAG, MORX_TAG, KERN_TAG
-};
-
-const void *FontInstanceAdapter::getFontTable(LETag tableTag, size_t &length) const
-{
-  length = 0;
-
-  if (!layoutTables) { // t1 font
-    return 0;
-  }
-
-  // cache in font's pscaler object
-  // font disposer will handle for us
-
-  int cacheIdx;
-  for (cacheIdx=0;cacheIdx<LAYOUTCACHE_ENTRIES;cacheIdx++) {
-    if (tableTag==cacheMap[cacheIdx]) break;
-  }
-
-  if (cacheIdx<LAYOUTCACHE_ENTRIES) { // if found
-    if (layoutTables->entries[cacheIdx].len != -1) {
-      length = layoutTables->entries[cacheIdx].len;
-      return layoutTables->entries[cacheIdx].ptr;
-    }
-  } else {
-    //fprintf(stderr, "unexpected table request from font instance adapter: %x\n", tableTag);
-    // (don't load any other tables)
-    return 0;
-  }
-
-  jbyte* result = 0;
-  jsize  len = 0;
-  jbyteArray tableBytes = (jbyteArray)
-    env->CallObjectMethod(font2D, sunFontIDs.getTableBytesMID, tableTag);
-  if (!IS_NULL(tableBytes)) {
-    len = env->GetArrayLength(tableBytes);
-    result = new jbyte[len];
-    env->GetByteArrayRegion(tableBytes, 0, len, result);
-  }
-
-  if (cacheIdx<LAYOUTCACHE_ENTRIES) { // if cacheable table
-    layoutTables->entries[cacheIdx].len = len;
-    layoutTables->entries[cacheIdx].ptr = (const void*)result;
-  }
-
-  length = len;
-  return (const void*)result;
-};
-
-LEGlyphID FontInstanceAdapter::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
-{
-    LEUnicode32 mappedChar = mapper->mapChar(ch);
-
-    if (mappedChar == 0xFFFF || mappedChar == 0xFFFE) {
-        return 0xFFFF;
-    }
-
-    if (mappedChar == 0x200C || mappedChar == 0x200D) {
-        return 1;
-    }
-
-    LEGlyphID id = (LEGlyphID)env->CallIntMethod(font2D, sunFontIDs.f2dCharToGlyphMID, (jint)mappedChar);
-    return id;
-}
-
-LEGlyphID FontInstanceAdapter::mapCharToGlyph(LEUnicode32 ch) const
-{
-    LEGlyphID id = (LEGlyphID)env->CallIntMethod(font2D, sunFontIDs.f2dCharToGlyphMID, ch);
-    return id;
-}
-
-void FontInstanceAdapter::mapCharsToWideGlyphs(const LEUnicode chars[],
-    le_int32 offset, le_int32 count, le_bool reverse,
-    const LECharMapper *mapper, le_uint32 glyphs[]) const
-{
-    le_int32 i, out = 0, dir = 1;
-
-    if (reverse) {
-        out = count - 1;
-        dir = -1;
-    }
-
-    for (i = offset; i < offset + count; i += 1, out += dir) {
-                LEUnicode16 high = chars[i];
-                LEUnicode32 code = high;
-
-                if (i < offset + count - 1 && high >= 0xD800 && high <= 0xDBFF) {
-                        LEUnicode16 low = chars[i + 1];
-
-                        if (low >= 0xDC00 && low <= 0xDFFF) {
-                                code = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
-                        }
-                }
-
-        glyphs[out] = mapCharToWideGlyph(code, mapper);
-
-                if (code >= 0x10000) {
-                        i += 1;
-                        glyphs[out += dir] = 0xFFFF;
-                }
-    }
-}
-
-le_uint32 FontInstanceAdapter::mapCharToWideGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
-{
-    LEUnicode32 mappedChar = mapper->mapChar(ch);
-
-    if (mappedChar == 0xFFFF) {
-        return 0xFFFF;
-    }
-
-    if (mappedChar == 0x200C || mappedChar == 0x200D) {
-        return 1;
-    }
-
-    return (LEGlyphID)env->CallIntMethod(font2D, sunFontIDs.charToGlyphMID,
-                                         mappedChar);
-}
-
-void FontInstanceAdapter::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const
-{
-    getWideGlyphAdvance((le_uint32)glyph, advance);
-}
-
-void FontInstanceAdapter::getKerningAdjustment(LEPoint &adjustment) const
-{
-    float xx, xy, yx, yy;
-    le_bool isIdentityMatrix;
-
-    isIdentityMatrix = (txMat[0] == 1 && txMat[1] == 0 &&
-                        txMat[2] == 0 && txMat[3] == 1);
-
-    if (!isIdentityMatrix) {
-      xx = adjustment.fX;
-      xy = xx * txMat[1];
-      xx = xx * txMat[0];
-
-      yy = adjustment.fY;
-      yx = yy * txMat[2];
-      yy = yy * txMat[3];
-
-      adjustment.fX = xx + yx;
-      adjustment.fY = xy + yy;
-    }
-
-    jobject pt = env->NewObject(sunFontIDs.pt2DFloatClass,
-                                sunFontIDs.pt2DFloatCtr,
-                                adjustment.fX, adjustment.fY);
-    if (pt == NULL) {
-        env->ExceptionClear();
-        adjustment.fX = 0.0f;
-        adjustment.fY = 0.0f;
-    } else {
-        env->CallObjectMethod(fontStrike, sunFontIDs.adjustPointMID, pt);
-        adjustment.fX = env->GetFloatField(pt, sunFontIDs.xFID);
-        adjustment.fY = env->GetFloatField(pt, sunFontIDs.yFID);
-    }
-}
-
-void FontInstanceAdapter::getWideGlyphAdvance(le_uint32 glyph, LEPoint &advance) const
-{
-    if ((glyph & 0xfffe) == 0xfffe) {
-        advance.fX = 0;
-        advance.fY = 0;
-        return;
-    }
-    jobject pt = env->CallObjectMethod(fontStrike,
-                                       sunFontIDs.getGlyphMetricsMID, glyph);
-    if (pt != NULL) {
-        advance.fX = env->GetFloatField(pt, sunFontIDs.xFID);
-        advance.fY = env->GetFloatField(pt, sunFontIDs.yFID);
-        env->DeleteLocalRef(pt);
-    }
-}
-
-le_bool FontInstanceAdapter::getGlyphPoint(LEGlyphID glyph,
-                                           le_int32 pointNumber,
-                                           LEPoint &point) const
-{
-  /* This upcall is not ideal, since it will make another down call.
-   * The intention is to move up some of this code into Java. But
-   * a HashMap has been added to the Java PhysicalStrike object to cache
-   * these points so that they don't need to be repeatedly recalculated
-   * which is expensive as it needs the font scaler to re-generate the
-   * hinted glyph outline. This turns out to be a huge win over 1.4.x
-   */
-     jobject pt = env->CallObjectMethod(fontStrike,
-                                        sunFontIDs.getGlyphPointMID,
-                                        glyph, pointNumber);
-     if (pt != NULL) {
-       /* point is a java.awt.geom.Point2D.Float */
-        point.fX = env->GetFloatField(pt, sunFontIDs.xFID);
-        /* convert from java coordinate system to internal '+y up' coordinate system */
-        point.fY = -env->GetFloatField(pt, sunFontIDs.yFID);
-        return true;
-     } else {
-        return false;
-     }
-}
-
-void FontInstanceAdapter::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
-{
-    float xx, xy, yx, yy;
-    le_bool isIdentityMatrix;
-
-    isIdentityMatrix = (txMat[0] == 1 && txMat[1] == 0 &&
-                        txMat[2] == 0 && txMat[3] == 1);
-
-    xx = xFunits * xScaleUnitsToPoints;
-    xy = 0;
-    if (!isIdentityMatrix) {
-        xy = xx * txMat[1];
-        xx = xx * txMat[0];
-    };
-
-    yx = 0;
-    yy = yFunits * yScaleUnitsToPoints;
-    if (!isIdentityMatrix) {
-        yx = yy * txMat[2];
-        yy = yy * txMat[3];
-    };
-    pixels.fX = xx + yx;
-    pixels.fY = xy + yy;
-}
-
-
-float FontInstanceAdapter::euclidianDistance(float a, float b)
-{
-    if (a < 0) {
-        a = -a;
-    }
-
-    if (b < 0) {
-        b = -b;
-    }
-
-    if (a == 0) {
-        return b;
-    }
-
-    if (b == 0) {
-        return a;
-    }
-
-    float root = a > b ? a + (b / 2) : b + (a / 2); /* Do an initial approximation, in root */
-
-        /* An unrolled Newton-Raphson iteration sequence */
-    root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2;
-    root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2;
-    root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2;
-
-    return root;
-}
--- a/src/java.desktop/share/native/libfontmanager/FontInstanceAdapter.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-/*
- * (C) Copyright IBM Corp. 1998-2001 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- */
-
-#ifndef __FONTINSTANCEADAPTER_H
-#define __FONTINSTANCEADAPTER_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "jni.h"
-#include "sunfontids.h"
-#include "fontscalerdefs.h"
-#include <jni_util.h>
-
-class FontInstanceAdapter : public LEFontInstance {
-private:
-    JNIEnv *env;
-    jobject font2D;
-    jobject fontStrike;
-
-    float xppem;
-    float yppem;
-
-    float xScaleUnitsToPoints;
-    float yScaleUnitsToPoints;
-
-    float xScalePixelsToUnits;
-    float yScalePixelsToUnits;
-
-    le_int32 upem;
-    float xPointSize, yPointSize;
-    float txMat[4];
-
-    float euclidianDistance(float a, float b);
-
-    /* Table format is the same as defined in the truetype spec.
-       Pointer can be NULL (e.g. for Type1 fonts). */
-    TTLayoutTableCache* layoutTables;
-
-public:
-    FontInstanceAdapter(JNIEnv *env,
-                        jobject theFont2D, jobject theFontStrike,
-                        float *matrix, le_int32 xRes, le_int32 yRes,
-                        le_int32 theUPEM, TTLayoutTableCache *ltables);
-
-    virtual ~FontInstanceAdapter() { };
-
-    virtual const LEFontInstance *getSubFont(const LEUnicode chars[],
-                            le_int32 *offset, le_int32 limit,
-                            le_int32 script, LEErrorCode &success) const {
-      return this;
-    }
-
-    // tables are cached with the native font scaler data
-    // only supports gsub, gpos, gdef, mort tables at present
-    virtual const void *getFontTable(LETag tableTag, size_t &len) const;
-
-    virtual void *getKernPairs() const {
-        return layoutTables->kernPairs;
-    }
-    virtual void setKernPairs(void *pairs) const {
-        layoutTables->kernPairs = pairs;
-    }
-
-    virtual le_bool canDisplay(LEUnicode32 ch) const
-    {
-        return  (le_bool)env->CallBooleanMethod(font2D,
-                                                sunFontIDs.canDisplayMID, ch);
-    };
-
-    virtual le_int32 getUnitsPerEM() const {
-       return upem;
-    };
-
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
-
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
-
-    virtual void mapCharsToWideGlyphs(const LEUnicode chars[],
-        le_int32 offset, le_int32 count, le_bool reverse,
-        const LECharMapper *mapper, le_uint32 glyphs[]) const;
-
-    virtual le_uint32 mapCharToWideGlyph(LEUnicode32 ch,
-        const LECharMapper *mapper) const;
-
-    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
-
-    virtual void getKerningAdjustment(LEPoint &adjustment) const;
-
-    virtual void getWideGlyphAdvance(le_uint32 glyph, LEPoint &advance) const;
-
-    virtual le_bool getGlyphPoint(LEGlyphID glyph,
-        le_int32 pointNumber, LEPoint &point) const;
-
-    float getXPixelsPerEm() const
-    {
-        return xppem;
-    };
-
-    float getYPixelsPerEm() const
-    {
-        return yppem;
-    };
-
-    float xUnitsToPoints(float xUnits) const
-    {
-        return xUnits * xScaleUnitsToPoints;
-    };
-
-    float yUnitsToPoints(float yUnits) const
-    {
-        return yUnits * yScaleUnitsToPoints;
-    };
-
-    void unitsToPoints(LEPoint &units, LEPoint &points) const
-    {
-        points.fX = xUnitsToPoints(units.fX);
-        points.fY = yUnitsToPoints(units.fY);
-    }
-
-    float xPixelsToUnits(float xPixels) const
-    {
-        return xPixels * xScalePixelsToUnits;
-    };
-
-    float yPixelsToUnits(float yPixels) const
-    {
-        return yPixels * yScalePixelsToUnits;
-    };
-
-    void pixelsToUnits(LEPoint &pixels, LEPoint &units) const
-    {
-        units.fX = xPixelsToUnits(pixels.fX);
-        units.fY = yPixelsToUnits(pixels.fY);
-    };
-
-    virtual float getScaleFactorX() const {
-        return xScalePixelsToUnits;
-    };
-
-    virtual float getScaleFactorY() const {
-        return yScalePixelsToUnits;
-    };
-
-    void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
-
-    virtual le_int32 getAscent() const { return 0; };  // not used
-    virtual le_int32 getDescent() const { return 0; }; // not used
-    virtual le_int32 getLeading() const { return 0; }; // not used
-};
-
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/AlternateSubstSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "AlternateSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 AlternateSubstitutionSubtable::process(const LEReferenceTo<AlternateSubstitutionSubtable> &base,
-                                       GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    // NOTE: For now, we'll just pick the first alternative...
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0 && LE_SUCCESS(success)) {
-        le_uint16 altSetCount = SWAPW(alternateSetCount);
-
-        if (coverageIndex < altSetCount) {
-            Offset alternateSetTableOffset = SWAPW(alternateSetTableOffsetArray[coverageIndex]);
-            const LEReferenceTo<AlternateSetTable> alternateSetTable(base, success,
-                                  (const AlternateSetTable *) ((char *) this + alternateSetTableOffset));
-            if (!LE_SUCCESS(success)) return 0;
-            TTGlyphID alternate = SWAPW(alternateSetTable->alternateArray[0]);
-
-            if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, alternate), success)) {
-                glyphIterator->setCurrGlyphID(SWAPW(alternateSetTable->alternateArray[0]));
-            }
-
-            return 1;
-        }
-
-        // XXXX If we get here, the table's mal-formed...
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/AlternateSubstSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __ALTERNATESUBSTITUTIONSUBTABLES_H
-#define __ALTERNATESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct AlternateSetTable
-{
-    le_uint16 glyphCount;
-    TTGlyphID alternateArray[ANY_NUMBER];
-};
-
-LE_VAR_ARRAY(AlternateSetTable, alternateArray)
-
-struct AlternateSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 alternateSetCount;
-    Offset    alternateSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32 process(const LEReferenceTo<AlternateSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-LE_VAR_ARRAY(AlternateSubstitutionSubtable, alternateSetTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/AnchorTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "DeviceTables.h"
-#include "AnchorTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void AnchorTable::getAnchor(const LETableReference &base, LEGlyphID glyphID, const LEFontInstance *fontInstance,
-                            LEPoint &anchor, LEErrorCode &success) const
-{
-  switch(SWAPW(anchorFormat)) {
-    case 1:
-    {
-        LEReferenceTo<Format1AnchorTable> f1(base, success);
-        if (LE_SUCCESS(success)) {
-            f1->getAnchor(f1, fontInstance, anchor, success);
-        }
-        break;
-    }
-
-    case 2:
-    {
-        LEReferenceTo<Format2AnchorTable> f2(base, success);
-        if (LE_SUCCESS(success)) {
-            f2->getAnchor(f2, glyphID, fontInstance, anchor, success);
-        }
-        break;
-    }
-
-    case 3:
-    {
-        LEReferenceTo<Format3AnchorTable> f3(base, success);
-        if (LE_SUCCESS(success)) {
-            f3->getAnchor(f3, fontInstance, anchor, success);
-        }
-        break;
-    }
-
-    default:
-    {
-        // unknown format: just use x, y coordinate, like format 1...
-        LEReferenceTo<Format1AnchorTable> f1(base, success);
-        if (LE_SUCCESS(success)) {
-            f1->getAnchor(f1, fontInstance, anchor, success);
-        }
-        break;
-    }
-  }
-}
-
-void Format1AnchorTable::getAnchor(const LEReferenceTo<Format1AnchorTable>& base, const LEFontInstance *fontInstance, LEPoint &anchor, LEErrorCode &success) const
-{
-    le_int16 x = SWAPW(xCoordinate);
-    le_int16 y = SWAPW(yCoordinate);
-    LEPoint pixels;
-
-    fontInstance->transformFunits(x, y, pixels);
-    fontInstance->pixelsToUnits(pixels, anchor);
-}
-
-void Format2AnchorTable::getAnchor(const LEReferenceTo<Format2AnchorTable>& base,
-                                   LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor
-                                   , LEErrorCode &success) const
-{
-    LEPoint point;
-
-    if (! fontInstance->getGlyphPoint(glyphID, SWAPW(anchorPoint), point)) {
-        le_int16 x = SWAPW(xCoordinate);
-        le_int16 y = SWAPW(yCoordinate);
-
-        fontInstance->transformFunits(x, y, point);
-    }
-
-
-    fontInstance->pixelsToUnits(point, anchor);
-}
-
-void Format3AnchorTable::getAnchor(const LEReferenceTo<Format3AnchorTable> &base, const LEFontInstance *fontInstance,
-                                   LEPoint &anchor, LEErrorCode &success) const
-{
-    le_int16 x = SWAPW(xCoordinate);
-    le_int16 y = SWAPW(yCoordinate);
-    LEPoint pixels;
-    Offset dtxOffset = SWAPW(xDeviceTableOffset);
-    Offset dtyOffset = SWAPW(yDeviceTableOffset);
-
-    fontInstance->transformFunits(x, y, pixels);
-
-    if (dtxOffset != 0) {
-        LEReferenceTo<DeviceTable> dt(base, success, dtxOffset);
-        if (LE_SUCCESS(success)) {
-            le_int16 adjx = dt->getAdjustment(dt, (le_int16) fontInstance->getXPixelsPerEm(), success);
-            pixels.fX += adjx;
-        }
-    }
-
-    if (dtyOffset != 0) {
-        LEReferenceTo<DeviceTable> dt(base, success, dtyOffset);
-        if (LE_SUCCESS(success)) {
-            le_int16 adjy = dt->getAdjustment(dt, (le_int16) fontInstance->getYPixelsPerEm(), success);
-            pixels.fY += adjy;
-        }
-    }
-
-    fontInstance->pixelsToUnits(pixels, anchor);
-}
-
-U_NAMESPACE_END
-
--- a/src/java.desktop/share/native/libfontmanager/layout/AnchorTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __ANCHORTABLES_H
-#define __ANCHORTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct AnchorTable
-{
-    le_uint16  anchorFormat;
-    le_int16   xCoordinate;
-    le_int16   yCoordinate;
-
-  void    getAnchor(const LETableReference &base, LEGlyphID glyphID, const LEFontInstance *fontInstance,
-                      LEPoint &anchor, LEErrorCode &success) const;
-};
-
-struct Format1AnchorTable : AnchorTable
-{
-  void getAnchor(const LEReferenceTo<Format1AnchorTable>& base,
-                 const LEFontInstance *fontInstance, LEPoint &anchor, LEErrorCode &success) const;
-};
-
-struct Format2AnchorTable : AnchorTable
-{
-    le_uint16  anchorPoint;
-
-    void getAnchor(const LEReferenceTo<Format2AnchorTable>& base,
-                   LEGlyphID glyphID, const LEFontInstance *fontInstance,
-                   LEPoint &anchor, LEErrorCode &success) const;
-};
-
-struct Format3AnchorTable : AnchorTable
-{
-    Offset  xDeviceTableOffset;
-    Offset  yDeviceTableOffset;
-
-    void getAnchor(const LEReferenceTo<Format3AnchorTable>& base,
-                   const LEFontInstance *fontInstance, LEPoint &anchor,
-                   LEErrorCode &success) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ArabicLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,246 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LEGlyphFilter.h"
-#include "LEGlyphStorage.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "ArabicLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "GDEFMarkFilter.h"
-
-#include "ArabicShaping.h"
-#include "CanonShaping.h"
-
-U_NAMESPACE_BEGIN
-
-le_bool CharSubstitutionFilter::accept(LEGlyphID glyph, LEErrorCode &/*success*/) const
-{
-    return fFontInstance->canDisplay((LEUnicode) glyph);
-}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine)
-
-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-                                                       le_int32 languageCode, le_int32 typoFlags,
-                                                       const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable,
-                                                       LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-                                                       le_int32 languageCode,
-                                                       le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-
-    // NOTE: We don't need to set fFeatureOrder to TRUE here
-    // because this constructor is only called by the constructor
-    // for UnicodeArabicOpenTypeLayoutEngine, which uses a pre-built
-    // GSUB table that has the features in the correct order.
-
-    //fFeatureOrder = TRUE;
-}
-
-ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count,
-                                                         le_int32 max, le_bool rightToLeft, LEUnicode *&outChars,
-                                                         LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    outChars = LE_NEW_ARRAY(LEUnicode, count);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
-
-    // Note: This processes the *original* character array so we can get context
-    // for the first and last characters. This is OK because only the marks
-    // will have been reordered, and they don't contribute to shaping.
-    ArabicShaping::shape(chars, offset, count, max, rightToLeft, glyphStorage);
-
-    return count;
-}
-
-void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                      LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (!fGPOSTable.isEmpty()) {
-        OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
-    } else if (!fGDEFTable.isEmpty()) {
-        GDEFMarkFilter filter(fGDEFTable, success);
-        adjustMarkGlyphs(glyphStorage, &filter, success);
-    } else {
-      LEReferenceTo<GlyphDefinitionTableHeader> gdefTable(LETableReference::kStaticData,
-                                                          CanonShaping::glyphDefinitionTable,
-                                                          CanonShaping::glyphDefinitionTableLen);
-        GDEFMarkFilter filter(gdefTable, success);
-
-        adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-    }
-}
-
-UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-  : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG, success)
-{
-  fGSUBTable.setTo(LETableReference::kStaticData, (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable, CanonShaping::glyphSubstitutionTableLen);
-  fGDEFTable.setTo(LETableReference::kStaticData, (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable, CanonShaping::glyphDefinitionTableLen);
-  /* OpenTypeLayoutEngine will allocate a substitution filter */
-}
-
-UnicodeArabicOpenTypeLayoutEngine::~UnicodeArabicOpenTypeLayoutEngine()
-{
-    /* OpenTypeLayoutEngine will cleanup the substitution filter */
-}
-
-// "glyphs", "indices" -> glyphs, indices
-le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    // FIXME: we could avoid the memory allocation and copy if we
-    // made a clone of mapCharsToGlyphs which took the fake glyphs
-    // directly.
-    le_int32 tempGlyphCount = tempGlyphStorage.getGlyphCount();
-    LEUnicode *tempChars = LE_NEW_ARRAY(LEUnicode, tempGlyphCount);
-
-    if (tempChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    for (le_int32 i = 0; i < tempGlyphCount; i += 1) {
-        tempChars[i] = (LEUnicode) LE_GET_GLYPH(tempGlyphStorage[i]);
-    }
-
-    glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
-
-    ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success);
-
-    LE_DELETE_ARRAY(tempChars);
-
-    return tempGlyphCount;
-}
-
-void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    le_int32 i, dir = 1, out = 0;
-
-    if (reverse) {
-        out = count - 1;
-        dir = -1;
-    }
-
-    glyphStorage.allocateGlyphArray(count, reverse, success);
-
-    for (i = 0; i < count; i += 1, out += dir) {
-        glyphStorage[out] = (LEGlyphID) chars[offset + i];
-    }
-}
-
-void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                      LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    GDEFMarkFilter filter(fGDEFTable, success);
-
-    adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-}
-
-U_NAMESPACE_END
-
--- a/src/java.desktop/share/native/libfontmanager/layout/ArabicLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,266 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __ARABICLAYOUTENGINE_H
-#define __ARABICLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class implements OpenType layout for Arabic fonts. It overrides
- * the characerProcessing method to assign the correct OpenType feature
- * tags for the Arabic contextual forms. It also overrides the adjustGlyphPositions
- * method to guarantee that all vowel and accent glyphs have zero advance width.
- *
- * @internal
- */
-class ArabicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of ArabicOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Indic OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                               le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~ArabicOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Arabic OpenType character processing. It assigns the OpenType feature
-     * tags to the characters to generate the correct contextual forms and ligatures.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     *
-     * Output parameters:
-     * @param outChars - the output character arrayt
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method applies the GPOS table if it is present, otherwise it ensures that all vowel
-     * and accent glyphs have a zero advance width by calling the adjustMarkGlyphs method.
-     * If the font contains a GDEF table, that is used to identify voewls and accents. Otherwise
-     * the character codes are used.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphs - the input glyph array
-     * @param glyphCount - the number of glyphs
-     * @param positions - the position array, will be updated as needed
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-/**
- * The class implements OpenType layout for Arabic fonts which don't
- * contain a GSUB table, using a canned GSUB table based on Unicode
- * Arabic Presentation Forms. It overrides the mapCharsToGlyphs method
- * to use the Presentation Forms as logical glyph indices. It overrides the
- * glyphPostProcessing method to convert the Presentation Forms to actual
- * glyph indices.
- *
- * @see ArabicOpenTypeLayoutEngine
- *
- * @internal
- */
-class UnicodeArabicOpenTypeLayoutEngine : public ArabicOpenTypeLayoutEngine
-{
-public:
-    /**
-     * This constructs an instance of UnicodeArabicOpenTypeLayoutEngine for a specific font,
-     * script and language.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param languageCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~UnicodeArabicOpenTypeLayoutEngine();
-
-protected:
-
-    /**
-     * This method converts the Arabic Presentation Forms in the temp glyph array
-     * into actual glyph indices using ArabicOpenTypeLayoutEngine::mapCharsToGlyps.
-     *
-     * Input parameters:
-     * @param tempGlyphs - the input presentation forms
-     * @param tempCharIndices - the input character index array
-     * @param tempGlyphCount - the number of Presentation Froms
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyph indices in the output glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method copies the input characters into the output glyph index array,
-     * for use by the canned GSUB table. It also generates the character index array.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to be mapped
-     * @param count - the number of characters to be mapped
-     * @param reverse - if <code>TRUE</code>, the output will be in reverse order
-     * @param mirror - if <code>TRUE</code>, do character mirroring
-     * @param glyphStorage - the glyph storage object. Glyph and char index arrays will be updated.
-     *
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method ensures that all vowel and accent glyphs have a zero advance width by calling
-     * the adjustMarkGlyphs method. The character codes are used to identify the vowel and mark
-     * glyphs.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the glyph storage object. The glyph positions will be updated as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/ArabicShaping.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ArabicShaping.h"
-#include "LEGlyphStorage.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-// This table maps Unicode joining types to
-// ShapeTypes.
-const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] =
-{
-    ArabicShaping::ST_NOSHAPE_NONE, // [U]
-    ArabicShaping::ST_NOSHAPE_DUAL, // [C]
-    ArabicShaping::ST_DUAL,         // [D]
-    ArabicShaping::ST_LEFT,         // [L]
-    ArabicShaping::ST_RIGHT,        // [R]
-    ArabicShaping::ST_TRANSPARENT   // [T]
-};
-
-/*
-    shaping array holds types for Arabic chars between 0610 and 0700
-    other values are either unshaped, or transparent if a mark or format
-    code, except for format codes 200c (zero-width non-joiner) and 200d
-    (dual-width joiner) which are both unshaped and non_joining or
-    dual-joining, respectively.
-*/
-ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c)
-{
-  LEErrorCode success = LE_NO_ERROR;
-  const LEReferenceTo<ClassDefinitionTable> joiningTypes(LETableReference::kStaticData,
-                                                         (const ClassDefinitionTable *) ArabicShaping::shapingTypeTable,
-                                                         ArabicShaping::shapingTypeTableLen);
-  le_int32 joiningType = joiningTypes->getGlyphClass(joiningTypes, c, success);
-
-  if (joiningType >= 0 && joiningType < ArabicShaping::JT_COUNT && LE_SUCCESS(success)) {
-    return ArabicShaping::shapeTypes[joiningType];
-  }
-
-  return ArabicShaping::ST_NOSHAPE_NONE;
-}
-
-#define isolFeatureTag LE_ISOL_FEATURE_TAG
-#define initFeatureTag LE_INIT_FEATURE_TAG
-#define mediFeatureTag LE_MEDI_FEATURE_TAG
-#define finaFeatureTag LE_FINA_FEATURE_TAG
-#define ligaFeatureTag LE_LIGA_FEATURE_TAG
-#define msetFeatureTag LE_MSET_FEATURE_TAG
-#define markFeatureTag LE_MARK_FEATURE_TAG
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define rligFeatureTag LE_RLIG_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-#define dligFeatureTag LE_DLIG_FEATURE_TAG
-#define cswhFeatureTag LE_CSWH_FEATURE_TAG
-#define cursFeatureTag LE_CURS_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-// NOTE:
-// The isol, fina, init and medi features must be
-// defined in the above order, and have masks that
-// are all in the same nibble.
-#define isolFeatureMask 0x80000000UL
-#define finaFeatureMask 0x40000000UL
-#define initFeatureMask 0x20000000UL
-#define mediFeatureMask 0x10000000UL
-#define ccmpFeatureMask 0x08000000UL
-#define rligFeatureMask 0x04000000UL
-#define caltFeatureMask 0x02000000UL
-#define ligaFeatureMask 0x01000000UL
-#define dligFeatureMask 0x00800000UL
-#define cswhFeatureMask 0x00400000UL
-#define msetFeatureMask 0x00200000UL
-#define cursFeatureMask 0x00100000UL
-#define kernFeatureMask 0x00080000UL
-#define markFeatureMask 0x00040000UL
-#define mkmkFeatureMask 0x00020000UL
-
-#define NO_FEATURES   0
-#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
-
-#define SHAPE_MASK 0xF0000000UL
-
-static const FeatureMap featureMap[] = {
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {isolFeatureTag, isolFeatureMask},
-    {finaFeatureTag, finaFeatureMask},
-    {mediFeatureTag, mediFeatureMask},
-    {initFeatureTag, initFeatureMask},
-    {rligFeatureTag, rligFeatureMask},
-    {caltFeatureTag, caltFeatureMask},
-    {ligaFeatureTag, ligaFeatureMask},
-    {dligFeatureTag, dligFeatureMask},
-    {cswhFeatureTag, cswhFeatureMask},
-    {msetFeatureTag, msetFeatureMask},
-    {cursFeatureTag, cursFeatureMask},
-    {kernFeatureTag, kernFeatureMask},
-    {markFeatureTag, markFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask}
-};
-
-const FeatureMap *ArabicShaping::getFeatureMap(le_int32 &count)
-{
-    count = LE_ARRAY_SIZE(featureMap);
-
-    return featureMap;
-}
-
-void ArabicShaping::adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage)
-{
-    LEErrorCode success = LE_NO_ERROR;
-    FeatureMask featureMask = (FeatureMask) glyphStorage.getAuxData(outIndex, success);
-    FeatureMask shape = featureMask & SHAPE_MASK;
-
-    shape >>= shapeOffset;
-
-    glyphStorage.setAuxData(outIndex, ((featureMask & ~SHAPE_MASK) | shape), success);
-}
-
-void ArabicShaping::shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-                          le_bool rightToLeft, LEGlyphStorage &glyphStorage)
-{
-    // iterate in logical order, store tags in visible order
-    //
-    // the effective right char is the most recently encountered
-    // non-transparent char
-    //
-    // four boolean states:
-    //   the effective right char shapes
-    //   the effective right char causes left shaping
-    //   the current char shapes
-    //   the current char causes right shaping
-    //
-    // if both cause shaping, then
-    //   shaper.shape(errout, 2) (isolate to initial, or final to medial)
-    //   shaper.shape(out, 1) (isolate to final)
-
-    ShapeType rightType = ST_NOSHAPE_NONE, leftType = ST_NOSHAPE_NONE;
-    LEErrorCode success = LE_NO_ERROR;
-    le_int32 i;
-
-    for (i = offset - 1; i >= 0; i -= 1) {
-        rightType = getShapeType(chars[i]);
-
-        if (rightType != ST_TRANSPARENT) {
-            break;
-        }
-    }
-
-    for (i = offset + charCount; i < charMax; i += 1) {
-        leftType = getShapeType(chars[i]);
-
-        if (leftType != ST_TRANSPARENT) {
-            break;
-        }
-    }
-
-    // erout is effective right logical index
-    le_int32 erout = -1;
-    le_bool rightShapes = FALSE;
-    le_bool rightCauses = (rightType & MASK_SHAPE_LEFT) != 0;
-    le_int32 in, e, out = 0, dir = 1;
-
-    if (rightToLeft) {
-        out = charCount - 1;
-        erout = charCount;
-        dir = -1;
-    }
-
-    for (in = offset, e = offset + charCount; in < e; in += 1, out += dir) {
-        LEUnicode c = chars[in];
-        ShapeType t = getShapeType(c);
-
-        if (t == ST_NOSHAPE_NONE) {
-            glyphStorage.setAuxData(out, NO_FEATURES, success);
-        } else {
-        glyphStorage.setAuxData(out, ISOL_FEATURES, success);
-        }
-
-        if ((t & MASK_TRANSPARENT) != 0) {
-            continue;
-        }
-
-        le_bool curShapes = (t & MASK_NOSHAPE) == 0;
-        le_bool curCauses = (t & MASK_SHAPE_RIGHT) != 0;
-
-        if (rightCauses && curCauses) {
-            if (rightShapes) {
-                adjustTags(erout, 2, glyphStorage);
-            }
-
-            if (curShapes) {
-                adjustTags(out, 1, glyphStorage);
-            }
-        }
-
-        rightShapes = curShapes;
-        rightCauses = (t & MASK_SHAPE_LEFT) != 0;
-        erout = out;
-    }
-
-    if (rightShapes && rightCauses && (leftType & MASK_SHAPE_RIGHT) != 0) {
-        adjustTags(erout, 2, glyphStorage);
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ArabicShaping.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __ARABICSHAPING_H
-#define __ARABICSHAPING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ArabicShaping /* not : public UObject because all methods are static */ {
-public:
-    // Joining types
-    enum JoiningTypes
-    {
-        JT_NON_JOINING   = 0,
-        JT_JOIN_CAUSING  = 1,
-        JT_DUAL_JOINING  = 2,
-        JT_LEFT_JOINING  = 3,
-        JT_RIGHT_JOINING = 4,
-        JT_TRANSPARENT   = 5,
-        JT_COUNT         = 6
-    };
-
-    // shaping bit masks
-    enum ShapingBitMasks
-    {
-        MASK_SHAPE_RIGHT    = 1, // if this bit set, shapes to right
-        MASK_SHAPE_LEFT     = 2, // if this bit set, shapes to left
-        MASK_TRANSPARENT    = 4, // if this bit set, is transparent (ignore other bits)
-        MASK_NOSHAPE        = 8  // if this bit set, don't shape this char, i.e. tatweel
-    };
-
-    // shaping values
-    enum ShapeTypeValues
-    {
-        ST_NONE         = 0,
-        ST_RIGHT        = MASK_SHAPE_RIGHT,
-        ST_LEFT         = MASK_SHAPE_LEFT,
-        ST_DUAL         = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT,
-        ST_TRANSPARENT  = MASK_TRANSPARENT,
-        ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL,
-        ST_NOSHAPE_NONE = MASK_NOSHAPE
-    };
-
-    typedef le_int32 ShapeType;
-
-    static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-                      le_bool rightToLeft, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // forbid instantiation
-    ArabicShaping();
-
-    static ShapeType getShapeType(LEUnicode c);
-
-    static const le_uint8 shapingTypeTable[];
-    static const size_t   shapingTypeTableLen;
-
-    static const ShapeType shapeTypes[];
-
-    static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage);
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/AttachmentPosnSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __ATTACHMENTPOSITIONINGSUBTABLES_H
-#define __ATTACHMENTPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct AttachmentPositioningSubtable : GlyphPositioningSubtable
-{
-    Offset    baseCoverageTableOffset;
-    le_uint16 classCount;
-    Offset    markArrayOffset;
-    Offset    baseArrayOffset;
-
-    inline le_int32  getBaseCoverage(const LETableReference &base, LEGlyphID baseGlyphId, LEErrorCode &success) const;
-
-    le_uint32 process(GlyphIterator *glyphIterator) const;
-};
-
-inline le_int32 AttachmentPositioningSubtable::getBaseCoverage(const LETableReference &base, LEGlyphID baseGlyphID, LEErrorCode &success) const
-{
-  return getGlyphCoverage(base, baseCoverageTableOffset, baseGlyphID, success);
-}
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/CanonData.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3649 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 03/12/2008 03:14:34 PM HST
- */
-
-#include "LETypes.h"
-#include "CanonShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 CanonShaping::glyphSubstitutionTable[] = {
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x34, 0x02, 0x46, 0x00, 0x10, 0x61, 0x72, 0x61, 0x62,
-    0x00, 0x62, 0x62, 0x61, 0x6C, 0x69, 0x00, 0x76, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79,
-    0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65, 0x76, 0x61, 0x00, 0x9A, 0x67, 0x72, 0x65, 0x6B, 0x00, 0xA6,
-    0x68, 0x69, 0x72, 0x61, 0x00, 0xB2, 0x6B, 0x61, 0x6E, 0x61, 0x00, 0xBE, 0x6B, 0x6E, 0x64, 0x61,
-    0x00, 0xCA, 0x6C, 0x61, 0x74, 0x6E, 0x00, 0xD6, 0x6D, 0x6C, 0x79, 0x6D, 0x00, 0xE2, 0x6D, 0x79,
-    0x6D, 0x72, 0x00, 0xEE, 0x6F, 0x72, 0x79, 0x61, 0x00, 0xFA, 0x73, 0x69, 0x6E, 0x68, 0x01, 0x06,
-    0x74, 0x61, 0x6D, 0x6C, 0x01, 0x12, 0x74, 0x65, 0x6C, 0x75, 0x01, 0x1E, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x00, 0x13, 0x00, 0x10, 0x00, 0x12,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0F, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x03,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x06,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x0A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0B,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x0E, 0x00, 0x14, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x7A, 0x63, 0x63, 0x6D, 0x70,
-    0x00, 0x82, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x8A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x92, 0x63, 0x63,
-    0x6D, 0x70, 0x00, 0x9A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xA2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xAA,
-    0x63, 0x63, 0x6D, 0x70, 0x00, 0xB2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xBA, 0x63, 0x63, 0x6D, 0x70,
-    0x00, 0xC2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xCA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xD2, 0x63, 0x63,
-    0x6D, 0x70, 0x00, 0xDA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xE2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xEA,
-    0x63, 0x63, 0x6D, 0x70, 0x00, 0xF2, 0x66, 0x69, 0x6E, 0x61, 0x00, 0xFA, 0x69, 0x6E, 0x69, 0x74,
-    0x01, 0x00, 0x6C, 0x69, 0x67, 0x61, 0x01, 0x06, 0x6D, 0x65, 0x64, 0x69, 0x01, 0x0C, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x12, 0x00, 0x13, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x14, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x16, 0x00, 0x17, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x18, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x20, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x00, 0x23, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x24, 0x00, 0x4A, 0x00, 0xC0, 0x01, 0x22, 0x01, 0xEC,
-    0x02, 0xB6, 0x03, 0xF0, 0x14, 0xFE, 0x15, 0x26, 0x15, 0x4C, 0x17, 0xFE, 0x1A, 0x74, 0x1A, 0xB0,
-    0x1A, 0xE0, 0x4E, 0xDA, 0x8B, 0xBC, 0x8D, 0x2A, 0x8E, 0x4A, 0x8E, 0xA0, 0x8E, 0xFC, 0x90, 0xA2,
-    0x91, 0xEA, 0xB1, 0xA2, 0xD5, 0x1E, 0xD5, 0x54, 0xD5, 0x84, 0xD5, 0xA4, 0xD5, 0xC0, 0xD5, 0xF0,
-    0xD6, 0x20, 0xD6, 0x68, 0xD6, 0xBA, 0xD6, 0xFE, 0xD7, 0x38, 0xD7, 0x58, 0xD7, 0x74, 0xD8, 0x20,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x5E, 0x00, 0x06, 0x00, 0x12,
-    0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x06, 0x22, 0x00, 0x02, 0x06, 0x53, 0x06, 0x23, 0x00, 0x02, 0x06, 0x54, 0x06, 0x25,
-    0x00, 0x02, 0x06, 0x55, 0x00, 0x01, 0x00, 0x04, 0x06, 0x24, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01,
-    0x00, 0x04, 0x06, 0x26, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xC2, 0x00, 0x02,
-    0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xD3, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04,
-    0x06, 0xC0, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x06, 0x06, 0x27, 0x06, 0x48, 0x06, 0x4A,
-    0x06, 0xC1, 0x06, 0xD2, 0x06, 0xD5, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-    0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x06, 0x27, 0x06, 0x53, 0x00, 0x02, 0x06, 0x27, 0x06, 0x54,
-    0x00, 0x02, 0x06, 0x48, 0x06, 0x54, 0x00, 0x02, 0x06, 0x27, 0x06, 0x55, 0x00, 0x02, 0x06, 0x4A,
-    0x06, 0x54, 0x00, 0x02, 0x06, 0xD5, 0x06, 0x54, 0x00, 0x02, 0x06, 0xC1, 0x06, 0x54, 0x00, 0x02,
-    0x06, 0xD2, 0x06, 0x54, 0x00, 0x01, 0x00, 0x08, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
-    0x06, 0x26, 0x06, 0xC0, 0x06, 0xC2, 0x06, 0xD3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-    0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8B, 0xFE, 0x91, 0xFE, 0x97, 0xFE, 0x9B, 0xFE, 0x9F,
-    0xFE, 0xA3, 0xFE, 0xA7, 0xFE, 0xB3, 0xFE, 0xB7, 0xFE, 0xBB, 0xFE, 0xBF, 0xFE, 0xC3, 0xFE, 0xC7,
-    0xFE, 0xCB, 0xFE, 0xCF, 0xFE, 0xD3, 0xFE, 0xD7, 0xFE, 0xDB, 0xFE, 0xDF, 0xFE, 0xE3, 0xFE, 0xE7,
-    0xFE, 0xEB, 0xFB, 0xE8, 0xFE, 0xF3, 0xFB, 0x68, 0xFB, 0x60, 0xFB, 0x54, 0xFB, 0x58, 0xFB, 0x64,
-    0xFB, 0x5C, 0xFB, 0x78, 0xFB, 0x74, 0xFB, 0x7C, 0xFB, 0x80, 0xFB, 0x6C, 0xFB, 0x70, 0xFB, 0x90,
-    0xFB, 0xD5, 0xFB, 0x94, 0xFB, 0x9C, 0xFB, 0x98, 0xFB, 0xA2, 0xFB, 0xAC, 0xFB, 0xA8, 0xFB, 0xFE,
-    0xFB, 0xE6, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C,
-    0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-    0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-    0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F,
-    0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-    0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC,
-    0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E,
-    0xFE, 0x8C, 0xFE, 0x92, 0xFE, 0x98, 0xFE, 0x9C, 0xFE, 0xA0, 0xFE, 0xA4, 0xFE, 0xA8, 0xFE, 0xB4,
-    0xFE, 0xB8, 0xFE, 0xBC, 0xFE, 0xC0, 0xFE, 0xC4, 0xFE, 0xC8, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0xD4,
-    0xFE, 0xD8, 0xFE, 0xDC, 0xFE, 0xE0, 0xFE, 0xE4, 0xFE, 0xE8, 0xFE, 0xEC, 0xFB, 0xE9, 0xFE, 0xF4,
-    0xFB, 0x69, 0xFB, 0x61, 0xFB, 0x55, 0xFB, 0x59, 0xFB, 0x65, 0xFB, 0x5D, 0xFB, 0x79, 0xFB, 0x75,
-    0xFB, 0x7D, 0xFB, 0x81, 0xFB, 0x6D, 0xFB, 0x71, 0xFB, 0x91, 0xFB, 0xD6, 0xFB, 0x95, 0xFB, 0x9D,
-    0xFB, 0x99, 0xFB, 0xA3, 0xFB, 0xAD, 0xFB, 0xA9, 0xFB, 0xFF, 0xFB, 0xE7, 0x00, 0x01, 0x00, 0x2E,
-    0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33,
-    0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41,
-    0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A,
-    0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84,
-    0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1,
-    0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x4A, 0xFE, 0x82, 0xFE, 0x84, 0xFE, 0x86,
-    0xFE, 0x88, 0xFE, 0x8A, 0xFE, 0x8E, 0xFE, 0x90, 0xFE, 0x94, 0xFE, 0x96, 0xFE, 0x9A, 0xFE, 0x9E,
-    0xFE, 0xA2, 0xFE, 0xA6, 0xFE, 0xAA, 0xFE, 0xAC, 0xFE, 0xAE, 0xFE, 0xB0, 0xFE, 0xB2, 0xFE, 0xB6,
-    0xFE, 0xBA, 0xFE, 0xBE, 0xFE, 0xC2, 0xFE, 0xC6, 0xFE, 0xCA, 0xFE, 0xCE, 0xFE, 0xD2, 0xFE, 0xD6,
-    0xFE, 0xDA, 0xFE, 0xDE, 0xFE, 0xE2, 0xFE, 0xE6, 0xFE, 0xEA, 0xFE, 0xEE, 0xFE, 0xF0, 0xFE, 0xF2,
-    0xFB, 0x51, 0xFB, 0x67, 0xFB, 0x5F, 0xFB, 0x53, 0xFB, 0x57, 0xFB, 0x63, 0xFB, 0x5B, 0xFB, 0x77,
-    0xFB, 0x73, 0xFB, 0x7B, 0xFB, 0x7F, 0xFB, 0x89, 0xFB, 0x85, 0xFB, 0x83, 0xFB, 0x87, 0xFB, 0x8D,
-    0xFB, 0x8B, 0xFB, 0x6B, 0xFB, 0x6F, 0xFB, 0x8F, 0xFB, 0xD4, 0xFB, 0x93, 0xFB, 0x9B, 0xFB, 0x97,
-    0xFB, 0x9F, 0xFB, 0xA1, 0xFB, 0xAB, 0xFB, 0xA5, 0xFB, 0xA7, 0xFB, 0xE1, 0xFB, 0xDA, 0xFB, 0xD8,
-    0xFB, 0xDC, 0xFB, 0xE3, 0xFB, 0xDF, 0xFB, 0xFD, 0xFB, 0xE5, 0xFB, 0xAF, 0xFB, 0xB1, 0x00, 0x01,
-    0x00, 0x4A, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25, 0x06, 0x26, 0x06, 0x27, 0x06, 0x28,
-    0x06, 0x29, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x2F, 0x06, 0x30,
-    0x06, 0x31, 0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-    0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-    0x06, 0x47, 0x06, 0x48, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x71, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B,
-    0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0x88,
-    0x06, 0x8C, 0x06, 0x8D, 0x06, 0x8E, 0x06, 0x91, 0x06, 0x98, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-    0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBA, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC0,
-    0x06, 0xC1, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xC7, 0x06, 0xC8, 0x06, 0xC9, 0x06, 0xCB, 0x06, 0xCC,
-    0x06, 0xD0, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x10, 0x98, 0x00, 0x35, 0x00, 0x70, 0x00, 0x7A, 0x01, 0x0C, 0x01, 0x86, 0x01, 0xA8, 0x01, 0xB2,
-    0x02, 0x0C, 0x02, 0x62, 0x03, 0x02, 0x03, 0x8A, 0x03, 0xB4, 0x03, 0xF6, 0x04, 0x46, 0x04, 0x8A,
-    0x04, 0xBC, 0x04, 0xEC, 0x05, 0x26, 0x05, 0x38, 0x05, 0x42, 0x05, 0x64, 0x05, 0xF8, 0x06, 0x6C,
-    0x06, 0xEC, 0x07, 0x80, 0x08, 0x1E, 0x08, 0x56, 0x08, 0xBA, 0x08, 0xF2, 0x09, 0x38, 0x09, 0x66,
-    0x09, 0x78, 0x09, 0x82, 0x09, 0xD4, 0x0A, 0x0E, 0x0A, 0x40, 0x0A, 0x70, 0x0A, 0xCC, 0x0A, 0xF2,
-    0x0B, 0x38, 0x0B, 0x68, 0x0B, 0xDC, 0x0C, 0x2A, 0x0C, 0xD6, 0x0D, 0x72, 0x0E, 0x16, 0x0E, 0x50,
-    0x0E, 0xC8, 0x0F, 0x5A, 0x0F, 0xA8, 0x0F, 0xB6, 0x0F, 0xC0, 0x0F, 0xCA, 0x10, 0x2E, 0x00, 0x01,
-    0x00, 0x04, 0xFB, 0xDD, 0x00, 0x02, 0x06, 0x74, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFB, 0xEC,
-    0x00, 0x02, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF2, 0x00, 0x02, 0xFB, 0xDA,
-    0xFB, 0xF4, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF6, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xF8, 0x00, 0x02,
-    0xFB, 0xE7, 0xFB, 0xEA, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x97,
-    0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x01, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x98, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x99, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x02, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9A, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0x9B, 0x00, 0x02, 0xFE, 0xEC, 0xFB, 0xEE, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xF9,
-    0x00, 0x02, 0xFE, 0xF0, 0xFB, 0xFB, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56,
-    0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0xFB, 0xED, 0x00, 0x02, 0x00, 0x01,
-    0xFB, 0xF1, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF3, 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF5, 0x00, 0x02,
-    0xFB, 0xDC, 0xFB, 0xF7, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xEB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x64,
-    0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x65, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x66, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xDF, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x67, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE0, 0x00, 0x02,
-    0xFE, 0xEC, 0xFB, 0xEF, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xFA, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x69,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFD, 0x3D, 0x00, 0x02,
-    0x06, 0x4B, 0xFD, 0xF3, 0x00, 0x04, 0xFE, 0xDB, 0xFE, 0x92, 0xFE, 0xAE, 0xFD, 0xF2, 0x00, 0x04,
-    0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3C, 0x00, 0x02, 0x06, 0x4B,
-    0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0xFC, 0x05, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x9C,
-    0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x06, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x9D, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x07, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0x9E, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x08, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0x9F, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA0, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x09,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x0A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-    0xFD, 0xC2, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x9E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-    0xFC, 0x6A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x6B, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x6C, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xE1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x6D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE2,
-    0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x6E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x6F, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x50,
-    0x00, 0x56, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-    0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0xFC, 0x0B, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x50, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xA1, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x0C, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x52, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0x53, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4,
-    0xFC, 0xA2, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x0D, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x54, 0x00, 0x03,
-    0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xA3, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x0E, 0x00, 0x02, 0xFE, 0xE2,
-    0xFD, 0x55, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x56, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4,
-    0xFD, 0x57, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFC, 0xA4, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA5,
-    0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x0F, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x10, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x0F, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82,
-    0xFD, 0xA0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x9F, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-    0xFD, 0x51, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0x9E, 0xFD, 0xA2, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0,
-    0xFD, 0xA1, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x70, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x71,
-    0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x72, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xA4, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF0, 0xFD, 0xA3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xE3, 0x00, 0x02, 0xFE, 0xE4,
-    0xFC, 0x73, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE4, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x74, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x75, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0xFC, 0x11, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x12, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xA6, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x14, 0x00, 0x02,
-    0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3C, 0xFC, 0x76, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x77, 0x00, 0x02, 0xFE, 0xB0,
-    0xFC, 0x78, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE5, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x79, 0x00, 0x02,
-    0xFE, 0xE6, 0xFC, 0xE6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x7A, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7B,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0xFC, 0x15, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xA7, 0x00, 0x02,
-    0xFE, 0xA4, 0xFD, 0xFB, 0x00, 0x08, 0xFE, 0xDE, 0x00, 0x20, 0xFE, 0x9F, 0xFE, 0xE0, 0xFE, 0x8E,
-    0xFE, 0xDF, 0xFE, 0xEA, 0xFC, 0x16, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x59, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xA4, 0xFC, 0xA8, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x01, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x02,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0xFD, 0xA6, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xBE, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x58, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xA7, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1D, 0x00, 0x02,
-    0xFE, 0xF0, 0xFD, 0x1E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
-    0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x17, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xA9, 0x00, 0x02,
-    0xFE, 0xA0, 0xFC, 0x18, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xAA, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xFF,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x00, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14,
-    0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0xBF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x5B,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x5A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1B,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1C, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0xFC, 0x19, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xAB, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1A, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x1B, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xAC, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x03, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x04,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFD, 0x1F, 0x00, 0x02, 0xFE, 0xF0,
-    0xFD, 0x20, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5B, 0x00, 0x02, 0x06, 0x70,
-    0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFC, 0x5C, 0x00, 0x02, 0x06, 0x70, 0xFD, 0xFC,
-    0x00, 0x04, 0xFB, 0xFE, 0xFE, 0x8E, 0xFE, 0xDD, 0xFD, 0xF6, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xEE,
-    0xFE, 0xDD, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-    0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFC, 0x1C, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x5D, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xA4, 0xFC, 0xAD, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1D, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x5C, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFC, 0xAE, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x1E,
-    0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xAF, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0E, 0x00, 0x02, 0xFE, 0xAE,
-    0xFC, 0x1F, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x61, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x60,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x63, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB0,
-    0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x31, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFB, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0xFC, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68,
-    0x00, 0x6E, 0xFD, 0x5E, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x34, 0x00, 0x02, 0xFE, 0xA0,
-    0xFD, 0x35, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xA8, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xC6,
-    0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFD, 0x36, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x2A, 0x00, 0x02,
-    0xFE, 0xAE, 0xFD, 0x5F, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x62, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFC, 0xE7, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xE8, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x17,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x18, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x00, 0x60, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0xFD, 0x09, 0x00, 0x02, 0xFE, 0x9E,
-    0xFD, 0x2D, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x0A, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x68, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xE4, 0xFD, 0x2E, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x0B, 0x00, 0x02, 0xFE, 0xA6,
-    0xFD, 0x2F, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0D, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x0C, 0x00, 0x02,
-    0xFE, 0xE2, 0xFD, 0x6B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFD, 0x6D, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE4, 0xFD, 0x30, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x32, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFD,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFE, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60,
-    0x00, 0x66, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFD, 0x25,
-    0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x69, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x37, 0x00, 0x02,
-    0xFE, 0xA0, 0xFD, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x67, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-    0xFD, 0xAA, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x38, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x27,
-    0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x39, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x29, 0x00, 0x02, 0xFE, 0xAE,
-    0xFD, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA6, 0xFD, 0x6C,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE9, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xEA, 0x00, 0x02,
-    0xFE, 0xEC, 0xFD, 0x19, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x50,
-    0x00, 0x76, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0xFC, 0x20, 0x00, 0x02,
-    0xFE, 0xA2, 0xFD, 0x65, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA4, 0xFC, 0xB1, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0xB2, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0F, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0xF0, 0x00, 0x03,
-    0xFE, 0xE0, 0xFB, 0xAF, 0xFD, 0xF5, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xCC, 0xFE, 0xE2, 0xFD, 0xFA,
-    0x00, 0x12, 0xFE, 0xE0, 0xFE, 0xF0, 0x00, 0x20, 0xFE, 0x8D, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA,
-    0x00, 0x20, 0xFE, 0xCB, 0xFE, 0xE0, 0xFE, 0xF4, 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xED, 0xFE, 0xB3,
-    0xFE, 0xE0, 0xFE, 0xE2, 0xFD, 0xF9, 0x00, 0x03, 0xFE, 0xE0, 0xFE, 0xF0, 0xFC, 0x21, 0x00, 0x02,
-    0xFE, 0xE2, 0xFD, 0xC5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB3, 0x00, 0x02, 0xFE, 0xE4,
-    0xFD, 0x05, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x06, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x64, 0x00, 0x03, 0xFE, 0xA4,
-    0xFE, 0xA2, 0xFD, 0xA9, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x2B, 0x00, 0x02, 0xFE, 0xAE,
-    0xFD, 0x66, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x21, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x22,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-    0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x22,
-    0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xB4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x23, 0x00, 0x02, 0xFE, 0xA2,
-    0xFC, 0xB5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x24, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x70, 0x00, 0x03,
-    0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xB6, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x10, 0x00, 0x02, 0xFE, 0xAE,
-    0xFC, 0x25, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB7, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x07, 0x00, 0x02,
-    0xFE, 0xF0, 0xFD, 0x08, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x6E, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xAB,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x6F, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0x2C,
-    0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x23, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x24, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0xFC, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xB8, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x27,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x72, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x73, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x33, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF5, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0xF6, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0xFD, 0x71, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x74, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF2, 0xFD, 0x3A, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x11, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x12,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFC, 0x28, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xB9, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3B, 0x00, 0x02, 0xFE, 0xE4,
-    0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40,
-    0x00, 0x46, 0x00, 0x4C, 0xFC, 0x29, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0xC4, 0x00, 0x03, 0xFE, 0xA0,
-    0xFE, 0xE4, 0xFC, 0xBA, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0xF7, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xF4,
-    0xFE, 0xEA, 0xFC, 0x2A, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x77, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4,
-    0xFC, 0xBB, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF7, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF8, 0x00, 0x02,
-    0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34,
-    0xFD, 0x75, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x76, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-    0xFD, 0x78, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xB6, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2,
-    0xFD, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x14, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x2B, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xBC, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2C, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xBD, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0xF9, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFA, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0x79, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFD, 0x7B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x7A, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF2, 0xFD, 0x15, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x16, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0B,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44,
-    0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0xFC, 0x2D, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBE, 0x00, 0x02,
-    0xFE, 0xA0, 0xFC, 0x2E, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xBF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x2F,
-    0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x7D, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xC0, 0x00, 0x02,
-    0xFE, 0xA8, 0xFC, 0x30, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xC1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x31,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x32, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12,
-    0x00, 0x1A, 0x00, 0x20, 0xFD, 0x7C, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0xC1, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7C, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7D, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0xFC, 0x33, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC2, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xF1,
-    0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFC, 0x34, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB4, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xC3, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x35, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x36, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24,
-    0x00, 0x2A, 0xFD, 0x7E, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x7F, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFD, 0xB2, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7E, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x7F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0xFC, 0x37, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x38, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xC4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x39, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC5, 0x00, 0x02,
-    0xFE, 0xA4, 0xFC, 0x3A, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xC6, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x3B,
-    0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xC7, 0x00, 0x02, 0xFE, 0xE0, 0xFC, 0x3C, 0x00, 0x02, 0xFE, 0xE2,
-    0xFD, 0xC3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xC8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x3D,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x3E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A,
-    0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0x80,
-    0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x81, 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xEB, 0x00, 0x02, 0xFE, 0xE0,
-    0xFC, 0x82, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xBB, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB7,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEC, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x83, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x84, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x50, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0,
-    0x00, 0xA6, 0xFE, 0xF5, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF7, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xF9,
-    0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x3F, 0x00, 0x02, 0xFE, 0x9E,
-    0xFD, 0x83, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA0, 0xFD, 0xBA, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4,
-    0xFC, 0xC9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x40, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0xB5, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCA, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x41, 0x00, 0x02, 0xFE, 0xA6,
-    0xFD, 0x86, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xCB, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x42,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x88, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xCC, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0xCD, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x43, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x44,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0xFE, 0xF6, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF8,
-    0x00, 0x02, 0xFE, 0x84, 0xFE, 0xFA, 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFC, 0x00, 0x02, 0xFE, 0x8E,
-    0xFD, 0x84, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0x9E, 0xFD, 0xBC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
-    0xFD, 0xAC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x80, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-    0xFD, 0x82, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0x81, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-    0xFD, 0x85, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFC, 0x85, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x87,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xAD, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xED,
-    0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x86, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x87, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-    0x00, 0x58, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0xFC, 0x45, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x8C, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x92, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA8, 0xFD, 0x8D, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xCE, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x46, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x89, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0xF4, 0x00, 0x04, 0xFE, 0xA4, 0xFE, 0xE4,
-    0xFE, 0xAA, 0xFD, 0x8A, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCF, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x47, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x8E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xA0, 0xFD, 0x8F,
-    0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xD0, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x48, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xD1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x49, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x4A,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x32, 0xFC, 0x88, 0x00, 0x02, 0xFE, 0x8E, 0xFD, 0xC0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-    0xFD, 0x8B, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0xB9, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-    0xFC, 0x89, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB1, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0x00, 0x0E,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x72, 0xFC, 0x4B, 0x00, 0x02,
-    0xFE, 0x9E, 0xFD, 0xB8, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x98, 0x00, 0x03, 0xFE, 0xA0,
-    0xFE, 0xE4, 0xFC, 0xD2, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x4C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x95,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xD3, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x4D, 0x00, 0x02,
-    0xFE, 0xA6, 0xFC, 0xD4, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x4E, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD5,
-    0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xD6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x4F, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x50, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A,
-    0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFD, 0xBD, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA2,
-    0xFD, 0x97, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x99, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0,
-    0xFD, 0xC7, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x96, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0,
-    0xFD, 0xB3, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x8A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x8B,
-    0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x8C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9B, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF0, 0xFD, 0x9A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEE, 0x00, 0x02, 0xFE, 0xE4,
-    0xFC, 0x8D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xEF, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x8E, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x8F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0xD9, 0x00, 0x02,
-    0x06, 0x70, 0xFC, 0x51, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xD7, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x52,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x93, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x94, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xD8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x53, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x54, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFD, 0xF8, 0x00, 0x04, 0xFE, 0xB3,
-    0xFE, 0xE0, 0xFE, 0xE2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5D, 0x00, 0x02, 0x06, 0x70, 0x00, 0x01,
-    0x00, 0x04, 0xFC, 0x90, 0x00, 0x02, 0x06, 0x70, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x00, 0x5E, 0xFC, 0x55, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xDA, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x56,
-    0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xDB, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x57, 0x00, 0x02, 0xFE, 0xA6,
-    0xFC, 0xDC, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x58, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9D, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xDD, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xDE, 0x00, 0x02, 0xFE, 0xEC,
-    0xFC, 0x59, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x5A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A,
-    0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52,
-    0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0xFD, 0xAF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0xAE,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x91, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x92, 0x00, 0x02,
-    0xFE, 0xB0, 0xFC, 0x93, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-    0xFD, 0xB0, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xF0, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x94,
-    0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xF1, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x95, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x96, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x35, 0xFB, 0xD7, 0xFE, 0x8B, 0xFE, 0x8C,
-    0xFE, 0x8D, 0xFE, 0x8E, 0xFE, 0x91, 0xFE, 0x92, 0xFE, 0x97, 0xFE, 0x98, 0xFE, 0x9B, 0xFE, 0x9C,
-    0xFE, 0x9F, 0xFE, 0xA0, 0xFE, 0xA3, 0xFE, 0xA4, 0xFE, 0xA7, 0xFE, 0xA8, 0xFE, 0xAB, 0xFE, 0xAD,
-    0xFE, 0xB3, 0xFE, 0xB4, 0xFE, 0xB7, 0xFE, 0xB8, 0xFE, 0xBB, 0xFE, 0xBC, 0xFE, 0xBF, 0xFE, 0xC0,
-    0xFE, 0xC3, 0xFE, 0xC4, 0xFE, 0xC7, 0xFE, 0xC8, 0xFE, 0xCB, 0xFE, 0xCC, 0xFE, 0xCF, 0xFE, 0xD0,
-    0xFE, 0xD3, 0xFE, 0xD4, 0xFE, 0xD7, 0xFE, 0xD8, 0xFE, 0xDB, 0xFE, 0xDC, 0xFE, 0xDF, 0xFE, 0xE0,
-    0xFE, 0xE3, 0xFE, 0xE4, 0xFE, 0xE7, 0xFE, 0xE8, 0xFE, 0xEB, 0xFE, 0xED, 0xFE, 0xEF, 0xFE, 0xF0,
-    0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x1A,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x09, 0xCB, 0x00, 0x02, 0x09, 0xBE,
-    0x09, 0xCC, 0x00, 0x02, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x01, 0x09, 0xC7, 0x00, 0x02, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x16, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02,
-    0x09, 0xC7, 0x09, 0xBE, 0x00, 0x02, 0x09, 0xC7, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x02, 0x09, 0xCB,
-    0x09, 0xCC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x02, 0x66, 0x00, 0x20,
-    0x00, 0x46, 0x00, 0x50, 0x00, 0x62, 0x00, 0x74, 0x00, 0x96, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xDC,
-    0x00, 0xEE, 0x00, 0xF8, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x4A, 0x01, 0x5C,
-    0x01, 0x7E, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xC4, 0x01, 0xD6, 0x01, 0xE0, 0x02, 0x02, 0x02, 0x0C,
-    0x02, 0x16, 0x02, 0x20, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3E, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5C,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0x07, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-    0x04, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD2, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x04, 0x03, 0x00, 0x02, 0x03, 0x01, 0x04, 0x03, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04,
-    0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0x00, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD6,
-    0x00, 0x02, 0x03, 0x06, 0x04, 0x01, 0x00, 0x02, 0x03, 0x08, 0x04, 0x00, 0x00, 0x02, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xDC, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDE, 0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x04, 0x0D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE2,
-    0x00, 0x02, 0x03, 0x04, 0x04, 0x19, 0x00, 0x02, 0x03, 0x06, 0x04, 0xE4, 0x00, 0x02, 0x03, 0x08,
-    0x04, 0x0D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x0C, 0x00, 0x02,
-    0x03, 0x01, 0x04, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x04, 0xE6, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0xEE, 0x00, 0x02,
-    0x03, 0x04, 0x04, 0x0E, 0x00, 0x02, 0x03, 0x06, 0x04, 0xF0, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF2,
-    0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF4, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01,
-    0x00, 0x04, 0x04, 0xF8, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEC, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xD1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD3,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x53, 0x00, 0x02, 0x03, 0x01,
-    0x04, 0x53, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x04, 0x50, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD7, 0x00, 0x02, 0x03, 0x06, 0x04, 0x51, 0x00, 0x02,
-    0x03, 0x08, 0x04, 0x50, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC2,
-    0x00, 0x02, 0x03, 0x06, 0x04, 0xDD, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDF,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x04, 0x5D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x04, 0x39, 0x00, 0x02,
-    0x03, 0x06, 0x04, 0xE5, 0x00, 0x02, 0x03, 0x08, 0x04, 0x5D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x01, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0xE7, 0x00, 0x02, 0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x04, 0xEF, 0x00, 0x02, 0x03, 0x04, 0x04, 0x5E, 0x00, 0x02, 0x03, 0x06,
-    0x04, 0xF1, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF3, 0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04,
-    0x04, 0xF5, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF9, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0xED, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x57,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x76, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01,
-    0x00, 0x04, 0x04, 0x77, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDA, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDB, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04,
-    0x04, 0xEA, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEB, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x20, 0x04, 0x06, 0x04, 0x10, 0x04, 0x13, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17,
-    0x04, 0x18, 0x04, 0x1A, 0x04, 0x1E, 0x04, 0x23, 0x04, 0x27, 0x04, 0x2B, 0x04, 0x2D, 0x04, 0x30,
-    0x04, 0x33, 0x04, 0x35, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x3A, 0x04, 0x3E, 0x04, 0x43,
-    0x04, 0x47, 0x04, 0x4B, 0x04, 0x4D, 0x04, 0x56, 0x04, 0x74, 0x04, 0x75, 0x04, 0xD8, 0x04, 0xD9,
-    0x04, 0xE8, 0x04, 0xE9, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x02, 0x1C, 0x00, 0x01,
-    0x01, 0xA6, 0x00, 0x34, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
-    0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
-    0x00, 0xF2, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0A, 0x01, 0x10, 0x01, 0x16, 0x01, 0x1C,
-    0x01, 0x22, 0x01, 0x28, 0x01, 0x2E, 0x01, 0x34, 0x01, 0x3A, 0x01, 0x40, 0x01, 0x46, 0x01, 0x4C,
-    0x01, 0x52, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7C,
-    0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x00, 0x02, 0x04, 0x15,
-    0x03, 0x00, 0x00, 0x02, 0x04, 0x15, 0x03, 0x08, 0x00, 0x02, 0x04, 0x13, 0x03, 0x01, 0x00, 0x02,
-    0x04, 0x06, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x01, 0x00, 0x02, 0x04, 0x18, 0x03, 0x00,
-    0x00, 0x02, 0x04, 0x23, 0x03, 0x06, 0x00, 0x02, 0x04, 0x18, 0x03, 0x06, 0x00, 0x02, 0x04, 0x38,
-    0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x00, 0x00, 0x02, 0x04, 0x35, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x33, 0x03, 0x01, 0x00, 0x02, 0x04, 0x56, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x01,
-    0x00, 0x02, 0x04, 0x38, 0x03, 0x00, 0x00, 0x02, 0x04, 0x43, 0x03, 0x06, 0x00, 0x02, 0x04, 0x74,
-    0x03, 0x0F, 0x00, 0x02, 0x04, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x04, 0x16, 0x03, 0x06, 0x00, 0x02,
-    0x04, 0x36, 0x03, 0x06, 0x00, 0x02, 0x04, 0x10, 0x03, 0x06, 0x00, 0x02, 0x04, 0x30, 0x03, 0x06,
-    0x00, 0x02, 0x04, 0x10, 0x03, 0x08, 0x00, 0x02, 0x04, 0x30, 0x03, 0x08, 0x00, 0x02, 0x04, 0x15,
-    0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x06, 0x00, 0x02, 0x04, 0xD8, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0xD9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x16, 0x03, 0x08, 0x00, 0x02, 0x04, 0x36, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0x17, 0x03, 0x08, 0x00, 0x02, 0x04, 0x37, 0x03, 0x08, 0x00, 0x02, 0x04, 0x18,
-    0x03, 0x04, 0x00, 0x02, 0x04, 0x38, 0x03, 0x04, 0x00, 0x02, 0x04, 0x18, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x38, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1E, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3E, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0xE8, 0x03, 0x08, 0x00, 0x02, 0x04, 0xE9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2D,
-    0x03, 0x08, 0x00, 0x02, 0x04, 0x4D, 0x03, 0x08, 0x00, 0x02, 0x04, 0x23, 0x03, 0x04, 0x00, 0x02,
-    0x04, 0x43, 0x03, 0x04, 0x00, 0x02, 0x04, 0x23, 0x03, 0x08, 0x00, 0x02, 0x04, 0x43, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0x23, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x43, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x27,
-    0x03, 0x08, 0x00, 0x02, 0x04, 0x47, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2B, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x4B, 0x03, 0x08, 0x00, 0x01, 0x00, 0x34, 0x04, 0x00, 0x04, 0x01, 0x04, 0x03, 0x04, 0x07,
-    0x04, 0x0C, 0x04, 0x0D, 0x04, 0x0E, 0x04, 0x19, 0x04, 0x39, 0x04, 0x50, 0x04, 0x51, 0x04, 0x53,
-    0x04, 0x57, 0x04, 0x5C, 0x04, 0x5D, 0x04, 0x5E, 0x04, 0x76, 0x04, 0x77, 0x04, 0xC1, 0x04, 0xC2,
-    0x04, 0xD0, 0x04, 0xD1, 0x04, 0xD2, 0x04, 0xD3, 0x04, 0xD6, 0x04, 0xD7, 0x04, 0xDA, 0x04, 0xDB,
-    0x04, 0xDC, 0x04, 0xDD, 0x04, 0xDE, 0x04, 0xDF, 0x04, 0xE2, 0x04, 0xE3, 0x04, 0xE4, 0x04, 0xE5,
-    0x04, 0xE6, 0x04, 0xE7, 0x04, 0xEA, 0x04, 0xEB, 0x04, 0xEC, 0x04, 0xED, 0x04, 0xEE, 0x04, 0xEF,
-    0x04, 0xF0, 0x04, 0xF1, 0x04, 0xF2, 0x04, 0xF3, 0x04, 0xF4, 0x04, 0xF5, 0x04, 0xF8, 0x04, 0xF9,
-    0x00, 0x01, 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x04, 0x15, 0x03, 0x40, 0x00, 0x02, 0x04, 0x13,
-    0x03, 0x41, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x41, 0x00, 0x02, 0x04, 0x18, 0x03, 0x40, 0x00, 0x02,
-    0x04, 0x35, 0x03, 0x40, 0x00, 0x02, 0x04, 0x33, 0x03, 0x41, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x41,
-    0x00, 0x02, 0x04, 0x38, 0x03, 0x40, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x04, 0x03, 0x04, 0x0C,
-    0x04, 0x0D, 0x04, 0x50, 0x04, 0x53, 0x04, 0x5C, 0x04, 0x5D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x20, 0x00, 0x01,
-    0x00, 0x04, 0x09, 0x29, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x31, 0x00, 0x02,
-    0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x34, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-    0x09, 0x28, 0x09, 0x30, 0x09, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x09, 0x28, 0x09, 0x3C,
-    0x00, 0x02, 0x09, 0x30, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x33, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-    0x09, 0x29, 0x09, 0x31, 0x09, 0x34, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x33, 0x04, 0x00, 0x75, 0x00, 0xF0, 0x01, 0x1A, 0x04, 0x5A, 0x05, 0x0C, 0x08, 0x3C, 0x09, 0x24,
-    0x09, 0xD6, 0x09, 0xE0, 0x0A, 0x54, 0x0D, 0x84, 0x0D, 0x8E, 0x0D, 0x98, 0x11, 0x44, 0x11, 0xF6,
-    0x15, 0x92, 0x16, 0xBC, 0x17, 0x6E, 0x17, 0x88, 0x18, 0xB2, 0x1C, 0x4E, 0x1C, 0x78, 0x1C, 0xA2,
-    0x1C, 0xAC, 0x1C, 0xC6, 0x1D, 0x5C, 0x1D, 0xF2, 0x1D, 0xFC, 0x1E, 0x06, 0x1E, 0x10, 0x1E, 0x1A,
-    0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0xC4, 0x1F, 0x5A, 0x1F, 0x64, 0x1F, 0x6E, 0x1F, 0x78, 0x1F, 0x82,
-    0x1F, 0x8C, 0x1F, 0x96, 0x1F, 0xB8, 0x1F, 0xDA, 0x1F, 0xFC, 0x20, 0x1E, 0x20, 0xB4, 0x21, 0x4A,
-    0x21, 0x54, 0x21, 0x5E, 0x21, 0x68, 0x21, 0x72, 0x21, 0x7C, 0x21, 0x86, 0x22, 0x1C, 0x22, 0xB2,
-    0x22, 0xBC, 0x22, 0xC6, 0x22, 0xD0, 0x22, 0xDA, 0x22, 0xE4, 0x22, 0xEE, 0x23, 0x18, 0x23, 0x42,
-    0x23, 0x6C, 0x23, 0x96, 0x23, 0xB8, 0x23, 0xDA, 0x23, 0xFC, 0x24, 0x1E, 0x24, 0x48, 0x24, 0x72,
-    0x24, 0x9C, 0x25, 0x32, 0x25, 0xC8, 0x25, 0xD2, 0x25, 0xDC, 0x25, 0xE6, 0x25, 0xF0, 0x25, 0xFA,
-    0x26, 0x04, 0x26, 0x9A, 0x27, 0x30, 0x27, 0x3A, 0x27, 0x44, 0x27, 0x4E, 0x27, 0x58, 0x27, 0x62,
-    0x27, 0x6C, 0x27, 0x76, 0x27, 0x80, 0x27, 0x8A, 0x27, 0x94, 0x27, 0x9E, 0x27, 0xA8, 0x27, 0xD2,
-    0x27, 0xFC, 0x28, 0x26, 0x28, 0x50, 0x28, 0x7A, 0x28, 0xA4, 0x28, 0xCE, 0x28, 0xF8, 0x29, 0x22,
-    0x29, 0x4C, 0x29, 0x76, 0x29, 0xA0, 0x2A, 0x78, 0x2A, 0x82, 0x2B, 0x32, 0x2C, 0x5C, 0x2C, 0x86,
-    0x2D, 0x5E, 0x2D, 0x68, 0x2E, 0x18, 0x2E, 0xF0, 0x2E, 0xFA, 0x2F, 0xAA, 0x2F, 0xD4, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x40, 0x03, 0x85, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xC1, 0x00, 0x02, 0x03, 0x42, 0x00, 0x4C, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xA6,
-    0x00, 0xAC, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xE0, 0x00, 0xE8,
-    0x00, 0xF2, 0x00, 0xFA, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x16, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x34,
-    0x01, 0x3E, 0x01, 0x46, 0x01, 0x4C, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x70, 0x01, 0x7A,
-    0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4,
-    0x01, 0xCE, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC, 0x01, 0xF2, 0x01, 0xFC, 0x02, 0x04,
-    0x02, 0x0E, 0x02, 0x16, 0x02, 0x20, 0x02, 0x28, 0x02, 0x32, 0x02, 0x3A, 0x02, 0x44, 0x02, 0x4C,
-    0x02, 0x56, 0x02, 0x60, 0x02, 0x6A, 0x02, 0x74, 0x02, 0x7E, 0x02, 0x86, 0x02, 0x8C, 0x02, 0x96,
-    0x02, 0xA0, 0x02, 0xAA, 0x02, 0xB4, 0x02, 0xBE, 0x02, 0xC6, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4,
-    0x02, 0xEE, 0x02, 0xF8, 0x03, 0x00, 0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32,
-    0x03, 0x3A, 0x1F, 0xBA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x86, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xB9,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xB8, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x08,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x0B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x8B,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0x89, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x09, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xBA,
-    0x00, 0x02, 0x03, 0x40, 0x03, 0x86, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x08,
-    0x00, 0x02, 0x03, 0x43, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x8B,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x89, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41,
-    0x1F, 0x8E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x43, 0x1F, 0xBC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-    0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
-    0x1F, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x03, 0x88, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02,
-    0x03, 0x13, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x41, 0x1F, 0x19, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x88,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02, 0x03, 0x43, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2,
-    0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E,
-    0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72,
-    0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96, 0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE,
-    0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE,
-    0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46,
-    0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90,
-    0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE,
-    0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A,
-    0x1F, 0xCA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x89, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
-    0x1F, 0x28, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x29, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xCA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x89, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9A, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
-    0x1F, 0x28, 0x00, 0x02, 0x03, 0x43, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
-    0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x43, 0x1F, 0xCC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x19, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xAE,
-    0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x1F, 0xDA,
-    0x00, 0x02, 0x03, 0x00, 0x03, 0x8A, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD9, 0x00, 0x02, 0x03, 0x04,
-    0x1F, 0xD8, 0x00, 0x02, 0x03, 0x06, 0x03, 0xAA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x3A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x40, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x3F, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x39, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xDA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8A,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02,
-    0x03, 0x43, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
-    0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x8C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x4C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x4C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x48, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x4B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x4B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x49, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x4A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x4A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x48,
-    0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xEC, 0x00, 0x02, 0x03, 0x14, 0x00, 0x0D,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A,
-    0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x8E, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE9, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE8, 0x00, 0x02,
-    0x03, 0x06, 0x03, 0xAB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
-    0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x59, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8E, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
-    0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
-    0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
-    0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
-    0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
-    0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xC4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x57, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xBE, 0x00, 0xC6,
-    0x00, 0xCC, 0x00, 0xD2, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x18, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
-    0x01, 0x5A, 0x01, 0x64, 0x01, 0x6C, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB2, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD6, 0x01, 0xE0,
-    0x01, 0xEA, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1A, 0x02, 0x22,
-    0x02, 0x28, 0x02, 0x30, 0x02, 0x36, 0x02, 0x40, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5A, 0x02, 0x64,
-    0x02, 0x6C, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE,
-    0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD8, 0x02, 0xE0, 0x02, 0xEA, 0x02, 0xF4,
-    0x02, 0xFE, 0x03, 0x08, 0x03, 0x12, 0x03, 0x1A, 0x03, 0x24, 0x03, 0x2E, 0x03, 0x38, 0x03, 0x42,
-    0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C, 0x03, 0x64, 0x03, 0x6C, 0x03, 0x76, 0x03, 0x80, 0x03, 0x8A,
-    0x03, 0x94, 0x03, 0x9E, 0x03, 0xA6, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x70,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xB1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xB0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x82,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x06, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x45, 0x1F, 0x00, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0x87, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0x85, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x01, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x70, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0xB4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xB7,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0xB6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
-    0x1F, 0x00, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xB4,
-    0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
-    0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xB7, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xB3, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
-    0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x14,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x14,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x10, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x13, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x11, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x12,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x12,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x10,
-    0x00, 0x02, 0x03, 0x43, 0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8,
-    0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10,
-    0x01, 0x1A, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C,
-    0x01, 0x62, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2,
-    0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE,
-    0x01, 0xF6, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26,
-    0x02, 0x30, 0x02, 0x38, 0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E,
-    0x02, 0x78, 0x02, 0x80, 0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA,
-    0x02, 0xC0, 0x02, 0xC8, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02,
-    0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C,
-    0x03, 0x54, 0x03, 0x5C, 0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96,
-    0x1F, 0xC2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
-    0x1F, 0x20, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x95,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x91, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x21, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xC2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xC4,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0xC6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x20,
-    0x00, 0x02, 0x03, 0x43, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x93,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x91, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xC4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xC3, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
-    0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
-    0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
-    0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4,
-    0x00, 0xAC, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCC, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x42,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x40,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x45, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x41, 0x1F, 0x41, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x40,
-    0x03, 0xCC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x44,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x44,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x40, 0x00, 0x02, 0x03, 0x43, 0x00, 0x03, 0x00, 0x08,
-    0x00, 0x0E, 0x00, 0x14, 0x1F, 0xE4, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xE5, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xE4, 0x00, 0x02, 0x03, 0x43, 0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54,
-    0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90,
-    0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE,
-    0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x24, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCD,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xE1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE0, 0x00, 0x02, 0x03, 0x06,
-    0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01,
-    0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-    0x1F, 0xE7, 0x00, 0x03, 0x03, 0x08, 0x03, 0x42, 0x03, 0xCB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x52,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x52,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x56,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x53, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x53, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x42, 0x1F, 0x51, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x40,
-    0x03, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x52, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x56, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x43, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x44,
-    0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xD2, 0x00, 0xDA,
-    0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x22,
-    0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x6C,
-    0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2, 0x01, 0xAA, 0x01, 0xB4,
-    0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFC,
-    0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26, 0x02, 0x30, 0x02, 0x38,
-    0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x78, 0x02, 0x80,
-    0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC8,
-    0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02, 0x03, 0x0A, 0x03, 0x14,
-    0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C,
-    0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96, 0x1F, 0xF2, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
-    0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02,
-    0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x63, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41,
-    0x03, 0x45, 0x1F, 0x65, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x67, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA1,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x61, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x41,
-    0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0xF6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02, 0x03, 0x43,
-    0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0,
-    0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xF3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x00, 0x03, 0x90,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x40, 0x03, 0x90, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0xE2, 0x00, 0x02, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE2,
-    0x00, 0x02, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE7, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x03, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x03, 0xD4, 0x00, 0x02, 0x03, 0x08, 0x03, 0xD3,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x83, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x05, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x03, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x83,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x86, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x8A,
-    0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
-    0x1F, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E,
-    0x00, 0x02, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x8B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8D,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x89, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8A, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8B, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0x8C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x8E, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8F,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x12,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x14, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1F, 0x13, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x1F, 0x1A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1F, 0x1B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x1B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
-    0x1F, 0x24, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
-    0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x93, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x92, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0x94, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x97,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9B, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x2D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x2B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9B,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9E, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9F, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x34, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x36, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x33, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x33,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3A, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x3C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3C,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x3D, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x3F,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x42,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1F, 0x43, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x1F, 0x4A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1F, 0x4B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x4B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x54,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x56, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x53, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x53,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x5B, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x5D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x5D,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xA2, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x64, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x62, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-    0x00, 0x90, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x00,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3,
-    0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x42,
-    0x03, 0x45, 0x1F, 0x67, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA1, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA4,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA7, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0xAA, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68,
-    0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x6B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6F, 0x00, 0x02, 0x03, 0x42,
-    0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAB, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xAD, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAE, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB2,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xC4, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x83, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x1F, 0x8B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x00,
-    0x1F, 0x94, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x93, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x02,
-    0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9A,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x9F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xA3, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x1F, 0xAB, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x42, 0x00, 0x17,
-    0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-    0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xB2,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
-    0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x81, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xB4, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0x80, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54,
-    0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92,
-    0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x8C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x89, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02, 0x03, 0x43,
-    0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
-    0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
-    0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
-    0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xCE, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xCF,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2,
-    0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
-    0x1F, 0x96, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xC7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0x98, 0x00, 0x02, 0x03, 0x43, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82,
-    0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA,
-    0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x13,
-    0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01,
-    0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xA7, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x42,
-    0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41,
-    0x1F, 0xA6, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36,
-    0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
-    0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0xAA,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x43, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1F, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xDF, 0x00, 0x02,
-    0x03, 0x42, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
-    0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
-    0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
-    0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
-    0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
-    0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x75, 0x00, 0xA8, 0x03, 0x91, 0x03, 0x95, 0x03, 0x97, 0x03, 0x99,
-    0x03, 0x9F, 0x03, 0xA1, 0x03, 0xA5, 0x03, 0xA9, 0x03, 0xAC, 0x03, 0xAE, 0x03, 0xB1, 0x03, 0xB5,
-    0x03, 0xB7, 0x03, 0xB9, 0x03, 0xBF, 0x03, 0xC1, 0x03, 0xC5, 0x03, 0xC9, 0x03, 0xCA, 0x03, 0xCB,
-    0x03, 0xCE, 0x03, 0xD2, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
-    0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
-    0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x20, 0x1F, 0x21,
-    0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x38, 0x1F, 0x39, 0x1F, 0x40, 0x1F, 0x41, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x50, 0x1F, 0x51,
-    0x1F, 0x59, 0x1F, 0x60, 0x1F, 0x61, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66,
-    0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E,
-    0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x71, 0x1F, 0x74, 0x1F, 0x75, 0x1F, 0x7C, 0x1F, 0x7D, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xB3, 0x1F, 0xB6, 0x1F, 0xBC, 0x1F, 0xBE, 0x1F, 0xBF,
-    0x1F, 0xC3, 0x1F, 0xC6, 0x1F, 0xCC, 0x1F, 0xF3, 0x1F, 0xF6, 0x1F, 0xFC, 0x1F, 0xFE, 0x21, 0x26,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4C, 0x09, 0x66, 0x11, 0x1A, 0x17, 0x08, 0x1C, 0xC2,
-    0x20, 0xBC, 0x24, 0x9E, 0x27, 0x3C, 0x29, 0x7A, 0x2B, 0x42, 0x2D, 0x22, 0x2E, 0xD2, 0x30, 0x80,
-    0x31, 0xE8, 0x33, 0x50, 0x34, 0xB8, 0x35, 0x94, 0x36, 0x70, 0x37, 0x4C, 0x38, 0x1A, 0x38, 0xE8,
-    0x39, 0xB6, 0x3A, 0x68, 0x3B, 0x1A, 0x3B, 0x40, 0x3B, 0x66, 0x3B, 0x8C, 0x3B, 0xB2, 0x3B, 0xD8,
-    0x3B, 0xFE, 0x3C, 0x24, 0x3C, 0x4A, 0x3C, 0x70, 0x3C, 0x96, 0x3C, 0xBC, 0x00, 0x01, 0x07, 0x46,
-    0x00, 0xE8, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA,
-    0x02, 0x00, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A,
-    0x02, 0x30, 0x02, 0x36, 0x02, 0x3C, 0x02, 0x42, 0x02, 0x48, 0x02, 0x4E, 0x02, 0x54, 0x02, 0x5A,
-    0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8A,
-    0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB4, 0x02, 0xBA,
-    0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC, 0x02, 0xD2, 0x02, 0xD8, 0x02, 0xDE, 0x02, 0xE4, 0x02, 0xEA,
-    0x02, 0xF0, 0x02, 0xF6, 0x02, 0xFC, 0x03, 0x02, 0x03, 0x08, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1A,
-    0x03, 0x20, 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x44, 0x03, 0x4A,
-    0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x6E, 0x03, 0x74, 0x03, 0x7A,
-    0x03, 0x80, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-    0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDA,
-    0x03, 0xE0, 0x03, 0xE6, 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A,
-    0x04, 0x10, 0x04, 0x16, 0x04, 0x1C, 0x04, 0x22, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A,
-    0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52, 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A,
-    0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82, 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A,
-    0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2, 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA,
-    0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2, 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA,
-    0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12, 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A,
-    0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-    0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-    0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA,
-    0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2, 0x05, 0xD8, 0x05, 0xDE, 0x05, 0xE4, 0x05, 0xEA,
-    0x05, 0xF0, 0x05, 0xF6, 0x05, 0xFC, 0x06, 0x02, 0x06, 0x08, 0x06, 0x0E, 0x06, 0x14, 0x06, 0x1A,
-    0x06, 0x20, 0x06, 0x26, 0x06, 0x2C, 0x06, 0x32, 0x06, 0x38, 0x06, 0x3E, 0x06, 0x44, 0x06, 0x4A,
-    0x06, 0x50, 0x06, 0x56, 0x06, 0x5C, 0x06, 0x62, 0x06, 0x68, 0x06, 0x6E, 0x06, 0x74, 0x06, 0x7A,
-    0x06, 0x80, 0x06, 0x86, 0x06, 0x8C, 0x06, 0x92, 0x06, 0x98, 0x06, 0x9E, 0x06, 0xA4, 0x06, 0xAA,
-    0x06, 0xB0, 0x06, 0xB6, 0x06, 0xBC, 0x06, 0xC2, 0x06, 0xC8, 0x06, 0xCE, 0x06, 0xD4, 0x06, 0xDA,
-    0x06, 0xE0, 0x06, 0xE6, 0x06, 0xEC, 0x06, 0xF2, 0x06, 0xF8, 0x06, 0xFE, 0x07, 0x04, 0x07, 0x0A,
-    0x07, 0x10, 0x07, 0x16, 0x07, 0x1C, 0x07, 0x22, 0x07, 0x28, 0x07, 0x2E, 0x07, 0x34, 0x07, 0x3A,
-    0x07, 0x40, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01, 0x00, 0x02,
-    0x03, 0x95, 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02, 0x03, 0x99, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9,
-    0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02, 0x03, 0x99, 0x03, 0x08, 0x00, 0x02,
-    0x03, 0xA5, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x44, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x08, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x08, 0x00, 0x02,
-    0x03, 0xBF, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xD2, 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x01, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x00, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0x91, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x09, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x08, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x11, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0x95, 0x03, 0x13, 0x00, 0x02, 0x03, 0x95, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x18,
-    0x03, 0x00, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x01, 0x00, 0x02,
-    0x1F, 0x19, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x20, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x20,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x21, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x13, 0x00, 0x02, 0x03, 0x97, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x28, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x28,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x29, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x30, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x30,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x31, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x13, 0x00, 0x02, 0x03, 0x99, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x38, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x38,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x39, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x13, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x40, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x40,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x13, 0x00, 0x02,
-    0x03, 0x9F, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x48, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x51, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x50, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5,
-    0x03, 0x14, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x01, 0x00, 0x02,
-    0x1F, 0x59, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x60, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x60,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x61, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x68, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x68,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x69, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x00,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xBF,
-    0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x02, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x03, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x04, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x05,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x06, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x07, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x08, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x0B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x0E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0F, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x20, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x22, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x23, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x24, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x25,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x26, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x27, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x28, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x2B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x2E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2F, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x60, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x62, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x63, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x64, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x65,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x66, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x67, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x68, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x6B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x6E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6F, 0x03, 0x45, 0x00, 0x02,
-    0x03, 0xB1, 0x03, 0x06, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x04, 0x00, 0x02, 0x1F, 0x70, 0x03, 0x45,
-    0x00, 0x02, 0x03, 0xB1, 0x03, 0x45, 0x00, 0x02, 0x03, 0xAC, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1,
-    0x03, 0x42, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x06, 0x00, 0x02,
-    0x03, 0x91, 0x03, 0x04, 0x00, 0x02, 0x03, 0x91, 0x03, 0x00, 0x00, 0x02, 0x03, 0x91, 0x03, 0x45,
-    0x00, 0x02, 0x00, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x74, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7,
-    0x03, 0x45, 0x00, 0x02, 0x03, 0xAE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x95, 0x03, 0x00, 0x00, 0x02, 0x03, 0x97, 0x03, 0x00,
-    0x00, 0x02, 0x03, 0x97, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBF,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x06, 0x00, 0x02,
-    0x03, 0xB9, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0xCA, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x06, 0x00, 0x02, 0x03, 0x99,
-    0x03, 0x04, 0x00, 0x02, 0x03, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0xFE, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x06,
-    0x00, 0x02, 0x03, 0xC5, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC1,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x14, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x42, 0x00, 0x02,
-    0x03, 0xCB, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x06, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x04,
-    0x00, 0x02, 0x03, 0xA5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA1, 0x03, 0x14, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x00, 0x00, 0x02, 0x1F, 0x7C, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x45, 0x00, 0x02,
-    0x03, 0xCE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0x9F, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0xE8, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A,
-    0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAA, 0x03, 0xAB, 0x03, 0xAC, 0x03, 0xAD,
-    0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCB, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE,
-    0x03, 0xD3, 0x03, 0xD4, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
-    0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
-    0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15,
-    0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x21,
-    0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x39,
-    0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x41,
-    0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B,
-    0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50, 0x1F, 0x51, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-    0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x61,
-    0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69,
-    0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x72,
-    0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB0, 0x1F, 0xB1, 0x1F, 0xB2,
-    0x1F, 0xB3, 0x1F, 0xB4, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, 0xB8, 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBC,
-    0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, 0xC4, 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-    0x1F, 0xCC, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6,
-    0x1F, 0xD7, 0x1F, 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, 0xE0,
-    0x1F, 0xE1, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE5, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, 0xE8, 0x1F, 0xE9,
-    0x1F, 0xEA, 0x1F, 0xEC, 0x1F, 0xED, 0x1F, 0xF2, 0x1F, 0xF3, 0x1F, 0xF4, 0x1F, 0xF6, 0x1F, 0xF7,
-    0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x06, 0x30, 0x00, 0xC0, 0x01, 0x86, 0x01, 0x8C,
-    0x01, 0x92, 0x01, 0x98, 0x01, 0x9E, 0x01, 0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB6, 0x01, 0xBC,
-    0x01, 0xC2, 0x01, 0xC8, 0x01, 0xCE, 0x01, 0xD4, 0x01, 0xDA, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC,
-    0x01, 0xF2, 0x01, 0xF8, 0x01, 0xFE, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1E,
-    0x02, 0x26, 0x02, 0x2C, 0x02, 0x32, 0x02, 0x38, 0x02, 0x3E, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54,
-    0x02, 0x5A, 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84,
-    0x02, 0x8A, 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC,
-    0x02, 0xF2, 0x02, 0xF8, 0x02, 0xFE, 0x03, 0x04, 0x03, 0x0A, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20,
-    0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x46, 0x03, 0x4E, 0x03, 0x54,
-    0x03, 0x5A, 0x03, 0x60, 0x03, 0x66, 0x03, 0x6C, 0x03, 0x72, 0x03, 0x78, 0x03, 0x7E, 0x03, 0x84,
-    0x03, 0x8A, 0x03, 0x90, 0x03, 0x96, 0x03, 0x9C, 0x03, 0xA2, 0x03, 0xA8, 0x03, 0xB0, 0x03, 0xB8,
-    0x03, 0xBE, 0x03, 0xC4, 0x03, 0xCC, 0x03, 0xD2, 0x03, 0xD8, 0x03, 0xDE, 0x03, 0xE4, 0x03, 0xEA,
-    0x03, 0xF2, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C, 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E,
-    0x04, 0x26, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52,
-    0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-    0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2,
-    0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA, 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2,
-    0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA, 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12,
-    0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A, 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42,
-    0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A, 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72,
-    0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A, 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2,
-    0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA, 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2,
-    0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC, 0x05, 0xF2, 0x05, 0xF8, 0x06, 0x00, 0x06, 0x06,
-    0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0x91, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0x97, 0x03, 0x41, 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41,
-    0x00, 0x02, 0x03, 0xA5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCA,
-    0x03, 0x01, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0xB7, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x08, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0xB1, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x00, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-    0x03, 0x43, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x08, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x43,
-    0x00, 0x02, 0x1F, 0x10, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x10,
-    0x03, 0x41, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x43, 0x00, 0x02,
-    0x1F, 0x18, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0x19, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x20,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x21, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x29, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x29,
-    0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x14, 0x00, 0x02,
-    0x1F, 0x30, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0x31, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB9, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x38,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x39, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x41, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x41,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x49, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x41,
-    0x00, 0x02, 0x03, 0xC5, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x51,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xC5, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x59, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14,
-    0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x61, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x41,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0xA9, 0x03, 0x43, 0x00, 0x02, 0x21, 0x26, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x69, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x40,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xBF,
-    0x03, 0x40, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xB3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x81, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x81,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xBC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x89, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x89,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x91, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x91,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xCC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x99,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xF3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xA1, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA1,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xFC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA9,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xB3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x71, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB6, 0x03, 0x45,
-    0x00, 0x02, 0x03, 0x91, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x75,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xC6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x95, 0x03, 0x40, 0x00, 0x02,
-    0x03, 0x97, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x06, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x43, 0x00, 0x03,
-    0x03, 0xC5, 0x03, 0x08, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x40, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7D, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xF6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x40,
-    0x00, 0x02, 0x21, 0x26, 0x03, 0x45, 0x00, 0x01, 0x00, 0xC0, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88,
-    0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xAD,
-    0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE, 0x03, 0xD3,
-    0x1F, 0x00, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08,
-    0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x12,
-    0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D,
-    0x1F, 0x20, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x3A,
-    0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x42, 0x1F, 0x43,
-    0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50,
-    0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x5B, 0x1F, 0x5D,
-    0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67,
-    0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F,
-    0x1F, 0x70, 0x1F, 0x72, 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-    0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-    0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
-    0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xBA, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-    0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, 0xDA,
-    0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE7, 0x1F, 0xEA, 0x1F, 0xED, 0x1F, 0xF2,
-    0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x04, 0xE0, 0x00, 0x85,
-    0x01, 0x10, 0x01, 0x16, 0x01, 0x1C, 0x01, 0x22, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40,
-    0x01, 0x48, 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80,
-    0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0,
-    0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE8, 0x01, 0xF0, 0x01, 0xF8, 0x02, 0x00,
-    0x02, 0x08, 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E,
-    0x02, 0x46, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E,
-    0x02, 0x86, 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE,
-    0x02, 0xC6, 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE,
-    0x03, 0x06, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24, 0x03, 0x2C, 0x03, 0x34, 0x03, 0x3C,
-    0x03, 0x42, 0x03, 0x48, 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x70,
-    0x03, 0x78, 0x03, 0x7E, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA6,
-    0x03, 0xAE, 0x03, 0xB4, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDC,
-    0x03, 0xE4, 0x03, 0xEA, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A, 0x04, 0x12,
-    0x04, 0x1A, 0x04, 0x20, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x48,
-    0x04, 0x50, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7E,
-    0x04, 0x86, 0x04, 0x8C, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB6,
-    0x04, 0xBE, 0x04, 0xC6, 0x04, 0xCC, 0x04, 0xD2, 0x04, 0xDA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCB,
-    0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x13, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x02, 0x21, 0x26, 0x03, 0x13, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xB3,
-    0x03, 0x43, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x81, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x81,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x88, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x88,
-    0x03, 0x41, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x09, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x43, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x91,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0x20, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xCC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x98,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x99, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x43,
-    0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0xB3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xF3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x21, 0x26, 0x03, 0x00, 0x00, 0x01, 0x00, 0x85, 0x03, 0x8F,
-    0x03, 0x90, 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06,
-    0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14,
-    0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24,
-    0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x30,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x3A, 0x1F, 0x3B,
-    0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x4A,
-    0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56,
-    0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x68,
-    0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x76, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-    0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-    0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
-    0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xD7, 0x1F, 0xE2,
-    0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xFA, 0x00, 0x01, 0x04, 0xC0, 0x00, 0x7B, 0x00, 0xFC,
-    0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36,
-    0x01, 0x3E, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76,
-    0x01, 0x7E, 0x01, 0x86, 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6,
-    0x01, 0xBE, 0x01, 0xC6, 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4,
-    0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34,
-    0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74,
-    0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4,
-    0x02, 0xBA, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xE8, 0x02, 0xF0,
-    0x02, 0xF8, 0x03, 0x00, 0x03, 0x08, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x30,
-    0x03, 0x38, 0x03, 0x40, 0x03, 0x48, 0x03, 0x50, 0x03, 0x58, 0x03, 0x60, 0x03, 0x68, 0x03, 0x70,
-    0x03, 0x78, 0x03, 0x80, 0x03, 0x88, 0x03, 0x90, 0x03, 0x98, 0x03, 0xA0, 0x03, 0xA8, 0x03, 0xB0,
-    0x03, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x03, 0xD0, 0x03, 0xD8, 0x03, 0xE0, 0x03, 0xE8, 0x03, 0xF0,
-    0x03, 0xF8, 0x04, 0x00, 0x04, 0x08, 0x04, 0x10, 0x04, 0x18, 0x04, 0x20, 0x04, 0x28, 0x04, 0x30,
-    0x04, 0x38, 0x04, 0x40, 0x04, 0x48, 0x04, 0x50, 0x04, 0x58, 0x04, 0x60, 0x04, 0x68, 0x04, 0x70,
-    0x04, 0x76, 0x04, 0x7E, 0x04, 0x86, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9C, 0x04, 0xA4, 0x04, 0xAC,
-    0x04, 0xB2, 0x04, 0xBA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x44,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x95, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x95, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0xBE, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02, 0x21, 0x26,
-    0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x40,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x02, 0x21, 0x26, 0x03, 0x40, 0x00, 0x01, 0x00, 0x7B, 0x03, 0x8F, 0x03, 0x90,
-    0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x0A, 0x1F, 0x0B,
-    0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B,
-    0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x2A, 0x1F, 0x2B,
-    0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36,
-    0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45,
-    0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-    0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x68, 0x1F, 0x6A,
-    0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x76, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xB7,
-    0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xE2, 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7,
-    0x1F, 0xFA, 0x00, 0x01, 0x03, 0x4E, 0x00, 0x54, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6,
-    0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46,
-    0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x86,
-    0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBE, 0x01, 0xC6,
-    0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE6, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFE, 0x02, 0x06,
-    0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E, 0x02, 0x46,
-    0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x86,
-    0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE, 0x02, 0xC6,
-    0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
-    0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E, 0x03, 0x36, 0x03, 0x3E, 0x03, 0x46,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x01, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x01, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x61, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x61, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x69, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x69, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x54, 0x03, 0x90, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C,
-    0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42,
-    0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A,
-    0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
-    0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
-    0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F,
-    0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x03, 0x3C,
-    0x00, 0x51, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-    0x00, 0xE0, 0x00, 0xE8, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x18,
-    0x01, 0x20, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50, 0x01, 0x58,
-    0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98,
-    0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xDA,
-    0x01, 0xE2, 0x01, 0xEA, 0x01, 0xF2, 0x01, 0xFA, 0x02, 0x02, 0x02, 0x0A, 0x02, 0x14, 0x02, 0x1C,
-    0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E,
-    0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x98, 0x02, 0xA0,
-    0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2,
-    0x02, 0xEA, 0x02, 0xF2, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24,
-    0x03, 0x2C, 0x03, 0x34, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x01,
-    0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x01,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
-    0x1F, 0x08, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0x08, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x1F, 0xBC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x13, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x60,
-    0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x60,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03,
-    0x1F, 0x68, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0x68, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x1F, 0xFC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x51, 0x03, 0x90, 0x1F, 0x02,
-    0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22,
-    0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x3A,
-    0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62,
-    0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83,
-    0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C,
-    0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-    0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E,
-    0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7,
-    0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-    0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01,
-    0x02, 0x30, 0x00, 0x35, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98,
-    0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD4, 0x00, 0xDC,
-    0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x20,
-    0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x42, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-    0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8,
-    0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC,
-    0x01, 0xF6, 0x02, 0x00, 0x02, 0x08, 0x02, 0x10, 0x02, 0x18, 0x02, 0x20, 0x02, 0x28, 0x00, 0x03,
-    0x1F, 0xBE, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0xBE, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-    0x1F, 0x00, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x00, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x21, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0x21, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x43, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-    0x1F, 0x60, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x60, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01,
-    0x00, 0x35, 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x80, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94,
-    0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
-    0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6,
-    0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-    0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0xE0,
-    0x00, 0x2D, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90,
-    0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4,
-    0x00, 0xDC, 0x00, 0xE6, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A,
-    0x01, 0x24, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60,
-    0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-    0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x00, 0x03, 0x1F, 0xBE,
-    0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3,
-    0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x2D,
-    0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
-    0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E,
-    0x1F, 0x8F, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-    0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB4, 0x1F, 0xC4, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0x7C, 0x00, 0x24,
-    0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86,
-    0x00, 0x8E, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC2, 0x00, 0xCA,
-    0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x0C,
-    0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x72, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x40,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0xCC, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0xCC, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x40,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-    0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x94, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66,
-    0x00, 0x6E, 0x00, 0x76, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAE,
-    0x00, 0xB6, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEE, 0x00, 0xF8,
-    0x01, 0x00, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x40,
-    0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80, 0x01, 0x8A,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x1F, 0xBC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03,
-    0x1F, 0xC3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43,
-    0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
-    0x1F, 0xFC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-    0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6C, 0x00, 0x20, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2, 0x00, 0xAA,
-    0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4,
-    0x00, 0xFE, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C,
-    0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x62, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x01,
-    0x00, 0x20, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x1E, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
-    0x01, 0x5A, 0x01, 0x64, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x01, 0x00, 0x1E, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-    0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
-    0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38,
-    0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-    0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8,
-    0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24,
-    0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74,
-    0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92,
-    0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC,
-    0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38,
-    0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-    0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x01,
-    0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-    0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C,
-    0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C,
-    0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82,
-    0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
-    0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xAE,
-    0x00, 0x0E, 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E,
-    0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82,
-    0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
-    0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E,
-    0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68,
-    0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84,
-    0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4,
-    0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E, 0x00, 0x22,
-    0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72,
-    0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A,
-    0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x28,
-    0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-    0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0C,
-    0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
-    0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E,
-    0x00, 0x28, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E,
-    0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x0C, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-    0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-    0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-    0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-    0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-    0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A,
-    0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02,
-    0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-    0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-    0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-    0x1F, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x36, 0x00, 0x16,
-    0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-    0x00, 0x82, 0x00, 0x8C, 0x00, 0x96, 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC8,
-    0x00, 0xD2, 0x00, 0xE4, 0x00, 0xF6, 0x01, 0x08, 0x01, 0x1A, 0x01, 0x2C, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0x94, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x4C, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0x4E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x50,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x52, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0x54, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x56, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x58, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0x5A, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5C, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0x5E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x60,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x62, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0x65, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x67, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x69, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x30, 0x70, 0x00, 0x02, 0x30, 0x99, 0x30, 0x71, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x30, 0x73, 0x00, 0x02, 0x30, 0x99, 0x30, 0x74, 0x00, 0x02, 0x30, 0x9A,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x76, 0x00, 0x02, 0x30, 0x99, 0x30, 0x77, 0x00, 0x02,
-    0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x79, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7A,
-    0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x7C, 0x00, 0x02, 0x30, 0x99,
-    0x30, 0x7D, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x16, 0x30, 0x46, 0x30, 0x4B, 0x30, 0x4D, 0x30, 0x4F, 0x30, 0x51, 0x30, 0x53,
-    0x30, 0x55, 0x30, 0x57, 0x30, 0x59, 0x30, 0x5B, 0x30, 0x5D, 0x30, 0x5F, 0x30, 0x61, 0x30, 0x64,
-    0x30, 0x66, 0x30, 0x68, 0x30, 0x6F, 0x30, 0x72, 0x30, 0x75, 0x30, 0x78, 0x30, 0x7B, 0x30, 0x9D,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xDE, 0x00, 0x1B, 0x00, 0x3C,
-    0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C,
-    0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA2, 0x00, 0xA8, 0x00, 0xAE, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC0, 0x00, 0xC6, 0x00, 0xCC,
-    0x00, 0xD2, 0x00, 0xD8, 0x00, 0x02, 0x30, 0x4B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4D, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x4F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x51, 0x30, 0x99, 0x00, 0x02, 0x30, 0x53,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0x55, 0x30, 0x99, 0x00, 0x02, 0x30, 0x57, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0x59, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5D, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x5F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x61, 0x30, 0x99, 0x00, 0x02, 0x30, 0x64,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0x66, 0x30, 0x99, 0x00, 0x02, 0x30, 0x68, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0x6F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x6F, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x72, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x72, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x75, 0x30, 0x99, 0x00, 0x02, 0x30, 0x75,
-    0x30, 0x9A, 0x00, 0x02, 0x30, 0x78, 0x30, 0x99, 0x00, 0x02, 0x30, 0x78, 0x30, 0x9A, 0x00, 0x02,
-    0x30, 0x7B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x7B, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x46, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x9D, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1B, 0x30, 0x4C, 0x30, 0x4E, 0x30, 0x50,
-    0x30, 0x52, 0x30, 0x54, 0x30, 0x56, 0x30, 0x58, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5E, 0x30, 0x60,
-    0x30, 0x62, 0x30, 0x65, 0x30, 0x67, 0x30, 0x69, 0x30, 0x70, 0x30, 0x71, 0x30, 0x73, 0x30, 0x74,
-    0x30, 0x76, 0x30, 0x77, 0x30, 0x79, 0x30, 0x7A, 0x30, 0x7C, 0x30, 0x7D, 0x30, 0x94, 0x30, 0x9E,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x0C,
-    0x00, 0x16, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xC0, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x04,
-    0x00, 0x0A, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x0C, 0xCB, 0x00, 0x03, 0x0C, 0xC2, 0x0C, 0xD5,
-    0x0C, 0xCA, 0x00, 0x02, 0x0C, 0xC2, 0x0C, 0xC7, 0x00, 0x02, 0x0C, 0xD5, 0x0C, 0xC8, 0x00, 0x02,
-    0x0C, 0xD6, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xCB, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x03,
-    0x0C, 0xBF, 0x0C, 0xC6, 0x0C, 0xCA, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x46,
-    0x00, 0x01, 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x02, 0x0C, 0xBF, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6,
-    0x0C, 0xD6, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xC2, 0x00, 0x02, 0x0C, 0xCA, 0x0C, 0xD5, 0x00, 0x01,
-    0x00, 0x05, 0x0C, 0xC0, 0x0C, 0xC7, 0x0C, 0xC8, 0x0C, 0xCA, 0x0C, 0xCB, 0x00, 0x01, 0x00, 0x10,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x0C, 0xC6, 0x0C, 0xC2, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x01,
-    0x0C, 0xCB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x66, 0x00, 0x1A,
-    0x00, 0x3A, 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80,
-    0x00, 0x8A, 0x00, 0x94, 0x00, 0x9E, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0,
-    0x00, 0xDA, 0x00, 0xEC, 0x00, 0xFE, 0x01, 0x10, 0x01, 0x22, 0x01, 0x34, 0x01, 0x3E, 0x01, 0x48,
-    0x01, 0x52, 0x01, 0x5C, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xAC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAE, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xB2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB4, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0xB6, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB8,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xBC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBE, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xC2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC5, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0xC7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC9,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD0, 0x00, 0x02, 0x30, 0x99,
-    0x30, 0xD1, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD3, 0x00, 0x02,
-    0x30, 0x99, 0x30, 0xD4, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD6,
-    0x00, 0x02, 0x30, 0x99, 0x30, 0xD7, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-    0x30, 0xD9, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDA, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x30, 0xDC, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDD, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xF7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF8, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xFA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xFE, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x1A, 0x30, 0xA6, 0x30, 0xAB, 0x30, 0xAD, 0x30, 0xAF, 0x30, 0xB1, 0x30, 0xB3,
-    0x30, 0xB5, 0x30, 0xB7, 0x30, 0xB9, 0x30, 0xBB, 0x30, 0xBD, 0x30, 0xBF, 0x30, 0xC1, 0x30, 0xC4,
-    0x30, 0xC6, 0x30, 0xC8, 0x30, 0xCF, 0x30, 0xD2, 0x30, 0xD5, 0x30, 0xD8, 0x30, 0xDB, 0x30, 0xEF,
-    0x30, 0xF0, 0x30, 0xF1, 0x30, 0xF2, 0x30, 0xFD, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-    0x00, 0x01, 0x00, 0xFE, 0x00, 0x1F, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
-    0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
-    0x00, 0xF2, 0x00, 0xF8, 0x00, 0x02, 0x30, 0xAB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAD, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xAF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB3,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xB5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB7, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0xB9, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBD, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xBF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC4,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xC6, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC8, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0xCF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xCF, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xD2, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD5,
-    0x30, 0x9A, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x9A, 0x00, 0x02,
-    0x30, 0xDB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xDB, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xA6, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xEF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF0, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF1,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xF2, 0x30, 0x99, 0x00, 0x02, 0x30, 0xFD, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x1F, 0x30, 0xAC, 0x30, 0xAE, 0x30, 0xB0, 0x30, 0xB2, 0x30, 0xB4, 0x30, 0xB6, 0x30, 0xB8,
-    0x30, 0xBA, 0x30, 0xBC, 0x30, 0xBE, 0x30, 0xC0, 0x30, 0xC2, 0x30, 0xC5, 0x30, 0xC7, 0x30, 0xC9,
-    0x30, 0xD0, 0x30, 0xD1, 0x30, 0xD3, 0x30, 0xD4, 0x30, 0xD6, 0x30, 0xD7, 0x30, 0xD9, 0x30, 0xDA,
-    0x30, 0xDC, 0x30, 0xDD, 0x30, 0xF4, 0x30, 0xF7, 0x30, 0xF8, 0x30, 0xF9, 0x30, 0xFA, 0x30, 0xFE,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x1E, 0x9A, 0x00, 0x89, 0x01, 0x18,
-    0x02, 0x72, 0x02, 0x8C, 0x02, 0xE6, 0x03, 0x18, 0x04, 0x3E, 0x04, 0x48, 0x04, 0x8A, 0x04, 0xC4,
-    0x05, 0x6A, 0x05, 0x74, 0x05, 0xA6, 0x05, 0xF4, 0x06, 0x16, 0x06, 0x70, 0x08, 0x56, 0x08, 0x70,
-    0x08, 0xCE, 0x09, 0x42, 0x09, 0x7C, 0x0B, 0x14, 0x0B, 0x26, 0x0B, 0x68, 0x0B, 0x7A, 0x0B, 0xD4,
-    0x0C, 0x0E, 0x0D, 0x68, 0x0D, 0x82, 0x0D, 0xDC, 0x0E, 0x0E, 0x0F, 0x34, 0x0F, 0x3E, 0x0F, 0x80,
-    0x0F, 0xC2, 0x10, 0x60, 0x10, 0x72, 0x10, 0xA4, 0x10, 0xF2, 0x11, 0x14, 0x11, 0x6E, 0x13, 0x54,
-    0x13, 0x6E, 0x13, 0xCC, 0x14, 0x40, 0x14, 0x82, 0x16, 0x1A, 0x16, 0x2C, 0x16, 0x76, 0x16, 0x88,
-    0x16, 0xEA, 0x17, 0x24, 0x17, 0x5E, 0x17, 0x68, 0x17, 0x7A, 0x17, 0x94, 0x17, 0xA6, 0x17, 0xE0,
-    0x17, 0xF2, 0x17, 0xFC, 0x18, 0x06, 0x18, 0x40, 0x18, 0x6A, 0x18, 0x74, 0x18, 0x86, 0x18, 0x90,
-    0x18, 0x9A, 0x18, 0xCC, 0x19, 0x06, 0x19, 0x10, 0x19, 0x22, 0x19, 0x3C, 0x19, 0x4E, 0x19, 0x88,
-    0x19, 0x9A, 0x19, 0xA4, 0x19, 0xAE, 0x19, 0xE8, 0x1A, 0x12, 0x1A, 0x1C, 0x1A, 0x2E, 0x1A, 0x38,
-    0x1A, 0x42, 0x1A, 0x74, 0x1A, 0xAE, 0x1A, 0xE8, 0x1A, 0xF2, 0x1A, 0xFC, 0x1B, 0x1E, 0x1B, 0x40,
-    0x1B, 0x4A, 0x1B, 0x54, 0x1B, 0x7E, 0x1B, 0xA8, 0x1B, 0xB2, 0x1B, 0xBC, 0x1B, 0xC6, 0x1B, 0xD0,
-    0x1B, 0xEA, 0x1C, 0x04, 0x1C, 0x0E, 0x1C, 0x18, 0x1C, 0x22, 0x1C, 0x5C, 0x1C, 0x96, 0x1C, 0xD0,
-    0x1D, 0x0A, 0x1D, 0x14, 0x1D, 0x1E, 0x1D, 0x28, 0x1D, 0x32, 0x1D, 0x3C, 0x1D, 0x46, 0x1D, 0x50,
-    0x1D, 0x5A, 0x1D, 0x64, 0x1D, 0x6E, 0x1D, 0x78, 0x1D, 0x82, 0x1D, 0x8C, 0x1D, 0x96, 0x1D, 0xA0,
-    0x1D, 0xAA, 0x1D, 0xB4, 0x1D, 0xBE, 0x1D, 0xD0, 0x1D, 0xE2, 0x1D, 0xEC, 0x1D, 0xF6, 0x1E, 0x08,
-    0x1E, 0x1A, 0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0x38, 0x1E, 0x42, 0x1E, 0x4C, 0x1E, 0x56, 0x1E, 0x88,
-    0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4,
-    0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0,
-    0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26,
-    0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xC0,
-    0x00, 0x02, 0x03, 0x00, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x00, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x03, 0x1E, 0xA8, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x23, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x41, 0x00, 0xC2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xC3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x00,
-    0x00, 0x02, 0x03, 0x04, 0x1E, 0xB0, 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x40, 0x1E, 0xAE, 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x02, 0x00, 0x02,
-    0x03, 0x06, 0x01, 0xE0, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x26, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0xDE, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xC4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA2,
-    0x00, 0x02, 0x03, 0x09, 0x01, 0xFA, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x03,
-    0x03, 0x0A, 0x03, 0x41, 0x00, 0xC5, 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCD, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x00, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x02, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAC, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA0, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x00, 0x00, 0x02, 0x03, 0x25, 0x01, 0x04, 0x00, 0x02, 0x03, 0x28, 0x00, 0xC0,
-    0x00, 0x02, 0x03, 0x40, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x1E, 0x02, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x04, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x06,
-    0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x01, 0x01, 0x08, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0A,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x0C, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27,
-    0x03, 0x01, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41, 0x00, 0xC7, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x08, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06,
-    0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0A, 0x00, 0x02,
-    0x03, 0x07, 0x01, 0x0E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0C, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x10,
-    0x00, 0x02, 0x03, 0x27, 0x1E, 0x12, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0E, 0x00, 0x02, 0x03, 0x31,
-    0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70,
-    0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
-    0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0,
-    0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14,
-    0x01, 0x1A, 0x01, 0x20, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-    0x1E, 0xC4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-    0x1E, 0xC6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-    0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xCA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBC,
-    0x00, 0x02, 0x03, 0x03, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x03,
-    0x03, 0x04, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x03,
-    0x03, 0x04, 0x03, 0x41, 0x01, 0x12, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x27, 0x01, 0x14, 0x00, 0x02, 0x03, 0x06, 0x01, 0x16, 0x00, 0x02, 0x03, 0x07, 0x00, 0xCB,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xBA, 0x00, 0x02, 0x03, 0x09, 0x01, 0x1A, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x04, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x06, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC6, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xB8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x27,
-    0x03, 0x06, 0x02, 0x28, 0x00, 0x02, 0x03, 0x27, 0x01, 0x18, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x18,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1A, 0x00, 0x02, 0x03, 0x30, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x40,
-    0x00, 0xC9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1E, 0x00, 0x02, 0x03, 0x07,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x01, 0xF4, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x20,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x1E, 0x00, 0x02, 0x03, 0x06, 0x01, 0x20, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0xE6, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x22, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF4, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x01, 0x24, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x22, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x26,
-    0x00, 0x02, 0x03, 0x08, 0x02, 0x1E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x24, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x28, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2A, 0x00, 0x02, 0x03, 0x2E, 0x00, 0x14, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C,
-    0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E,
-    0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xCC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xCD, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xCE, 0x00, 0x02, 0x03, 0x02, 0x01, 0x28, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2A,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x2C, 0x00, 0x02, 0x03, 0x06, 0x01, 0x30, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-    0x00, 0xCF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC8, 0x00, 0x02, 0x03, 0x09, 0x01, 0xCF, 0x00, 0x02,
-    0x03, 0x0C, 0x02, 0x08, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0A, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCA,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x2E, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2C, 0x00, 0x02, 0x03, 0x30,
-    0x00, 0xCC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2E, 0x00, 0x02,
-    0x03, 0x44, 0x00, 0x01, 0x00, 0x04, 0x01, 0x34, 0x00, 0x02, 0x03, 0x02, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02,
-    0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-    0x00, 0x48, 0x01, 0x39, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23,
-    0x01, 0x3D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x36,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x3B, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3C, 0x00, 0x02, 0x03, 0x2D,
-    0x1E, 0x3A, 0x00, 0x02, 0x03, 0x31, 0x01, 0x39, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x40, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x42, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-    0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF8, 0x00, 0x02, 0x03, 0x00, 0x01, 0x43, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xD1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x44, 0x00, 0x02, 0x03, 0x07, 0x01, 0x47,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x46, 0x00, 0x02, 0x03, 0x23, 0x01, 0x45, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x4A, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x48, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF8, 0x00, 0x02,
-    0x03, 0x40, 0x01, 0x43, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6,
-    0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2,
-    0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E,
-    0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62,
-    0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0,
-    0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8,
-    0x01, 0xE0, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x00,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD2,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD6,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD8,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD0,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xD4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4C, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x41, 0x00, 0xD5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x00, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x28, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x41, 0x01, 0x4C, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4E, 0x00, 0x02, 0x03, 0x06, 0x02, 0x30,
-    0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x2E, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2A, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x04, 0x00, 0xD6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x09,
-    0x03, 0x1B, 0x1E, 0xCE, 0x00, 0x02, 0x03, 0x09, 0x01, 0x50, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD1,
-    0x00, 0x02, 0x03, 0x0C, 0x02, 0x0C, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0E, 0x00, 0x02, 0x03, 0x11,
-    0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01,
-    0x1E, 0xE0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09,
-    0x1E, 0xE2, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD8,
-    0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCC,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEA, 0x00, 0x02,
-    0x03, 0x28, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03,
-    0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x56, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x01, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x58,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x58, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x10, 0x00, 0x02, 0x03, 0x0F,
-    0x02, 0x12, 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5A,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x56, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5E, 0x00, 0x02, 0x03, 0x31,
-    0x01, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66,
-    0x00, 0x6E, 0x1E, 0x64, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0x5C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x60,
-    0x00, 0x02, 0x03, 0x07, 0x1E, 0x66, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x60, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x62, 0x00, 0x02, 0x03, 0x23,
-    0x02, 0x18, 0x00, 0x02, 0x03, 0x26, 0x01, 0x5E, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x64, 0x00, 0x03,
-    0x03, 0x41, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0x6A, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0x64, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6C, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1A, 0x00, 0x02,
-    0x03, 0x26, 0x01, 0x62, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x70, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6E,
-    0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
-    0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0,
-    0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE,
-    0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22,
-    0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E,
-    0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92,
-    0x1E, 0xEA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xDB, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x1B, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x01, 0x68, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0x7A, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6C,
-    0x00, 0x02, 0x03, 0x06, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x41, 0x00, 0xDC, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x09,
-    0x03, 0x1B, 0x1E, 0xE6, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6E, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x70,
-    0x00, 0x02, 0x03, 0x0B, 0x01, 0xD3, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x14, 0x00, 0x02, 0x03, 0x0F,
-    0x02, 0x16, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE8,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xEC,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEA,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xAF,
-    0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE4, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x72, 0x00, 0x02, 0x03, 0x24, 0x01, 0x72, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x76,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x74, 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
-    0x00, 0xDA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x1E, 0x7C, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7E, 0x00, 0x02, 0x03, 0x23, 0x00, 0x08,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x1E, 0x80, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x01, 0x01, 0x74, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0x86, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x84, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x88,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x80, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8A, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8C, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xDD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x76, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF8, 0x00, 0x02,
-    0x03, 0x03, 0x02, 0x32, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8E, 0x00, 0x02, 0x03, 0x07, 0x01, 0x78,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xF6, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF4, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x00, 0xDD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x79, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0x90, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7D,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x92, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x94, 0x00, 0x02, 0x03, 0x31,
-    0x01, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-    0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC,
-    0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14,
-    0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48,
-    0x01, 0x4E, 0x01, 0x54, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-    0x1E, 0xAB, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-    0x1E, 0xAD, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-    0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xE2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xE3,
-    0x00, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x00, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x03, 0x1E, 0xB3, 0x00, 0x03, 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x23, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x41, 0x01, 0x03, 0x00, 0x02, 0x03, 0x06, 0x01, 0xE1, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04,
-    0x02, 0x27, 0x00, 0x02, 0x03, 0x07, 0x01, 0xDF, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xE4,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xA3, 0x00, 0x02, 0x03, 0x09, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A,
-    0x03, 0x01, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x41, 0x00, 0xE5, 0x00, 0x02, 0x03, 0x0A,
-    0x01, 0xCE, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x01, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x03, 0x00, 0x02,
-    0x03, 0x11, 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x23,
-    0x03, 0x06, 0x1E, 0xA1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x01, 0x00, 0x02, 0x03, 0x25, 0x01, 0x05,
-    0x00, 0x02, 0x03, 0x28, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x03, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x05,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x07, 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54,
-    0x1E, 0x09, 0x00, 0x03, 0x03, 0x01, 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x01, 0x01, 0x09,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x0C,
-    0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x01, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41,
-    0x00, 0xE7, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x07,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x1E, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0D,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x11, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x13, 0x00, 0x02, 0x03, 0x2D,
-    0x1E, 0x0F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58,
-    0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94,
-    0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
-    0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02,
-    0x01, 0x08, 0x01, 0x0E, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xE9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBF,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC3,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC1,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xEA,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0xBD, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x00, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x40, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x13, 0x00, 0x02, 0x03, 0x04,
-    0x1E, 0x1D, 0x00, 0x03, 0x03, 0x06, 0x03, 0x27, 0x01, 0x15, 0x00, 0x02, 0x03, 0x06, 0x01, 0x17,
-    0x00, 0x02, 0x03, 0x07, 0x00, 0xEB, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBB, 0x00, 0x02, 0x03, 0x09,
-    0x01, 0x1B, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x05, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x07, 0x00, 0x02,
-    0x03, 0x11, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB9, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x1D, 0x00, 0x03, 0x03, 0x27, 0x03, 0x06, 0x02, 0x29, 0x00, 0x02, 0x03, 0x27, 0x01, 0x19,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x19, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1B, 0x00, 0x02, 0x03, 0x30,
-    0x00, 0xE8, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x1F, 0x00, 0x02, 0x03, 0x07, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1D,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0x21, 0x00, 0x02, 0x03, 0x04, 0x01, 0x1F, 0x00, 0x02, 0x03, 0x06,
-    0x01, 0x21, 0x00, 0x02, 0x03, 0x07, 0x01, 0xE7, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x23, 0x00, 0x02,
-    0x03, 0x27, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0x25, 0x00, 0x02, 0x03, 0x02,
-    0x1E, 0x23, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x27, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1F, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x25, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x29, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2B,
-    0x00, 0x02, 0x03, 0x2E, 0x1E, 0x96, 0x00, 0x02, 0x03, 0x31, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92,
-    0x00, 0x98, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xED, 0x00, 0x02, 0x03, 0x01, 0x00, 0xEE,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0x29, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2B, 0x00, 0x02, 0x03, 0x04,
-    0x01, 0x2D, 0x00, 0x02, 0x03, 0x06, 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2F,
-    0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xEF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC9, 0x00, 0x02,
-    0x03, 0x09, 0x01, 0xD0, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x09, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0B,
-    0x00, 0x02, 0x03, 0x11, 0x1E, 0xCB, 0x00, 0x02, 0x03, 0x23, 0x01, 0x2F, 0x00, 0x02, 0x03, 0x28,
-    0x1E, 0x2D, 0x00, 0x02, 0x03, 0x30, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xED, 0x00, 0x02,
-    0x03, 0x41, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0x35,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0xF0, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE9,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x33, 0x00, 0x02, 0x03, 0x23, 0x01, 0x37, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x35, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-    0x01, 0x3A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3E,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x37, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0x3C, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3D, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3B,
-    0x00, 0x02, 0x03, 0x31, 0x01, 0x3A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x41, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x43, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-    0x00, 0x4E, 0x00, 0x54, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x00, 0x01, 0x44, 0x00, 0x02, 0x03, 0x01,
-    0x00, 0xF1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x45, 0x00, 0x02, 0x03, 0x07, 0x01, 0x48, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x47, 0x00, 0x02, 0x03, 0x23, 0x01, 0x46, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4B,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x49, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x40,
-    0x01, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE,
-    0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA,
-    0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34,
-    0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68,
-    0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6,
-    0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0,
-    0x1E, 0xDD, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD3, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x41, 0x00, 0xF4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x01, 0x02, 0x2D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x08, 0x1E, 0xE1, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x41, 0x00, 0xF5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00,
-    0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xED, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28,
-    0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41,
-    0x01, 0x4D, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4F, 0x00, 0x02, 0x03, 0x06, 0x02, 0x31, 0x00, 0x03,
-    0x03, 0x07, 0x03, 0x04, 0x02, 0x2F, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2B, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x04, 0x00, 0xF6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B,
-    0x1E, 0xCF, 0x00, 0x02, 0x03, 0x09, 0x01, 0x51, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD2, 0x00, 0x02,
-    0x03, 0x0C, 0x02, 0x0D, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0F, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDD,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE1,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE3,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD9, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCD, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0xED, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEB, 0x00, 0x02, 0x03, 0x28,
-    0x1E, 0xDD, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
-    0x00, 0x0E, 0x00, 0x14, 0x1E, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x57, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x55, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x55,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x59, 0x00, 0x02,
-    0x03, 0x07, 0x01, 0x59, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x11, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x13,
-    0x00, 0x02, 0x03, 0x11, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5B, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0x57, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5F, 0x00, 0x02, 0x03, 0x31, 0x01, 0x55,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38,
-    0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E,
-    0x1E, 0x65, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5D,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0x69, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x61, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x67, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x61, 0x00, 0x02, 0x03, 0x0C,
-    0x1E, 0x69, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x63, 0x00, 0x02, 0x03, 0x23, 0x02, 0x19,
-    0x00, 0x02, 0x03, 0x26, 0x01, 0x5F, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x41,
-    0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x6B, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x97, 0x00, 0x02, 0x03, 0x08, 0x01, 0x65, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6D, 0x00, 0x02,
-    0x03, 0x23, 0x02, 0x1B, 0x00, 0x02, 0x03, 0x26, 0x01, 0x63, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x71,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-    0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C,
-    0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A,
-    0x01, 0x50, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E,
-    0x01, 0x84, 0x01, 0x8C, 0x01, 0x92, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF9,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xFB, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01,
-    0x1E, 0xEF, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41,
-    0x01, 0x69, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7B, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6B,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x6D, 0x00, 0x02, 0x03, 0x06, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x04, 0x01, 0xDA, 0x00, 0x03, 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xFC, 0x00, 0x02, 0x03, 0x08,
-    0x1E, 0xED, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xE7, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6F,
-    0x00, 0x02, 0x03, 0x0A, 0x01, 0x71, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD4, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x15, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x17, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEB, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x41, 0x01, 0xB0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x23,
-    0x03, 0x1B, 0x1E, 0xE5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x73, 0x00, 0x02, 0x03, 0x24, 0x01, 0x73,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x77, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x75, 0x00, 0x02, 0x03, 0x30,
-    0x1E, 0xEB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD8, 0x00, 0x02,
-    0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x7D, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7F,
-    0x00, 0x02, 0x03, 0x23, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x83,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0x75, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x87, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x85, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x98, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0x89, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8B, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8D, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x77, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF9, 0x00, 0x02,
-    0x03, 0x03, 0x02, 0x33, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8F, 0x00, 0x02, 0x03, 0x07, 0x00, 0xFF,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xF7, 0x00, 0x02, 0x03, 0x09, 0x1E, 0x99, 0x00, 0x02, 0x03, 0x0A,
-    0x1E, 0xF5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x40, 0x00, 0xFD, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x91, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7C,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x7E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x93, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x95, 0x00, 0x02, 0x03, 0x31, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA6, 0x00, 0x02,
-    0x03, 0x00, 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA8,
-    0x00, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xDE, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xE2, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC0,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xC2, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2E,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDC,
-    0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD2,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xD4, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x02, 0x03, 0x04,
-    0x1E, 0x4E, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE8, 0x00, 0x02,
-    0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-    0x01, 0xDB, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x02,
-    0x03, 0x04, 0x01, 0xD9, 0x00, 0x02, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD7,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xAB, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x04, 0x01, 0xDF, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFB,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xFB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x01, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFD,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0x09, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xC5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC7,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0xDB, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xD7, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD9,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4D, 0x00, 0x02,
-    0x03, 0x01, 0x02, 0x2D, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE1,
-    0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2B,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xFF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD8,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x02, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x02, 0x03, 0x0C,
-    0x01, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB0, 0x00, 0x02,
-    0x03, 0x00, 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB2,
-    0x00, 0x02, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xB5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB7,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x09,
-    0x00, 0x02, 0x03, 0x27, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x14,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0x16, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1E, 0x15, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02,
-    0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x27, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x52,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0x52, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x01, 0x01, 0xED,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x64, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x65,
-    0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x66, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x67, 0x00, 0x02, 0x03, 0x07, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14,
-    0x1E, 0x78, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xEF, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x7A, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7B, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x9B, 0x00, 0x02, 0x03, 0x07, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x00,
-    0x1E, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x02,
-    0x03, 0x09, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xE1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEA,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xEC, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x09,
-    0x1E, 0xF1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEE, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04,
-    0x01, 0xEC, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xED, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x01, 0x00, 0x04, 0x01, 0xE0, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE1,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x02, 0x30, 0x00, 0x02,
-    0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x02, 0x31, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04,
-    0x01, 0xEF, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x38, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x39, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5C,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5D, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02,
-    0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x69, 0x00, 0x02, 0x03, 0x07, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAC, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x06, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAD,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC6,
-    0x00, 0x02, 0x03, 0x02, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x02,
-    0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0xDF, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEC,
-    0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06,
-    0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02,
-    0x03, 0x01, 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36,
-    0x00, 0x02, 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x89, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
-    0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D,
-    0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56,
-    0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64,
-    0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C,
-    0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75,
-    0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC2, 0x00, 0xC4, 0x00, 0xC5,
-    0x00, 0xC6, 0x00, 0xC7, 0x00, 0xCA, 0x00, 0xCF, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5,
-    0x00, 0xD6, 0x00, 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xE4, 0x00, 0xE5,
-    0x00, 0xE6, 0x00, 0xE7, 0x00, 0xEA, 0x00, 0xEF, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5,
-    0x00, 0xF6, 0x00, 0xF8, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFC, 0x01, 0x02, 0x01, 0x03, 0x01, 0x06,
-    0x01, 0x07, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x5A,
-    0x01, 0x5B, 0x01, 0x60, 0x01, 0x61, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x7F,
-    0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xB7, 0x01, 0xEA, 0x01, 0xEB, 0x02, 0x26,
-    0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x92, 0x1E, 0x36, 0x1E, 0x37,
-    0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0xA0, 0x1E, 0xA1,
-    0x1E, 0xB8, 0x1E, 0xB9, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xE4, 0x1E, 0xE5,
-    0x1E, 0xE6, 0x1E, 0xE7, 0x21, 0x2A, 0x21, 0x2B, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x14,
-    0x13, 0x88, 0x1A, 0x9E, 0x1E, 0x3C, 0x21, 0xAE, 0x22, 0x6C, 0x22, 0xFA, 0x00, 0x01, 0x0F, 0x8E,
-    0x01, 0xF1, 0x03, 0xE8, 0x03, 0xEE, 0x03, 0xF4, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C,
-    0x04, 0x12, 0x04, 0x18, 0x04, 0x1E, 0x04, 0x24, 0x04, 0x2A, 0x04, 0x30, 0x04, 0x36, 0x04, 0x3C,
-    0x04, 0x42, 0x04, 0x48, 0x04, 0x4E, 0x04, 0x54, 0x04, 0x5A, 0x04, 0x60, 0x04, 0x66, 0x04, 0x6C,
-    0x04, 0x72, 0x04, 0x78, 0x04, 0x7E, 0x04, 0x84, 0x04, 0x8A, 0x04, 0x90, 0x04, 0x96, 0x04, 0x9C,
-    0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA, 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCC,
-    0x04, 0xD2, 0x04, 0xD8, 0x04, 0xDE, 0x04, 0xE4, 0x04, 0xEA, 0x04, 0xF0, 0x04, 0xF6, 0x04, 0xFC,
-    0x05, 0x02, 0x05, 0x08, 0x05, 0x0E, 0x05, 0x14, 0x05, 0x1A, 0x05, 0x20, 0x05, 0x26, 0x05, 0x2C,
-    0x05, 0x32, 0x05, 0x38, 0x05, 0x3E, 0x05, 0x44, 0x05, 0x4A, 0x05, 0x50, 0x05, 0x56, 0x05, 0x5C,
-    0x05, 0x62, 0x05, 0x68, 0x05, 0x6E, 0x05, 0x74, 0x05, 0x7A, 0x05, 0x80, 0x05, 0x86, 0x05, 0x8C,
-    0x05, 0x92, 0x05, 0x98, 0x05, 0x9E, 0x05, 0xA4, 0x05, 0xAA, 0x05, 0xB0, 0x05, 0xB6, 0x05, 0xBC,
-    0x05, 0xC2, 0x05, 0xC8, 0x05, 0xCE, 0x05, 0xD4, 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC,
-    0x05, 0xF2, 0x05, 0xF8, 0x05, 0xFE, 0x06, 0x04, 0x06, 0x0A, 0x06, 0x10, 0x06, 0x16, 0x06, 0x1C,
-    0x06, 0x22, 0x06, 0x28, 0x06, 0x2E, 0x06, 0x34, 0x06, 0x3A, 0x06, 0x40, 0x06, 0x46, 0x06, 0x4C,
-    0x06, 0x52, 0x06, 0x58, 0x06, 0x5E, 0x06, 0x64, 0x06, 0x6A, 0x06, 0x70, 0x06, 0x76, 0x06, 0x7C,
-    0x06, 0x82, 0x06, 0x88, 0x06, 0x8E, 0x06, 0x94, 0x06, 0x9A, 0x06, 0xA0, 0x06, 0xA6, 0x06, 0xAC,
-    0x06, 0xB2, 0x06, 0xB8, 0x06, 0xBE, 0x06, 0xC4, 0x06, 0xCA, 0x06, 0xD0, 0x06, 0xD6, 0x06, 0xDC,
-    0x06, 0xE2, 0x06, 0xE8, 0x06, 0xEE, 0x06, 0xF4, 0x06, 0xFA, 0x07, 0x00, 0x07, 0x06, 0x07, 0x0C,
-    0x07, 0x12, 0x07, 0x18, 0x07, 0x1E, 0x07, 0x24, 0x07, 0x2A, 0x07, 0x30, 0x07, 0x36, 0x07, 0x3C,
-    0x07, 0x42, 0x07, 0x48, 0x07, 0x4E, 0x07, 0x54, 0x07, 0x5A, 0x07, 0x60, 0x07, 0x66, 0x07, 0x6C,
-    0x07, 0x72, 0x07, 0x78, 0x07, 0x7E, 0x07, 0x84, 0x07, 0x8A, 0x07, 0x90, 0x07, 0x96, 0x07, 0x9C,
-    0x07, 0xA2, 0x07, 0xA8, 0x07, 0xAE, 0x07, 0xB4, 0x07, 0xBA, 0x07, 0xC0, 0x07, 0xC6, 0x07, 0xCC,
-    0x07, 0xD2, 0x07, 0xD8, 0x07, 0xDE, 0x07, 0xE4, 0x07, 0xEA, 0x07, 0xF0, 0x07, 0xF6, 0x07, 0xFC,
-    0x08, 0x02, 0x08, 0x08, 0x08, 0x0E, 0x08, 0x14, 0x08, 0x1A, 0x08, 0x20, 0x08, 0x26, 0x08, 0x2C,
-    0x08, 0x32, 0x08, 0x38, 0x08, 0x3E, 0x08, 0x44, 0x08, 0x4A, 0x08, 0x50, 0x08, 0x56, 0x08, 0x5C,
-    0x08, 0x62, 0x08, 0x68, 0x08, 0x6E, 0x08, 0x74, 0x08, 0x7A, 0x08, 0x80, 0x08, 0x86, 0x08, 0x8C,
-    0x08, 0x92, 0x08, 0x98, 0x08, 0x9E, 0x08, 0xA4, 0x08, 0xAA, 0x08, 0xB0, 0x08, 0xB6, 0x08, 0xBC,
-    0x08, 0xC2, 0x08, 0xC8, 0x08, 0xCE, 0x08, 0xD4, 0x08, 0xDA, 0x08, 0xE0, 0x08, 0xE6, 0x08, 0xEC,
-    0x08, 0xF2, 0x08, 0xF8, 0x08, 0xFE, 0x09, 0x04, 0x09, 0x0A, 0x09, 0x10, 0x09, 0x16, 0x09, 0x1C,
-    0x09, 0x22, 0x09, 0x28, 0x09, 0x2E, 0x09, 0x34, 0x09, 0x3A, 0x09, 0x40, 0x09, 0x46, 0x09, 0x4C,
-    0x09, 0x52, 0x09, 0x58, 0x09, 0x5E, 0x09, 0x64, 0x09, 0x6A, 0x09, 0x70, 0x09, 0x76, 0x09, 0x7C,
-    0x09, 0x82, 0x09, 0x88, 0x09, 0x8E, 0x09, 0x94, 0x09, 0x9A, 0x09, 0xA0, 0x09, 0xA6, 0x09, 0xAC,
-    0x09, 0xB2, 0x09, 0xB8, 0x09, 0xBE, 0x09, 0xC4, 0x09, 0xCA, 0x09, 0xD0, 0x09, 0xD6, 0x09, 0xDC,
-    0x09, 0xE2, 0x09, 0xE8, 0x09, 0xEE, 0x09, 0xF4, 0x09, 0xFA, 0x0A, 0x00, 0x0A, 0x06, 0x0A, 0x0C,
-    0x0A, 0x12, 0x0A, 0x18, 0x0A, 0x1E, 0x0A, 0x24, 0x0A, 0x2A, 0x0A, 0x30, 0x0A, 0x36, 0x0A, 0x3C,
-    0x0A, 0x42, 0x0A, 0x48, 0x0A, 0x4E, 0x0A, 0x54, 0x0A, 0x5A, 0x0A, 0x60, 0x0A, 0x66, 0x0A, 0x6C,
-    0x0A, 0x72, 0x0A, 0x78, 0x0A, 0x7E, 0x0A, 0x84, 0x0A, 0x8A, 0x0A, 0x90, 0x0A, 0x96, 0x0A, 0x9C,
-    0x0A, 0xA2, 0x0A, 0xA8, 0x0A, 0xAE, 0x0A, 0xB4, 0x0A, 0xBA, 0x0A, 0xC0, 0x0A, 0xC6, 0x0A, 0xCC,
-    0x0A, 0xD2, 0x0A, 0xD8, 0x0A, 0xDE, 0x0A, 0xE4, 0x0A, 0xEA, 0x0A, 0xF0, 0x0A, 0xF6, 0x0A, 0xFC,
-    0x0B, 0x02, 0x0B, 0x08, 0x0B, 0x0E, 0x0B, 0x14, 0x0B, 0x1A, 0x0B, 0x20, 0x0B, 0x26, 0x0B, 0x2C,
-    0x0B, 0x32, 0x0B, 0x38, 0x0B, 0x3E, 0x0B, 0x44, 0x0B, 0x4A, 0x0B, 0x50, 0x0B, 0x56, 0x0B, 0x5C,
-    0x0B, 0x62, 0x0B, 0x68, 0x0B, 0x6E, 0x0B, 0x74, 0x0B, 0x7A, 0x0B, 0x80, 0x0B, 0x86, 0x0B, 0x8C,
-    0x0B, 0x92, 0x0B, 0x98, 0x0B, 0x9E, 0x0B, 0xA4, 0x0B, 0xAA, 0x0B, 0xB0, 0x0B, 0xB6, 0x0B, 0xBC,
-    0x0B, 0xC2, 0x0B, 0xC8, 0x0B, 0xCE, 0x0B, 0xD4, 0x0B, 0xDA, 0x0B, 0xE0, 0x0B, 0xE6, 0x0B, 0xEC,
-    0x0B, 0xF2, 0x0B, 0xF8, 0x0B, 0xFE, 0x0C, 0x04, 0x0C, 0x0A, 0x0C, 0x10, 0x0C, 0x16, 0x0C, 0x1C,
-    0x0C, 0x22, 0x0C, 0x28, 0x0C, 0x2E, 0x0C, 0x34, 0x0C, 0x3A, 0x0C, 0x40, 0x0C, 0x46, 0x0C, 0x4C,
-    0x0C, 0x52, 0x0C, 0x58, 0x0C, 0x5E, 0x0C, 0x64, 0x0C, 0x6A, 0x0C, 0x70, 0x0C, 0x76, 0x0C, 0x7C,
-    0x0C, 0x82, 0x0C, 0x88, 0x0C, 0x8E, 0x0C, 0x94, 0x0C, 0x9A, 0x0C, 0xA0, 0x0C, 0xA6, 0x0C, 0xAC,
-    0x0C, 0xB2, 0x0C, 0xB8, 0x0C, 0xBE, 0x0C, 0xC4, 0x0C, 0xCA, 0x0C, 0xD0, 0x0C, 0xD6, 0x0C, 0xDC,
-    0x0C, 0xE2, 0x0C, 0xE8, 0x0C, 0xEE, 0x0C, 0xF4, 0x0C, 0xFA, 0x0D, 0x00, 0x0D, 0x06, 0x0D, 0x0C,
-    0x0D, 0x12, 0x0D, 0x18, 0x0D, 0x1E, 0x0D, 0x24, 0x0D, 0x2A, 0x0D, 0x30, 0x0D, 0x36, 0x0D, 0x3C,
-    0x0D, 0x42, 0x0D, 0x48, 0x0D, 0x4E, 0x0D, 0x54, 0x0D, 0x5A, 0x0D, 0x60, 0x0D, 0x66, 0x0D, 0x6C,
-    0x0D, 0x72, 0x0D, 0x78, 0x0D, 0x7E, 0x0D, 0x84, 0x0D, 0x8A, 0x0D, 0x90, 0x0D, 0x96, 0x0D, 0x9C,
-    0x0D, 0xA2, 0x0D, 0xA8, 0x0D, 0xAE, 0x0D, 0xB4, 0x0D, 0xBA, 0x0D, 0xC0, 0x0D, 0xC6, 0x0D, 0xCC,
-    0x0D, 0xD2, 0x0D, 0xD8, 0x0D, 0xDE, 0x0D, 0xE4, 0x0D, 0xEA, 0x0D, 0xF0, 0x0D, 0xF6, 0x0D, 0xFC,
-    0x0E, 0x02, 0x0E, 0x08, 0x0E, 0x0E, 0x0E, 0x14, 0x0E, 0x1A, 0x0E, 0x20, 0x0E, 0x26, 0x0E, 0x2C,
-    0x0E, 0x32, 0x0E, 0x38, 0x0E, 0x3E, 0x0E, 0x44, 0x0E, 0x4A, 0x0E, 0x50, 0x0E, 0x56, 0x0E, 0x5C,
-    0x0E, 0x62, 0x0E, 0x68, 0x0E, 0x6E, 0x0E, 0x74, 0x0E, 0x7A, 0x0E, 0x80, 0x0E, 0x86, 0x0E, 0x8C,
-    0x0E, 0x92, 0x0E, 0x98, 0x0E, 0x9E, 0x0E, 0xA4, 0x0E, 0xAA, 0x0E, 0xB0, 0x0E, 0xB6, 0x0E, 0xBC,
-    0x0E, 0xC2, 0x0E, 0xC8, 0x0E, 0xCE, 0x0E, 0xD4, 0x0E, 0xDA, 0x0E, 0xE0, 0x0E, 0xE6, 0x0E, 0xEC,
-    0x0E, 0xF2, 0x0E, 0xF8, 0x0E, 0xFE, 0x0F, 0x04, 0x0F, 0x0A, 0x0F, 0x10, 0x0F, 0x16, 0x0F, 0x1C,
-    0x0F, 0x22, 0x0F, 0x28, 0x0F, 0x2E, 0x0F, 0x34, 0x0F, 0x3A, 0x0F, 0x40, 0x0F, 0x46, 0x0F, 0x4C,
-    0x0F, 0x52, 0x0F, 0x58, 0x0F, 0x5E, 0x0F, 0x64, 0x0F, 0x6A, 0x0F, 0x70, 0x0F, 0x76, 0x0F, 0x7C,
-    0x0F, 0x82, 0x0F, 0x88, 0x00, 0x02, 0x00, 0x41, 0x03, 0x00, 0x00, 0x02, 0x00, 0x41, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x41, 0x03, 0x02, 0x00, 0x02, 0x00, 0x41, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x43, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x00, 0x00, 0x02, 0x00, 0x45, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x45, 0x03, 0x08, 0x00, 0x02, 0x00, 0x49, 0x03, 0x00, 0x00, 0x02, 0x00, 0x49,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x49, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x4E, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x4F, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x55, 0x03, 0x00, 0x00, 0x02, 0x00, 0x55, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x02, 0x00, 0x02, 0x00, 0x55, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x00, 0x00, 0x02, 0x00, 0x61, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x61, 0x03, 0x03, 0x00, 0x02, 0x00, 0x61, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x61, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x63, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x01, 0x00, 0x02, 0x00, 0x65, 0x03, 0x02, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x69, 0x03, 0x00, 0x00, 0x02, 0x00, 0x69, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x69, 0x03, 0x02, 0x00, 0x02, 0x00, 0x69, 0x03, 0x08, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6F,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x00, 0x00, 0x02, 0x00, 0x75, 0x03, 0x01, 0x00, 0x02, 0x00, 0x75, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x75, 0x03, 0x08, 0x00, 0x02, 0x00, 0x79, 0x03, 0x01, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x04, 0x00, 0x02, 0x00, 0x61, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x06, 0x00, 0x02, 0x00, 0x61, 0x03, 0x06, 0x00, 0x02, 0x00, 0x41, 0x03, 0x28,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x28, 0x00, 0x02, 0x00, 0x43, 0x03, 0x01, 0x00, 0x02, 0x00, 0x63,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x43, 0x03, 0x02, 0x00, 0x02, 0x00, 0x63, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x43, 0x03, 0x07, 0x00, 0x02, 0x00, 0x63, 0x03, 0x07, 0x00, 0x02, 0x00, 0x43, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x63, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x44, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x64,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x45, 0x03, 0x04, 0x00, 0x02, 0x00, 0x65, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x06, 0x00, 0x02, 0x00, 0x65, 0x03, 0x06, 0x00, 0x02, 0x00, 0x45, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x28, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x28, 0x00, 0x02, 0x00, 0x45, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x47, 0x03, 0x02, 0x00, 0x02, 0x00, 0x67, 0x03, 0x02, 0x00, 0x02, 0x00, 0x47, 0x03, 0x06,
-    0x00, 0x02, 0x00, 0x67, 0x03, 0x06, 0x00, 0x02, 0x00, 0x47, 0x03, 0x07, 0x00, 0x02, 0x00, 0x67,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x47, 0x03, 0x27, 0x00, 0x02, 0x00, 0x67, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x48, 0x03, 0x02, 0x00, 0x02, 0x00, 0x68, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x69, 0x03, 0x03, 0x00, 0x02, 0x00, 0x49, 0x03, 0x04, 0x00, 0x02, 0x00, 0x69,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x49, 0x03, 0x06, 0x00, 0x02, 0x00, 0x69, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x28, 0x00, 0x02, 0x00, 0x69, 0x03, 0x28, 0x00, 0x02, 0x00, 0x49, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x4A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4B,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x6C, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0x4C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4E,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x6E, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x4F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x06, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x06, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0B, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x52, 0x03, 0x01, 0x00, 0x02, 0x00, 0x72, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x27, 0x00, 0x02, 0x00, 0x72, 0x03, 0x27, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x53, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x01, 0x00, 0x02, 0x00, 0x53, 0x03, 0x02, 0x00, 0x02, 0x00, 0x73, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x53, 0x03, 0x27, 0x00, 0x02, 0x00, 0x73, 0x03, 0x27, 0x00, 0x02, 0x00, 0x53,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x73, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x54, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x74, 0x03, 0x27, 0x00, 0x02, 0x00, 0x54, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x74, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x03, 0x00, 0x02, 0x00, 0x75, 0x03, 0x03, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x75, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x06, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0A,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x28, 0x00, 0x02, 0x00, 0x75, 0x03, 0x28, 0x00, 0x02, 0x00, 0x57, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x77, 0x03, 0x02, 0x00, 0x02, 0x00, 0x59, 0x03, 0x02, 0x00, 0x02, 0x00, 0x79, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x08, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x01, 0x00, 0x02, 0x00, 0x7A,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x5A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x1B, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x04, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x44, 0x00, 0x02, 0x00, 0x75, 0x03, 0x44, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0xFC, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x02, 0x00, 0xFC,
-    0x03, 0x00, 0x00, 0x02, 0x00, 0xC4, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE4, 0x03, 0x04, 0x00, 0x02,
-    0x02, 0x26, 0x03, 0x04, 0x00, 0x02, 0x02, 0x27, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0xE6, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x67,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x4F, 0x03, 0x28, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x28,
-    0x00, 0x02, 0x01, 0x4D, 0x03, 0x28, 0x00, 0x02, 0x01, 0xB7, 0x03, 0x0C, 0x00, 0x02, 0x02, 0x92,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x67, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xC6,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0xF8, 0x03, 0x01, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x41, 0x03, 0x11, 0x00, 0x02, 0x00, 0x61, 0x03, 0x11, 0x00, 0x02, 0x00, 0x45,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x45, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x65, 0x03, 0x11, 0x00, 0x02, 0x00, 0x49, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x49, 0x03, 0x11, 0x00, 0x02, 0x00, 0x69, 0x03, 0x11, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x11, 0x00, 0x02, 0x00, 0x52, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x11, 0x00, 0x02, 0x00, 0x72, 0x03, 0x11, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x55, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x11, 0x00, 0x02, 0x00, 0x53, 0x03, 0x26, 0x00, 0x02, 0x00, 0x73, 0x03, 0x26,
-    0x00, 0x02, 0x00, 0x54, 0x03, 0x26, 0x00, 0x02, 0x00, 0x74, 0x03, 0x26, 0x00, 0x02, 0x00, 0x48,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x68, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x41, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x61, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0xD6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xF6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xD5,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x07, 0x00, 0x02, 0x02, 0x2E, 0x03, 0x04, 0x00, 0x02, 0x02, 0x2F, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x04, 0x00, 0x02, 0x00, 0x79, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41,
-    0x03, 0x25, 0x00, 0x02, 0x00, 0x61, 0x03, 0x25, 0x00, 0x02, 0x00, 0x42, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x62, 0x03, 0x07, 0x00, 0x02, 0x00, 0x42, 0x03, 0x23, 0x00, 0x02, 0x00, 0x62, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x42, 0x03, 0x31, 0x00, 0x02, 0x00, 0x62, 0x03, 0x31, 0x00, 0x02, 0x00, 0xC7,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xE7, 0x03, 0x01, 0x00, 0x02, 0x00, 0x44, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x64, 0x03, 0x07, 0x00, 0x02, 0x00, 0x44, 0x03, 0x23, 0x00, 0x02, 0x00, 0x64, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x44, 0x03, 0x31, 0x00, 0x02, 0x00, 0x64, 0x03, 0x31, 0x00, 0x02, 0x00, 0x44,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x64, 0x03, 0x27, 0x00, 0x02, 0x00, 0x44, 0x03, 0x2D, 0x00, 0x02,
-    0x00, 0x64, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x12, 0x03, 0x00, 0x00, 0x02, 0x01, 0x13, 0x03, 0x00,
-    0x00, 0x02, 0x01, 0x12, 0x03, 0x01, 0x00, 0x02, 0x01, 0x13, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45,
-    0x03, 0x2D, 0x00, 0x02, 0x00, 0x65, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x45, 0x03, 0x30, 0x00, 0x02,
-    0x00, 0x65, 0x03, 0x30, 0x00, 0x02, 0x01, 0x14, 0x03, 0x27, 0x00, 0x02, 0x01, 0x15, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0x46, 0x03, 0x07, 0x00, 0x02, 0x00, 0x66, 0x03, 0x07, 0x00, 0x02, 0x00, 0x47,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x67, 0x03, 0x04, 0x00, 0x02, 0x00, 0x48, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x68, 0x03, 0x07, 0x00, 0x02, 0x00, 0x48, 0x03, 0x23, 0x00, 0x02, 0x00, 0x68, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x48, 0x03, 0x08, 0x00, 0x02, 0x00, 0x68, 0x03, 0x08, 0x00, 0x02, 0x00, 0x48,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x68, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x2E, 0x00, 0x02,
-    0x00, 0x68, 0x03, 0x2E, 0x00, 0x02, 0x00, 0x49, 0x03, 0x30, 0x00, 0x02, 0x00, 0x69, 0x03, 0x30,
-    0x00, 0x02, 0x00, 0x49, 0x03, 0x44, 0x00, 0x02, 0x00, 0x69, 0x03, 0x44, 0x00, 0x02, 0x00, 0x4B,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x6B, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x31,
-    0x00, 0x02, 0x00, 0x4C, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x36,
-    0x03, 0x04, 0x00, 0x02, 0x1E, 0x37, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x31, 0x00, 0x02,
-    0x00, 0x6C, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x2D,
-    0x00, 0x02, 0x00, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4D,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x6D, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x4E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E,
-    0x03, 0x31, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x2D, 0x00, 0x02,
-    0x00, 0x6E, 0x03, 0x2D, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0xD5, 0x03, 0x08, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C,
-    0x03, 0x00, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x00, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x50, 0x03, 0x01, 0x00, 0x02, 0x00, 0x70, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x50, 0x03, 0x07, 0x00, 0x02, 0x00, 0x70, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x72, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x72, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x5A, 0x03, 0x04, 0x00, 0x02, 0x1E, 0x5B, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x31, 0x00, 0x02, 0x00, 0x72, 0x03, 0x31, 0x00, 0x02, 0x00, 0x53,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x73, 0x03, 0x07, 0x00, 0x02, 0x00, 0x53, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x23, 0x00, 0x02, 0x01, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x01, 0x5B, 0x03, 0x07,
-    0x00, 0x02, 0x01, 0x60, 0x03, 0x07, 0x00, 0x02, 0x01, 0x61, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x60,
-    0x03, 0x23, 0x00, 0x02, 0x1E, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x74, 0x03, 0x07, 0x00, 0x02, 0x00, 0x54, 0x03, 0x23, 0x00, 0x02, 0x00, 0x74, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x54, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x31, 0x00, 0x02, 0x00, 0x54,
-    0x03, 0x2D, 0x00, 0x02, 0x00, 0x74, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x55, 0x03, 0x24, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x24, 0x00, 0x02, 0x00, 0x55, 0x03, 0x30, 0x00, 0x02, 0x00, 0x75, 0x03, 0x30,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x75, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x68,
-    0x03, 0x01, 0x00, 0x02, 0x01, 0x69, 0x03, 0x01, 0x00, 0x02, 0x01, 0x6A, 0x03, 0x08, 0x00, 0x02,
-    0x01, 0x6B, 0x03, 0x08, 0x00, 0x02, 0x00, 0x56, 0x03, 0x03, 0x00, 0x02, 0x00, 0x76, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x56, 0x03, 0x23, 0x00, 0x02, 0x00, 0x76, 0x03, 0x23, 0x00, 0x02, 0x00, 0x57,
-    0x03, 0x00, 0x00, 0x02, 0x00, 0x77, 0x03, 0x00, 0x00, 0x02, 0x00, 0x57, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x77, 0x03, 0x01, 0x00, 0x02, 0x00, 0x57, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x08,
-    0x00, 0x02, 0x00, 0x57, 0x03, 0x07, 0x00, 0x02, 0x00, 0x77, 0x03, 0x07, 0x00, 0x02, 0x00, 0x57,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x77, 0x03, 0x23, 0x00, 0x02, 0x00, 0x58, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x78, 0x03, 0x07, 0x00, 0x02, 0x00, 0x58, 0x03, 0x08, 0x00, 0x02, 0x00, 0x78, 0x03, 0x08,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x07, 0x00, 0x02, 0x00, 0x79, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x7A, 0x03, 0x23, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x31,
-    0x00, 0x02, 0x00, 0x68, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77,
-    0x03, 0x0A, 0x00, 0x02, 0x00, 0x79, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x7F, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x23, 0x00, 0x02, 0x00, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x41, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x00, 0x00, 0x02,
-    0x00, 0xC2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0xE2, 0x03, 0x03, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x23, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x23, 0x00, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x09,
-    0x00, 0x02, 0x01, 0x03, 0x03, 0x09, 0x00, 0x02, 0x01, 0x02, 0x03, 0x03, 0x00, 0x02, 0x01, 0x03,
-    0x03, 0x03, 0x00, 0x02, 0x01, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0x03, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x23, 0x00, 0x02, 0x00, 0x65, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x09, 0x00, 0x02, 0x00, 0x45, 0x03, 0x03, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0xEA, 0x03, 0x09, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x03, 0x00, 0x02, 0x00, 0xEA,
-    0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x23, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x09, 0x00, 0x02, 0x00, 0x69, 0x03, 0x09, 0x00, 0x02, 0x00, 0x49, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x69, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6F,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x09, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x09, 0x00, 0x02, 0x00, 0xF4,
-    0x03, 0x09, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x03, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xD3, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0xF3, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD2, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF2,
-    0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x09, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xD5, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x23,
-    0x00, 0x02, 0x01, 0xA1, 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x23, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x09, 0x00, 0x02, 0x00, 0x75, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xDA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xFA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD9, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0xF9, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x09, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x09, 0x00, 0x02, 0x01, 0x68, 0x03, 0x1B, 0x00, 0x02, 0x01, 0x69, 0x03, 0x1B, 0x00, 0x02,
-    0x01, 0xAF, 0x03, 0x23, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0x79, 0x03, 0x00, 0x00, 0x02, 0x00, 0x59, 0x03, 0x23, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x09, 0x00, 0x02, 0x00, 0x79, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0x59, 0x03, 0x03, 0x00, 0x02, 0x00, 0x79, 0x03, 0x03, 0x00, 0x01, 0x01, 0xF1, 0x00, 0xC0,
-    0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC7, 0x00, 0xC8, 0x00, 0xC9,
-    0x00, 0xCA, 0x00, 0xCB, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, 0xD1, 0x00, 0xD2,
-    0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, 0xDC,
-    0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xE3, 0x00, 0xE4, 0x00, 0xE5, 0x00, 0xE7,
-    0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEA, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xEF,
-    0x00, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF9, 0x00, 0xFA,
-    0x00, 0xFB, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03,
-    0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0B,
-    0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15,
-    0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1A, 0x01, 0x1B, 0x01, 0x1C, 0x01, 0x1D,
-    0x01, 0x1E, 0x01, 0x1F, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25,
-    0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x2C, 0x01, 0x2D, 0x01, 0x2E, 0x01, 0x2F,
-    0x01, 0x30, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x39, 0x01, 0x3A, 0x01, 0x3B,
-    0x01, 0x3C, 0x01, 0x3D, 0x01, 0x3E, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47,
-    0x01, 0x48, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x51, 0x01, 0x54,
-    0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x5C,
-    0x01, 0x5D, 0x01, 0x5E, 0x01, 0x5F, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64,
-    0x01, 0x65, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6D, 0x01, 0x6E,
-    0x01, 0x6F, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76,
-    0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7D, 0x01, 0x7E,
-    0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xCD, 0x01, 0xCE, 0x01, 0xCF, 0x01, 0xD0,
-    0x01, 0xD1, 0x01, 0xD2, 0x01, 0xD3, 0x01, 0xD4, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8,
-    0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1,
-    0x01, 0xE2, 0x01, 0xE3, 0x01, 0xE6, 0x01, 0xE7, 0x01, 0xE8, 0x01, 0xE9, 0x01, 0xEA, 0x01, 0xEB,
-    0x01, 0xEC, 0x01, 0xED, 0x01, 0xEE, 0x01, 0xEF, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8,
-    0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x00,
-    0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08,
-    0x02, 0x09, 0x02, 0x0A, 0x02, 0x0B, 0x02, 0x0C, 0x02, 0x0D, 0x02, 0x0E, 0x02, 0x0F, 0x02, 0x10,
-    0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18,
-    0x02, 0x19, 0x02, 0x1A, 0x02, 0x1B, 0x02, 0x1E, 0x02, 0x1F, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28,
-    0x02, 0x29, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x30,
-    0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x1E, 0x00, 0x1E, 0x01, 0x1E, 0x02, 0x1E, 0x03, 0x1E, 0x04,
-    0x1E, 0x05, 0x1E, 0x06, 0x1E, 0x07, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x0A, 0x1E, 0x0B, 0x1E, 0x0C,
-    0x1E, 0x0D, 0x1E, 0x0E, 0x1E, 0x0F, 0x1E, 0x10, 0x1E, 0x11, 0x1E, 0x12, 0x1E, 0x13, 0x1E, 0x14,
-    0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x18, 0x1E, 0x19, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E, 0x1C,
-    0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1E, 0x20, 0x1E, 0x21, 0x1E, 0x22, 0x1E, 0x23, 0x1E, 0x24,
-    0x1E, 0x25, 0x1E, 0x26, 0x1E, 0x27, 0x1E, 0x28, 0x1E, 0x29, 0x1E, 0x2A, 0x1E, 0x2B, 0x1E, 0x2C,
-    0x1E, 0x2D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x33, 0x1E, 0x34,
-    0x1E, 0x35, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3A, 0x1E, 0x3B, 0x1E, 0x3C,
-    0x1E, 0x3D, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x40, 0x1E, 0x41, 0x1E, 0x42, 0x1E, 0x43, 0x1E, 0x44,
-    0x1E, 0x45, 0x1E, 0x46, 0x1E, 0x47, 0x1E, 0x48, 0x1E, 0x49, 0x1E, 0x4A, 0x1E, 0x4B, 0x1E, 0x4C,
-    0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54,
-    0x1E, 0x55, 0x1E, 0x56, 0x1E, 0x57, 0x1E, 0x58, 0x1E, 0x59, 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x5C,
-    0x1E, 0x5D, 0x1E, 0x5E, 0x1E, 0x5F, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0x64,
-    0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x6A, 0x1E, 0x6B, 0x1E, 0x6C,
-    0x1E, 0x6D, 0x1E, 0x6E, 0x1E, 0x6F, 0x1E, 0x70, 0x1E, 0x71, 0x1E, 0x72, 0x1E, 0x73, 0x1E, 0x74,
-    0x1E, 0x75, 0x1E, 0x76, 0x1E, 0x77, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B, 0x1E, 0x7C,
-    0x1E, 0x7D, 0x1E, 0x7E, 0x1E, 0x7F, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0x84,
-    0x1E, 0x85, 0x1E, 0x86, 0x1E, 0x87, 0x1E, 0x88, 0x1E, 0x89, 0x1E, 0x8A, 0x1E, 0x8B, 0x1E, 0x8C,
-    0x1E, 0x8D, 0x1E, 0x8E, 0x1E, 0x8F, 0x1E, 0x90, 0x1E, 0x91, 0x1E, 0x92, 0x1E, 0x93, 0x1E, 0x94,
-    0x1E, 0x95, 0x1E, 0x96, 0x1E, 0x97, 0x1E, 0x98, 0x1E, 0x99, 0x1E, 0x9B, 0x1E, 0xA0, 0x1E, 0xA1,
-    0x1E, 0xA2, 0x1E, 0xA3, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9,
-    0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-    0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xB8, 0x1E, 0xB9,
-    0x1E, 0xBA, 0x1E, 0xBB, 0x1E, 0xBC, 0x1E, 0xBD, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1,
-    0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xC8, 0x1E, 0xC9,
-    0x1E, 0xCA, 0x1E, 0xCB, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xD0, 0x1E, 0xD1,
-    0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9,
-    0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1,
-    0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1,
-    0x1E, 0xF2, 0x1E, 0xF3, 0x1E, 0xF4, 0x1E, 0xF5, 0x1E, 0xF6, 0x1E, 0xF7, 0x1E, 0xF8, 0x1E, 0xF9,
-    0x00, 0x01, 0x05, 0xBA, 0x00, 0xAC, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76,
-    0x01, 0x7C, 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x01, 0xA6,
-    0x01, 0xAC, 0x01, 0xB2, 0x01, 0xB8, 0x01, 0xBE, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD0, 0x01, 0xD6,
-    0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA, 0x02, 0x00, 0x02, 0x06,
-    0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A, 0x02, 0x30, 0x02, 0x38,
-    0x02, 0x40, 0x02, 0x46, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x62, 0x02, 0x68, 0x02, 0x70,
-    0x02, 0x78, 0x02, 0x80, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6,
-    0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6,
-    0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0C, 0x03, 0x12,
-    0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36, 0x03, 0x3C, 0x03, 0x42,
-    0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x62, 0x03, 0x6A, 0x03, 0x70, 0x03, 0x76,
-    0x03, 0x7C, 0x03, 0x82, 0x03, 0x8A, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-    0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6, 0x03, 0xCE, 0x03, 0xD6, 0x03, 0xDE, 0x03, 0xE6,
-    0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x06, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A,
-    0x04, 0x20, 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x46, 0x04, 0x4E,
-    0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-    0x04, 0x8A, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA,
-    0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDE, 0x04, 0xE6, 0x04, 0xEC, 0x04, 0xF2,
-    0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x12, 0x05, 0x1A, 0x05, 0x22, 0x05, 0x2A,
-    0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-    0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-    0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x40, 0x00, 0x02, 0x00, 0x41, 0x03, 0x41, 0x00, 0x02, 0x00, 0x45, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0x45, 0x03, 0x41, 0x00, 0x02, 0x00, 0x49, 0x03, 0x40, 0x00, 0x02, 0x00, 0x49,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x40, 0x00, 0x02, 0x00, 0x55, 0x03, 0x41, 0x00, 0x02, 0x00, 0x59, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x40, 0x00, 0x02, 0x00, 0x61, 0x03, 0x41, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0x65, 0x03, 0x41, 0x00, 0x02, 0x00, 0x69, 0x03, 0x40, 0x00, 0x02,
-    0x00, 0x69, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x75, 0x03, 0x40, 0x00, 0x02, 0x00, 0x75, 0x03, 0x41, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x43, 0x03, 0x41, 0x00, 0x02, 0x00, 0x63, 0x03, 0x41, 0x00, 0x02,
-    0x21, 0x2A, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x4E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x72, 0x03, 0x41, 0x00, 0x02, 0x00, 0x53, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x41, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x41, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0xDC, 0x03, 0x01, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x08, 0x03, 0x04,
-    0x00, 0x03, 0x00, 0x61, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x41, 0x03, 0x07, 0x03, 0x04,
-    0x00, 0x03, 0x00, 0x61, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x0C, 0x00, 0x02,
-    0x01, 0xEA, 0x03, 0x04, 0x00, 0x02, 0x01, 0xEB, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x67, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6E,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0xC6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0xF8, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE7,
-    0x03, 0x41, 0x00, 0x02, 0x01, 0x12, 0x03, 0x40, 0x00, 0x02, 0x01, 0x13, 0x03, 0x40, 0x00, 0x02,
-    0x01, 0x12, 0x03, 0x41, 0x00, 0x02, 0x01, 0x13, 0x03, 0x41, 0x00, 0x02, 0x02, 0x28, 0x03, 0x06,
-    0x00, 0x02, 0x02, 0x29, 0x03, 0x06, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEF,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x41, 0x00, 0x02,
-    0x21, 0x2A, 0x03, 0x23, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x31, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x04,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x6D, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF5,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-    0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x40, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x40, 0x00, 0x02,
-    0x01, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x41, 0x00, 0x02, 0x00, 0x50, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x70, 0x03, 0x41, 0x00, 0x03, 0x00, 0x52, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03,
-    0x00, 0x72, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x53, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03,
-    0x00, 0x73, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x03,
-    0x00, 0x73, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x62, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x63,
-    0x03, 0x07, 0x00, 0x02, 0x01, 0x68, 0x03, 0x41, 0x00, 0x02, 0x01, 0x69, 0x03, 0x41, 0x00, 0x03,
-    0x00, 0x55, 0x03, 0x04, 0x03, 0x08, 0x00, 0x03, 0x00, 0x75, 0x03, 0x04, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x57, 0x03, 0x40, 0x00, 0x02, 0x00, 0x77, 0x03, 0x40, 0x00, 0x02, 0x00, 0x57, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x77, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x40, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x40, 0x00, 0x03,
-    0x00, 0x41, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-    0x00, 0x41, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02,
-    0x1E, 0xA0, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x01, 0x03, 0x03, 0x41, 0x00, 0x02, 0x01, 0x02, 0x03, 0x40, 0x00, 0x02, 0x01, 0x03,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x06, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0xEA, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-    0x00, 0x65, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03,
-    0x00, 0x65, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xB8, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xB9,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x40, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-    0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-    0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x02,
-    0x00, 0x02, 0x1E, 0xCD, 0x03, 0x02, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x01, 0xA1,
-    0x03, 0x01, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x00, 0x00, 0x02,
-    0x1E, 0xCE, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCF, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x03,
-    0x00, 0x02, 0x01, 0xA1, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCD,
-    0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x01, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0xAF, 0x03, 0x00, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x00, 0x00, 0x02, 0x1E, 0xE6, 0x03, 0x1B,
-    0x00, 0x02, 0x1E, 0xE7, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x03, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x03, 0x00, 0x02, 0x1E, 0xE4, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE5, 0x03, 0x1B, 0x00, 0x02,
-    0x00, 0x59, 0x03, 0x40, 0x00, 0x02, 0x00, 0x79, 0x03, 0x40, 0x00, 0x01, 0x00, 0xAC, 0x00, 0xC0,
-    0x00, 0xC1, 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD9,
-    0x00, 0xDA, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEC, 0x00, 0xED,
-    0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFD, 0x01, 0x06, 0x01, 0x07, 0x01, 0x36,
-    0x01, 0x39, 0x01, 0x3A, 0x01, 0x43, 0x01, 0x44, 0x01, 0x54, 0x01, 0x55, 0x01, 0x5A, 0x01, 0x5B,
-    0x01, 0x79, 0x01, 0x7A, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xD9, 0x01, 0xDA,
-    0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1, 0x01, 0xE8, 0x01, 0xEC,
-    0x01, 0xED, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC,
-    0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x30,
-    0x02, 0x31, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C,
-    0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x34, 0x1E, 0x38,
-    0x1E, 0x39, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50,
-    0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x64,
-    0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A,
-    0x1E, 0x7B, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6,
-    0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE,
-    0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6,
-    0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4,
-    0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4,
-    0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC,
-    0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8,
-    0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0,
-    0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x00, 0x01, 0x02, 0xFC, 0x00, 0x4F, 0x00, 0xA4, 0x00, 0xAA,
-    0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20,
-    0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C,
-    0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C,
-    0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC,
-    0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C,
-    0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C,
-    0x02, 0x64, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94,
-    0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC,
-    0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC, 0x02, 0xF4, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0xFC, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03,
-    0x00, 0x75, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x02, 0x21, 0x2B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61,
-    0x03, 0x0A, 0x03, 0x01, 0x00, 0x02, 0x01, 0x06, 0x03, 0x27, 0x00, 0x02, 0x01, 0x07, 0x03, 0x27,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x00,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x01,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x06, 0x03, 0x27, 0x00, 0x03, 0x00, 0x65, 0x03, 0x06, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0xCF, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEF, 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x23,
-    0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x52, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x72, 0x03, 0x23,
-    0x03, 0x04, 0x00, 0x03, 0x00, 0x53, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x41,
-    0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03, 0x00, 0x73, 0x03, 0x07,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x41, 0x00, 0x02,
-    0x01, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x09,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x41,
-    0x00, 0x02, 0x01, 0xB0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x40, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x09,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x23, 0x00, 0x01, 0x00, 0x4F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC,
-    0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16,
-    0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x38, 0x1E, 0x39,
-    0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x5C, 0x1E, 0x5D,
-    0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4, 0x1E, 0xA5,
-    0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-    0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6, 0x1E, 0xC7,
-    0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB,
-    0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3,
-    0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF,
-    0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x02, 0xDC, 0x00, 0x49, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6,
-    0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26,
-    0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-    0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-    0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4,
-    0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24,
-    0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64,
-    0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4,
-    0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x28, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x28, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2B,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x01,
-    0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x45, 0x03, 0x27,
-    0x03, 0x06, 0x00, 0x03, 0x00, 0x65, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08, 0x03, 0x01, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x53, 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x23, 0x03, 0x07,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x06,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x65, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x01, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x00, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x09,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x03,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x01, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x00, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x09,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x03,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x23, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x49, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC, 0x01, 0xED,
-    0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17,
-    0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50,
-    0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4,
-    0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0,
-    0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6,
-    0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA,
-    0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2,
-    0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE,
-    0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x74, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03, 0x00, 0x63, 0x03, 0x27,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xFA, 0x1E, 0x08, 0x1E, 0x09,
-    0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x74, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x63, 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x01, 0x00, 0x0B, 0x01, 0xFA, 0x1E, 0x08,
-    0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA,
-    0x1E, 0xEB, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32,
-    0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x03, 0x00, 0x43,
-    0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x0A,
-    0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x1C, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x0D, 0x4A, 0x00, 0x02,
-    0x0D, 0x3E, 0x0D, 0x4C, 0x00, 0x02, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x04, 0x0D, 0x4B, 0x00, 0x02,
-    0x0D, 0x3E, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02,
-    0x0D, 0x46, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x47, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x57,
-    0x00, 0x01, 0x00, 0x03, 0x0D, 0x4A, 0x0D, 0x4B, 0x0D, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x26,
-    0x00, 0x02, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x10, 0x25, 0x10, 0x2E,
-    0x00, 0x01, 0x00, 0x01, 0x10, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x22, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x0B, 0x4B,
-    0x00, 0x02, 0x0B, 0x3E, 0x0B, 0x48, 0x00, 0x02, 0x0B, 0x56, 0x0B, 0x4C, 0x00, 0x02, 0x0B, 0x57,
-    0x00, 0x01, 0x00, 0x01, 0x0B, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x56,
-    0x00, 0x02, 0x0B, 0x47, 0x0B, 0x3E, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x57, 0x00, 0x01, 0x00, 0x03,
-    0x0B, 0x48, 0x0B, 0x4B, 0x0B, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x38, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x18,
-    0x00, 0x1E, 0x0D, 0xDA, 0x00, 0x02, 0x0D, 0xCA, 0x0D, 0xDD, 0x00, 0x03, 0x0D, 0xCF, 0x0D, 0xCA,
-    0x0D, 0xDC, 0x00, 0x02, 0x0D, 0xCF, 0x0D, 0xDE, 0x00, 0x02, 0x0D, 0xDF, 0x00, 0x01, 0x00, 0x04,
-    0x0D, 0xDD, 0x00, 0x02, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDC, 0x00, 0x02,
-    0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x26, 0x00, 0x04, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9,
-    0x0D, 0xCF, 0x00, 0x02, 0x0D, 0xDC, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDF, 0x00, 0x01,
-    0x00, 0x04, 0x0D, 0xDA, 0x0D, 0xDC, 0x0D, 0xDD, 0x0D, 0xDE, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x03, 0x0D, 0xD9, 0x0D, 0xCF, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x01, 0x0D, 0xDD,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x32, 0x00, 0x03, 0x00, 0x0C,
-    0x00, 0x16, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x00, 0x02, 0x0B, 0xD7, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x0B, 0xCA, 0x00, 0x02, 0x0B, 0xBE, 0x0B, 0xCC, 0x00, 0x02, 0x0B, 0xD7,
-    0x00, 0x01, 0x00, 0x04, 0x0B, 0xCB, 0x00, 0x02, 0x0B, 0xBE, 0x00, 0x01, 0x00, 0x03, 0x0B, 0x92,
-    0x0B, 0xC6, 0x0B, 0xC7, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-    0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0B, 0x92, 0x0B, 0xD7,
-    0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC7, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC6,
-    0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x0B, 0xCA, 0x0B, 0xCB, 0x0B, 0xCC, 0x00, 0x04,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x04, 0x0C, 0x48, 0x00, 0x02, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x46, 0x00, 0x02,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02,
-    0x0C, 0x46, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x48, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x8A, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A,
-    0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x01,
-    0x00, 0x04, 0x1B, 0x06, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x08, 0x00, 0x02,
-    0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0A, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04,
-    0x1B, 0x0C, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0E, 0x00, 0x02, 0x1B, 0x35,
-    0x00, 0x01, 0x00, 0x04, 0x1B, 0x12, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3B,
-    0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3D, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01,
-    0x00, 0x04, 0x1B, 0x40, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x41, 0x00, 0x02,
-    0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x43, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-    0x1B, 0x05, 0x1B, 0x07, 0x1B, 0x09, 0x1B, 0x0B, 0x1B, 0x0D, 0x1B, 0x11, 0x1B, 0x3A, 0x1B, 0x3C,
-    0x1B, 0x3E, 0x1B, 0x3F, 0x1B, 0x42, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x5E, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x02, 0x1B, 0x05, 0x1B, 0x35,
-    0x00, 0x02, 0x1B, 0x07, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x09, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0B,
-    0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0D, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x11, 0x1B, 0x35, 0x00, 0x02,
-    0x1B, 0x3A, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3C, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3E, 0x1B, 0x35,
-    0x00, 0x02, 0x1B, 0x3F, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x42, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-    0x1B, 0x06, 0x1B, 0x08, 0x1B, 0x0A, 0x1B, 0x0C, 0x1B, 0x0E, 0x1B, 0x12, 0x1B, 0x3B, 0x1B, 0x3D,
-    0x1B, 0x40, 0x1B, 0x41, 0x1B, 0x43
-};
-
-const le_uint8 CanonShaping::glyphDefinitionTable[] = {
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x28,
-    0x06, 0x0B, 0x06, 0x0F, 0x00, 0x01, 0x06, 0x10, 0x06, 0x15, 0x00, 0x03, 0x06, 0x1B, 0x06, 0x1B,
-    0x00, 0x01, 0x06, 0x1E, 0x06, 0x1F, 0x00, 0x01, 0x06, 0x21, 0x06, 0x21, 0x00, 0x01, 0x06, 0x22,
-    0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x3A, 0x00, 0x01, 0x06, 0x40, 0x06, 0x4A, 0x00, 0x01,
-    0x06, 0x4B, 0x06, 0x5E, 0x00, 0x03, 0x06, 0x60, 0x06, 0x6F, 0x00, 0x01, 0x06, 0x70, 0x06, 0x70,
-    0x00, 0x03, 0x06, 0x71, 0x06, 0xBF, 0x00, 0x01, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x02, 0x06, 0xC1,
-    0x06, 0xC1, 0x00, 0x01, 0x06, 0xC2, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xD2, 0x00, 0x01,
-    0x06, 0xD3, 0x06, 0xD3, 0x00, 0x02, 0x06, 0xD4, 0x06, 0xD5, 0x00, 0x01, 0x06, 0xD6, 0x06, 0xDC,
-    0x00, 0x03, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x03, 0x06, 0xE5, 0x06, 0xE6, 0x00, 0x01, 0x06, 0xE7,
-    0x06, 0xE8, 0x00, 0x03, 0x06, 0xE9, 0x06, 0xE9, 0x00, 0x01, 0x06, 0xEA, 0x06, 0xED, 0x00, 0x03,
-    0x06, 0xEE, 0x06, 0xFF, 0x00, 0x01, 0x07, 0x50, 0x07, 0x6D, 0x00, 0x01, 0xFB, 0x50, 0xFB, 0xB1,
-    0x00, 0x01, 0xFB, 0xD3, 0xFB, 0xDC, 0x00, 0x01, 0xFB, 0xDD, 0xFB, 0xDD, 0x00, 0x02, 0xFB, 0xDE,
-    0xFB, 0xE9, 0x00, 0x01, 0xFB, 0xEA, 0xFB, 0xFB, 0x00, 0x02, 0xFB, 0xFC, 0xFB, 0xFF, 0x00, 0x01,
-    0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D,
-    0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0,
-    0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02,
-    0x00, 0x02, 0x00, 0xCE, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8,
-    0x03, 0x16, 0x03, 0x19, 0x00, 0xDC, 0x03, 0x1A, 0x03, 0x1A, 0x00, 0xE8, 0x03, 0x1B, 0x03, 0x1B,
-    0x00, 0xD8, 0x03, 0x1C, 0x03, 0x20, 0x00, 0xDC, 0x03, 0x21, 0x03, 0x22, 0x00, 0xCA, 0x03, 0x23,
-    0x03, 0x26, 0x00, 0xDC, 0x03, 0x27, 0x03, 0x28, 0x00, 0xCA, 0x03, 0x29, 0x03, 0x33, 0x00, 0xDC,
-    0x03, 0x34, 0x03, 0x38, 0x00, 0x01, 0x03, 0x39, 0x03, 0x3C, 0x00, 0xDC, 0x03, 0x3D, 0x03, 0x44,
-    0x00, 0xE6, 0x03, 0x45, 0x03, 0x45, 0x00, 0xF0, 0x03, 0x46, 0x03, 0x46, 0x00, 0xE6, 0x03, 0x47,
-    0x03, 0x49, 0x00, 0xDC, 0x03, 0x4A, 0x03, 0x4C, 0x00, 0xE6, 0x03, 0x4D, 0x03, 0x4E, 0x00, 0xDC,
-    0x03, 0x50, 0x03, 0x52, 0x00, 0xE6, 0x03, 0x53, 0x03, 0x56, 0x00, 0xDC, 0x03, 0x57, 0x03, 0x57,
-    0x00, 0xE6, 0x03, 0x58, 0x03, 0x58, 0x00, 0xE8, 0x03, 0x59, 0x03, 0x5A, 0x00, 0xDC, 0x03, 0x5B,
-    0x03, 0x5B, 0x00, 0xE6, 0x03, 0x5C, 0x03, 0x5C, 0x00, 0xE9, 0x03, 0x5D, 0x03, 0x5E, 0x00, 0xEA,
-    0x03, 0x5F, 0x03, 0x5F, 0x00, 0xE9, 0x03, 0x60, 0x03, 0x61, 0x00, 0xEA, 0x03, 0x62, 0x03, 0x62,
-    0x00, 0xE9, 0x03, 0x63, 0x03, 0x6F, 0x00, 0xE6, 0x04, 0x83, 0x04, 0x86, 0x00, 0xE6, 0x05, 0x91,
-    0x05, 0x91, 0x00, 0xDC, 0x05, 0x92, 0x05, 0x95, 0x00, 0xE6, 0x05, 0x96, 0x05, 0x96, 0x00, 0xDC,
-    0x05, 0x97, 0x05, 0x98, 0x00, 0xE6, 0x05, 0x99, 0x05, 0x99, 0x00, 0xE8, 0x05, 0x9A, 0x05, 0x9A,
-    0x00, 0xDE, 0x05, 0x9B, 0x05, 0x9B, 0x00, 0xDC, 0x05, 0x9C, 0x05, 0xA1, 0x00, 0xE6, 0x05, 0xA2,
-    0x05, 0xA7, 0x00, 0xDC, 0x05, 0xA8, 0x05, 0xA8, 0x00, 0xE6, 0x05, 0xA9, 0x05, 0xA9, 0x00, 0xE8,
-    0x05, 0xAA, 0x05, 0xAA, 0x00, 0xDC, 0x05, 0xAB, 0x05, 0xAC, 0x00, 0xE6, 0x05, 0xAD, 0x05, 0xAD,
-    0x00, 0xDE, 0x05, 0xAE, 0x05, 0xAE, 0x00, 0xE8, 0x05, 0xAF, 0x05, 0xAF, 0x00, 0xE6, 0x05, 0xB0,
-    0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBA, 0x05, 0xBA, 0x00, 0x13,
-    0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC, 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD,
-    0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2,
-    0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4, 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC,
-    0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12, 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C,
-    0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D, 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50,
-    0x06, 0x50, 0x00, 0x1E, 0x06, 0x51, 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F,
-    0x06, 0x53, 0x06, 0x53, 0x00, 0x20, 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56,
-    0x00, 0x1D, 0x06, 0x57, 0x06, 0x58, 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C,
-    0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D, 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D,
-    0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6, 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1,
-    0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2, 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4,
-    0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC,
-    0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6, 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11,
-    0x00, 0x24, 0x07, 0x30, 0x07, 0x30, 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32,
-    0x07, 0x33, 0x00, 0xE6, 0x07, 0x34, 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6,
-    0x07, 0x37, 0x07, 0x39, 0x00, 0xDC, 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C,
-    0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D, 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F,
-    0x07, 0x41, 0x00, 0xE6, 0x07, 0x42, 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6,
-    0x07, 0x44, 0x07, 0x44, 0x00, 0xDC, 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46,
-    0x00, 0xDC, 0x07, 0x47, 0x07, 0x47, 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49,
-    0x07, 0x4A, 0x00, 0xE6, 0x07, 0xEB, 0x07, 0xF1, 0x00, 0xE6, 0x07, 0xF2, 0x07, 0xF2, 0x00, 0xDC,
-    0x07, 0xF3, 0x07, 0xF3, 0x00, 0xE6, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D,
-    0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6, 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53,
-    0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09,
-    0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D, 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC,
-    0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D,
-    0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09,
-    0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56, 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC,
-    0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA,
-    0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39, 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09,
-    0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8, 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB,
-    0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37,
-    0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81,
-    0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74, 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D,
-    0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82, 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84,
-    0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC,
-    0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39, 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F,
-    0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09, 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2,
-    0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4,
-    0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A, 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B,
-    0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6, 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1B, 0x34,
-    0x1B, 0x34, 0x00, 0x07, 0x1B, 0x44, 0x1B, 0x44, 0x00, 0x09, 0x1B, 0x6B, 0x1B, 0x6B, 0x00, 0xE6,
-    0x1B, 0x6C, 0x1B, 0x6C, 0x00, 0xDC, 0x1B, 0x6D, 0x1B, 0x73, 0x00, 0xE6, 0x1D, 0xC0, 0x1D, 0xC1,
-    0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2, 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC9, 0x00, 0xE6, 0x1D, 0xCA,
-    0x1D, 0xCA, 0x00, 0xDC, 0x1D, 0xFE, 0x1D, 0xFE, 0x00, 0xE6, 0x1D, 0xFF, 0x1D, 0xFF, 0x00, 0xDC,
-    0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2, 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7,
-    0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01, 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1,
-    0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6, 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6,
-    0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9, 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB,
-    0x00, 0x01, 0x20, 0xEC, 0x20, 0xEF, 0x00, 0xDC, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA, 0x30, 0x2B,
-    0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D, 0x00, 0xDE,
-    0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06, 0xA8, 0x06,
-    0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6, 0x0A, 0x0D,
-    0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38, 0x00, 0xE6,
-    0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F, 0x0A, 0x3F,
-    0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01, 0xD1, 0x6D,
-    0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82, 0x00, 0xDC,
-    0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA, 0xD1, 0xAD,
-    0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
-};
-
-
-const size_t CanonShaping::glyphSubstitutionTableLen = sizeof(glyphSubstitutionTable)/sizeof(glyphSubstitutionTable[0]);
-
-const size_t CanonShaping::glyphDefinitionTableLen = sizeof(glyphDefinitionTable)/sizeof(glyphDefinitionTable[0]);
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/CanonShaping.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphStorage.h"
-#include "CanonShaping.h"
-#include "GlyphDefinitionTables.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-void CanonShaping::sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit)
-{
-    for (le_int32 j = index + 1; j < limit; j += 1) {
-        le_int32 i;
-        le_int32 v = indices[j];
-        le_int32 c = combiningClasses[v];
-
-        for (i = j - 1; i >= index; i -= 1) {
-            if (c >= combiningClasses[indices[i]]) {
-                break;
-            }
-
-            indices[i + 1] = indices[i];
-        }
-
-        indices[i + 1] = v;
-    }
-}
-
-void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-                                LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    LEErrorCode success = LE_NO_ERROR;
-    LEReferenceTo<GlyphDefinitionTableHeader> gdefTable(LETableReference::kStaticData, CanonShaping::glyphDefinitionTable, CanonShaping::glyphDefinitionTableLen);
-    LEReferenceTo<ClassDefinitionTable> classTable = gdefTable->getMarkAttachClassDefinitionTable(gdefTable, success);
-    le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount);
-    le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount);
-    le_int32 i;
-
-    if (combiningClasses == NULL || indices == NULL) {
-        if (combiningClasses != NULL) {
-            LE_DELETE_ARRAY(combiningClasses);
-        }
-        if (indices != NULL) {
-            LE_DELETE_ARRAY(indices);
-        }
-        return;
-    }
-
-    for (i = 0; i < charCount; i += 1) {
-      combiningClasses[i] = classTable->getGlyphClass(classTable, (LEGlyphID) inChars[i], success);
-        indices[i] = i;
-    }
-
-    for (i = 0; i < charCount; i += 1) {
-        if (combiningClasses[i] != 0) {
-            le_int32 mark;
-
-            for (mark = i; mark < charCount; mark += 1) {
-                if (combiningClasses[mark] == 0) {
-                    break;
-                }
-            }
-
-            sortMarks(indices, combiningClasses, i, mark);
-        }
-    }
-
-    le_int32 out = 0, dir = 1;
-
-    if (rightToLeft) {
-        out = charCount - 1;
-        dir = -1;
-    }
-
-    for (i = 0; i < charCount; i += 1, out += dir) {
-        le_int32 index = indices[i];
-
-        outChars[i] = inChars[index];
-        glyphStorage.setCharIndex(out, index, success);
-    }
-
-    LE_DELETE_ARRAY(indices);
-    LE_DELETE_ARRAY(combiningClasses);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/CanonShaping.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __CANONSHAPING_H
-#define __CANONSHAPING_H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class U_LAYOUT_API CanonShaping /* not : public UObject because all members are static */
-{
-public:
-    static const le_uint8 glyphSubstitutionTable[];
-    static const size_t   glyphSubstitutionTableLen;
-    static const le_uint8 glyphDefinitionTable[];
-    static const size_t   glyphDefinitionTableLen;
-
-    static void reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-                                   LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-private:
-    static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit);
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/CharSubstitutionFilter.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __CHARSUBSTITUTIONFILTER_H
-#define __CHARSUBSTITUTIONFILTER_H
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-
-/**
- * This filter is used by character-based GSUB processors. It
- * accepts only those characters which the given font can display.
- *
- * Note: Implementation is in ArabicLayoutEngine.cpp
- *
- * @internal
- */
-class CharSubstitutionFilter : public UMemory, public LEGlyphFilter
-{
-private:
-    /**
-     * Holds the font which is used to test the characters.
-     *
-     * @internal
-     */
-    const LEFontInstance *fFontInstance;
-
-    /**
-     * The copy constructor. Not allowed!
-     *
-     * @internal
-     */
-    CharSubstitutionFilter(const CharSubstitutionFilter &other); // forbid copying of this class
-
-    /**
-     * The replacement operator. Not allowed!
-     *
-     * @internal
-     */
-    CharSubstitutionFilter &operator=(const CharSubstitutionFilter &other); // forbid copying of this class
-
-public:
-    /**
-     * The constructor.
-     *
-     * @param fontInstance - the font to use to test the characters.
-     *
-     * @internal
-     */
-    CharSubstitutionFilter(const LEFontInstance *fontInstance);
-
-    /**
-     * The destructor.
-     *
-     * @internal
-     */
-    ~CharSubstitutionFilter();
-
-    /**
-     * This method is used to test if a particular
-     * character can be displayed by the filter's
-     * font.
-     *
-     * @param glyph - the Unicode character code to be tested
-     *
-     * @return TRUE if the filter's font can display this character.
-     *
-     * @internal
-     */
-    le_bool accept(LEGlyphID glyph, LEErrorCode &success) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ClassDefinitionTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "ClassDefinitionTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 ClassDefinitionTable::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  LEReferenceTo<ClassDefinitionTable> thisRef(base, success);
-  if (LE_FAILURE(success)) return 0;
-
-  switch(SWAPW(classFormat)) {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<ClassDefFormat1Table> f1Table(thisRef, success);
-      return f1Table->getGlyphClass(f1Table, glyphID, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<ClassDefFormat2Table> f2Table(thisRef, success);
-      return  f2Table->getGlyphClass(f2Table, glyphID, success);
-    }
-
-    default:
-        return 0;
-  }
-}
-
-le_bool ClassDefinitionTable::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    LEReferenceTo<ClassDefinitionTable> thisRef(base, success);
-    if (LE_FAILURE(success)) return 0;
-
-    switch(SWAPW(classFormat)) {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<ClassDefFormat1Table> f1Table(thisRef, success);
-      return f1Table->hasGlyphClass(f1Table, glyphClass, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<ClassDefFormat2Table> f2Table(thisRef, success);
-      return f2Table->hasGlyphClass(f2Table, glyphClass, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_int32 ClassDefFormat1Table::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-
-    le_uint16 count = SWAPW(glyphCount);
-    LEReferenceToArrayOf<le_uint16> classValueArrayRef(base, success, &classValueArray[0], count);
-    TTGlyphID ttGlyphID  = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    TTGlyphID firstGlyph = SWAPW(startGlyph);
-    TTGlyphID lastGlyph  = firstGlyph + count;
-
-    if (LE_SUCCESS(success) && ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) {
-      return SWAPW( classValueArrayRef(ttGlyphID - firstGlyph, success) );
-    }
-
-    return 0;
-}
-
-le_bool ClassDefFormat1Table::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 count = SWAPW(glyphCount);
-    LEReferenceToArrayOf<le_uint16> classValueArrayRef(base, success, &classValueArray[0], count);
-    int i;
-
-    for (i = 0; LE_SUCCESS(success)&& (i < count); i += 1) {
-      if (SWAPW(classValueArrayRef(i,success)) == glyphClass) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-le_int32 ClassDefFormat2Table::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    TTGlyphID ttGlyph    = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 rangeCount = SWAPW(classRangeCount);
-    LEReferenceToArrayOf<GlyphRangeRecord> classRangeRecordArrayRef(base, success, &classRangeRecordArray[0], rangeCount);
-    le_int32  rangeIndex =
-      OpenTypeUtilities::getGlyphRangeIndex(ttGlyph, classRangeRecordArrayRef, success);
-
-    if (rangeIndex < 0 || LE_FAILURE(success)) {
-        return 0;
-    }
-
-    return SWAPW(classRangeRecordArrayRef(rangeIndex, success).rangeValue);
-}
-
-le_bool ClassDefFormat2Table::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 rangeCount = SWAPW(classRangeCount);
-    LEReferenceToArrayOf<GlyphRangeRecord> classRangeRecordArrayRef(base, success, &classRangeRecordArray[0], rangeCount);
-    int i;
-
-    for (i = 0; i < rangeCount && LE_SUCCESS(success); i += 1) {
-      if (SWAPW(classRangeRecordArrayRef(i,success).rangeValue) == glyphClass) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ClassDefinitionTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __CLASSDEFINITIONTABLES_H
-#define __CLASSDEFINITIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ClassDefinitionTable
-{
-    le_uint16 classFormat;
-
-    le_int32  getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool   hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-
-#if LE_ENABLE_RAW
-  le_int32 getGlyphClass(LEGlyphID glyphID) const {
-    LETableReference base((const le_uint8*)this);
-    LEErrorCode ignored = LE_NO_ERROR;
-    return getGlyphClass(base,glyphID,ignored);
-  }
-
-  le_bool hasGlyphClass(le_int32 glyphClass) const {
-    LETableReference base((const le_uint8*)this);
-    LEErrorCode ignored = LE_NO_ERROR;
-    return hasGlyphClass(base,glyphClass,ignored);
-  }
-#endif
-};
-
-struct ClassDefFormat1Table : ClassDefinitionTable
-{
-    TTGlyphID  startGlyph;
-    le_uint16  glyphCount;
-    le_uint16  classValueArray[ANY_NUMBER];
-
-    le_int32 getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool  hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(ClassDefFormat1Table, classValueArray)
-
-
-struct ClassRangeRecord
-{
-    TTGlyphID start;
-    TTGlyphID end;
-    le_uint16 classValue;
-};
-
-struct ClassDefFormat2Table : ClassDefinitionTable
-{
-    le_uint16        classRangeCount;
-    GlyphRangeRecord classRangeRecordArray[ANY_NUMBER];
-
-    le_int32 getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(ClassDefFormat2Table, classRangeRecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertion.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHINSERTION_H
-#define __CONTEXTUALGLYPHINSERTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ContextualGlyphInsertionHeader : MorphStateTableHeader
-{
-};
-
-struct ContextualGlyphInsertionHeader2 : MorphStateTableHeader2
-{
-    le_uint32 insertionTableOffset;
-};
-
-enum ContextualGlyphInsertionFlags
-{
-    cgiSetMark                  = 0x8000,
-    cgiDontAdvance              = 0x4000,
-    cgiCurrentIsKashidaLike     = 0x2000,
-    cgiMarkedIsKashidaLike      = 0x1000,
-    cgiCurrentInsertBefore      = 0x0800,
-    cgiMarkInsertBefore         = 0x0400,
-    cgiCurrentInsertCountMask   = 0x03E0,
-    cgiMarkedInsertCountMask    = 0x001F
-};
-
-struct ContextualGlyphInsertionStateEntry : StateEntry
-{
-    ByteOffset currentInsertionListOffset;
-    ByteOffset markedInsertionListOffset;
-};
-
-struct ContextualGlyphInsertionStateEntry2 : StateEntry2
-{
-    le_uint16 currentInsertionListIndex;
-    le_uint16 markedInsertionListIndex;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertionProc2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphInsertionProcessor2)
-
-ContextualGlyphInsertionProcessor2::ContextualGlyphInsertionProcessor2(
-         const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success)
-{
-  contextualGlyphHeader = LEReferenceTo<ContextualGlyphInsertionHeader2>(morphSubtableHeader, success);
-  if(LE_FAILURE(success) || !contextualGlyphHeader.isValid()) return;
-  le_uint32 insertionTableOffset = SWAPL(contextualGlyphHeader->insertionTableOffset);
-  insertionTable = LEReferenceToArrayOf<le_uint16>(stHeader, success, insertionTableOffset, LE_UNBOUNDED_ARRAY);
-  entryTable = LEReferenceToArrayOf<ContextualGlyphInsertionStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-ContextualGlyphInsertionProcessor2::~ContextualGlyphInsertionProcessor2()
-{
-}
-
-void ContextualGlyphInsertionProcessor2::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-void ContextualGlyphInsertionProcessor2::doInsertion(LEGlyphStorage &glyphStorage,
-                                                     le_int16 atGlyph,
-                                                     le_int16 &index,
-                                                     le_int16 count,
-                                                     le_bool /* isKashidaLike */,
-                                                     le_bool isBefore,
-                                                     LEErrorCode &success) {
-  LEGlyphID *insertGlyphs = glyphStorage.insertGlyphs(atGlyph, count + 1, success);
-
-  if(LE_FAILURE(success) || insertGlyphs==NULL) {
-    return;
-  }
-
-  // Note: Kashida vs Split Vowel seems to only affect selection and highlighting.
-  // We note the flag, but do not layout different.
-  // https://developer.apple.com/fonts/TTRefMan/RM06/Chap6mort.html
-
-  le_int16 targetIndex = 0;
-  if(isBefore) {
-    // insert at beginning
-    insertGlyphs[targetIndex++] = glyphStorage[atGlyph];
-  } else {
-    // insert at end
-    insertGlyphs[count] = glyphStorage[atGlyph];
-  }
-
-  while(count--) {
-    insertGlyphs[targetIndex++] = insertionTable.getObject(index++, success);
-  }
-  glyphStorage.applyInsertions();
-}
-
-le_uint16 ContextualGlyphInsertionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-                                                                EntryTableIndex2 index, LEErrorCode &success)
-{
-    const ContextualGlyphInsertionStateEntry2 *entry = entryTable.getAlias(index, success);
-
-    if(LE_FAILURE(success)) return 0; // TODO- which state?
-
-    le_uint16 newState = SWAPW(entry->newStateIndex);
-    le_uint16 flags = SWAPW(entry->flags);
-
-    le_int16 markIndex = SWAPW(entry->markedInsertionListIndex);
-    if (markIndex > 0) {
-        if (markGlyph < 0 || markGlyph >= glyphStorage.getGlyphCount()) {
-           success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-           return 0;
-        }
-        le_int16 count = (flags & cgiMarkedInsertCountMask) >> 5;
-        le_bool isKashidaLike = (flags & cgiMarkedIsKashidaLike);
-        le_bool isBefore = (flags & cgiMarkInsertBefore);
-        doInsertion(glyphStorage, markGlyph, markIndex, count, isKashidaLike, isBefore, success);
-    }
-
-    le_int16 currIndex = SWAPW(entry->currentInsertionListIndex);
-    if (currIndex > 0) {
-        if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) {
-           success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-           return 0;
-        }
-        le_int16 count = flags & cgiCurrentInsertCountMask;
-        le_bool isKashidaLike = (flags & cgiCurrentIsKashidaLike);
-        le_bool isBefore = (flags & cgiCurrentInsertBefore);
-        doInsertion(glyphStorage, currGlyph, currIndex, count, isKashidaLike, isBefore, success);
-    }
-
-    if (flags & cgiSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgiDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return newState;
-}
-
-void ContextualGlyphInsertionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphInsertionProc2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHINSERTIONPROCESSOR2_H
-#define __CONTEXTUALGLYPHINSERTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "ContextualGlyphInsertion.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphInsertionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage,
-                                        le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    ContextualGlyphInsertionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphInsertionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphInsertionProcessor2();
-
-    /**
-     * Perform the actual insertion
-     * @param atGlyph index of glyph to insert at
-     * @param index index into the insertionTable (in/out)
-     * @param count number of insertions
-     * @param isKashidaLike Kashida like (vs Split Vowel like). No effect currently.
-     * @param isBefore if true, insert extra glyphs before the marked glyph
-     */
-    void doInsertion(LEGlyphStorage &glyphStorage,
-                              le_int16 atGlyph,
-                              le_int16 &index,
-                              le_int16 count,
-                              le_bool isKashidaLike,
-                              le_bool isBefore,
-                              LEErrorCode &success);
-
-
-protected:
-    le_int32 markGlyph;
-    LEReferenceToArrayOf<le_uint16> insertionTable;
-    LEReferenceToArrayOf<ContextualGlyphInsertionStateEntry2> entryTable;
-    LEReferenceTo<ContextualGlyphInsertionHeader2> contextualGlyphHeader;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "ContextualGlyphSubstProc.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor)
-
-ContextualGlyphSubstitutionProcessor::ContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor(morphSubtableHeader, success), entryTable(), contextualGlyphSubstitutionHeader(morphSubtableHeader, success)
-{
-  if (LE_FAILURE(success)) return;
-  contextualGlyphSubstitutionHeader.orphan();
-  substitutionTableOffset = SWAPW(contextualGlyphSubstitutionHeader->substitutionTableOffset);
-
-
-  entryTable = LEReferenceToArrayOf<ContextualGlyphSubstitutionStateEntry>(stateTableHeader, success,
-                                                                           (const ContextualGlyphSubstitutionStateEntry*)(&stateTableHeader->stHeader),
-                                                                           entryTableOffset, LE_UNBOUNDED_ARRAY);
-  int16Table = LEReferenceToArrayOf<le_int16>(stateTableHeader, success, (const le_int16*)(&stateTableHeader->stHeader),
-                                              0, LE_UNBOUNDED_ARRAY); // rest of the table as le_int16s
-}
-
-ContextualGlyphSubstitutionProcessor::~ContextualGlyphSubstitutionProcessor()
-{
-}
-
-void ContextualGlyphSubstitutionProcessor::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success)
-{
-  const ContextualGlyphSubstitutionStateEntry *entry = entryTable.getAlias(index, success);
-  if (LE_FAILURE(success)) return 0;
-  ByteOffset newState = SWAPW(entry->newStateOffset);
-  le_int16 flags = SWAPW(entry->flags);
-  WordOffset markOffset = SWAPW(entry->markOffset);
-  WordOffset currOffset = SWAPW(entry->currOffset);
-
-  if (markOffset != 0 && LE_SUCCESS(success)) {
-    if (markGlyph < 0 || markGlyph >= glyphStorage.getGlyphCount()) {
-       success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-       return 0;
-    }
-    LEGlyphID mGlyph = glyphStorage[markGlyph];
-    TTGlyphID newGlyph = SWAPW(int16Table.getObject(markOffset + LE_GET_GLYPH(mGlyph), success)); // whew.
-
-    glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph);
-  }
-
-  if (currOffset != 0) {
-    if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) {
-       success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-       return 0;
-    }
-    LEGlyphID thisGlyph = glyphStorage[currGlyph];
-    TTGlyphID newGlyph = SWAPW(int16Table.getObject(currOffset + LE_GET_GLYPH(thisGlyph), success)); // whew.
-
-    glyphStorage[currGlyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-  }
-
-    if (flags & cgsSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgsDontAdvance)) {
-        // should handle reverse too!
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void ContextualGlyphSubstitutionProcessor::endStateTable()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-#define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "ContextualGlyphSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphSubstitutionProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    ContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphSubstitutionProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphSubstitutionProcessor();
-
-protected:
-    ByteOffset substitutionTableOffset;
-    LEReferenceToArrayOf<ContextualGlyphSubstitutionStateEntry> entryTable;
-    LEReferenceToArrayOf<le_int16> int16Table;
-    le_int32 markGlyph;
-
-    LEReferenceTo<ContextualGlyphSubstitutionHeader> contextualGlyphSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphSubstProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor2)
-
-ContextualGlyphSubstitutionProcessor2::ContextualGlyphSubstitutionProcessor2(
-                                  const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success), contextualGlyphHeader(morphSubtableHeader, success)
-{
-    if(LE_FAILURE(success)) return;
-    le_uint32 perGlyphTableOffset = SWAPL(contextualGlyphHeader->perGlyphTableOffset);
-    perGlyphTable = LEReferenceToArrayOf<le_uint32> (stHeader, success, perGlyphTableOffset, LE_UNBOUNDED_ARRAY);
-    entryTable = LEReferenceToArrayOf<ContextualGlyphStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-ContextualGlyphSubstitutionProcessor2::~ContextualGlyphSubstitutionProcessor2()
-{
-}
-
-void ContextualGlyphSubstitutionProcessor2::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-le_uint16 ContextualGlyphSubstitutionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-    EntryTableIndex2 index, LEErrorCode &success)
-{
-    if(LE_FAILURE(success)) return 0;
-    const ContextualGlyphStateEntry2 *entry = entryTable.getAlias(index, success);
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 newState = SWAPW(entry->newStateIndex);
-    le_uint16 flags = SWAPW(entry->flags);
-    le_uint16 markIndex = SWAPW(entry->markIndex);
-    le_uint16 currIndex = SWAPW(entry->currIndex);
-
-    if (markIndex != 0x0FFFF) {
-        if (markGlyph < 0 || markGlyph >= glyphStorage.getGlyphCount()) {
-           success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-           return 0;
-        }
-        le_uint32 offset = SWAPL(perGlyphTable(markIndex, success));
-        LEGlyphID mGlyph = glyphStorage[markGlyph];
-        TTGlyphID newGlyph = lookup(offset, mGlyph, success);
-        glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph);
-    }
-
-    if (currIndex != 0x0FFFF) {
-        if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) {
-           success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-           return 0;
-        }
-        le_uint32 offset = SWAPL(perGlyphTable(currIndex, success));
-        LEGlyphID thisGlyph = glyphStorage[currGlyph];
-        TTGlyphID newGlyph = lookup(offset, thisGlyph, success);
-        glyphStorage[currGlyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-    }
-
-    if (flags & cgsSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgsDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return newState;
-}
-
-TTGlyphID ContextualGlyphSubstitutionProcessor2::lookup(le_uint32 offset, LEGlyphID gid, LEErrorCode &success)
-{
-    TTGlyphID newGlyph = 0xFFFF;
-    if(LE_FAILURE(success))  return newGlyph;
-    LEReferenceTo<LookupTable> lookupTable(perGlyphTable, success, offset);
-    if(LE_FAILURE(success))  return newGlyph;
-    le_int16 format = SWAPW(lookupTable->format);
-
-    switch (format) {
-        case ltfSimpleArray: {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SimpleArrayLookupTable> lookupTable0(lookupTable, success);
-            LEReferenceToArrayOf<LookupValue> valueArray(lookupTable0, success, &lookupTable0->valueArray[0], LE_UNBOUNDED_ARRAY);
-            if(LE_FAILURE(success))  return newGlyph;
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-            newGlyph = SWAPW(lookupTable0->valueArray(glyphCode, success));
-#endif
-            break;
-        }
-        case ltfSegmentSingle: {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SegmentSingleLookupTable> lookupTable2 = (SegmentSingleLookupTable *) lookupTable;
-            const LookupSegment *segment = lookupTable2->lookupSegment(lookupTable2->segments, gid);
-            if (segment != NULL) {
-                newGlyph = SWAPW(segment->value);
-            }
-#endif
-            break;
-        }
-        case ltfSegmentArray: {
-            //printf("Context Lookup Table Format4: specific interpretation needed!\n");
-            break;
-        }
-        case ltfSingleTable:
-        {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SingleTableLookupTable> lookupTable6 = (SingleTableLookupTable *) lookupTable;
-            const LEReferenceTo<LookupSingle> segment = lookupTable6->lookupSingle(lookupTable6->entries, gid);
-            if (segment != NULL) {
-                newGlyph = SWAPW(segment->value);
-            }
-#endif
-            break;
-        }
-        case ltfTrimmedArray: {
-            LEReferenceTo<TrimmedArrayLookupTable> lookupTable8(lookupTable, success);
-            if (LE_FAILURE(success)) return newGlyph;
-            TTGlyphID firstGlyph = SWAPW(lookupTable8->firstGlyph);
-            TTGlyphID glyphCount = SWAPW(lookupTable8->glyphCount);
-            TTGlyphID lastGlyph  = firstGlyph + glyphCount;
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-            if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-              LEReferenceToArrayOf<LookupValue> valueArray(lookupTable8, success, &lookupTable8->valueArray[0], glyphCount);
-              if (LE_FAILURE(success)) { return newGlyph; }
-              newGlyph = SWAPW(valueArray(glyphCode - firstGlyph, success));
-            }
-        }
-        default:
-            break;
-    }
-    return newGlyph;
-}
-
-void ContextualGlyphSubstitutionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstProc2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-#define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphSubstitutionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    ContextualGlyphSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphSubstitutionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphSubstitutionProcessor2();
-    TTGlyphID lookup(le_uint32 offset, LEGlyphID gid, LEErrorCode &success);
-
-protected:
-    LEReferenceToArrayOf<le_uint32>           perGlyphTable;
-    LEReferenceToArrayOf<ContextualGlyphStateEntry2> entryTable;
-
-    le_int16 perGlyphTableFormat;
-    le_int32 markGlyph;
-
-    LEReferenceTo<ContextualGlyphHeader2> contextualGlyphHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualGlyphSubstitution.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTION_H
-#define __CONTEXTUALGLYPHSUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ContextualGlyphSubstitutionHeader : MorphStateTableHeader
-{
-    ByteOffset  substitutionTableOffset;
-};
-
-struct ContextualGlyphHeader2 : MorphStateTableHeader2
-{
-    le_uint32  perGlyphTableOffset; // no more substitution tables
-};
-
-enum ContextualGlyphSubstitutionFlags
-{
-    cgsSetMark      = 0x8000,
-    cgsDontAdvance  = 0x4000,
-    cgsReserved     = 0x3FFF
-};
-
-struct ContextualGlyphSubstitutionStateEntry : StateEntry
-{
-    WordOffset markOffset;
-    WordOffset currOffset;
-};
-
-struct ContextualGlyphStateEntry2 : StateEntry2
-{
-    le_uint16 markIndex;
-    le_uint16 currIndex;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,702 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "ContextualSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    NOTE: This could be optimized somewhat by keeping track
-    of the previous sequenceIndex in the loop and doing next()
-    or prev() of the delta between that and the current
-    sequenceIndex instead of always resetting to the front.
-*/
-void ContextualSubstitutionBase::applySubstitutionLookups(
-        const LookupProcessor *lookupProcessor,
-        const LEReferenceToArrayOf<SubstitutionLookupRecord>& substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    GlyphIterator tempIterator(*glyphIterator);
-    const SubstitutionLookupRecord *substLookupRecordArrayPtr = substLookupRecordArray.getAlias(); // OK to dereference, range checked against substCount below.
-
-    for (le_int16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
-        le_uint16 sequenceIndex = SWAPW(substLookupRecordArrayPtr[subst].sequenceIndex);
-        le_uint16 lookupListIndex = SWAPW(substLookupRecordArrayPtr[subst].lookupListIndex);
-
-        tempIterator.setCurrStreamPosition(position);
-        tempIterator.next(sequenceIndex);
-
-        lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
-    }
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphIDs(const LEReferenceToArrayOf<TTGlyphID>& glyphArray, le_uint16 glyphCount,
-                                               GlyphIterator *glyphIterator, le_bool backtrack)
-{
-    le_int32 direction = 1;
-    le_int32 match = 0;
-
-    if (backtrack) {
-        match = glyphCount -1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        if (! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        TTGlyphID glyph = (TTGlyphID) glyphIterator->getCurrGlyphID();
-
-        if (glyph != SWAPW(glyphArray[match])) {
-            return FALSE;
-        }
-
-        glyphCount -= 1;
-        match += direction;
-    }
-
-    return TRUE;
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphClasses(
-    const LEReferenceToArrayOf<le_uint16> &classArray,
-    le_uint16 glyphCount,
-    GlyphIterator *glyphIterator,
-    const LEReferenceTo<ClassDefinitionTable> &classDefinitionTable,
-    LEErrorCode &success,
-    le_bool backtrack)
-{
-    if (LE_FAILURE(success)) { return FALSE; }
-
-    le_int32 direction = 1;
-    le_int32 match = 0;
-
-    if (backtrack) {
-        match = glyphCount - 1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        if (! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-        le_int32 glyphClass = classDefinitionTable->getGlyphClass(classDefinitionTable, glyph, success);
-        le_int32 matchClass = SWAPW(classArray[match]);
-
-        if (glyphClass != matchClass) {
-            // Some fonts, e.g. Traditional Arabic, have classes
-            // in the class array which aren't in the class definition
-            // table. If we're looking for such a class, pretend that
-            // we found it.
-            if (classDefinitionTable->hasGlyphClass(classDefinitionTable, matchClass, success)) {
-                return FALSE;
-            }
-        }
-
-        glyphCount -= 1;
-        match += direction;
-    }
-
-    return TRUE;
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphCoverages(const LEReferenceToArrayOf<Offset> &coverageTableOffsetArray, le_uint16 glyphCount,
-GlyphIterator *glyphIterator, const LETableReference &offsetBase, LEErrorCode &success, le_bool backtrack)
-{
-    le_int32 direction = 1;
-    le_int32 glyph = 0;
-
-    if (backtrack) {
-        glyph = glyphCount - 1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        Offset coverageTableOffset = SWAPW(coverageTableOffsetArray[glyph]);
-        LEReferenceTo<CoverageTable> coverageTable(offsetBase, success, coverageTableOffset);
-
-        if (LE_FAILURE(success) || ! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        if (coverageTable->getGlyphCoverage(coverageTable,
-                                            (LEGlyphID) glyphIterator->getCurrGlyphID(),
-                                            success) < 0) {
-            return FALSE;
-        }
-
-        glyphCount -= 1;
-        glyph += direction;
-    }
-
-    return TRUE;
-}
-
-le_uint32 ContextualSubstitutionSubtable::process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                                                  GlyphIterator *glyphIterator,
-                                                  const LEFontInstance *fontInstance,
-                                                  LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      LEReferenceTo<ContextualSubstitutionFormat1Subtable> subtable(base, success, (const ContextualSubstitutionFormat1Subtable *) this);
-      if( LE_FAILURE(success) ) {
-        return 0;
-      }
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-      LEReferenceTo<ContextualSubstitutionFormat2Subtable> subtable(base, success, (const ContextualSubstitutionFormat2Subtable *) this);
-      if( LE_FAILURE(success) ) {
-        return 0;
-      }
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 3:
-    {
-      LEReferenceTo<ContextualSubstitutionFormat3Subtable> subtable(base, success, (const ContextualSubstitutionFormat3Subtable *) this);
-      if( LE_FAILURE(success) ) {
-        return 0;
-      }
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 ContextualSubstitutionFormat1Subtable::process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                                                         GlyphIterator *glyphIterator,
-                                                         const LEFontInstance *fontInstance,
-                                                         LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-        le_uint16 srSetCount = SWAPW(subRuleSetCount);
-
-        if (coverageIndex < srSetCount) {
-            LEReferenceToArrayOf<Offset>
-                subRuleSetTableOffsetArrayRef(base, success, subRuleSetTableOffsetArray, srSetCount);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-            Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]);
-            LEReferenceTo<SubRuleSetTable> subRuleSetTable(base, success, subRuleSetTableOffset);
-            if (LE_FAILURE(success)) { return 0; }
-            le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-
-            LEReferenceToArrayOf<Offset> subRuleTableOffsetArrayRef(base, success,
-                    subRuleSetTable->subRuleTableOffsetArray, subRuleCount);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-            for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) {
-                Offset subRuleTableOffset =
-                    SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]);
-                LEReferenceTo<SubRuleTable>
-                     subRuleTable(subRuleSetTable, success, subRuleTableOffset);
-                if (LE_FAILURE(success)) { return 0; }
-                le_uint16 matchCount = SWAPW(subRuleTable->glyphCount) - 1;
-                le_uint16 substCount = SWAPW(subRuleTable->substCount);
-                LEReferenceToArrayOf<TTGlyphID> inputGlyphArray(base, success, subRuleTable->inputGlyphArray, matchCount+2);
-                if (LE_FAILURE(success)) { return 0; }
-                if (matchGlyphIDs(inputGlyphArray, matchCount, glyphIterator)) {
-                  LEReferenceToArrayOf<SubstitutionLookupRecord>
-                    substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) &subRuleTable->inputGlyphArray[matchCount], substCount);
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return matchCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-
-    return 0;
-}
-
-le_uint32 ContextualSubstitutionFormat2Subtable::process(const LETableReference &base,
-         const LookupProcessor *lookupProcessor,
-         GlyphIterator *glyphIterator,
-         const LEFontInstance *fontInstance,
-         LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-        LEReferenceTo<ClassDefinitionTable> classDefinitionTable(base, success, SWAPW(classDefTableOffset));
-        if (LE_FAILURE(success)) { return 0; }
-        le_uint16 scSetCount = SWAPW(subClassSetCount);
-        le_int32 setClass = classDefinitionTable->getGlyphClass(classDefinitionTable,
-                                                                glyphIterator->getCurrGlyphID(),
-                                                                success);
-
-        if (setClass < scSetCount) {
-            LEReferenceToArrayOf<Offset>
-                subClassSetTableOffsetArrayRef(base, success, subClassSetTableOffsetArray, scSetCount);
-            if (LE_FAILURE(success)) { return 0; }
-            if (subClassSetTableOffsetArray[setClass] != 0) {
-
-                Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]);
-                LEReferenceTo<SubClassSetTable> subClassSetTable(base, success, subClassSetTableOffset);
-                if (LE_FAILURE(success)) { return 0; }
-                le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount);
-                le_int32 position = glyphIterator->getCurrStreamPosition();
-                LEReferenceToArrayOf<Offset>
-                    subClassRuleTableOffsetArrayRef(base, success, subClassSetTable->subClassRuleTableOffsetArray, subClassRuleCount);
-                if (LE_FAILURE(success)) {
-                    return 0;
-                }
-                for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) {
-                    Offset subClassRuleTableOffset =
-                        SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]);
-                    LEReferenceTo<SubClassRuleTable>
-                        subClassRuleTable(subClassSetTable, success, subClassRuleTableOffset);
-                    if (LE_FAILURE(success)) { return 0; }
-                    le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1;
-                    le_uint16 substCount = SWAPW(subClassRuleTable->substCount);
-
-                    LEReferenceToArrayOf<le_uint16> classArray(base, success, subClassRuleTable->classArray, matchCount+1);
-
-                    if (LE_FAILURE(success)) { return 0; }
-                    if (matchGlyphClasses(classArray, matchCount, glyphIterator, classDefinitionTable, success)) {
-                        LEReferenceToArrayOf<SubstitutionLookupRecord>
-                          substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount], substCount);
-
-                        applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                        return matchCount + 1;
-                    }
-
-                    glyphIterator->setCurrStreamPosition(position);
-                }
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-
-    return 0;
-}
-
-le_uint32 ContextualSubstitutionFormat3Subtable::process(const LETableReference &base,
-                                                         const LookupProcessor *lookupProcessor,
-                                                         GlyphIterator *glyphIterator,
-                                                         const LEFontInstance *fontInstance,
-                                                         LEErrorCode& success)const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 gCount = SWAPW(glyphCount);
-    le_uint16 subCount = SWAPW(substCount);
-    le_int32 position = glyphIterator->getCurrStreamPosition();
-
-    // Back up the glyph iterator so that we
-    // can call next() before the check, which
-    // will leave it pointing at the last glyph
-    // that matched when we're done.
-    glyphIterator->prev();
-
-    LEReferenceToArrayOf<Offset> covTableOffsetArray(base, success, coverageTableOffsetArray, gCount);
-
-    if( LE_FAILURE(success) ) { return 0; }
-
-    if (ContextualSubstitutionBase::matchGlyphCoverages(covTableOffsetArray, gCount, glyphIterator, base, success)) {
-        LEReferenceToArrayOf<SubstitutionLookupRecord>
-          substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) &coverageTableOffsetArray[gCount], subCount);
-
-        ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position, success);
-
-        return gCount + 1;
-    }
-
-    glyphIterator->setCurrStreamPosition(position);
-
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionSubtable::process(const LEReferenceTo<ChainingContextualSubstitutionSubtable> &base,
-                                                          const LookupProcessor *lookupProcessor,
-                                                          GlyphIterator *glyphIterator,
-                                                          const LEFontInstance *fontInstance,
-                                                          LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      LEReferenceTo<ChainingContextualSubstitutionFormat1Subtable> subtable(base, success,  (ChainingContextualSubstitutionFormat1Subtable *) this);
-      if(LE_FAILURE(success)) return 0;
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-      LEReferenceTo<ChainingContextualSubstitutionFormat2Subtable> subtable(base, success, (const ChainingContextualSubstitutionFormat2Subtable *) this);
-      if( LE_FAILURE(success) ) { return 0; }
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 3:
-    {
-      LEReferenceTo<ChainingContextualSubstitutionFormat3Subtable> subtable(base, success, (const ChainingContextualSubstitutionFormat3Subtable *) this);
-      if( LE_FAILURE(success) ) { return 0; }
-      return subtable->process(subtable, lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-// NOTE: This could be a #define, but that seems to confuse
-// the Visual Studio .NET 2003 compiler on the calls to the
-// GlyphIterator constructor. It somehow can't decide if
-// emptyFeatureList matches an le_uint32 or an le_uint16...
-static const FeatureMask emptyFeatureList = 0x00000000UL;
-
-le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-        le_uint16 srSetCount = SWAPW(chainSubRuleSetCount);
-
-        if (coverageIndex < srSetCount) {
-            LEReferenceToArrayOf<Offset>
-                chainSubRuleSetTableOffsetArrayRef(base, success, chainSubRuleSetTableOffsetArray, srSetCount);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-            Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]);
-            LEReferenceTo<ChainSubRuleSetTable> chainSubRuleSetTable(base, success, chainSubRuleSetTableOffset);
-            if (LE_FAILURE(success)) { return 0; }
-            le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-            GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-            LEReferenceToArrayOf<Offset>
-                chainSubRuleTableOffsetArrayRef(base, success, chainSubRuleSetTable->chainSubRuleTableOffsetArray, chainSubRuleCount);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-            for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) {
-                Offset chainSubRuleTableOffset =
-                    SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]);
-                LEReferenceTo<ChainSubRuleTable>
-                     chainSubRuleTable = LEReferenceTo<ChainSubRuleTable>(chainSubRuleSetTable, success, chainSubRuleTableOffset);
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 backtrackGlyphCount = SWAPW(chainSubRuleTable->backtrackGlyphCount);
-                LEReferenceToArrayOf<TTGlyphID> backtrackGlyphArray(base, success, chainSubRuleTable->backtrackGlyphArray, backtrackGlyphCount);
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 inputGlyphCount = (le_uint16) SWAPW(chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount]) - 1;
-                LEReferenceToArrayOf<TTGlyphID>   inputGlyphArray(base, success, &chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount + 1], inputGlyphCount+2);
-
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputGlyphArray[inputGlyphCount]);
-                LEReferenceToArrayOf<TTGlyphID>   lookaheadGlyphArray(base, success, inputGlyphArray.getAlias(inputGlyphCount + 1,success), lookaheadGlyphCount+2);
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 substCount = (le_uint16) SWAPW(lookaheadGlyphArray[lookaheadGlyphCount]);
-
-                tempIterator.setCurrStreamPosition(position);
-
-                if (! tempIterator.prev(backtrackGlyphCount)) {
-                    continue;
-                }
-
-                tempIterator.prev();
-
-                if (! matchGlyphIDs(backtrackGlyphArray, backtrackGlyphCount, &tempIterator, TRUE)) {
-                    continue;
-                }
-
-                tempIterator.setCurrStreamPosition(position);
-                tempIterator.next(inputGlyphCount);
-                if (!matchGlyphIDs(lookaheadGlyphArray, lookaheadGlyphCount, &tempIterator)) {
-                    continue;
-                }
-
-                if (matchGlyphIDs(inputGlyphArray, inputGlyphCount, glyphIterator)) {
-                    LEReferenceToArrayOf<SubstitutionLookupRecord>
-                      substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) lookaheadGlyphArray.getAlias(lookaheadGlyphCount + 1,success), substCount);
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return inputGlyphCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-        LEReferenceTo<ClassDefinitionTable>
-             backtrackClassDefinitionTable(base, success, SWAPW(backtrackClassDefTableOffset));
-        LEReferenceTo<ClassDefinitionTable>
-             inputClassDefinitionTable(base, success, SWAPW(inputClassDefTableOffset));
-        LEReferenceTo<ClassDefinitionTable>
-             lookaheadClassDefinitionTable(base, success, SWAPW(lookaheadClassDefTableOffset));
-        le_uint16 scSetCount = SWAPW(chainSubClassSetCount);
-        le_int32 setClass = inputClassDefinitionTable->getGlyphClass(inputClassDefinitionTable,
-                                                                     glyphIterator->getCurrGlyphID(),
-                                                                     success);
-        LEReferenceToArrayOf<Offset>
-            chainSubClassSetTableOffsetArrayRef(base, success, chainSubClassSetTableOffsetArray, scSetCount);
-        if (LE_FAILURE(success)) {
-            return 0;
-        }
-
-        if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) {
-            Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]);
-            LEReferenceTo<ChainSubClassSetTable>
-                 chainSubClassSetTable(base, success, chainSubClassSetTableOffset);
-            if (LE_FAILURE(success)) { return 0; }
-            le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-            GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-            LEReferenceToArrayOf<Offset>
-                chainSubClassRuleTableOffsetArrayRef(base, success, chainSubClassSetTable->chainSubClassRuleTableOffsetArray, chainSubClassRuleCount);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-            for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) {
-                Offset chainSubClassRuleTableOffset =
-                    SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]);
-                LEReferenceTo<ChainSubClassRuleTable>
-                     chainSubClassRuleTable(chainSubClassSetTable, success, chainSubClassRuleTableOffset);
-                if (LE_FAILURE(success)) { return 0; }
-                le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount);
-                LEReferenceToArrayOf<le_uint16>   backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1;
-                LEReferenceToArrayOf<le_uint16>   inputClassArray(base, success, &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1],inputGlyphCount+2); // +2 for the lookaheadGlyphCount count
-                le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray.getObject(inputGlyphCount, success));
-                LEReferenceToArrayOf<le_uint16>   lookaheadClassArray(base, success, inputClassArray.getAlias(inputGlyphCount + 1,success), lookaheadGlyphCount+2); // +2 for the substCount
-
-                if( LE_FAILURE(success) ) { return 0; }
-                le_uint16 substCount = SWAPW(lookaheadClassArray[lookaheadGlyphCount]);
-
-
-                tempIterator.setCurrStreamPosition(position);
-
-                if (! tempIterator.prev(backtrackGlyphCount)) {
-                    continue;
-                }
-
-                tempIterator.prev();
-                if (! matchGlyphClasses(backtrackClassArray, backtrackGlyphCount,
-                                        &tempIterator, backtrackClassDefinitionTable, success, TRUE)) {
-                    continue;
-                }
-
-                tempIterator.setCurrStreamPosition(position);
-                tempIterator.next(inputGlyphCount);
-                if (! matchGlyphClasses(lookaheadClassArray, lookaheadGlyphCount, &tempIterator, lookaheadClassDefinitionTable, success)) {
-                    continue;
-                }
-
-                if (matchGlyphClasses(inputClassArray, inputGlyphCount, glyphIterator, inputClassDefinitionTable, success)) {
-                    LEReferenceToArrayOf<SubstitutionLookupRecord>
-                      substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) lookaheadClassArray.getAlias(lookaheadGlyphCount + 1, success), substCount);
-                    if (LE_FAILURE(success)) { return 0; }
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return inputGlyphCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode & success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount);
-    LEReferenceToArrayOf<Offset> backtrackGlyphArrayRef(base, success, backtrackCoverageTableOffsetArray, backtrkGlyphCount);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-    le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]);
-    LEReferenceToArrayOf<Offset>   inputCoverageTableOffsetArray(base, success, &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1], inputGlyphCount+2); // offset
-    if (LE_FAILURE(success)) { return 0; }
-    const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]);
-    LEReferenceToArrayOf<Offset>   lookaheadCoverageTableOffsetArray(base, success, inputCoverageTableOffsetArray.getAlias(inputGlyphCount + 1, success), lookaheadGlyphCount+2);
-
-    if( LE_FAILURE(success) ) { return 0; }
-    le_uint16 substCount = (le_uint16) SWAPW(lookaheadCoverageTableOffsetArray[lookaheadGlyphCount]);
-    le_int32 position = glyphIterator->getCurrStreamPosition();
-    GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
-    if (! tempIterator.prev(backtrkGlyphCount)) {
-        return 0;
-    }
-
-    tempIterator.prev();
-    if (! ContextualSubstitutionBase::matchGlyphCoverages(backtrackCoverageTableOffsetArray,
-                       backtrkGlyphCount, &tempIterator, base, success, TRUE)) {
-        return 0;
-    }
-
-    tempIterator.setCurrStreamPosition(position);
-    tempIterator.next(inputGlyphCount - 1);
-    if (! ContextualSubstitutionBase::matchGlyphCoverages(lookaheadCoverageTableOffsetArray,
-                        lookaheadGlyphCount, &tempIterator, base, success)) {
-        return 0;
-    }
-
-    // Back up the glyph iterator so that we
-    // can call next() before the check, which
-    // will leave it pointing at the last glyph
-    // that matched when we're done.
-    glyphIterator->prev();
-
-    if (ContextualSubstitutionBase::matchGlyphCoverages(inputCoverageTableOffsetArray,
-                                                        inputGlyphCount, glyphIterator, base, success)) {
-        LEReferenceToArrayOf<SubstitutionLookupRecord>
-          substLookupRecordArray(base, success,
-                                 (const SubstitutionLookupRecord *) lookaheadCoverageTableOffsetArray.getAlias(lookaheadGlyphCount + 1,success), substCount);
-
-        ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-        return inputGlyphCount;
-    }
-
-    glyphIterator->setCurrStreamPosition(position);
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,271 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
-#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-struct SubstitutionLookupRecord
-{
-    le_uint16  sequenceIndex;
-    le_uint16  lookupListIndex;
-};
-
-struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
-{
-    static le_bool matchGlyphIDs(
-                                 const LEReferenceToArrayOf<TTGlyphID> &glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
-        le_bool backtrack = FALSE);
-
-    static le_bool matchGlyphClasses(
-                                     const LEReferenceToArrayOf<le_uint16> &classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
-        const LEReferenceTo<ClassDefinitionTable> &classDefinitionTable, LEErrorCode &success, le_bool backtrack = FALSE);
-
-    static le_bool matchGlyphCoverages(
-                                       const LEReferenceToArrayOf<Offset> &coverageTableOffsetArray, le_uint16 glyphCount,
-        GlyphIterator *glyphIterator, const LETableReference& offsetBase, LEErrorCode &success, le_bool backtrack = FALSE);
-
-    /**
-     * little shim to wrap the Offset array in range checking
-     * @private
-     */
-    static le_bool matchGlyphCoverages(
-                                       const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
-                                       GlyphIterator *glyphIterator, const LETableReference& offsetBase, LEErrorCode &success, le_bool backtrack = FALSE) {
-      LEReferenceToArrayOf<Offset> ref(offsetBase, success, coverageTableOffsetArray, glyphCount);
-      if( LE_FAILURE(success) ) { return FALSE; }
-      return matchGlyphCoverages(ref, glyphCount, glyphIterator, offsetBase, success, backtrack);
-    }
-
-    static void applySubstitutionLookups(
-        const LookupProcessor *lookupProcessor,
-        const LEReferenceToArrayOf<SubstitutionLookupRecord>& substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success);
-};
-
-struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
-{
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                       GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
-{
-    le_uint16  subRuleSetCount;
-    Offset  subRuleSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-                       const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat1Subtable, subRuleSetTableOffsetArray)
-
-
-struct SubRuleSetTable
-{
-    le_uint16  subRuleCount;
-    Offset  subRuleTableOffsetArray[ANY_NUMBER];
-
-};
-LE_VAR_ARRAY(SubRuleSetTable, subRuleTableOffsetArray)
-
-// NOTE: Multiple variable size arrays!!
-struct SubRuleTable
-{
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    TTGlyphID inputGlyphArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubRuleTable, inputGlyphArray)
-
-struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
-{
-    Offset  classDefTableOffset;
-    le_uint16  subClassSetCount;
-    Offset  subClassSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat2Subtable, subClassSetTableOffsetArray)
-
-
-struct SubClassSetTable
-{
-    le_uint16  subClassRuleCount;
-    Offset  subClassRuleTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubClassSetTable, subClassRuleTableOffsetArray)
-
-
-// NOTE: Multiple variable size arrays!!
-struct SubClassRuleTable
-{
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    le_uint16  classArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubClassRuleTable, classArray)
-
-
-// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
-// it has an array of coverage tables instead of a single coverage table...
-//
-// NOTE: Multiple variable size arrays!!
-struct ContextualSubstitutionFormat3Subtable
-{
-    le_uint16  substFormat;
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    Offset  coverageTableOffsetArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-                       const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat3Subtable, coverageTableOffsetArray)
-
-struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
-{
-    le_uint32  process(const LEReferenceTo<ChainingContextualSubstitutionSubtable> &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-                       const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
-{
-    le_uint16  chainSubRuleSetCount;
-    Offset  chainSubRuleSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-                       const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat1Subtable, chainSubRuleSetTableOffsetArray)
-
-
-struct ChainSubRuleSetTable
-{
-    le_uint16  chainSubRuleCount;
-    Offset  chainSubRuleTableOffsetArray[ANY_NUMBER];
-
-};
-LE_VAR_ARRAY(ChainSubRuleSetTable, chainSubRuleTableOffsetArray)
-
-// NOTE: Multiple variable size arrays!!
-struct ChainSubRuleTable
-{
-    le_uint16  backtrackGlyphCount;
-    TTGlyphID backtrackGlyphArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //TTGlyphID inputGlyphArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubRuleTable, backtrackGlyphArray)
-
-struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
-{
-    Offset  backtrackClassDefTableOffset;
-    Offset  inputClassDefTableOffset;
-    Offset  lookaheadClassDefTableOffset;
-    le_uint16  chainSubClassSetCount;
-    Offset  chainSubClassSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-                       const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat2Subtable, chainSubClassSetTableOffsetArray)
-
-struct ChainSubClassSetTable
-{
-    le_uint16  chainSubClassRuleCount;
-    Offset  chainSubClassRuleTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubClassSetTable, chainSubClassRuleTableOffsetArray)
-
-
-// NOTE: Multiple variable size arrays!!
-struct ChainSubClassRuleTable
-{
-    le_uint16  backtrackGlyphCount;
-    le_uint16  backtrackClassArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //le_uint16  inputClassArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //le_uint16  lookaheadClassArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubClassRuleTable, backtrackClassArray)
-
-// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
-// it has arrays of coverage tables instead of a single coverage table...
-//
-// NOTE: Multiple variable size arrays!!
-struct ChainingContextualSubstitutionFormat3Subtable
-{
-    le_uint16  substFormat;
-    le_uint16  backtrackGlyphCount;
-    Offset  backtrackCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //Offset  inputCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //le_uint16  lookaheadCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, const LookupProcessor *lookupProcessor,
-                       GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat3Subtable, backtrackCoverageTableOffsetArray)
-
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/CoverageTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 CoverageTable::getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return -1;
-
-    switch(SWAPW(coverageFormat))
-    {
-    case 0:
-        return -1;
-
-    case 1:
-    {
-      LEReferenceTo<CoverageFormat1Table> f1Table(base, success);
-
-      return f1Table->getGlyphCoverage(f1Table, glyphID, success);
-    }
-
-    case 2:
-    {
-      LEReferenceTo<CoverageFormat2Table> f2Table(base, success);
-
-      return f2Table->getGlyphCoverage(f2Table, glyphID, success);
-    }
-
-    default:
-        return -1;
-    }
-}
-
-le_int32 CoverageFormat1Table::getGlyphCoverage(LEReferenceTo<CoverageFormat1Table> &base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return -1;
-
-    TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 count = SWAPW(glyphCount);
-    le_uint8 bit = OpenTypeUtilities::highBit(count);
-    le_uint16 power = 1 << bit;
-    le_uint16 extra = count - power;
-    le_uint16 probe = power;
-    le_uint16 index = 0;
-
-    if (count == 0) {
-      return -1;
-    }
-
-    LEReferenceToArrayOf<TTGlyphID>(base, success, glyphArray, count);
-    if(LE_FAILURE(success)) return -1;  // range checks array
-
-
-    if (SWAPW(glyphArray[extra]) <= ttGlyphID) {
-      index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-      probe >>= 1;
-
-      if (SWAPW(glyphArray[index + probe]) <= ttGlyphID) {
-        index += probe;
-      }
-    }
-
-    if (SWAPW(glyphArray[index]) == ttGlyphID) {
-      return index;
-    }
-
-    return -1;
-}
-
-le_int32 CoverageFormat2Table::getGlyphCoverage(LEReferenceTo<CoverageFormat2Table> &base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return -1;
-
-    TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 count = SWAPW(rangeCount);
-
-    LEReferenceToArrayOf<GlyphRangeRecord> rangeRecordArrayRef(base, success, rangeRecordArray, count);
-    le_int32 rangeIndex =
-        OpenTypeUtilities::getGlyphRangeIndex(ttGlyphID, rangeRecordArrayRef, success);
-
-    if (rangeIndex < 0 || LE_FAILURE(success)) { // could fail if array out of bounds
-        return -1;
-    }
-
-    TTGlyphID firstInRange = SWAPW(rangeRecordArray[rangeIndex].firstGlyph);
-    le_uint16  startCoverageIndex = SWAPW(rangeRecordArray[rangeIndex].rangeValue);
-
-    return startCoverageIndex + (ttGlyphID - firstInRange);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/CoverageTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __COVERAGETABLES_H
-#define __COVERAGETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct CoverageTable
-{
-    le_uint16 coverageFormat;
-
-    le_int32 getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-};
-
-struct CoverageFormat1Table : CoverageTable
-{
-    le_uint16  glyphCount;
-    TTGlyphID glyphArray[ANY_NUMBER];
-
-    le_int32 getGlyphCoverage(LEReferenceTo<CoverageFormat1Table> &base, LEGlyphID glyphID, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(CoverageFormat1Table, glyphArray)
-
-
-struct CoverageFormat2Table : CoverageTable
-{
-    le_uint16        rangeCount;
-    GlyphRangeRecord rangeRecordArray[ANY_NUMBER];
-
-    le_int32 getGlyphCoverage(LEReferenceTo<CoverageFormat2Table> &base, LEGlyphID glyphID, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(CoverageFormat2Table, rangeRecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/CursiveAttachmentSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "CursiveAttachmentSubtables.h"
-#include "AnchorTables.h"
-#include "GlyphIterator.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 CursiveAttachmentSubtable::process(const LEReferenceTo<CursiveAttachmentSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyphID       = glyphIterator->getCurrGlyphID();
-    le_int32  coverageIndex = getGlyphCoverage(base, glyphID, success);
-    le_uint16 eeCount       = SWAPW(entryExitCount);
-
-    LEReferenceToArrayOf<EntryExitRecord>
-        entryExitRecordsArrayRef(base, success, entryExitRecords, eeCount);
-
-    if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) {
-        glyphIterator->setCursiveGlyph();
-        return 0;
-    }
-
-    LEPoint entryAnchor, exitAnchor;
-    Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);
-    Offset exitOffset  = SWAPW(entryExitRecords[coverageIndex].exitAnchor);
-
-    if (entryOffset != 0) {
-        LEReferenceTo<AnchorTable> entryAnchorTable(base, success, entryOffset);
-
-        if( LE_SUCCESS(success) ) {
-          entryAnchorTable->getAnchor(entryAnchorTable, glyphID, fontInstance, entryAnchor, success);
-          glyphIterator->setCursiveEntryPoint(entryAnchor);
-        }
-    } else {
-        //glyphIterator->clearCursiveEntryPoint();
-    }
-
-    if (exitOffset != 0) {
-        LEReferenceTo<AnchorTable> exitAnchorTable(base, success, exitOffset);
-
-        if( LE_SUCCESS(success) ) {
-          exitAnchorTable->getAnchor(exitAnchorTable, glyphID, fontInstance, exitAnchor, success);
-          glyphIterator->setCursiveExitPoint(exitAnchor);
-        }
-    } else {
-        //glyphIterator->clearCursiveExitPoint();
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/CursiveAttachmentSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __CURSIVEATTACHMENTSUBTABLES_H
-#define __CURSIVEATTACHMENTSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class GlyphIterator;
-
-struct EntryExitRecord
-{
-    Offset entryAnchor;
-    Offset exitAnchor;
-};
-
-struct CursiveAttachmentSubtable : GlyphPositioningSubtable
-{
-    le_uint16 entryExitCount;
-    EntryExitRecord entryExitRecords[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<CursiveAttachmentSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(CursiveAttachmentSubtable, entryExitRecords)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/DefaultCharMapper.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __DEFAULTCHARMAPPER_H
-#define __DEFAULTCHARMAPPER_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class is an instance of LECharMapper which
- * implements control character filtering and bidi
- * mirroring.
- *
- * @see LECharMapper
- */
-class DefaultCharMapper : public UMemory, public LECharMapper
-{
-private:
-    le_bool fFilterControls;
-    le_bool fMirror;
-    le_bool fZWJ;
-
-    static const LEUnicode32 controlChars[];
-
-    static const le_int32 controlCharsCount;
-
-    static const LEUnicode32 controlCharsZWJ[];
-
-    static const le_int32 controlCharsZWJCount;
-
-    static const LEUnicode32 mirroredChars[];
-    static const LEUnicode32 srahCderorrim[];
-
-    static const le_int32 mirroredCharsCount;
-
-public:
-    DefaultCharMapper(le_bool filterControls, le_bool mirror, le_bool zwj = 0)
-        : fFilterControls(filterControls), fMirror(mirror), fZWJ(zwj)
-    {
-        // nothing
-    };
-
-    ~DefaultCharMapper()
-    {
-        // nada
-    };
-
-    LEUnicode32 mapChar(LEUnicode32 ch) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/DeviceTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "DeviceTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint16 DeviceTable::fieldMasks[]    = {0x0003, 0x000F, 0x00FF};
-const le_uint16 DeviceTable::fieldSignBits[] = {0x0002, 0x0008, 0x0080};
-const le_uint16 DeviceTable::fieldBits[]     = {     2,      4,      8};
-
-#define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits)
-
-le_int16 DeviceTable::getAdjustment(const LEReferenceTo<DeviceTable>&base, le_uint16 ppem, LEErrorCode &success) const
-{
-    le_int16 result = 0;
-    if (LE_FAILURE(success)) {
-        return result;
-    }
-    le_uint16 start = SWAPW(startSize);
-    le_uint16 format = SWAPW(deltaFormat) - 1;
-
-    if (ppem >= start && ppem <= SWAPW(endSize) && format < FORMAT_COUNT) {
-        le_uint16 sizeIndex = ppem - start;
-        le_uint16 bits = fieldBits[format];
-        le_uint16 count = 16 / bits;
-
-        LEReferenceToArrayOf<le_uint16> deltaValuesRef(base, success, deltaValues, (sizeIndex / count));
-
-        if(LE_FAILURE(success)) {
-          return result;
-        }
-
-        le_uint16 word = SWAPW(deltaValues[sizeIndex / count]);
-        le_uint16 fieldIndex = sizeIndex % count;
-        le_uint16 shift = 16 - (bits * (fieldIndex + 1));
-        le_uint16 field = (word >> shift) & fieldMasks[format];
-
-        result = field;
-
-        if ((field & fieldSignBits[format]) != 0) {
-            result |= ~ fieldMasks[format];
-        }
-    }
-
-    return result;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/DeviceTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __DEVICETABLES_H
-#define __DEVICETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct DeviceTable
-{
-    le_uint16  startSize;
-    le_uint16  endSize;
-    le_uint16  deltaFormat;
-    le_uint16  deltaValues[ANY_NUMBER];
-
-    le_int16   getAdjustment(const LEReferenceTo<DeviceTable> &base, le_uint16 ppem, LEErrorCode &success) const;
-
-private:
-    static const le_uint16 fieldMasks[];
-    static const le_uint16 fieldSignBits[];
-    static const le_uint16 fieldBits[];
-};
-LE_VAR_ARRAY(DeviceTable, deltaValues)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ExtensionSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 2002 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LookupProcessor.h"
-#include "ExtensionSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-// read a 32-bit value that might only be 16-bit-aligned in memory
-#define READ_LONG(code) (le_uint32)((SWAPW(*(le_uint16*)&code) << 16) + SWAPW(*(((le_uint16*)&code) + 1)))
-
-// FIXME: should look at the format too... maybe have a sub-class for it?
-le_uint32 ExtensionSubtable::process(const LEReferenceTo<ExtensionSubtable> &thisRef,
-                                     const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-                                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 elt = SWAPW(extensionLookupType);
-
-    if (elt != lookupType) {
-        le_uint32 extOffset = READ_LONG(extensionOffset);
-        LEReferenceTo<LookupSubtable> subtable(thisRef, success,  extOffset);
-
-        if(LE_SUCCESS(success)) {
-          return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance, success);
-        }
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ExtensionSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 2002-2003 - All Rights Reserved
- *
- */
-
-#ifndef __EXTENSIONSUBTABLES_H
-#define __EXTENSIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LookupProcessor.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct ExtensionSubtable //: GlyphSubstitutionSubtable
-{
-    le_uint16 substFormat;
-    le_uint16 extensionLookupType;
-    le_uint32 extensionOffset;
-
-    le_uint32 process(const LEReferenceTo<ExtensionSubtable> &base, const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/Features.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeUtilities.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEReferenceTo<FeatureTable> FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const
-{
-    LEReferenceToArrayOf<FeatureRecord>
-        featureRecordArrayRef(base, success, featureRecordArray, SWAPW(featureCount));
-
-    if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return LEReferenceTo<FeatureTable>();
-    }
-
-    Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset;
-
-    *featureTag = SWAPT(featureRecordArray[featureIndex].featureTag);
-
-    return LEReferenceTo<FeatureTable>(base, success, SWAPW(featureTableOffset));
-}
-
-#if 0
-/*
- * Note: according to the OpenType Spec. v 1.4, the entries in the Feature
- * List Table are sorted alphabetically by feature tag; however, there seem
- * to be some fonts which have an unsorted list; that's why the binary search
- * is #if 0'd out and replaced by a linear search.
- *
- * Also note: as of ICU 2.6, this method isn't called anyhow...
- */
-const FeatureTable *FeatureListTable::getFeatureTable(LETag featureTag) const
-{
-#if 0
-    Offset featureTableOffset =
-        OpenTypeUtilities::getTagOffset(featureTag, (TagAndOffsetRecord *) featureRecordArray, SWAPW(featureCount));
-
-    if (featureTableOffset == 0) {
-        return 0;
-    }
-
-    return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
-#else
-    int count = SWAPW(featureCount);
-
-    for (int i = 0; i < count; i += 1) {
-        if (SWAPT(featureRecordArray[i].featureTag) == featureTag) {
-            return (const FeatureTable *) ((char *) this + SWAPW(featureRecordArray[i].featureTableOffset));
-        }
-    }
-
-    return 0;
-#endif
-}
-#endif
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GDEFMarkFilter.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "GDEFMarkFilter.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-GDEFMarkFilter::GDEFMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success)
-  : classDefTable(gdefTable->getGlyphClassDefinitionTable(gdefTable, success))
-{
-  if(!classDefTable.isValid()) {
-    success = LE_INTERNAL_ERROR;
-  }
-}
-
-GDEFMarkFilter::~GDEFMarkFilter()
-{
-    // nothing to do?
-}
-
-le_bool GDEFMarkFilter::accept(LEGlyphID glyph, LEErrorCode &success) const
-{
-  le_int32 glyphClass = classDefTable->getGlyphClass(classDefTable, glyph, success);
-
-  return glyphClass == gcdMarkGlyph;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GDEFMarkFilter.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __GDEFMARKFILTER__H
-#define __GDEFMARKFILTER__H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class GDEFMarkFilter : public UMemory, public LEGlyphFilter
-{
-private:
-    const LEReferenceTo<GlyphClassDefinitionTable> classDefTable;
-
-    GDEFMarkFilter(const GDEFMarkFilter &other); // forbid copying of this class
-    GDEFMarkFilter &operator=(const GDEFMarkFilter &other); // forbid copying of this class
-
-public:
-    GDEFMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success);
-    virtual ~GDEFMarkFilter();
-
-    virtual le_bool accept(LEGlyphID glyph, LEErrorCode &success) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "GXLayoutEngine.h"
-#include "LEGlyphStorage.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
-
-  GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader> &morphTable, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, 0, success), fMorphTable(morphTable)
-{
-  fMorphTable.orphan();
-    // nothing else to do?
-}
-
-GXLayoutEngine::~GXLayoutEngine()
-{
-    reset();
-}
-
-// apply 'mort' table
-le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    fMorphTable->process(fMorphTable, glyphStorage, success);
-
-    return glyphStorage.getGlyphCount();
-}
-
-// apply positional tables
-void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    // FIXME: no positional processing yet...
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __GXLAYOUTENGINE_H
-#define __GXLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphStorage;
-
-/**
- * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT)
- * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's
- * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details.
- * Information about 'mort' tables is in the chapter titled "Font Files."
- *
- * @internal
- */
-class GXLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of GXLayoutEngine for
-     * a particular font, script and language. It takes the 'mort' table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a
-     * GX font.
-     *
-     * Note: GX and AAT fonts don't contain any script and language specific tables, so
-     * the script and language are ignored.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param morphTable - the 'mort' table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader> &morphTable, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~GXLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * The address of the 'mort' table
-     *
-     * @internal
-     */
-    LEReferenceTo<MorphTableHeader> fMorphTable;
-
-    /**
-     * This method does GX layout using the font's 'mort' table. It converts the
-     * input character codes to glyph indices using mapCharsToGlyphs, and then
-     * applies the 'mort' table.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method adjusts the glyph positions using the font's
-     * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                      LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "GXLayoutEngine2.h"
-#include "LEGlyphStorage.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine2)
-
-GXLayoutEngine2::GXLayoutEngine2(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader2> &morphTable, le_int32 typoFlags, LEErrorCode &success)
-  : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMorphTable(morphTable)
-{
-  // nothing else to do?
-}
-
-GXLayoutEngine2::~GXLayoutEngine2()
-{
-    reset();
-}
-
-// apply 'morx' table
-le_int32 GXLayoutEngine2::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    fMorphTable->process(fMorphTable, glyphStorage, fTypoFlags, success);
-    return glyphStorage.getGlyphCount();
-}
-
-// apply positional tables
-void GXLayoutEngine2::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    // FIXME: no positional processing yet...
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GXLayoutEngine2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GXLAYOUTENGINE2_H
-#define __GXLAYOUTENGINE2_H
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphStorage;
-
-/**
- * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT)
- * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's
- * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details.
- * Information about 'mort' tables is in the chapter titled "Font Files."
- *
- * @internal
- */
-class GXLayoutEngine2 : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of GXLayoutEngine for
-     * a particular font, script and language. It takes the 'mort' table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a
-     * GX font.
-     *
-     * Note: GX and AAT fonts don't contain any script and language specific tables, so
-     * the script and language are ignored.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param morphTable - the 'mort' table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    GXLayoutEngine2(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader2> &morphTable, le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~GXLayoutEngine2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * The address of the 'mort' table
-     *
-     * @internal
-     */
-    const LEReferenceTo<MorphTableHeader2> fMorphTable;
-
-    /**
-     * This method does GX layout using the font's 'mort' table. It converts the
-     * input character codes to glyph indices using mapCharsToGlyphs, and then
-     * applies the 'mort' table.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method adjusts the glyph positions using the font's
-     * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                      LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphDefinitionTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const LEReferenceTo<GlyphClassDefinitionTable>
-GlyphDefinitionTableHeader::getGlyphClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return LEReferenceTo<GlyphClassDefinitionTable>();
-  return LEReferenceTo<GlyphClassDefinitionTable>(base, success, SWAPW(glyphClassDefOffset));
-}
-
-const LEReferenceTo<AttachmentListTable>
-GlyphDefinitionTableHeader::getAttachmentListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<AttachmentListTable>();
-    return LEReferenceTo<AttachmentListTable>(base, success, SWAPW(attachListOffset));
-}
-
-const LEReferenceTo<LigatureCaretListTable>
-GlyphDefinitionTableHeader::getLigatureCaretListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<LigatureCaretListTable>();
-    return LEReferenceTo<LigatureCaretListTable>(base, success, SWAPW(ligCaretListOffset));
-}
-
-const LEReferenceTo<MarkAttachClassDefinitionTable>
-GlyphDefinitionTableHeader::getMarkAttachClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<MarkAttachClassDefinitionTable>();
-    return LEReferenceTo<MarkAttachClassDefinitionTable>(base, success, SWAPW(MarkAttachClassDefOffset));
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphDefinitionTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHDEFINITIONTABLES_H
-#define __GLYPHDEFINITIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-typedef ClassDefinitionTable GlyphClassDefinitionTable;
-
-enum GlyphClassDefinitions
-{
-    gcdNoGlyphClass     = 0,
-    gcdSimpleGlyph      = 1,
-    gcdLigatureGlyph    = 2,
-    gcdMarkGlyph        = 3,
-    gcdComponentGlyph   = 4
-};
-
-struct AttachmentListTable
-{
-    Offset  coverageTableOffset;
-    le_uint16  glyphCount;
-    Offset  attachPointTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(AttachmentListTable, attachPointTableOffsetArray)
-
-struct AttachPointTable
-{
-    le_uint16  pointCount;
-    le_uint16  pointIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(AttachPointTable, pointIndexArray)
-
-struct LigatureCaretListTable
-{
-    Offset  coverageTableOffset;
-    le_uint16  ligGlyphCount;
-    Offset  ligGlyphTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureCaretListTable, ligGlyphTableOffsetArray)
-
-struct LigatureGlyphTable
-{
-    le_uint16  caretCount;
-    Offset  caretValueTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureGlyphTable, caretValueTableOffsetArray)
-
-struct CaretValueTable
-{
-    le_uint16  caretValueFormat;
-};
-
-struct CaretValueFormat1Table : CaretValueTable
-{
-    le_int16   coordinate;
-};
-
-struct CaretValueFormat2Table : CaretValueTable
-{
-    le_uint16  caretValuePoint;
-};
-
-struct CaretValueFormat3Table : CaretValueTable
-{
-    le_int16   coordinate;
-    Offset  deviceTableOffset;
-};
-
-typedef ClassDefinitionTable MarkAttachClassDefinitionTable;
-
-struct GlyphDefinitionTableHeader
-{
-    fixed32 version;
-    Offset  glyphClassDefOffset;
-    Offset  attachListOffset;
-    Offset  ligCaretListOffset;
-    Offset  MarkAttachClassDefOffset;
-
-    const LEReferenceTo<GlyphClassDefinitionTable>
-    getGlyphClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                 LEErrorCode &success) const;
-    const LEReferenceTo<AttachmentListTable>
-    getAttachmentListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                           LEErrorCode &success)const ;
-    const LEReferenceTo<LigatureCaretListTable>
-    getLigatureCaretListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                              LEErrorCode &success) const;
-    const LEReferenceTo<MarkAttachClassDefinitionTable>
-    getMarkAttachClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                      LEErrorCode &success) const;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphIterator.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,559 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositionAdjustments.h"
-#include "GlyphIterator.h"
-#include "LEGlyphStorage.h"
-#include "Lookups.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-                             FeatureMask theFeatureMask, const LEReferenceTo<GlyphDefinitionTableHeader> &theGlyphDefinitionTableHeader, LEErrorCode &success)
-  : direction(1), position(-1), nextLimit(-1), prevLimit(-1),
-    glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments),
-    srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), glyphGroup(0),
-    glyphClassDefinitionTable(), markAttachClassDefinitionTable()
-
-{
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (theGlyphDefinitionTableHeader.isValid()) {
-      glyphClassDefinitionTable = theGlyphDefinitionTableHeader
-        -> getGlyphClassDefinitionTable(theGlyphDefinitionTableHeader, success);
-      markAttachClassDefinitionTable = theGlyphDefinitionTableHeader
-        ->getMarkAttachClassDefinitionTable(theGlyphDefinitionTableHeader, success);
-    }
-
-    nextLimit = glyphCount;
-
-    if (rightToLeft) {
-        direction = -1;
-        position = glyphCount;
-        nextLimit = -1;
-        prevLimit = glyphCount;
-    }
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = that.lookupFlags;
-    featureMask = that.featureMask;
-    glyphGroup  = that.glyphGroup;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = that.lookupFlags;
-    featureMask = newFeatureMask;
-    glyphGroup  = 0;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = newLookupFlags;
-    featureMask = that.featureMask;
-    glyphGroup  = that.glyphGroup;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::~GlyphIterator()
-{
-    // nothing to do, right?
-}
-
-void GlyphIterator::reset(le_uint16 newLookupFlags, FeatureMask newFeatureMask)
-{
-    position     = prevLimit;
-    featureMask  = newFeatureMask;
-    glyphGroup   = 0;
-    lookupFlags  = newLookupFlags;
-    filterResetCache();
-}
-
-LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count, LEErrorCode& success)
-{
-    return glyphStorage.insertGlyphs(position, count, success);
-}
-
-le_int32 GlyphIterator::applyInsertions()
-{
-    le_int32 newGlyphCount = glyphStorage.applyInsertions();
-
-    if (direction < 0) {
-        prevLimit = newGlyphCount;
-    } else {
-        nextLimit = newGlyphCount;
-    }
-
-    return newGlyphCount;
-}
-
-le_int32 GlyphIterator::getCurrStreamPosition() const
-{
-    return position;
-}
-
-le_bool GlyphIterator::isRightToLeft() const
-{
-    return direction < 0;
-}
-
-le_bool GlyphIterator::ignoresMarks() const
-{
-    return (lookupFlags & lfIgnoreMarks) != 0;
-}
-
-le_bool GlyphIterator::baselineIsLogicalEnd() const
-{
-    return (lookupFlags & lfBaselineIsLogicalEnd) != 0;
-}
-
-LEGlyphID GlyphIterator::getCurrGlyphID() const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return 0xFFFF;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return 0xFFFF;
-        }
-    }
-
-    return glyphStorage[position];
-}
-
-void GlyphIterator::getCursiveEntryPoint(LEPoint &entryPoint) const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->getEntryPoint(position, entryPoint);
-}
-
-void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->getExitPoint(position, exitPoint);
-}
-
-void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID)
-{
-    LEGlyphID glyph = glyphStorage[position];
-
-    glyphStorage[position] = LE_SET_GLYPH(glyph, glyphID);
-}
-
-void GlyphIterator::setCurrStreamPosition(le_int32 newPosition)
-{
-    if (direction < 0) {
-        if (newPosition >= prevLimit) {
-            position = prevLimit;
-            return;
-        }
-
-        if (newPosition <= nextLimit) {
-            position = nextLimit;
-            return;
-        }
-    } else {
-        if (newPosition <= prevLimit) {
-            position = prevLimit;
-            return;
-        }
-
-        if (newPosition >= nextLimit) {
-            position = nextLimit;
-            return;
-        }
-    }
-
-    position = newPosition - direction;
-    next();
-}
-
-void GlyphIterator::setCurrGlyphBaseOffset(le_int32 baseOffset)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setBaseOffset(position, baseOffset);
-}
-
-void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                                      float xAdvanceAdjust, float yAdvanceAdjust)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->adjustXPlacement(position, xPlacementAdjust);
-    glyphPositionAdjustments->adjustYPlacement(position, yPlacementAdjust);
-    glyphPositionAdjustments->adjustXAdvance(position, xAdvanceAdjust);
-    glyphPositionAdjustments->adjustYAdvance(position, yAdvanceAdjust);
-}
-
-void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                                      float xAdvanceAdjust, float yAdvanceAdjust)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setXPlacement(position, xPlacementAdjust);
-    glyphPositionAdjustments->setYPlacement(position, yPlacementAdjust);
-    glyphPositionAdjustments->setXAdvance(position, xAdvanceAdjust);
-    glyphPositionAdjustments->setYAdvance(position, yAdvanceAdjust);
-}
-
-void GlyphIterator::clearCursiveEntryPoint()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->clearEntryPoint(position);
-}
-
-void GlyphIterator::clearCursiveExitPoint()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->clearExitPoint(position);
-}
-
-void GlyphIterator::setCursiveEntryPoint(LEPoint &entryPoint)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setEntryPoint(position, entryPoint, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::setCursiveExitPoint(LEPoint &exitPoint)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setExitPoint(position, exitPoint, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::setCursiveGlyph()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setCursiveGlyph(position, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::filterResetCache(void) {
-  filterCacheValid = FALSE;
-}
-
-le_bool GlyphIterator::filterGlyph(le_uint32 index)
-{
-    LEGlyphID glyphID = glyphStorage[index];
-
-    if (!filterCacheValid || filterCache.id != glyphID) {
-      filterCache.id = glyphID;
-
-      le_bool &filterResult = filterCache.result;  // NB: Making this a reference to accept the updated value, in case
-                                               // we want more fancy cacheing in the future.
-      if (LE_GET_GLYPH(glyphID) >= 0xFFFE) {
-        filterResult = TRUE;
-      } else {
-        LEErrorCode success = LE_NO_ERROR;
-        le_int32 glyphClass = gcdNoGlyphClass;
-        if (glyphClassDefinitionTable.isValid()) {
-          glyphClass = glyphClassDefinitionTable->getGlyphClass(glyphClassDefinitionTable, glyphID, success);
-        }
-        switch (glyphClass) {
-        case gcdNoGlyphClass:
-          filterResult = FALSE;
-          break;
-
-        case gcdSimpleGlyph:
-          filterResult = (lookupFlags & lfIgnoreBaseGlyphs) != 0;
-          break;
-
-        case gcdLigatureGlyph:
-          filterResult = (lookupFlags & lfIgnoreLigatures) != 0;
-          break;
-
-        case gcdMarkGlyph:
-          if ((lookupFlags & lfIgnoreMarks) != 0) {
-            filterResult = TRUE;
-          } else {
-            le_uint16 markAttachType = (lookupFlags & lfMarkAttachTypeMask) >> lfMarkAttachTypeShift;
-
-            if ((markAttachType != 0) && (markAttachClassDefinitionTable.isValid())) {
-              filterResult = (markAttachClassDefinitionTable
-                          -> getGlyphClass(markAttachClassDefinitionTable, glyphID, success) != markAttachType);
-            } else {
-              filterResult = FALSE;
-            }
-          }
-          break;
-
-        case gcdComponentGlyph:
-          filterResult = ((lookupFlags & lfIgnoreBaseGlyphs) != 0);
-          break;
-
-        default:
-          filterResult = FALSE;
-          break;
-        }
-      }
-      filterCacheValid = TRUE;
-    }
-
-    return filterCache.result;
-}
-
-le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) const
-{
-    if (featureMask == 0) {
-        return TRUE;
-    }
-
-    LEErrorCode success = LE_NO_ERROR;
-    FeatureMask fm = glyphStorage.getAuxData(position, success);
-
-    return ((fm & featureMask) == featureMask) && (!matchGroup || (le_int32)(fm & LE_GLYPH_GROUP_MASK) == glyphGroup);
-}
-
-le_bool GlyphIterator::findFeatureTag()
-{
-  //glyphGroup = 0;
-
-    while (nextInternal()) {
-        if (hasFeatureTag(FALSE)) {
-            LEErrorCode success = LE_NO_ERROR;
-
-            glyphGroup = (glyphStorage.getAuxData(position, success) & LE_GLYPH_GROUP_MASK);
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-
-le_bool GlyphIterator::nextInternal(le_uint32 delta)
-{
-    le_int32 newPosition = position;
-
-    while (newPosition != nextLimit && delta > 0) {
-        do {
-            newPosition += direction;
-            //fprintf(stderr,"%s:%d:%s: newPosition = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, newPosition, delta);
-        } while (newPosition != nextLimit && filterGlyph(newPosition));
-
-        delta -= 1;
-    }
-
-    position = newPosition;
-
-    //fprintf(stderr,"%s:%d:%s: exit position = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, position, delta);
-    return position != nextLimit;
-}
-
-le_bool GlyphIterator::next(le_uint32 delta)
-{
-    return nextInternal(delta) && hasFeatureTag(TRUE);
-}
-
-le_bool GlyphIterator::prevInternal(le_uint32 delta)
-{
-    le_int32 newPosition = position;
-
-    while (newPosition != prevLimit && delta > 0) {
-        do {
-            newPosition -= direction;
-            //fprintf(stderr,"%s:%d:%s: newPosition = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, newPosition, delta);
-        } while (newPosition != prevLimit && filterGlyph(newPosition));
-
-        delta -= 1;
-    }
-
-    position = newPosition;
-
-    //fprintf(stderr,"%s:%d:%s: exit position = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, position, delta);
-    return position != prevLimit;
-}
-
-le_bool GlyphIterator::prev(le_uint32 delta)
-{
-    return prevInternal(delta) && hasFeatureTag(TRUE);
-}
-
-le_int32 GlyphIterator::getMarkComponent(le_int32 markPosition) const
-{
-    le_int32 component = 0;
-    le_int32 posn;
-
-    for (posn = position; posn != markPosition; posn += direction) {
-        if (glyphStorage[posn] == 0xFFFE) {
-            component += 1;
-        }
-    }
-
-    return component;
-}
-
-// This is basically prevInternal except that it
-// doesn't take a delta argument, and it doesn't
-// filter out 0xFFFE glyphs.
-le_bool GlyphIterator::findMark2Glyph()
-{
-    le_int32 newPosition = position;
-
-    do {
-        newPosition -= direction;
-    } while (newPosition != prevLimit && glyphStorage[newPosition] != 0xFFFE && filterGlyph(newPosition));
-
-    position = newPosition;
-
-    return position != prevLimit;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphIterator.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHITERATOR_H
-#define __GLYPHITERATOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-class GlyphPositionAdjustments;
-
-class GlyphIterator : public UMemory {
-public:
-    GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-                  FeatureMask theFeatureMask, const LEReferenceTo<GlyphDefinitionTableHeader> &theGlyphDefinitionTableHeader, LEErrorCode &success);
-
-    GlyphIterator(GlyphIterator &that);
-
-    GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask);
-
-    GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags);
-
-    virtual ~GlyphIterator();
-
-    void reset(le_uint16 newLookupFlags, LETag newFeatureTag);
-
-    le_bool next(le_uint32 delta = 1);
-    le_bool prev(le_uint32 delta = 1);
-    le_bool findFeatureTag();
-
-    le_bool isRightToLeft() const;
-    le_bool ignoresMarks() const;
-
-    le_bool baselineIsLogicalEnd() const;
-
-    LEGlyphID getCurrGlyphID() const;
-    le_int32  getCurrStreamPosition() const;
-
-    le_int32  getMarkComponent(le_int32 markPosition) const;
-    le_bool   findMark2Glyph();
-
-    void getCursiveEntryPoint(LEPoint &entryPoint) const;
-    void getCursiveExitPoint(LEPoint &exitPoint) const;
-
-    void setCurrGlyphID(TTGlyphID glyphID);
-    void setCurrStreamPosition(le_int32 position);
-    void setCurrGlyphBaseOffset(le_int32 baseOffset);
-    void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                           float xAdvanceAdjust,   float yAdvanceAdjust);
-
-    void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                        float xAdvanceAdjust,   float yAdvanceAdjust);
-
-    void clearCursiveEntryPoint();
-    void clearCursiveExitPoint();
-    void setCursiveEntryPoint(LEPoint &entryPoint);
-    void setCursiveExitPoint(LEPoint &exitPoint);
-    void setCursiveGlyph();
-
-    LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
-    le_int32 applyInsertions();
-
-private:
-    le_bool filterGlyph(le_uint32 index);
-    le_bool hasFeatureTag(le_bool matchGroup) const;
-    le_bool nextInternal(le_uint32 delta = 1);
-    le_bool prevInternal(le_uint32 delta = 1);
-
-    le_int32  direction;
-    le_int32  position;
-    le_int32  nextLimit;
-    le_int32  prevLimit;
-
-    LEGlyphStorage &glyphStorage;
-    GlyphPositionAdjustments *glyphPositionAdjustments;
-
-    le_int32    srcIndex;
-    le_int32    destIndex;
-    le_uint16   lookupFlags;
-    FeatureMask featureMask;
-    le_int32    glyphGroup;
-
-    LEReferenceTo<GlyphClassDefinitionTable> glyphClassDefinitionTable;
-    LEReferenceTo<MarkAttachClassDefinitionTable> markAttachClassDefinitionTable;
-
-    GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
-
-    struct {
-      LEGlyphID   id;
-      le_bool     result;
-    } filterCache;
-    le_bool   filterCacheValid;
-
-    void filterResetCache(void);
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphLookupTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphLookupTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_bool GlyphLookupTableHeader::coversScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const
-{
-  LEReferenceTo<ScriptListTable> scriptListTable(base, success, SWAPW(scriptListOffset));
-
-  return (scriptListOffset != 0) && scriptListTable->findScript(scriptListTable, scriptTag, success) .isValid();
-}
-
-le_bool GlyphLookupTableHeader::coversScriptAndLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const
-{
-  LEReferenceTo<ScriptListTable> scriptListTable(base, success, SWAPW(scriptListOffset));
-  LEReferenceTo<LangSysTable> langSysTable = scriptListTable->findLanguage(scriptListTable,
-                                    scriptTag, languageTag, success, exactMatch);
-
-    // FIXME: could check featureListOffset, lookupListOffset, and lookup count...
-    // Note: don't have to SWAPW langSysTable->featureCount to check for non-zero.
-  return LE_SUCCESS(success)&&langSysTable.isValid() && langSysTable->featureCount != 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphLookupTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHLOOKUPTABLES_H
-#define __GLYPHLOOKUPTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct GlyphLookupTableHeader
-{
-    fixed32 version;
-    Offset  scriptListOffset;
-    Offset  featureListOffset;
-    Offset  lookupListOffset;
-
-  le_bool coversScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const;
-  le_bool coversScriptAndLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-
-U_NAMESPACE_END
-
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPositionAdjustments.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "GlyphPositionAdjustments.h"
-#include "LEGlyphStorage.h"
-#include "LEFontInstance.h"
-
-U_NAMESPACE_BEGIN
-
-#define CHECK_ALLOCATE_ARRAY(array, type, size) \
-    if (array == NULL) { \
-        array = (type *) new type[size]; \
-    }
-
-GlyphPositionAdjustments::GlyphPositionAdjustments(le_int32 glyphCount)
-    : fGlyphCount(glyphCount), fEntryExitPoints(NULL), fAdjustments(NULL)
-{
-    fAdjustments = (Adjustment *) new Adjustment[glyphCount];
-}
-
-GlyphPositionAdjustments::~GlyphPositionAdjustments()
-{
-    delete[] fEntryExitPoints;
-    delete[] fAdjustments;
-}
-
-const LEPoint *GlyphPositionAdjustments::getEntryPoint(le_int32 index, LEPoint &entryPoint) const
-{
-    if (fEntryExitPoints == NULL) {
-        return NULL;
-    }
-
-    return fEntryExitPoints[index].getEntryPoint(entryPoint);
-}
-
-const LEPoint *GlyphPositionAdjustments::getExitPoint(le_int32 index, LEPoint &exitPoint)const
-{
-    if (fEntryExitPoints == NULL) {
-        return NULL;
-    }
-
-    return fEntryExitPoints[index].getExitPoint(exitPoint);
-}
-
-void GlyphPositionAdjustments::clearEntryPoint(le_int32 index)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].clearEntryPoint();
-}
-
-void GlyphPositionAdjustments::clearExitPoint(le_int32 index)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].clearExitPoint();
-}
-
-void GlyphPositionAdjustments::setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setEntryPoint(newEntryPoint, baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setExitPoint(newExitPoint, baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setCursiveGlyph(baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance)
-{
-    if (! hasCursiveGlyphs()) {
-        return;
-    }
-
-    le_int32 start = 0, end = fGlyphCount, dir = 1;
-    le_int32 firstExitPoint = -1, lastExitPoint = -1;
-    LEPoint entryAnchor, exitAnchor, pixels;
-    LEGlyphID lastExitGlyphID = 0;
-    float baselineAdjustment = 0;
-
-    // This removes a possible warning about
-    // using exitAnchor before it's been initialized.
-    exitAnchor.fX = exitAnchor.fY = 0;
-
-    if (rightToLeft) {
-        start = fGlyphCount - 1;
-        end = -1;
-        dir = -1;
-    }
-
-    for (le_int32 i = start; i != end; i += dir) {
-        LEGlyphID glyphID = glyphStorage[i];
-
-        if (isCursiveGlyph(i)) {
-            if (lastExitPoint >= 0 && getEntryPoint(i, entryAnchor) != NULL) {
-                float anchorDiffX = exitAnchor.fX - entryAnchor.fX;
-                float anchorDiffY = exitAnchor.fY - entryAnchor.fY;
-
-                baselineAdjustment += anchorDiffY;
-                adjustYPlacement(i, baselineAdjustment);
-
-                if (rightToLeft) {
-                    LEPoint secondAdvance;
-
-                    fontInstance->getGlyphAdvance(glyphID, pixels);
-                    fontInstance->pixelsToUnits(pixels, secondAdvance);
-
-                    adjustXAdvance(i, -(anchorDiffX + secondAdvance.fX));
-                } else {
-                    LEPoint firstAdvance;
-
-                    fontInstance->getGlyphAdvance(lastExitGlyphID, pixels);
-                    fontInstance->pixelsToUnits(pixels, firstAdvance);
-
-                    adjustXAdvance(lastExitPoint, anchorDiffX - firstAdvance.fX);
-                }
-            }
-
-            lastExitPoint = i;
-
-            if (getExitPoint(i, exitAnchor) != NULL) {
-                if (firstExitPoint < 0) {
-                    firstExitPoint = i;
-                }
-
-                lastExitGlyphID = glyphID;
-            } else {
-                if (baselineIsLogicalEnd(i) && firstExitPoint >= 0 && lastExitPoint >= 0) {
-                    le_int32 limit = lastExitPoint /*+ dir*/;
-                    LEPoint dummyAnchor;
-
-                    if (getEntryPoint(i, dummyAnchor) != NULL) {
-                        limit += dir;
-                    }
-
-                    for (le_int32 j = firstExitPoint; j != limit; j += dir) {
-                        if (isCursiveGlyph(j)) {
-                            adjustYPlacement(j, -baselineAdjustment);
-                        }
-                    }
-                }
-
-                firstExitPoint = lastExitPoint = -1;
-                baselineAdjustment = 0;
-            }
-        }
-    }
-}
-
-LEPoint *GlyphPositionAdjustments::EntryExitPoint::getEntryPoint(LEPoint &entryPoint) const
-{
-    if (fFlags & EEF_HAS_ENTRY_POINT) {
-        entryPoint = fEntryPoint;
-        return &entryPoint;
-    }
-
-    return NULL;
-}
-
-LEPoint *GlyphPositionAdjustments::EntryExitPoint::getExitPoint(LEPoint &exitPoint) const
-{
-    if (fFlags & EEF_HAS_EXIT_POINT) {
-        exitPoint = fExitPoint;
-        return &exitPoint;
-    }
-
-    return NULL;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPositionAdjustments.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,401 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONADJUSTMENTS_H
-#define __GLYPHPOSITIONADJUSTMENTS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-class LEFontInstance;
-
-class GlyphPositionAdjustments : public UMemory
-{
-private:
-    class Adjustment : public UMemory {
-    public:
-
-        inline Adjustment();
-        inline Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1);
-        inline ~Adjustment();
-
-        inline float    getXPlacement() const;
-        inline float    getYPlacement() const;
-        inline float    getXAdvance() const;
-        inline float    getYAdvance() const;
-
-        inline le_int32 getBaseOffset() const;
-
-        inline void     setXPlacement(float newXPlacement);
-        inline void     setYPlacement(float newYPlacement);
-        inline void     setXAdvance(float newXAdvance);
-        inline void     setYAdvance(float newYAdvance);
-
-        inline void     setBaseOffset(le_int32 newBaseOffset);
-
-        inline void    adjustXPlacement(float xAdjustment);
-        inline void    adjustYPlacement(float yAdjustment);
-        inline void    adjustXAdvance(float xAdjustment);
-        inline void    adjustYAdvance(float yAdjustment);
-
-    private:
-        float xPlacement;
-        float yPlacement;
-        float xAdvance;
-        float yAdvance;
-
-        le_int32 baseOffset;
-
-        // allow copying of this class because all of its fields are simple types
-    };
-
-    class EntryExitPoint : public UMemory
-    {
-    public:
-        inline EntryExitPoint();
-        inline ~EntryExitPoint();
-
-        inline le_bool isCursiveGlyph() const;
-        inline le_bool baselineIsLogicalEnd() const;
-
-        LEPoint *getEntryPoint(LEPoint &entryPoint) const;
-        LEPoint *getExitPoint(LEPoint &exitPoint) const;
-
-        inline void clearEntryPoint();
-        inline void clearExitPoint();
-        inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
-        inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
-        inline void setCursiveGlyph(le_bool baselineIsLogicalEnd);
-
-    private:
-        enum EntryExitFlags
-        {
-            EEF_HAS_ENTRY_POINT         = 0x80000000L,
-            EEF_HAS_EXIT_POINT          = 0x40000000L,
-            EEF_IS_CURSIVE_GLYPH        = 0x20000000L,
-            EEF_BASELINE_IS_LOGICAL_END = 0x10000000L
-        };
-
-        le_uint32 fFlags;
-        LEPoint fEntryPoint;
-        LEPoint fExitPoint;
-    };
-
-    le_int32 fGlyphCount;
-    EntryExitPoint *fEntryExitPoints;
-    Adjustment *fAdjustments;
-
-    GlyphPositionAdjustments();
-
-public:
-    GlyphPositionAdjustments(le_int32 glyphCount);
-    ~GlyphPositionAdjustments();
-
-    inline le_bool hasCursiveGlyphs() const;
-    inline le_bool isCursiveGlyph(le_int32 index) const;
-    inline le_bool baselineIsLogicalEnd(le_int32 index) const;
-
-    const LEPoint *getEntryPoint(le_int32 index, LEPoint &entryPoint) const;
-    const LEPoint *getExitPoint(le_int32 index, LEPoint &exitPoint) const;
-
-    inline float getXPlacement(le_int32 index) const;
-    inline float getYPlacement(le_int32 index) const;
-    inline float getXAdvance(le_int32 index) const;
-    inline float getYAdvance(le_int32 index) const;
-
-    inline le_int32 getBaseOffset(le_int32 index) const;
-
-    inline void setXPlacement(le_int32 index, float newXPlacement);
-    inline void setYPlacement(le_int32 index, float newYPlacement);
-    inline void setXAdvance(le_int32 index, float newXAdvance);
-    inline void setYAdvance(le_int32 index, float newYAdvance);
-
-    inline void setBaseOffset(le_int32 index, le_int32 newBaseOffset);
-
-    inline void adjustXPlacement(le_int32 index, float xAdjustment);
-    inline void adjustYPlacement(le_int32 index, float yAdjustment);
-    inline void adjustXAdvance(le_int32 index, float xAdjustment);
-    inline void adjustYAdvance(le_int32 index, float yAdjustment);
-
-    void clearEntryPoint(le_int32 index);
-    void clearExitPoint(le_int32 index);
-    void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
-    void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
-    void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd);
-
-    void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance);
-};
-
-inline GlyphPositionAdjustments::Adjustment::Adjustment()
-  : xPlacement(0), yPlacement(0), xAdvance(0), yAdvance(0), baseOffset(-1)
-{
-    // nothing else to do!
-}
-
-inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff)
-  : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff)
-{
-    // nothing else to do!
-}
-
-inline GlyphPositionAdjustments::Adjustment::~Adjustment()
-{
-    // nothing to do!
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getXPlacement() const
-{
-    return xPlacement;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getYPlacement() const
-{
-    return yPlacement;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getXAdvance() const
-{
-    return xAdvance;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getYAdvance() const
-{
-    return yAdvance;
-}
-
-inline le_int32 GlyphPositionAdjustments::Adjustment::getBaseOffset() const
-{
-    return baseOffset;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setXPlacement(float newXPlacement)
-{
-    xPlacement = newXPlacement;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setYPlacement(float newYPlacement)
-{
-    yPlacement = newYPlacement;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setXAdvance(float newXAdvance)
-{
-    xAdvance = newXAdvance;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setYAdvance(float newYAdvance)
-{
-    yAdvance = newYAdvance;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setBaseOffset(le_int32 newBaseOffset)
-{
-    baseOffset = newBaseOffset;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustXPlacement(float xAdjustment)
-{
-    xPlacement += xAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustYPlacement(float yAdjustment)
-{
-    yPlacement += yAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustXAdvance(float xAdjustment)
-{
-    xAdvance += xAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustYAdvance(float yAdjustment)
-{
-    yAdvance += yAdjustment;
-}
-
-inline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint()
-    : fFlags(0)
-{
-    fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0;
-}
-
-inline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint()
-{
-    // nothing special to do
-}
-
-inline le_bool GlyphPositionAdjustments::EntryExitPoint::isCursiveGlyph() const
-{
-    return (fFlags & EEF_IS_CURSIVE_GLYPH) != 0;
-}
-
-inline le_bool GlyphPositionAdjustments::EntryExitPoint::baselineIsLogicalEnd() const
-{
-    return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::clearEntryPoint()
-{
-    fFlags &= ~EEF_HAS_ENTRY_POINT;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::clearExitPoint()
-{
-    fFlags &= ~EEF_HAS_EXIT_POINT;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH);
-    }
-
-    fEntryPoint = newEntryPoint;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH);
-    }
-
-    fExitPoint  = newExitPoint;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= EEF_IS_CURSIVE_GLYPH;
-    }
-}
-
-inline le_bool GlyphPositionAdjustments::isCursiveGlyph(le_int32 index) const
-{
-    return fEntryExitPoints != NULL && fEntryExitPoints[index].isCursiveGlyph();
-}
-
-inline le_bool GlyphPositionAdjustments::baselineIsLogicalEnd(le_int32 index) const
-{
-    return fEntryExitPoints != NULL && fEntryExitPoints[index].baselineIsLogicalEnd();
-}
-
-inline float GlyphPositionAdjustments::getXPlacement(le_int32 index) const
-{
-    return fAdjustments[index].getXPlacement();
-}
-
-inline float GlyphPositionAdjustments::getYPlacement(le_int32 index) const
-{
-    return fAdjustments[index].getYPlacement();
-}
-
-inline float GlyphPositionAdjustments::getXAdvance(le_int32 index) const
-{
-    return fAdjustments[index].getXAdvance();
-}
-
-inline float GlyphPositionAdjustments::getYAdvance(le_int32 index) const
-{
-    return fAdjustments[index].getYAdvance();
-}
-
-
-inline le_int32 GlyphPositionAdjustments::getBaseOffset(le_int32 index) const
-{
-    return fAdjustments[index].getBaseOffset();
-}
-
-inline void GlyphPositionAdjustments::setXPlacement(le_int32 index, float newXPlacement)
-{
-    fAdjustments[index].setXPlacement(newXPlacement);
-}
-
-inline void GlyphPositionAdjustments::setYPlacement(le_int32 index, float newYPlacement)
-{
-    fAdjustments[index].setYPlacement(newYPlacement);
-}
-
-inline void GlyphPositionAdjustments::setXAdvance(le_int32 index, float newXAdvance)
-{
-    fAdjustments[index].setXAdvance(newXAdvance);
-}
-
-inline void GlyphPositionAdjustments::setYAdvance(le_int32 index, float newYAdvance)
-{
-    fAdjustments[index].setYAdvance(newYAdvance);
-}
-
-inline void GlyphPositionAdjustments::setBaseOffset(le_int32 index, le_int32 newBaseOffset)
-{
-    fAdjustments[index].setBaseOffset(newBaseOffset);
-}
-
-inline void GlyphPositionAdjustments::adjustXPlacement(le_int32 index, float xAdjustment)
-{
-    fAdjustments[index].adjustXPlacement(xAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustYPlacement(le_int32 index, float yAdjustment)
-{
-    fAdjustments[index].adjustYPlacement(yAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustXAdvance(le_int32 index, float xAdjustment)
-{
-    fAdjustments[index].adjustXAdvance(xAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustYAdvance(le_int32 index, float yAdjustment)
-{
-    fAdjustments[index].adjustYAdvance(yAdjustment);
-}
-
-inline le_bool GlyphPositionAdjustments::hasCursiveGlyphs() const
-{
-    return fEntryExitPoints != NULL;
-}
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPositioningTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "GlyphPosnLookupProc.h"
-#include "CursiveAttachmentSubtables.h"
-#include "LEGlyphStorage.h"
-#include "GlyphPositionAdjustments.h"
-
-U_NAMESPACE_BEGIN
-
-void GlyphPositioningTableHeader::process(const LEReferenceTo<GlyphPositioningTableHeader> &base, LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
-                                          LETag scriptTag, LETag languageTag,
-                                          const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, LEErrorCode &success,
-                                          const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    GlyphPositioningLookupProcessor processor(base, scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success);
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance, success);
-
-    glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPositioningTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONINGTABLES_H
-#define __GLYPHPOSITIONINGTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphLookupTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEFontInstance;
-class  LEGlyphStorage;
-class  LEGlyphFilter;
-class  GlyphPositionAdjustments;
-struct GlyphDefinitionTableHeader;
-
-struct GlyphPositioningTableHeader : public GlyphLookupTableHeader
-{
-  void    process(const LEReferenceTo<GlyphPositioningTableHeader> &base, LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-                const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, LEErrorCode &success,
-                const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
-};
-
-enum GlyphPositioningSubtableTypes
-{
-    gpstSingle          = 1,
-    gpstPair            = 2,
-    gpstCursive         = 3,
-    gpstMarkToBase      = 4,
-    gpstMarkToLigature  = 5,
-    gpstMarkToMark      = 6,
-    gpstContext         = 7,
-    gpstChainedContext  = 8,
-    gpstExtension       = 9
-};
-
-typedef LookupSubtable GlyphPositioningSubtable;
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPosnLookupProc.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "SinglePositioningSubtables.h"
-#include "PairPositioningSubtables.h"
-#include "CursiveAttachmentSubtables.h"
-#include "MarkToBasePosnSubtables.h"
-#include "MarkToLigaturePosnSubtables.h"
-#include "MarkToMarkPosnSubtables.h"
-//#include "ContextualPositioningSubtables.h"
-#include "ContextualSubstSubtables.h"
-#include "ExtensionSubtables.h"
-#include "LookupProcessor.h"
-#include "GlyphPosnLookupProc.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-// Aside from the names, the contextual positioning subtables are
-// the same as the contextual substitution subtables.
-typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
-typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable;
-
-GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
-        const LEReferenceTo<GlyphPositioningTableHeader> &glyphPositioningTableHeader,
-        LETag scriptTag,
-        LETag languageTag,
-        const FeatureMap *featureMap,
-        le_int32 featureMapCount,
-        le_bool featureOrder,
-        LEErrorCode& success)
-    : LookupProcessor(
-                      glyphPositioningTableHeader,
-                      SWAPW(glyphPositioningTableHeader->scriptListOffset),
-                      SWAPW(glyphPositioningTableHeader->featureListOffset),
-                      SWAPW(glyphPositioningTableHeader->lookupListOffset),
-                      scriptTag,
-                      languageTag,
-                      featureMap,
-                      featureMapCount,
-                      featureOrder,
-                      success
-                      )
-{
-    // anything?
-}
-
-GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
-{
-}
-
-le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
-                                                       GlyphIterator *glyphIterator,
-                                                       const LEFontInstance *fontInstance,
-                                                       LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint32 delta = 0;
-
-    //_LETRACE("attempting lookupType #%d", lookupType);
-
-    switch(lookupType)
-    {
-    case 0:
-        break;
-
-    case gpstSingle:
-    {
-      LEReferenceTo<SinglePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstPair:
-    {
-        LEReferenceTo<PairPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstCursive:
-    {
-        LEReferenceTo<CursiveAttachmentSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstMarkToBase:
-    {
-        LEReferenceTo<MarkToBasePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-     case gpstMarkToLigature:
-    {
-        LEReferenceTo<MarkToLigaturePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstMarkToMark:
-    {
-        LEReferenceTo<MarkToMarkPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-   case gpstContext:
-    {
-        LEReferenceTo<ContextualPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this , glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstChainedContext:
-    {
-        const LEReferenceTo<ChainingContextualPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstExtension:
-    {
-        const LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this, lookupType, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    default:
-        break;
-    }
-
-#if LE_TRACE
-    if(delta != 0) {
-      _LETRACE("GlyphPositioningLookupProcessor applied #%d -> delta %d @ %d", lookupType, delta, glyphIterator->getCurrStreamPosition());
-    }
-#endif
-
-    return delta;
-}
-
-GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphPosnLookupProc.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
-#define __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "ICUFeatures.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class GlyphPositioningLookupProcessor : public LookupProcessor
-{
-public:
-    GlyphPositioningLookupProcessor(const LEReferenceTo<GlyphPositioningTableHeader> &glyphPositioningTableHeader,
-        LETag scriptTag,
-        LETag languageTag,
-        const FeatureMap *featureMap,
-        le_int32 featureMapCount,
-        le_bool featureOrder,
-        LEErrorCode& success);
-
-    virtual ~GlyphPositioningLookupProcessor();
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-protected:
-    GlyphPositioningLookupProcessor();
-
-private:
-
-    GlyphPositioningLookupProcessor(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
-    GlyphPositioningLookupProcessor &operator=(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphSubstLookupProc.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "SingleSubstitutionSubtables.h"
-#include "MultipleSubstSubtables.h"
-#include "AlternateSubstSubtables.h"
-#include "LigatureSubstSubtables.h"
-#include "ContextualSubstSubtables.h"
-#include "ExtensionSubtables.h"
-#include "LookupProcessor.h"
-#include "GlyphSubstLookupProc.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
-        const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
-        LETag scriptTag,
-        LETag languageTag,
-        const LEGlyphFilter *filter,
-        const FeatureMap *featureMap,
-        le_int32 featureMapCount,
-        le_bool featureOrder,
-        LEErrorCode& success)
-    : LookupProcessor(
-                      glyphSubstitutionTableHeader,
-                      SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
-                      SWAPW(glyphSubstitutionTableHeader->featureListOffset),
-                      SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
-                      scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
-{
-    // anything?
-}
-
-GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor()
-{
-}
-
-le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
-                                                       GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint32 delta = 0;
-
-    switch(lookupType)
-    {
-    case 0:
-        break;
-
-    case gsstSingle:
-    {
-        const LEReferenceTo<SingleSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstMultiple:
-    {
-        const LEReferenceTo<MultipleSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstAlternate:
-    {
-        const LEReferenceTo<AlternateSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstLigature:
-    {
-        const LEReferenceTo<LigatureSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstContext:
-    {
-        const LEReferenceTo<ContextualSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gsstChainingContext:
-    {
-        const LEReferenceTo<ChainingContextualSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gsstExtension:
-    {
-        const LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, this, lookupType, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    default:
-        break;
-    }
-
-    return delta;
-}
-
-GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphSubstLookupProc.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
-#define __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "ICUFeatures.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class GlyphSubstitutionLookupProcessor : public LookupProcessor
-{
-public:
-    GlyphSubstitutionLookupProcessor(const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
-        LETag scriptTag,
-        LETag languageTag,
-        const LEGlyphFilter *filter,
-        const FeatureMap *featureMap,
-        le_int32 featureMapCount,
-        le_bool featureOrder,
-        LEErrorCode& success);
-
-    virtual ~GlyphSubstitutionLookupProcessor();
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-protected:
-    GlyphSubstitutionLookupProcessor();
-
-private:
-    const LEGlyphFilter *fFilter;
-
-    GlyphSubstitutionLookupProcessor(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
-    GlyphSubstitutionLookupProcessor &operator=(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphSubstitutionTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphSubstLookupProc.h"
-#include "ScriptAndLanguage.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 GlyphSubstitutionTableHeader::process(const LEReferenceTo<GlyphSubstitutionTableHeader> &base,
-                                               LEGlyphStorage &glyphStorage,
-                                               le_bool rightToLeft,
-                                               LETag scriptTag,
-                                               LETag languageTag,
-                                               const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader,
-                                               const LEGlyphFilter *filter,
-                                               const FeatureMap *featureMap,
-                                               le_int32 featureMapCount,
-                                               le_bool featureOrder,
-                                               LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    GlyphSubstitutionLookupProcessor processor(base, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder, success);
-    return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL, success);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/GlyphSubstitutionTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHSUBSTITUTIONTABLES_H
-#define __GLYPHSUBSTITUTIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphLookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEGlyphStorage;
-class  LEGlyphFilter;
-struct GlyphDefinitionTableHeader;
-
-struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader
-{
-  le_int32    process(const LEReferenceTo<GlyphSubstitutionTableHeader> &base,
-                      LEGlyphStorage &glyphStorage,
-                        le_bool rightToLeft,
-                        LETag scriptTag,
-                        LETag languageTag,
-                        const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader,
-                        const LEGlyphFilter *filter,
-                        const FeatureMap *featureMap,
-                        le_int32 featureMapCount,
-                        le_bool featureOrder,
-                        LEErrorCode &success) const;
-};
-
-enum GlyphSubstitutionSubtableTypes
-{
-    gsstSingle          = 1,
-    gsstMultiple        = 2,
-    gsstAlternate       = 3,
-    gsstLigature        = 4,
-    gsstContext         = 5,
-    gsstChainingContext = 6,
-    gsstExtension       = 7,
-    gsstReverseChaining = 8
-};
-
-typedef LookupSubtable GlyphSubstitutionSubtable;
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/HanLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * HanLayoutEngine.cpp: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "HanLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HanOpenTypeLayoutEngine)
-
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define smplFeatureTag LE_SMPL_FEATURE_TAG
-#define tradFeatureTag LE_TRAD_FEATURE_TAG
-
-#define loclFeatureMask 0x80000000UL
-#define smplFeatureMask 0x40000000UL
-#define tradFeatureMask 0x20000000UL
-
-static const FeatureMap featureMap[] =
-{
-    {loclFeatureTag, loclFeatureMask},
-    {smplFeatureTag, smplFeatureMask},
-    {tradFeatureTag, tradFeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-#define features (loclFeatureMask)
-
-HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                 le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap      = featureMap;
-    fFeatureMapCount = featureMapCount;
-}
-
-HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-        LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, FALSE, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    // FIXME: do we want to add the 'trad' feature for 'ZHT' and the
-    // 'smpl' feature for 'ZHS'? If we do this, we can remove the exact
-    // flag from the language tag lookups, so we can use these features
-    // with the default LangSys...
-    for (le_int32 i = 0; i < count; i += 1) {
-        glyphStorage.setAuxData(i, features, success);
-    }
-
-    return count;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/HanLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- * HanLayoutEngine.h: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
- */
-
-#ifndef __HANLAYOUTENGINE_H
-#define __HANLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Han fonts. It overrides
- * the characerProcessing method to assign the correct OpenType feature
- * tags for the CJK language-specific forms.
- *
- * @internal
- */
-class HanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of HanOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has a
-     * Han OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTablem, LEErrorCode &success);
-
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~HanOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Han OpenType character processing. It assigns the OpenType feature
-     * tags to the characters to generate the correct language-specific variants.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the object holding the glyph storage. The char index and auxillary data arrays will be set.
-     *
-     * Output parameters:
-     * @param outChars - the output character arrayt
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/HangulLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,363 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * HangulLayoutEngine.cpp: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved.
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "HangulLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HangulOpenTypeLayoutEngine)
-
-
-#define FEATURE_MAP(name) {name ## FeatureTag, name ## FeatureMask}
-
-#define LJMO_FIRST 0x1100
-#define LJMO_LAST  0x1159
-#define LJMO_FILL  0x115F
-#define LJMO_COUNT 19
-
-#define VJMO_FIRST 0x1161
-#define VJMO_LAST  0x11A2
-#define VJMO_FILL  0x1160
-#define VJMO_COUNT 21
-
-#define TJMO_FIRST 0x11A7
-#define TJMO_LAST  0x11F9
-#define TJMO_COUNT 28
-
-#define HSYL_FIRST 0xAC00
-#define HSYL_COUNT 11172
-#define HSYL_LVCNT (VJMO_COUNT * TJMO_COUNT)
-
-// Character classes
-enum
-{
-    CC_L = 0,
-    CC_V,
-    CC_T,
-    CC_LV,
-    CC_LVT,
-    CC_X,
-    CC_COUNT
-};
-
-// Action flags
-#define AF_L 1
-#define AF_V 2
-#define AF_T 4
-
-// Actions
-#define a_N   0
-#define a_L   (AF_L)
-#define a_V   (AF_V)
-#define a_T   (AF_T)
-#define a_VT  (AF_V | AF_T)
-#define a_LV  (AF_L | AF_V)
-#define a_LVT (AF_L | AF_V | AF_T)
-
-typedef struct
-{
-    le_int32 newState;
-    le_int32 actionFlags;
-} StateTransition;
-
-static const StateTransition stateTable[][CC_COUNT] =
-{
-//       L          V          T          LV         LVT           X
-    { {1, a_L},  {2, a_LV}, {3, a_LVT}, {2, a_LV}, {3, a_LVT},  {4, a_T}}, // 0 - start
-    { {1, a_L},  {2, a_V},  {3, a_VT},  {2, a_LV}, {3, a_LVT}, {-1, a_V}}, // 1 - L+
-    {{-1, a_N},  {2, a_V},  {3, a_T},  {-1, a_N}, {-1, a_N},   {-1, a_N}}, // 2 - L+V+
-    {{-1, a_N}, {-1, a_N},  {3, a_T},  {-1, a_N}, {-1, a_N},   {-1, a_N}}, // 3 - L+V+T*
-    {{-1, a_N}, {-1, a_N}, {-1, a_N},  {-1, a_N}, {-1, a_N},    {4, a_T}}  // 4 - X+
-};
-
-
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define ljmoFeatureTag LE_LJMO_FEATURE_TAG
-#define vjmoFeatureTag LE_VJMO_FEATURE_TAG
-#define tjmoFeatureTag LE_TJMO_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-#define ljmoFeatureMask 0x40000000UL
-#define vjmoFeatureMask 0x20000000UL
-#define tjmoFeatureMask 0x10000000UL
-
-static const FeatureMap featureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {ljmoFeatureTag, ljmoFeatureMask},
-    {vjmoFeatureTag, vjmoFeatureMask},
-    {tjmoFeatureTag, tjmoFeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-#define nullFeatures 0
-#define ljmoFeatures (ccmpFeatureMask | ljmoFeatureMask)
-#define vjmoFeatures (ccmpFeatureMask | vjmoFeatureMask | ljmoFeatureMask | tjmoFeatureMask)
-#define tjmoFeatures (ccmpFeatureMask | tjmoFeatureMask | ljmoFeatureMask | vjmoFeatureMask)
-
-static le_int32 compose(LEUnicode lead, LEUnicode vowel, LEUnicode trail, LEUnicode &syllable)
-{
-    le_int32 lIndex = lead  - LJMO_FIRST;
-    le_int32 vIndex = vowel - VJMO_FIRST;
-    le_int32 tIndex = trail - TJMO_FIRST;
-    le_int32 result = 3;
-
-    if ((lIndex < 0 || lIndex >= LJMO_COUNT ) || (vIndex < 0 || vIndex >= VJMO_COUNT)) {
-        return 0;
-    }
-
-    if (tIndex <= 0 || tIndex >= TJMO_COUNT) {
-        tIndex = 0;
-        result = 2;
-    }
-
-    syllable = (LEUnicode) ((lIndex * VJMO_COUNT + vIndex) * TJMO_COUNT + tIndex + HSYL_FIRST);
-
-    return result;
-}
-
-static le_int32 decompose(LEUnicode syllable, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-{
-    le_int32 sIndex = syllable - HSYL_FIRST;
-
-    if (sIndex < 0 || sIndex >= HSYL_COUNT) {
-        return 0;
-    }
-
-    lead  = (LEUnicode)(LJMO_FIRST + (sIndex / HSYL_LVCNT));
-    vowel = VJMO_FIRST + (sIndex % HSYL_LVCNT) / TJMO_COUNT;
-    trail = TJMO_FIRST + (sIndex % TJMO_COUNT);
-
-    if (trail == TJMO_FIRST) {
-        return 2;
-    }
-
-    return 3;
-}
-
-static le_int32 getCharClass(LEUnicode ch, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-{
-    lead  = LJMO_FILL;
-    vowel = VJMO_FILL;
-    trail = TJMO_FIRST;
-
-    if (ch >= LJMO_FIRST && ch <= LJMO_LAST) {
-        lead  = ch;
-        return CC_L;
-    }
-
-    if (ch >= VJMO_FIRST && ch <= VJMO_LAST) {
-        vowel = ch;
-        return CC_V;
-    }
-
-    if (ch > TJMO_FIRST && ch <= TJMO_LAST) {
-        trail = ch;
-        return CC_T;
-    }
-
-    le_int32 c = decompose(ch, lead, vowel, trail);
-
-    if (c == 2) {
-        return CC_LV;
-    }
-
-    if (c == 3) {
-        return CC_LVT;
-    }
-
-    trail = ch;
-    return CC_X;
-}
-
-HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-                                                       le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap = featureMap;
-    fFeatureMapCount = featureMapCount;
-    fFeatureOrder = TRUE;
-}
-
-HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-                                                           le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, success)
-{
-    fFeatureMap = featureMap;
-    fFeatureMapCount = featureMapCount;
-    fFeatureOrder = TRUE;
-}
-
-HangulOpenTypeLayoutEngine::~HangulOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    le_int32 outCharCount = 0;
-    le_int32 limit = offset + count;
-    le_int32 i = offset;
-
-    while (i < limit) {
-        le_int32 state    = 0;
-        le_int32 inStart  = i;
-        le_int32 outStart = outCharCount;
-
-        while( i < limit) {
-            LEUnicode lead  = 0;
-            LEUnicode vowel = 0;
-            LEUnicode trail = 0;
-            le_int32 chClass = getCharClass(chars[i], lead, vowel, trail);
-            const StateTransition transition = stateTable[state][chClass];
-
-            if (chClass == CC_X) {
-                /* Any character of type X will be stored as a trail jamo */
-                if ((transition.actionFlags & AF_T) != 0) {
-                    outChars[outCharCount] = trail;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-                }
-            } else {
-                /* Any Hangul will be fully decomposed. Output the decomposed characters. */
-                if ((transition.actionFlags & AF_L) != 0) {
-                    outChars[outCharCount] = lead;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, ljmoFeatures, success);
-                }
-
-                if ((transition.actionFlags & AF_V) != 0) {
-                    outChars[outCharCount] = vowel;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, vjmoFeatures, success);
-                }
-
-                if ((transition.actionFlags & AF_T) != 0) {
-                    outChars[outCharCount] = trail;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, tjmoFeatures, success);
-                }
-            }
-
-            state = transition.newState;
-
-            /* Negative next state means stop. */
-            if (state < 0) {
-                break;
-            }
-
-            i += 1;
-        }
-
-        le_int32 inLength  = i - inStart;
-        le_int32 outLength = outCharCount - outStart;
-
-        /*
-         * See if the syllable can be composed into a single character. There are 5
-         * possible cases:
-         *
-         *   Input     Decomposed to    Compose to
-         *   LV        L, V             LV
-         *   LVT       L, V, T          LVT
-         *   L, V      L, V             LV, DEL
-         *   LV, T     L, V, T          LVT, DEL
-         *   L, V, T   L, V, T          LVT, DEL, DEL
-         */
-        if ((inLength >= 1 && inLength <= 3) && (outLength == 2 || outLength == 3)) {
-            LEUnicode syllable = 0x0000;
-            LEUnicode lead  = outChars[outStart];
-            LEUnicode vowel = outChars[outStart + 1];
-            LEUnicode trail = outLength == 3? outChars[outStart + 2] : TJMO_FIRST;
-
-            /*
-             * If the composition consumes the whole decomposed syllable,
-             * we can use it.
-             */
-            if (compose(lead, vowel, trail, syllable) == outLength) {
-                outCharCount = outStart;
-                outChars[outCharCount] = syllable;
-                glyphStorage.setCharIndex(outCharCount, inStart-offset, success);
-                glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-
-                /*
-                 * Replace the rest of the input characters with DEL.
-                 */
-                for(le_int32 d = inStart + 1; d < i; d += 1) {
-                    outChars[outCharCount] = 0xFFFF;
-                    glyphStorage.setCharIndex(outCharCount, d - offset, success);
-                    glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-                }
-            }
-        }
-    }
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/HangulLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __HANGULAYOUTENGINE_H
-#define __HANGULAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Old Hangul OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * The Korean Hangul Script" (http://www.microsoft.com/typography/otfntdev/hangulot/default.htm)
- *
- * This class overrides the characterProcessing method to do Hangul character processing.
- * (See the MS spec. for more details)
- *
- * @internal
- */
-class HangulOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of HangulOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Hangul OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                               le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                              le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~HangulOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Hangul OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may compose a character sequence into a modern Hangul syllable,
-     * or decompose a modern Hangul syllable if it forms part of an old Hangul syllable.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/ICUFeatures.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __ICUFEATURES_H
-#define __ICUFEATURES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct FeatureRecord
-{
-    ATag        featureTag;
-    Offset      featureTableOffset;
-};
-
-struct FeatureTable
-{
-    Offset      featureParamsOffset;
-    le_uint16   lookupCount;
-    le_uint16   lookupListIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(FeatureTable, lookupListIndexArray)
-
-struct FeatureListTable
-{
-    le_uint16           featureCount;
-    FeatureRecord       featureRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<FeatureTable>  getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const;
-
-#if 0
-  const LEReferenceTo<FeatureTable>  getFeatureTable(const LETableReference &base, LETag featureTag, LEErrorCode &success) const;
-#endif
-};
-
-LE_VAR_ARRAY(FeatureListTable, featureRecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicClassTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,493 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "IndicReordering.h"
-
-U_NAMESPACE_BEGIN
-
-// Split matra table indices
-#define _x1  (1 << CF_INDEX_SHIFT)
-#define _x2  (2 << CF_INDEX_SHIFT)
-#define _x3  (3 << CF_INDEX_SHIFT)
-#define _x4  (4 << CF_INDEX_SHIFT)
-#define _x5  (5 << CF_INDEX_SHIFT)
-#define _x6  (6 << CF_INDEX_SHIFT)
-#define _x7  (7 << CF_INDEX_SHIFT)
-#define _x8  (8 << CF_INDEX_SHIFT)
-#define _x9  (9 << CF_INDEX_SHIFT)
-
-// simple classes
-#define _xx  (CC_RESERVED)
-#define _ma  (CC_VOWEL_MODIFIER | CF_POS_ABOVE)
-#define _mp  (CC_VOWEL_MODIFIER | CF_POS_AFTER)
-#define _sa  (CC_STRESS_MARK | CF_POS_ABOVE)
-#define _sb  (CC_STRESS_MARK | CF_POS_BELOW)
-#define _iv  (CC_INDEPENDENT_VOWEL)
-#define _i2  (CC_INDEPENDENT_VOWEL_2)
-#define _i3  (CC_INDEPENDENT_VOWEL_3)
-#define _ct  (CC_CONSONANT | CF_CONSONANT)
-#define _cn  (CC_CONSONANT_WITH_NUKTA | CF_CONSONANT)
-#define _nu  (CC_NUKTA)
-#define _dv  (CC_DEPENDENT_VOWEL)
-#define _dl  (_dv | CF_POS_BEFORE)
-#define _db  (_dv | CF_POS_BELOW)
-#define _da  (_dv | CF_POS_ABOVE)
-#define _dr  (_dv | CF_POS_AFTER)
-#define _lm  (_dv | CF_LENGTH_MARK)
-#define _l1  (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_BEFORE)
-#define _a1  (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_ABOVE)
-#define _b2  (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_BELOW)
-#define _r2  (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_AFTER)
-#define _m2  (CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK)
-#define _m3  (CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK)
-#define _vr  (CC_VIRAMA)
-#define _al  (CC_AL_LAKUNA)
-
-// split matras
-#define _s1  (_dv | _x1)
-#define _s2  (_dv | _x2)
-#define _s3  (_dv | _x3)
-#define _s4  (_dv | _x4)
-#define _s5  (_dv | _x5)
-#define _s6  (_dv | _x6)
-#define _s7  (_dv | _x7)
-#define _s8  (_dv | _x8)
-#define _s9  (_dv | _x9)
-
-// consonants with special forms
-// NOTE: this assumes that no consonants with nukta have
-// special forms... (Bengali RA?)
-#define _bb  (_ct | CF_BELOW_BASE)
-#define _pb  (_ct | CF_POST_BASE)
-#define _fb  (_ct | CF_PRE_BASE)
-#define _vt  (_bb | CF_VATTU)
-#define _rv  (_vt | CF_REPH)
-#define _rp  (_pb | CF_REPH)
-#define _rb  (_bb | CF_REPH)
-
-//
-// Character class tables
-//
-static const IndicClassTable::CharClass devaCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0900 - 090F
-    _iv, _iv, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0910 - 091F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _ct, // 0920 - 092F
-    _rv, _cn, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0930 - 093F
-    _dr, _db, _db, _db, _db, _da, _da, _da, _da, _dr, _dr, _dr, _dr, _vr, _xx, _xx, // 0940 - 094F
-    _xx, _sa, _sb, _sa, _sa, _xx, _xx, _xx, _cn, _cn, _cn, _cn, _cn, _cn, _cn, _cn, // 0950 - 095F
-    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0960 - 096F
-    _xx                                                                             // 0970
-};
-
-static const IndicClassTable::CharClass bengCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _i2, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _i2, // 0980 - 098F
-    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0990 - 099F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _bb, _ct, _ct, _pb, // 09A0 - 09AF
-    _rv, _xx, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _dl, // 09B0 - 09BF
-    _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
-    _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
-    _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx                           // 09F0 - 09FA
-};
-
-static const IndicClassTable::CharClass punjCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _xx, _iv, // 0A00 - 0A0F
-    _iv, _xx, _xx, _i3, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A10 - 0A1F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _bb, // 0A20 - 0A2F
-    _vt, _xx, _ct, _cn, _xx, _bb, _cn, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, // 0A30 - 0A3F
-    _dr, _b2, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _a1, _da, _vr, _xx, _xx, // 0A40 - 0A4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _ct, _xx, _cn, _xx, // 0A50 - 0A5F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0A60 - 0A6F
-    _ma, _ma, _xx, _xx, _xx                                                         // 0A70 - 0A74
-};
-
-static const IndicClassTable::CharClass gujrCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _xx, _iv, // 0A80 - 0A8F
-    _iv, _iv, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A90 - 0A9F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0AA0 - 0AAF
-    _rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0AB0 - 0ABF
-    _dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, // 0AC0 - 0ACF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0AD0 - 0ADF
-    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0AE0 - 0AEF
-};
-
-#if 1
-static const IndicClassTable::CharClass oryaCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
-    _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
-    _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
-    _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
-    _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
-    _xx, _bb                                                                        /* 0B70 - 0B71 */
-};
-#else
-static const IndicClassTable::CharClass oryaCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
-    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0B10 - 0B1F
-    _ct, _ct, _ct, _ct, _bb, _ct, _ct, _ct, _bb, _xx, _ct, _ct, _bb, _bb, _bb, _pb, // 0B20 - 0B2F
-    _rb, _xx, _bb, _bb, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _da, // 0B30 - 0B3F
-    _dr, _db, _db, _db, _xx, _xx, _xx, _l1, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, // 0B40 - 0B4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _m2, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 0B50 - 0B5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
-    _xx, _ct                                                                        // 0B70 - 0B71
-};
-#endif
-
-static const IndicClassTable::CharClass tamlCharClasses[] =
-{
-    _xx, _xx, _ma, _xx, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F
-    _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, // 0B90 - 0B9F
-    _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, // 0BA0 - 0BAF
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF
-    _da, _dr, _dr, _xx, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0BC0 - 0BCF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BD0 - 0BDF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BE0 - 0BEF
-    _xx, _xx, _xx                                                                   // 0BF0 - 0BF2
-};
-
-// FIXME: Should some of the bb's be pb's? (KA, NA, MA, YA, VA, etc. (approx 13))
-// U+C43 and U+C44 are _lm here not _dr.  Similar to the situation with U+CC3 and
-// U+CC4 in Kannada below.
-static const IndicClassTable::CharClass teluCharClasses[] =
-{
-    _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
-    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
-    _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
-    _da, _dr, _dr, _lm, _lm, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
-    _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0C60 - 0C6F
-};
-
-// U+CC3 and U+CC4 are _lm here not _dr since the Kannada rendering
-// rules want them below and to the right of the entire cluster
-//
-// There's some information about this in:
-//
-//  http://brahmi.sourceforge.net/docs/KannadaComputing.html
-static const IndicClassTable::CharClass kndaCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C80 - 0C8F
-    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C90 - 0C9F
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0CA0 - 0CAF
-    _rb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _dr, _da, // 0CB0 - 0CBF
-    _s1, _dr, _r2, _lm, _lm, _xx, _a1, _s2, _s3, _xx, _s4, _s5, _da, _vr, _xx, _xx, // 0CC0 - 0CCF
-    _xx, _xx, _xx, _xx, _xx, _m3, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _ct, _xx, // 0CD0 - 0CDF
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0CE0 - 0CEF
-};
-
-// FIXME: this is correct for old-style Malayalam (MAL) but not for reformed Malayalam (MLR)
-// FIXME: should there be a REPH for old-style Malayalam?
-static const IndicClassTable::CharClass mlymCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0D00 - 0D0F
-    _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0D10 - 0D1F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, // 0D20 - 0D2F
-    _fb, _fb, _bb, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0D30 - 0D3F
-    _dr, _dr, _dr, _dr, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0D40 - 0D4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0D60 - 0D6F
-};
-
-static const IndicClassTable::CharClass sinhCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F
-    _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
-    _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _al, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
-    _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
-    _xx, _xx, _dr, _dr, _xx                                                         // 0DF0 - 0DF4
-};
-
-//
-// Split matra tables
-//
-static const SplitMatra bengSplitTable[] = {{0x09C7, 0x09BE}, {0x09C7, 0x09D7}};
-
-static const SplitMatra oryaSplitTable[] = {{0x0B47, 0x0B56}, {0x0B47, 0x0B3E}, {0x0B47, 0x0B57}};
-
-static const SplitMatra tamlSplitTable[] = {{0x0BC6, 0x0BBE}, {0x0BC7, 0x0BBE}, {0x0BC6, 0x0BD7}};
-
-static const SplitMatra teluSplitTable[] = {{0x0C46, 0x0C56}};
-
-static const SplitMatra kndaSplitTable[] = {{0x0CBF, 0x0CD5}, {0x0CC6, 0x0CD5}, {0x0CC6, 0x0CD6}, {0x0CC6, 0x0CC2},
-                                            {0x0CC6, 0x0CC2, 0x0CD5}};
-
-static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
-
-
-static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF,0x0DCA},
-                                            {0x0DD9, 0x0DDF}};
-//
-// Script Flags
-//
-
-// FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
-// FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
-// FIXME: not sure passing ZWJ/ZWNJ is best way to render Malayalam Cillu...
-// FIXME: eyelash RA only for Devanagari??
-#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT /*| SF_FILTER_ZERO_WIDTH*/)
-#define SINH_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
-
-//
-// Indic Class Tables
-//
-static const IndicClassTable devaClassTable = {0x0900, 0x0970, 2, DEVA_SCRIPT_FLAGS, devaCharClasses, NULL};
-
-static const IndicClassTable bengClassTable = {0x0980, 0x09FA, 3, BENG_SCRIPT_FLAGS, bengCharClasses, bengSplitTable};
-
-static const IndicClassTable punjClassTable = {0x0A00, 0x0A74, 2, PUNJ_SCRIPT_FLAGS, punjCharClasses, NULL};
-
-static const IndicClassTable gujrClassTable = {0x0A80, 0x0AEF, 2, GUJR_SCRIPT_FLAGS, gujrCharClasses, NULL};
-
-static const IndicClassTable oryaClassTable = {0x0B00, 0x0B71, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable};
-
-static const IndicClassTable tamlClassTable = {0x0B80, 0x0BF2, 3, TAML_SCRIPT_FLAGS, tamlCharClasses, tamlSplitTable};
-
-static const IndicClassTable teluClassTable = {0x0C00, 0x0C6F, 3, TELU_SCRIPT_FLAGS, teluCharClasses, teluSplitTable};
-
-static const IndicClassTable kndaClassTable = {0x0C80, 0x0CEF, 4, KNDA_SCRIPT_FLAGS, kndaCharClasses, kndaSplitTable};
-
-static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
-
-static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
-
-//
-// IndicClassTable addresses
-//
-static const IndicClassTable * const indicClassTables[scriptCodeCount] = {
-    NULL,            /* 'zyyy' (COMMON) */
-    NULL,            /* 'qaai' (INHERITED) */
-    NULL,            /* 'arab' (ARABIC) */
-    NULL,            /* 'armn' (ARMENIAN) */
-    &bengClassTable, /* 'beng' (BENGALI) */
-    NULL,            /* 'bopo' (BOPOMOFO) */
-    NULL,            /* 'cher' (CHEROKEE) */
-    NULL,            /* 'copt' (COPTIC) */
-    NULL,            /* 'cyrl' (CYRILLIC) */
-    NULL,            /* 'dsrt' (DESERET) */
-    &devaClassTable, /* 'deva' (DEVANAGARI) */
-    NULL,            /* 'ethi' (ETHIOPIC) */
-    NULL,            /* 'geor' (GEORGIAN) */
-    NULL,            /* 'goth' (GOTHIC) */
-    NULL,            /* 'grek' (GREEK) */
-    &gujrClassTable, /* 'gujr' (GUJARATI) */
-    &punjClassTable, /* 'guru' (GURMUKHI) */
-    NULL,            /* 'hani' (HAN) */
-    NULL,            /* 'hang' (HANGUL) */
-    NULL,            /* 'hebr' (HEBREW) */
-    NULL,            /* 'hira' (HIRAGANA) */
-    &kndaClassTable, /* 'knda' (KANNADA) */
-    NULL,            /* 'kata' (KATAKANA) */
-    NULL,            /* 'khmr' (KHMER) */
-    NULL,            /* 'laoo' (LAO) */
-    NULL,            /* 'latn' (LATIN) */
-    &mlymClassTable, /* 'mlym' (MALAYALAM) */
-    NULL,            /* 'mong' (MONGOLIAN) */
-    NULL,            /* 'mymr' (MYANMAR) */
-    NULL,            /* 'ogam' (OGHAM) */
-    NULL,            /* 'ital' (OLD-ITALIC) */
-    &oryaClassTable, /* 'orya' (ORIYA) */
-    NULL,            /* 'runr' (RUNIC) */
-    &sinhClassTable, /* 'sinh' (SINHALA) */
-    NULL,            /* 'syrc' (SYRIAC) */
-    &tamlClassTable, /* 'taml' (TAMIL) */
-    &teluClassTable, /* 'telu' (TELUGU) */
-    NULL,            /* 'thaa' (THAANA) */
-    NULL,            /* 'thai' (THAI) */
-    NULL,            /* 'tibt' (TIBETAN) */
-    NULL,            /* 'cans' (CANADIAN-ABORIGINAL) */
-    NULL,            /* 'yiii' (YI) */
-    NULL,            /* 'tglg' (TAGALOG) */
-    NULL,            /* 'hano' (HANUNOO) */
-    NULL,            /* 'buhd' (BUHID) */
-    NULL,            /* 'tagb' (TAGBANWA) */
-    NULL,            /* 'brai' (BRAILLE) */
-    NULL,            /* 'cprt' (CYPRIOT) */
-    NULL,            /* 'limb' (LIMBU) */
-    NULL,            /* 'linb' (LINEAR_B) */
-    NULL,            /* 'osma' (OSMANYA) */
-    NULL,            /* 'shaw' (SHAVIAN) */
-    NULL,            /* 'tale' (TAI_LE) */
-    NULL,            /* 'ugar' (UGARITIC) */
-    NULL,            /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-    NULL,            /* 'bugi' (BUGINESE) */
-    NULL,            /* 'glag' (GLAGOLITIC) */
-    NULL,            /* 'khar' (KHAROSHTHI) */
-    NULL,            /* 'sylo' (SYLOTI_NAGRI) */
-    NULL,            /* 'talu' (NEW_TAI_LUE) */
-    NULL,            /* 'tfng' (TIFINAGH) */
-    NULL,            /* 'xpeo' (OLD_PERSIAN) */
-    NULL,            /* 'bali' (BALINESE) */
-    NULL,            /* 'batk' (BATK) */
-    NULL,            /* 'blis' (BLIS) */
-    NULL,            /* 'brah' (BRAH) */
-    NULL,            /* 'cham' (CHAM) */
-    NULL,            /* 'cirt' (CIRT) */
-    NULL,            /* 'cyrs' (CYRS) */
-    NULL,            /* 'egyd' (EGYD) */
-    NULL,            /* 'egyh' (EGYH) */
-    NULL,            /* 'egyp' (EGYP) */
-    NULL,            /* 'geok' (GEOK) */
-    NULL,            /* 'hans' (HANS) */
-    NULL,            /* 'hant' (HANT) */
-    NULL,            /* 'hmng' (HMNG) */
-    NULL,            /* 'hung' (HUNG) */
-    NULL,            /* 'inds' (INDS) */
-    NULL,            /* 'java' (JAVA) */
-    NULL,            /* 'kali' (KALI) */
-    NULL,            /* 'latf' (LATF) */
-    NULL,            /* 'latg' (LATG) */
-    NULL,            /* 'lepc' (LEPC) */
-    NULL,            /* 'lina' (LINA) */
-    NULL,            /* 'mand' (MAND) */
-    NULL,            /* 'maya' (MAYA) */
-    NULL,            /* 'mero' (MERO) */
-    NULL,            /* 'nko ' (NKO) */
-    NULL,            /* 'orkh' (ORKH) */
-    NULL,            /* 'perm' (PERM) */
-    NULL,            /* 'phag' (PHAGS_PA) */
-    NULL,            /* 'phnx' (PHOENICIAN) */
-    NULL,            /* 'plrd' (PLRD) */
-    NULL,            /* 'roro' (RORO) */
-    NULL,            /* 'sara' (SARA) */
-    NULL,            /* 'syre' (SYRE) */
-    NULL,            /* 'syrj' (SYRJ) */
-    NULL,            /* 'syrn' (SYRN) */
-    NULL,            /* 'teng' (TENG) */
-    NULL,            /* 'vai ' (VAII) */
-    NULL,            /* 'visp' (VISP) */
-    NULL,            /* 'xsux' (CUNEIFORM) */
-    NULL,            /* 'zxxx' (ZXXX) */
-    NULL,            /* 'zzzz' (UNKNOWN) */
-    NULL,            /* 'cari' (CARI) */
-    NULL,            /* 'jpan' (JPAN) */
-    NULL,            /* 'lana' (LANA) */
-    NULL,            /* 'lyci' (LYCI) */
-    NULL,            /* 'lydi' (LYDI) */
-    NULL,            /* 'olck' (OLCK) */
-    NULL,            /* 'rjng' (RJNG) */
-    NULL,            /* 'saur' (SAUR) */
-    NULL,            /* 'sgnw' (SGNW) */
-    NULL,            /* 'sund' (SUND) */
-    NULL,            /* 'moon' (MOON) */
-    NULL,            /* 'mtei' (MTEI) */
-    NULL,            /* 'armi' (ARMI) */
-    NULL,            /* 'avst' (AVST) */
-    NULL,            /* 'cakm' (CAKM) */
-    NULL,            /* 'kore' (KORE) */
-    NULL,            /* 'kthi' (KTHI) */
-    NULL,            /* 'mani' (MANI) */
-    NULL,            /* 'phli' (PHLI) */
-    NULL,            /* 'phlp' (PHLP) */
-    NULL,            /* 'phlv' (PHLV) */
-    NULL,            /* 'prti' (PRTI) */
-    NULL,            /* 'samr' (SAMR) */
-    NULL,            /* 'tavt' (TAVT) */
-    NULL,            /* 'zmth' (ZMTH) */
-    NULL,            /* 'zsym' (ZSYM) */
-    NULL,            /* 'bamu' (BAMUM) */
-    NULL,            /* 'lisu' (LISU) */
-    NULL,            /* 'nkgb' (NKGB) */
-    NULL             /* 'sarb' (OLD_SOUTH_ARABIAN) */
-};
-
-IndicClassTable::CharClass IndicClassTable::getCharClass(LEUnicode ch) const
-{
-    if (ch == C_SIGN_ZWJ) {
-        return CF_CONSONANT | CC_ZERO_WIDTH_MARK;
-    }
-
-    if (ch == C_SIGN_ZWNJ) {
-        return CC_ZERO_WIDTH_MARK;
-    }
-
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-
-    return classTable[ch - firstChar];
-}
-
-const IndicClassTable *IndicClassTable::getScriptClassTable(le_int32 scriptCode)
-{
-    if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
-        return NULL;
-    }
-
-    return indicClassTables[scriptCode];
-}
-
-le_int32 IndicReordering::getWorstCaseExpansion(le_int32 scriptCode)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if (classTable == NULL) {
-        return 1;
-    }
-
-    return classTable->getWorstCaseExpansion();
-}
-
-le_bool IndicReordering::getFilterZeroWidth(le_int32 scriptCode)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if (classTable == NULL) {
-        return TRUE;
-    }
-
-    return classTable->getFilterZeroWidth();
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "IndicLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "GDEFMarkFilter.h"
-#include "LEGlyphStorage.h"
-
-#include "IndicReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine)
-
-IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, le_bool version2, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success), fMPreFixups(NULL)
-{
-  if ( version2 ) {
-    fFeatureMap = IndicReordering::getv2FeatureMap(fFeatureMapCount);
-  } else {
-    fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-  }
-  fFeatureOrder = TRUE;
-  fVersion2 = version2;
-  fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode);
-}
-
-IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMPreFixups(NULL)
-{
-    fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-    fVersion2 =  FALSE;
-}
-
-IndicOpenTypeLayoutEngine::~IndicOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 IndicOpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                    LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    _LETRACE("IOTLE::gp, calling parent");
-    le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (fVersion2) {
-      _LETRACE("IOTLE::gp, v2 final,");
-      IndicReordering::finalReordering(glyphStorage,retCount);
-      _LETRACE("IOTLE::gp, v2 pres");
-      IndicReordering::applyPresentationForms(glyphStorage,retCount);
-      _LETRACE("IOTLE::gp, parent gsub");
-      OpenTypeLayoutEngine::glyphSubstitution(count,max, rightToLeft, glyphStorage, success);
-    } else {
-      _LETRACE("IOTLE::gp, adjust mpres");
-      IndicReordering::adjustMPres(fMPreFixups, glyphStorage, success);
-    }
-    return retCount;
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    _LETRACE("IOTLE: charProc");
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * IndicReordering::getWorstCaseExpansion(fScriptCode);
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-
-    le_int32 outCharCount;
-    if (fVersion2) {
-        _LETRACE("v2process");
-        outCharCount = IndicReordering::v2process(&chars[offset], count, fScriptCode, outChars, glyphStorage, success);
-    } else {
-        _LETRACE("reorder");
-        outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, success);
-    }
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-#ifndef __INDICLAYOUTENGINE_H
-#define __INDICLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Indic OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * Indic Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm)
- *
- * This class overrides the characterProcessing method to do Indic character processing
- * and reordering, and the glyphProcessing method to implement post-GSUB processing for
- * left matras. (See the MS spec. for more details)
- *
- * @internal
- */
-class IndicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of IndicOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Indic OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, le_bool version2, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                              le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~IndicOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Indic OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered. For
-     * some Indic scripts, it may also split some vowels, resulting in more output characters
-     * than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does character to glyph mapping, applies the GSUB table and applies
-     * any post GSUB fixups for left matras. It calls OpenTypeLayoutEngine::glyphProcessing
-     * to do the character to glyph mapping, and apply the GSUB table.
-     *
-     * Note that in the case of "canned" GSUB tables, the output glyph indices may be
-     * "fake" glyph indices that need to be converted to "real" glyph indices by the
-     * glyphPostProcessing method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param featureTags - the feature tag array
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the output glyph index array
-     *
-     * Note: if the character index array was already set by the characterProcessing
-     * method, this method won't change it.
-     *
-     * @internal
-     */
-    virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    le_bool fVersion2;
-
-private:
-
-    MPreFixups *fMPreFixups;
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangement.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENT_H
-#define __INDICREARRANGEMENT_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct IndicRearrangementSubtableHeader : MorphStateTableHeader
-{
-};
-
-struct IndicRearrangementSubtableHeader2 : MorphStateTableHeader2
-{
-};
-
-enum IndicRearrangementFlags
-{
-    irfMarkFirst    = 0x8000,
-    irfDontAdvance  = 0x4000,
-    irfMarkLast     = 0x2000,
-    irfReserved     = 0x1FF0,
-    irfVerbMask     = 0x000F
-};
-
-enum IndicRearrangementVerb
-{
-    irvNoAction = 0x0000,               /*   no action    */
-    irvxA       = 0x0001,               /*    Ax => xA    */
-    irvDx       = 0x0002,               /*    xD => Dx    */
-    irvDxA      = 0x0003,               /*   AxD => DxA   */
-
-    irvxAB      = 0x0004,               /*   ABx => xAB   */
-    irvxBA      = 0x0005,               /*   ABx => xBA   */
-    irvCDx      = 0x0006,               /*   xCD => CDx   */
-    irvDCx      = 0x0007,               /*   xCD => DCx   */
-
-    irvCDxA     = 0x0008,               /*  AxCD => CDxA  */
-    irvDCxA     = 0x0009,               /*  AxCD => DCxA  */
-    irvDxAB     = 0x000A,               /*  ABxD => DxAB  */
-    irvDxBA     = 0x000B,               /*  ABxD => DxBA  */
-
-    irvCDxAB    = 0x000C,               /* ABxCD => CDxAB */
-    irvCDxBA    = 0x000D,               /* ABxCD => CDxBA */
-    irvDCxAB    = 0x000E,               /* ABxCD => DCxAB */
-    irvDCxBA    = 0x000F                /* ABxCD => DCxBA */
-};
-
-struct IndicRearrangementStateEntry : StateEntry
-{
-};
-
-struct IndicRearrangementStateEntry2 : StateEntry2
-{
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "IndicRearrangementProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor)
-
-  IndicRearrangementProcessor::IndicRearrangementProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor(morphSubtableHeader, success),
-  indicRearrangementSubtableHeader(morphSubtableHeader, success),
-  entryTable(stateTableHeader, success, (const IndicRearrangementStateEntry*)(&stateTableHeader->stHeader),
-             entryTableOffset, LE_UNBOUNDED_ARRAY),
-  int16Table(stateTableHeader, success, (const le_int16*)entryTable.getAlias(), 0, LE_UNBOUNDED_ARRAY)
-
-{
-}
-
-IndicRearrangementProcessor::~IndicRearrangementProcessor()
-{
-}
-
-void IndicRearrangementProcessor::beginStateTable()
-{
-    firstGlyph = 0;
-    lastGlyph = 0;
-}
-
-ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success)
-{
-    const IndicRearrangementStateEntry *entry = entryTable.getAlias(index, success);
-    if (LE_FAILURE(success)) return 0;
-    ByteOffset newState = SWAPW(entry->newStateOffset);
-    IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags);
-
-    if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) {
-       success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-       return 0;
-    }
-
-    if (flags & irfMarkFirst) {
-        firstGlyph = currGlyph;
-    }
-
-    if (flags & irfMarkLast) {
-        lastGlyph = currGlyph;
-    }
-
-    doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
-
-    if (!(flags & irfDontAdvance)) {
-        // XXX: Should handle reverse too...
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void IndicRearrangementProcessor::endStateTable()
-{
-}
-
-void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
-{
-    LEGlyphID a, b, c, d;
-    le_int32 ia, ib, ic, id, ix, x;
-
-    if (LE_FAILURE(success)) return;
-
-    if (verb == irvNoAction) {
-        return;
-    }
-    if (firstGlyph > lastGlyph) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    switch(verb)
-    {
-    case irvxA:
-        if (firstGlyph == lastGlyph) break;
-        if (firstGlyph + 1 < firstGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        x = firstGlyph + 1;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 1, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph] = a;
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDx:
-        if (firstGlyph == lastGlyph) break;
-        if (lastGlyph - 1 > lastGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        d = glyphStorage[lastGlyph];
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 1;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        break;
-
-    case irvDxA:
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        id = glyphStorage.getCharIndex(lastGlyph,  success);
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph,  ia, success);
-        break;
-
-    case irvxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        break;
-
-    case irvDCx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        break;
-
-    case irvCDxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvCDxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDCxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    default:
-        break;
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENTPROCESSOR_H
-#define __INDICREARRANGEMENTPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "IndicRearrangement.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class IndicRearrangementProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
-
-    IndicRearrangementProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~IndicRearrangementProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    le_int32 firstGlyph;
-    le_int32 lastGlyph;
-
-    LEReferenceTo<IndicRearrangementSubtableHeader> indicRearrangementSubtableHeader;
-    LEReferenceToArrayOf<IndicRearrangementStateEntry> entryTable;
-    LEReferenceToArrayOf<le_int16> int16Table;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,502 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "IndicRearrangementProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor2)
-
-IndicRearrangementProcessor2::IndicRearrangementProcessor2(
-      const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success), indicRearrangementSubtableHeader(morphSubtableHeader, success),
-  entryTable(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY)
-{
-}
-
-IndicRearrangementProcessor2::~IndicRearrangementProcessor2()
-{
-}
-
-void IndicRearrangementProcessor2::beginStateTable()
-{
-    firstGlyph = 0;
-    lastGlyph = 0;
-}
-
-le_uint16 IndicRearrangementProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-                                                          EntryTableIndex2 index, LEErrorCode &success)
-{
-    const IndicRearrangementStateEntry2 *entry = entryTable.getAlias(index, success);
-    if (LE_FAILURE(success)) return 0; // TODO - what to return in bad state?
-    le_uint16 newState = SWAPW(entry->newStateIndex); // index to the new state
-    IndicRearrangementFlags  flags =  (IndicRearrangementFlags) SWAPW(entry->flags);
-
-    if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) {
-       success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-       return 0;
-    }
-
-    if (flags & irfMarkFirst) {
-        firstGlyph = currGlyph;
-    }
-
-    if (flags & irfMarkLast) {
-        lastGlyph = currGlyph;
-    }
-
-    doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
-
-    if (!(flags & irfDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return newState; // index to new state
-}
-
-void IndicRearrangementProcessor2::endStateTable()
-{
-}
-
-void IndicRearrangementProcessor2::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
-{
-    LEGlyphID a, b, c, d;
-    le_int32 ia, ib, ic, id, ix, x;
-
-    if (LE_FAILURE(success)) return;
-
-    if (verb == irvNoAction) {
-        return;
-    }
-    if (firstGlyph > lastGlyph) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    switch(verb)
-    {
-    case irvxA:
-        if (firstGlyph == lastGlyph) break;
-        if (firstGlyph + 1 < firstGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        x = firstGlyph + 1;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 1, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph] = a;
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDx:
-        if (firstGlyph == lastGlyph) break;
-        if (lastGlyph - 1 > lastGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        d = glyphStorage[lastGlyph];
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 1;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        break;
-
-    case irvDxA:
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        id = glyphStorage.getCharIndex(lastGlyph,  success);
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph,  ia, success);
-        break;
-
-    case irvxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        break;
-
-    case irvDCx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        break;
-
-    case irvCDxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvCDxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDCxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    default:
-        break;
-    }
-
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicRearrangementProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENTPROCESSOR2_H
-#define __INDICREARRANGEMENTPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor2.h"
-#include "IndicRearrangement.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class IndicRearrangementProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
-
-    IndicRearrangementProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~IndicRearrangementProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    le_int32 firstGlyph;
-    le_int32 lastGlyph;
-
-    LEReferenceToArrayOf<IndicRearrangementStateEntry2> entryTable;
-    LEReferenceTo<IndicRearrangementSubtableHeader2> indicRearrangementSubtableHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicReordering.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1264 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "IndicReordering.h"
-#include "LEGlyphStorage.h"
-#include "MPreFixups.h"
-
-U_NAMESPACE_BEGIN
-
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define initFeatureTag LE_INIT_FEATURE_TAG
-#define nuktFeatureTag LE_NUKT_FEATURE_TAG
-#define akhnFeatureTag LE_AKHN_FEATURE_TAG
-#define rphfFeatureTag LE_RPHF_FEATURE_TAG
-#define rkrfFeatureTag LE_RKRF_FEATURE_TAG
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define halfFeatureTag LE_HALF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define vatuFeatureTag LE_VATU_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-#define halnFeatureTag LE_HALN_FEATURE_TAG
-#define cjctFeatureTag LE_CJCT_FEATURE_TAG
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-
-#define loclFeatureMask 0x80000000UL
-#define rphfFeatureMask 0x40000000UL
-#define blwfFeatureMask 0x20000000UL
-#define halfFeatureMask 0x10000000UL
-#define pstfFeatureMask 0x08000000UL
-#define nuktFeatureMask 0x04000000UL
-#define akhnFeatureMask 0x02000000UL
-#define vatuFeatureMask 0x01000000UL
-#define presFeatureMask 0x00800000UL
-#define blwsFeatureMask 0x00400000UL
-#define abvsFeatureMask 0x00200000UL
-#define pstsFeatureMask 0x00100000UL
-#define halnFeatureMask 0x00080000UL
-#define blwmFeatureMask 0x00040000UL
-#define abvmFeatureMask 0x00020000UL
-#define distFeatureMask 0x00010000UL
-#define initFeatureMask 0x00008000UL
-#define cjctFeatureMask 0x00004000UL
-#define rkrfFeatureMask 0x00002000UL
-#define caltFeatureMask 0x00001000UL
-#define kernFeatureMask 0x00000800UL
-
-// Syllable structure bits
-#define baseConsonantMask       0x00000400UL
-#define consonantMask           0x00000200UL
-#define halfConsonantMask       0x00000100UL
-#define rephConsonantMask       0x00000080UL
-#define matraMask               0x00000040UL
-#define vowelModifierMask       0x00000020UL
-#define markPositionMask        0x00000018UL
-
-#define postBasePosition        0x00000000UL
-#define preBasePosition         0x00000008UL
-#define aboveBasePosition       0x00000010UL
-#define belowBasePosition       0x00000018UL
-
-#define repositionedGlyphMask   0x00000002UL
-
-#define basicShapingFormsMask ( loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask )
-#define positioningFormsMask ( kernFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask )
-#define presentationFormsMask ( presFeatureMask | abvsFeatureMask | blwsFeatureMask | pstsFeatureMask | halnFeatureMask | caltFeatureMask )
-
-
-#define C_MALAYALAM_VOWEL_SIGN_U 0x0D41
-#define C_DOTTED_CIRCLE 0x25CC
-#define NO_GLYPH 0xFFFF
-
-// Some level of debate as to the proper value for MAX_CONSONANTS_PER_SYLLABLE.  Ticket 5588 states that 4
-// is the magic number according to ISCII, but 5 seems to be the more consistent with XP.
-#define MAX_CONSONANTS_PER_SYLLABLE 5
-
-#define INDIC_BLOCK_SIZE 0x7F
-
-class IndicReorderingOutput : public UMemory {
-private:
-    le_int32   fSyllableCount;
-    le_int32   fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-    LEUnicode   fMpre;
-    le_int32    fMpreIndex;
-
-    LEUnicode   fMbelow;
-    le_int32    fMbelowIndex;
-
-    LEUnicode   fMabove;
-    le_int32    fMaboveIndex;
-
-    LEUnicode   fMpost;
-    le_int32    fMpostIndex;
-
-    LEUnicode   fLengthMark;
-    le_int32    fLengthMarkIndex;
-
-    LEUnicode   fAlLakuna;
-    le_int32    fAlLakunaIndex;
-
-    FeatureMask fMatraFeatures;
-
-    le_int32    fMPreOutIndex;
-    MPreFixups *fMPreFixups;
-
-    LEUnicode   fVMabove;
-    LEUnicode   fVMpost;
-    le_int32    fVMIndex;
-    FeatureMask fVMFeatures;
-
-    LEUnicode   fSMabove;
-    LEUnicode   fSMbelow;
-    le_int32    fSMIndex;
-    FeatureMask fSMFeatures;
-
-    LEUnicode   fPreBaseConsonant;
-    LEUnicode   fPreBaseVirama;
-    le_int32    fPBCIndex;
-    FeatureMask fPBCFeatures;
-
-    void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass)
-    {
-        // FIXME: check if already set, or if not a matra...
-        if (IndicClassTable::isLengthMark(matraClass)) {
-            fLengthMark = matra;
-            fLengthMarkIndex = matraIndex;
-        } else if (IndicClassTable::isAlLakuna(matraClass)) {
-            fAlLakuna = matra;
-            fAlLakunaIndex = matraIndex;
-        } else {
-            switch (matraClass & CF_POS_MASK) {
-            case CF_POS_BEFORE:
-                fMpre = matra;
-                fMpreIndex = matraIndex;
-                break;
-
-            case CF_POS_BELOW:
-                fMbelow = matra;
-                fMbelowIndex = matraIndex;
-                break;
-
-            case CF_POS_ABOVE:
-                fMabove = matra;
-                fMaboveIndex = matraIndex;
-                break;
-
-            case CF_POS_AFTER:
-                fMpost = matra;
-                fMpostIndex = matraIndex;
-                break;
-
-            default:
-                // can't get here...
-                break;
-           }
-        }
-    }
-
-public:
-    IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
-          fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
-          fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fAlLakuna(0), fAlLakunaIndex(0),
-          fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
-          fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0),
-          fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0),
-          fPreBaseConsonant(0), fPreBaseVirama(0), fPBCIndex(0), fPBCFeatures(0)
-    {
-        // nothing else to do...
-    }
-
-    ~IndicReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-
-        fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
-        fMPreOutIndex = -1;
-
-        fVMabove = fVMpost  = 0;
-        fSMabove = fSMbelow = 0;
-
-        fPreBaseConsonant = fPreBaseVirama = 0;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
-        fOutIndex += 1;
-    }
-
-    void setFeatures ( le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fGlyphStorage.setAuxData( charIndex, charFeatures, success );
-
-    }
-
-    FeatureMask getFeatures ( le_uint32 charIndex )
-    {
-        LEErrorCode success = LE_NO_ERROR;
-        return fGlyphStorage.getAuxData(charIndex,success);
-    }
-
-    void decomposeReorderMatras ( const IndicClassTable *classTable, le_int32 beginSyllable, le_int32 nextSyllable, le_int32 inv_count ) {
-        le_int32 i;
-        LEErrorCode success = LE_NO_ERROR;
-
-                for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-                        if ( classTable->isMatra(fOutChars[i+inv_count])) {
-                                IndicClassTable::CharClass matraClass = classTable->getCharClass(fOutChars[i+inv_count]);
-                                if ( classTable->isSplitMatra(matraClass)) {
-                                        le_int32 saveIndex = fGlyphStorage.getCharIndex(i+inv_count,success);
-                                        le_uint32 saveAuxData = fGlyphStorage.getAuxData(i+inv_count,success);
-                    const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
-                    int j;
-                    for (j = 0 ; j < SM_MAX_PIECES && *(splitMatra)[j] != 0 ; j++) {
-                        LEUnicode piece = (*splitMatra)[j];
-                                                if ( j == 0 ) {
-                                                        fOutChars[i+inv_count] = piece;
-                                                        matraClass = classTable->getCharClass(piece);
-                                                } else {
-                                                        insertCharacter(piece,i+1+inv_count,saveIndex,saveAuxData);
-                                                        nextSyllable++;
-                                                }
-                                    }
-                                }
-
-                                if ((matraClass & CF_POS_MASK) == CF_POS_BEFORE) {
-                    moveCharacter(i+inv_count,beginSyllable+inv_count);
-                                }
-                        }
-                }
-        }
-
-        void moveCharacter( le_int32 fromPosition, le_int32 toPosition ) {
-                le_int32 i,saveIndex;
-                le_uint32 saveAuxData;
-                LEUnicode saveChar = fOutChars[fromPosition];
-            LEErrorCode success = LE_NO_ERROR;
-                LEErrorCode success2 = LE_NO_ERROR;
-                saveIndex = fGlyphStorage.getCharIndex(fromPosition,success);
-        saveAuxData = fGlyphStorage.getAuxData(fromPosition,success);
-
-                if ( fromPosition > toPosition ) {
-                        for ( i = fromPosition ; i > toPosition ; i-- ) {
-                                fOutChars[i] = fOutChars[i-1];
-                                fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success2),success);
-                                fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success2), success);
-
-                        }
-                } else {
-                        for ( i = fromPosition ; i < toPosition ; i++ ) {
-                                fOutChars[i] = fOutChars[i+1];
-                                fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success2),success);
-                                fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success2), success);
-                        }
-
-                }
-                fOutChars[toPosition] = saveChar;
-                fGlyphStorage.setCharIndex(toPosition,saveIndex,success);
-                fGlyphStorage.setAuxData(toPosition,saveAuxData,success);
-
-        }
-        void insertCharacter( LEUnicode ch, le_int32 toPosition, le_int32 charIndex, le_uint32 auxData ) {
-            LEErrorCode success = LE_NO_ERROR;
-        le_int32 i;
-                fOutIndex += 1;
-
-                for ( i = fOutIndex ; i > toPosition ; i--) {
-                                fOutChars[i] = fOutChars[i-1];
-                                fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success),success);
-                                fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success), success);
-                }
-
-                fOutChars[toPosition] = ch;
-                fGlyphStorage.setCharIndex(toPosition,charIndex,success);
-                fGlyphStorage.setAuxData(toPosition,auxData,success);
-
-        }
-        void removeCharacter( le_int32 fromPosition ) {
-            LEErrorCode success = LE_NO_ERROR;
-        le_int32 i;
-                fOutIndex -= 1;
-
-                for ( i = fromPosition ; i < fOutIndex ; i--) {
-                                fOutChars[i] = fOutChars[i+1];
-                                fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success),success);
-                                fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success), success);
-                }
-        }
-
-    le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart)
-    {
-        IndicClassTable::CharClass matraClass = classTable->getCharClass(matra);
-
-        fMatraFeatures  = matraFeatures;
-
-        if (wordStart) {
-            fMatraFeatures |= initFeatureMask;
-        }
-
-        if (IndicClassTable::isMatra(matraClass)) {
-            if (IndicClassTable::isSplitMatra(matraClass)) {
-                const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
-                int i;
-
-                for (i = 0; i < SM_MAX_PIECES && (*splitMatra)[i] != 0; i += 1) {
-                    LEUnicode piece = (*splitMatra)[i];
-                    IndicClassTable::CharClass pieceClass = classTable->getCharClass(piece);
-
-                    saveMatra(piece, matraIndex, pieceClass);
-                }
-            } else {
-                saveMatra(matra, matraIndex, matraClass);
-            }
-
-            return TRUE;
-        }
-
-        return FALSE;
-    }
-
-    void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures)
-    {
-        IndicClassTable::CharClass vmClass = classTable->getCharClass(vowelModifier);
-
-        fVMIndex = vowelModifierIndex;
-        fVMFeatures  = vowelModifierFeatures;
-
-        if (IndicClassTable::isVowelModifier(vmClass)) {
-           switch (vmClass & CF_POS_MASK) {
-           case CF_POS_ABOVE:
-               fVMabove = vowelModifier;
-               break;
-
-           case CF_POS_AFTER:
-               fVMpost = vowelModifier;
-               break;
-
-           default:
-               // FIXME: this is an error...
-               break;
-           }
-        }
-    }
-
-    void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures)
-    {
-       IndicClassTable::CharClass smClass = classTable->getCharClass(stressMark);
-
-        fSMIndex = stressMarkIndex;
-        fSMFeatures  = stressMarkFeatures;
-
-        if (IndicClassTable::isStressMark(smClass)) {
-            switch (smClass & CF_POS_MASK) {
-            case CF_POS_ABOVE:
-                fSMabove = stressMark;
-                break;
-
-            case CF_POS_BELOW:
-                fSMbelow = stressMark;
-                break;
-
-            default:
-                // FIXME: this is an error...
-                break;
-           }
-        }
-    }
-
-    void notePreBaseConsonant(le_uint32 index,LEUnicode PBConsonant, LEUnicode PBVirama, FeatureMask features)
-    {
-        fPBCIndex = index;
-        fPreBaseConsonant = PBConsonant;
-        fPreBaseVirama = PBVirama;
-        fPBCFeatures = features;
-    }
-
-    void noteBaseConsonant()
-    {
-        if (fMPreFixups != NULL && fMPreOutIndex >= 0) {
-            fMPreFixups->add(fOutIndex, fMPreOutIndex);
-        }
-    }
-
-    // Handles Al-Lakuna in Sinhala split vowels.
-    void writeAlLakuna()
-    {
-        if (fAlLakuna != 0) {
-            writeChar(fAlLakuna, fAlLakunaIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMpre()
-    {
-        if (fMpre != 0) {
-            fMPreOutIndex = fOutIndex;
-            writeChar(fMpre, fMpreIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMbelow()
-    {
-        if (fMbelow != 0) {
-            writeChar(fMbelow, fMbelowIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMabove()
-    {
-        if (fMabove != 0) {
-            writeChar(fMabove, fMaboveIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMpost()
-    {
-        if (fMpost != 0) {
-            writeChar(fMpost, fMpostIndex, fMatraFeatures);
-        }
-    }
-
-    void writeLengthMark()
-    {
-        if (fLengthMark != 0) {
-            writeChar(fLengthMark, fLengthMarkIndex, fMatraFeatures);
-        }
-    }
-
-    void writeVMabove()
-    {
-        if (fVMabove != 0) {
-            writeChar(fVMabove, fVMIndex, fVMFeatures);
-        }
-    }
-
-    void writeVMpost()
-    {
-        if (fVMpost != 0) {
-            writeChar(fVMpost, fVMIndex, fVMFeatures);
-        }
-    }
-
-    void writeSMabove()
-    {
-        if (fSMabove != 0) {
-            writeChar(fSMabove, fSMIndex, fSMFeatures);
-        }
-    }
-
-    void writeSMbelow()
-    {
-        if (fSMbelow != 0) {
-            writeChar(fSMbelow, fSMIndex, fSMFeatures);
-        }
-    }
-
-    void writePreBaseConsonant()
-    {
-        // The TDIL spec says that consonant + virama + RRA should produce a rakar in Malayalam.  However,
-        // it seems that almost none of the fonts for Malayalam are set up to handle this.
-        // So, we're going to force the issue here by using the rakar as defined with RA in most fonts.
-
-        if (fPreBaseConsonant == 0x0d31) { // RRA
-            fPreBaseConsonant = 0x0d30; // RA
-        }
-
-        if (fPreBaseConsonant != 0) {
-            writeChar(fPreBaseConsonant, fPBCIndex, fPBCFeatures);
-            writeChar(fPreBaseVirama,fPBCIndex-1,fPBCFeatures);
-        }
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-
-// TODO: Find better names for these!
-#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-#define tagArray3 (pstfFeatureMask | tagArray4)
-#define tagArray2 (halfFeatureMask | tagArray3)
-#define tagArray1 (blwfFeatureMask | tagArray2)
-#define tagArray0 (rphfFeatureMask | tagArray1)
-
-static const FeatureMap featureMap[] = {
-    {loclFeatureTag, loclFeatureMask},
-    {initFeatureTag, initFeatureMask},
-    {nuktFeatureTag, nuktFeatureMask},
-    {akhnFeatureTag, akhnFeatureMask},
-    {rphfFeatureTag, rphfFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {halfFeatureTag, halfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask},
-    {vatuFeatureTag, vatuFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {halnFeatureTag, halnFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {distFeatureTag, distFeatureMask}
-};
-
-static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap);
-
-static const FeatureMap v2FeatureMap[] = {
-        {loclFeatureTag, loclFeatureMask},
-    {nuktFeatureTag, nuktFeatureMask},
-    {akhnFeatureTag, akhnFeatureMask},
-    {rphfFeatureTag, rphfFeatureMask},
-        {rkrfFeatureTag, rkrfFeatureMask},
-        {blwfFeatureTag, blwfFeatureMask},
-    {halfFeatureTag, halfFeatureMask},
-    {vatuFeatureTag, vatuFeatureMask},
-    {cjctFeatureTag, cjctFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-        {halnFeatureTag, halnFeatureMask},
-        {caltFeatureTag, caltFeatureMask},
-    {kernFeatureTag, kernFeatureMask},
-    {distFeatureTag, distFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask}
-};
-
-static const le_int32 v2FeatureMapCount = LE_ARRAY_SIZE(v2FeatureMap);
-
-static const le_int8 stateTable[][CC_COUNT] =
-{
-//   xx  vm  sm  iv  i2  i3  ct  cn  nu  dv  s1  s2  s3  vr  zw  al
-    { 1,  6,  1,  5,  8, 11,  3,  2,  1,  5,  9,  5,  5,  1,  1,  1}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  1 - exit state
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1,  5,  9,  5,  5,  4, 12, -1}, //  2 - consonant with nukta
-    {-1,  6,  1, -1, -1, -1, -1, -1,  2,  5,  9,  5,  5,  4, 12, 13}, //  3 - consonant
-    {-1, -1, -1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1, -1,  7, -1}, //  4 - consonant virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  5 - dependent vowels
-    {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  6 - vowel mark
-    {-1, -1, -1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1, -1, -1, -1}, //  7 - consonant virama ZWJ, consonant ZWJ virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  4, -1, -1}, //  8 - independent vowels that can take a virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, 10,  5, -1, -1, -1}, //  9 - first part of split vowel
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  5, -1, -1, -1}, // 10 - second part of split vowel
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1,  5,  9,  5,  5,  4, -1, -1}, // 11 - independent vowels that can take an iv
-    {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  7, -1,  7}, // 12 - consonant ZWJ (TODO: Take everything else that can be after a consonant?)
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  7, -1}  // 13 - consonant al-lakuna ZWJ consonant
-};
-
-
-const FeatureMap *IndicReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureCount;
-
-    return featureMap;
-}
-
-const FeatureMap *IndicReordering::getv2FeatureMap(le_int32 &count)
-{
-    count = v2FeatureMapCount;
-
-    return v2FeatureMap;
-}
-
-le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-    le_int8 consonant_count = 0;
-
-    while (cursor < charCount) {
-        IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]);
-
-        if ( IndicClassTable::isConsonant(charClass) ) {
-            consonant_count++;
-            if ( consonant_count > MAX_CONSONANTS_PER_SYLLABLE ) {
-                break;
-            }
-        }
-
-        state = stateTable[state][charClass & CF_CLASS_MASK];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-                                  MPreFixups **outMPreFixups, LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    MPreFixups *mpreFixups = NULL;
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if(classTable==NULL) {
-      success = LE_MEMORY_ALLOCATION_ERROR;
-      return 0;
-    }
-
-    if (classTable->scriptFlags & SF_MPRE_FIXUP) {
-        mpreFixups = new MPreFixups(charCount);
-        if (mpreFixups == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-    }
-    }
-
-    IndicReorderingOutput output(outChars, glyphStorage, mpreFixups);
-    le_int32 i, prev = 0;
-    le_bool lastInWord = FALSE;
-
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-        le_int32 matra, markStart = syllable;
-
-        output.reset();
-
-        if (classTable->isStressMark(chars[markStart - 1])) {
-            markStart -= 1;
-            output.noteStressMark(classTable, chars[markStart], markStart, tagArray1);
-        }
-
-        if (markStart != prev && classTable->isVowelModifier(chars[markStart - 1])) {
-            markStart -= 1;
-            output.noteVowelModifier(classTable, chars[markStart], markStart, tagArray1);
-        }
-
-        matra = markStart - 1;
-
-        while (output.noteMatra(classTable, chars[matra], matra, tagArray1, !lastInWord) && matra != prev) {
-            matra -= 1;
-        }
-
-        lastInWord = TRUE;
-
-        switch (classTable->getCharClass(chars[prev]) & CF_CLASS_MASK) {
-        case CC_RESERVED:
-            lastInWord = FALSE;
-            /* fall through */
-
-        case CC_INDEPENDENT_VOWEL:
-        case CC_ZERO_WIDTH_MARK:
-            for (i = prev; i < syllable; i += 1) {
-                output.writeChar(chars[i], i, tagArray1);
-            }
-
-            break;
-
-        case CC_AL_LAKUNA:
-        case CC_NUKTA:
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-            output.writeChar(chars[prev], prev, tagArray1);
-            break;
-
-        case CC_VIRAMA:
-            // A lone virama is illegal unless it follows a
-            // MALAYALAM_VOWEL_SIGN_U. Such a usage is called
-            // "samvruthokaram".
-            if (chars[prev - 1] != C_MALAYALAM_VOWEL_SIGN_U) {
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-            }
-
-            output.writeChar(chars[prev], prev, tagArray1);
-            break;
-
-        case CC_DEPENDENT_VOWEL:
-        case CC_SPLIT_VOWEL_PIECE_1:
-        case CC_SPLIT_VOWEL_PIECE_2:
-        case CC_SPLIT_VOWEL_PIECE_3:
-        case CC_VOWEL_MODIFIER:
-        case CC_STRESS_MARK:
-            output.writeMpre();
-
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-
-            output.writeMbelow();
-            output.writeSMbelow();
-            output.writeMabove();
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
-                output.writeMpost();
-            }
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
-                output.writeVMabove();
-                output.writeSMabove(); // FIXME: there are no SM's in these scripts...
-            }
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMpost();
-            }
-
-            output.writeLengthMark();
-            output.writeAlLakuna();
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
-                output.writeVMabove();
-                output.writeSMabove();
-            }
-
-            output.writeVMpost();
-            break;
-
-        case CC_INDEPENDENT_VOWEL_2:
-        case CC_INDEPENDENT_VOWEL_3:
-        case CC_CONSONANT:
-        case CC_CONSONANT_WITH_NUKTA:
-        {
-            le_uint32 length = markStart - prev;
-            le_int32  lastConsonant = markStart - 1;
-            le_int32  baseLimit = prev;
-
-            // Check for REPH at front of syllable
-            if (length > 2 && classTable->isReph(chars[prev]) && classTable->isVirama(chars[prev + 1]) && chars[prev + 2] != C_SIGN_ZWNJ) {
-                baseLimit += 2;
-
-                // Check for eyelash RA, if the script supports it
-                if ((classTable->scriptFlags & SF_EYELASH_RA) != 0 &&
-                    chars[baseLimit] == C_SIGN_ZWJ) {
-                    if (length > 3) {
-                        baseLimit += 1;
-                    } else {
-                        baseLimit -= 2;
-                    }
-                }
-            }
-
-            while (lastConsonant > baseLimit && !classTable->isConsonant(chars[lastConsonant])) {
-                lastConsonant -= 1;
-            }
-
-
-            IndicClassTable::CharClass charClass = CC_RESERVED;
-            IndicClassTable::CharClass nextClass = CC_RESERVED;
-            le_int32 baseConsonant = lastConsonant;
-            le_int32 postBase = lastConsonant + 1;
-            le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
-            le_bool  seenVattu = FALSE;
-            le_bool  seenBelowBaseForm = FALSE;
-            le_bool  seenPreBaseForm = FALSE;
-            le_bool  hasNukta = FALSE;
-            le_bool  hasBelowBaseForm = FALSE;
-            le_bool  hasPostBaseForm = FALSE;
-            le_bool  hasPreBaseForm = FALSE;
-
-            if (postBase < markStart && classTable->isNukta(chars[postBase])) {
-                charClass = CC_NUKTA;
-                postBase += 1;
-            }
-
-            while (baseConsonant > baseLimit) {
-                nextClass = charClass;
-                hasNukta  = IndicClassTable::isNukta(nextClass);
-                charClass = classTable->getCharClass(chars[baseConsonant]);
-
-                hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta;
-                hasPostBaseForm  = IndicClassTable::hasPostBaseForm(charClass)  && !hasNukta;
-                hasPreBaseForm = IndicClassTable::hasPreBaseForm(charClass) && !hasNukta;
-
-                if (IndicClassTable::isConsonant(charClass)) {
-                    if (postBaseLimit == 0 || seenVattu ||
-                        (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) ||
-                        !(hasBelowBaseForm || hasPostBaseForm || hasPreBaseForm)) {
-                        break;
-                    }
-
-                    // Note any pre-base consonants
-                    if ( baseConsonant == lastConsonant && lastConsonant > 0 &&
-                         hasPreBaseForm && classTable->isVirama(chars[baseConsonant - 1])) {
-                        output.notePreBaseConsonant(lastConsonant,chars[lastConsonant],chars[lastConsonant-1],tagArray2);
-                        seenPreBaseForm = TRUE;
-
-                    }
-                    // consonants with nuktas are never vattus
-                    seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
-
-                    // consonants with nuktas never have below- or post-base forms
-                    if (hasPostBaseForm) {
-                        if (seenBelowBaseForm) {
-                            break;
-                        }
-
-                        postBase = baseConsonant;
-                    } else if (hasBelowBaseForm) {
-                        seenBelowBaseForm = TRUE;
-                    }
-
-                    postBaseLimit -= 1;
-                }
-
-                baseConsonant -= 1;
-            }
-
-            // Write Mpre
-            output.writeMpre();
-
-            // Write eyelash RA
-            // NOTE: baseLimit == prev + 3 iff eyelash RA present...
-            if (baseLimit == prev + 3) {
-                output.writeChar(chars[prev], prev, tagArray2);
-                output.writeChar(chars[prev + 1], prev + 1, tagArray2);
-                output.writeChar(chars[prev + 2], prev + 2, tagArray2);
-            }
-
-            // write any pre-base consonants
-            output.writePreBaseConsonant();
-
-            le_bool supressVattu = TRUE;
-
-            for (i = baseLimit; i < baseConsonant; i += 1) {
-                LEUnicode ch = chars[i];
-                // Don't put 'pstf' or 'blwf' on anything before the base consonant.
-                FeatureMask features = tagArray1 & ~( pstfFeatureMask | blwfFeatureMask );
-
-                charClass = classTable->getCharClass(ch);
-                nextClass = classTable->getCharClass(chars[i + 1]);
-                hasNukta  = IndicClassTable::isNukta(nextClass);
-
-                if (IndicClassTable::isConsonant(charClass)) {
-                    if (IndicClassTable::isVattu(charClass) && !hasNukta && supressVattu) {
-                        features = tagArray4;
-                    }
-
-                    supressVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
-                } else if (IndicClassTable::isVirama(charClass) && chars[i + 1] == C_SIGN_ZWNJ)
-                {
-                    features = tagArray4;
-                }
-
-                output.writeChar(ch, i, features);
-            }
-
-            le_int32 bcSpan = baseConsonant + 1;
-
-            if (bcSpan < markStart && classTable->isNukta(chars[bcSpan])) {
-                bcSpan += 1;
-            }
-
-            if (baseConsonant == lastConsonant && bcSpan < markStart &&
-                 (classTable->isVirama(chars[bcSpan]) || classTable->isAlLakuna(chars[bcSpan]))) {
-                bcSpan += 1;
-
-                if (bcSpan < markStart && chars[bcSpan] == C_SIGN_ZWNJ) {
-                    bcSpan += 1;
-                }
-            }
-
-            // note the base consonant for post-GSUB fixups
-            output.noteBaseConsonant();
-
-            // write base consonant
-            for (i = baseConsonant; i < bcSpan; i += 1) {
-                output.writeChar(chars[i], i, tagArray4);
-            }
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
-                output.writeMbelow();
-                output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
-                output.writeMabove();
-                output.writeMpost();
-            }
-
-            // write below-base consonants
-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
-                for (i = bcSpan + 1; i < postBase; i += 1) {
-                    output.writeChar(chars[i], i, tagArray1);
-                }
-
-                if (postBase > lastConsonant) {
-                    // write halant that was after base consonant
-                    output.writeChar(chars[bcSpan], bcSpan, tagArray1);
-                }
-            }
-
-            // write Mbelow, SMbelow, Mabove
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMbelow();
-                output.writeSMbelow();
-                output.writeMabove();
-            }
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
-                if (baseLimit == prev + 2) {
-                    output.writeChar(chars[prev], prev, tagArray0);
-                    output.writeChar(chars[prev + 1], prev + 1, tagArray0);
-                }
-
-                output.writeVMabove();
-                output.writeSMabove(); // FIXME: there are no SM's in these scripts...
-            }
-
-            // write post-base consonants
-            // FIXME: does this put the right tags on post-base consonants?
-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
-                if (postBase <= lastConsonant) {
-                    for (i = postBase; i <= lastConsonant; i += 1) {
-                        output.writeChar(chars[i], i, tagArray3);
-                    }
-
-                    // write halant that was after base consonant
-                    output.writeChar(chars[bcSpan], bcSpan, tagArray1);
-                }
-
-                // write the training halant, if there is one
-                if (lastConsonant < matra && classTable->isVirama(chars[matra])) {
-                    output.writeChar(chars[matra], matra, tagArray4);
-                }
-            }
-
-            // write Mpost
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMpost();
-            }
-
-            output.writeLengthMark();
-            output.writeAlLakuna();
-
-            // write reph
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
-                if (baseLimit == prev + 2) {
-                    output.writeChar(chars[prev], prev, tagArray0);
-                    output.writeChar(chars[prev + 1], prev + 1, tagArray0);
-                }
-
-                output.writeVMabove();
-                output.writeSMabove();
-            }
-
-            output.writeVMpost();
-
-            break;
-        }
-
-        default:
-            break;
-        }
-
-        prev = syllable;
-    }
-
-    *outMPreFixups = mpreFixups;
-
-    return output.getOutputIndex();
-}
-
-void IndicReordering::adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success)
-{
-    if (mpreFixups != NULL) {
-        mpreFixups->apply(glyphStorage, success);
-
-        delete mpreFixups;
-    }
-}
-
-void IndicReordering::applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-//  This sets us up for 2nd pass of glyph substitution as well as setting the feature masks for the
-//  GPOS table lookups
-
-    for ( le_int32 i = 0 ; i < count ; i++ ) {
-        glyphStorage.setAuxData(i, ( presentationFormsMask | positioningFormsMask ), success);
-    }
-
-}
-void IndicReordering::finalReordering(LEGlyphStorage &glyphStorage, le_int32 count)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-    // Reposition REPH as appropriate
-
-    for ( le_int32 i = 0 ; i < count ; i++ ) {
-
-        le_int32 tmpAuxData = glyphStorage.getAuxData(i,success);
-        LEGlyphID tmpGlyph = glyphStorage.getGlyphID(i,success);
-
-        if ( ( tmpGlyph != NO_GLYPH ) && (tmpAuxData & rephConsonantMask) && !(tmpAuxData & repositionedGlyphMask))  {
-
-            le_bool targetPositionFound = false;
-            le_int32 targetPosition = i+1;
-            le_int32 baseConsonantData;
-
-            while (!targetPositionFound) {
-                tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-                tmpAuxData = glyphStorage.getAuxData(targetPosition,success);
-
-                if ( tmpAuxData & baseConsonantMask ) {
-                    baseConsonantData = tmpAuxData;
-                    targetPositionFound = true;
-                } else {
-                    targetPosition++;
-                }
-            }
-
-            // Make sure we are not putting the reph into an empty hole
-
-            le_bool targetPositionHasGlyph = false;
-            while (!targetPositionHasGlyph) {
-                tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-                if ( tmpGlyph != NO_GLYPH ) {
-                    targetPositionHasGlyph = true;
-                } else {
-                    targetPosition--;
-                }
-            }
-
-            // Make sure that REPH is positioned after any above base or post base matras
-            //
-            le_bool checkMatraDone = false;
-            le_int32 checkMatraPosition = targetPosition+1;
-            while ( !checkMatraDone ) {
-               tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
-               if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
-                   checkMatraDone = true;
-                   continue;
-               }
-               if ( (tmpAuxData & matraMask) &&
-                    (((tmpAuxData & markPositionMask) == aboveBasePosition) ||
-                      ((tmpAuxData & markPositionMask) == postBasePosition))) {
-                   targetPosition = checkMatraPosition;
-               }
-               checkMatraPosition++;
-            }
-
-            glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
-        }
-    }
-}
-
-
-le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage, LEErrorCode& success)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-    if (classTable == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    DynamicProperties dynProps[INDIC_BLOCK_SIZE];
-    IndicReordering::getDynamicProperties(dynProps,classTable);
-
-    IndicReorderingOutput output(outChars, glyphStorage, NULL);
-    le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
-    //le_bool lastInWord = FALSE;
-
-    while (beginSyllable < charCount) {
-        le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
-
-        output.reset();
-
-                // Find the First Consonant
-                for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
-                         if ( classTable->isConsonant(chars[firstConsonant]) ) {
-                                        break;
-                                }
-                }
-
-        // Find the base consonant
-
-        baseConsonant = nextSyllable - 1;
-        secondConsonant = firstConsonant;
-
-        // TODO: Use Dynamic Properties for hasBelowBaseForm and hasPostBaseForm()
-
-        while ( baseConsonant > firstConsonant ) {
-            if ( classTable->isConsonant(chars[baseConsonant]) &&
-                 !classTable->hasBelowBaseForm(chars[baseConsonant]) &&
-                 !classTable->hasPostBaseForm(chars[baseConsonant]) ) {
-                break;
-            }
-            else {
-                if ( classTable->isConsonant(chars[baseConsonant]) ) {
-                    secondConsonant = baseConsonant;
-                }
-                baseConsonant--;
-            }
-        }
-
-        // If the syllable starts with Ra + Halant ( in a script that has Reph ) and has more than one
-        // consonant, Ra is excluced from candidates for base consonants
-
-        if ( classTable->isReph(chars[beginSyllable]) &&
-             beginSyllable+1 < nextSyllable && classTable->isVirama(chars[beginSyllable+1]) &&
-             secondConsonant != firstConsonant) {
-            baseConsonant = secondConsonant;
-        }
-
-            // Populate the output
-                for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-
-            // Handle invalid combinartions
-
-            if ( classTable->isVirama(chars[beginSyllable]) ||
-                             classTable->isMatra(chars[beginSyllable]) ||
-                             classTable->isVowelModifier(chars[beginSyllable]) ||
-                             classTable->isNukta(chars[beginSyllable]) ) {
-                     output.writeChar(C_DOTTED_CIRCLE,beginSyllable,basicShapingFormsMask);
-                     inv_count++;
-            }
-             output.writeChar(chars[i],i, basicShapingFormsMask);
-
-        }
-
-        // Adjust features and set syllable structure bits
-
-        for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-
-            FeatureMask outMask = output.getFeatures(i+inv_count);
-            FeatureMask saveMask = outMask;
-
-            // Since reph can only validly occur at the beginning of a syllable
-            // We only apply it to the first 2 characters in the syllable, to keep it from
-            // conflicting with other features ( i.e. rkrf )
-
-            // TODO : Use the dynamic property for determining isREPH
-            if ( i == beginSyllable && i < baseConsonant && classTable->isReph(chars[i]) &&
-                 i+1 < nextSyllable && classTable->isVirama(chars[i+1])) {
-                outMask |= rphfFeatureMask;
-                outMask |= rephConsonantMask;
-                output.setFeatures(i+1+inv_count,outMask);
-
-            }
-
-            if ( i == baseConsonant ) {
-                outMask |= baseConsonantMask;
-            }
-
-            if ( classTable->isMatra(chars[i])) {
-                    outMask |= matraMask;
-                    if ( classTable->hasAboveBaseForm(chars[i])) {
-                        outMask |= aboveBasePosition;
-                    } else if ( classTable->hasBelowBaseForm(chars[i])) {
-                        outMask |= belowBasePosition;
-                    }
-            }
-
-            // Don't apply half form to virama that stands alone at the end of a syllable
-            // to prevent half forms from forming when syllable ends with virama
-
-            if ( classTable->isVirama(chars[i]) && (i+1 == nextSyllable) ) {
-                outMask ^= halfFeatureMask;
-                if ( classTable->isConsonant(chars[i-1]) ) {
-                    FeatureMask tmp = output.getFeatures(i-1+inv_count);
-                    tmp ^= halfFeatureMask;
-                    output.setFeatures(i-1+inv_count,tmp);
-                }
-            }
-
-            if ( outMask != saveMask ) {
-                output.setFeatures(i+inv_count,outMask);
-            }
-                }
-
-            output.decomposeReorderMatras(classTable,beginSyllable,nextSyllable,inv_count);
-
-        beginSyllable = nextSyllable;
-        }
-
-
-    return output.getOutputIndex();
-}
-
-
-void IndicReordering::getDynamicProperties( DynamicProperties *, const IndicClassTable *classTable ) {
-
-
-    LEUnicode currentChar;
-    LEUnicode workChars[2];
-    LEGlyphStorage workGlyphs;
-
-    IndicReorderingOutput workOutput(workChars, workGlyphs, NULL);
-
-    //le_int32 offset = 0;
-
-#if 0
-// TODO:  Should this section of code have actually been doing something?
-    // First find the relevant virama for the script we are dealing with
-    LEUnicode virama;
-    for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-        if ( classTable->isVirama(currentChar)) {
-            virama = currentChar;
-            break;
-        }
-    }
-#endif
-
-    for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-        if ( classTable->isConsonant(currentChar)) {
-            workOutput.reset();
-        }
-    }
-
-
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/IndicReordering.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,383 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREORDERING_H
-#define __INDICREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-// Characters that get referred to by name...
-#define C_SIGN_ZWNJ           0x200C
-#define C_SIGN_ZWJ            0x200D
-
-// Character class values
-#define CC_RESERVED               0U
-#define CC_VOWEL_MODIFIER         1U
-#define CC_STRESS_MARK            2U
-#define CC_INDEPENDENT_VOWEL      3U
-#define CC_INDEPENDENT_VOWEL_2    4U
-#define CC_INDEPENDENT_VOWEL_3    5U
-#define CC_CONSONANT              6U
-#define CC_CONSONANT_WITH_NUKTA   7U
-#define CC_NUKTA                  8U
-#define CC_DEPENDENT_VOWEL        9U
-#define CC_SPLIT_VOWEL_PIECE_1   10U
-#define CC_SPLIT_VOWEL_PIECE_2   11U
-#define CC_SPLIT_VOWEL_PIECE_3   12U
-#define CC_VIRAMA                13U
-#define CC_ZERO_WIDTH_MARK       14U
-#define CC_AL_LAKUNA             15U
-#define CC_COUNT                 16U
-
-// Character class flags
-#define CF_CLASS_MASK    0x0000FFFFU
-
-#define CF_CONSONANT     0x80000000U
-
-#define CF_REPH          0x40000000U
-#define CF_VATTU         0x20000000U
-#define CF_BELOW_BASE    0x10000000U
-#define CF_POST_BASE     0x08000000U
-#define CF_LENGTH_MARK   0x04000000U
-#define CF_PRE_BASE      0x02000000U
-
-#define CF_POS_BEFORE    0x00300000U
-#define CF_POS_BELOW     0x00200000U
-#define CF_POS_ABOVE     0x00100000U
-#define CF_POS_AFTER     0x00000000U
-#define CF_POS_MASK      0x00300000U
-
-#define CF_INDEX_MASK    0x000F0000U
-#define CF_INDEX_SHIFT   16
-
-// Script flag bits
-#define SF_MATRAS_AFTER_BASE     0x80000000U
-#define SF_REPH_AFTER_BELOW      0x40000000U
-#define SF_EYELASH_RA            0x20000000U
-#define SF_MPRE_FIXUP            0x10000000U
-#define SF_FILTER_ZERO_WIDTH     0x08000000U
-
-#define SF_POST_BASE_LIMIT_MASK  0x0000FFFFU
-#define SF_NO_POST_BASE_LIMIT    0x00007FFFU
-
-#define SM_MAX_PIECES 3
-
-typedef LEUnicode SplitMatra[SM_MAX_PIECES];
-
-class MPreFixups;
-class LEGlyphStorage;
-
-// Dynamic Properties ( v2 fonts only )
-typedef le_uint32 DynamicProperties;
-
-#define DP_REPH               0x80000000U
-#define DP_HALF               0x40000000U
-#define DP_PREF               0x20000000U
-#define DP_BLWF               0x10000000U
-#define DP_PSTF               0x08000000U
-
-struct IndicClassTable
-{
-    typedef le_uint32 CharClass;
-    typedef le_uint32 ScriptFlags;
-
-    LEUnicode firstChar;
-    LEUnicode lastChar;
-    le_int32 worstCaseExpansion;
-    ScriptFlags scriptFlags;
-    const CharClass *classTable;
-    const SplitMatra *splitMatraTable;
-
-    inline le_int32 getWorstCaseExpansion() const;
-    inline le_bool getFilterZeroWidth() const;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    inline const SplitMatra *getSplitMatra(CharClass charClass) const;
-
-    inline le_bool isVowelModifier(LEUnicode ch) const;
-    inline le_bool isStressMark(LEUnicode ch) const;
-    inline le_bool isConsonant(LEUnicode ch) const;
-    inline le_bool isReph(LEUnicode ch) const;
-    inline le_bool isVirama(LEUnicode ch) const;
-    inline le_bool isAlLakuna(LEUnicode ch) const;
-    inline le_bool isNukta(LEUnicode ch) const;
-    inline le_bool isVattu(LEUnicode ch) const;
-    inline le_bool isMatra(LEUnicode ch) const;
-    inline le_bool isSplitMatra(LEUnicode ch) const;
-    inline le_bool isLengthMark(LEUnicode ch) const;
-    inline le_bool hasPostOrBelowBaseForm(LEUnicode ch) const;
-    inline le_bool hasPostBaseForm(LEUnicode ch) const;
-    inline le_bool hasBelowBaseForm(LEUnicode ch) const;
-    inline le_bool hasAboveBaseForm(LEUnicode ch) const;
-    inline le_bool hasPreBaseForm(LEUnicode ch) const;
-
-    inline static le_bool isVowelModifier(CharClass charClass);
-    inline static le_bool isStressMark(CharClass charClass);
-    inline static le_bool isConsonant(CharClass charClass);
-    inline static le_bool isReph(CharClass charClass);
-    inline static le_bool isVirama(CharClass charClass);
-    inline static le_bool isAlLakuna(CharClass charClass);
-    inline static le_bool isNukta(CharClass charClass);
-    inline static le_bool isVattu(CharClass charClass);
-    inline static le_bool isMatra(CharClass charClass);
-    inline static le_bool isSplitMatra(CharClass charClass);
-    inline static le_bool isLengthMark(CharClass charClass);
-    inline static le_bool hasPostOrBelowBaseForm(CharClass charClass);
-    inline static le_bool hasPostBaseForm(CharClass charClass);
-    inline static le_bool hasBelowBaseForm(CharClass charClass);
-    inline static le_bool hasAboveBaseForm(CharClass charClass);
-    inline static le_bool hasPreBaseForm(CharClass charClass);
-
-    static const IndicClassTable *getScriptClassTable(le_int32 scriptCode);
-};
-
-class IndicReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 getWorstCaseExpansion(le_int32 scriptCode);
-
-    static le_bool getFilterZeroWidth(le_int32 scriptCode);
-
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-        MPreFixups **outMPreFixups, LEErrorCode& success);
-
-    static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
-    static le_int32 v2process(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-        static const FeatureMap *getv2FeatureMap(le_int32 &count);
-
-    static void applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count);
-
-    static void finalReordering(LEGlyphStorage &glyphStorage, le_int32 count);
-
-    static void getDynamicProperties(DynamicProperties *dProps, const IndicClassTable *classTable);
-
-private:
-    // do not instantiate
-    IndicReordering();
-
-    static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-inline le_int32 IndicClassTable::getWorstCaseExpansion() const
-{
-    return worstCaseExpansion;
-}
-
-inline le_bool IndicClassTable::getFilterZeroWidth() const
-{
-    return (scriptFlags & SF_FILTER_ZERO_WIDTH) != 0;
-}
-
-inline const SplitMatra *IndicClassTable::getSplitMatra(CharClass charClass) const
-{
-    le_int32 index = (charClass & CF_INDEX_MASK) >> CF_INDEX_SHIFT;
-
-    return &splitMatraTable[index - 1];
-}
-
-inline le_bool IndicClassTable::isVowelModifier(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_VOWEL_MODIFIER;
-}
-
-inline le_bool IndicClassTable::isStressMark(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_STRESS_MARK;
-}
-
-inline le_bool IndicClassTable::isConsonant(CharClass charClass)
-{
-    return (charClass & CF_CONSONANT) != 0;
-}
-
-inline le_bool IndicClassTable::isReph(CharClass charClass)
-{
-    return (charClass & CF_REPH) != 0;
-}
-
-inline le_bool IndicClassTable::isNukta(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_NUKTA;
-}
-
-inline le_bool IndicClassTable::isVirama(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_VIRAMA;
-}
-
-inline le_bool IndicClassTable::isAlLakuna(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_AL_LAKUNA;
-}
-
-inline le_bool IndicClassTable::isVattu(CharClass charClass)
-{
-    return (charClass & CF_VATTU) != 0;
-}
-
-inline le_bool IndicClassTable::isMatra(CharClass charClass)
-{
-    charClass &= CF_CLASS_MASK;
-
-    return charClass >= CC_DEPENDENT_VOWEL && charClass <= CC_SPLIT_VOWEL_PIECE_3;
-}
-
-inline le_bool IndicClassTable::isSplitMatra(CharClass charClass)
-{
-    return (charClass & CF_INDEX_MASK) != 0;
-}
-
-inline le_bool IndicClassTable::isLengthMark(CharClass charClass)
-{
-    return (charClass & CF_LENGTH_MARK) != 0;
-}
-
-inline le_bool IndicClassTable::hasPostOrBelowBaseForm(CharClass charClass)
-{
-    return (charClass & (CF_POST_BASE | CF_BELOW_BASE)) != 0;
-}
-
-inline le_bool IndicClassTable::hasPostBaseForm(CharClass charClass)
-{
-    return (charClass & CF_POST_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasPreBaseForm(CharClass charClass)
-{
-    return (charClass & CF_PRE_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasBelowBaseForm(CharClass charClass)
-{
-    return (charClass & CF_BELOW_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasAboveBaseForm(CharClass charClass)
-{
-    return ((charClass & CF_POS_MASK) == CF_POS_ABOVE);
-}
-
-inline le_bool IndicClassTable::isVowelModifier(LEUnicode ch) const
-{
-    return isVowelModifier(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isStressMark(LEUnicode ch) const
-{
-    return isStressMark(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isConsonant(LEUnicode ch) const
-{
-    return isConsonant(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isReph(LEUnicode ch) const
-{
-    return isReph(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isVirama(LEUnicode ch) const
-{
-    return isVirama(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isAlLakuna(LEUnicode ch) const
-{
-    return isAlLakuna(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isNukta(LEUnicode ch) const
-{
-    return isNukta(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isVattu(LEUnicode ch) const
-{
-    return isVattu(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isMatra(LEUnicode ch) const
-{
-    return isMatra(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isSplitMatra(LEUnicode ch) const
-{
-    return isSplitMatra(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isLengthMark(LEUnicode ch) const
-{
-    return isLengthMark(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPostOrBelowBaseForm(LEUnicode ch) const
-{
-    return hasPostOrBelowBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPostBaseForm(LEUnicode ch) const
-{
-    return hasPostBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasBelowBaseForm(LEUnicode ch) const
-{
-    return hasBelowBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPreBaseForm(LEUnicode ch) const
-{
-    return hasPreBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasAboveBaseForm(LEUnicode ch) const
-{
-    return hasAboveBaseForm(getCharClass(ch));
-}
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/KernTable.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,288 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 2004-2010 - All Rights Reserved
- *
- */
-
-#include "KernTable.h"
-#include "LEFontInstance.h"
-#include "LEGlyphStorage.h"
-
-#include "LESwaps.h"
-#include "OpenTypeUtilities.h"
-
-#include <stdio.h>
-
-#define DEBUG_KERN_TABLE 0
-
-U_NAMESPACE_BEGIN
-
-struct PairInfo {
-  le_uint32 key;   // sigh, MSVC compiler gags on union here
-  le_int16  value; // fword, kern value in funits
-};
-#define KERN_PAIRINFO_SIZE 6
-LE_CORRECT_SIZE(PairInfo, KERN_PAIRINFO_SIZE)
-struct Subtable_0 {
-  le_uint16 nPairs;
-  le_uint16 searchRange;
-  le_uint16 entrySelector;
-  le_uint16 rangeShift;
-};
-#define KERN_SUBTABLE_0_HEADER_SIZE 8
-LE_CORRECT_SIZE(Subtable_0, KERN_SUBTABLE_0_HEADER_SIZE)
-
-// Kern table version 0 only
-struct SubtableHeader {
-  le_uint16 version;
-  le_uint16 length;
-  le_uint16 coverage;
-};
-#define KERN_SUBTABLE_HEADER_SIZE 6
-LE_CORRECT_SIZE(SubtableHeader, KERN_SUBTABLE_HEADER_SIZE)
-
-// Version 0 only, version 1 has different layout
-struct KernTableHeader {
-  le_uint16 version;
-  le_uint16 nTables;
-};
-#define KERN_TABLE_HEADER_SIZE 4
-LE_CORRECT_SIZE(KernTableHeader, KERN_TABLE_HEADER_SIZE)
-
-#define COVERAGE_HORIZONTAL 0x1
-#define COVERAGE_MINIMUM 0x2
-#define COVERAGE_CROSS 0x4
-#define COVERAGE_OVERRIDE 0x8
-
-/*
- * This implementation has support for only one subtable, so if the font has
- * multiple subtables, only the first will be used.  If this turns out to
- * be a problem in practice we should add it.
- *
- * This also supports only version 0 of the kern table header, only
- * Apple supports the latter.
- *
- * This implementation isn't careful about the kern table flags, and
- * might invoke kerning when it is not supposed to.  That too I'm
- * leaving for a bug fix.
- *
- * TODO: support multiple subtables
- * TODO: respect header flags
- */
-KernTable::KernTable(const LETableReference& base, LEErrorCode &success)
-  : pairsSwapped(NULL), fTable(base)
-{
-  if(LE_FAILURE(success) || (fTable.isEmpty())) {
-#if DEBUG_KERN_TABLE
-    fprintf(stderr, "no kern data\n");
-#endif
-    return;
-  }
-  LEReferenceTo<KernTableHeader> header(fTable, success);
-
-#if DEBUG_KERN_TABLE
-  // dump first 32 bytes of header
-  for (int i = 0; i < 64; ++i) {
-    fprintf(stderr, "%0.2x ", ((const char*)header.getAlias())[i]&0xff);
-    if (((i+1)&0xf) == 0) {
-      fprintf(stderr, "\n");
-    } else if (((i+1)&0x7) == 0) {
-      fprintf(stderr, "  ");
-    }
-  }
-#endif
-
-  if(LE_FAILURE(success)) return;
-
-  if (!header.isEmpty() && header->version == 0 && SWAPW(header->nTables) > 0) {
-    LEReferenceTo<SubtableHeader> subhead(header, success, KERN_TABLE_HEADER_SIZE);
-
-    if (LE_SUCCESS(success) && !subhead.isEmpty() && subhead->version == 0) {
-      coverage = SWAPW(subhead->coverage);
-      if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning
-        LEReferenceTo<Subtable_0> table(subhead, success, KERN_SUBTABLE_HEADER_SIZE);
-
-        if(table.isEmpty() || LE_FAILURE(success)) return;
-
-        nPairs        = SWAPW(table->nPairs);
-
-#if 0   // some old fonts have bad values here...
-        searchRange   = SWAPW(table->searchRange);
-        entrySelector = SWAPW(table->entrySelector);
-        rangeShift    = SWAPW(table->rangeShift);
-#else
-        entrySelector = OpenTypeUtilities::highBit(nPairs);
-        searchRange   = (1 << entrySelector) * KERN_PAIRINFO_SIZE;
-        rangeShift    = (nPairs * KERN_PAIRINFO_SIZE) - searchRange;
-#endif
-
-        if(LE_SUCCESS(success) && nPairs>0) {
-          // pairsSwapped is an instance member, and table is on the stack.
-          // set 'pairsSwapped' based on table.getAlias(). This will range check it.
-
-          pairsSwapped = (PairInfo*)(fTable.getFont()->getKernPairs());
-          if (pairsSwapped == NULL) {
-            LEReferenceToArrayOf<PairInfo>pairs =
-              LEReferenceToArrayOf<PairInfo>(fTable, // based on overall table
-                                             success,
-                                             (const PairInfo*)table.getAlias(),  // subtable 0 + ..
-                                             KERN_SUBTABLE_0_HEADER_SIZE,  // .. offset of header size
-                                             nPairs); // count
-            if (LE_SUCCESS(success) && pairs.isValid()) {
-              pairsSwapped =  (PairInfo*)(malloc(nPairs*sizeof(PairInfo)));
-              PairInfo *p = (PairInfo*)pairsSwapped;
-              for (int i = 0; LE_SUCCESS(success) && i < nPairs; i++, p++) {
-                memcpy(p, pairs.getAlias(i,success), KERN_PAIRINFO_SIZE);
-                p->key = SWAPL(p->key);
-              }
-              fTable.getFont()->setKernPairs((void*)pairsSwapped); // store it
-            }
-          }
-        }
-
-#if 0
-        fprintf(stderr, "coverage: %0.4x nPairs: %d pairs %p\n", coverage, nPairs, pairsSwapped);
-        fprintf(stderr, "  searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift);
-        fprintf(stderr, "[[ ignored font table entries: range %d selector %d shift %d ]]\n", SWAPW(table->searchRange), SWAPW(table->entrySelector), SWAPW(table->rangeShift));
-#endif
-#if DEBUG_KERN_TABLE
-        fprintf(stderr, "coverage: %0.4x nPairs: %d pairs 0x%x\n", coverage, nPairs, pairsSwapped);
-        fprintf(stderr,
-          "  searchRange(pairs): %d entrySelector: %d rangeShift(pairs): %d\n",
-          searchRange, entrySelector, rangeShift);
-
-        if (LE_SUCCESS(success)) {
-          // dump part of the pair list
-          char ids[256];
-          for (int i = 256; --i >= 0;) {
-            LEGlyphID id = font->mapCharToGlyph(i);
-            if (id < 256) {
-              ids[id] = (char)i;
-            }
-          }
-          PairInfo *p = pairsSwapped;
-          for (int i = 0; i < nPairs; ++i, p++) {
-            le_uint32 k = p->key;
-            le_uint16 left = (k >> 16) & 0xffff;
-            le_uint16 right = k & 0xffff;
-            if (left < 256 && right < 256) {
-              char c = ids[left];
-              if (c > 0x20 && c < 0x7f) {
-                fprintf(stderr, "%c/", c & 0xff);
-              } else {
-                fprintf(stderr, "%0.2x/", c & 0xff);
-              }
-              c = ids[right];
-              if (c > 0x20 && c < 0x7f) {
-                fprintf(stderr, "%c ", c & 0xff);
-              } else {
-                fprintf(stderr, "%0.2x ", c & 0xff);
-              }
-            }
-          }
-        }
-#endif
-      }
-    }
-  }
-}
-
-
-/*
- * Process the glyph positions.  The positions array has two floats for each
- * glyph, plus a trailing pair to mark the end of the last glyph.
- */
-void KernTable::process(LEGlyphStorage& storage, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return;
-
-  if (pairsSwapped) {
-    success = LE_NO_ERROR;
-
-    le_uint32 key = storage[0]; // no need to mask off high bits
-    float adjust = 0;
-
-    for (int i = 1, e = storage.getGlyphCount(); LE_SUCCESS(success)&&  i < e; ++i) {
-      key = key << 16 | (storage[i] & 0xffff);
-
-      // argh, to do a binary search, we need to have the pair list in sorted order
-      // but it is not in sorted order on win32 platforms because of the endianness difference
-      // so either I have to swap the element each time I examine it, or I have to swap
-      // all the elements ahead of time and store them in the font
-
-      const PairInfo* p = pairsSwapped;
-      const PairInfo* tp = (const PairInfo*)(p + (rangeShift/KERN_PAIRINFO_SIZE)); /* rangeshift is in original table bytes */
-      if (key > tp->key) {
-        p = tp;
-      }
-
-#if DEBUG_KERN_TABLE
-      fprintf(stderr, "binary search for %0.8x\n", key);
-#endif
-
-      le_uint32 probe = searchRange;
-      while (probe > 1) {
-        probe >>= 1;
-        tp = (const PairInfo*)(p + (probe/KERN_PAIRINFO_SIZE));
-        le_uint32 tkey = tp->key;
-#if DEBUG_KERN_TABLE
-        fprintf(stdout, "   %.3d (%0.8x)\n", (tp - pairsSwapped), tkey);
-#endif
-        if (tkey <= key) {
-          if (tkey == key) {
-            le_int16 value = SWAPW(tp->value);
-#if DEBUG_KERN_TABLE
-            fprintf(stdout, "binary found kerning pair %x:%x at %d, value: 0x%x (%g)\n",
-                    storage[i-1], storage[i], i, value & 0xffff, font->xUnitsToPoints(value));
-            fflush(stdout);
-#endif
-            // Have to undo the device transform.
-            // REMIND either find a way to do this only if there is a
-            // device transform, or a faster way, such as moving the
-            // entire kern table up to Java.
-            LEPoint pt;
-            pt.fX = fTable.getFont()->xUnitsToPoints(value);
-            pt.fY = 0;
-
-            fTable.getFont()->getKerningAdjustment(pt);
-            adjust += pt.fX;
-            break;
-          }
-          p = tp;
-        }
-      }
-
-      storage.adjustPosition(i, adjust, 0, success);
-    }
-    storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success);
-  }
-}
-
-U_NAMESPACE_END
-
--- a/src/java.desktop/share/native/libfontmanager/layout/KernTable.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 2004-2013 - All Rights Reserved
- *
- */
-
-#ifndef __KERNTABLE_H
-#define __KERNTABLE_H
-
-#ifndef __LETYPES_H
-#include "LETypes.h"
-#endif
-
-#include "LETypes.h"
-#include "LETableReference.h"
-//#include "LEFontInstance.h"
-//#include "LEGlyphStorage.h"
-
-#include <stdio.h>
-
-U_NAMESPACE_BEGIN
-struct PairInfo;
-class  LEFontInstance;
-class  LEGlyphStorage;
-
-/**
- * Windows type 0 kerning table support only for now.
- */
-class U_LAYOUT_API KernTable
-{
- private:
-  le_uint16 coverage;
-  le_uint16 nPairs;
-  PairInfo  *pairsSwapped;
-  const LETableReference &fTable;
-  le_uint16 searchRange;
-  le_uint16 entrySelector;
-  le_uint16 rangeShift;
-
- public:
-  KernTable(const LETableReference &table, LEErrorCode &success);
-
-  /*
-   * Process the glyph positions.
-   */
-  void process(LEGlyphStorage& storage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/KhmerLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicLayoutEngine.cpp
- * by Jens Herden and Javier Sola for Khmer language
- *
- */
-
-
-#include "OpenTypeLayoutEngine.h"
-#include "KhmerLayoutEngine.h"
-#include "LEGlyphStorage.h"
-#include "KhmerReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine)
-
-KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap   = KhmerReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap   = KhmerReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-KhmerOpenTypeLayoutEngine::~KhmerOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;  // worst case is 3 for Khmer  TODO check if 2 is enough
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-    le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/KhmerLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicLayoutEngine.h
- * by Jens Herden and Javier Sola for Khmer language
- *
- */
-
-#ifndef __KHMERLAYOUTENGINE_H
-#define __KHMERLAYOUTENGINE_H
-
-// #include "LETypes.h"
-// #include "LEFontInstance.h"
-// #include "LEGlyphFilter.h"
-// #include "LayoutEngine.h"
-// #include "OpenTypeLayoutEngine.h"
-
-// #include "GlyphSubstitutionTables.h"
-// #include "GlyphDefinitionTables.h"
-// #include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-// class MPreFixups;
-// class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Khmer OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * Khmer Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm) TODO: change url
- *
- * This class overrides the characterProcessing method to do Khmer character processing
- * and reordering (See the MS spec. for more details)
- *
- * @internal
- */
-class KhmerOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of KhmerOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Khmer OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                              le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~KhmerOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Khmer OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered.
-     * It may also split some vowels, resulting in more output characters than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/KhmerReordering.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,524 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicReordering.cpp
- * by Jens Herden and Javier Sola for Khmer language
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "KhmerReordering.h"
-#include "LEGlyphStorage.h"
-
-
-U_NAMESPACE_BEGIN
-
-// Characters that get referred to by name...
-enum
-{
-    C_SIGN_ZWNJ     = 0x200C,
-    C_SIGN_ZWJ      = 0x200D,
-    C_DOTTED_CIRCLE = 0x25CC,
-    C_RO            = 0x179A,
-    C_VOWEL_AA      = 0x17B6,
-    C_SIGN_NIKAHIT  = 0x17C6,
-    C_VOWEL_E       = 0x17C1,
-    C_COENG         = 0x17D2
-};
-
-
-enum
-{
-    // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-    // they are also used to know where a character should be placed (location in reference to the base character)
-    // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-    // indicate error in syllable construction
-    _xx = KhmerClassTable::CC_RESERVED,
-    _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_POS_ABOVE,
-    _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE| KhmerClassTable::CF_POS_AFTER,
-    _c1 = KhmerClassTable::CC_CONSONANT | KhmerClassTable::CF_CONSONANT,
-    _c2 = KhmerClassTable::CC_CONSONANT2 | KhmerClassTable::CF_CONSONANT,
-    _c3 = KhmerClassTable::CC_CONSONANT3 | KhmerClassTable::CF_CONSONANT,
-    _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_SHIFTER,
-    _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL,
-    _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG | KhmerClassTable::CF_DOTTED_CIRCLE,
-
-    // split vowel
-    _va = _da | KhmerClassTable::CF_SPLIT_VOWEL,
-    _vr = _dr | KhmerClassTable::CF_SPLIT_VOWEL
-};
-
-
-// Character class tables
-// _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs...
-// _sa Sign placed above the base
-// _sp Sign placed after the base
-// _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
-// _c2 Consonant of type 2 (only RO)
-// _c3 Consonant of type 3
-// _rb Khmer sign robat u17CC. combining mark for subscript consonants
-// _cd Consonant-shifter
-// _dl Dependent vowel placed before the base (left of the base)
-// _db Dependent vowel placed below the base
-// _da Dependent vowel placed above the base
-// _dr Dependent vowel placed behind the base (right of the base)
-// _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following
-//     it to create a subscript consonant or independent vowel
-// _va Khmer split vowel in wich the first part is before the base and the second one above the base
-// _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base
-
-static const KhmerClassTable::CharClass khmerCharClasses[] =
-{
-    _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, // 1780 - 178F
-    _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, // 1790 - 179F
-    _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, // 17A0 - 17AF
-    _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, // 17B0 - 17BF
-    _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, // 17C0 - 17CF
-    _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx, // 17D0 - 17DF
-};
-
-
-//
-// Khmer Class Tables
-//
-
-//
-// The range of characters defined in the above table is defined here. FOr Khmer 1780 to 17DF
-// Even if the Khmer range is bigger, all other characters are not combinable, and therefore treated
-// as _xx
-static const KhmerClassTable khmerClassTable = {0x1780, 0x17df, khmerCharClasses};
-
-
-// Below we define how a character in the input string is either in the khmerCharClasses table
-// (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear
-// within the syllable, but are not in the table) we also get their type back, or an unknown object
-// in which case we get _xx (CC_RESERVED) back
-KhmerClassTable::CharClass KhmerClassTable::getCharClass(LEUnicode ch) const
-{
-
-    if (ch == C_SIGN_ZWJ) {
-        return CC_ZERO_WIDTH_J_MARK;
-    }
-
-    if (ch == C_SIGN_ZWNJ) {
-        return CC_ZERO_WIDTH_NJ_MARK;
-    }
-
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-
-    return classTable[ch - firstChar];
-}
-
-const KhmerClassTable *KhmerClassTable::getKhmerClassTable()
-{
-    return &khmerClassTable;
-}
-
-
-
-class KhmerReorderingOutput : public UMemory {
-private:
-    le_int32 fSyllableCount;
-    le_int32 fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-
-public:
-    KhmerReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-    {
-        // nothing else to do...
-    }
-
-    ~KhmerReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
-        fOutIndex += 1;
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-
-#define prefFeatureTag LE_PREF_FEATURE_TAG
-#define abvfFeatureTag LE_ABVF_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-#define prefFeatureMask 0x80000000UL
-#define blwfFeatureMask 0x40000000UL
-#define abvfFeatureMask 0x20000000UL
-#define pstfFeatureMask 0x10000000UL
-#define presFeatureMask 0x08000000UL
-#define blwsFeatureMask 0x04000000UL
-#define abvsFeatureMask 0x02000000UL
-#define pstsFeatureMask 0x01000000UL
-#define cligFeatureMask 0x00800000UL
-#define distFeatureMask 0x00400000UL
-#define blwmFeatureMask 0x00200000UL
-#define abvmFeatureMask 0x00100000UL
-#define mkmkFeatureMask 0x00080000UL
-
-#define tagPref    (prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-#define tagAbvf    (abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-#define tagPstf    (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-#define tagBlwf    (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-
-
-
-// These are in the order in which the features need to be applied
-// for correct processing
-static const FeatureMap featureMap[] =
-{
-    // Shaping features
-    {prefFeatureTag, prefFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {abvfFeatureTag, abvfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {cligFeatureTag, cligFeatureMask},
-
-    // Positioning features
-    {distFeatureTag, distFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-// The stateTable is used to calculate the end (the length) of a well
-// formed Khmer Syllable.
-//
-// Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
-// CharClassValues in KhmerReordering.h This coincidence of values allows the
-// follow up of the table.
-//
-// Each line corresponds to a state, which does not necessarily need to be a type
-// of component... for example, state 2 is a base, with is always a first character
-// in the syllable, but the state could be produced a consonant of any type when
-// it is the first character that is analysed (in ground state).
-//
-// Differentiating 3 types of consonants is necessary in order to
-// forbid the use of certain combinations, such as having a second
-// coeng after a coeng RO,
-// The inexistent possibility of having a type 3 after another type 3 is permitted,
-// eliminating it would very much complicate the table, and it does not create typing
-// problems, as the case above.
-//
-// The table is quite complex, in order to limit the number of coeng consonants
-// to 2 (by means of the table).
-//
-// There a peculiarity, as far as Unicode is concerned:
-// - The consonant-shifter is considered in two possible different
-//   locations, the one considered in Unicode 3.0 and the one considered in
-//   Unicode 4.0. (there is a backwards compatibility problem in this standard).
-
-
-// xx    independent character, such as a number, punctuation sign or non-khmer char
-//
-// c1    Khmer consonant of type 1 or an independent vowel
-//       that is, a letter in which the subscript for is only under the
-//       base, not taking any space to the right or to the left
-//
-// c2    Khmer consonant of type 2, the coeng form takes space under
-//       and to the left of the base (only RO is of this type)
-//
-// c3    Khmer consonant of type 3. Its subscript form takes space under
-//       and to the right of the base.
-//
-// cs    Khmer consonant shifter
-//
-// rb    Khmer robat
-//
-// co    coeng character (u17D2)
-//
-// dv    dependent vowel (including split vowels, they are treated in the same way).
-//       even if dv is not defined above, the component that is really tested for is
-//       KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
-//
-// zwj   Zero Width joiner
-//
-// zwnj  Zero width non joiner
-//
-// sa    above sign
-//
-// sp    post sign
-//
-// there are lines with equal content but for an easier understanding
-// (and maybe change in the future) we did not join them
-//
-static const le_int8 khmerStateTable[][KhmerClassTable::CC_COUNT] =
-{
-
-//   xx  c1  c2  c3 zwnj cs  rb  co  dv  sa  sp zwj
-    { 1,  2,  2,  2,  1,  1,  1,  6,  1,  1,  1,  2}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  1 - exit state (or sign to the right of the syllable)
-    {-1, -1, -1, -1,  3,  4,  5,  6, 16, 17,  1, -1}, //  2 - Base consonant
-    {-1, -1, -1, -1, -1,  4, -1, -1, 16, -1, -1, -1}, //  3 - First ZWNJ before a register shifter
-                                                      //      It can only be followed by a shifter or a vowel
-    {-1, -1, -1, -1, 15, -1, -1,  6, 16, 17,  1, 14}, //  4 - First register shifter
-    {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1,  1, -1}, //  5 - Robat
-    {-1,  7,  8,  9, -1, -1, -1, -1, -1, -1, -1, -1}, //  6 - First Coeng
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, //  7 - First consonant of type 1 after coeng
-    {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17,  1, 14}, //  8 - First consonant of type 2 after coeng
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, //  9 - First consonant or type 3 after ceong
-    {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before)
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before
-    {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, // 13 - Second register shifter
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 15 - ZWNJ before vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17,  1, 18}, // 16 - dependent vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, 18}, // 17 - sign above
-    {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel
-    {-1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1}, // 20 - dependent vowel after a Robat
-
-};
-
-
-const FeatureMap *KhmerReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureMapCount;
-
-    return featureMap;
-}
-
-
-// Given an input string of characters and a location in which to start looking
-// calculate, using the state table, which one is the last character of the syllable
-// that starts in the starting position.
-le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-
-    while (cursor < charCount) {
-        KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & KhmerClassTable::CF_CLASS_MASK);
-
-        state = khmerStateTable[state][charClass];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-
-// This is the real reordering function as applied to the Khmer language
-
-le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 /*scriptCode*/,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable();
-
-    KhmerReorderingOutput output(outChars, glyphStorage);
-    KhmerClassTable::CharClass charClass;
-    le_int32 i, prev = 0, coengRo;
-
-
-    // This loop only exits when we reach the end of a run, which may contain
-    // several syllables.
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-
-        output.reset();
-
-        // write a pre vowel or the pre part of a split vowel first
-        // and look out for coeng + ro. RO is the only vowel of type 2, and
-        // therefore the only one that requires saving space before the base.
-        coengRo = -1;  // There is no Coeng Ro, if found this value will change
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-
-            // if a split vowel, write the pre part. In Khmer the pre part
-            // is the same for all split vowels, same glyph as pre vowel C_VOWEL_E
-            if (charClass & KhmerClassTable::CF_SPLIT_VOWEL) {
-                output.writeChar(C_VOWEL_E, i, tagPref);
-                break; // there can be only one vowel
-            }
-
-            // if a vowel with pos before write it out
-            if (charClass & KhmerClassTable::CF_POS_BEFORE) {
-                output.writeChar(chars[i], i, tagPref);
-                break; // there can be only one vowel
-            }
-
-            // look for coeng + ro and remember position
-            // works because coeng + ro is always in front of a vowel (if there is a vowel)
-            // and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
-            // with this flag
-            if ( (charClass & KhmerClassTable::CF_COENG) && (i + 1 < syllable) &&
-                 ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) )
-            {
-                    coengRo = i;
-            }
-        }
-
-        // write coeng + ro if found
-        if (coengRo > -1) {
-            output.writeChar(C_COENG, coengRo, tagPref);
-            output.writeChar(C_RO, coengRo + 1, tagPref);
-        }
-
-        // shall we add a dotted circle?
-        // If in the position in which the base should be (first char in the string) there is
-        // a character that has the Dotted circle flag (a character that cannot be a base)
-        // then write a dotted circle
-        if (classTable->getCharClass(chars[prev]) & KhmerClassTable::CF_DOTTED_CIRCLE) {
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
-        }
-
-        // copy what is left to the output, skipping before vowels and coeng Ro if they are present
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-
-            // skip a before vowel, it was already processed
-            if (charClass & KhmerClassTable::CF_POS_BEFORE) {
-                continue;
-            }
-
-            // skip coeng + ro, it was already processed
-            if (i == coengRo) {
-                i += 1;
-                continue;
-            }
-
-            switch (charClass & KhmerClassTable::CF_POS_MASK) {
-                case KhmerClassTable::CF_POS_ABOVE :
-                    output.writeChar(chars[i], i, tagAbvf);
-                    break;
-
-                case KhmerClassTable::CF_POS_AFTER :
-                    output.writeChar(chars[i], i, tagPstf);
-                    break;
-
-                case KhmerClassTable::CF_POS_BELOW :
-                    output.writeChar(chars[i], i, tagBlwf);
-                    break;
-
-                default:
-                    // assign the correct flags to a coeng consonant
-                    // Consonants of type 3 are taged as Post forms and those type 1 as below forms
-                    if ( (charClass & KhmerClassTable::CF_COENG) && i + 1 < syllable ) {
-                        if ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK)
-                              == KhmerClassTable::CC_CONSONANT3) {
-                            output.writeChar(chars[i], i, tagPstf);
-                            i += 1;
-                            output.writeChar(chars[i], i, tagPstf);
-                        }
-                        else {
-                            output.writeChar(chars[i], i, tagBlwf);
-                            i += 1;
-                            output.writeChar(chars[i], i, tagBlwf);
-                        }
-                        break;
-                    }
-                    // if a shifter is followed by an above vowel change the shifter to below form,
-                    // an above vowel can have two possible positions i + 1 or i + 3
-                    // (position i+1 corresponds to unicode 3, position i+3 to Unicode 4)
-                    // and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
-                    // different positions, right after the shifter or after a vowel (Unicode 4)
-                    if ( (charClass & KhmerClassTable::CF_SHIFTER) && (i + 1 < syllable) ) {
-                        if ((classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL)
-                            || (i + 2 < syllable
-                                && ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-                                && ( (classTable->getCharClass(chars[i + 2]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT))
-                            || (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_ABOVE_VOWEL))
-                            || (i + 4 < syllable
-                                && ( (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-                                && ( (classTable->getCharClass(chars[i + 4]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) ) )
-                        {
-                            output.writeChar(chars[i], i, tagBlwf);
-                            break;
-                        }
-
-                    }
-                    // default - any other characters
-                    output.writeChar(chars[i], i, tagDefault);
-                    break;
-            } // switch
-        } // for
-
-        prev = syllable; // move the pointer to the start of next syllable
-    }
-
-    return output.getOutputIndex();
-}
-
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/KhmerReordering.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicReordering.h
- * by Jens Herden and Javier Sola for Khmer language
- *
- */
-
-#ifndef __KHMERREORDERING_H
-#define __KHMERREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Vocabulary
-//     Base ->         A consonant or an independent vowel in its full (not subscript) form. It is the
-//                     center of the syllable, it can be souranded by coeng (subscript) consonants, vowels,
-//                     split vowels, signs... but there is only one base in a syllable, it has to be coded as
-//                     the first character of the syllable.
-//     split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).
-//                     Khmer language has five of them. Khmer split vowels either have one part before the
-//                     base and one after the base or they have a part before the base and a part above the base.
-//                     The first part of all Khmer split vowels is the same character, identical to
-//                     the glyph of Khmer dependent vowel SRA EI
-//     coeng -->  modifier used in Khmer to construct coeng (subscript) consonants
-//                Differently than indian languages, the coeng modifies the consonant that follows it,
-//                not the one preceding it  Each consonant has two forms, the base form and the subscript form
-//                the base form is the normal one (using the consonants code-point), the subscript form is
-//                displayed when the combination coeng + consonant is encountered.
-//     Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
-//     Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
-//     Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
-//     Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
-//                          if it is attached to a consonant of the first series or a consonant of the second series
-//                          Most consonants have an equivalent in the other series, but some of theme exist only in
-//                          one series (for example SA). If we want to use the consonant SA with a vowel sound that
-//                          can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
-//                          of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
-//                          x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and
-//                          MUSIKATOAN a second series consonant to have a first series vowel sound.
-//                          Consonant shifter are both normally supercript marks, but, when they are followed by a
-//                          superscript, they change shape and take the form of subscript dependent vowel SRA U.
-//                          If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
-//                          should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
-//                          be placed after the coeng consonant.
-//     Dependent vowel ->   In khmer dependent vowels can be placed above, below, before or after the base
-//                          Each vowel has its own position. Only one vowel per syllable is allowed.
-//     Signs            ->  Khmer has above signs and post signs. Only one above sign and/or one post sign are
-//                          Allowed in a syllable.
-//
-//
-
-struct KhmerClassTable    // This list must include all types of components that can be used inside a syllable
-{
-    enum CharClassValues  // order is important here! This order must be the same that is found in each horizontal
-                          // line in the statetable for Khmer (file KhmerReordering.cpp).
-    {
-        CC_RESERVED             =  0,
-        CC_CONSONANT            =  1, // consonant of type 1 or independent vowel
-        CC_CONSONANT2           =  2, // Consonant of type 2
-        CC_CONSONANT3           =  3, // Consonant of type 3
-        CC_ZERO_WIDTH_NJ_MARK   =  4, // Zero Width non joiner character (0x200C)
-        CC_CONSONANT_SHIFTER    =  5,
-        CC_ROBAT                =  6, // Khmer special diacritic accent -treated differently in state table
-        CC_COENG                =  7, // Subscript consonant combining character
-        CC_DEPENDENT_VOWEL      =  8,
-        CC_SIGN_ABOVE           =  9,
-        CC_SIGN_AFTER           = 10,
-        CC_ZERO_WIDTH_J_MARK    = 11, // Zero width joiner character
-        CC_COUNT                = 12  // This is the number of character classes
-    };
-
-    enum CharClassFlags
-    {
-        CF_CLASS_MASK    = 0x0000FFFF,
-
-        CF_CONSONANT     = 0x01000000,  // flag to speed up comparing
-        CF_SPLIT_VOWEL   = 0x02000000,  // flag for a split vowel -> the first part is added in front of the syllable
-        CF_DOTTED_CIRCLE = 0x04000000,  // add a dotted circle if a character with this flag is the first in a syllable
-        CF_COENG         = 0x08000000,  // flag to speed up comparing
-        CF_SHIFTER       = 0x10000000,  // flag to speed up comparing
-        CF_ABOVE_VOWEL   = 0x20000000,  // flag to speed up comparing
-
-        // position flags
-        CF_POS_BEFORE    = 0x00080000,
-        CF_POS_BELOW     = 0x00040000,
-        CF_POS_ABOVE     = 0x00020000,
-        CF_POS_AFTER     = 0x00010000,
-        CF_POS_MASK      = 0x000f0000
-    };
-
-    typedef le_uint32 CharClass;
-
-    typedef le_int32 ScriptFlags;
-
-    LEUnicode firstChar;   // for Khmer this will become x1780
-    LEUnicode lastChar;    //  and this x17DF
-    const CharClass *classTable;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    static const KhmerClassTable *getKhmerClassTable();
-};
-
-
-class KhmerReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // do not instantiate
-    KhmerReordering();
-
-    static le_int32 findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEFontInstance.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *******************************************************************************
- *
- *   Copyright (C) 1999-2007, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  LEFontInstance.cpp
- *
- *   created on: 02/06/2003
- *   created by: Eric R. Mader
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LEFontInstance.h"
-#include "LEGlyphStorage.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance)
-
-LECharMapper::~LECharMapper()
-{
-    // nothing to do.
-}
-
-LEFontInstance::~LEFontInstance()
-{
-    // nothing to do
-}
-
-const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
-                                                       le_int32 script, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return NULL;
-    }
-
-    if (chars == NULL || *offset < 0 || limit < 0 || *offset >= limit || script < 0 || script >= scriptCodeCount) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-
-    *offset = limit;
-    return this;
-}
-
-void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-                                      le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const
-{
-    le_int32 i, out = 0, dir = 1;
-
-    if (reverse) {
-        out = count - 1;
-        dir = -1;
-    }
-
-    for (i = offset; i < offset + count; i += 1, out += dir) {
-        LEUnicode16 high = chars[i];
-        LEUnicode32 code = high;
-
-        if (i < offset + count - 1 && high >= 0xD800 && high <= 0xDBFF) {
-            LEUnicode16 low = chars[i + 1];
-
-            if (low >= 0xDC00 && low <= 0xDFFF) {
-                code = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
-            }
-        }
-
-        glyphStorage[out] = mapCharToGlyph(code, mapper, filterZeroWidth);
-
-        if (code >= 0x10000) {
-            i += 1;
-            glyphStorage[out += dir] = 0xFFFF;
-        }
-    }
-}
-
-LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
-{
-    return mapCharToGlyph(ch, mapper, TRUE);
-}
-
-LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
-{
-    LEUnicode32 mappedChar = mapper->mapChar(ch);
-
-    if (mappedChar == 0xFFFE || mappedChar == 0xFFFF) {
-        return 0xFFFF;
-    }
-
-    if (filterZeroWidth && (mappedChar == 0x200C || mappedChar == 0x200D)) {
-        return canDisplay(mappedChar)? 0x0001 : 0xFFFF;
-    }
-
-    return mapCharToGlyph(mappedChar);
-}
-
-le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
-{
-    return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0;
-}
-
-float LEFontInstance::xUnitsToPoints(float xUnits) const
-{
-    return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM();
-}
-
-float LEFontInstance::yUnitsToPoints(float yUnits) const
-{
-    return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM();
-}
-
-void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const
-{
-    points.fX = xUnitsToPoints(units.fX);
-    points.fY = yUnitsToPoints(units.fY);
-}
-
-float LEFontInstance::xPixelsToUnits(float xPixels) const
-{
-    return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm();
-}
-
-float LEFontInstance::yPixelsToUnits(float yPixels) const
-{
-    return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm();
-}
-
-void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const
-{
-    units.fX = xPixelsToUnits(pixels.fX);
-    units.fY = yPixelsToUnits(pixels.fY);
-}
-
-void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
-{
-    pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX();
-    pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY();
-}
-
-le_int32 LEFontInstance::getLineHeight() const
-{
-    return getAscent() + getDescent() + getLeading();
-}
-
-U_NAMESPACE_END
-
--- a/src/java.desktop/share/native/libfontmanager/layout/LEFontInstance.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,558 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- */
-
-#ifndef __LEFONTINSTANCE_H
-#define __LEFONTINSTANCE_H
-
-#include "LETypes.h"
-/**
- * \file
- * \brief C++ API: Layout Engine Font Instance object
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * Instances of this class are used by <code>LEFontInstance::mapCharsToGlyphs</code> and
- * <code>LEFontInstance::mapCharToGlyph</code> to adjust character codes before the character
- * to glyph mapping process. Examples of this are filtering out control characters
- * and character mirroring - replacing a character which has both a left and a right
- * hand form with the opposite form.
- *
- * @stable ICU 3.2
- */
-class LECharMapper /* not : public UObject because this is an interface/mixin class */
-{
-public:
-    /**
-     * Destructor.
-     * @stable ICU 3.2
-     */
-    virtual ~LECharMapper();
-
-    /**
-     * This method does the adjustments.
-     *
-     * @param ch - the input character
-     *
-     * @return the adjusted character
-     *
-     * @stable ICU 2.8
-     */
-    virtual LEUnicode32 mapChar(LEUnicode32 ch) const = 0;
-};
-
-/**
- * This is a forward reference to the class which holds the per-glyph
- * storage.
- *
- * @stable ICU 3.0
- */
-class LEGlyphStorage;
-
-/**
- * This is a virtual base class that serves as the interface between a LayoutEngine
- * and the platform font environment. It allows a LayoutEngine to access font tables, do
- * character to glyph mapping, and obtain metrics information without knowing any platform
- * specific details. There are also a few utility methods for converting between points,
- * pixels and funits. (font design units)
- *
- * An instance of an <code>LEFontInstance</code> represents a font at a particular point
- * size. Each instance can represent either a single physical font, or a composite font.
- * A composite font is a collection of physical fonts, each of which contains a subset of
- * the characters contained in the composite font.
- *
- * Note: with the exception of <code>getSubFont</code>, the methods in this class only
- * make sense for a physical font. If you have an <code>LEFontInstance</code> which
- * represents a composite font you should only call the methods below which have
- * an <code>LEGlyphID</code>, an <code>LEUnicode</code> or an <code>LEUnicode32</code>
- * as one of the arguments because these can be used to select a particular subfont.
- *
- * Subclasses which implement composite fonts should supply an implementation of these
- * methods with some default behavior such as returning constant values, or using the
- * values from the first subfont.
- *
- * @stable ICU 3.0
- */
-class U_LAYOUT_API LEFontInstance : public UObject
-{
-public:
-
-    /**
-     * This virtual destructor is here so that the subclass
-     * destructors can be invoked through the base class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual ~LEFontInstance();
-
-    /**
-     * Get a physical font which can render the given text. For composite fonts,
-     * if there is no single physical font which can render all of the text,
-     * return a physical font which can render an initial substring of the text,
-     * and set the <code>offset</code> parameter to the end of that substring.
-     *
-     * Internally, the LayoutEngine works with runs of text all in the same
-     * font and script, so it is best to call this method with text which is
-     * in a single script, passing the script code in as a hint. If you don't
-     * know the script of the text, you can use zero, which is the script code
-     * for characters used in more than one script.
-     *
-     * The default implementation of this method is intended for instances of
-     * <code>LEFontInstance</code> which represent a physical font. It returns
-     * <code>this</code> and indicates that the entire string can be rendered.
-     *
-     * This method will return a valid <code>LEFontInstance</code> unless you
-     * have passed illegal parameters, or an internal error has been encountered.
-     * For composite fonts, it may return the warning <code>LE_NO_SUBFONT_WARNING</code>
-     * to indicate that the returned font may not be able to render all of
-     * the text. Whenever a valid font is returned, the <code>offset</code> parameter
-     * will be advanced by at least one.
-     *
-     * Subclasses which implement composite fonts must override this method.
-     * Where it makes sense, they should use the script code as a hint to render
-     * characters from the COMMON script in the font which is used for the given
-     * script. For example, if the input text is a series of Arabic words separated
-     * by spaces, and the script code passed in is <code>arabScriptCode</code> you
-     * should return the font used for Arabic characters for all of the input text,
-     * including the spaces. If, on the other hand, the input text contains characters
-     * which cannot be rendered by the font used for Arabic characters, but which can
-     * be rendered by another font, you should return that font for those characters.
-     *
-     * @param chars   - the array of Unicode characters.
-     * @param offset  - a pointer to the starting offset in the text. On exit this
-     *                  will be set the the limit offset of the text which can be
-     *                  rendered using the returned font.
-     * @param limit   - the limit offset for the input text.
-     * @param script  - the script hint.
-     * @param success - set to an error code if the arguments are illegal, or no font
-     *                  can be returned for some reason. May also be set to
-     *                  <code>LE_NO_SUBFONT_WARNING</code> if the subfont which
-     *                  was returned cannot render all of the text.
-     *
-     * @return an <code>LEFontInstance</code> for the sub font which can render the characters, or
-     *         <code>NULL</code> if there is an error.
-     *
-     * @see LEScripts.h
-     *
-     * @stable ICU 3.2
-     */
-    virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;
-
-    //
-    // Font file access
-    //
-
-    /**
-     * This method reads a table from the font. Note that in general,
-     * it only makes sense to call this method on an <code>LEFontInstance</code>
-     * which represents a physical font - i.e. one which has been returned by
-     * <code>getSubFont()</code>. This is because each subfont in a composite font
-     * will have different tables, and there's no way to know which subfont to access.
-     *
-     * Subclasses which represent composite fonts should always return <code>NULL</code>.
-     *
-     * This version sets a length, for range checking.
-     * Note that range checking can only be accomplished if this function is
-     * implemented in subclasses.
-     *
-     * @param tableTag - the four byte table tag. (e.g. 'cmap')
-     * @param length - ignored on entry, on exit will be the length of the table if known, or -1 if unknown.
-     * @return the address of the table in memory, or <code>NULL</code>
-     *         if the table doesn't exist.
-     * @internal
-     */
-    virtual const void* getFontTable(LETag tableTag, size_t &length) const = 0;
-
-    virtual void *getKernPairs() const = 0;
-    virtual void  setKernPairs(void *pairs) const = 0;
-
-    /**
-     * This method is used to determine if the font can
-     * render the given character. This can usually be done
-     * by looking the character up in the font's character
-     * to glyph mapping.
-     *
-     * The default implementation of this method will return
-     * <code>TRUE</code> if <code>mapCharToGlyph(ch)</code>
-     * returns a non-zero value.
-     *
-     * @param ch - the character to be tested
-     *
-     * @return <code>TRUE</code> if the font can render ch.
-     *
-     * @stable ICU 3.2
-     */
-    virtual le_bool canDisplay(LEUnicode32 ch) const;
-
-    /**
-     * This method returns the number of design units in
-     * the font's EM square.
-     *
-     * @return the number of design units pre EM.
-     *
-     * @stable ICU 2.8
-     */
-    virtual le_int32 getUnitsPerEM() const = 0;
-
-    /**
-     * This method maps an array of character codes to an array of glyph
-     * indices, using the font's character to glyph map.
-     *
-     * The default implementation iterates over all of the characters and calls
-     * <code>mapCharToGlyph(ch, mapper)</code> on each one. It also handles surrogate
-     * characters, storing the glyph ID for the high surrogate, and a deleted glyph (0xFFFF)
-     * for the low surrogate.
-     *
-     * Most sublcasses will not need to implement this method.
-     *
-     * @param chars - the character array
-     * @param offset - the index of the first character
-     * @param count - the number of characters
-     * @param reverse - if <code>TRUE</code>, store the glyph indices in reverse order.
-     * @param mapper - the character mapper.
-     * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
-     * @param glyphStorage - the object which contains the output glyph array
-     *
-     * @see LECharMapper
-     *
-     * @stable ICU 3.6
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. The default implementation of this
-     * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
-     *
-     * @param ch - the character
-     * @param mapper - the character mapper
-     * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
-     *
-     * @return the glyph index
-     *
-     * @see LECharMapper
-     *
-     * @stable ICU 3.6
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. The default implementation of this
-     * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
-     *
-     * @param ch - the character
-     * @param mapper - the character mapper
-     *
-     * @return the glyph index
-     *
-     * @see LECharMapper
-     *
-     * @stable ICU 3.2
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. There is no default implementation
-     * of this method because it requires information about the platform
-     * font implementation.
-     *
-     * @param ch - the character
-     *
-     * @return the glyph index
-     *
-     * @stable ICU 3.2
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const = 0;
-
-    //
-    // Metrics
-    //
-
-    /**
-     * This method gets the X and Y advance of a particular glyph, in pixels.
-     *
-     * @param glyph - the glyph index
-     * @param advance - the X and Y pixel values will be stored here
-     *
-     * @stable ICU 3.2
-     */
-    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const = 0;
-
-    virtual void getKerningAdjustment(LEPoint &adjustment) const = 0;
-
-    /**
-     * This method gets the hinted X and Y pixel coordinates of a particular
-     * point in the outline of the given glyph.
-     *
-     * @param glyph - the glyph index
-     * @param pointNumber - the number of the point
-     * @param point - the point's X and Y pixel values will be stored here
-     *
-     * @return <code>TRUE</code> if the point coordinates could be stored.
-     *
-     * @stable ICU 2.8
-     */
-    virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const = 0;
-
-    /**
-     * This method returns the width of the font's EM square
-     * in pixels.
-     *
-     * @return the pixel width of the EM square
-     *
-     * @stable ICU 2.8
-     */
-    virtual float getXPixelsPerEm() const = 0;
-
-    /**
-     * This method returns the height of the font's EM square
-     * in pixels.
-     *
-     * @return the pixel height of the EM square
-     *
-     * @stable ICU 2.8
-     */
-    virtual float getYPixelsPerEm() const = 0;
-
-    /**
-     * This method converts font design units in the
-     * X direction to points.
-     *
-     * @param xUnits - design units in the X direction
-     *
-     * @return points in the X direction
-     *
-     * @stable ICU 3.2
-     */
-    virtual float xUnitsToPoints(float xUnits) const;
-
-    /**
-     * This method converts font design units in the
-     * Y direction to points.
-     *
-     * @param yUnits - design units in the Y direction
-     *
-     * @return points in the Y direction
-     *
-     * @stable ICU 3.2
-     */
-    virtual float yUnitsToPoints(float yUnits) const;
-
-    /**
-     * This method converts font design units to points.
-     *
-     * @param units - X and Y design units
-     * @param points - set to X and Y points
-     *
-     * @stable ICU 3.2
-     */
-    virtual void unitsToPoints(LEPoint &units, LEPoint &points) const;
-
-    /**
-     * This method converts pixels in the
-     * X direction to font design units.
-     *
-     * @param xPixels - pixels in the X direction
-     *
-     * @return font design units in the X direction
-     *
-     * @stable ICU 3.2
-     */
-    virtual float xPixelsToUnits(float xPixels) const;
-
-    /**
-     * This method converts pixels in the
-     * Y direction to font design units.
-     *
-     * @param yPixels - pixels in the Y direction
-     *
-     * @return font design units in the Y direction
-     *
-     * @stable ICU 3.2
-     */
-    virtual float yPixelsToUnits(float yPixels) const;
-
-    /**
-     * This method converts pixels to font design units.
-     *
-     * @param pixels - X and Y pixel
-     * @param units - set to X and Y font design units
-     *
-     * @stable ICU 3.2
-     */
-    virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const;
-
-    /**
-     * Get the X scale factor from the font's transform. The default
-     * implementation of <code>transformFunits()</code> will call this method.
-     *
-     * @return the X scale factor.
-     *
-     *
-     * @see transformFunits
-     *
-     * @stable ICU 3.2
-     */
-    virtual float getScaleFactorX() const = 0;
-
-    /**
-     * Get the Y scale factor from the font's transform. The default
-     * implementation of <code>transformFunits()</code> will call this method.
-     *
-     * @return the Yscale factor.
-     *
-     * @see transformFunits
-     *
-     * @stable ICU 3.2
-     */
-    virtual float getScaleFactorY() const = 0;
-
-    /**
-     * This method transforms an X, Y point in font design units to a
-     * pixel coordinate, applying the font's transform. The default
-     * implementation of this method calls <code>getScaleFactorX()</code>
-     * and <code>getScaleFactorY()</code>.
-     *
-     * @param xFunits - the X coordinate in font design units
-     * @param yFunits - the Y coordinate in font design units
-     * @param pixels - the tranformed co-ordinate in pixels
-     *
-     * @see getScaleFactorX
-     * @see getScaleFactorY
-     *
-     * @stable ICU 3.2
-     */
-    virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
-
-    /**
-     * This is a convenience method used to convert
-     * values in a 16.16 fixed point format to floating point.
-     *
-     * @param fixed - the fixed point value
-     *
-     * @return the floating point value
-     *
-     * @stable ICU 2.8
-     */
-    static inline float fixedToFloat(le_int32 fixed);
-
-    /**
-     * This is a convenience method used to convert
-     * floating point values to 16.16 fixed point format.
-     *
-     * @param theFloat - the floating point value
-     *
-     * @return the fixed point value
-     *
-     * @stable ICU 2.8
-     */
-    static inline le_int32 floatToFixed(float theFloat);
-
-    //
-    // These methods won't ever be called by the LayoutEngine,
-    // but are useful for clients of <code>LEFontInstance</code> who
-    // need to render text.
-    //
-
-    /**
-     * Get the font's ascent.
-     *
-     * @return the font's ascent, in points. This value
-     * will always be positive.
-     *
-     * @stable ICU 3.2
-     */
-    virtual le_int32 getAscent() const = 0;
-
-    /**
-     * Get the font's descent.
-     *
-     * @return the font's descent, in points. This value
-     * will always be positive.
-     *
-     * @stable ICU 3.2
-     */
-    virtual le_int32 getDescent() const = 0;
-
-    /**
-     * Get the font's leading.
-     *
-     * @return the font's leading, in points. This value
-     * will always be positive.
-     *
-     * @stable ICU 3.2
-     */
-    virtual le_int32 getLeading() const = 0;
-
-    /**
-     * Get the line height required to display text in
-     * this font. The default implementation of this method
-     * returns the sum of the ascent, descent, and leading.
-     *
-     * @return the line height, in points. This vaule will
-     * always be positive.
-     *
-     * @stable ICU 3.2
-     */
-    virtual le_int32 getLineHeight() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 3.2
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 3.2
-     */
-    static UClassID getStaticClassID();
-
-};
-
-inline float LEFontInstance::fixedToFloat(le_int32 fixed)
-{
-    return (float) (fixed / 65536.0);
-}
-
-inline le_int32 LEFontInstance::floatToFixed(float theFloat)
-{
-    return (le_int32) (theFloat * 65536.0);
-}
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEGlyphFilter.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LEGLYPHFILTER__H
-#define __LEGLYPHFILTER__H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * This is a helper class that is used to
- * recognize a set of glyph indices.
- *
- * @internal
- */
-class LEGlyphFilter /* not : public UObject because this is an interface/mixin class */ {
-public:
-    /**
-     * Destructor.
-     * @internal
-     */
-    virtual ~LEGlyphFilter();
-
-    /**
-     * This method is used to test a particular
-     * glyph index to see if it is in the set
-     * recognized by the filter.
-     *
-     * @param glyph - the glyph index to be tested
-     *
-     * @return TRUE if the glyph index is in the set.
-     *
-     * @internal
-     */
-    virtual le_bool accept(LEGlyphID glyph, LEErrorCode &success) const = 0;
-};
-#endif  /* U_HIDE_INTERNAL_API */
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEGlyphStorage.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,696 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- **********************************************************************
- *   Copyright (C) 1998-2009, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-#include "LEGlyphStorage.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage)
-
-LEInsertionCallback::~LEInsertionCallback()
-{
-        // nothing to do...
-}
-
-LEGlyphStorage::LEGlyphStorage()
-    : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL),
-      fAuxData(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0)
-{
-    // nothing else to do!
-}
-
-LEGlyphStorage::~LEGlyphStorage()
-{
-    reset();
-}
-
-void LEGlyphStorage::reset()
-{
-    fGlyphCount = 0;
-
-    if (fPositions != NULL) {
-        LE_DELETE_ARRAY(fPositions);
-        fPositions = NULL;
-    }
-
-    if (fAuxData != NULL) {
-        LE_DELETE_ARRAY(fAuxData);
-        fAuxData = NULL;
-    }
-
-    if (fInsertionList != NULL) {
-        delete fInsertionList;
-        fInsertionList = NULL;
-    }
-
-    if (fCharIndices != NULL) {
-        LE_DELETE_ARRAY(fCharIndices);
-        fCharIndices = NULL;
-    }
-
-    if (fGlyphs != NULL) {
-        LE_DELETE_ARRAY(fGlyphs);
-        fGlyphs = NULL;
-    }
-}
-
-// FIXME: This might get called more than once, for various reasons. Is
-// testing for pre-existing glyph and charIndices arrays good enough?
-void LEGlyphStorage::allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (initialGlyphCount <= 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        fGlyphCount = initialGlyphCount;
-        fGlyphs = LE_NEW_ARRAY(LEGlyphID, fGlyphCount);
-
-        if (fGlyphs == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-
-    if (fCharIndices == NULL) {
-        fCharIndices = LE_NEW_ARRAY(le_int32, fGlyphCount);
-
-        if (fCharIndices == NULL) {
-            LE_DELETE_ARRAY(fGlyphs);
-            fGlyphs = NULL;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-        // Initialize the charIndices array
-        le_int32 i, count = fGlyphCount, dir = 1, out = 0;
-
-        if (rightToLeft) {
-            out = fGlyphCount - 1;
-            dir = -1;
-        }
-
-        for (i = 0; i < count; i += 1, out += dir) {
-            fCharIndices[out] = i;
-        }
-    }
-
-    if (fInsertionList == NULL) {
-        // FIXME: check this for failure?
-        fInsertionList = new LEInsertionList(rightToLeft);
-        if (fInsertionList == NULL) {
-            LE_DELETE_ARRAY(fCharIndices);
-            fCharIndices = NULL;
-
-            LE_DELETE_ARRAY(fGlyphs);
-            fGlyphs = NULL;
-
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-    }
-}
-}
-
-// FIXME: do we want to initialize the positions to [0, 0]?
-le_int32 LEGlyphStorage::allocatePositions(LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fPositions != NULL) {
-        success = LE_INTERNAL_ERROR;
-        return -1;
-    }
-
-    fPositions = LE_NEW_ARRAY(float, 2 * (fGlyphCount + 1));
-
-    if (fPositions == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return -1;
-    }
-
-    return fGlyphCount;
-}
-
-// FIXME: do we want to initialize the aux data to NULL?
-le_int32 LEGlyphStorage::allocateAuxData(LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fAuxData != NULL) {
-        success = LE_INTERNAL_ERROR;
-        return -1;
-    }
-
-    fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount);
-
-    if (fAuxData == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return -1;
-    }
-
-    return fGlyphCount;
-}
-
-void LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
-{
-    le_int32 i;
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (charIndices == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    for (i = 0; i < fGlyphCount; i += 1) {
-        charIndices[i] = fCharIndices[i] + indexBase;
-    }
-}
-
-void LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-
-    if (charIndices == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-
-    if (fCharIndices == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-
-    LE_ARRAY_COPY(charIndices, fCharIndices, fGlyphCount);
-}
-
-// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
-void LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
-{
-    le_int32 i;
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (glyphs == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    for (i = 0; i < fGlyphCount; i += 1) {
-        glyphs[i] = fGlyphs[i] | extraBits;
-    }
-}
-
-void LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-
-    if (glyphs == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-
-    if (fGlyphs == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-
-    LE_ARRAY_COPY(glyphs, fGlyphs, fGlyphCount);
-}
-
-LEGlyphID LEGlyphStorage::getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0xFFFF;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return 0xFFFF;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return 0xFFFF;
-    }
-
-    return fGlyphs[glyphIndex];
-}
-
-void LEGlyphStorage::setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fGlyphs[glyphIndex] = glyphID;
-}
-
-le_int32 LEGlyphStorage::getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return -1;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return -1;
-    }
-
-    return fCharIndices[glyphIndex];
-}
-
-void LEGlyphStorage::setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fCharIndices[glyphIndex] = charIndex;
-}
-
-void LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-
-    if (auxData == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-
-    if (fAuxData == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-
-    LE_ARRAY_COPY(auxData, fAuxData, fGlyphCount);
-}
-
-le_uint32 LEGlyphStorage::getAuxData(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (fAuxData == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return 0;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return 0;
-    }
-
-    return fAuxData[glyphIndex];
-}
-
-void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fAuxData == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fAuxData[glyphIndex] = auxData;
-}
-
-void LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-
-    if (positions == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-
-    if (fPositions == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-
-    LE_ARRAY_COPY(positions, fPositions, fGlyphCount * 2 + 2);
-}
-
-void LEGlyphStorage::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-
-    if (fPositions == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-
-    x = fPositions[glyphIndex * 2];
-    y = fPositions[glyphIndex * 2 + 1];
-}
-
-void LEGlyphStorage::setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-    _LETRACE("set%-4d\t(%.2f, %.2f)", glyphIndex, x, y);
-    fPositions[glyphIndex * 2]     = x;
-    fPositions[glyphIndex * 2 + 1] = y;
-}
-
-void LEGlyphStorage::adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-
-    fPositions[glyphIndex * 2]     += xAdjust;
-    fPositions[glyphIndex * 2 + 1] += yAdjust;
-}
-
-void LEGlyphStorage::adoptGlyphArray(LEGlyphStorage &from)
-{
-    if (fGlyphs != NULL) {
-        LE_DELETE_ARRAY(fGlyphs);
-    }
-
-    fGlyphs = from.fGlyphs;
-    from.fGlyphs = NULL;
-
-    if (fInsertionList != NULL) {
-        delete fInsertionList;
-    }
-
-    fInsertionList = from.fInsertionList;
-    from.fInsertionList = NULL;
-}
-
-void LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage &from)
-{
-    if (fCharIndices != NULL) {
-        LE_DELETE_ARRAY(fCharIndices);
-    }
-
-    fCharIndices = from.fCharIndices;
-    from.fCharIndices = NULL;
-}
-
-void LEGlyphStorage::adoptPositionArray(LEGlyphStorage &from)
-{
-    if (fPositions != NULL) {
-        LE_DELETE_ARRAY(fPositions);
-    }
-
-    fPositions = from.fPositions;
-    from.fPositions = NULL;
-}
-
-void LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage &from)
-{
-    if (fAuxData != NULL) {
-        LE_DELETE_ARRAY(fAuxData);
-    }
-
-    fAuxData = from.fAuxData;
-    from.fAuxData = NULL;
-}
-
-void LEGlyphStorage::adoptGlyphCount(LEGlyphStorage &from)
-{
-    fGlyphCount = from.fGlyphCount;
-}
-
-void LEGlyphStorage::adoptGlyphCount(le_int32 newGlyphCount)
-{
-    fGlyphCount = newGlyphCount;
-}
-
-// Move a glyph to a different position in the LEGlyphStorage ( used for Indic v2 processing )
-
-void LEGlyphStorage::moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker )
-{
-
-    LEErrorCode success = LE_NO_ERROR;
-
-    LEGlyphID holdGlyph = getGlyphID(fromPosition,success);
-    le_int32 holdCharIndex = getCharIndex(fromPosition,success);
-    le_uint32 holdAuxData = getAuxData(fromPosition,success);
-
-    if ( fromPosition < toPosition ) {
-        for ( le_int32 i = fromPosition ; i < toPosition ; i++ ) {
-            setGlyphID(i,getGlyphID(i+1,success),success);
-            setCharIndex(i,getCharIndex(i+1,success),success);
-            setAuxData(i,getAuxData(i+1,success),success);
-        }
-    } else {
-        for ( le_int32 i = toPosition ; i > fromPosition ; i-- ) {
-            setGlyphID(i,getGlyphID(i-1,success),success);
-            setCharIndex(i,getCharIndex(i-1,success),success);
-            setAuxData(i,getAuxData(i-1,success),success);
-
-        }
-    }
-
-    setGlyphID(toPosition,holdGlyph,success);
-    setCharIndex(toPosition,holdCharIndex,success);
-    setAuxData(toPosition,holdAuxData | marker,success);
-
-}
-
-// Glue code for existing stable API
-LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32  atIndex, le_int32 insertCount)
-{
-    LEErrorCode ignored = LE_NO_LAYOUT_ERROR;
-    return insertGlyphs(atIndex, insertCount, ignored);
-}
-
-// FIXME: add error checking?
-LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32  atIndex, le_int32 insertCount, LEErrorCode& success)
-{
-    return fInsertionList->insert(atIndex, insertCount, success);
-}
-
-le_int32 LEGlyphStorage::applyInsertions()
-{
-    le_int32 growAmount = fInsertionList->getGrowAmount();
-
-    if (growAmount <= 0) {
-        return fGlyphCount;
-    }
-
-    le_int32 newGlyphCount = fGlyphCount + growAmount;
-
-    LEGlyphID *newGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount);
-    if (newGlyphs == NULL) {
-        // Could not grow the glyph array
-        return fGlyphCount;
-    }
-    fGlyphs = newGlyphs;
-
-    le_int32 *newCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount);
-    if (newCharIndices == NULL) {
-        // Could not grow the glyph array
-        return fGlyphCount;
-    }
-    fCharIndices = newCharIndices;
-
-    if (fAuxData != NULL) {
-        le_uint32 *newAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount);
-        if (newAuxData == NULL) {
-            // could not grow the aux data array
-            return fGlyphCount;
-    }
-        fAuxData = (le_uint32 *)newAuxData;
-    }
-
-    if (fGlyphCount > 0) {
-       fSrcIndex  = fGlyphCount - 1;
-    }
-    fDestIndex = newGlyphCount - 1;
-
-#if 0
-    // If the current position is at the end of the array
-    // update it to point to the end of the new array. The
-    // insertion callback will handle all other cases.
-    // FIXME: this is left over from GlyphIterator, but there's no easy
-    // way to implement this here... it seems that GlyphIterator doesn't
-    // really need it 'cause the insertions don't get  applied until after a
-    // complete pass over the glyphs, after which the iterator gets reset anyhow...
-    // probably better to just document that for LEGlyphStorage and GlyphIterator...
-    if (position == glyphCount) {
-        position = newGlyphCount;
-    }
-#endif
-
-    fInsertionList->applyInsertions(this);
-
-    fInsertionList->reset();
-
-    return fGlyphCount = newGlyphCount;
-}
-
-le_bool LEGlyphStorage::applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[])
-{
-#if 0
-    // if the current position is within the block we're shifting
-    // it needs to be updated to the current glyph's
-    // new location.
-    // FIXME: this is left over from GlyphIterator, but there's no easy
-    // way to implement this here... it seems that GlyphIterator doesn't
-    // really need it 'cause the insertions don't get  applied until after a
-    // complete pass over the glyphs, after which the iterator gets reset anyhow...
-    // probably better to just document that for LEGlyphStorage and GlyphIterator...
-    if (position >= atPosition && position <= fSrcIndex) {
-        position += fDestIndex - fSrcIndex;
-    }
-#endif
-
-    if (atPosition < 0 || fSrcIndex < 0 || fDestIndex < 0) {
-        return FALSE;
-    }
-
-    if (fAuxData != NULL) {
-        le_int32 src = fSrcIndex, dest = fDestIndex;
-
-        while (src > atPosition) {
-            fAuxData[dest--] = fAuxData[src--];
-        }
-
-        for (le_int32 i = count - 1; i >= 0; i -= 1) {
-            fAuxData[dest--] = fAuxData[atPosition];
-        }
-    }
-
-    while (fSrcIndex > atPosition && fSrcIndex >= 0 && fDestIndex >= 0) {
-        fGlyphs[fDestIndex]      = fGlyphs[fSrcIndex];
-        fCharIndices[fDestIndex] = fCharIndices[fSrcIndex];
-
-        fDestIndex -= 1;
-        fSrcIndex  -= 1;
-    }
-
-    for (le_int32 i = count - 1; i >= 0 && fDestIndex >= 0; i -= 1) {
-        fGlyphs[fDestIndex]      = newGlyphs[i];
-        fCharIndices[fDestIndex] = fCharIndices[atPosition];
-
-        fDestIndex -= 1;
-    }
-
-    // the source glyph we're pointing at
-    // just got replaced by the insertion
-    fSrcIndex -= 1;
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LEGlyphStorage.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,570 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- **********************************************************************
- *   Copyright (C) 1998-2010, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#ifndef __LEGLYPHSTORAGE_H
-#define __LEGLYPHSTORAGE_H
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-
-/**
- * \file
- * \brief C++ API: This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
- * For each glyph it holds the glyph ID, the index of the backing store character
- * which produced the glyph, the X and Y position of the glyph and an auxillary data
- * pointer.
- *
- * The storage is growable using the <code>LEInsertionList</code> class.
- *
- *
- * @see LEInsertionList.h
- *
- * @stable ICU 3.6
- */
-class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback
-{
-private:
-    /**
-     * The number of entries in the per-glyph arrays.
-     *
-     * @internal
-     */
-    le_int32   fGlyphCount;
-
-    /**
-     * The glyph ID array.
-     *
-     * @internal
-     */
-    LEGlyphID *fGlyphs;
-
-    /**
-     * The char indices array.
-     *
-     * @internal
-     */
-    le_int32  *fCharIndices;
-
-    /**
-     * The glyph positions array.
-     *
-     * @internal
-     */
-    float     *fPositions;
-
-    /**
-     * The auxillary data array.
-     *
-     * @internal
-     */
-    le_uint32 *fAuxData;
-
-
-    /**
-     * The insertion list, used to grow the above arrays.
-     *
-     * @internal
-     */
-    LEInsertionList *fInsertionList;
-
-    /**
-     * The source index while growing the data arrays.
-     *
-     * @internal
-     */
-    le_int32 fSrcIndex;
-
-    /**
-     * The destination index used while growing the data arrays.
-     *
-     * @internal
-     */
-    le_int32 fDestIndex;
-
-protected:
-    /**
-     * This implements <code>LEInsertionCallback</code>. The <code>LEInsertionList</code>
-     * will call this method once for each insertion.
-     *
-     * @param atPosition the position of the insertion
-     * @param count the number of glyphs being inserted
-     * @param newGlyphs the address of the new glyph IDs
-     *
-     * @return <code>true</code> if <code>LEInsertionList</code> should stop
-     *         processing the insertion list after this insertion.
-     *
-     * @see LEInsertionList.h
-     *
-     * @stable ICU 3.0
-     */
-    virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]);
-
-public:
-
-    /**
-     * Allocates an empty <code>LEGlyphStorage</code> object. You must call
-     * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code>
-     * to allocate the data.
-     *
-     * @stable ICU 3.0
-     */
-    LEGlyphStorage();
-
-    /**
-     * The destructor. This will deallocate all of the arrays.
-     *
-     * @stable ICU 3.0
-     */
-    ~LEGlyphStorage();
-
-    /**
-     * This method returns the number of glyphs in the glyph array.
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * @stable ICU 3.0
-     */
-    inline le_int32 getGlyphCount() const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold all
-     * the glyphs.
-     *
-     * @param glyphs - the destiniation glyph array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array,
-     * ORing in extra bits. (This functionality is needed by the JDK,
-     * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-     * the composite font slot number)
-     *
-     * @param glyphs - the destination (32 bit) glyph array
-     * @param extraBits - this value will be ORed with each glyph index
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param indexBase - an offset which will be added to each index
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
-    /**
-     * This method copies the position array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold an
-     * X and Y position for each glyph, plus an extra X and Y for the
-     * advance of the last glyph.
-     *
-     * @param positions - the destiniation position array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getGlyphPositions(float positions[], LEErrorCode &success) const;
-
-    /**
-     * This method returns the X and Y position of the glyph at
-     * the given index.
-     *
-     * Input parameters:
-     * @param glyphIndex - the index of the glyph
-     *
-     * Output parameters:
-     * @param x - the glyph's X position
-     * @param y - the glyph's Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 3.0
-     */
-    void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
-    /**
-     * This method allocates the glyph array, the char indices array and the insertion list. You
-     * must call this method before using the object. This method also initializes the char indices
-     * array.
-     *
-     * @param initialGlyphCount the initial size of the glyph and char indices arrays.
-     * @param rightToLeft <code>true</code> if the original input text is right to left.
-     * @param success set to an error code if the storage cannot be allocated of if the initial
-     *        glyph count is not positive.
-     *
-     * @stable ICU 3.0
-     */
-    void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success);
-
-    /**
-     * This method allocates the storage for the glyph positions. It allocates one extra X, Y
-     * position pair for the position just after the last glyph.
-     *
-     * @param success set to an error code if the positions array cannot be allocated.
-     *
-     * @return the number of X, Y position pairs allocated.
-     *
-     * @stable ICU 3.0
-     */
-    le_int32 allocatePositions(LEErrorCode &success);
-
-    /**
-     * This method allocates the storage for the auxillary glyph data.
-     *
-     * @param success set to an error code if the aulillary data array cannot be allocated.
-     *
-     * @return the size of the auxillary data array.
-     *
-     * @stable ICU 3.6
-     */
-    le_int32 allocateAuxData(LEErrorCode &success);
-
-    /**
-     * Copy the entire auxillary data array.
-     *
-     * @param auxData the auxillary data array will be copied to this address
-     * @param success set to an error code if the data cannot be copied
-     *
-     * @stable ICU 3.6
-     */
-    void getAuxData(le_uint32 auxData[], LEErrorCode &success) const;
-
-    /**
-     * Get the glyph ID for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the glyph ID cannot be retrieved.
-     *
-     * @return the glyph ID
-     *
-     * @stable ICU 3.0
-     */
-    LEGlyphID getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const;
-
-    /**
-     * Get the char index for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the char index cannot be retrieved.
-     *
-     * @return the character index
-     *
-     * @stable ICU 3.0
-     */
-    le_int32  getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const;
-
-
-    /**
-     * Get the auxillary data for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the auxillary data
-     *
-     * @stable ICU 3.6
-     */
-    le_uint32 getAuxData(le_int32 glyphIndex, LEErrorCode &success) const;
-
-    /**
-     * This operator allows direct access to the glyph array
-     * using the index operator.
-     *
-     * @param glyphIndex the index into the glyph array
-     *
-     * @return a reference to the given location in the glyph array
-     *
-     * @stable ICU 3.0
-     */
-    inline LEGlyphID &operator[](le_int32 glyphIndex) const;
-
-    /**
-     * Call this method to replace a single glyph in the glyph array
-     * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-     * to do the insertion. It returns the address of storage where the new
-     * glyph IDs can be stored. They will not actually be inserted into the
-     * glyph array until <code>applyInsertions</code> is called.
-     *
-     * @param atIndex the index of the glyph to be replaced
-     * @param insertCount the number of glyphs to replace it with
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the address at which to store the replacement glyphs.
-     *
-     * @see LEInsertionList.h
-     *
-     * @stable ICU 4.2
-     */
-    LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success);
-
-    /**
-     * Call this method to replace a single glyph in the glyph array
-     * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-     * to do the insertion. It returns the address of storage where the new
-     * glyph IDs can be stored. They will not actually be inserted into the
-     * glyph array until <code>applyInsertions</code> is called.
-     *
-     * Note: Don't use this version, use the other version of this function which has an error code.
-     *
-     * @param atIndex the index of the glyph to be replaced
-     * @param insertCount the number of glyphs to replace it with
-     *
-     * @return the address at which to store the replacement glyphs.
-     *
-     * @see LEInsertionList.h
-     *
-     * @stable ICU 3.0
-     */
-    LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount);
-
-    /**
-     * This method is used to reposition glyphs during Indic v2 processing.  It moves
-     * all of the relevant glyph information ( glyph, indices, positions, and auxData ),
-     * from the source position to the target position, and also allows for a marker bit
-     * to be set in the target glyph's auxData so that it won't be reprocessed later in the
-     * cycle.
-     *
-     * @param fromPosition - position of the glyph to be moved
-     * @param toPosition - target position of the glyph
-     * @param marker marker bit
-     *
-     * @stable ICU 4.2
-     */
-    void moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker);
-
-    /**
-     * This method causes all of the glyph insertions recorded by
-     * <code>insertGlyphs</code> to be applied to the glyph array. The
-     * new slots in the char indices and the auxillary data arrays
-     * will be filled in with the values for the glyph being replaced.
-     *
-     * @return the new size of the glyph array
-     *
-     * @see LEInsertionList.h
-     *
-     * @stable ICU 3.0
-     */
-    le_int32 applyInsertions();
-
-    /**
-     * Set the glyph ID for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param glyphID the new glyph ID
-     * @param success will be set to an error code if the glyph ID cannot be set.
-     *
-     * @stable ICU 3.0
-     */
-    void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success);
-
-    /**
-     * Set the char index for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param charIndex the new char index
-     * @param success will be set to an error code if the char index cannot be set.
-     *
-     * @stable ICU 3.0
-     */
-    void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success);
-
-    /**
-     * Set the X, Y position for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param x the new X position
-     * @param y the new Y position
-     * @param success will be set to an error code if the position cannot be set.
-     *
-     * @stable ICU 3.0
-     */
-    void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success);
-
-    /**
-     * Adjust the X, Y position for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param xAdjust the adjustment to the glyph's X position
-     * @param yAdjust the adjustment to the glyph's Y position
-     * @param success will be set to an error code if the glyph's position cannot be adjusted.
-     *
-     * @stable ICU 3.0
-     */
-    void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success);
-
-    /**
-     * Set the auxillary data for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param auxData the new auxillary data
-     * @param success will be set to an error code if the auxillary data cannot be set.
-     *
-     * @stable ICU 3.6
-     */
-    void setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success);
-
-    /**
-     * Delete the glyph array and replace it with the one
-     * in <code>from</code>. Set the glyph array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new glyph array.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptGlyphArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the char indices array and replace it with the one
-     * in <code>from</code>. Set the char indices array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new char indices array.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptCharIndicesArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the position array and replace it with the one
-     * in <code>from</code>. Set the position array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new position array.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptPositionArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the auxillary data array and replace it with the one
-     * in <code>from</code>. Set the auxillary data array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new auxillary data array.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptAuxDataArray(LEGlyphStorage &from);
-
-    /**
-     * Change the glyph count of this object to be the same
-     * as the one in <code>from</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new glyph count.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptGlyphCount(LEGlyphStorage &from);
-
-    /**
-     * Change the glyph count of this object to the given value.
-     *
-     * @param newGlyphCount the new glyph count.
-     *
-     * @stable ICU 3.0
-     */
-    void adoptGlyphCount(le_int32 newGlyphCount);
-
-    /**
-     * This method frees the glyph, character index, position  and
-     * auxillary data arrays so that the LayoutEngine can be reused
-     * to layout a different characer array. (This method is also called
-     * by the destructor)
-     *
-     * @stable ICU 3.0
-     */
-    void reset();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 3.0
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 3.0
-     */
-    static UClassID getStaticClassID();
-};
-
-inline le_int32 LEGlyphStorage::getGlyphCount() const
-{
-    return fGlyphCount;
-}
-
-inline LEGlyphID &LEGlyphStorage::operator[](le_int32 glyphIndex) const
-{
-    return fGlyphs[glyphIndex];
-}
-
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEInsertionList.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- **********************************************************************
- *   Copyright (C) 1998-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-struct InsertionRecord
-{
-    InsertionRecord *next;
-    le_int32 position;
-    le_int32 count;
-    LEGlyphID glyphs[ANY_NUMBER];
-};
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEInsertionList)
-
-LEInsertionList::LEInsertionList(le_bool rightToLeft)
-: head(NULL), tail(NULL), growAmount(0), append(rightToLeft)
-{
-    tail = (InsertionRecord *) &head;
-}
-
-LEInsertionList::~LEInsertionList()
-{
-    reset();
-}
-
-void LEInsertionList::reset()
-{
-    while (head != NULL) {
-        InsertionRecord *record = head;
-
-        head = head->next;
-        LE_DELETE_ARRAY(record);
-    }
-
-    tail = (InsertionRecord *) &head;
-    growAmount = 0;
-}
-
-le_int32 LEInsertionList::getGrowAmount()
-{
-    return growAmount;
-}
-
-LEGlyphID *LEInsertionList::insert(le_int32 position, le_int32 count, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    InsertionRecord *insertion = (InsertionRecord *) LE_NEW_ARRAY(char, sizeof(InsertionRecord) + (count - ANY_NUMBER) * sizeof (LEGlyphID));
-    if (insertion == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    insertion->position = position;
-    insertion->count = count;
-
-    growAmount += count - 1;
-
-    if (append) {
-        // insert on end of list...
-        insertion->next = NULL;
-        tail->next = insertion;
-        tail = insertion;
-    } else {
-        // insert on front of list...
-        insertion->next = head;
-        head = insertion;
-    }
-
-    return insertion->glyphs;
-}
-
-le_bool LEInsertionList::applyInsertions(LEInsertionCallback *callback)
-{
-    for (InsertionRecord *rec = head; rec != NULL; rec = rec->next) {
-        if (callback->applyInsertion(rec->position, rec->count, rec->glyphs)) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LEInsertionList.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- **********************************************************************
- *   Copyright (C) 1998-2013, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#ifndef __LEINSERTIONLIST_H
-#define __LEINSERTIONLIST_H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-struct InsertionRecord;
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * This class encapsulates the callback used by <code>LEInsertionList</code>
- * to apply an insertion from the insertion list.
- *
- * @internal
- */
-class U_LAYOUT_API LEInsertionCallback
-{
-public:
-    /**
-     * This method will be called by <code>LEInsertionList::applyInsertions</code> for each
-     * entry on the insertion list.
-     *
-     * @param atPosition the position of the insertion
-     * @param count the number of glyphs to insert
-     * @param newGlyphs the address of the glyphs to insert
-     *
-     * @return <code>TRUE</code> if <code>LEInsertions::applyInsertions</code> should
-     *         stop after applying this insertion.
-     *
-     * @internal
-     */
-    virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0;
-
-    /**
-     * The destructor
-     */
-     virtual ~LEInsertionCallback();
-};
-
-/**
- * This class is used to keep track of insertions to an array of
- * <code>LEGlyphIDs</code>. The insertions are kept on a linked
- * list of <code>InsertionRecords</code> so that the glyph array
- * doesn't have to be grown for each insertion. The insertions are
- * stored on the list from leftmost to rightmost to make it easier
- * to do the insertions.
- *
- * The insertions are applied to the array by calling the
- * <code>applyInsertions</code> method, which calls a client
- * supplied <code>LEInsertionCallback</code> object to actually
- * apply the individual insertions.
- *
- * @internal
- */
-class LEInsertionList : public UObject
-{
-public:
-    /**
-     * Construct an empty insertion list.
-     *
-     * @param rightToLeft <code>TRUE</code> if the glyphs are stored
-     *                    in the array in right to left order.
-     *
-     * @internal
-     */
-    LEInsertionList(le_bool rightToLeft);
-
-    /**
-     * The destructor.
-     */
-    ~LEInsertionList();
-
-    /**
-     * Add an entry to the insertion list.
-     *
-     * @param position the glyph at this position in the array will be
-     *                 replaced by the new glyphs.
-     * @param count the number of new glyphs
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the address of an array in which to store the new glyphs. This will
-     *         <em>not</em> be in the glyph array.
-     *
-     * @internal
-     */
-    LEGlyphID *insert(le_int32 position, le_int32 count, LEErrorCode &success);
-
-    /**
-     * Return the number of new glyphs that have been inserted.
-     *
-     * @return the number of new glyphs which have been inserted
-     *
-     * @internal
-     */
-    le_int32 getGrowAmount();
-
-    /**
-     * Call the <code>LEInsertionCallback</code> once for each
-     * entry on the insertion list.
-     *
-     * @param callback the <code>LEInsertionCallback</code> to call for each insertion.
-     *
-     * @return <code>TRUE</code> if <code>callback</code> returned <code>TRUE</code> to
-     *         terminate the insertion list processing.
-     *
-     * @internal
-     */
-    le_bool applyInsertions(LEInsertionCallback *callback);
-
-    /**
-     * Empty the insertion list and free all associated
-     * storage.
-     *
-     * @internal
-     */
-    void reset();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-
-    /**
-     * The head of the insertion list.
-     *
-     * @internal
-     */
-    InsertionRecord *head;
-
-    /**
-     * The tail of the insertion list.
-     *
-     * @internal
-     */
-    InsertionRecord *tail;
-
-    /**
-     * The total number of new glyphs on the insertion list.
-     *
-     * @internal
-     */
-    le_int32 growAmount;
-
-    /**
-     * Set to <code>TRUE</code> if the glyphs are in right
-     * to left order. Since we want the rightmost insertion
-     * to be first on the list, we need to append the
-     * insertions in this case. Otherwise they're prepended.
-     *
-     * @internal
-     */
-    le_bool  append;
-};
-#endif  /* U_HIDE_INTERNAL_API */
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/LELanguages.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
-#ifndef __LELANGUAGES_H
-#define __LELANGUAGES_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: List of language codes for LayoutEngine
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * A provisional list of language codes. For now,
- * this is just a list of languages which the LayoutEngine
- * supports.
- *
- * @stable ICU 2.6
- */
-
-enum LanguageCodes {
-    nullLanguageCode =  0,
-    araLanguageCode =  1,
-    asmLanguageCode =  2,
-    benLanguageCode =  3,
-    farLanguageCode =  4,
-    gujLanguageCode =  5,
-    hinLanguageCode =  6,
-    iwrLanguageCode =  7,
-    jiiLanguageCode =  8,
-    janLanguageCode =  9,
-    kanLanguageCode = 10,
-    kokLanguageCode = 11,
-    korLanguageCode = 12,
-    kshLanguageCode = 13,
-    malLanguageCode = 14,
-    marLanguageCode = 15,
-    mlrLanguageCode = 16,
-    mniLanguageCode = 17,
-    oriLanguageCode = 18,
-    sanLanguageCode = 19,
-    sndLanguageCode = 20,
-    snhLanguageCode = 21,
-    syrLanguageCode = 22,
-    tamLanguageCode = 23,
-    telLanguageCode = 24,
-    thaLanguageCode = 25,
-    urdLanguageCode = 26,
-    zhpLanguageCode = 27,
-    zhsLanguageCode = 28,
-    zhtLanguageCode = 29,
-
-    /** New language codes added 03/13/2008 @stable ICU 4.0 */
-    afkLanguageCode = 30,
-    belLanguageCode = 31,
-    bgrLanguageCode = 32,
-    catLanguageCode = 33,
-    cheLanguageCode = 34,
-    copLanguageCode = 35,
-    csyLanguageCode = 36,
-    danLanguageCode = 37,
-    deuLanguageCode = 38,
-    dznLanguageCode = 39,
-    ellLanguageCode = 40,
-    engLanguageCode = 41,
-    espLanguageCode = 42,
-    etiLanguageCode = 43,
-    euqLanguageCode = 44,
-    finLanguageCode = 45,
-    fraLanguageCode = 46,
-    gaeLanguageCode = 47,
-    hauLanguageCode = 48,
-    hrvLanguageCode = 49,
-    hunLanguageCode = 50,
-    hyeLanguageCode = 51,
-    indLanguageCode = 52,
-    itaLanguageCode = 53,
-    khmLanguageCode = 54,
-    mngLanguageCode = 55,
-    mtsLanguageCode = 56,
-    nepLanguageCode = 57,
-    nldLanguageCode = 58,
-    pasLanguageCode = 59,
-    plkLanguageCode = 60,
-    ptgLanguageCode = 61,
-    romLanguageCode = 62,
-    rusLanguageCode = 63,
-    skyLanguageCode = 64,
-    slvLanguageCode = 65,
-    sqiLanguageCode = 66,
-    srbLanguageCode = 67,
-    sveLanguageCode = 68,
-    tibLanguageCode = 69,
-    trkLanguageCode = 70,
-    welLanguageCode = 71,
-
-    languageCodeCount = 72
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEScripts.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 11/01/2011 04:08:09 PM PDT
- */
-
-#ifndef __LESCRIPTS_H
-#define __LESCRIPTS_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: Constants for Unicode script values
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * Constants for Unicode script values, generated using
- * ICU4J's <code>UScript</code> class.
- *
- * @stable ICU 2.2
- */
-
-enum ScriptCodes {
-    zyyyScriptCode =  0,
-    zinhScriptCode =  1,
-    qaaiScriptCode = zinhScriptCode,  /* manually added alias, for API stability */
-    arabScriptCode =  2,
-    armnScriptCode =  3,
-    bengScriptCode =  4,
-    bopoScriptCode =  5,
-    cherScriptCode =  6,
-    coptScriptCode =  7,
-    cyrlScriptCode =  8,
-    dsrtScriptCode =  9,
-    devaScriptCode = 10,
-    ethiScriptCode = 11,
-    georScriptCode = 12,
-    gothScriptCode = 13,
-    grekScriptCode = 14,
-    gujrScriptCode = 15,
-    guruScriptCode = 16,
-    haniScriptCode = 17,
-    hangScriptCode = 18,
-    hebrScriptCode = 19,
-    hiraScriptCode = 20,
-    kndaScriptCode = 21,
-    kanaScriptCode = 22,
-    khmrScriptCode = 23,
-    laooScriptCode = 24,
-    latnScriptCode = 25,
-    mlymScriptCode = 26,
-    mongScriptCode = 27,
-    mymrScriptCode = 28,
-    ogamScriptCode = 29,
-    italScriptCode = 30,
-    oryaScriptCode = 31,
-    runrScriptCode = 32,
-    sinhScriptCode = 33,
-    syrcScriptCode = 34,
-    tamlScriptCode = 35,
-    teluScriptCode = 36,
-    thaaScriptCode = 37,
-    thaiScriptCode = 38,
-    tibtScriptCode = 39,
-/**
- * @stable ICU 2.6
- */
-
-    cansScriptCode = 40,
-/**
- * @stable ICU 2.2
- */
-
-    yiiiScriptCode = 41,
-    tglgScriptCode = 42,
-    hanoScriptCode = 43,
-    buhdScriptCode = 44,
-    tagbScriptCode = 45,
-/**
- * @stable ICU 2.6
- */
-
-    braiScriptCode = 46,
-    cprtScriptCode = 47,
-    limbScriptCode = 48,
-    linbScriptCode = 49,
-    osmaScriptCode = 50,
-    shawScriptCode = 51,
-    taleScriptCode = 52,
-    ugarScriptCode = 53,
-/**
- * @stable ICU 3.0
- */
-
-    hrktScriptCode = 54,
-/**
- * @stable ICU 3.4
- */
-
-    bugiScriptCode = 55,
-    glagScriptCode = 56,
-    kharScriptCode = 57,
-    syloScriptCode = 58,
-    taluScriptCode = 59,
-    tfngScriptCode = 60,
-    xpeoScriptCode = 61,
-/**
- * @stable ICU 3.6
- */
-
-    baliScriptCode = 62,
-    batkScriptCode = 63,
-    blisScriptCode = 64,
-    brahScriptCode = 65,
-    chamScriptCode = 66,
-    cirtScriptCode = 67,
-    cyrsScriptCode = 68,
-    egydScriptCode = 69,
-    egyhScriptCode = 70,
-    egypScriptCode = 71,
-    geokScriptCode = 72,
-    hansScriptCode = 73,
-    hantScriptCode = 74,
-    hmngScriptCode = 75,
-    hungScriptCode = 76,
-    indsScriptCode = 77,
-    javaScriptCode = 78,
-    kaliScriptCode = 79,
-    latfScriptCode = 80,
-    latgScriptCode = 81,
-    lepcScriptCode = 82,
-    linaScriptCode = 83,
-    mandScriptCode = 84,
-    mayaScriptCode = 85,
-    meroScriptCode = 86,
-    nkooScriptCode = 87,
-    orkhScriptCode = 88,
-    permScriptCode = 89,
-    phagScriptCode = 90,
-    phnxScriptCode = 91,
-    plrdScriptCode = 92,
-    roroScriptCode = 93,
-    saraScriptCode = 94,
-    syreScriptCode = 95,
-    syrjScriptCode = 96,
-    syrnScriptCode = 97,
-    tengScriptCode = 98,
-    vaiiScriptCode = 99,
-    vispScriptCode = 100,
-    xsuxScriptCode = 101,
-    zxxxScriptCode = 102,
-    zzzzScriptCode = 103,
-/**
- * @stable ICU 3.8
- */
-
-    cariScriptCode = 104,
-    jpanScriptCode = 105,
-    lanaScriptCode = 106,
-    lyciScriptCode = 107,
-    lydiScriptCode = 108,
-    olckScriptCode = 109,
-    rjngScriptCode = 110,
-    saurScriptCode = 111,
-    sgnwScriptCode = 112,
-    sundScriptCode = 113,
-    moonScriptCode = 114,
-    mteiScriptCode = 115,
-/**
- * @stable ICU 4.0
- */
-
-    armiScriptCode = 116,
-    avstScriptCode = 117,
-    cakmScriptCode = 118,
-    koreScriptCode = 119,
-    kthiScriptCode = 120,
-    maniScriptCode = 121,
-    phliScriptCode = 122,
-    phlpScriptCode = 123,
-    phlvScriptCode = 124,
-    prtiScriptCode = 125,
-    samrScriptCode = 126,
-    tavtScriptCode = 127,
-    zmthScriptCode = 128,
-    zsymScriptCode = 129,
-/**
- * @stable ICU 4.4
- */
-
-    bamuScriptCode = 130,
-    lisuScriptCode = 131,
-    nkgbScriptCode = 132,
-    sarbScriptCode = 133,
-/**
- * @stable ICU 4.6
- */
-
-    bassScriptCode = 134,
-    duplScriptCode = 135,
-    elbaScriptCode = 136,
-    granScriptCode = 137,
-    kpelScriptCode = 138,
-    lomaScriptCode = 139,
-    mendScriptCode = 140,
-    mercScriptCode = 141,
-    narbScriptCode = 142,
-    nbatScriptCode = 143,
-    palmScriptCode = 144,
-    sindScriptCode = 145,
-    waraScriptCode = 146,
-/**
- * @stable ICU 4.8
- */
-
-    afakScriptCode = 147,
-    jurcScriptCode = 148,
-    mrooScriptCode = 149,
-    nshuScriptCode = 150,
-    shrdScriptCode = 151,
-    soraScriptCode = 152,
-    takrScriptCode = 153,
-    tangScriptCode = 154,
-    woleScriptCode = 155,
-/**
- * @stable ICU 49
- */
-
-    hluwScriptCode = 156, /* bump to match current ICU */
-    khojScriptCode = 157,
-    tirhScriptCode = 158,
-
-/**
- * @stable ICU 2.2
- */
-    scriptCodeCount
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LEStandalone.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#ifndef __LESTANDALONE
-#define __LESTANDALONE
-
-#ifndef U_COPYRIGHT_STRING
-#define U_COPYRIGHT_STRING " (C) Copyright IBM Corp and Others. 1998-2010 - All Rights Reserved"
-#endif
-
-/* ICU Version number */
-#ifndef U_ICU_VERSION
-#define U_ICU_VERSION "4.6"
-#endif
-
-/* Definitions to make Layout Engine work away from ICU. */
-#ifndef U_NAMESPACE_BEGIN
-#define U_NAMESPACE_BEGIN
-#endif
-
-#ifndef U_NAMESPACE_END
-#define U_NAMESPACE_END
-#endif
-
-/* RTTI Definition */
-typedef const char *UClassID;
-#ifndef UOBJECT_DEFINE_RTTI_IMPLEMENTATION
-#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(x) UClassID x::getStaticClassID(){static char z=0; return (UClassID)&z; } UClassID x::getDynamicClassID() const{return x::getStaticClassID(); }
-#endif
-
-/* UMemory's functions aren't used by the layout engine. */
-struct UMemory {};
-/* UObject's functions aren't used by the layout engine. */
-struct UObject {};
-
-/* String handling */
-#include <stdlib.h>
-#include <string.h>
-
-/**
- * A convenience macro to test for the success of a LayoutEngine call.
- *
- * @stable ICU 2.4
- */
-#define LE_SUCCESS(code) ((code)<=LE_NO_ERROR)
-
-/**
- * A convenience macro to test for the failure of a LayoutEngine call.
- *
- * @stable ICU 2.4
- */
-#define LE_FAILURE(code) ((code)>LE_NO_ERROR)
-
-
-#ifndef _LP64
-typedef long le_int32;
-typedef unsigned long le_uint32;
-#else
-typedef int le_int32;
-typedef unsigned int le_uint32;
-#endif
-
-#define HAVE_LE_INT32 1
-#define HAVE_LE_UINT32 1
-
-typedef unsigned short UChar;
-typedef le_uint32 UChar32;
-
-typedef short le_int16;
-#define HAVE_LE_INT16 1
-
-typedef unsigned short le_uint16;
-#define HAVE_LE_UINT16
-
-typedef signed char le_int8;
-#define HAVE_LE_INT8
-
-typedef unsigned char le_uint8;
-#define HAVE_LE_UINT8
-
-typedef char UBool;
-
-/**
- * Error codes returned by the LayoutEngine.
- *
- * @stable ICU 2.4
- */
-enum LEErrorCode {
-    /* informational */
-    LE_NO_SUBFONT_WARNING           = -127, // U_USING_DEFAULT_WARNING,
-
-    /* success */
-    LE_NO_ERROR                     = 0, // U_ZERO_ERROR,
-
-    /* failures */
-    LE_ILLEGAL_ARGUMENT_ERROR       = 1, // U_ILLEGAL_ARGUMENT_ERROR,
-    LE_MEMORY_ALLOCATION_ERROR      = 7, // U_MEMORY_ALLOCATION_ERROR,
-    LE_INDEX_OUT_OF_BOUNDS_ERROR    = 8, //U_INDEX_OUTOFBOUNDS_ERROR,
-    LE_NO_LAYOUT_ERROR              = 16, // U_UNSUPPORTED_ERROR,
-    LE_INTERNAL_ERROR               = 5, // U_INTERNAL_PROGRAM_ERROR,
-    LE_FONT_FILE_NOT_FOUND_ERROR    = 4, // U_FILE_ACCESS_ERROR,
-    LE_MISSING_FONT_TABLE_ERROR     = 2  // U_MISSING_RESOURCE_ERROR
-};
-#define HAVE_LEERRORCODE
-
-#define U_LAYOUT_API
-
-#define uprv_malloc malloc
-#define uprv_free free
-#define uprv_memcpy memcpy
-#define uprv_realloc realloc
-
-#define U_EXPORT2
-#define U_CAPI extern "C"
-
-#if !defined(U_IS_BIG_ENDIAN)
-    #ifdef _LITTLE_ENDIAN
-        #define U_IS_BIG_ENDIAN 0
-    #endif
-#endif
-
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LESwaps.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __LESWAPS_H
-#define __LESWAPS_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: Endian independent access to data for LayoutEngine
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * A convenience macro which invokes the swapWord member function
- * from a concise call.
- *
- * @stable ICU 2.8
- */
-#if defined(U_IS_BIG_ENDIAN)
-    #if U_IS_BIG_ENDIAN
-        #define SWAPW(value) (value)
-    #else
-        #define SWAPW(value) LESwaps::swapWord(value)
-    #endif
-#else
-    #define SWAPW(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapWord(value))
-#endif
-
-/**
- * A convenience macro which invokes the swapLong member function
- * from a concise call.
- *
- * @stable ICU 2.8
- */
-#if defined(U_IS_BIG_ENDIAN)
-    #if U_IS_BIG_ENDIAN
-        #define SWAPL(value) (value)
-    #else
-        #define SWAPL(value) LESwaps::swapLong(value)
-    #endif
-#else
-    #define SWAPL(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapLong(value))
-#endif
-
-/**
- * This class is used to access data which stored in big endian order
- * regardless of the conventions of the platform. It has been designed
- * to automatically detect the endian-ness of the platform, so that a
- * compilation flag is not needed.
- *
- * All methods are static and inline in an attempt to induce the compiler
- * to do most of the calculations at compile time.
- *
- * @stable ICU 2.8
- */
-class U_LAYOUT_API LESwaps /* not : public UObject because all methods are static */ {
-public:
-
-#if !defined(U_IS_BIG_ENDIAN)
-    /**
-     * This method detects the endian-ness of the platform by
-     * casting a pointer to a word to a pointer to a byte. On
-     * big endian platforms the FF will be in the byte with the
-     * lowest address. On little endian platforms, the FF will
-     * be in the byte with the highest address.
-     *
-     * @return TRUE if the platform is big endian
-     *
-     * @stable ICU 2.8
-     */
-    static le_uint8 isBigEndian()
-    {
-        const le_uint16 word = 0xFF00;
-
-        return *((le_uint8 *) &word);
-    };
-#endif
-
-    /**
-     * This method does the byte swap required on little endian platforms
-     * to correctly access a (16-bit) word.
-     *
-     * @param value - the word to be byte swapped
-     *
-     * @return the byte swapped word
-     *
-     * @stable ICU 2.8
-     */
-    static le_uint16 swapWord(le_uint16 value)
-    {
-        return (((le_uint8) (value >> 8)) | (value << 8));
-    };
-
-    /**
-     * This method does the byte swapping required on little endian platforms
-     * to correctly access a (32-bit) long.
-     *
-     * @param value - the long to be byte swapped
-     *
-     * @return the byte swapped long
-     *
-     * @stable ICU 2.8
-     */
-    static le_uint32 swapLong(le_uint32 value)
-    {
-        return swapWord((le_uint16) (value >> 16)) | (swapWord((le_uint16) value) << 16);
-    };
-
-private:
-    LESwaps() {} // private - forbid instantiation
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LETableReference.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,551 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * -*- c++ -*-
- *
- * (C) Copyright IBM Corp. and others 2013 - All Rights Reserved
- *
- * Range checking
- *
- */
-
-#ifndef __LETABLEREFERENCE_H
-#define __LETABLEREFERENCE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-
-/**
- * \def LE_ENABLE_RAW
- * If this is 1, enables old non-safe raw access
- */
-#ifndef LE_ENABLE_RAW
-#define LE_ENABLE_RAW 0
-#endif
-
-#define kQuestionmarkTableTag  0x3F3F3F3FUL /* ???? */
-#define kStaticTableTag  0x30303030UL  /* 0000 */
-#define kTildeTableTag  0x7e7e7e7eUL /* ~~~~ */
-#ifdef __cplusplus
-
-// internal - interface for range checking
-U_NAMESPACE_BEGIN
-
-#if LE_ASSERT_BAD_FONT
-
-#ifndef LE_TRACE_TR
-#define LE_TRACE_TR 0
-#endif
-
-class LETableReference; // fwd
-/**
- *  defined in OpenTypeUtilities.cpp
- * @internal
- */
-U_CAPI void U_EXPORT2 _debug_LETableReference(const char *f, int l, const char *msg, const LETableReference *what, const void *ptr, size_t len);
-
-#define LE_DEBUG_TR(x) _debug_LETableReference(__FILE__, __LINE__, x, this, NULL, 0);
-#define LE_DEBUG_TR3(x,y,z) _debug_LETableReference(__FILE__, __LINE__, x, this, (const void*)y, (size_t)z);
-#if LE_TRACE_TR
-#define _TRTRACE(x) _debug_LETableReference(__FILE__, __LINE__, x, this, NULL, 0);
-#else
-#define _TRTRACE(x)
-#endif
-
-#else
-#define LE_DEBUG_TR(x)
-#define LE_DEBUG_TR3(x,y,z)
-#define _TRTRACE(x)
-#endif
-
-/**
- * @internal
- */
-class LETableReference {
-public:
-
-  /**
-   * Dummy enum asserting that a value is actually static data
-   * and does not need to be range checked
-   */
-  enum EStaticData { kStaticData = 0 };
-
-/**
- * @internal
- * Construct from a specific tag
- */
-  LETableReference(const LEFontInstance* font, LETag tableTag, LEErrorCode &success) :
-    fFont(font), fTag(tableTag), fParent(NULL), fStart(NULL),fLength(LE_UINTPTR_MAX) {
-      loadTable(success);
-    _TRTRACE("INFO: new table load")
-  }
-
-  LETableReference(const LETableReference &parent, LEErrorCode &success) : fFont(parent.fFont), fTag(parent.fTag), fParent(&parent), fStart(parent.fStart), fLength(parent.fLength) {
-    if(LE_FAILURE(success)) {
-      clear();
-    }
-    _TRTRACE("INFO: new clone")
-  }
-
-#if LE_ENABLE_RAW
-   /**
-    * Construct  without a parent LETR.
-    */
-   LETableReference(const le_uint8* data, size_t length = LE_UINTPTR_MAX) :
-    fFont(NULL), fTag(kQuestionmarkTableTag), fParent(NULL), fStart(data), fLength(length) {
-    _TRTRACE("INFO: new raw")
-  }
-#endif
-
-   /**
-    * Construct  without a parent LETR.
-    */
- LETableReference(EStaticData /* NOTUSED */, const le_uint8* data, size_t length) :
-    fFont(NULL), fTag(kQuestionmarkTableTag), fParent(NULL), fStart(data), fLength(length) {
-    _TRTRACE("INFO: new EStaticData")
-  }
-
-  LETableReference() :
-    fFont(NULL), fTag(kQuestionmarkTableTag), fParent(NULL), fStart(NULL), fLength(0) {
-    _TRTRACE("INFO: new empty")
-  }
-
-  ~LETableReference() {
-    fTag= (LETag)kTildeTableTag;
-    _TRTRACE("INFO: new dtor")
-  }
-
-  /**
-   * @internal
-   * @param length  if LE_UINTPTR_MAX means "whole table"
-   * subset
-   */
-  LETableReference(const LETableReference &parent, size_t offset, size_t length,
-                   LEErrorCode &err) :
-    fFont(parent.fFont), fTag(parent.fTag), fParent(&parent),
-    fStart((parent.fStart)+offset), fLength(length) {
-    if(LE_SUCCESS(err)) {
-      if(isEmpty()) {
-        //err = LE_MISSING_FONT_TABLE_ERROR;
-        clear(); // it's just empty. Not an error.
-      } else if(offset >= fParent->fLength || (offset & 0x01)) {
-        LE_DEBUG_TR3("offset out of range or odd alignment: (%p) +%d", NULL, offset);
-        err = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        clear();
-      } else {
-        if(fLength == LE_UINTPTR_MAX &&
-           fParent->fLength != LE_UINTPTR_MAX) {
-          fLength = (fParent->fLength) - offset; // decrement length as base address is incremented
-        }
-        if(fLength != LE_UINTPTR_MAX) {  // if we have bounds:
-          if((offset+fLength < offset) || (offset+fLength > fParent->fLength)) {
-            LE_DEBUG_TR3("offset+fLength out of range: (%p) +%d", NULL, offset+fLength);
-            err = LE_INDEX_OUT_OF_BOUNDS_ERROR; // exceeded
-            clear();
-          }
-        }
-      }
-    } else {
-      clear();
-    }
-    _TRTRACE("INFO: new subset")
-  }
-
-  const void* getAlias() const { return (const void*)fStart; }
-#ifndef LE_ENABLE_RAW
-  const void* getAliasRAW() const { LE_DEBUG_TR("getAliasRAW()"); return (const void*)fStart; }
-#endif
-  le_bool isEmpty() const { return fStart==NULL || fLength==0; }
-  le_bool isValid() const { return !isEmpty(); }
-  le_bool hasBounds() const { return fLength!=LE_UINTPTR_MAX; }
-  void clear() { fLength=0; fStart=NULL; }
-  size_t getLength() const { return fLength; }
-  const LEFontInstance* getFont() const { return fFont; }
-  LETag getTag() const { return fTag; }
-  const LETableReference* getParent() const { return fParent; }
-
-  void addOffset(size_t offset, LEErrorCode &success) {
-    if(hasBounds()) {
-      if(offset >= fLength) {
-        LE_DEBUG_TR("addOffset off end");
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-      } else {
-        fLength -= offset;
-      }
-    }
-    fStart += offset;
-  }
-
-  size_t ptrToOffset(const void *atPtr, LEErrorCode &success) const {
-    if(atPtr==NULL) return 0;
-    if(LE_FAILURE(success)) return LE_UINTPTR_MAX;
-    if((atPtr < fStart) ||
-       (hasBounds() && (atPtr >= fStart+fLength))) {
-      LE_DEBUG_TR3("ptrToOffset args out of range: %p", atPtr, 0);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return LE_UINTPTR_MAX;
-    }
-    return ((const le_uint8*)atPtr)-fStart;
-  }
-
-  /**
-   * Clamp down the length, for range checking.
-   */
-  size_t contractLength(size_t newLength) {
-    if(fLength!=LE_UINTPTR_MAX&&newLength>0&&newLength<=fLength) {
-      fLength = newLength;
-    }
-    return fLength;
-  }
-
-  /**
-   * Throw an error if offset+length off end
-   */
-public:
-  size_t verifyLength(size_t offset, size_t length, LEErrorCode &success) {
-    if(isValid()&&
-       LE_SUCCESS(success) &&
-       fLength!=LE_UINTPTR_MAX && length!=LE_UINTPTR_MAX && offset!=LE_UINTPTR_MAX &&
-       (offset+length)>fLength) {
-      LE_DEBUG_TR3("verifyLength failed (%p) %d",NULL, offset+length);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-#if LE_ASSERT_BAD_FONT
-      fprintf(stderr, "offset=%lu, len=%lu, would be at %p, (%lu) off end. End at %p\n", offset,length, fStart+offset+length, (offset+length-fLength), (offset+length-fLength)+fStart);
-#endif
-    }
-    return fLength;
-  }
-
-  /**
-  * Throw an error if size*count overflows
-  */
-  size_t verifyLength(size_t offset, size_t size, le_uint32 count, LEErrorCode &success) {
-    if(count!=0 && size>LE_UINT32_MAX/count) {
-      LE_DEBUG_TR3("verifyLength failed size=%u, count=%u", size, count);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return 0;
-    }
-    return verifyLength(offset, size*count, success);
-  }
-
-  /**
-   * Change parent link to another
-   */
-  LETableReference &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
-  /**
-   * remove parent link. Factory functions should do this.
-   */
-  void orphan(void) {
-    fParent=NULL;
-  }
-
-protected:
-  const LEFontInstance* fFont;
-  LETag  fTag;
-  const LETableReference *fParent;
-  const le_uint8 *fStart; // keep as 8 bit internally, for pointer math
-  size_t fLength;
-
-  void loadTable(LEErrorCode &success) {
-    if(LE_SUCCESS(success)) {
-      fStart = (const le_uint8*)(fFont->getFontTable(fTag, fLength)); // note - a null table is not an error.
-    }
-  }
-
-  void setRaw(const void *data, size_t length = LE_UINTPTR_MAX) {
-    fFont = NULL;
-    fTag = (LETag)kQuestionmarkTableTag;
-    fParent = NULL;
-    fStart = (const le_uint8*)data;
-    fLength = length;
-  }
-
-  /**
-   * set this object pointing to static data
-   */
-  void setTo(EStaticData /*notused*/, const void *data, size_t length) {
-    fFont = NULL;
-    fTag = (LETag)kStaticTableTag;
-    fParent = NULL;
-    fStart = (const le_uint8*)data;
-    fLength = length;
-  }
-};
-
-
-template<class T>
-class LETableVarSizer {
- public:
-  inline static size_t getSize();
-};
-
-// base definition- could override for adjustments
-template<class T> inline
-size_t LETableVarSizer<T>::getSize() {
-  return sizeof(T);
-}
-
-/**
- * \def LE_VAR_ARRAY
- * @param x Type (T)
- * @param y some member that is of length ANY_NUMBER
- * Call this after defining a class, for example:
- *   LE_VAR_ARRAY(FeatureListTable,featureRecordArray)
- * this is roughly equivalent to:
- *   template<> inline size_t LETableVarSizer<FeatureListTable>::getSize() { return sizeof(FeatureListTable) - (sizeof(le_uint16)*ANY_NUMBER); }
- * it's a specialization that informs the LETableReference subclasses to NOT include the variable array in the size.
- * dereferencing NULL is valid here because we never actually dereference it, just inside sizeof.
- */
-#define LE_VAR_ARRAY(x,y) template<> inline size_t LETableVarSizer<x>::getSize() { return sizeof(x) - (sizeof(((const x*)0)->y)); }
-/**
- * \def LE_CORRECT_SIZE
- * @param x type (T)
- * @param y fixed size for T
- */
-#define LE_CORRECT_SIZE(x,y) template<> inline size_t LETableVarSizer<x>::getSize() { return y; }
-
-/**
- * Open a new entry based on an existing table
- */
-
-template<class T>
-class LEReferenceTo : public LETableReference {
-public:
-  /**
-   * open a sub reference.
-   * @param parent parent reference
-   * @param success error status
-   * @param atPtr location of reference - if NULL, will be at offset zero (i.e. downcast of parent). Otherwise must be a pointer within parent's bounds.
-   */
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr)
-    : LETableReference(parent, parent.ptrToOffset(atPtr, success), LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
-  /**
-   * ptr plus offset
-   */
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr, size_t offset)
-    : LETableReference(parent, parent.ptrToOffset(atPtr, success)+offset, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, size_t offset)
-    : LETableReference(parent, offset, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success)
-    : LETableReference(parent, 0, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LEFontInstance *font, LETag tableTag, LEErrorCode &success)
-   : LETableReference(font, tableTag, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
-#if LE_ENABLE_RAW
- inline LEReferenceTo(const le_uint8 *data, size_t length = LE_UINTPTR_MAX) : LETableReference(data, length) {}
- inline LEReferenceTo(const T *data, size_t length = LE_UINTPTR_MAX) : LETableReference((const le_uint8*)data, length) {}
-#endif
- inline LEReferenceTo(EStaticData staticData, const le_uint8 *data, size_t length) : LETableReference(staticData, data, length) {}
- inline LEReferenceTo(EStaticData staticData, const T *data, size_t length) : LETableReference(staticData, (const le_uint8*)data, length) {}
-
- inline LEReferenceTo() : LETableReference() {}
-
-#if LE_ENABLE_RAW
- inline LEReferenceTo<T>& operator=(const T* other) {
-    setRaw(other);
-    return *this;
-  }
-#endif
-
- LEReferenceTo<T>& setTo(LETableReference::EStaticData staticData, const T* other, size_t length) {
-   LETableReference::setTo(staticData, other, length);
-   return *this;
- }
-
-  LEReferenceTo<T> &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
-  /**
-   * roll forward by one <T> size.
-   * same as addOffset(LETableVarSizer<T>::getSize(),success)
-   */
-  void addObject(LEErrorCode &success) {
-    addOffset(LETableVarSizer<T>::getSize(), success);
-  }
-  void addObject(size_t count, LEErrorCode &success) {
-    addOffset(LETableVarSizer<T>::getSize()*count, success);
-  }
-
-  const T *operator->() const { return getAlias(); }
-  const T *operator*() const { return getAlias(); }
-  const T *getAlias() const { return (const T*)fStart; }
-#if LE_ENABLE_RAW
-  const T *getAliasRAW() const { LE_DEBUG_TR("getAliasRAW<>"); return (const T*)fStart; }
-#endif
-
-};
-
-
-/**
- * \def LE_UNBOUNDED_ARRAY
- * define an array with no *known* bound. Will trim to available size.
- * @internal
- */
-#define LE_UNBOUNDED_ARRAY LE_UINT32_MAX
-
-template<class T>
-class LEReferenceToArrayOf : public LETableReference {
-public:
-  LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, size_t offset, le_uint32 count)
-    : LETableReference(parent, offset, LE_UINTPTR_MAX, success), fCount(count) {
-    _TRTRACE("INFO: new RTAO by offset")
-    if(LE_SUCCESS(success)) {
-      if(fCount == LE_UNBOUNDED_ARRAY) { // not a known length
-        fCount = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) {
-      fCount=0;
-      clear();
-    }
-  }
-
-  LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, const T* array, le_uint32 count)
-    : LETableReference(parent, parent.ptrToOffset(array, success), LE_UINTPTR_MAX, success), fCount(count) {
-_TRTRACE("INFO: new RTAO")
-    if(LE_SUCCESS(success)) {
-      if(fCount == LE_UNBOUNDED_ARRAY) { // not a known length
-        fCount = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) clear();
-  }
- LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, const T* array, size_t offset, le_uint32 count)
-   : LETableReference(parent, parent.ptrToOffset(array, success)+offset, LE_UINTPTR_MAX, success), fCount(count) {
-_TRTRACE("INFO: new RTAO")
-    if(LE_SUCCESS(success)) {
-      if(fCount == LE_UNBOUNDED_ARRAY) { // not a known length
-        fCount = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) clear();
-  }
-
- LEReferenceToArrayOf() :LETableReference(), fCount(0) {}
-
-  le_uint32 getCount() const { return fCount; }
-
-  const T *getAlias() const { return (const T*)fStart; }
-
-  const T *getAlias(le_uint32 i, LEErrorCode &success) const {
-    return ((const T*)(((const char*)getAlias())+getOffsetFor(i, success)));
-  }
-
-#ifndef LE_ENABLE_RAW
-  const T *getAliasRAW() const { LE_DEBUG_TR("getAliasRAW<>"); return (const T*)fStart; }
-#endif
-
-  const T& getObject(le_uint32 i, LEErrorCode &success) const {
-      const T *ret = getAlias(i, success);
-      if (LE_FAILURE(success) || ret==NULL) {
-          return *(new T(0));
-      } else {
-          return *ret;
-     }
-  }
-
-  /**
-   * by-value array accessor for integral types.
-   */
-  const T operator[](le_uint32 i) const {
-    LEErrorCode success = LE_NO_ERROR;
-    const T *ret = getAlias(i, success);
-    if(LE_FAILURE(success) || ret==NULL) {
-#if LE_ASSERT_BAD_FONT
-      LE_DEBUG_TR3("Range error, out of bounds? (%p) #%d", NULL, i);
-#endif
-      return T(0); // will not work for all types.
-    }
-    return *ret;
-  }
-
-  const LEReferenceTo<T> getReference(le_uint32 i, LEErrorCode &success) const {
-    if(LE_FAILURE(success)) return LEReferenceTo<T>();
-    return LEReferenceTo<T>(*this, success, getAlias(i,success));
-  }
-
-  const T& operator()(le_uint32 i, LEErrorCode &success) const {
-    return *getAlias(i,success);
-  }
-
-  size_t getOffsetFor(le_uint32 i, LEErrorCode &success) const {
-    if(LE_SUCCESS(success)&&i<getCount()) {
-      return LETableVarSizer<T>::getSize()*i;
-    } else {
-      LE_DEBUG_TR3("getOffsetFor failed (%p) index=%d",NULL, i);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-    }
-    return 0;
-  }
-
-  LEReferenceToArrayOf<T> &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
- LEReferenceToArrayOf(const LETableReference& parent, LEErrorCode & success) : LETableReference(parent,0, LE_UINTPTR_MAX, success), fCount(0) {
-    _TRTRACE("INFO: null RTAO")
-  }
-
-private:
-  le_uint32 fCount;
-};
-
-
-
-
-#ifdef _TRTRACE
-#undef _TRTRACE
-#endif
-
-U_NAMESPACE_END
-
-#endif
-
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LETypes.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,807 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LETYPES_H
-#define __LETYPES_H
-
-/**
- * If LE_Standalone is defined, it must exist and contain
- * definitions for some core ICU defines.
- */
-#ifdef LE_STANDALONE
-#include "LEStandalone.h"
-#endif
-
-#ifdef LE_STANDALONE
-/* Stand-alone Layout Engine- without ICU. */
-#include "LEStandalone.h"
-#define LE_USE_CMEMORY
-#else
-#if !defined(LE_USE_CMEMORY) && (defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_STATIC_IMPLEMENTATION) || defined(U_COMBINED_IMPLEMENTATION))
-#define LE_USE_CMEMORY
-#endif
-
-#include "unicode/utypes.h"
-
-#ifdef __cplusplus
-#include "unicode/uobject.h"
-#endif
-
-#ifdef LE_USE_CMEMORY
-#include "cmemory.h"
-#endif
-#endif
-
-/*!
- * \file
- * \brief Basic definitions for the ICU LayoutEngine
- */
-
-/**
- * A type used for signed, 32-bit integers.
- *
- * @stable ICU 2.4
- */
-#ifndef HAVE_LE_INT32
-typedef int32_t le_int32;
-#endif
-
-/**
- * A type used for unsigned, 32-bit integers.
- *
- * @stable ICU 2.4
- */
-#ifndef HAVE_LE_UINT32
-typedef uint32_t le_uint32;
-#endif
-
-/**
- * A type used for signed, 16-bit integers.
- *
- * @stable ICU 2.4
- */
-#ifndef HAVE_LE_INT16
-typedef int16_t le_int16;
-#endif
-
-#ifndef HAVE_LE_UINT16
-/**
- * A type used for unsigned, 16-bit integers.
- *
- * @stable ICU 2.4
- */
-typedef uint16_t le_uint16;
-#endif
-
-#ifndef HAVE_LE_INT8
-/**
- * A type used for signed, 8-bit integers.
- *
- * @stable ICU 2.4
- */
-typedef int8_t le_int8;
-#endif
-
-#ifndef HAVE_LE_UINT8
-/**
- * A type used for unsigned, 8-bit integers.
- *
- * @stable ICU 2.4
- */
-typedef uint8_t le_uint8;
-#endif
-
-/**
-* A type used for boolean values.
-*
-* @stable ICU 2.4
-*/
-typedef UBool le_bool;
-
-#ifndef TRUE
-/**
- * Used for <code>le_bool</code> values which are <code>true</code>.
- *
- * @stable ICU 2.4
- */
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-/**
- * Used for <code>le_bool</code> values which are <code>false</code>.
- *
- * @stable ICU 2.4
- */
-#define FALSE 0
-#endif
-
-#ifndef NULL
-/**
- * Used to represent empty pointers.
- *
- * @stable ICU 2.4
- */
-#define NULL 0
-#endif
-
-/**
- * Used for four character tags.
- *
- * @stable ICU 2.4
- */
-typedef le_uint32 LETag;
-
-/**
- * Used for 16-bit glyph indices as they're represented
- * in TrueType font tables.
- *
- * @stable ICU 3.2
- */
-typedef le_uint16 TTGlyphID;
-
-/**
- * Used for glyph indices. The low-order 16 bits are
- * the glyph ID within the font. The next 8 bits are
- * the sub-font ID within a compound font. The high-
- * order 8 bits are client defined. The LayoutEngine
- * will never change or look at the client defined bits.
- *
- * @stable ICU 3.2
- */
-typedef le_uint32 LEGlyphID;
-
-/**
- * Used to mask off the glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_GLYPH_MASK     0x0000FFFF
-
-/**
- * Used to shift the glyph ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_GLYPH_SHIFT    0
-
-
-/**
- * Used to mask off the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_SUB_FONT_MASK  0x00FF0000
-
-/**
- * Used to shift the sub-font ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_SUB_FONT_SHIFT 16
-
-
-/**
- * Used to mask off the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_CLIENT_MASK    0xFF000000
-
-/**
- * Used to shift the sub-font ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_CLIENT_SHIFT   24
-
-
-/**
- * A convenience macro to get the Glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_GET_GLYPH(gid) ((gid & LE_GLYPH_MASK) >> LE_GLYPH_SHIFT)
-
-/**
- * A convenience macro to get the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_GET_SUB_FONT(gid) ((gid & LE_SUB_FONT_MASK) >> LE_SUB_FONT_SHIFT)
-
-/**
- * A convenience macro to get the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_GET_CLIENT(gid) ((gid & LE_CLIENT_MASK) >> LE_CLIENT_SHIFT)
-
-
-/**
- * A convenience macro to set the Glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_SET_GLYPH(gid, glyph) ((gid & ~LE_GLYPH_MASK) | ((glyph << LE_GLYPH_SHIFT) & LE_GLYPH_MASK))
-
-/**
- * A convenience macro to set the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_SET_SUB_FONT(gid, font) ((gid & ~LE_SUB_FONT_MASK) | ((font << LE_SUB_FONT_SHIFT) & LE_SUB_FONT_MASK))
-
-/**
- * A convenience macro to set the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @stable ICU 3.2
- */
-#define LE_SET_CLIENT(gid, client) ((gid & ~LE_CLIENT_MASK) | ((client << LE_CLIENT_SHIFT) & LE_CLIENT_MASK))
-
-
-/**
- * Used to represent 16-bit Unicode code points.
- *
- * @stable ICU 2.4
- */
-typedef UChar LEUnicode16;
-
-/**
- * Used to represent 32-bit Unicode code points.
- *
- * @stable ICU 2.4
- */
-typedef UChar32 LEUnicode32;
-
-#ifndef U_HIDE_DEPRECATED_API
-/**
- * Used to represent 16-bit Unicode code points.
- *
- * @deprecated since ICU 2.4. Use LEUnicode16 instead
- */
-typedef UChar LEUnicode;
-#endif  /* U_HIDE_DEPRECATED_API */
-
-/**
- * Used to hold a pair of (x, y) values which represent a point.
- *
- * @stable ICU 2.4
- */
-struct LEPoint
-{
-    /**
-     * The x coordinate of the point.
-     *
-     * @stable ICU 2.4
-     */
-    float fX;
-
-    /**
-     * The y coordinate of the point.
-     *
-     * @stable ICU 2.4
-     */
-    float fY;
-};
-
-#ifndef __cplusplus
-/**
- * Used to hold a pair of (x, y) values which represent a point.
- *
- * @stable ICU 2.4
- */
-typedef struct LEPoint LEPoint;
-#endif
-
-/**
- * \def LE_TRACE
- * @internal
- */
-#ifndef LE_TRACE
-# define LE_TRACE 0
-#endif
-
-#if LE_TRACE
-# include <stdio.h>
-# define _LETRACE printf("\n%s:%d: LE: ", __FILE__, __LINE__),printf
-#else
-# define _LETRACE 0&&
-#endif
-
-#ifndef U_HIDE_INTERNAL_API
-
-#ifndef LE_ASSERT_BAD_FONT
-#define LE_ASSERT_BAD_FONT 0
-#endif
-
-#if LE_ASSERT_BAD_FONT
-#include <stdio.h>
-#define LE_DEBUG_BAD_FONT(x) fprintf(stderr,"%s:%d: BAD FONT: %s\n", __FILE__, __LINE__, (x));
-#else
-#define LE_DEBUG_BAD_FONT(x)
-#endif
-
-/**
- * Max value representable by a uintptr
- */
-
-#ifndef UINT32_MAX
-#define LE_UINT32_MAX 0xFFFFFFFFU
-#else
-#define LE_UINT32_MAX UINT32_MAX
-#endif
-
-#ifndef UINTPTR_MAX
-#define LE_UINTPTR_MAX LE_UINT32_MAX
-#else
-#define LE_UINTPTR_MAX UINTPTR_MAX
-#endif
-
-/**
- * Range check for overflow
- */
-#define LE_RANGE_CHECK(type, count, ptrfn) (( (LE_UINTPTR_MAX / sizeof(type)) < count ) ? NULL : (ptrfn))
-/**
- * A convenience macro to get the length of an array.
- *
- * @internal
- */
-#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
-#ifdef LE_USE_CMEMORY
-/**
- * A convenience macro for copying an array.
- *
- * @internal
- */
-#define LE_ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
-/**
- * Allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_NEW_ARRAY(type, count) (type *)  LE_RANGE_CHECK(type,count,uprv_malloc((count) * sizeof(type)))
-
-/**
- * Re-allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
-
- /**
- * Free an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_DELETE_ARRAY(array) uprv_free((void *) (array))
-#else
-/* !LE_USE_CMEMORY - Not using ICU memory - use C std lib versions */
-
-#include <stdlib.h>
-#include <string.h>
-
-/**
- * A convenience macro to get the length of an array.
- *
- * @internal
- */
-#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
-/**
- * A convenience macro for copying an array.
- *
- * @internal
- */
-#define LE_ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
-/**
- * Allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_NEW_ARRAY(type, count) LE_RANGE_CHECK(type,count,(type *) malloc((count) * sizeof(type)))
-
-/**
- * Re-allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_GROW_ARRAY(array, newSize) realloc((void *) (array), (newSize) * sizeof (array)[0])
-
- /**
- * Free an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_DELETE_ARRAY(array) free((void *) (array))
-
-#endif  /* LE_USE_CMEMORY */
-#endif  /* U_HIDE_INTERNAL_API */
-
-/**
- * A macro to construct the four-letter tags used to
- * label TrueType tables, and for script, language and
- * feature tags in OpenType tables.
- *
- * WARNING: THIS MACRO WILL ONLY WORK CORRECTLY IF
- * THE ARGUMENT CHARACTERS ARE ASCII.
- *
- * @stable ICU 3.2
- */
-#define LE_MAKE_TAG(a, b, c, d) \
-    (((le_uint32)(a) << 24) |   \
-     ((le_uint32)(b) << 16) |   \
-     ((le_uint32)(c) << 8)  |   \
-      (le_uint32)(d))
-
-/**
- * This enumeration defines constants for the standard
- * TrueType, OpenType and AAT table tags.
- *
- * @stable ICU 3.2
- */
-enum LETableTags {
-    LE_ACNT_TABLE_TAG = 0x61636E74UL, /**< 'acnt' */
-    LE_AVAR_TABLE_TAG = 0x61766172UL, /**< 'avar' */
-    LE_BASE_TABLE_TAG = 0x42415345UL, /**< 'BASE' */
-    LE_BDAT_TABLE_TAG = 0x62646174UL, /**< 'bdat' */
-    LE_BHED_TABLE_TAG = 0x62686564UL, /**< 'bhed' */
-    LE_BLOC_TABLE_TAG = 0x626C6F63UL, /**< 'bloc' */
-    LE_BSLN_TABLE_TAG = 0x62736C6EUL, /**< 'bsln' */
-    LE_CFF__TABLE_TAG = 0x43464620UL, /**< 'CFF ' */
-    LE_CMAP_TABLE_TAG = 0x636D6170UL, /**< 'cmap' */
-    LE_CVAR_TABLE_TAG = 0x63766172UL, /**< 'cvar' */
-    LE_CVT__TABLE_TAG = 0x63767420UL, /**< 'cvt ' */
-    LE_DSIG_TABLE_TAG = 0x44534947UL, /**< 'DSIG' */
-    LE_EBDT_TABLE_TAG = 0x45424454UL, /**< 'EBDT' */
-    LE_EBLC_TABLE_TAG = 0x45424C43UL, /**< 'EBLC' */
-    LE_EBSC_TABLE_TAG = 0x45425343UL, /**< 'EBSC' */
-    LE_FDSC_TABLE_TAG = 0x66647363UL, /**< 'fdsc' */
-    LE_FEAT_TABLE_TAG = 0x66656174UL, /**< 'feat' */
-    LE_FMTX_TABLE_TAG = 0x666D7478UL, /**< 'fmtx' */
-    LE_FPGM_TABLE_TAG = 0x6670676DUL, /**< 'fpgm' */
-    LE_FVAR_TABLE_TAG = 0x66766172UL, /**< 'fvar' */
-    LE_GASP_TABLE_TAG = 0x67617370UL, /**< 'gasp' */
-    LE_GDEF_TABLE_TAG = 0x47444546UL, /**< 'GDEF' */
-    LE_GLYF_TABLE_TAG = 0x676C7966UL, /**< 'glyf' */
-    LE_GPOS_TABLE_TAG = 0x47504F53UL, /**< 'GPOS' */
-    LE_GSUB_TABLE_TAG = 0x47535542UL, /**< 'GSUB' */
-    LE_GVAR_TABLE_TAG = 0x67766172UL, /**< 'gvar' */
-    LE_HDMX_TABLE_TAG = 0x68646D78UL, /**< 'hdmx' */
-    LE_HEAD_TABLE_TAG = 0x68656164UL, /**< 'head' */
-    LE_HHEA_TABLE_TAG = 0x68686561UL, /**< 'hhea' */
-    LE_HMTX_TABLE_TAG = 0x686D7478UL, /**< 'hmtx' */
-    LE_HSTY_TABLE_TAG = 0x68737479UL, /**< 'hsty' */
-    LE_JUST_TABLE_TAG = 0x6A757374UL, /**< 'just' */
-    LE_JSTF_TABLE_TAG = 0x4A535446UL, /**< 'JSTF' */
-    LE_KERN_TABLE_TAG = 0x6B65726EUL, /**< 'kern' */
-    LE_LCAR_TABLE_TAG = 0x6C636172UL, /**< 'lcar' */
-    LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /**< 'loca' */
-    LE_LTSH_TABLE_TAG = 0x4C545348UL, /**< 'LTSH' */
-    LE_MAXP_TABLE_TAG = 0x6D617870UL, /**< 'maxp' */
-    LE_MORT_TABLE_TAG = 0x6D6F7274UL, /**< 'mort' */
-    LE_MORX_TABLE_TAG = 0x6D6F7278UL, /**< 'morx' */
-    LE_NAME_TABLE_TAG = 0x6E616D65UL, /**< 'name' */
-    LE_OPBD_TABLE_TAG = 0x6F706264UL, /**< 'opbd' */
-    LE_OS_2_TABLE_TAG = 0x4F532F32UL, /**< 'OS/2' */
-    LE_PCLT_TABLE_TAG = 0x50434C54UL, /**< 'PCLT' */
-    LE_POST_TABLE_TAG = 0x706F7374UL, /**< 'post' */
-    LE_PREP_TABLE_TAG = 0x70726570UL, /**< 'prep' */
-    LE_PROP_TABLE_TAG = 0x70726F70UL, /**< 'prop' */
-    LE_TRAK_TABLE_TAG = 0x7472616BUL, /**< 'trak' */
-    LE_VDMX_TABLE_TAG = 0x56444D58UL, /**< 'VDMX' */
-    LE_VHEA_TABLE_TAG = 0x76686561UL, /**< 'vhea' */
-    LE_VMTX_TABLE_TAG = 0x766D7478UL, /**< 'vmtx' */
-    LE_VORG_TABLE_TAG = 0x564F5247UL, /**< 'VORG' */
-    LE_ZAPF_TABLE_TAG = 0x5A617066UL  /**< 'Zapf' */
-};
-
-/**
- * This enumeration defines constants for all
- * the common OpenType feature tags.
- *
- * @stable ICU 3.2
- */
-enum LEFeatureTags {
-    LE_AALT_FEATURE_TAG = 0x61616C74UL, /**< 'aalt' */
-    LE_ABVF_FEATURE_TAG = 0x61627666UL, /**< 'abvf' */
-    LE_ABVM_FEATURE_TAG = 0x6162766DUL, /**< 'abvm' */
-    LE_ABVS_FEATURE_TAG = 0x61627673UL, /**< 'abvs' */
-    LE_AFRC_FEATURE_TAG = 0x61667263UL, /**< 'afrc' */
-    LE_AKHN_FEATURE_TAG = 0x616B686EUL, /**< 'akhn' */
-    LE_BLWF_FEATURE_TAG = 0x626C7766UL, /**< 'blwf' */
-    LE_BLWM_FEATURE_TAG = 0x626C776DUL, /**< 'blwm' */
-    LE_BLWS_FEATURE_TAG = 0x626C7773UL, /**< 'blws' */
-    LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */
-    LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */
-    LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */
-    LE_CJCT_FEATURE_TAG = 0x636A6374UL, /**< 'cjct' */
-    LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */
-    LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */
-    LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */
-    LE_CURS_FEATURE_TAG = 0x63757273UL, /**< 'curs' */
-    LE_C2SC_FEATURE_TAG = 0x63327363UL, /**< 'c2sc' */
-    LE_C2PC_FEATURE_TAG = 0x63327063UL, /**< 'c2pc' */
-    LE_DIST_FEATURE_TAG = 0x64697374UL, /**< 'dist' */
-    LE_DLIG_FEATURE_TAG = 0x646C6967UL, /**< 'dlig' */
-    LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /**< 'dnom' */
-    LE_EXPT_FEATURE_TAG = 0x65787074UL, /**< 'expt' */
-    LE_FALT_FEATURE_TAG = 0x66616C74UL, /**< 'falt' */
-    LE_FIN2_FEATURE_TAG = 0x66696E32UL, /**< 'fin2' */
-    LE_FIN3_FEATURE_TAG = 0x66696E33UL, /**< 'fin3' */
-    LE_FINA_FEATURE_TAG = 0x66696E61UL, /**< 'fina' */
-    LE_FRAC_FEATURE_TAG = 0x66726163UL, /**< 'frac' */
-    LE_FWID_FEATURE_TAG = 0x66776964UL, /**< 'fwid' */
-    LE_HALF_FEATURE_TAG = 0x68616C66UL, /**< 'half' */
-    LE_HALN_FEATURE_TAG = 0x68616C6EUL, /**< 'haln' */
-    LE_HALT_FEATURE_TAG = 0x68616C74UL, /**< 'halt' */
-    LE_HIST_FEATURE_TAG = 0x68697374UL, /**< 'hist' */
-    LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /**< 'hkna' */
-    LE_HLIG_FEATURE_TAG = 0x686C6967UL, /**< 'hlig' */
-    LE_HNGL_FEATURE_TAG = 0x686E676CUL, /**< 'hngl' */
-    LE_HWID_FEATURE_TAG = 0x68776964UL, /**< 'hwid' */
-    LE_INIT_FEATURE_TAG = 0x696E6974UL, /**< 'init' */
-    LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /**< 'isol' */
-    LE_ITAL_FEATURE_TAG = 0x6974616CUL, /**< 'ital' */
-    LE_JALT_FEATURE_TAG = 0x6A616C74UL, /**< 'jalt' */
-    LE_JP78_FEATURE_TAG = 0x6A703738UL, /**< 'jp78' */
-    LE_JP83_FEATURE_TAG = 0x6A703833UL, /**< 'jp83' */
-    LE_JP90_FEATURE_TAG = 0x6A703930UL, /**< 'jp90' */
-    LE_KERN_FEATURE_TAG = 0x6B65726EUL, /**< 'kern' */
-    LE_LFBD_FEATURE_TAG = 0x6C666264UL, /**< 'lfbd' */
-    LE_LIGA_FEATURE_TAG = 0x6C696761UL, /**< 'liga' */
-    LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /**< 'ljmo' */
-    LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /**< 'lnum' */
-    LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /**< 'locl' */
-    LE_MARK_FEATURE_TAG = 0x6D61726BUL, /**< 'mark' */
-    LE_MED2_FEATURE_TAG = 0x6D656432UL, /**< 'med2' */
-    LE_MEDI_FEATURE_TAG = 0x6D656469UL, /**< 'medi' */
-    LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /**< 'mgrk' */
-    LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /**< 'mkmk' */
-    LE_MSET_FEATURE_TAG = 0x6D736574UL, /**< 'mset' */
-    LE_NALT_FEATURE_TAG = 0x6E616C74UL, /**< 'nalt' */
-    LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /**< 'nlck' */
-    LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /**< 'nukt' */
-    LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /**< 'numr' */
-    LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /**< 'onum' */
-    LE_OPBD_FEATURE_TAG = 0x6F706264UL, /**< 'opbd' */
-    LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /**< 'ordn' */
-    LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /**< 'ornm' */
-    LE_PALT_FEATURE_TAG = 0x70616C74UL, /**< 'palt' */
-    LE_PCAP_FEATURE_TAG = 0x70636170UL, /**< 'pcap' */
-    LE_PNUM_FEATURE_TAG = 0x706E756DUL, /**< 'pnum' */
-    LE_PREF_FEATURE_TAG = 0x70726566UL, /**< 'pref' */
-    LE_PRES_FEATURE_TAG = 0x70726573UL, /**< 'pres' */
-    LE_PSTF_FEATURE_TAG = 0x70737466UL, /**< 'pstf' */
-    LE_PSTS_FEATURE_TAG = 0x70737473UL, /**< 'psts' */
-    LE_PWID_FEATURE_TAG = 0x70776964UL, /**< 'pwid' */
-    LE_QWID_FEATURE_TAG = 0x71776964UL, /**< 'qwid' */
-    LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */
-    LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */
-    LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */
-    LE_RKRF_FEATURE_TAG = 0x726B7266UL, /**< 'rkrf' */
-    LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */
-    LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */
-    LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */
-    LE_SALT_FEATURE_TAG = 0x73616C74UL, /**< 'salt' */
-    LE_SINF_FEATURE_TAG = 0x73696E66UL, /**< 'sinf' */
-    LE_SIZE_FEATURE_TAG = 0x73697A65UL, /**< 'size' */
-    LE_SMCP_FEATURE_TAG = 0x736D6370UL, /**< 'smcp' */
-    LE_SMPL_FEATURE_TAG = 0x736D706CUL, /**< 'smpl' */
-    LE_SS01_FEATURE_TAG = 0x73733031UL, /**< 'ss01' */
-    LE_SS02_FEATURE_TAG = 0x73733032UL, /**< 'ss02' */
-    LE_SS03_FEATURE_TAG = 0x73733033UL, /**< 'ss03' */
-    LE_SS04_FEATURE_TAG = 0x73733034UL, /**< 'ss04' */
-    LE_SS05_FEATURE_TAG = 0x73733035UL, /**< 'ss05' */
-    LE_SS06_FEATURE_TAG = 0x73733036UL, /**< 'ss06' */
-    LE_SS07_FEATURE_TAG = 0x73733037UL, /**< 'ss07' */
-    LE_SS08_FEATURE_TAG = 0x73733038UL, /**< 'ss08' */
-    LE_SS09_FEATURE_TAG = 0x73733039UL, /**< 'ss09' */
-    LE_SS10_FEATURE_TAG = 0x73733130UL, /**< 'ss10' */
-    LE_SS11_FEATURE_TAG = 0x73733131UL, /**< 'ss11' */
-    LE_SS12_FEATURE_TAG = 0x73733132UL, /**< 'ss12' */
-    LE_SS13_FEATURE_TAG = 0x73733133UL, /**< 'ss13' */
-    LE_SS14_FEATURE_TAG = 0x73733134UL, /**< 'ss14' */
-    LE_SS15_FEATURE_TAG = 0x73733135UL, /**< 'ss15' */
-    LE_SS16_FEATURE_TAG = 0x73733136UL, /**< 'ss16' */
-    LE_SS17_FEATURE_TAG = 0x73733137UL, /**< 'ss17' */
-    LE_SS18_FEATURE_TAG = 0x73733138UL, /**< 'ss18' */
-    LE_SS19_FEATURE_TAG = 0x73733139UL, /**< 'ss19' */
-    LE_SS20_FEATURE_TAG = 0x73733230UL, /**< 'ss20' */
-    LE_SUBS_FEATURE_TAG = 0x73756273UL, /**< 'subs' */
-    LE_SUPS_FEATURE_TAG = 0x73757073UL, /**< 'sups' */
-    LE_SWSH_FEATURE_TAG = 0x73777368UL, /**< 'swsh' */
-    LE_TITL_FEATURE_TAG = 0x7469746CUL, /**< 'titl' */
-    LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /**< 'tjmo' */
-    LE_TNAM_FEATURE_TAG = 0x746E616DUL, /**< 'tnam' */
-    LE_TNUM_FEATURE_TAG = 0x746E756DUL, /**< 'tnum' */
-    LE_TRAD_FEATURE_TAG = 0x74726164UL, /**< 'trad' */
-    LE_TWID_FEATURE_TAG = 0x74776964UL, /**< 'twid' */
-    LE_UNIC_FEATURE_TAG = 0x756E6963UL, /**< 'unic' */
-    LE_VALT_FEATURE_TAG = 0x76616C74UL, /**< 'valt' */
-    LE_VATU_FEATURE_TAG = 0x76617475UL, /**< 'vatu' */
-    LE_VERT_FEATURE_TAG = 0x76657274UL, /**< 'vert' */
-    LE_VHAL_FEATURE_TAG = 0x7668616CUL, /**< 'vhal' */
-    LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /**< 'vjmo' */
-    LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /**< 'vkna' */
-    LE_VKRN_FEATURE_TAG = 0x766B726EUL, /**< 'vkrn' */
-    LE_VPAL_FEATURE_TAG = 0x7670616CUL, /**< 'vpal' */
-    LE_VRT2_FEATURE_TAG = 0x76727432UL, /**< 'vrt2' */
-    LE_ZERO_FEATURE_TAG = 0x7A65726FUL  /**< 'zero' */
-};
-
-/**
- * @internal
- */
-enum LEFeatureENUMs {
-  LE_Kerning_FEATURE_ENUM = 0,   /**< Requests Kerning. Formerly LayoutEngine::kTypoFlagKern */
-  LE_Ligatures_FEATURE_ENUM = 1, /**< Requests Ligatures. Formerly LayoutEngine::kTypoFlagLiga */
-  LE_NoCanon_FEATURE_ENUM = 2, /**< Requests No Canonical Processing */
-  LE_CLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_DLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_HLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_LIGA_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_RLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SMCP_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_FRAC_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_AFRC_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_ZERO_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SWSH_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_CSWH_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SALT_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_NALT_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_RUBY_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS01_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS02_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS03_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS04_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS05_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS06_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS07_FEATURE_ENUM,   /**< Feature specific enum */
-
-  LE_CHAR_FILTER_FEATURE_ENUM = 31, /**< Apply CharSubstitutionFilter */
-  LE_FEATURE_ENUM_MAX = LE_CHAR_FILTER_FEATURE_ENUM
-};
-
-
-/**
- * Flags for typographic features.
- * @internal
- * @{
- */
-#define LE_Kerning_FEATURE_FLAG   (1 << LE_Kerning_FEATURE_ENUM)
-#define LE_Ligatures_FEATURE_FLAG (1 << LE_Ligatures_FEATURE_ENUM)
-#define LE_NoCanon_FEATURE_FLAG (1 << LE_NoCanon_FEATURE_ENUM)
-#define LE_CLIG_FEATURE_FLAG (1 << LE_CLIG_FEATURE_ENUM)
-#define LE_DLIG_FEATURE_FLAG (1 << LE_DLIG_FEATURE_ENUM)
-#define LE_HLIG_FEATURE_FLAG (1 << LE_HLIG_FEATURE_ENUM)
-#define LE_LIGA_FEATURE_FLAG (1 << LE_LIGA_FEATURE_ENUM)
-#define LE_RLIG_FEATURE_FLAG (1 << LE_RLIG_FEATURE_ENUM)
-#define LE_SMCP_FEATURE_FLAG (1 << LE_SMCP_FEATURE_ENUM)
-#define LE_FRAC_FEATURE_FLAG (1 << LE_FRAC_FEATURE_ENUM)
-#define LE_AFRC_FEATURE_FLAG (1 << LE_AFRC_FEATURE_ENUM)
-#define LE_ZERO_FEATURE_FLAG (1 << LE_ZERO_FEATURE_ENUM)
-#define LE_SWSH_FEATURE_FLAG (1 << LE_SWSH_FEATURE_ENUM)
-#define LE_CSWH_FEATURE_FLAG (1 << LE_CSWH_FEATURE_ENUM)
-#define LE_SALT_FEATURE_FLAG (1 << LE_SALT_FEATURE_ENUM)
-#define LE_NALT_FEATURE_FLAG (1 << LE_NALT_FEATURE_ENUM)
-#define LE_RUBY_FEATURE_FLAG (1 << LE_RUBY_FEATURE_ENUM)
-#define LE_SS01_FEATURE_FLAG (1 << LE_SS01_FEATURE_ENUM)
-#define LE_SS02_FEATURE_FLAG (1 << LE_SS02_FEATURE_ENUM)
-#define LE_SS03_FEATURE_FLAG (1 << LE_SS03_FEATURE_ENUM)
-#define LE_SS04_FEATURE_FLAG (1 << LE_SS04_FEATURE_ENUM)
-#define LE_SS05_FEATURE_FLAG (1 << LE_SS05_FEATURE_ENUM)
-#define LE_SS06_FEATURE_FLAG (1 << LE_SS06_FEATURE_ENUM)
-#define LE_SS07_FEATURE_FLAG (1 << LE_SS07_FEATURE_ENUM)
-
-#define LE_CHAR_FILTER_FEATURE_FLAG (1 << LE_CHAR_FILTER_FEATURE_ENUM)
-/**
- * @}
- */
-
-#define LE_DEFAULT_FEATURE_FLAG (LE_Kerning_FEATURE_FLAG | LE_Ligatures_FEATURE_FLAG) /**< default features */
-
-/**
- * Error codes returned by the LayoutEngine.
- *
- * @stable ICU 2.4
- */
-#ifndef HAVE_LEERRORCODE
-enum LEErrorCode {
-    /* informational */
-    LE_NO_SUBFONT_WARNING          = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */
-
-    /* success */
-    LE_NO_ERROR                     = U_ZERO_ERROR, /**< No error, no warning. */
-
-    /* failures */
-    LE_ILLEGAL_ARGUMENT_ERROR       = U_ILLEGAL_ARGUMENT_ERROR,  /**< An illegal argument was detected. */
-    LE_MEMORY_ALLOCATION_ERROR      = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */
-    LE_INDEX_OUT_OF_BOUNDS_ERROR    = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */
-    LE_NO_LAYOUT_ERROR              = U_UNSUPPORTED_ERROR,       /**< You must call layoutChars() first. */
-    LE_INTERNAL_ERROR               = U_INTERNAL_PROGRAM_ERROR,  /**< An internal error was encountered. */
-    LE_FONT_FILE_NOT_FOUND_ERROR    = U_FILE_ACCESS_ERROR,       /**< The requested font file cannot be opened. */
-    LE_MISSING_FONT_TABLE_ERROR     = U_MISSING_RESOURCE_ERROR   /**< The requested font table does not exist. */
-};
-#endif
-
-#ifndef __cplusplus
-/**
- * Error codes returned by the LayoutEngine.
- *
- * @stable ICU 2.4
- */
-typedef enum LEErrorCode LEErrorCode;
-#endif
-
-/**
- * A convenience macro to test for the success of a LayoutEngine call.
- *
- * @stable ICU 2.4
- */
-#ifndef LE_SUCCESS
-#define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code))
-#endif
-
-/**
- * A convenience macro to test for the failure of a LayoutEngine call.
- *
- * @stable ICU 2.4
- */
-#ifndef LE_FAILURE
-#define LE_FAILURE(code) (U_FAILURE((UErrorCode)code))
-#endif
-
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,740 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-#include "LESwaps.h"
-
-#include "LayoutEngine.h"
-#include "ArabicLayoutEngine.h"
-#include "CanonShaping.h"
-#include "HanLayoutEngine.h"
-#include "HangulLayoutEngine.h"
-#include "IndicLayoutEngine.h"
-#include "KhmerLayoutEngine.h"
-#include "ThaiLayoutEngine.h"
-#include "TibetanLayoutEngine.h"
-#include "GXLayoutEngine.h"
-#include "GXLayoutEngine2.h"
-
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "LEGlyphStorage.h"
-
-#include "OpenTypeUtilities.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "MorphTables.h"
-
-#include "DefaultCharMapper.h"
-
-#include "KernTable.h"
-
-U_NAMESPACE_BEGIN
-
-/* Leave this copyright notice here! It needs to go somewhere in this library. */
-static const char copyright[] = U_COPYRIGHT_STRING;
-
-/* TODO: remove these? */
-const le_int32 LayoutEngine::kTypoFlagKern = LE_Kerning_FEATURE_FLAG;
-const le_int32 LayoutEngine::kTypoFlagLiga = LE_Ligatures_FEATURE_FLAG;
-
-const LEUnicode32 DefaultCharMapper::controlChars[] = {
-    0x0009, 0x000A, 0x000D,
-    /*0x200C, 0x200D,*/ 0x200E, 0x200F,
-    0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E,
-    0x206A, 0x206B, 0x206C, 0x206D, 0x206E, 0x206F
-};
-
-const le_int32 DefaultCharMapper::controlCharsCount = LE_ARRAY_SIZE(controlChars);
-
-const LEUnicode32 DefaultCharMapper::controlCharsZWJ[] = {
-    0x0009, 0x000A, 0x000D,
-    0x200C, 0x200D, 0x200E, 0x200F,
-    0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E,
-    0x206A, 0x206B, 0x206C, 0x206D, 0x206E, 0x206F
-};
-
-const le_int32 DefaultCharMapper::controlCharsZWJCount = LE_ARRAY_SIZE(controlCharsZWJ);
-
-LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const
-{
-    if (fZWJ) {
-        if (ch < 0x20) {
-            if (ch == 0x0a || ch == 0x0d || ch == 0x09) {
-                return 0xffff;
-            }
-        } else if (ch >= 0x200c && ch <= 0x206f) {
-            le_int32 index = OpenTypeUtilities::search((le_uint32)ch,
-                                                       (le_uint32 *)controlCharsZWJ,
-                                                       controlCharsZWJCount);
-            if (controlCharsZWJ[index] == ch) {
-                return 0xffff;
-            }
-        }
-        return ch; // note ZWJ bypasses fFilterControls and fMirror
-    }
-
-    if (fFilterControls) {
-        le_int32 index = OpenTypeUtilities::search((le_uint32)ch, (le_uint32 *)controlChars, controlCharsCount);
-
-        if (controlChars[index] == ch) {
-            return 0xFFFF;
-        }
-    }
-
-    if (fMirror) {
-        le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)DefaultCharMapper::mirroredChars, DefaultCharMapper::mirroredCharsCount);
-
-        if (mirroredChars[index] == ch) {
-            return DefaultCharMapper::srahCderorrim[index];
-        }
-    }
-
-    return ch;
-}
-
-// This is here to get it out of LEGlyphFilter.h.
-// No particular reason to put it here, other than
-// this is a good central location...
-LEGlyphFilter::~LEGlyphFilter()
-{
-    // nothing to do
-}
-
-CharSubstitutionFilter::CharSubstitutionFilter(const LEFontInstance *fontInstance)
-  : fFontInstance(fontInstance)
-{
-    // nothing to do
-}
-
-CharSubstitutionFilter::~CharSubstitutionFilter()
-{
-    // nothing to do
-}
-
-class CanonMarkFilter : public UMemory, public LEGlyphFilter
-{
-private:
-  const LEReferenceTo<GlyphClassDefinitionTable> classDefTable;
-
-    CanonMarkFilter(const CanonMarkFilter &other); // forbid copying of this class
-    CanonMarkFilter &operator=(const CanonMarkFilter &other); // forbid copying of this class
-
-public:
-    CanonMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success);
-    virtual ~CanonMarkFilter();
-
-    virtual le_bool accept(LEGlyphID glyph, LEErrorCode &success) const;
-};
-
-CanonMarkFilter::CanonMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success)
-  : classDefTable(gdefTable->getMarkAttachClassDefinitionTable(gdefTable, success))
-{
-}
-
-CanonMarkFilter::~CanonMarkFilter()
-{
-    // nothing to do?
-}
-
-le_bool CanonMarkFilter::accept(LEGlyphID glyph, LEErrorCode &success) const
-{
-  le_int32 glyphClass = classDefTable->getGlyphClass(classDefTable, glyph, success);
-  if(LE_FAILURE(success)) return false;
-  return glyphClass != 0;
-}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
-
-#define ccmpFeatureTag  LE_CCMP_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-
-#define canonFeatures (ccmpFeatureMask)
-
-static const FeatureMap canonFeatureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask}
-};
-
-static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
-
-LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance,
-                           le_int32 scriptCode,
-                           le_int32 languageCode,
-                           le_int32 typoFlags,
-                           LEErrorCode &success)
-  : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
-    fTypoFlags(typoFlags), fFilterZeroWidth(TRUE)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    fGlyphStorage = new LEGlyphStorage();
-    if (fGlyphStorage == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-le_int32 LayoutEngine::getGlyphCount() const
-{
-    return fGlyphStorage->getGlyphCount();
-}
-
-void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
-{
-    fGlyphStorage->getCharIndices(charIndices, indexBase, success);
-}
-
-void LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
-{
-    fGlyphStorage->getCharIndices(charIndices, success);
-}
-
-// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
-void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphs(glyphs, extraBits, success);
-}
-
-void LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphs(glyphs, success);
-}
-
-
-void LayoutEngine::getGlyphPositions(float positions[], LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphPositions(positions, success);
-}
-
-void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphPosition(glyphIndex, x, y, success);
-}
-
-le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    if ((fTypoFlags & LE_NoCanon_FEATURE_FLAG) == 0) { // no canonical processing
-      return count;
-    }
-
-    LEReferenceTo<GlyphSubstitutionTableHeader> canonGSUBTable(LETableReference::kStaticData,
-                                                               (GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable,
-                                                               CanonShaping::glyphSubstitutionTableLen);
-    LETag scriptTag  = OpenTypeLayoutEngine::getScriptTag(fScriptCode);
-    LETag langSysTag = OpenTypeLayoutEngine::getLangSysTag(fLanguageCode);
-    le_int32 i, dir = 1, out = 0, outCharCount = count;
-
-    if (canonGSUBTable->coversScript(canonGSUBTable,scriptTag, success) || LE_SUCCESS(success)) {
-        CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance);
-        if (substitutionFilter == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-        const LEUnicode *inChars = &chars[offset];
-        LEUnicode *reordered = NULL;
-        LEGlyphStorage fakeGlyphStorage;
-
-        fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        // This is the cheapest way to get mark reordering only for Hebrew.
-        // We could just do the mark reordering for all scripts, but most
-        // of them probably don't need it...
-        if (fScriptCode == hebrScriptCode) {
-          reordered = LE_NEW_ARRAY(LEUnicode, count);
-
-          if (reordered == NULL) {
-            delete substitutionFilter;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-          }
-
-          CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage);
-          inChars = reordered;
-        }
-
-        fakeGlyphStorage.allocateAuxData(success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        if (rightToLeft) {
-            out = count - 1;
-            dir = -1;
-        }
-
-        for (i = 0; i < count; i += 1, out += dir) {
-            fakeGlyphStorage[out] = (LEGlyphID) inChars[i];
-            fakeGlyphStorage.setAuxData(out, canonFeatures, success);
-        }
-
-        if (reordered != NULL) {
-          LE_DELETE_ARRAY(reordered);
-        }
-
-        const LEReferenceTo<GlyphDefinitionTableHeader>  noGDEF; // empty gdef header
-        outCharCount = canonGSUBTable->process(canonGSUBTable, fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, noGDEF, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE, success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        out = (rightToLeft? outCharCount - 1 : 0);
-
-        /*
-         * The char indices array in fakeGlyphStorage has the correct mapping
-         * back to the original input characters. Save it in glyphStorage. The
-         * subsequent call to glyphStoratge.allocateGlyphArray will keep this
-         * array rather than allocating and initializing a new one.
-         */
-        glyphStorage.adoptCharIndicesArray(fakeGlyphStorage);
-
-        outChars = LE_NEW_ARRAY(LEUnicode, outCharCount);
-
-        if (outChars == NULL) {
-            delete substitutionFilter;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-        for (i = 0; i < outCharCount; i += 1, out += dir) {
-            outChars[out] = (LEUnicode) LE_GET_GLYPH(fakeGlyphStorage[i]);
-        }
-
-        delete substitutionFilter;
-    }
-
-    return outCharCount;
-}
-
-le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                                            LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    LEUnicode *outChars = NULL;
-    le_int32 outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
-
-    if (outChars != NULL) {
-        mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, glyphStorage, success);
-        LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
-    } else {
-        mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-    }
-
-    return glyphStorage.getGlyphCount();
-}
-
-// Input: glyphs
-// Output: positions
-void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    glyphStorage.allocatePositions(success);
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    le_int32 i, glyphCount = glyphStorage.getGlyphCount();
-
-    for (i = 0; i < glyphCount; i += 1) {
-        LEPoint advance;
-
-        glyphStorage.setPosition(i, x, y, success);
-        _LETRACE("g#%-4d (%.2f, %.2f)", i, x, y);
-
-        fFontInstance->getGlyphAdvance(glyphStorage[i], advance);
-        x += advance.fX;
-        y += advance.fY;
-
-
-    }
-
-    glyphStorage.setPosition(glyphCount, x, y, success);
-}
-
-void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                        LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    LEReferenceTo<GlyphDefinitionTableHeader> gdefTable(LETableReference::kStaticData, (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable,
-                                                        CanonShaping::glyphDefinitionTableLen);
-    CanonMarkFilter filter(gdefTable, success);
-
-    adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-
-    if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-      LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-      KernTable kt(kernTable, success);
-      kt.process(glyphStorage, success);
-    }
-
-    // default is no adjustments
-    return;
-}
-
-void LayoutEngine::adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
-{
-    float xAdjust = 0;
-    le_int32 p, glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (markFilter == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    float ignore, prev;
-
-    glyphStorage.getGlyphPosition(0, prev, ignore, success);
-
-    for (p = 0; p < glyphCount; p += 1) {
-        float next, xAdvance;
-
-        glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
-
-        xAdvance = next - prev;
-        _LETRACE("p#%d (%.2f,%.2f)", p, xAdvance, 0);
-        glyphStorage.adjustPosition(p, xAdjust, 0, success);
-
-        if (markFilter->accept(glyphStorage[p], success)) {
-            xAdjust -= xAdvance;
-        }
-
-        prev = next;
-    }
-
-    glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
-}
-
-void LayoutEngine::adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
-{
-    float xAdjust = 0;
-    le_int32 c = 0, direction = 1, p;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (markFilter == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (reverse) {
-        c = glyphCount - 1;
-        direction = -1;
-    }
-
-    float ignore, prev;
-
-    glyphStorage.getGlyphPosition(0, prev, ignore, success);
-
-    for (p = 0; p < charCount; p += 1, c += direction) {
-        float next, xAdvance;
-
-        glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
-
-        xAdvance = next - prev;
-
-        _LETRACE("p#%d (%.2f,%.2f)", p, xAdvance, 0);
-
-
-        glyphStorage.adjustPosition(p, xAdjust, 0, success);
-
-        if (markFilter->accept(chars[c], success)) {
-            xAdjust -= xAdvance;
-        }
-
-        prev = next;
-    }
-
-    glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
-}
-
-const void *LayoutEngine::getFontTable(LETag tableTag, size_t &length) const
-{
-  return fFontInstance->getFontTable(tableTag, length);
-}
-
-void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
-                                    LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    glyphStorage.allocateGlyphArray(count, reverse, success);
-
-    DefaultCharMapper charMapper(TRUE, mirror);
-
-    fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, fFilterZeroWidth, glyphStorage);
-}
-
-// Input: characters, font?
-// Output: glyphs, positions, char indices
-// Returns: number of glyphs
-le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                              float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 glyphCount;
-
-    if (fGlyphStorage->getGlyphCount() > 0) {
-        fGlyphStorage->reset();
-    }
-
-    glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success);
-    positionGlyphs(*fGlyphStorage, x, y, success);
-    adjustGlyphPositions(chars, offset, count, rightToLeft, *fGlyphStorage, success);
-
-    return glyphCount;
-}
-
-void LayoutEngine::reset()
-{
-  if(fGlyphStorage!=NULL) {
-    fGlyphStorage->reset();
-  }
-}
-
-LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
-{
-  //kerning and ligatures - by default
-  return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, LE_DEFAULT_FEATURE_FLAG, success);
-}
-
-LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-{
-    static const le_uint32 gsubTableTag = LE_GSUB_TABLE_TAG;
-    static const le_uint32 mortTableTag = LE_MORT_TABLE_TAG;
-    static const le_uint32 morxTableTag = LE_MORX_TABLE_TAG;
-
-    if (LE_FAILURE(success)) {
-        return NULL;
-    }
-
-    LEReferenceTo<GlyphSubstitutionTableHeader> gsubTable(fontInstance,gsubTableTag,success);
-    LayoutEngine *result = NULL;
-    LETag scriptTag   = 0x00000000;
-    LETag languageTag = 0x00000000;
-    LETag v2ScriptTag = OpenTypeLayoutEngine::getV2ScriptTag(scriptCode);
-
-    // Right now, only invoke V2 processing for Devanagari.  TODO: Allow more V2 scripts as they are
-    // properly tested.
-
-    if ( v2ScriptTag == dev2ScriptTag && gsubTable.isValid() && gsubTable->coversScript(gsubTable, v2ScriptTag, success )) {
-      result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, TRUE, gsubTable, success);
-    }
-    else if (gsubTable.isValid() && gsubTable->coversScript(gsubTable, scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode), success)) {
-        switch (scriptCode) {
-        case bengScriptCode:
-        case devaScriptCode:
-        case gujrScriptCode:
-        case kndaScriptCode:
-        case mlymScriptCode:
-        case oryaScriptCode:
-        case guruScriptCode:
-        case tamlScriptCode:
-        case teluScriptCode:
-        case sinhScriptCode:
-            result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, FALSE, gsubTable, success);
-            break;
-
-        case arabScriptCode:
-            result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case hebrScriptCode:
-            // Disable hebrew ligatures since they have only archaic uses, see ticket #8318
-            result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags & ~kTypoFlagLiga, gsubTable, success);
-            break;
-
-        case hangScriptCode:
-            result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case haniScriptCode:
-            languageTag = OpenTypeLayoutEngine::getLangSysTag(languageCode);
-
-            switch (languageCode) {
-            case korLanguageCode:
-            case janLanguageCode:
-            case zhtLanguageCode:
-            case zhsLanguageCode:
-              if (gsubTable->coversScriptAndLanguage(gsubTable, scriptTag, languageTag, success, TRUE)) {
-                    result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-                    break;
-              }
-
-                // note: falling through to default case.
-            default:
-                result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-                break;
-            }
-
-            break;
-
-        case tibtScriptCode:
-            result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case khmrScriptCode:
-            result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        default:
-            result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-        }
-    } else {
-        LEReferenceTo<MorphTableHeader2> morxTable(fontInstance, morxTableTag, success);
-        if (LE_SUCCESS(success) &&
-            morxTable.isValid() &&
-            SWAPL(morxTable->version)==0x00020000) {
-            result = new GXLayoutEngine2(fontInstance, scriptCode, languageCode, morxTable, typoFlags, success);
-        } else {
-          LEReferenceTo<MorphTableHeader> mortTable(fontInstance, mortTableTag, success);
-          if (LE_SUCCESS(success) && mortTable.isValid() && SWAPL(mortTable->version)==0x00010000) { // mort
-            result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, mortTable, success);
-            } else {
-                switch (scriptCode) {
-                    case bengScriptCode:
-                    case devaScriptCode:
-                    case gujrScriptCode:
-                    case kndaScriptCode:
-                    case mlymScriptCode:
-                    case oryaScriptCode:
-                    case guruScriptCode:
-                    case tamlScriptCode:
-                    case teluScriptCode:
-                    case sinhScriptCode:
-                    {
-                        result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-                    }
-
-                case arabScriptCode:
-                  result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                  break;
-
-                  //case hebrScriptCode:
-                  //    return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-
-                case thaiScriptCode:
-                  result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                  break;
-
-                case hangScriptCode:
-                  result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                  break;
-
-                    default:
-                        result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-                }
-            }
-        }
-    }
-
-    if (result && LE_FAILURE(success)) {
-      delete result;
-      result = NULL;
-    }
-
-    if (result == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-    }
-
-    return result;
-}
-
-LayoutEngine::~LayoutEngine() {
-    delete fGlyphStorage;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,539 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LAYOUTENGINE_H
-#define __LAYOUTENGINE_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: Virtual base class for complex text layout.
- */
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphFilter;
-class LEGlyphStorage;
-
-/**
- * This is a virtual base class used to do complex text layout. The text must all
- * be in a single font, script, and language. An instance of a LayoutEngine can be
- * created by calling the layoutEngineFactory method. Fonts are identified by
- * instances of the LEFontInstance class. Script and language codes are identified
- * by integer codes, which are defined in ScriptAndLanuageTags.h.
- *
- * Note that this class is not public API. It is declared public so that it can be
- * exported from the library that it is a part of.
- *
- * The input to the layout process is an array of characters in logical order,
- * and a starting X, Y position for the text. The output is an array of glyph indices,
- * an array of character indices for the glyphs, and an array of glyph positions.
- * These arrays are protected members of LayoutEngine which can be retreived by a
- * public method. The reset method can be called to free these arrays so that the
- * LayoutEngine can be reused.
- *
- * The layout process is done in three steps. There is a protected virtual method
- * for each step. These methods have a default implementation which only does
- * character to glyph mapping and default positioning using the glyph's advance
- * widths. Subclasses can override these methods for more advanced layout.
- * There is a public method which invokes the steps in the correct order.
- *
- * The steps are:
- *
- * 1) Glyph processing - character to glyph mapping and any other glyph processing
- *    such as ligature substitution and contextual forms.
- *
- * 2) Glyph positioning - position the glyphs based on their advance widths.
- *
- * 3) Glyph position adjustments - adjustment of glyph positions for kerning,
- *    accent placement, etc.
- *
- * NOTE: in all methods below, output parameters are references to pointers so
- * the method can allocate and free the storage as needed. All storage allocated
- * in this way is owned by the object which created it, and will be freed when it
- * is no longer needed, or when the object's destructor is invoked.
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h
- *
- * @stable ICU 2.8
- */
-class U_LAYOUT_API LayoutEngine : public UObject {
-public:
-#ifndef U_HIDE_INTERNAL_API
-    /** @internal Flag to request kerning. Use LE_Kerning_FEATURE_FLAG instead. */
-    static const le_int32 kTypoFlagKern;
-    /** @internal Flag to request ligatures. Use LE_Ligatures_FEATURE_FLAG instead. */
-    static const le_int32 kTypoFlagLiga;
-#endif  /* U_HIDE_INTERNAL_API */
-
-protected:
-    /**
-     * The object which holds the glyph storage
-     *
-     * @internal
-     */
-    LEGlyphStorage *fGlyphStorage;
-
-    /**
-     * The font instance for the text font.
-     *
-     * @see LEFontInstance
-     *
-     * @internal
-     */
-    const LEFontInstance *fFontInstance;
-
-    /**
-     * The script code for the text
-     *
-     * @see ScriptAndLanguageTags.h for script codes.
-     *
-     * @internal
-     */
-    le_int32 fScriptCode;
-
-    /**
-     * The langauge code for the text
-     *
-     * @see ScriptAndLanguageTags.h for language codes.
-     *
-     * @internal
-     */
-    le_int32 fLanguageCode;
-
-    /**
-     * The typographic control flags
-     *
-     * @internal
-     */
-    le_int32 fTypoFlags;
-
-    /**
-     * <code>TRUE</code> if <code>mapCharsToGlyphs</code> should replace ZWJ / ZWNJ with a glyph
-     * with no contours.
-     *
-     * @internal
-     */
-    le_bool fFilterZeroWidth;
-
-#ifndef U_HIDE_INTERNAL_API
-    /**
-     * This constructs an instance for a given font, script and language. Subclass constructors
-     * must call this constructor.
-     *
-     * @param fontInstance - the font for the text
-     * @param scriptCode - the script for the text
-     * @param languageCode - the language for the text
-     * @param typoFlags - the typographic control flags for the text (a bitfield).  Use kTypoFlagKern
-     * if kerning is desired, kTypoFlagLiga if ligature formation is desired.  Others are reserved.
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h
-     *
-     * @internal
-     */
-    LayoutEngine(const LEFontInstance *fontInstance,
-                 le_int32 scriptCode,
-                 le_int32 languageCode,
-                 le_int32 typoFlags,
-                 LEErrorCode &success);
-#endif  /* U_HIDE_INTERNAL_API */
-
-    // Do not enclose the protected default constructor with #ifndef U_HIDE_INTERNAL_API
-    // or else the compiler will create a public default constructor.
-    /**
-     * This overrides the default no argument constructor to make it
-     * difficult for clients to call it. Clients are expected to call
-     * layoutEngineFactory.
-     *
-     * @internal
-     */
-    LayoutEngine();
-
-    /**
-     * This method does any required pre-processing to the input characters. It
-     * may generate output characters that differ from the input charcters due to
-     * insertions, deletions, or reorderings. In such cases, it will also generate an
-     * output character index array reflecting these changes.
-     *
-     * Subclasses must override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     * @param outChars - the output character array, if different from the input
-     * @param glyphStorage - the object that holds the per-glyph storage. The character index array may be set.
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count (input character count if no change)
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does the glyph processing. It converts an array of characters
-     * into an array of glyph indices and character indices. The characters to be
-     * processed are passed in a surrounding context. The context is specified as
-     * a starting address and a maximum character count. An offset and a count are
-     * used to specify the characters to be processed.
-     *
-     * The default implementation of this method only does character to glyph mapping.
-     * Subclasses needing more elaborate glyph processing must override this method.
-     *
-     * Input parameters:
-     * @param chars - the character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the context.
-     * @param rightToLeft - TRUE if the text is in a right to left directional run
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char indices arrays
-     *                       will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does basic glyph positioning. The default implementation positions
-     * the glyphs based on their advance widths. This is sufficient for most uses. It
-     * is not expected that many subclasses will override this method.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph position array will be set.
-     * @param x - the starting X position
-     * @param y - the starting Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success);
-
-    /**
-     * This method does positioning adjustments like accent positioning and
-     * kerning. The default implementation does nothing. Subclasses needing
-     * position adjustments must override this method.
-     *
-     * Note that this method has both characters and glyphs as input so that
-     * it can use the character codes to determine glyph types if that information
-     * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-     * table)
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-     *                       adjusted as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method gets a table from the font associated with
-     * the text. The default implementation gets the table from
-     * the font instance. Subclasses which need to get the tables
-     * some other way must override this method.
-     *
-     * @param tableTag - the four byte table tag.
-     * @param length - length to use
-     *
-     * @return the address of the table.
-     *
-     * @internal
-     */
-    virtual const void *getFontTable(LETag tableTag, size_t &length) const;
-
-    /**
-     * @deprecated
-     */
-    virtual const void *getFontTable(LETag tableTag) const { size_t ignored; return getFontTable(tableTag, ignored); }
-
-    /**
-     * This method does character to glyph mapping. The default implementation
-     * uses the font instance to do the mapping. It will allocate the glyph and
-     * character index arrays if they're not already allocated. If it allocates the
-     * character index array, it will fill it.
-     *
-     * This method supports right to left
-     * text with the ability to store the glyphs in reverse order, and by supporting
-     * character mirroring, which will replace a character which has a left and right
-     * form, such as parens, with the opposite form before mapping it to a glyph index.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to be mapped
-     * @param count - the number of characters to be mapped
-     * @param reverse - if <code>TRUE</code>, the output will be in reverse order
-     * @param mirror - if <code>TRUE</code>, do character mirroring
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char
-     *                       indices arrays will be filled in.
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     *
-     * @internal
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-#ifndef U_HIDE_INTERNAL_API
-    /**
-     * This is a convenience method that forces the advance width of mark
-     * glyphs to be zero, which is required for proper selection and highlighting.
-     *
-     * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
-     * @param markFilter - used to identify mark glyphs
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @see LEGlyphFilter
-     *
-     * @internal
-     */
-    static void adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-
-
-    /**
-     * This is a convenience method that forces the advance width of mark
-     * glyphs to be zero, which is required for proper selection and highlighting.
-     * This method uses the input characters to identify marks. This is required in
-     * cases where the font does not contain enough information to identify them based
-     * on the glyph IDs.
-     *
-     * @param chars - the array of input characters
-     * @param charCount - the number of input characers
-     * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
-     * @param reverse - <code>TRUE</code> if the glyph array has been reordered
-     * @param markFilter - used to identify mark glyphs
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @see LEGlyphFilter
-     *
-     * @internal
-     */
-    static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-#endif  /* U_HIDE_INTERNAL_API */
-
-public:
-    /**
-     * The destructor. It will free any storage allocated for the
-     * glyph, character index and position arrays by calling the reset
-     * method. It is declared virtual so that it will be invoked by the
-     * subclass destructors.
-     *
-     * @stable ICU 2.8
-     */
-    virtual ~LayoutEngine();
-
-    /**
-     * This method will invoke the layout steps in their correct order by calling
-     * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods. It will
-     * compute the glyph, character index and position arrays.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characers are in a right to left directional run
-     * @param x - the initial X position
-     * @param y - the initial Y position
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * Note: The glyph, character index and position array can be accessed
-     * using the getter methods below.
-     *
-     * Note: If you call this method more than once, you must call the reset()
-     * method first to free the glyph, character index and position arrays
-     * allocated by the previous call.
-     *
-     * @stable ICU 2.8
-     */
-    virtual le_int32 layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, float x, float y, LEErrorCode &success);
-
-    /**
-     * This method returns the number of glyphs in the glyph array. Note
-     * that the number of glyphs will be greater than or equal to the number
-     * of characters used to create the LayoutEngine.
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * @stable ICU 2.8
-     */
-    le_int32 getGlyphCount() const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold all
-     * the glyphs.
-     *
-     * @param glyphs - the destiniation glyph array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array,
-     * ORing in extra bits. (This functionality is needed by the JDK,
-     * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-     * the composite font slot number)
-     *
-     * @param glyphs - the destination (32 bit) glyph array
-     * @param extraBits - this value will be ORed with each glyph index
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    virtual void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param indexBase - an offset which will be added to each index
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
-    /**
-     * This method copies the position array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold an
-     * X and Y position for each glyph, plus an extra X and Y for the
-     * advance of the last glyph.
-     *
-     * @param positions - the destiniation position array
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    void getGlyphPositions(float positions[], LEErrorCode &success) const;
-
-    /**
-     * This method returns the X and Y position of the glyph at
-     * the given index.
-     *
-     * Input parameters:
-     * @param glyphIndex - the index of the glyph
-     *
-     * Output parameters:
-     * @param x - the glyph's X position
-     * @param y - the glyph's Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @stable ICU 2.8
-     */
-    void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
-    /**
-     * This method frees the glyph, character index and position arrays
-     * so that the LayoutEngine can be reused to layout a different
-     * characer array. (This method is also called by the destructor)
-     *
-     * @stable ICU 2.8
-     */
-    virtual void reset();
-
-    /**
-     * This method returns a LayoutEngine capable of laying out text
-     * in the given font, script and langauge. Note that the LayoutEngine
-     * returned may be a subclass of LayoutEngine.
-     *
-     * @param fontInstance - the font of the text
-     * @param scriptCode - the script of the text
-     * @param languageCode - the language of the text
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @return a LayoutEngine which can layout text in the given font.
-     *
-     * @see LEFontInstance
-     *
-     * @stable ICU 2.8
-     */
-    static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success);
-
-    /**
-     * Override of existing call that provides flags to control typography.
-     * @stable ICU 3.4
-     */
-    static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LayoutTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LAYOUTTABLES_H
-#define __LAYOUTTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-typedef le_int16 ByteOffset;
-typedef le_int16 WordOffset;
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LigatureSubstProc.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
-#define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
-#define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor)
-
-  LigatureSubstitutionProcessor::LigatureSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-: StateTableProcessor(morphSubtableHeader, success), ligatureSubstitutionHeader(morphSubtableHeader, success)
-{
-    if(LE_FAILURE(success)) return;
-    ligatureActionTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureActionTableOffset);
-    componentTableOffset = SWAPW(ligatureSubstitutionHeader->componentTableOffset);
-    ligatureTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureTableOffset);
-
-    entryTable = LEReferenceToArrayOf<LigatureSubstitutionStateEntry>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-LigatureSubstitutionProcessor::~LigatureSubstitutionProcessor()
-{
-}
-
-void LigatureSubstitutionProcessor::beginStateTable()
-{
-    m = -1;
-}
-
-ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success)
-{
-  const LigatureSubstitutionStateEntry *entry = entryTable.getAlias(index, success);
-  if (LE_FAILURE(success)) {
-      currGlyph++;
-      return 0;
-  }
-
-    ByteOffset newState = SWAPW(entry->newStateOffset);
-    le_uint16 flags = SWAPW(entry->flags);
-
-    if (flags & lsfSetComponent) {
-        if (++m >= nComponents) {
-            m = 0;
-        }
-
-        componentStack[m] = currGlyph;
-    } else if ( m == -1) {
-        // bad font- skip this glyph.
-        currGlyph++;
-        return newState;
-    }
-
-    ByteOffset actionOffset = flags & lsfActionOffsetMask;
-
-    if (actionOffset != 0) {
-      LEReferenceTo<LigatureActionEntry> ap(stHeader, success, actionOffset);
-      if (LE_FAILURE(success)) {
-          currGlyph++;
-          return newState;
-      }
-        LigatureActionEntry action;
-        le_int32 offset, i = 0, j = 0;
-        le_int32 stack[nComponents];
-        le_int16 mm = -1;
-
-        do {
-            le_uint32 componentGlyph = componentStack[m--];
-
-            if (j++ > 0) {
-                ap.addObject(success);
-                if (LE_FAILURE(success)) {
-                    currGlyph++;
-                    return newState;
-                }
-            }
-
-            action = SWAPL(*ap.getAlias());
-
-            if (m < 0) {
-                m = nComponents - 1;
-            }
-
-            offset = action & lafComponentOffsetMask;
-            if (offset != 0) {
-              LEReferenceToArrayOf<le_int16> offsetTable(stHeader, success, 2 * SignExtend(offset, lafComponentOffsetMask), LE_UNBOUNDED_ARRAY);
-
-              if(LE_FAILURE(success)) {
-                  currGlyph++;
-                  LE_DEBUG_BAD_FONT("off end of ligature substitution header");
-                  return newState; // get out! bad font
-              }
-              if(componentGlyph >= glyphStorage.getGlyphCount()) {
-                LE_DEBUG_BAD_FONT("preposterous componentGlyph");
-                currGlyph++;
-                return newState; // get out! bad font
-              }
-              i += SWAPW(offsetTable.getObject(LE_GET_GLYPH(glyphStorage[componentGlyph]), success));
-              if (LE_FAILURE(success)) {
-                  currGlyph++;
-                  return newState;
-              }
-
-                if (action & (lafLast | lafStore))  {
-                  LEReferenceTo<TTGlyphID> ligatureOffset(stHeader, success, i);
-                  if (LE_FAILURE(success)) {
-                      currGlyph++;
-                      return newState;
-                  }
-                  TTGlyphID ligatureGlyph = SWAPW(*ligatureOffset.getAlias());
-
-                  glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph);
-                  if(mm==nComponents) {
-                    LE_DEBUG_BAD_FONT("exceeded nComponents");
-                    mm--; // don't overrun the stack.
-                  }
-                  stack[++mm] = componentGlyph;
-                  i = 0;
-                } else {
-                  glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF);
-                }
-            }
-#if LE_ASSERT_BAD_FONT
-            if(m<0) {
-              LE_DEBUG_BAD_FONT("m<0")
-            }
-#endif
-        } while (!(action & lafLast)  && (m>=0) ); // stop if last bit is set, or if run out of items
-
-        while (mm >= 0) {
-          if (++m >= nComponents) {
-            m = 0;
-          }
-
-          componentStack[m] = stack[mm--];
-        }
-    }
-
-    if (!(flags & lsfDontAdvance)) {
-        // should handle reverse too!
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void LigatureSubstitutionProcessor::endStateTable()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONPROCESSOR_H
-#define __LIGATURESUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LigatureSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-#define nComponents 16
-
-class LigatureSubstitutionProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    LigatureSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~LigatureSubstitutionProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    LigatureSubstitutionProcessor();
-
-protected:
-    ByteOffset ligatureActionTableOffset;
-    ByteOffset componentTableOffset;
-    ByteOffset ligatureTableOffset;
-
-    LEReferenceToArrayOf<LigatureSubstitutionStateEntry> entryTable;
-
-    le_int32 componentStack[nComponents];
-    le_int16 m;
-
-    LEReferenceTo<LigatureSubstitutionHeader> ligatureSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp and Others. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LigatureSubstProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
-#define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
-#define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor2)
-
-LigatureSubstitutionProcessor2::LigatureSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success),
-  ligActionOffset(0),
-  ligatureSubstitutionHeader(morphSubtableHeader, success), componentOffset(0), ligatureOffset(0), entryTable()
-{
-    if (LE_FAILURE(success)) return;
-
-    ligActionOffset = SWAPL(ligatureSubstitutionHeader->ligActionOffset);
-    componentOffset = SWAPL(ligatureSubstitutionHeader->componentOffset);
-    ligatureOffset = SWAPL(ligatureSubstitutionHeader->ligatureOffset);
-
-    entryTable = LEReferenceToArrayOf<LigatureSubstitutionStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-LigatureSubstitutionProcessor2::~LigatureSubstitutionProcessor2()
-{
-}
-
-void LigatureSubstitutionProcessor2::beginStateTable()
-{
-    m = -1;
-}
-
-le_uint16 LigatureSubstitutionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success)
-{
-    const LigatureSubstitutionStateEntry2 *entry = entryTable.getAlias(index, success);
-    if(LE_FAILURE(success)) return 0;
-
-    le_uint16 nextStateIndex = SWAPW(entry->nextStateIndex);
-    le_uint16 flags = SWAPW(entry->entryFlags);
-    le_uint16 ligActionIndex = SWAPW(entry->ligActionIndex);
-
-    if (flags & lsfSetComponent) {
-        if (++m >= nComponents) {
-            m = 0;
-        }
-        componentStack[m] = currGlyph;
-    } else if ( m == -1) {
-        // bad font- skip this glyph.
-        //LE_DEBUG_BAD_FONT("m==-1 (componentCount went negative)")
-        currGlyph+= dir;
-        return nextStateIndex;
-    }
-
-    ByteOffset actionOffset = flags & lsfPerformAction;
-
-    if (actionOffset != 0) {
-        LEReferenceTo<LigatureActionEntry> ap(stHeader, success, ligActionOffset); // byte offset
-        if (LE_FAILURE(success)) {
-            currGlyph+= dir;
-            return nextStateIndex;
-        }
-        ap.addObject(ligActionIndex, success);
-        LEReferenceToArrayOf<TTGlyphID> ligatureTable(stHeader, success, ligatureOffset, LE_UNBOUNDED_ARRAY);
-        LigatureActionEntry action;
-        le_int32 offset, i = 0, j = 0;
-        le_int32 stack[nComponents];
-        le_int16 mm = -1;
-
-        LEReferenceToArrayOf<le_uint16> componentTable(stHeader, success, componentOffset, LE_UNBOUNDED_ARRAY);
-        if(LE_FAILURE(success)) {
-            currGlyph+= dir;
-            return nextStateIndex; // get out! bad font
-        }
-
-        do {
-            le_uint32 componentGlyph = componentStack[m--]; // pop off
-
-            if (j++ > 0) {
-                ap.addObject(success);
-            }
-            if (LE_FAILURE(success)) {
-                currGlyph+= dir;
-                return nextStateIndex;
-            }
-
-            action = SWAPL(*ap.getAlias());
-
-            if (m < 0) {
-                m = nComponents - 1;
-            }
-
-            offset = action & lafComponentOffsetMask;
-            if (offset != 0) {
-                if(componentGlyph >= glyphStorage.getGlyphCount()) {
-                  LE_DEBUG_BAD_FONT("preposterous componentGlyph");
-                  currGlyph+= dir;
-                  return nextStateIndex; // get out! bad font
-                }
-                i += SWAPW(componentTable(LE_GET_GLYPH(glyphStorage[componentGlyph]) + (SignExtend(offset, lafComponentOffsetMask)),success));
-                if (LE_FAILURE(success)) {
-                    currGlyph+= dir;
-                    return nextStateIndex;
-                }
-
-                if (action & (lafLast | lafStore))  {
-                  TTGlyphID ligatureGlyph = SWAPW(ligatureTable(i,success));
-                  if (LE_FAILURE(success)) {
-                      currGlyph+= dir;
-                      return nextStateIndex;
-                  }
-                    glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph);
-                    if(mm==nComponents) {
-                      LE_DEBUG_BAD_FONT("exceeded nComponents");
-                      mm--; // don't overrun the stack.
-                    }
-                    stack[++mm] = componentGlyph;
-                    i = 0;
-                } else {
-                    glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF);
-                }
-            }
-#if LE_ASSERT_BAD_FONT
-            if(m<0) {
-              LE_DEBUG_BAD_FONT("m<0")
-            }
-#endif
-        } while (LE_SUCCESS(success) && !(action & lafLast) && (m>=0) ); // stop if last bit is set, or if run out of items
-
-        while (mm >= 0) {
-            if (++m >= nComponents) {
-                m = 0;
-            }
-
-            componentStack[m] = stack[mm--];
-        }
-    }
-
-    if (!(flags & lsfDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return nextStateIndex;
-}
-
-void LigatureSubstitutionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstProc2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONPROCESSOR2_H
-#define __LIGATURESUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LigatureSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-#define nComponents 16
-
-class LigatureSubstitutionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-                                        EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    LigatureSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~LigatureSubstitutionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    LigatureSubstitutionProcessor2();
-
-protected:
-    le_uint32 ligActionOffset;
-    le_uint32 componentOffset;
-    le_uint32 ligatureOffset;
-
-    LEReferenceToArrayOf<LigatureSubstitutionStateEntry2> entryTable;
-
-    le_int32 componentStack[nComponents];
-    le_int16 m;
-
-    const LEReferenceTo<LigatureSubstitutionHeader2> ligatureSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LigatureSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 LigatureSubstitutionSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (LE_FAILURE(success)) {
-      return 0;
-    }
-
-    LEReferenceToArrayOf<Offset> ligSetTableOffsetArrayRef(base, success, ligSetTableOffsetArray, SWAPW(ligSetCount));
-
-    if (coverageIndex >= 0 && LE_SUCCESS(success) && (le_uint32)coverageIndex < ligSetTableOffsetArrayRef.getCount()) {
-        Offset ligSetTableOffset = SWAPW(ligSetTableOffsetArray[coverageIndex]);
-        LEReferenceTo<LigatureSetTable>   ligSetTable(base, success, ligSetTableOffset);
-
-        if( LE_FAILURE(success) ) { return 0; }
-        le_uint16 ligCount = SWAPW(ligSetTable->ligatureCount);
-
-        LEReferenceToArrayOf<Offset> ligatureTableOffsetArray(base, success, ligSetTable->ligatureTableOffsetArray, ligCount);
-        for (le_uint16 lig = 0; LE_SUCCESS(success) && lig < ligCount; lig += 1) {
-            Offset ligTableOffset = SWAPW(ligSetTable->ligatureTableOffsetArray[lig]);
-            LEReferenceTo<LigatureTable>   ligTable(ligSetTable, success, ligTableOffset);
-            if(LE_FAILURE(success)) { return 0; }
-            le_uint16 compCount = SWAPW(ligTable->compCount) - 1;
-            LEReferenceToArrayOf<TTGlyphID>
-                componentArrayRef(base, success, ligTable->componentArray, compCount);
-            if (LE_FAILURE(success)) { return 0; }
-            le_int32 startPosition = glyphIterator->getCurrStreamPosition();
-            TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
-            le_uint16 comp;
-
-            for (comp = 0; comp < compCount; comp += 1) {
-                if (! glyphIterator->next()) {
-                    break;
-                }
-
-                if (LE_GET_GLYPH(glyphIterator->getCurrGlyphID()) != SWAPW(ligTable->componentArray[comp])) {
-                    break;
-                }
-            }
-
-            if (comp == compCount && (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, ligGlyph), success))) {
-                GlyphIterator tempIterator(*glyphIterator);
-                TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF;
-
-                while (comp > 0) {
-                    tempIterator.setCurrGlyphID(deletedGlyph);
-                    tempIterator.prev();
-
-                    comp -= 1;
-                }
-
-                tempIterator.setCurrGlyphID(ligGlyph);
-
-                return compCount + 1;
-            }
-
-            glyphIterator->setCurrStreamPosition(startPosition);
-        }
-
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONSUBTABLES_H
-#define __LIGATURESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct LigatureSetTable
-{
-    le_uint16 ligatureCount;
-    Offset    ligatureTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureSetTable, ligatureTableOffsetArray)
-
-struct LigatureTable
-{
-    TTGlyphID ligGlyph;
-    le_uint16 compCount;
-    TTGlyphID componentArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureTable, componentArray)
-
-struct LigatureSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 ligSetCount;
-    Offset    ligSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(LigatureSubstitutionSubtable, ligSetTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LigatureSubstitution.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTION_H
-#define __LIGATURESUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct LigatureSubstitutionHeader : MorphStateTableHeader
-{
-    ByteOffset ligatureActionTableOffset;
-    ByteOffset componentTableOffset;
-    ByteOffset ligatureTableOffset;
-};
-
-struct LigatureSubstitutionHeader2 : MorphStateTableHeader2
-{
-    le_uint32 ligActionOffset;
-    le_uint32 componentOffset;
-    le_uint32 ligatureOffset;
-};
-
-enum LigatureSubstitutionFlags
-{
-    lsfSetComponent     = 0x8000,
-    lsfDontAdvance      = 0x4000,
-    lsfActionOffsetMask = 0x3FFF, // N/A in morx
-    lsfPerformAction    = 0x2000
-};
-
-struct LigatureSubstitutionStateEntry : StateEntry
-{
-};
-
-struct LigatureSubstitutionStateEntry2
-{
-    le_uint16 nextStateIndex;
-    le_uint16 entryFlags;
-    le_uint16 ligActionIndex;
-};
-
-typedef le_uint32 LigatureActionEntry;
-
-enum LigatureActionFlags
-{
-    lafLast                 = 0x80000000,
-    lafStore                = 0x40000000,
-    lafComponentOffsetMask  = 0x3FFFFFFF
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,370 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeUtilities.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 LookupProcessor::applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator,
-                                         const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 lookupType = SWAPW(lookupTable->lookupType);
-    le_uint16 subtableCount = SWAPW(lookupTable->subTableCount);
-    le_int32 startPosition = glyphIterator->getCurrStreamPosition();
-    le_uint32 delta;
-
-    for (le_uint16 subtable = 0; subtable < subtableCount; subtable += 1) {
-      LEReferenceTo<LookupSubtable> lookupSubtable = lookupTable->getLookupSubtable(lookupTable, subtable, success);
-
-        delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance, success);
-        if (delta > 0 && LE_FAILURE(success)) {
-#if LE_TRACE
-          _LETRACE("Posn #%d, type %X, applied subtable #%d/%d - %s\n", startPosition, lookupType, subtable, subtableCount, u_errorName((UErrorCode)success));
-#endif
-          return 1;
-        }
-
-        glyphIterator->setCurrStreamPosition(startPosition);
-    }
-
-    return 1;
-}
-
-le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                                  le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader,
-                              const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (lookupSelectArray == NULL) {
-        return glyphCount;
-    }
-
-    GlyphIterator glyphIterator(glyphStorage, glyphPositionAdjustments,
-                                rightToLeft, 0, 0, glyphDefinitionTableHeader, success);
-    le_int32 newGlyphCount = glyphCount;
-
-    for (le_uint16 order = 0; order < lookupOrderCount && LE_SUCCESS(success); order += 1) {
-        le_uint16 lookup = lookupOrderArray[order];
-        FeatureMask selectMask = lookupSelectArray[lookup];
-
-        if (selectMask != 0) {
-          _LETRACE("Processing order#%d/%d", order, lookupOrderCount);
-          const LEReferenceTo<LookupTable> lookupTable = lookupListTable->getLookupTable(lookupListTable, lookup, success);
-          if (!lookupTable.isValid() ||LE_FAILURE(success) ) {
-                continue;
-            }
-            le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
-
-            glyphIterator.reset(lookupFlags, selectMask);
-
-            while (glyphIterator.findFeatureTag()) {
-                applyLookupTable(lookupTable, &glyphIterator, fontInstance, success);
-                if (LE_FAILURE(success)) {
-#if LE_TRACE
-                    _LETRACE("Failure for lookup 0x%x - %s\n", lookup, u_errorName((UErrorCode)success));
-#endif
-                    return 0;
-                }
-            }
-
-            newGlyphCount = glyphIterator.applyInsertions();
-        }
-    }
-
-    return newGlyphCount;
-}
-
-le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator,
-                                          const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    const LEReferenceTo<LookupTable> lookupTable = lookupListTable->getLookupTable(lookupListTable, lookupTableIndex, success);
-    if (!lookupTable.isValid()) {
-        success = LE_INTERNAL_ERROR;
-        return 0;
-    }
-    le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
-    GlyphIterator tempIterator(*glyphIterator, lookupFlags);
-    le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance, success);
-
-    return delta;
-}
-
-le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success)
-{
-  le_uint16 lookupCount = featureTable.isValid()? SWAPW(featureTable->lookupCount) : 0;
-    le_uint32  store = (le_uint32)order;
-
-    LEReferenceToArrayOf<le_uint16> lookupListIndexArray(featureTable, success, featureTable->lookupListIndexArray, lookupCount);
-
-    for (le_uint16 lookup = 0; LE_SUCCESS(success) && lookup < lookupCount; lookup += 1) {
-      le_uint16 lookupListIndex = SWAPW(lookupListIndexArray.getObject(lookup,success));
-      if (lookupListIndex >= lookupSelectCount) {
-        continue;
-      }
-      if (store >= lookupOrderCount) {
-        continue;
-      }
-
-      lookupSelectArray[lookupListIndex] |= featureMask;
-      lookupOrderArray[store++] = lookupListIndex;
-    }
-
-    return store - order;
-}
-
-LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
-        Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-        LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures,
-        LEErrorCode& success)
-    : lookupListTable(), featureListTable(), lookupSelectArray(NULL), lookupSelectCount(0),
-      lookupOrderArray(NULL), lookupOrderCount(0), fReference(baseAddress)
-{
-  LEReferenceTo<ScriptListTable> scriptListTable;
-  LEReferenceTo<LangSysTable> langSysTable;
-    le_uint16 featureCount = 0;
-    le_uint16 lookupListCount = 0;
-    le_uint16 requiredFeatureIndex = 0xFFFF;
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (scriptListOffset != 0) {
-      scriptListTable = LEReferenceTo<ScriptListTable>(baseAddress, success, scriptListOffset);
-      langSysTable = scriptListTable->findLanguage(scriptListTable, scriptTag, languageTag, success);
-
-      if (langSysTable.isValid() && LE_SUCCESS(success)) {
-        featureCount = SWAPW(langSysTable->featureCount);
-      }
-    }
-
-    if (featureListOffset != 0) {
-      featureListTable = LEReferenceTo<FeatureListTable>(baseAddress, success, featureListOffset);
-    }
-
-    if (lookupListOffset != 0) {
-      lookupListTable = LEReferenceTo<LookupListTable>(baseAddress,success, lookupListOffset);
-      if(LE_SUCCESS(success) && lookupListTable.isValid()) {
-        lookupListCount = SWAPW(lookupListTable->lookupCount);
-      }
-    }
-
-    if (langSysTable.isEmpty() || featureListTable.isEmpty() || lookupListTable.isEmpty() ||
-        featureCount == 0 || lookupListCount == 0) {
-        return;
-    }
-
-    if(langSysTable.isValid()) {
-      requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex);
-    }
-
-    lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount);
-    if (lookupSelectArray == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-
-    for (int i = 0; i < lookupListCount; i += 1) {
-        lookupSelectArray[i] = 0;
-    }
-
-    lookupSelectCount = lookupListCount;
-
-    le_int32 count, order = 0;
-    le_uint32 featureReferences = 0;
-    LEReferenceTo<FeatureTable> featureTable;
-    LETag featureTag;
-
-    LEReferenceTo<FeatureTable> requiredFeatureTable;
-    LETag requiredFeatureTag = 0x00000000U;
-
-    // Count the total number of lookups referenced by all features. This will
-    // be the maximum number of entries in the lookupOrderArray. We can't use
-    // lookupListCount because some lookups might be referenced by more than
-    // one feature.
-    if(featureListTable.isValid() && LE_SUCCESS(success)) {
-      LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-
-      for (le_uint32 feature = 0; LE_SUCCESS(success)&&(feature < featureCount); feature += 1) {
-        le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature, success));
-
-        featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex,  &featureTag, success);
-        if (!featureTable.isValid() || LE_FAILURE(success)) {
-          continue;
-        }
-        featureReferences += SWAPW(featureTable->lookupCount);
-      }
-    }
-
-    if (!featureTable.isValid() || LE_FAILURE(success)) {
-        success = LE_INTERNAL_ERROR;
-        return;
-    }
-
-    if (requiredFeatureIndex != 0xFFFF) {
-      requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success);
-      if (LE_FAILURE(success)) return;
-      featureReferences += SWAPW(requiredFeatureTable->lookupCount);
-    }
-
-    lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
-    if (lookupOrderArray == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    lookupOrderCount = featureReferences;
-
-    for (le_int32 f = 0; f < featureMapCount; f += 1) {
-        FeatureMap fm = featureMap[f];
-        count = 0;
-
-        // If this is the required feature, add its lookups
-        if (requiredFeatureTag == fm.tag) {
-          count += selectLookups(requiredFeatureTable, fm.mask, order, success);
-        }
-
-        if (orderFeatures) {
-            // If we added lookups from the required feature, sort them
-            if (count > 1) {
-                OpenTypeUtilities::sort(lookupOrderArray, order);
-            }
-
-            for (le_uint16 feature = 0; feature < featureCount; feature += 1) {
-              LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-              if (LE_FAILURE(success)) { continue; }
-              le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature,success));
-
-                // don't add the required feature to the list more than once...
-                // TODO: Do we need this check? (Spec. says required feature won't be in feature list...)
-                if (featureIndex == requiredFeatureIndex) {
-                    continue;
-                }
-
-                featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex, &featureTag, success);
-                if (LE_FAILURE(success)) continue;
-                if (featureTag == fm.tag) {
-                  count += selectLookups(featureTable, fm.mask, order + count, success);
-                }
-            }
-
-            if (count > 1) {
-                OpenTypeUtilities::sort(&lookupOrderArray[order], count);
-            }
-
-            order += count;
-        } else if(langSysTable.isValid()) {
-          LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-          for (le_uint16 feature = 0; LE_SUCCESS(success)&& (feature < featureCount); feature += 1) {
-            le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature,success));
-
-                // don't add the required feature to the list more than once...
-                // NOTE: This check is commented out because the spec. says that
-                // the required feature won't be in the feature list, and because
-                // any duplicate entries will be removed below.
-#if 0
-                if (featureIndex == requiredFeatureIndex) {
-                    continue;
-                }
-#endif
-
-                featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex, &featureTag, success);
-                if (LE_FAILURE(success)) continue;
-                if (featureTag == fm.tag) {
-                  order += selectLookups(featureTable, fm.mask, order, success);
-                }
-            }
-        }
-    }
-
-    if (!orderFeatures && (order > 1)) {
-        OpenTypeUtilities::sort(lookupOrderArray, order);
-
-        // If there's no specified feature order,
-        // we will apply the lookups in the order
-        // that they're in the font. If a particular
-        // lookup may be referenced by more than one feature,
-        // it will apprear in the lookupOrderArray more than
-        // once, so remove any duplicate entries in the sorted array.
-        le_int32 out = 1;
-
-        for (le_int32 in = 1; in < order; in += 1) {
-            if (lookupOrderArray[out - 1] != lookupOrderArray[in]) {
-                if (out != in) {
-                    lookupOrderArray[out] = lookupOrderArray[in];
-                }
-
-                out += 1;
-            }
-        }
-
-        order = out;
-    }
-
-    lookupOrderCount = order;
-}
-
-LookupProcessor::LookupProcessor()
-{
-        lookupOrderArray = NULL;
-        lookupSelectArray = NULL;
-}
-
-LookupProcessor::~LookupProcessor()
-{
-    LE_DELETE_ARRAY(lookupOrderArray);
-    LE_DELETE_ARRAY(lookupSelectArray);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LookupProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPPROCESSOR_H
-#define __LOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "LETableReference.h"
-//#include "Lookups.h"
-//#include "Features.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEFontInstance;
-class  LEGlyphStorage;
-class  GlyphIterator;
-class  GlyphPositionAdjustments;
-struct FeatureTable;
-struct FeatureListTable;
-struct GlyphDefinitionTableHeader;
-struct LookupSubtable;
-struct LookupTable;
-
-class LookupProcessor : public UMemory {
-public:
-    le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                 le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    le_uint32 applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 subtableType,
-        GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
-
-    virtual ~LookupProcessor();
-
-    const LETableReference &getReference() const { return fReference; }
-
-protected:
-    LookupProcessor(const LETableReference &baseAddress,
-        Offset scriptListOffset,
-        Offset featureListOffset,
-        Offset lookupListOffset,
-        LETag scriptTag,
-        LETag languageTag,
-        const FeatureMap *featureMap,
-        le_int32 featureMapCount,
-        le_bool orderFeatures,
-        LEErrorCode& success);
-
-   LookupProcessor();
-
-    le_int32 selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success);
-
-    LEReferenceTo<LookupListTable>   lookupListTable;
-    LEReferenceTo<FeatureListTable>  featureListTable;
-
-    FeatureMask            *lookupSelectArray;
-    le_uint32              lookupSelectCount;
-
-    le_uint16               *lookupOrderArray;
-    le_uint32               lookupOrderCount;
-
-    LETableReference        fReference;
-
-private:
-
-    LookupProcessor(const LookupProcessor &other); // forbid copying of this class
-    LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/LookupTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LookupTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    These are the rolled-up versions of the uniform binary search.
-    Someday, if we need more performance, we can un-roll them.
-
-    Note: I put these in the base class, so they only have to
-    be written once. Since the base class doesn't define the
-    segment table, these routines assume that it's right after
-    the binary search header.
-
-    Another way to do this is to put each of these routines in one
-    of the derived classes, and implement it in the others by casting
-    the "this" pointer to the type that has the implementation.
-*/
-const LookupSegment *BinarySearchLookupTable::lookupSegment(const LETableReference &base, const LookupSegment *segments, LEGlyphID glyph, LEErrorCode &success) const
-{
-
-    le_int16  unity = SWAPW(unitSize);
-    le_int16  probe = SWAPW(searchRange);
-    le_int16  extra = SWAPW(rangeShift);
-    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
-    LEReferenceTo<LookupSegment> entry(base, success, segments);
-    LEReferenceTo<LookupSegment> trial(entry, success, extra);
-
-    if(LE_FAILURE(success)) return NULL;
-
-    if (SWAPW(trial->lastGlyph) <= ttGlyph) {
-        entry = trial;
-    }
-
-    while (probe > unity && LE_SUCCESS(success)) {
-        probe >>= 1;
-        trial = entry; // copy
-        trial.addOffset(probe, success);
-
-        if (SWAPW(trial->lastGlyph) <= ttGlyph) {
-            entry = trial;
-        }
-    }
-
-    if (SWAPW(entry->firstGlyph) <= ttGlyph) {
-      return entry.getAlias();
-    }
-
-    return NULL;
-}
-
-const LookupSingle *BinarySearchLookupTable::lookupSingle(const LETableReference &base, const LookupSingle *entries, LEGlyphID glyph, LEErrorCode &success) const
-{
-    le_int16  unity = SWAPW(unitSize);
-    le_int16  probe = SWAPW(searchRange);
-    le_int16  extra = SWAPW(rangeShift);
-    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
-    LEReferenceTo<LookupSingle> entry(base, success, entries);
-    LEReferenceTo<LookupSingle> trial(entry, success, extra);
-
-    if (!LE_SUCCESS(success)) {
-        return NULL;
-    }
-
-    if (SWAPW(trial->glyph) <= ttGlyph) {
-        entry = trial;
-    }
-
-    while (probe > unity && LE_SUCCESS(success)) {
-        probe >>= 1;
-        trial = entry;
-        trial.addOffset(probe, success);
-
-        if (SWAPW(trial->glyph) <= ttGlyph) {
-            entry = trial;
-        }
-    }
-
-    if (SWAPW(entry->glyph) == ttGlyph) {
-      return entry.getAlias();
-    }
-
-    return NULL;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/LookupTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPTABLES_H
-#define __LOOKUPTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-enum LookupTableFormat
-{
-    ltfSimpleArray      = 0,
-    ltfSegmentSingle    = 2,
-    ltfSegmentArray     = 4,
-    ltfSingleTable      = 6,
-    ltfTrimmedArray     = 8
-};
-
-typedef le_int16 LookupValue;
-
-struct LookupTable
-{
-    le_int16 format;
-};
-
-struct LookupSegment
-{
-    TTGlyphID   lastGlyph;
-    TTGlyphID   firstGlyph;
-    LookupValue value;
-};
-
-struct LookupSingle
-{
-    TTGlyphID   glyph;
-    LookupValue value;
-};
-
-struct BinarySearchLookupTable : LookupTable
-{
-    le_int16 unitSize;
-    le_int16 nUnits;
-    le_int16 searchRange;
-    le_int16 entrySelector;
-    le_int16 rangeShift;
-
-    const LookupSegment *lookupSegment(const LETableReference &base, const LookupSegment *segments, LEGlyphID glyph, LEErrorCode &success) const;
-
-    const LookupSingle *lookupSingle(const LETableReference &base, const LookupSingle *entries, LEGlyphID glyph, LEErrorCode &success) const;
-};
-
-struct SimpleArrayLookupTable : LookupTable
-{
-    LookupValue valueArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SimpleArrayLookupTable, valueArray)
-
-struct SegmentSingleLookupTable : BinarySearchLookupTable
-{
-    LookupSegment segments[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SegmentSingleLookupTable, segments)
-
-struct SegmentArrayLookupTable : BinarySearchLookupTable
-{
-    LookupSegment segments[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SegmentArrayLookupTable, segments)
-
-struct SingleTableLookupTable : BinarySearchLookupTable
-{
-    LookupSingle entries[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SingleTableLookupTable, entries)
-
-struct TrimmedArrayLookupTable : LookupTable
-{
-    TTGlyphID   firstGlyph;
-    TTGlyphID   glyphCount;
-    LookupValue valueArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(TrimmedArrayLookupTable, valueArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/Lookups.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const LEReferenceTo<LookupTable> LookupListTable::getLookupTable(const LEReferenceTo<LookupListTable> &base, le_uint16 lookupTableIndex, LEErrorCode &success) const
-{
-  LEReferenceToArrayOf<Offset> lookupTableOffsetArrayRef(base, success, (const Offset*)&lookupTableOffsetArray, SWAPW(lookupCount));
-
-  if(LE_FAILURE(success) || lookupTableIndex>lookupTableOffsetArrayRef.getCount()) {
-    success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-    return LEReferenceTo<LookupTable>();
-  } else {
-    return LEReferenceTo<LookupTable>(base, success, SWAPW(lookupTableOffsetArrayRef.getObject(lookupTableIndex, success)));
-  }
-}
-
-const LEReferenceTo<LookupSubtable> LookupTable::getLookupSubtable(const LEReferenceTo<LookupTable> &base, le_uint16 subtableIndex, LEErrorCode &success) const
-{
-  LEReferenceToArrayOf<Offset> subTableOffsetArrayRef(base, success, (const Offset*)&subTableOffsetArray, SWAPW(subTableCount));
-
-  if(LE_FAILURE(success) || subtableIndex>subTableOffsetArrayRef.getCount()) {
-    success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-    return LEReferenceTo<LookupSubtable>();
-  } else {
-    return LEReferenceTo<LookupSubtable>(base, success, SWAPW(subTableOffsetArrayRef.getObject(subtableIndex, success)));
-  }
-}
-
-le_int32 LookupSubtable::getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  const LEReferenceTo<CoverageTable> coverageTable(base, success, SWAPW(tableOffset));
-
-  if(LE_FAILURE(success)) return 0;
-
-  return coverageTable->getGlyphCoverage(coverageTable, glyphID, success);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/Lookups.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPS_H
-#define __LOOKUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-enum LookupFlags
-{
-    lfBaselineIsLogicalEnd  = 0x0001,  // The MS spec. calls this flag "RightToLeft" but this name is more accurate
-    lfIgnoreBaseGlyphs      = 0x0002,
-    lfIgnoreLigatures       = 0x0004,
-    lfIgnoreMarks           = 0x0008,
-    lfReservedMask          = 0x00F0,
-    lfMarkAttachTypeMask    = 0xFF00,
-    lfMarkAttachTypeShift   = 8
-};
-
-struct LookupSubtable
-{
-    le_uint16 subtableFormat;
-    Offset    coverageTableOffset;
-
-  inline le_int32  getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  le_int32  getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  // convenience
-  inline le_int32  getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  inline le_int32  getGlyphCoverage(const LETableReference &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const;
-};
-
-struct LookupTable
-{
-    le_uint16       lookupType;
-    le_uint16       lookupFlags;
-    le_uint16       subTableCount;
-    Offset          subTableOffsetArray[ANY_NUMBER];
-
-  const LEReferenceTo<LookupSubtable> getLookupSubtable(const LEReferenceTo<LookupTable> &base, le_uint16 subtableIndex, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(LookupTable, subTableOffsetArray)
-
-struct LookupListTable
-{
-    le_uint16   lookupCount;
-    Offset      lookupTableOffsetArray[ANY_NUMBER];
-
-  const LEReferenceTo<LookupTable> getLookupTable(const LEReferenceTo<LookupListTable> &base, le_uint16 lookupTableIndex, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(LookupListTable, lookupTableOffsetArray)
-
-inline le_int32 LookupSubtable::getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  return getGlyphCoverage(base, coverageTableOffset, glyphID, success);
-}
-
-inline le_int32  LookupSubtable::getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const {
-  LEReferenceTo<LookupSubtable> thisRef(base, success, this);
-  return getGlyphCoverage(thisRef, glyphID, success);
-}
-
-inline le_int32  LookupSubtable::getGlyphCoverage(const LETableReference &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const {
-  LEReferenceTo<LookupSubtable> thisRef(base, success, this);
-  return getGlyphCoverage(thisRef, tableOffset, glyphID, success);
-}
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/MPreFixups.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2002-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphStorage.h"
-#include "MPreFixups.h"
-
-U_NAMESPACE_BEGIN
-
-struct FixupData
-{
-    le_int32 fBaseIndex;
-    le_int32 fMPreIndex;
-};
-
-MPreFixups::MPreFixups(le_int32 charCount)
-    : fFixupData(NULL), fFixupCount(0)
-{
-    fFixupData = LE_NEW_ARRAY(FixupData, charCount);
-}
-
-MPreFixups::~MPreFixups()
-{
-    LE_DELETE_ARRAY(fFixupData);
-    fFixupData = NULL;
-}
-
-void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex)
-{
-    // NOTE: don't add the fixup data if the mpre is right
-    // before the base consonant glyph.
-    if (baseIndex - mpreIndex > 1) {
-        fFixupData[fFixupCount].fBaseIndex = baseIndex;
-        fFixupData[fFixupCount].fMPreIndex = mpreIndex;
-
-        fFixupCount += 1;
-    }
-}
-
-void MPreFixups::apply(LEGlyphStorage &glyphStorage, LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
-        le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
-        le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
-        le_int32 mpreLimit = mpreIndex + 1;
-
-        while (glyphStorage[baseIndex] == 0xFFFF || glyphStorage[baseIndex] == 0xFFFE) {
-            baseIndex -= 1;
-        }
-
-        while (glyphStorage[mpreLimit] == 0xFFFF || glyphStorage[mpreLimit] == 0xFFFE) {
-            mpreLimit += 1;
-        }
-
-        if (mpreLimit == baseIndex) {
-            continue;
-        }
-
-        LEErrorCode success = LE_NO_ERROR;
-        le_int32   mpreCount = mpreLimit - mpreIndex;
-        le_int32   moveCount = baseIndex - mpreLimit;
-        le_int32   mpreDest  = baseIndex - mpreCount;
-        LEGlyphID *mpreSave  = LE_NEW_ARRAY(LEGlyphID, mpreCount);
-        le_int32  *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
-
-        if (mpreSave == NULL || indexSave == NULL) {
-            LE_DELETE_ARRAY(mpreSave);
-            LE_DELETE_ARRAY(indexSave);
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-        le_int32   i;
-
-        for (i = 0; i < mpreCount; i += 1) {
-            mpreSave[i]  = glyphStorage[mpreIndex + i];
-            indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success); //charIndices[mpreIndex + i];
-        }
-
-        for (i = 0; i < moveCount; i += 1) {
-            LEGlyphID glyph = glyphStorage[mpreLimit + i];
-            le_int32 charIndex = glyphStorage.getCharIndex(mpreLimit + i, success);
-
-            glyphStorage[mpreIndex + i] = glyph;
-            glyphStorage.setCharIndex(mpreIndex + i, charIndex, success);
-        }
-
-        for (i = 0; i < mpreCount; i += 1) {
-            glyphStorage[mpreDest + i] = mpreSave[i];
-            glyphStorage.setCharIndex(mpreDest, indexSave[i], success);
-        }
-
-        LE_DELETE_ARRAY(indexSave);
-        LE_DELETE_ARRAY(mpreSave);
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MPreFixups.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-#ifndef __MPREFIXUPS_H
-#define __MPREFIXUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Might want to make this a private member...
-struct FixupData;
-
-class MPreFixups : public UMemory
-{
-public:
-    MPreFixups(le_int32 charCount);
-   ~MPreFixups();
-
-    void add(le_int32 baseIndex, le_int32 mpreIndex);
-
-    void apply(LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
-private:
-    FixupData *fFixupData;
-    le_int32   fFixupCount;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkArrays.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 MarkArray::getMarkClass(const LETableReference &base, LEGlyphID glyphID,
-                                 le_int32 coverageIndex, const LEFontInstance *fontInstance,
-                              LEPoint &anchor, LEErrorCode &success) const
-{
-    le_int32 markClass = -1;
-
-    if ( coverageIndex >= 0 && LE_SUCCESS(success) ) {
-        le_uint16 mCount = SWAPW(markCount);
-        if (coverageIndex < mCount) {
-          LEReferenceToArrayOf<MarkRecord> markRecordArrayRef(base, success, markRecordArray, mCount);
-            if(LE_FAILURE(success)) {
-              return markClass;
-            }
-            const MarkRecord *markRecord = &markRecordArray[coverageIndex];
-            Offset anchorTableOffset = SWAPW(markRecord->markAnchorTableOffset);
-            LEReferenceTo<AnchorTable> anchorTable(base, success, anchorTableOffset);
-
-            if(LE_FAILURE(success)) {
-              return markClass;
-            }
-
-            anchorTable->getAnchor(anchorTable, glyphID, fontInstance, anchor, success);
-            markClass = SWAPW(markRecord->markClass);
-        }
-
-        // XXXX If we get here, the table is mal-formed
-    }
-
-    return markClass;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkArrays.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __MARKARRAYS_H
-#define __MARKARRAYS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkRecord
-{
-    le_uint16   markClass;
-    Offset      markAnchorTableOffset;
-};
-
-struct MarkArray
-{
-    le_uint16   markCount;
-    MarkRecord  markRecordArray[ANY_NUMBER];
-
-    le_int32 getMarkClass(const LETableReference &base, LEGlyphID glyphID,
-                       le_int32 coverageIndex, const LEFontInstance *fontInstance,
-                       LEPoint &anchor, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(MarkArray, markRecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToBasePosnSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToBasePosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToBasePositioningSubtable::findBaseGlyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->prev()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToBasePositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (LE_FAILURE(success)) {
-      return 0;
-    }
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    LEReferenceTo<MarkArray> markArray(base, success,  (const MarkArray *) ((char *) this + SWAPW(markArrayOffset)));
-    if(LE_FAILURE(success)) return 0;
-    le_int32 markClass = markArray->getMarkClass(markArray, markGlyph, markCoverage, fontInstance, markAnchor, success);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount || LE_FAILURE(success)) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    // FIXME: We probably don't want to find a base glyph before a previous ligature...
-    GlyphIterator baseIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreLigatures*/));
-    LEGlyphID baseGlyph = findBaseGlyph(&baseIterator);
-    le_int32 baseCoverage = getBaseCoverage(base, (LEGlyphID) baseGlyph, success);
-    LEReferenceTo<BaseArray> baseArray(base, success, (const BaseArray *) ((char *) this + SWAPW(baseArrayOffset)));
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 baseCount = SWAPW(baseArray->baseRecordCount);
-
-    if (baseCoverage < 0 || baseCoverage >= baseCount) {
-        // The base glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-    LEReferenceTo<BaseRecord> baseRecord(base, success, &baseArray->baseRecordArray[baseCoverage * mcCount]);
-    if( LE_FAILURE(success) ) { return 0; }
-    LEReferenceToArrayOf<Offset> baseAnchorTableOffsetArray(base, success, &(baseRecord->baseAnchorTableOffsetArray[0]), mcCount);
-
-    if( LE_FAILURE(success) ) { return 0; }
-    Offset anchorTableOffset = SWAPW(baseRecord->baseAnchorTableOffsetArray[markClass]);
-    LEReferenceTo<AnchorTable> anchorTable(baseArray, success, anchorTableOffset);
-    if( LE_FAILURE(success) ) { return 0; }
-
-    LEPoint baseAnchor, markAdvance, pixels;
-
-
-    anchorTable->getAnchor(anchorTable, baseGlyph, fontInstance, baseAnchor, success);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = baseAnchor.fX - markAnchor.fX;
-    float anchorDiffY = baseAnchor.fY - markAnchor.fY;
-
-    _LETRACE("Offset: (%.2f, %.2f) glyph 0x%X", anchorDiffX, anchorDiffY, markGlyph);
-
-    glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        // FIXME: need similar patch to below; also in MarkToLigature and MarkToMark
-        // (is there a better way to approach this for all the cases?)
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint baseAdvance;
-
-        fontInstance->getGlyphAdvance(baseGlyph, pixels);
-
-        //JK: adjustment needs to account for non-zero advance of any marks between base glyph and current mark
-        GlyphIterator gi(baseIterator, (le_uint16)0); // copy of baseIterator that won't ignore marks
-        gi.next(); // point beyond the base glyph
-        while (gi.getCurrStreamPosition() < glyphIterator->getCurrStreamPosition()) { // for all intervening glyphs (marks)...
-            LEGlyphID otherMark = gi.getCurrGlyphID();
-            LEPoint px;
-            fontInstance->getGlyphAdvance(otherMark, px); // get advance, in case it's non-zero
-            pixels.fX += px.fX; // and add that to the base glyph's advance
-            pixels.fY += px.fY;
-            gi.next();
-        }
-        // end of JK patch
-        fontInstance->pixelsToUnits(pixels, baseAdvance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToBasePosnSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOBASEPOSITIONINGSUBTABLES_H
-#define __MARKTOBASEPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToBasePositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findBaseGlyph(GlyphIterator *glyphIterator) const;
-};
-
-struct BaseRecord
-{
-    Offset baseAnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(BaseRecord, baseAnchorTableOffsetArray)
-
-struct BaseArray
-{
-    le_int16 baseRecordCount;
-    BaseRecord baseRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(BaseArray, baseRecordArray)
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToLigaturePosnSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToLigaturePosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToLigaturePositioningSubtable::findLigatureGlyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->prev()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToLigaturePositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (LE_FAILURE(success)) {
-      return 0;
-    }
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    LEReferenceTo<MarkArray> markArray(base, success,  SWAPW(markArrayOffset));
-    if( LE_FAILURE(success) ) {
-      return 0;
-    }
-    le_int32 markClass = markArray->getMarkClass(markArray, markGlyph, markCoverage, fontInstance, markAnchor, success);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    // FIXME: we probably don't want to find a ligature before a previous base glyph...
-    GlyphIterator ligatureIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreBaseGlyphs*/));
-    LEGlyphID ligatureGlyph = findLigatureGlyph(&ligatureIterator);
-    le_int32 ligatureCoverage = getBaseCoverage(base, (LEGlyphID) ligatureGlyph, success);
-    LEReferenceTo<LigatureArray> ligatureArray(base, success, SWAPW(baseArrayOffset));
-    if (LE_FAILURE(success)) { return 0; }
-    le_uint16 ligatureCount = SWAPW(ligatureArray->ligatureCount);
-
-    if (ligatureCoverage < 0 || ligatureCoverage >= ligatureCount) {
-        // The ligature glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-
-    le_int32 markPosition = glyphIterator->getCurrStreamPosition();
-    Offset ligatureAttachOffset = SWAPW(ligatureArray->ligatureAttachTableOffsetArray[ligatureCoverage]);
-    LEReferenceTo<LigatureAttachTable> ligatureAttachTable(ligatureArray, success, ligatureAttachOffset);
-    if (LE_FAILURE(success)) { return 0; }
-    le_int32 componentCount = SWAPW(ligatureAttachTable->componentCount);
-    le_int32 component = ligatureIterator.getMarkComponent(markPosition);
-
-    if (component >= componentCount) {
-        // should really just bail at this point...
-        component = componentCount - 1;
-    }
-
-    LEReferenceTo<ComponentRecord> componentRecord(base, success, &ligatureAttachTable->componentRecordArray[component * mcCount]);
-    if (LE_FAILURE(success)) { return 0; }
-    LEReferenceToArrayOf<Offset> ligatureAnchorTableOffsetArray(base, success, &(componentRecord->ligatureAnchorTableOffsetArray[0]), mcCount);
-    if( LE_FAILURE(success) ) { return 0; }
-    Offset anchorTableOffset = SWAPW(componentRecord->ligatureAnchorTableOffsetArray[markClass]);
-    LEReferenceTo<AnchorTable> anchorTable(ligatureAttachTable, success, anchorTableOffset);
-    if (LE_FAILURE(success)) { return 0; }
-    LEPoint ligatureAnchor, markAdvance, pixels;
-
-    anchorTable->getAnchor(anchorTable, ligatureGlyph, fontInstance, ligatureAnchor, success);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = ligatureAnchor.fX - markAnchor.fX;
-    float anchorDiffY = ligatureAnchor.fY - markAnchor.fY;
-
-    glyphIterator->setCurrGlyphBaseOffset(ligatureIterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint ligatureAdvance;
-
-        fontInstance->getGlyphAdvance(ligatureGlyph, pixels);
-        fontInstance->pixelsToUnits(pixels, ligatureAdvance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - ligatureAdvance.fX, anchorDiffY - ligatureAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToLigaturePosnSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
-#define __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToLigaturePositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findLigatureGlyph(GlyphIterator *glyphIterator) const;
-};
-
-struct ComponentRecord
-{
-    Offset ligatureAnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ComponentRecord, ligatureAnchorTableOffsetArray)
-
-struct LigatureAttachTable
-{
-    le_uint16 componentCount;
-    ComponentRecord componentRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureAttachTable, componentRecordArray)
-
-struct LigatureArray
-{
-    le_uint16 ligatureCount;
-    Offset ligatureAttachTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureArray, ligatureAttachTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToMarkPosnSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToMarkPosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToMarkPositioningSubtable::findMark2Glyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->findMark2Glyph()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToMarkPositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    LEReferenceTo<MarkArray> markArray(base, success, SWAPW(markArrayOffset));
-    if(LE_FAILURE(success)) {
-      return 0;
-    }
-    le_int32 markClass = markArray->getMarkClass(markArray, markGlyph, markCoverage, fontInstance, markAnchor, success);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    GlyphIterator mark2Iterator(*glyphIterator);
-    LEGlyphID mark2Glyph = findMark2Glyph(&mark2Iterator);
-    le_int32 mark2Coverage = getBaseCoverage(base, (LEGlyphID) mark2Glyph, success);
-    LEReferenceTo<Mark2Array>  mark2Array(base, success, (const Mark2Array *) ((char *) this + SWAPW(baseArrayOffset)));
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 mark2Count = SWAPW(mark2Array->mark2RecordCount);
-
-    if (mark2Coverage < 0 || mark2Coverage >= mark2Count) {
-        // The mark2 glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-
-    LEReferenceTo<Mark2Record> mark2Record(base, success, &mark2Array->mark2RecordArray[mark2Coverage * mcCount]);
-    if(LE_FAILURE(success)) return 0;
-    Offset anchorTableOffset = SWAPW(mark2Record->mark2AnchorTableOffsetArray[markClass]);
-    LEReferenceTo<AnchorTable> anchorTable(mark2Array, success, anchorTableOffset);
-    if(LE_FAILURE(success)) return 0;
-    LEPoint mark2Anchor, markAdvance, pixels;
-
-    if (anchorTableOffset == 0) {
-        // this seems to mean that the marks don't attach...
-        return 0;
-    }
-
-    anchorTable->getAnchor(anchorTable, mark2Glyph, fontInstance, mark2Anchor, success);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = mark2Anchor.fX - markAnchor.fX;
-    float anchorDiffY = mark2Anchor.fY - markAnchor.fY;
-
-    _LETRACE("Offset: (%.2f, %.2f) glyph 0x%X mark2 0x%X", anchorDiffX, anchorDiffY, markGlyph, mark2Glyph);
-
-    glyphIterator->setCurrGlyphBaseOffset(mark2Iterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint mark2Advance;
-
-        fontInstance->getGlyphAdvance(mark2Glyph, pixels);
-        fontInstance->pixelsToUnits(pixels, mark2Advance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - mark2Advance.fX, anchorDiffY - mark2Advance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MarkToMarkPosnSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOMARKPOSITIONINGSUBTABLES_H
-#define __MARKTOMARKPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToMarkPositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findMark2Glyph(GlyphIterator *glyphIterator) const;
-};
-
-struct Mark2Record
-{
-    Offset mark2AnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Mark2Record, mark2AnchorTableOffsetArray)
-
-struct Mark2Array
-{
-    le_uint16 mark2RecordCount;
-    Mark2Record mark2RecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Mark2Array, mark2RecordArray)
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/MirroredCharData.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 07/20/2005 10:43:59 AM PDT
- */
-
-#include "LETypes.h"
-#include "DefaultCharMapper.h"
-
-U_NAMESPACE_BEGIN
-
-const LEUnicode32 DefaultCharMapper::mirroredChars[] = {
-    0x0028, 0x0029, 0x003C, 0x003E, 0x005B, 0x005D, 0x007B, 0x007D,
-    0x00AB, 0x00BB, 0x2039, 0x203A, 0x2045, 0x2046, 0x207D, 0x207E,
-    0x208D, 0x208E, 0x2208, 0x2209, 0x220A, 0x220B, 0x220C, 0x220D,
-    0x2215, 0x223C, 0x223D, 0x2243, 0x2252, 0x2253, 0x2254, 0x2255,
-    0x2264, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, 0x226A, 0x226B,
-    0x226E, 0x226F, 0x2270, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275,
-    0x2276, 0x2277, 0x2278, 0x2279, 0x227A, 0x227B, 0x227C, 0x227D,
-    0x227E, 0x227F, 0x2280, 0x2281, 0x2282, 0x2283, 0x2284, 0x2285,
-    0x2286, 0x2287, 0x2288, 0x2289, 0x228A, 0x228B, 0x228F, 0x2290,
-    0x2291, 0x2292, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22A8, 0x22A9,
-    0x22AB, 0x22B0, 0x22B1, 0x22B2, 0x22B3, 0x22B4, 0x22B5, 0x22B6,
-    0x22B7, 0x22C9, 0x22CA, 0x22CB, 0x22CC, 0x22CD, 0x22D0, 0x22D1,
-    0x22D6, 0x22D7, 0x22D8, 0x22D9, 0x22DA, 0x22DB, 0x22DC, 0x22DD,
-    0x22DE, 0x22DF, 0x22E0, 0x22E1, 0x22E2, 0x22E3, 0x22E4, 0x22E5,
-    0x22E6, 0x22E7, 0x22E8, 0x22E9, 0x22EA, 0x22EB, 0x22EC, 0x22ED,
-    0x22F0, 0x22F1, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x22FA,
-    0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x2308, 0x2309, 0x230A, 0x230B,
-    0x2329, 0x232A, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D,
-    0x276E, 0x276F, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775,
-    0x27C3, 0x27C4, 0x27C5, 0x27C6, 0x27D5, 0x27D6, 0x27DD, 0x27DE,
-    0x27E2, 0x27E3, 0x27E4, 0x27E5, 0x27E6, 0x27E7, 0x27E8, 0x27E9,
-    0x27EA, 0x27EB, 0x2983, 0x2984, 0x2985, 0x2986, 0x2987, 0x2988,
-    0x2989, 0x298A, 0x298B, 0x298C, 0x298D, 0x298E, 0x298F, 0x2990,
-    0x2991, 0x2992, 0x2993, 0x2994, 0x2995, 0x2996, 0x2997, 0x2998,
-    0x29B8, 0x29C0, 0x29C1, 0x29C4, 0x29C5, 0x29CF, 0x29D0, 0x29D1,
-    0x29D2, 0x29D4, 0x29D5, 0x29D8, 0x29D9, 0x29DA, 0x29DB, 0x29F5,
-    0x29F8, 0x29F9, 0x29FC, 0x29FD, 0x2A2B, 0x2A2C, 0x2A2D, 0x2A2E,
-    0x2A34, 0x2A35, 0x2A3C, 0x2A3D, 0x2A64, 0x2A65, 0x2A79, 0x2A7A,
-    0x2A7D, 0x2A7E, 0x2A7F, 0x2A80, 0x2A81, 0x2A82, 0x2A83, 0x2A84,
-    0x2A8B, 0x2A8C, 0x2A91, 0x2A92, 0x2A93, 0x2A94, 0x2A95, 0x2A96,
-    0x2A97, 0x2A98, 0x2A99, 0x2A9A, 0x2A9B, 0x2A9C, 0x2AA1, 0x2AA2,
-    0x2AA6, 0x2AA7, 0x2AA8, 0x2AA9, 0x2AAA, 0x2AAB, 0x2AAC, 0x2AAD,
-    0x2AAF, 0x2AB0, 0x2AB3, 0x2AB4, 0x2ABB, 0x2ABC, 0x2ABD, 0x2ABE,
-    0x2ABF, 0x2AC0, 0x2AC1, 0x2AC2, 0x2AC3, 0x2AC4, 0x2AC5, 0x2AC6,
-    0x2ACD, 0x2ACE, 0x2ACF, 0x2AD0, 0x2AD1, 0x2AD2, 0x2AD3, 0x2AD4,
-    0x2AD5, 0x2AD6, 0x2ADE, 0x2AE3, 0x2AE4, 0x2AE5, 0x2AEC, 0x2AED,
-    0x2AF7, 0x2AF8, 0x2AF9, 0x2AFA, 0x2E02, 0x2E03, 0x2E04, 0x2E05,
-    0x2E09, 0x2E0A, 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x3008, 0x3009,
-    0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011,
-    0x3014, 0x3015, 0x3016, 0x3017, 0x3018, 0x3019, 0x301A, 0x301B,
-    0xFF08, 0xFF09, 0xFF1C, 0xFF1E, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D,
-    0xFF5F, 0xFF60, 0xFF62, 0xFF63
-};
-
-const LEUnicode32 DefaultCharMapper::srahCderorrim[] = {
-    0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B,
-    0x00BB, 0x00AB, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D,
-    0x208E, 0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A,
-    0x29F5, 0x223D, 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254,
-    0x2265, 0x2264, 0x2267, 0x2266, 0x2269, 0x2268, 0x226B, 0x226A,
-    0x226F, 0x226E, 0x2271, 0x2270, 0x2273, 0x2272, 0x2275, 0x2274,
-    0x2277, 0x2276, 0x2279, 0x2278, 0x227B, 0x227A, 0x227D, 0x227C,
-    0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282, 0x2285, 0x2284,
-    0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290, 0x228F,
-    0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3,
-    0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7,
-    0x22B6, 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0,
-    0x22D7, 0x22D6, 0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC,
-    0x22DF, 0x22DE, 0x22E1, 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4,
-    0x22E7, 0x22E6, 0x22E9, 0x22E8, 0x22EB, 0x22EA, 0x22ED, 0x22EC,
-    0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x22F2,
-    0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308, 0x230B, 0x230A,
-    0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D, 0x276C,
-    0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774,
-    0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27D6, 0x27D5, 0x27DE, 0x27DD,
-    0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8,
-    0x27EB, 0x27EA, 0x2984, 0x2983, 0x2986, 0x2985, 0x2988, 0x2987,
-    0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F, 0x298E, 0x298D,
-    0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998, 0x2997,
-    0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2,
-    0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215,
-    0x29F9, 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D,
-    0x2A35, 0x2A34, 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79,
-    0x2A7E, 0x2A7D, 0x2A80, 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83,
-    0x2A8C, 0x2A8B, 0x2A92, 0x2A91, 0x2A94, 0x2A93, 0x2A96, 0x2A95,
-    0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C, 0x2A9B, 0x2AA2, 0x2AA1,
-    0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA, 0x2AAD, 0x2AAC,
-    0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE, 0x2ABD,
-    0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5,
-    0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3,
-    0x2AD6, 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC,
-    0x2AF8, 0x2AF7, 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04,
-    0x2E0A, 0x2E09, 0x2E0D, 0x2E0C, 0x2E1D, 0x2E1C, 0x3009, 0x3008,
-    0x300B, 0x300A, 0x300D, 0x300C, 0x300F, 0x300E, 0x3011, 0x3010,
-    0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A,
-    0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, 0xFF5D, 0xFF5B,
-    0xFF60, 0xFF5F, 0xFF63, 0xFF62
-};
-
-const le_int32 DefaultCharMapper::mirroredCharsCount = 332;
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MorphStateTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MORPHSTATETABLES_H
-#define __MORPHSTATETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct MorphStateTableHeader : MorphSubtableHeader
-{
-    StateTableHeader stHeader;
-};
-
-struct MorphStateTableHeader2 : MorphSubtableHeader2
-{
-    StateTableHeader2 stHeader;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/MorphTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
- *
- */
-
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "IndicRearrangementProcessor.h"
-#include "ContextualGlyphSubstProc.h"
-#include "LigatureSubstProc.h"
-#include "NonContextualGlyphSubstProc.h"
-//#include "ContextualGlyphInsertionProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void MorphTableHeader::process(const LETableReference &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-  le_uint32 chainCount = SWAPL(this->nChains);
-  LEReferenceTo<ChainHeader> chainHeader(base, success, chains); // moving header
-    LEReferenceToArrayOf<ChainHeader> chainHeaderArray(base, success, chains, chainCount);
-    le_uint32 chain;
-
-    for (chain = 0; LE_SUCCESS(success) && (chain < chainCount); chain += 1) {
-        if (chain > 0) {
-            le_uint32 chainLength = SWAPL(chainHeader->chainLength);
-            if (chainLength & 0x03) { // incorrect alignment for 32 bit tables
-                success = LE_MEMORY_ALLOCATION_ERROR; // as good a choice as any
-                return;
-            }
-            chainHeader.addOffset(chainLength, success);
-        }
-        FeatureFlags defaultFlags = SWAPL(chainHeader->defaultFlags);
-        le_int16 nFeatureEntries = SWAPW(chainHeader->nFeatureEntries);
-        le_int16 nSubtables = SWAPW(chainHeader->nSubtables);
-        LEReferenceTo<MorphSubtableHeader> subtableHeader =
-          LEReferenceTo<MorphSubtableHeader>(chainHeader,success, &(chainHeader->featureTable[nFeatureEntries]));
-        le_int16 subtable;
-
-        for (subtable = 0; LE_SUCCESS(success) && (subtable < nSubtables); subtable += 1) {
-            if (subtable > 0) {
-                le_int16 length = SWAPW(subtableHeader->length);
-                if (length & 0x03) { // incorrect alignment for 32 bit tables
-                    success = LE_MEMORY_ALLOCATION_ERROR; // as good a choice as any
-                    return;
-                }
-                subtableHeader.addOffset(length, success);
-                if (LE_FAILURE(success)) break;
-            }
-            SubtableCoverage coverage = SWAPW(subtableHeader->coverage);
-            FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-
-            // should check coverage more carefully...
-            if ((coverage & scfVertical) == 0 && (subtableFeatures & defaultFlags) != 0  && LE_SUCCESS(success)) {
-              subtableHeader->process(subtableHeader, glyphStorage, success);
-            }
-        }
-    }
-}
-
-void MorphSubtableHeader::process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-    SubtableProcessor *processor = NULL;
-
-    if (LE_FAILURE(success)) return;
-
-    switch (SWAPW(coverage) & scfTypeMask)
-    {
-    case mstIndicRearrangement:
-      processor = new IndicRearrangementProcessor(base, success);
-        break;
-
-    case mstContextualGlyphSubstitution:
-      processor = new ContextualGlyphSubstitutionProcessor(base, success);
-        break;
-
-    case mstLigatureSubstitution:
-      processor = new LigatureSubstitutionProcessor(base, success);
-        break;
-
-    case mstReservedUnused:
-        break;
-
-    case mstNonContextualGlyphSubstitution:
-      processor = NonContextualGlyphSubstitutionProcessor::createInstance(base, success);
-        break;
-
-    /*
-    case mstContextualGlyphInsertion:
-        processor = new ContextualGlyphInsertionProcessor(this);
-        break;
-    */
-
-    default:
-        break;
-    }
-
-    if (processor != NULL) {
-      if(LE_SUCCESS(success)) {
-        processor->process(glyphStorage, success);
-      }
-      delete processor;
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MorphTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,412 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __MORPHTABLES_H
-#define __MORPHTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-typedef le_uint32 FeatureFlags;
-
-typedef le_int16 FeatureType;
-typedef le_int16 FeatureSetting;
-
-struct FeatureTableEntry
-{
-    FeatureType     featureType;
-    FeatureSetting  featureSetting;
-    FeatureFlags    enableFlags;
-    FeatureFlags    disableFlags;
-};
-
-struct ChainHeader
-{
-    FeatureFlags        defaultFlags;
-    le_uint32           chainLength;
-    le_int16           nFeatureEntries;
-    le_int16           nSubtables;
-    FeatureTableEntry   featureTable[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainHeader, featureTable)
-
-struct MorphTableHeader
-{
-    le_int32    version;
-    le_uint32   nChains;
-    ChainHeader chains[ANY_NUMBER];
-
-  void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(MorphTableHeader, chains)
-
-typedef le_int16 SubtableCoverage;
-typedef le_uint32 SubtableCoverage2;
-
-enum SubtableCoverageFlags
-{
-    scfVertical = 0x8000,
-    scfReverse  = 0x4000,
-    scfIgnoreVt = 0x2000,
-    scfReserved = 0x1FF8,
-    scfTypeMask = 0x0007
-};
-
-enum MorphSubtableType
-{
-    mstIndicRearrangement               = 0,
-    mstContextualGlyphSubstitution      = 1,
-    mstLigatureSubstitution             = 2,
-    mstReservedUnused                   = 3,
-    mstNonContextualGlyphSubstitution   = 4,
-    mstContextualGlyphInsertion         = 5
-};
-
-struct MorphSubtableHeader
-{
-    le_int16           length;
-    SubtableCoverage    coverage;
-    FeatureFlags        subtableFeatures;
-
-  void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-
-enum SubtableCoverageFlags2
-{
-    scfVertical2 = 0x80000000,
-    scfReverse2  = 0x40000000,
-    scfIgnoreVt2 = 0x20000000,
-    scfReserved2 = 0x1FFFFF00,
-    scfTypeMask2 = 0x000000FF
-};
-
-struct MorphSubtableHeader2
-{
-    le_uint32           length;
-    SubtableCoverage2    coverage;
-    FeatureFlags        subtableFeatures;
-
-    void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-
-struct ChainHeader2
-{
-    FeatureFlags        defaultFlags;
-    le_uint32           chainLength;
-    le_uint32           nFeatureEntries;
-    le_uint32           nSubtables;
-    FeatureTableEntry   featureTable[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainHeader2, featureTable)
-
-struct MorphTableHeader2
-{
-    le_int32    version;
-    le_uint32   nChains;
-    ChainHeader2 chains[ANY_NUMBER];
-
-    void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(MorphTableHeader2, chains)
-
-/*
- * AAT Font Features
- * source: https://developer.apple.com/fonts/registry/
- * (plus addition from ATS/SFNTLayoutTypes.h)
- */
-
-enum {
-
-   allTypographicFeaturesType = 0,
-
-      allTypeFeaturesOnSelector            = 0,
-      allTypeFeaturesOffSelector           = 1,
-
-   ligaturesType = 1,
-
-      requiredLigaturesOnSelector          = 0,
-      requiredLigaturesOffSelector         = 1,
-      commonLigaturesOnSelector            = 2,
-      commonLigaturesOffSelector           = 3,
-      rareLigaturesOnSelector              = 4,
-      rareLigaturesOffSelector             = 5,
-      logosOnSelector                      = 6,
-      logosOffSelector                     = 7,
-      rebusPicturesOnSelector              = 8,
-      rebusPicturesOffSelector             = 9,
-      diphthongLigaturesOnSelector         = 10,
-      diphthongLigaturesOffSelector        = 11,
-      squaredLigaturesOnSelector           = 12,
-      squaredLigaturesOffSelector          = 13,
-      abbrevSquaredLigaturesOnSelector     = 14,
-      abbrevSquaredLigaturesOffSelector    = 15,
-      symbolLigaturesOnSelector            = 16,
-      symbolLigaturesOffSelector           = 17,
-      contextualLigaturesOnSelector        = 18,
-      contextualLigaturesOffSelector       = 19,
-      historicalLigaturesOnSelector        = 20,
-      historicalLigaturesOffSelector       = 21,
-
-   cursiveConnectionType = 2,
-
-      unconnectedSelector                  = 0,
-      partiallyConnectedSelector           = 1,
-      cursiveSelector                      = 2,
-
-   letterCaseType = 3,
-
-      upperAndLowerCaseSelector            = 0,
-      allCapsSelector                      = 1,
-      allLowerCaseSelector                 = 2,
-      smallCapsSelector                    = 3,
-      initialCapsSelector                  = 4,
-      initialCapsAndSmallCapsSelector      = 5,
-
-   verticalSubstitutionType = 4,
-
-      substituteVerticalFormsOnSelector    = 0,
-      substituteVerticalFormsOffSelector   = 1,
-
-   linguisticRearrangementType = 5,
-
-      linguisticRearrangementOnSelector    = 0,
-      linguisticRearrangementOffSelector   = 1,
-
-   numberSpacingType = 6,
-
-      monospacedNumbersSelector            = 0,
-      proportionalNumbersSelector          = 1,
-
-   /*
-   appleReserved1Type = 7,
-   */
-
-   smartSwashType = 8,
-
-      wordInitialSwashesOnSelector         = 0,
-      wordInitialSwashesOffSelector        = 1,
-      wordFinalSwashesOnSelector           = 2,
-      wordFinalSwashesOffSelector          = 3,
-      lineInitialSwashesOnSelector         = 4,
-      lineInitialSwashesOffSelector        = 5,
-      lineFinalSwashesOnSelector           = 6,
-      lineFinalSwashesOffSelector          = 7,
-      nonFinalSwashesOnSelector            = 8,
-      nonFinalSwashesOffSelector           = 9,
-
-   diacriticsType = 9,
-
-      showDiacriticsSelector               = 0,
-      hideDiacriticsSelector               = 1,
-      decomposeDiacriticsSelector          = 2,
-
-   verticalPositionType = 10,
-
-      normalPositionSelector               = 0,
-      superiorsSelector                    = 1,
-      inferiorsSelector                    = 2,
-      ordinalsSelector                     = 3,
-
-   fractionsType = 11,
-
-      noFractionsSelector                  = 0,
-      verticalFractionsSelector            = 1,
-      diagonalFractionsSelector            = 2,
-
-   /*
-   appleReserved2Type = 12,
-   */
-
-   overlappingCharactersType = 13,
-
-      preventOverlapOnSelector             = 0,
-      preventOverlapOffSelector            = 1,
-
-   typographicExtrasType = 14,
-
-      hyphensToEmDashOnSelector            = 0,
-      hyphensToEmDashOffSelector           = 1,
-      hyphenToEnDashOnSelector             = 2,
-      hyphenToEnDashOffSelector            = 3,
-      unslashedZeroOnSelector              = 4,
-      slashedZeroOffSelector               = 4,
-      unslashedZeroOffSelector             = 5,
-      slashedZeroOnSelector                = 5,
-      formInterrobangOnSelector            = 6,
-      formInterrobangOffSelector           = 7,
-      smartQuotesOnSelector                = 8,
-      smartQuotesOffSelector               = 9,
-      periodsToEllipsisOnSelector          = 10,
-      periodsToEllipsisOffSelector         = 11,
-
-   mathematicalExtrasType = 15,
-
-      hyphenToMinusOnSelector              = 0,
-      hyphenToMinusOffSelector             = 1,
-      asteriskToMultiplyOnSelector         = 2,
-      asteriskToMultiplyOffSelector        = 3,
-      slashToDivideOnSelector              = 4,
-      slashToDivideOffSelector             = 5,
-      inequalityLigaturesOnSelector        = 6,
-      inequalityLigaturesOffSelector       = 7,
-      exponentsOnSelector                  = 8,
-      exponentsOffSelector                 = 9,
-
-   ornamentSetsType = 16,
-
-      noOrnamentsSelector                  = 0,
-      dingbatsSelector                     = 1,
-      piCharactersSelector                 = 2,
-      fleuronsSelector                     = 3,
-      decorativeBordersSelector            = 4,
-      internationalSymbolsSelector         = 5,
-      mathSymbolsSelector                  = 6,
-
-   characterAlternativesType = 17,
-
-      noAlternatesSelector                 = 0,
-
-   designComplexityType = 18,
-
-      designLevel1Selector                 = 0,
-      designLevel2Selector                 = 1,
-      designLevel3Selector                 = 2,
-      designLevel4Selector                 = 3,
-      designLevel5Selector                 = 4,
-      designLevel6Selector                 = 5,
-      designLevel7Selector                 = 6,
-
-   styleOptionsType = 19,
-
-      noStyleOptionsSelector               = 0,
-      displayTextSelector                  = 1,
-      engravedTextSelector                 = 2,
-      illuminatedCapsSelector              = 3,
-      titlingCapsSelector                  = 4,
-      tallCapsSelector                     = 5,
-
-   characterShapeType = 20,
-
-      traditionalCharactersSelector        = 0,
-      simplifiedCharactersSelector         = 1,
-      jis1978CharactersSelector            = 2,
-      jis1983CharactersSelector            = 3,
-      jis1990CharactersSelector            = 4,
-      traditionalAltOneSelector            = 5,
-      traditionalAltTwoSelector            = 6,
-      traditionalAltThreeSelector          = 7,
-      traditionalAltFourSelector           = 8,
-      traditionalAltFiveSelector           = 9,
-      expertCharactersSelector             = 10,
-
-   numberCaseType = 21,
-
-      lowerCaseNumbersSelector             = 0,
-      upperCaseNumbersSelector             = 1,
-
-   textSpacingType = 22,
-
-      proportionalTextSelector             = 0,
-      monospacedTextSelector               = 1,
-      halfWidthTextSelector                = 2,
-      normallySpacedTextSelector           = 3,
-
-   transliterationType = 23,
-
-      noTransliterationSelector            = 0,
-      hanjaToHangulSelector                = 1,
-      hiraganaToKatakanaSelector           = 2,
-      katakanaToHiraganaSelector           = 3,
-      kanaToRomanizationSelector           = 4,
-      romanizationToHiraganaSelector       = 5,
-      romanizationToKatakanaSelector       = 6,
-      hanjaToHangulAltOneSelector          = 7,
-      hanjaToHangulAltTwoSelector          = 8,
-      hanjaToHangulAltThreeSelector        = 9,
-
-   annotationType = 24,
-
-      noAnnotationSelector                 = 0,
-      boxAnnotationSelector                = 1,
-      roundedBoxAnnotationSelector         = 2,
-      circleAnnotationSelector             = 3,
-      invertedCircleAnnotationSelector     = 4,
-      parenthesisAnnotationSelector        = 5,
-      periodAnnotationSelector             = 6,
-      romanNumeralAnnotationSelector       = 7,
-      diamondAnnotationSelector            = 8,
-
-   kanaSpacingType = 25,
-
-      fullWidthKanaSelector                = 0,
-      proportionalKanaSelector             = 1,
-
-   ideographicSpacingType = 26,
-
-      fullWidthIdeographsSelector          = 0,
-      proportionalIdeographsSelector       = 1,
-
-   cjkRomanSpacingType = 103,
-
-      halfWidthCJKRomanSelector            = 0,
-      proportionalCJKRomanSelector         = 1,
-      defaultCJKRomanSelector              = 2,
-      fullWidthCJKRomanSelector            = 3,
-
-   rubyKanaType = 28,
-
-      rubyKanaOnSelector                = 2,
-      rubyKanaOffSelector               = 3,
-
-/* The following types are provided for compatibility; note that
-   their use is deprecated. */
-
-   adobeCharacterSpacingType = 100,        /* prefer 22 */
-   adobeKanaSpacingType = 101,             /* prefer 25 */
-   adobeKanjiSpacingType = 102,            /* prefer 26 */
-   adobeSquareLigatures = 104,             /* prefer 1 */
-
-   lastFeatureType = -1
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/MorphTables2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,259 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. and others 1998 - 2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "IndicRearrangementProcessor2.h"
-#include "ContextualGlyphSubstProc2.h"
-#include "LigatureSubstProc2.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void MorphTableHeader2::process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage,
-                                le_int32 typoFlags, LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return;
-
-  le_uint32 chainCount = SWAPL(this->nChains);
-  LEReferenceTo<ChainHeader2> chainHeader(base, success, &chains[0]);
-  /* chainHeader and subtableHeader are implemented as a moving pointer rather than an array dereference
-   * to (slightly) reduce code churn. However, must be careful to preincrement them the 2nd time through.
-   * We don't want to increment them at the end of the loop, as that would attempt to dereference
-   * out of range memory.
-   */
-  le_uint32 chain;
-
-  for (chain = 0; LE_SUCCESS(success) && (chain < chainCount); chain++) {
-        if (chain>0) {
-          le_uint32 chainLength = SWAPL(chainHeader->chainLength);
-          if (chainLength & 0x03) { // incorrect alignment for 32 bit tables
-              success = LE_MEMORY_ALLOCATION_ERROR; // as good a choice as any
-              return;
-          }
-          chainHeader.addOffset(chainLength, success); // Don't increment the first time
-        }
-        FeatureFlags flag = SWAPL(chainHeader->defaultFlags);
-        le_uint32 nFeatureEntries = SWAPL(chainHeader->nFeatureEntries);
-        le_uint32 nSubtables = SWAPL(chainHeader->nSubtables);
-        LEReferenceTo<MorphSubtableHeader2> subtableHeader(chainHeader,
-              success, (const MorphSubtableHeader2 *)&chainHeader->featureTable[nFeatureEntries]);
-        le_uint32 subtable;
-        if(LE_FAILURE(success)) break; // malformed table
-
-        if (typoFlags != 0) {
-           le_uint32 featureEntry;
-           LEReferenceToArrayOf<FeatureTableEntry> featureTableRef(chainHeader, success, &chainHeader->featureTable[0], nFeatureEntries);
-           if(LE_FAILURE(success)) break;
-            // Feature subtables
-            for (featureEntry = 0; featureEntry < nFeatureEntries; featureEntry++) {
-                const FeatureTableEntry &featureTableEntry = featureTableRef(featureEntry, success);
-                le_int16 featureType = SWAPW(featureTableEntry.featureType);
-                le_int16 featureSetting = SWAPW(featureTableEntry.featureSetting);
-                le_uint32 enableFlags = SWAPL(featureTableEntry.enableFlags);
-                le_uint32 disableFlags = SWAPL(featureTableEntry.disableFlags);
-                switch (featureType) {
-                    case ligaturesType:
-                        if ((typoFlags & LE_Ligatures_FEATURE_ENUM ) && (featureSetting ^ 0x1)){
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        } else {
-                            if (((typoFlags & LE_RLIG_FEATURE_FLAG) && featureSetting == requiredLigaturesOnSelector) ||
-                                ((typoFlags & LE_CLIG_FEATURE_FLAG) && featureSetting == contextualLigaturesOnSelector) ||
-                                ((typoFlags & LE_HLIG_FEATURE_FLAG) && featureSetting == historicalLigaturesOnSelector) ||
-                                ((typoFlags & LE_LIGA_FEATURE_FLAG) && featureSetting == commonLigaturesOnSelector)) {
-                                flag &= disableFlags;
-                                flag |= enableFlags;
-                            }
-                        }
-                        break;
-                    case letterCaseType:
-                        if ((typoFlags & LE_SMCP_FEATURE_FLAG) && featureSetting == smallCapsSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case verticalSubstitutionType:
-                        break;
-                    case linguisticRearrangementType:
-                        break;
-                    case numberSpacingType:
-                        break;
-                    case smartSwashType:
-                        if ((typoFlags & LE_SWSH_FEATURE_FLAG) && (featureSetting ^ 0x1)){
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case diacriticsType:
-                        break;
-                    case verticalPositionType:
-                        break;
-                    case fractionsType:
-                        if (((typoFlags & LE_FRAC_FEATURE_FLAG) && featureSetting == diagonalFractionsSelector) ||
-                            ((typoFlags & LE_AFRC_FEATURE_FLAG) && featureSetting == verticalFractionsSelector)) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        } else {
-                            flag &= disableFlags;
-                        }
-                        break;
-                    case typographicExtrasType:
-                        if ((typoFlags & LE_ZERO_FEATURE_FLAG) && featureSetting == slashedZeroOnSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case mathematicalExtrasType:
-                        break;
-                    case ornamentSetsType:
-                        break;
-                    case characterAlternativesType:
-                        break;
-                    case designComplexityType:
-                        if (((typoFlags & LE_SS01_FEATURE_FLAG) && featureSetting == designLevel1Selector) ||
-                            ((typoFlags & LE_SS02_FEATURE_FLAG) && featureSetting == designLevel2Selector) ||
-                            ((typoFlags & LE_SS03_FEATURE_FLAG) && featureSetting == designLevel3Selector) ||
-                            ((typoFlags & LE_SS04_FEATURE_FLAG) && featureSetting == designLevel4Selector) ||
-                            ((typoFlags & LE_SS05_FEATURE_FLAG) && featureSetting == designLevel5Selector) ||
-                            ((typoFlags & LE_SS06_FEATURE_FLAG) && featureSetting == designLevel6Selector) ||
-                            ((typoFlags & LE_SS07_FEATURE_FLAG) && featureSetting == designLevel7Selector)) {
-
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case styleOptionsType:
-                        break;
-                    case characterShapeType:
-                        break;
-                    case numberCaseType:
-                        break;
-                    case textSpacingType:
-                        break;
-                    case transliterationType:
-                        break;
-                    case annotationType:
-                        if ((typoFlags & LE_NALT_FEATURE_FLAG) && featureSetting == circleAnnotationSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case kanaSpacingType:
-                        break;
-                    case ideographicSpacingType:
-                        break;
-                    case rubyKanaType:
-                        if ((typoFlags & LE_RUBY_FEATURE_FLAG) && featureSetting == rubyKanaOnSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case cjkRomanSpacingType:
-                        break;
-                    default:
-                        break;
-                }
-            }
-        }
-
-        for (subtable = 0;  LE_SUCCESS(success) && subtable < nSubtables; subtable++) {
-            if(subtable>0)  {
-              le_uint32 length = SWAPL(subtableHeader->length);
-              if (length & 0x03) { // incorrect alignment for 32 bit tables
-                  success = LE_MEMORY_ALLOCATION_ERROR; // as good a choice as any
-                  return;
-              }
-              subtableHeader.addOffset(length, success); // Don't addOffset for the last entry.
-              if (LE_FAILURE(success)) break;
-            }
-            le_uint32 coverage = SWAPL(subtableHeader->coverage);
-            FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-            // should check coverage more carefully...
-            if (((coverage & scfIgnoreVt2) || !(coverage & scfVertical2)) && (subtableFeatures & flag) != 0) {
-              subtableHeader->process(subtableHeader, glyphStorage, success);
-            }
-        }
-    }
-}
-
-void MorphSubtableHeader2::process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-    SubtableProcessor2 *processor = NULL;
-
-    if (LE_FAILURE(success)) return;
-
-    switch (SWAPL(coverage) & scfTypeMask2)
-    {
-    case mstIndicRearrangement:
-        processor = new IndicRearrangementProcessor2(base, success);
-        break;
-
-    case mstContextualGlyphSubstitution:
-        processor = new ContextualGlyphSubstitutionProcessor2(base, success);
-        break;
-
-    case mstLigatureSubstitution:
-        processor = new LigatureSubstitutionProcessor2(base, success);
-        break;
-
-    case mstReservedUnused:
-        break;
-
-    case mstNonContextualGlyphSubstitution:
-        processor = NonContextualGlyphSubstitutionProcessor2::createInstance(base, success);
-        break;
-
-
-    case mstContextualGlyphInsertion:
-        processor = new ContextualGlyphInsertionProcessor2(base, success);
-        break;
-
-    default:
-        return;
-        break; /*NOTREACHED*/
-    }
-
-    if (processor != NULL) {
-      processor->process(glyphStorage, success);
-        delete processor;
-    } else {
-      if(LE_SUCCESS(success)) {
-        success = LE_MEMORY_ALLOCATION_ERROR; // because ptr is null and we didn't break out.
-      }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MultipleSubstSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "MultipleSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 MultipleSubstitutionSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-
-    // If there's a filter, we only want to do the
-    // substitution if the *input* glyphs doesn't
-    // exist.
-    //
-    // FIXME: is this always the right thing to do?
-    // FIXME: should this only be done for a non-zero
-    //        glyphCount?
-    if (filter != NULL && filter->accept(glyph, success)) {
-        return 0;
-    }
-    if(LE_FAILURE(success)) return 0;
-
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-    le_uint16 seqCount = SWAPW(sequenceCount);
-    LEReferenceToArrayOf<Offset>
-        sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0 && coverageIndex < seqCount) {
-        Offset sequenceTableOffset = SWAPW(sequenceTableOffsetArray[coverageIndex]);
-        LEReferenceTo<SequenceTable>   sequenceTable(base, success, sequenceTableOffset);
-        if (LE_FAILURE(success)) {
-            return 0;
-        }
-        le_uint16 glyphCount = SWAPW(sequenceTable->glyphCount);
-        LEReferenceToArrayOf<Offset>
-            substituteArrayRef(base, success, sequenceTable->substituteArray, glyphCount);
-
-        if (glyphCount == 0) {
-            glyphIterator->setCurrGlyphID(0xFFFF);
-            return 1;
-        } else if (glyphCount == 1) {
-            TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[0]);
-
-            if (filter != NULL && ! filter->accept(LE_SET_GLYPH(glyph, substitute), success)) {
-                return 0;
-            }
-
-            glyphIterator->setCurrGlyphID(substitute);
-            return 1;
-        } else {
-            // If there's a filter, make sure all of the output glyphs
-            // exist.
-            if (filter != NULL) {
-                for (le_int32 i = 0; i < glyphCount; i += 1) {
-                    TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
-
-                    if (! filter->accept(substitute, success)) {
-                        return 0;
-                    }
-                }
-            }
-
-            LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount, success);
-            if (LE_FAILURE(success)) {
-                return 0;
-            }
-
-            le_int32 insert = 0, direction = 1;
-
-            if (glyphIterator->isRightToLeft()) {
-                insert = glyphCount - 1;
-                direction = -1;
-            }
-
-            for (le_int32 i = 0; i < glyphCount; i += 1) {
-                TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
-
-                newGlyphs[insert] = LE_SET_GLYPH(glyph, substitute);
-                insert += direction;
-            }
-
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/MultipleSubstSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#ifndef __MULTIPLESUBSTITUTIONSUBTABLES_H
-#define __MULTIPLESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SequenceTable
-{
-    le_uint16 glyphCount;
-    TTGlyphID substituteArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SequenceTable, substituteArray)
-
-struct MultipleSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 sequenceCount;
-    Offset    sequenceTableOffsetArray[ANY_NUMBER];
-
-    le_uint32 process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(MultipleSubstitutionSubtable, sequenceTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubst.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTION_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LookupTables.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct NonContextualGlyphSubstitutionHeader : MorphSubtableHeader
-{
-    LookupTable table;
-};
-
-struct NonContextualGlyphSubstitutionHeader2 : MorphSubtableHeader2
-{
-    LookupTable table;
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SimpleArrayProcessor.h"
-#include "SegmentSingleProcessor.h"
-#include "SegmentArrayProcessor.h"
-#include "SingleTableProcessor.h"
-#include "TrimmedArrayProcessor.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor()
-{
-}
-
-NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor(morphSubtableHeader, success)
-{
-}
-
-NonContextualGlyphSubstitutionProcessor::~NonContextualGlyphSubstitutionProcessor()
-{
-}
-
-SubtableProcessor *NonContextualGlyphSubstitutionProcessor::createInstance(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-
-  if(LE_FAILURE(success)) return NULL;
-
-  switch (SWAPW(header->table.format)) {
-    case ltfSimpleArray:
-      return new SimpleArrayProcessor(morphSubtableHeader, success);
-
-    case ltfSegmentSingle:
-      return new SegmentSingleProcessor(morphSubtableHeader, success);
-
-    case ltfSegmentArray:
-      return new SegmentArrayProcessor(morphSubtableHeader, success);
-
-    case ltfSingleTable:
-      return new SingleTableProcessor(morphSubtableHeader, success);
-
-    case ltfTrimmedArray:
-      return new TrimmedArrayProcessor(morphSubtableHeader, success);
-
-    default:
-        return NULL;
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class NonContextualGlyphSubstitutionProcessor : public SubtableProcessor
-{
-public:
-  virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-
-    static SubtableProcessor *createInstance(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-protected:
-    NonContextualGlyphSubstitutionProcessor();
-    NonContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &status);
-
-    virtual ~NonContextualGlyphSubstitutionProcessor();
-
-private:
-    NonContextualGlyphSubstitutionProcessor(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
-    NonContextualGlyphSubstitutionProcessor &operator=(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SimpleArrayProcessor2.h"
-#include "SegmentSingleProcessor2.h"
-#include "SegmentArrayProcessor2.h"
-#include "SingleTableProcessor2.h"
-#include "TrimmedArrayProcessor2.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-NonContextualGlyphSubstitutionProcessor2::NonContextualGlyphSubstitutionProcessor2()
-{
-}
-
-NonContextualGlyphSubstitutionProcessor2::NonContextualGlyphSubstitutionProcessor2(
-     const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor2(morphSubtableHeader, success)
-{
-}
-
-NonContextualGlyphSubstitutionProcessor2::~NonContextualGlyphSubstitutionProcessor2()
-{
-}
-
-SubtableProcessor2 *NonContextualGlyphSubstitutionProcessor2::createInstance(
-      const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-{
-    const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-    if(LE_FAILURE(success)) return NULL;
-
-    switch (SWAPW(header->table.format))
-    {
-    case ltfSimpleArray:
-      return new SimpleArrayProcessor2(morphSubtableHeader, success);
-
-    case ltfSegmentSingle:
-      return new SegmentSingleProcessor2(morphSubtableHeader, success);
-
-    case ltfSegmentArray:
-      return new SegmentArrayProcessor2(morphSubtableHeader, success);
-
-    case ltfSingleTable:
-      return new SingleTableProcessor2(morphSubtableHeader, success);
-
-    case ltfTrimmedArray:
-      return new TrimmedArrayProcessor2(morphSubtableHeader, success);
-
-    default:
-        return NULL;
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/NonContextualGlyphSubstProc2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class NonContextualGlyphSubstitutionProcessor2 : public SubtableProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-
-    static SubtableProcessor2 *createInstance(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-protected:
-    NonContextualGlyphSubstitutionProcessor2();
-    NonContextualGlyphSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~NonContextualGlyphSubstitutionProcessor2();
-
-private:
-    NonContextualGlyphSubstitutionProcessor2(const NonContextualGlyphSubstitutionProcessor2 &other); // forbid copying of this class
-    NonContextualGlyphSubstitutionProcessor2 &operator=(const NonContextualGlyphSubstitutionProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/OpenTypeLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,587 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "CanonShaping.h"
-#include "OpenTypeLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "LEGlyphStorage.h"
-#include "GlyphPositionAdjustments.h"
-
-#include "GDEFMarkFilter.h"
-
-#include "KernTable.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine)
-
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define ligaFeatureTag LE_LIGA_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-#define markFeatureTag LE_MARK_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-
-#define dligFeatureTag LE_DLIG_FEATURE_TAG
-#define rligFeatureTag LE_RLIG_FEATURE_TAG
-#define paltFeatureTag LE_PALT_FEATURE_TAG
-
-#define hligFeatureTag LE_HLIG_FEATURE_TAG
-#define smcpFeatureTag LE_SMCP_FEATURE_TAG
-#define fracFeatureTag LE_FRAC_FEATURE_TAG
-#define afrcFeatureTag LE_AFRC_FEATURE_TAG
-#define zeroFeatureTag LE_ZERO_FEATURE_TAG
-#define swshFeatureTag LE_SWSH_FEATURE_TAG
-#define cswhFeatureTag LE_CSWH_FEATURE_TAG
-#define saltFeatureTag LE_SALT_FEATURE_TAG
-#define naltFeatureTag LE_NALT_FEATURE_TAG
-#define rubyFeatureTag LE_RUBY_FEATURE_TAG
-#define ss01FeatureTag LE_SS01_FEATURE_TAG
-#define ss02FeatureTag LE_SS02_FEATURE_TAG
-#define ss03FeatureTag LE_SS03_FEATURE_TAG
-#define ss04FeatureTag LE_SS04_FEATURE_TAG
-#define ss05FeatureTag LE_SS05_FEATURE_TAG
-#define ss06FeatureTag LE_SS06_FEATURE_TAG
-#define ss07FeatureTag LE_SS07_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-#define ligaFeatureMask 0x40000000UL
-#define cligFeatureMask 0x20000000UL
-#define kernFeatureMask 0x10000000UL
-#define paltFeatureMask 0x08000000UL
-#define markFeatureMask 0x04000000UL
-#define mkmkFeatureMask 0x02000000UL
-#define loclFeatureMask 0x01000000UL
-#define caltFeatureMask 0x00800000UL
-
-#define dligFeatureMask 0x00400000UL
-#define rligFeatureMask 0x00200000UL
-#define hligFeatureMask 0x00100000UL
-#define smcpFeatureMask 0x00080000UL
-#define fracFeatureMask 0x00040000UL
-#define afrcFeatureMask 0x00020000UL
-#define zeroFeatureMask 0x00010000UL
-#define swshFeatureMask 0x00008000UL
-#define cswhFeatureMask 0x00004000UL
-#define saltFeatureMask 0x00002000UL
-#define naltFeatureMask 0x00001000UL
-#define rubyFeatureMask 0x00000800UL
-#define ss01FeatureMask 0x00000400UL
-#define ss02FeatureMask 0x00000200UL
-#define ss03FeatureMask 0x00000100UL
-#define ss04FeatureMask 0x00000080UL
-#define ss05FeatureMask 0x00000040UL
-#define ss06FeatureMask 0x00000020UL
-#define ss07FeatureMask 0x00000010UL
-
-#define minimalFeatures     (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask | loclFeatureMask | caltFeatureMask)
-
-static const FeatureMap featureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {ligaFeatureTag, ligaFeatureMask},
-    {cligFeatureTag, cligFeatureMask},
-    {kernFeatureTag, kernFeatureMask},
-    {paltFeatureTag, paltFeatureMask},
-    {markFeatureTag, markFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-    {loclFeatureTag, loclFeatureMask},
-    {caltFeatureTag, caltFeatureMask},
-    {hligFeatureTag, hligFeatureMask},
-    {smcpFeatureTag, smcpFeatureMask},
-    {fracFeatureTag, fracFeatureMask},
-    {afrcFeatureTag, afrcFeatureMask},
-    {zeroFeatureTag, zeroFeatureMask},
-    {swshFeatureTag, swshFeatureMask},
-    {cswhFeatureTag, cswhFeatureMask},
-    {saltFeatureTag, saltFeatureMask},
-    {naltFeatureTag, naltFeatureMask},
-    {rubyFeatureTag, rubyFeatureMask},
-    {ss01FeatureTag, ss01FeatureMask},
-    {ss02FeatureTag, ss02FeatureMask},
-    {ss03FeatureTag, ss03FeatureMask},
-    {ss04FeatureTag, ss04FeatureMask},
-    {ss05FeatureTag, ss05FeatureMask},
-    {ss06FeatureTag, ss06FeatureMask},
-    {ss07FeatureTag, ss07FeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                     le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureMask(minimalFeatures),
-      fFeatureMap(featureMap), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
-      fGSUBTable(gsubTable),
-      fGDEFTable(fontInstance, LE_GDEF_TABLE_TAG, success),
-      fGPOSTable(fontInstance, LE_GPOS_TABLE_TAG, success), fSubstitutionFilter(NULL)
-{
-    applyTypoFlags();
-
-    setScriptAndLanguageTags();
-
-// JK patch, 2008-05-30 - see Sinhala bug report and LKLUG font
-//    if (gposTable != NULL && gposTable->coversScriptAndLanguage(fScriptTag, fLangSysTag)) {
-    if (!fGPOSTable.isEmpty()&& !fGPOSTable->coversScript(fGPOSTable, fScriptTag, success)) {
-      fGPOSTable.clear(); // already loaded
-    }
-}
-
-void OpenTypeLayoutEngine::applyTypoFlags() {
-    const le_int32& typoFlags = fTypoFlags;
-    const LEFontInstance *fontInstance = fFontInstance;
-
-    switch (typoFlags & (LE_SS01_FEATURE_FLAG
-                         | LE_SS02_FEATURE_FLAG
-                         | LE_SS03_FEATURE_FLAG
-                         | LE_SS04_FEATURE_FLAG
-                         | LE_SS05_FEATURE_FLAG
-                         | LE_SS06_FEATURE_FLAG
-                         | LE_SS07_FEATURE_FLAG)) {
-        case LE_SS01_FEATURE_FLAG:
-            fFeatureMask |= ss01FeatureMask;
-            break;
-        case LE_SS02_FEATURE_FLAG:
-            fFeatureMask |= ss02FeatureMask;
-            break;
-        case LE_SS03_FEATURE_FLAG:
-            fFeatureMask |= ss03FeatureMask;
-            break;
-        case LE_SS04_FEATURE_FLAG:
-            fFeatureMask |= ss04FeatureMask;
-            break;
-        case LE_SS05_FEATURE_FLAG:
-            fFeatureMask |= ss05FeatureMask;
-            break;
-        case LE_SS06_FEATURE_FLAG:
-            fFeatureMask |= ss06FeatureMask;
-            break;
-        case LE_SS07_FEATURE_FLAG:
-            fFeatureMask |= ss07FeatureMask;
-            break;
-    }
-
-    if (typoFlags & LE_Kerning_FEATURE_FLAG) {
-      fFeatureMask |= (kernFeatureMask | paltFeatureMask);
-      // Convenience.
-    }
-    if (typoFlags & LE_Ligatures_FEATURE_FLAG) {
-      fFeatureMask |= (ligaFeatureMask | cligFeatureMask);
-      // Convenience TODO: should add: .. dligFeatureMask | rligFeatureMask ?
-    }
-    if (typoFlags & LE_CLIG_FEATURE_FLAG) fFeatureMask |= cligFeatureMask;
-    if (typoFlags & LE_DLIG_FEATURE_FLAG) fFeatureMask |= dligFeatureMask;
-    if (typoFlags & LE_HLIG_FEATURE_FLAG) fFeatureMask |= hligFeatureMask;
-    if (typoFlags & LE_LIGA_FEATURE_FLAG) fFeatureMask |= ligaFeatureMask;
-    if (typoFlags & LE_RLIG_FEATURE_FLAG) fFeatureMask |= rligFeatureMask;
-    if (typoFlags & LE_SMCP_FEATURE_FLAG) fFeatureMask |= smcpFeatureMask;
-    if (typoFlags & LE_FRAC_FEATURE_FLAG) fFeatureMask |= fracFeatureMask;
-    if (typoFlags & LE_AFRC_FEATURE_FLAG) fFeatureMask |= afrcFeatureMask;
-    if (typoFlags & LE_ZERO_FEATURE_FLAG) fFeatureMask |= zeroFeatureMask;
-    if (typoFlags & LE_SWSH_FEATURE_FLAG) fFeatureMask |= swshFeatureMask;
-    if (typoFlags & LE_CSWH_FEATURE_FLAG) fFeatureMask |= cswhFeatureMask;
-    if (typoFlags & LE_SALT_FEATURE_FLAG) fFeatureMask |= saltFeatureMask;
-    if (typoFlags & LE_RUBY_FEATURE_FLAG) fFeatureMask |= rubyFeatureMask;
-    if (typoFlags & LE_NALT_FEATURE_FLAG) {
-      // Mutually exclusive with ALL other features. http://www.microsoft.com/typography/otspec/features_ko.htm
-      fFeatureMask = naltFeatureMask;
-    }
-
-    if (typoFlags & LE_CHAR_FILTER_FEATURE_FLAG) {
-      // This isn't a font feature, but requests a Char Substitution Filter
-      fSubstitutionFilter = new CharSubstitutionFilter(fontInstance);
-    }
-
-}
-
-void OpenTypeLayoutEngine::reset()
-{
-    // NOTE: if we're called from
-    // the destructor, LayoutEngine;:reset()
-    // will have been called already by
-    // LayoutEngine::~LayoutEngine()
-    LayoutEngine::reset();
-}
-
-OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                       le_int32 typoFlags, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureOrder(FALSE),
-      fGSUBTable(), fGDEFTable(), fGPOSTable(), fSubstitutionFilter(NULL)
-{
-  applyTypoFlags();
-  setScriptAndLanguageTags();
-}
-
-OpenTypeLayoutEngine::~OpenTypeLayoutEngine()
-{
-    if (fTypoFlags & LE_CHAR_FILTER_FEATURE_FLAG) {
-        delete fSubstitutionFilter;
-        fSubstitutionFilter = NULL;
-    }
-
-    reset();
-}
-
-LETag OpenTypeLayoutEngine::getScriptTag(le_int32 scriptCode)
-{
-    if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
-        return 0xFFFFFFFF;
-    }
-    return scriptTags[scriptCode];
-}
-
-LETag OpenTypeLayoutEngine::getV2ScriptTag(le_int32 scriptCode)
-{
-        switch (scriptCode) {
-                case bengScriptCode :    return bng2ScriptTag;
-                case devaScriptCode :    return dev2ScriptTag;
-                case gujrScriptCode :    return gjr2ScriptTag;
-                case guruScriptCode :    return gur2ScriptTag;
-                case kndaScriptCode :    return knd2ScriptTag;
-                case mlymScriptCode :    return mlm2ScriptTag;
-                case oryaScriptCode :    return ory2ScriptTag;
-                case tamlScriptCode :    return tml2ScriptTag;
-                case teluScriptCode :    return tel2ScriptTag;
-                default:                 return nullScriptTag;
-        }
-}
-
-LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode)
-{
-    if (languageCode < 0 || languageCode >= languageCodeCount) {
-        return 0xFFFFFFFF;
-    }
-
-    return languageTags[languageCode];
-}
-
-void OpenTypeLayoutEngine::setScriptAndLanguageTags()
-{
-    fScriptTag  = getScriptTag(fScriptCode);
-    fScriptTagV2 = getV2ScriptTag(fScriptCode);
-    fLangSysTag = getLangSysTag(fLanguageCode);
-}
-
-le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    // This is the cheapest way to get mark reordering only for Hebrew.
-    // We could just do the mark reordering for all scripts, but most
-    // of them probably don't need it... Another option would be to
-    // add a HebrewOpenTypeLayoutEngine subclass, but the only thing it
-    // would need to do is mark reordering, so that seems like overkill.
-    if (fScriptCode == hebrScriptCode) {
-        outChars = LE_NEW_ARRAY(LEUnicode, count);
-
-        if (outChars == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-    if (LE_FAILURE(success)) {
-            LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-        CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
-    }
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    for (le_int32 i = 0; i < count; i += 1) {
-        glyphStorage.setAuxData(i, fFeatureMask, success);
-    }
-
-    return count;
-}
-
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                                               LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (fGSUBTable.isValid()) {
-      if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fGSUBTable, fScriptTagV2, fLangSysTag, success)) {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-
-        } else {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-    }
-    }
-
-    return count;
-}
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 OpenTypeLayoutEngine::glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft,
-                                               LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if ( count < 0 || max < 0 ) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    if (fGSUBTable.isValid()) {
-       if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fGSUBTable,fScriptTagV2,fLangSysTag,success)) {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-
-        } else {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-        }
-    }
-
-    return count;
-}
-le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    glyphStorage.adoptGlyphArray(tempGlyphStorage);
-    glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
-    glyphStorage.adoptAuxDataArray(tempGlyphStorage);
-    glyphStorage.adoptGlyphCount(tempGlyphStorage);
-
-    return glyphStorage.getGlyphCount();
-}
-
-le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    LEUnicode *outChars = NULL;
-    LEGlyphStorage fakeGlyphStorage;
-    le_int32 outCharCount, outGlyphCount;
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (outChars != NULL) {
-        // le_int32 fakeGlyphCount =
-        glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
-        LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
-        //adjustGlyphs(outChars, 0, outCharCount, rightToLeft, fakeGlyphs, fakeGlyphCount);
-    } else {
-        // le_int32 fakeGlyphCount =
-        glyphProcessing(chars, offset, count, max, rightToLeft, fakeGlyphStorage, success);
-        //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount);
-    }
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
-
-    return outGlyphCount;
-}
-
-// apply GPOS table, if any
-void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    _LETRACE("OTLE::adjustGPOS");
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    if (glyphCount == 0) {
-        return;
-    }
-
-    if (!fGPOSTable.isEmpty()) {
-        GlyphPositionAdjustments *adjustments = new GlyphPositionAdjustments(glyphCount);
-        le_int32 i;
-
-        if (adjustments == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-#if 0
-        // Don't need to do this if we allocate
-        // the adjustments array w/ new...
-        for (i = 0; i < glyphCount; i += 1) {
-            adjustments->setXPlacement(i, 0);
-            adjustments->setYPlacement(i, 0);
-
-            adjustments->setXAdvance(i, 0);
-            adjustments->setYAdvance(i, 0);
-
-            adjustments->setBaseOffset(i, -1);
-        }
-#endif
-
-        if (!fGPOSTable.isEmpty()) {
-            if (fScriptTagV2 != nullScriptTag &&
-                fGPOSTable->coversScriptAndLanguage(fGPOSTable, fScriptTagV2,fLangSysTag,success)) {
-              _LETRACE("OTLE::process [0]");
-              fGPOSTable->process(fGPOSTable, glyphStorage, adjustments, reverse, fScriptTagV2, fLangSysTag,
-                                  fGDEFTable, success, fFontInstance, fFeatureMap, fFeatureMapCount, fFeatureOrder);
-
-            } else {
-              _LETRACE("OTLE::process [1]");
-              fGPOSTable->process(fGPOSTable, glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag,
-                                  fGDEFTable, success, fFontInstance, fFeatureMap, fFeatureMapCount, fFeatureOrder);
-            }
-        } else if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-          _LETRACE("OTLE::kerning");
-          LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-          KernTable kt(kernTable, success);
-          kt.process(glyphStorage, success);
-        }
-
-        float xAdjust = 0, yAdjust = 0;
-
-        for (i = 0; i < glyphCount; i += 1) {
-            float xAdvance   = adjustments->getXAdvance(i);
-            float yAdvance   = adjustments->getYAdvance(i);
-            float xPlacement = 0;
-            float yPlacement = 0;
-
-
-#if 0
-            // This is where separate kerning adjustments
-            // should get applied.
-            xAdjust += xKerning;
-            yAdjust += yKerning;
-#endif
-
-            for (le_int32 base = i; base >= 0; base = adjustments->getBaseOffset(base)) {
-                xPlacement += adjustments->getXPlacement(base);
-                yPlacement += adjustments->getYPlacement(base);
-            }
-
-            xPlacement = fFontInstance->xUnitsToPoints(xPlacement);
-            yPlacement = fFontInstance->yUnitsToPoints(yPlacement);
-            _LETRACE("OTLE GPOS: #%d, (%.2f,%.2f)", i, xPlacement, yPlacement);
-            glyphStorage.adjustPosition(i, xAdjust + xPlacement, -(yAdjust + yPlacement), success);
-
-            xAdjust += fFontInstance->xUnitsToPoints(xAdvance);
-            yAdjust += fFontInstance->yUnitsToPoints(yAdvance);
-        }
-
-        glyphStorage.adjustPosition(glyphCount, xAdjust, -yAdjust, success);
-
-        delete adjustments;
-    } else {
-        // if there was no GPOS table, maybe there's non-OpenType kerning we can use
-        LayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
-    }
-
-    LEGlyphID zwnj  = fFontInstance->mapCharToGlyph(0x200C);
-
-    if (zwnj != 0x0000) {
-        for (le_int32 g = 0; g < glyphCount; g += 1) {
-            LEGlyphID glyph = glyphStorage[g];
-
-            if (glyph == zwnj) {
-                glyphStorage[g] = LE_SET_GLYPH(glyph, 0xFFFF);
-            }
-        }
-    }
-
-#if 0
-    // Don't know why this is here...
-    LE_DELETE_ARRAY(fFeatureTags);
-    fFeatureTags = NULL;
-#endif
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/OpenTypeLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,421 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPELAYOUTENGINE_H
-#define __OPENTYPELAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-#include "LETableReference.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * OpenTypeLayoutEngine implements complex text layout for OpenType fonts - that is
- * fonts which have GSUB and GPOS tables associated with them. In order to do this,
- * the glyph processsing step described for LayoutEngine is further broken into three
- * steps:
- *
- * 1) Character processing - this step analyses the characters and assigns a list of OpenType
- *    feature tags to each one. It may also change, remove or add characters, and change
- *    their order.
- *
- * 2) Glyph processing - This step performs character to glyph mapping,and uses the GSUB
- *    table associated with the font to perform glyph substitutions, such as ligature substitution.
- *
- * 3) Glyph post processing - in cases where the font doesn't directly contain a GSUB table,
- *    the previous two steps may have generated "fake" glyph indices to use with a "canned" GSUB
- *    table. This step turns those glyph indices into actual font-specific glyph indices, and may
- *    perform any other adjustments required by the previous steps.
- *
- * OpenTypeLayoutEngine will also use the font's GPOS table to apply position adjustments
- * such as kerning and accent positioning.
- *
- * @see LayoutEngine
- *
- * @internal
- */
-class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of OpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                         le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~OpenTypeLayoutEngine();
-
-    /**
-     * A convenience method used to convert the script code into
-     * the four byte script tag required by OpenType.
-         * For Indic languages where multiple script tags exist,
-         * the version 1 (old style) tag is returned.
-     *
-     * @param scriptCode - the script code
-     *
-     * @return the four byte script tag
-     *
-     * @internal
-     */
-    static LETag getScriptTag(le_int32 scriptCode);
-    /**
-     * A convenience method used to convert the script code into
-     * the four byte script tag required by OpenType.
-         * For Indic languages where multiple script tags exist,
-         * the version 2 tag is returned.
-     *
-     * @param scriptCode - the script code
-     *
-     * @return the four byte script tag
-     *
-     * @internal
-     */
-    static LETag getV2ScriptTag(le_int32 scriptCode);
-
-    /**
-     * A convenience method used to convert the langauge code into
-     * the four byte langauge tag required by OpenType.
-     *
-     * @param languageCode - the language code
-     *
-     * @return the four byte language tag
-     *
-     * @internal
-     */
-    static LETag getLangSysTag(le_int32 languageCode);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-    /**
-     * The array of language tags, indexed by language code.
-     *
-     * @internal
-     */
-    static const LETag languageTags[];
-
-private:
-
-    /**
-     * This method is used by the constructors to convert the script
-     * and language codes to four byte tags and save them.
-     */
-    void setScriptAndLanguageTags();
-
-    /**
-     * The array of script tags, indexed by script code.
-     */
-    static const LETag scriptTags[];
-
-    /**
-     * apply the typoflags. Only called by the c'tors.
-     */
-    void applyTypoFlags();
-
-protected:
-    /**
-     * A set of "default" features. The default characterProcessing method
-     * will apply all of these features to every glyph.
-     *
-     * @internal
-     */
-    FeatureMask fFeatureMask;
-
-    /**
-     * A set of mappings from feature tags to feature masks. These may
-     * be in the order in which the featues should be applied, but they
-     * don't need to be.
-     *
-     * @internal
-     */
-    const FeatureMap *fFeatureMap;
-
-    /**
-     * The length of the feature map.
-     *
-     * @internal
-     */
-    le_int32 fFeatureMapCount;
-
-    /**
-     * <code>TRUE</code> if the features in the
-     * feature map are in the order in which they
-     * must be applied.
-     *
-     * @internal
-     */
-    le_bool fFeatureOrder;
-
-    /**
-     * The address of the GSUB table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphSubstitutionTableHeader> fGSUBTable;
-
-    /**
-     * The address of the GDEF table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphDefinitionTableHeader> fGDEFTable;
-
-    /**
-     * The address of the GPOS table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphPositioningTableHeader> fGPOSTable;
-
-    /**
-     * An optional filter used to inhibit substitutions
-     * preformed by the GSUB table. This is used for some
-     * "canned" GSUB tables to restrict substitutions to
-     * glyphs that are in the font.
-     *
-     * @internal
-     */
-    LEGlyphFilter *fSubstitutionFilter;
-
-    /**
-     * The four byte script tag.
-     *
-     * @internal
-     */
-    LETag fScriptTag;
-
-    /**
-     * The four byte script tag for V2 fonts.
-     *
-     * @internal
-     */
-    LETag fScriptTagV2;
-
-    /**
-     * The four byte language tag
-     *
-     * @internal
-     */
-    LETag fLangSysTag;
-
-    /**
-     * This method does the OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters that differ from the input
-     * charcters due to insertions, deletions, or reorderings. In such cases, it will also
-     * generate an output character index array reflecting these changes.
-     *
-     * Subclasses must override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     *
-     * Output parameters:
-     * @param outChars - the output character array, if different from the input
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count (input character count if no change)
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-            LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does character to glyph mapping, and applies the GSUB table. The
-     * default implementation calls mapCharsToGlyphs and then applies the GSUB table,
-     * if there is one.
-     *
-     * Note that in the case of "canned" GSUB tables, the output glyph indices may be
-     * "fake" glyph indices that need to be converted to "real" glyph indices by the
-     * glyphPostProcessing method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     * @param featureTags - the feature tag array
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the output glyph index array
-     *
-     * Note: if the character index array was already set by the characterProcessing
-     * method, this method won't change it.
-     *
-     * @internal
-     */
-    virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    virtual le_int32 glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does any processing necessary to convert "fake"
-     * glyph indices used by the glyphProcessing method into "real" glyph
-     * indices which can be used to render the text. Note that in some
-     * cases, such as CDAC Indic fonts, several "real" glyphs may be needed
-     * to render one "fake" glyph.
-     *
-     * The default implementation of this method just returns the input glyph
-     * index and character index arrays, assuming that no "fake" glyph indices
-     * were needed to do GSUB processing.
-     *
-     * Input parameters:
-     * @param tempGlyphs - the input "fake" glyph index array
-     * @param tempCharIndices - the input "fake" character index array
-     * @param tempGlyphCount - the number of "fake" glyph indices
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyph indices in the output glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method applies the characterProcessing, glyphProcessing and glyphPostProcessing
-     * methods. Most subclasses will not need to override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the text is in a right to left directional run
-     *
-     * Output parameters:
-     * @param glyphs - the glyph index array
-     * @param charIndices - the character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @see LayoutEngine::computeGlyphs
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method uses the GPOS table, if there is one, to adjust the glyph positions.
-     *
-     * Input parameters:
-     * @param glyphs - the input glyph array
-     * @param glyphCount - the number of glyphs in the glyph array
-     * @param x - the starting X position
-     * @param y - the starting Y position
-     *
-     * Output parameters:
-     * @param positions - the output X and Y positions (two entries per glyph)
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method frees the feature tag array so that the
-     * OpenTypeLayoutEngine can be reused for different text.
-     * It is also called from our destructor.
-     *
-     * @internal
-     */
-    virtual void reset();
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/OpenTypeTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPETABLES_H
-#define __OPENTYPETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-typedef le_uint16 Offset;
-typedef le_uint8  ATag[4];
-typedef le_uint32 fixed32;
-
-#define LE_GLYPH_GROUP_MASK 0x00000001UL
-typedef le_uint32 FeatureMask;
-
-#define SWAPT(atag) ((LETag) (((atag[0]) << 24) + ((atag[1]) << 16) + ((atag[2]) << 8) + (atag[3])))
-
-struct TagAndOffsetRecord
-{
-    ATag   tag;
-    Offset offset;
-};
-
-struct GlyphRangeRecord
-{
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    le_int16  rangeValue;
-};
-
-struct FeatureMap
-{
-    LETag       tag;
-    FeatureMask mask;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/OpenTypeUtilities.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-//
-// Finds the high bit by binary searching
-// through the bits in n.
-//
-le_int8 OpenTypeUtilities::highBit(le_int32 value)
-{
-    if (value <= 0) {
-        return -32;
-    }
-
-    le_uint8 bit = 0;
-
-    if (value >= 1 << 16) {
-        value >>= 16;
-        bit += 16;
-    }
-
-    if (value >= 1 << 8) {
-        value >>= 8;
-        bit += 8;
-    }
-
-    if (value >= 1 << 4) {
-        value >>= 4;
-        bit += 4;
-    }
-
-    if (value >= 1 << 2) {
-        value >>= 2;
-        bit += 2;
-    }
-
-    if (value >= 1 << 1) {
-        value >>= 1;
-        bit += 1;
-    }
-
-    return bit;
-}
-
-
-Offset OpenTypeUtilities::getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return 0;
-  const TagAndOffsetRecord *r0 = (const TagAndOffsetRecord*)records.getAlias();
-
-  le_uint32 recordCount = records.getCount();
-  le_uint8 bit = highBit(recordCount);
-  le_int32 power = 1 << bit;
-  le_int32 extra = recordCount - power;
-  le_int32 probe = power;
-  le_int32 index = 0;
-
-  {
-    const ATag &aTag = (r0+extra)->tag;
-    if (SWAPT(aTag) <= tag) {
-      index = extra;
-    }
-  }
-
-  while (probe > (1 << 0)) {
-    probe >>= 1;
-
-    {
-      const ATag &aTag = (r0+index+probe)->tag;
-      if (SWAPT(aTag) <= tag) {
-        index += probe;
-      }
-    }
-  }
-
-  {
-    const ATag &aTag = (r0+index)->tag;
-    if (SWAPT(aTag) == tag) {
-      return SWAPW((r0+index)->offset);
-    }
-  }
-
-  return 0;
-}
-
-le_int32 OpenTypeUtilities::getGlyphRangeIndex(TTGlyphID glyphID, const LEReferenceToArrayOf<GlyphRangeRecord> &records, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return -1;
-
-    le_uint32 recordCount = records.getCount();
-    le_uint8 bit = highBit(recordCount);
-    le_int32 power = 1 << bit;
-    le_int32 extra = recordCount - power;
-    le_int32 probe = power;
-    le_int32 range = 0;
-
-    if (recordCount == 0) {
-      return -1;
-    }
-
-    if (SWAPW(records(extra,success).firstGlyph) <= glyphID) {
-        range = extra;
-    }
-
-    while (probe > (1 << 0) && LE_SUCCESS(success)) {
-        probe >>= 1;
-
-        if (SWAPW(records(range + probe,success).firstGlyph) <= glyphID) {
-            range += probe;
-        }
-    }
-
-    if (SWAPW(records(range,success).firstGlyph) <= glyphID && SWAPW(records(range,success).lastGlyph) >= glyphID) {
-        return range;
-    }
-
-    return -1;
-}
-
-le_int32 OpenTypeUtilities::search(le_uint32 value, const le_uint32 array[], le_int32 count)
-{
-    le_int32 power = 1 << highBit(count);
-    le_int32 extra = count - power;
-    le_int32 probe = power;
-    le_int32 index = 0;
-
-    if (value >= array[extra]) {
-        index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (value >= array[index + probe]) {
-            index += probe;
-        }
-    }
-
-    return index;
-}
-
-le_int32 OpenTypeUtilities::search(le_uint16 value, const le_uint16 array[], le_int32 count)
-{
-    le_int32 power = 1 << highBit(count);
-    le_int32 extra = count - power;
-    le_int32 probe = power;
-    le_int32 index = 0;
-
-    if (value >= array[extra]) {
-        index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (value >= array[index + probe]) {
-            index += probe;
-        }
-    }
-
-    return index;
-}
-
-//
-// Straight insertion sort from Knuth vol. III, pg. 81
-//
-void OpenTypeUtilities::sort(le_uint16 *array, le_int32 count)
-{
-    for (le_int32 j = 1; j < count; j += 1) {
-        le_int32 i;
-        le_uint16 v = array[j];
-
-        for (i = j - 1; i >= 0; i -= 1) {
-            if (v >= array[i]) {
-                break;
-            }
-
-            array[i + 1] = array[i];
-        }
-
-        array[i + 1] = v;
-    }
-}
-
-U_NAMESPACE_END
-
-#if LE_ASSERT_BAD_FONT
-#include <stdio.h>
-
-static const char *letagToStr(LETag tag, char *str) {
-  str[0]= 0xFF & (tag>>24);
-  str[1]= 0xFF & (tag>>16);
-  str[2]= 0xFF & (tag>>8);
-  str[3]= 0xFF & (tag>>0);
-  str[4]= 0;
-  return str;
-}
-
-U_CAPI void U_EXPORT2 _debug_LETableReference(const char *f, int l, const char *msg, const LETableReference *what, const void *ptr, size_t len) {
-  char tagbuf[5];
-
-  fprintf(stderr, "%s:%d: LETableReference@0x%p: ", f, l, what);
-  fprintf(stderr, msg, ptr, len);
-  fprintf(stderr, "\n");
-
-  for(int depth=0;depth<10&&(what!=NULL);depth++) {
-    for(int i=0;i<depth;i++) {
-      fprintf(stderr, " "); // indent
-    }
-    if(!what->isValid()) {
-      fprintf(stderr, "(invalid)");
-    }
-    fprintf(stderr, "@%p: tag (%s) font (0x%p), [0x%p+0x%lx]\n", what, letagToStr(what->getTag(), tagbuf), what->getFont(),
-            what->getAlias(), what->getLength());
-
-    what = what->getParent();
-  }
-}
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/OpenTypeUtilities.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPEUTILITIES_H
-#define __OPENTYPEUTILITIES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class OpenTypeUtilities /* not : public UObject because all methods are static */ {
-public:
-    static le_int8 highBit(le_int32 value);
-    static Offset getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success);
-#if LE_ENABLE_RAW
-    static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount) {
-      LEErrorCode success = LE_NO_ERROR;
-      LETableReference recordRef0((const le_uint8*)records);
-      LEReferenceToArrayOf<GlyphRangeRecord> recordRef(recordRef0, success, (size_t)0, recordCount);
-      return getGlyphRangeIndex(glyphID, recordRef, success);
-    }
-#endif
-    static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const LEReferenceToArrayOf<GlyphRangeRecord> &records, LEErrorCode &success);
-    static le_int32 search(le_uint16 value, const le_uint16 array[], le_int32 count);
-    static le_int32 search(le_uint32 value, const le_uint32 array[], le_int32 count);
-    static void sort(le_uint16 *array, le_int32 count);
-
-private:
-    OpenTypeUtilities() {} // private - forbid instantiation
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/PairPositioningSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "PairPositioningSubtables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 PairPositioningSubtable::process(const LEReferenceTo<PairPositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<PairPositioningFormat1Subtable> subtable(base, success, (const PairPositioningFormat1Subtable *) this);
-
-      if(LE_SUCCESS(success))
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-      else
-        return 0;
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<PairPositioningFormat2Subtable> subtable(base, success, (const PairPositioningFormat2Subtable *) this);
-
-      if(LE_SUCCESS(success))
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-      else
-        return 0;
-    }
-    default:
-      return 0;
-    }
-}
-
-le_uint32 PairPositioningFormat1Subtable::process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, firstGlyph, success);
-    GlyphIterator tempIterator(*glyphIterator);
-
-    LEReferenceToArrayOf<Offset> pairSetTableOffsetArrayRef(base, success, pairSetTableOffsetArray, SWAPW(pairSetCount));
-
-    if (LE_SUCCESS(success) && coverageIndex >= 0 && glyphIterator->next() && (le_uint32)coverageIndex < pairSetTableOffsetArrayRef.getCount()) {
-        Offset pairSetTableOffset = SWAPW(pairSetTableOffsetArray[coverageIndex]);
-        LEReferenceTo<PairSetTable> pairSetTable(base, success, pairSetTableOffset);
-        if( LE_FAILURE(success) ) return 0;
-        le_uint16 pairValueCount = SWAPW(pairSetTable->pairValueCount);
-        LEReferenceTo<PairValueRecord> pairValueRecordArray(pairSetTable, success, pairSetTable->pairValueRecordArray);
-        if( LE_FAILURE(success) ) return 0;
-        le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
-        le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
-        le_int16 recordSize = sizeof(PairValueRecord) - sizeof(ValueRecord) + valueRecord1Size + valueRecord2Size;
-        LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
-        LEReferenceTo<PairValueRecord> pairValueRecord;
-
-        if (pairValueCount != 0) {
-          pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph), pairValueRecordArray, pairValueCount, recordSize, success);
-        }
-
-        if (pairValueRecord.isEmpty() || LE_FAILURE(success)) {
-            return 0;
-        }
-
-        if (valueFormat1 != 0) {
-          pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), base, tempIterator, fontInstance, success);
-        }
-
-        if (valueFormat2 != 0) {
-          LEReferenceTo<ValueRecord> valueRecord2(base, success, ((char *) &pairValueRecord->valueRecord1 + valueRecord1Size));
-          if(LE_SUCCESS(success)) {
-            valueRecord2->adjustPosition(SWAPW(valueFormat2), base, *glyphIterator, fontInstance, success);
-          }
-        }
-
-        // back up glyphIterator so second glyph can be
-        // first glyph in the next pair
-        glyphIterator->prev();
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 PairPositioningFormat2Subtable::process(const LEReferenceTo<PairPositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, firstGlyph, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    GlyphIterator tempIterator(*glyphIterator);
-
-    if (coverageIndex >= 0 && glyphIterator->next()) {
-        LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
-        const LEReferenceTo<ClassDefinitionTable> classDef1(base, success, SWAPW(classDef1Offset));
-        const LEReferenceTo<ClassDefinitionTable> classDef2(base, success, SWAPW(classDef2Offset));
-        le_int32 class1 = classDef1->getGlyphClass(classDef1, firstGlyph, success);
-        le_int32 class2 = classDef2->getGlyphClass(classDef2, secondGlyph, success);
-        le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
-        le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
-        le_int16 class2RecordSize = valueRecord1Size + valueRecord2Size;
-        le_int16 class1RecordSize = class2RecordSize * SWAPW(class2Count);
-        const LEReferenceTo<Class1Record> class1Record(base, success, (const Class1Record *) ((char *) class1RecordArray + (class1RecordSize * class1)));
-        const LEReferenceTo<Class2Record> class2Record(base, success, (const Class2Record *) ((char *) class1Record->class2RecordArray + (class2RecordSize * class2)));
-
-        if( LE_SUCCESS(success) ) {
-          if (valueFormat1 != 0) {
-            class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), base, tempIterator, fontInstance, success);
-          }
-          if (valueFormat2 != 0) {
-            const LEReferenceTo<ValueRecord> valueRecord2(base, success, ((char *) &class2Record->valueRecord1) + valueRecord1Size);
-            LEReferenceTo<PairPositioningFormat2Subtable> thisRef(base, success, this);
-            if(LE_SUCCESS(success)) {
-              valueRecord2->adjustPosition(SWAPW(valueFormat2), thisRef, *glyphIterator, fontInstance, success);
-            }
-          }
-        }
-
-        // back up glyphIterator so second glyph can be
-        // first glyph in the next pair
-        glyphIterator->prev();
-        return 1;
-    }
-
-    return 0;
-}
-
-LEReferenceTo<PairValueRecord>
-PairPositioningFormat1Subtable::findPairValueRecord(TTGlyphID glyphID, LEReferenceTo<PairValueRecord>& records,
-                                                    le_uint16 recordCount,
-                                                    le_uint16 recordSize, LEErrorCode &success) const
-{
-#if 1
-        // The OpenType spec. says that the ValueRecord table is
-        // sorted by secondGlyph. Unfortunately, there are fonts
-        // around that have an unsorted ValueRecord table.
-        LEReferenceTo<PairValueRecord> record(records);
-
-        for(le_int32 r = 0; r < recordCount; r += 1) {
-          if (r > 0) {
-            record.addOffset(recordSize, success);
-          }
-          if(LE_FAILURE(success)) return LEReferenceTo<PairValueRecord>();
-          if (SWAPW(record->secondGlyph) == glyphID) {
-            return record;
-          }
-        }
-#else
-  #error dead code - not updated.
-    le_uint8 bit = OpenTypeUtilities::highBit(recordCount);
-    le_uint16 power = 1 << bit;
-    le_uint16 extra = (recordCount - power) * recordSize;
-    le_uint16 probe = power * recordSize;
-    const PairValueRecord *record = records;
-    const PairValueRecord *trial = (const PairValueRecord *) ((char *) record + extra);
-
-    if (SWAPW(trial->secondGlyph) <= glyphID) {
-        record = trial;
-    }
-
-    while (probe > recordSize) {
-        probe >>= 1;
-        trial = (const PairValueRecord *) ((char *) record + probe);
-
-        if (SWAPW(trial->secondGlyph) <= glyphID) {
-            record = trial;
-        }
-    }
-
-    if (SWAPW(record->secondGlyph) == glyphID) {
-        return record;
-    }
-#endif
-
-    return LEReferenceTo<PairValueRecord>();
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/PairPositioningSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __PAIRPOSITIONINGSUBTABLES_H
-#define __PAIRPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-// NOTE: ValueRecord has a variable size
-struct PairValueRecord
-{
-    TTGlyphID     secondGlyph;
-    ValueRecord valueRecord1;
-//  ValueRecord valueRecord2;
-};
-
-struct PairSetTable
-{
-    le_uint16       pairValueCount;
-    PairValueRecord pairValueRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(PairSetTable, pairValueRecordArray)
-
-struct PairPositioningSubtable : GlyphPositioningSubtable
-{
-    ValueFormat valueFormat1;
-    ValueFormat valueFormat2;
-
-    le_uint32  process(const LEReferenceTo<PairPositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct PairPositioningFormat1Subtable : PairPositioningSubtable
-{
-    le_uint16   pairSetCount;
-    Offset      pairSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-
-private:
-    LEReferenceTo<PairValueRecord> findPairValueRecord(TTGlyphID glyphID, LEReferenceTo<PairValueRecord> &records,
-        le_uint16 recordCount, le_uint16 recordSize, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(PairPositioningFormat1Subtable, pairSetTableOffsetArray)
-
-// NOTE: ValueRecord has a variable size
-struct Class2Record
-{
-    ValueRecord valueRecord1;
-//  ValueRecord valurRecord2;
-};
-
-struct Class1Record
-{
-    Class2Record class2RecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Class1Record, class2RecordArray)
-
-struct PairPositioningFormat2Subtable : PairPositioningSubtable
-{
-    Offset       classDef1Offset;
-    Offset       classDef2Offset;
-    le_uint16    class1Count;
-    le_uint16    class2Count;
-    Class1Record class1RecordArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<PairPositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(PairPositioningFormat2Subtable, class1RecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguage.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "ScriptAndLanguage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEReferenceTo<LangSysTable> ScriptTable::findLanguage(const LETableReference& base, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const
-{
-    le_uint16 count = SWAPW(langSysCount);
-    Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset);
-
-    if (count > 0) {
-      LEReferenceToArrayOf<TagAndOffsetRecord> langSysRecords(base, success, langSysRecordArray, count);
-      Offset foundOffset =
-        OpenTypeUtilities::getTagOffset(languageTag, langSysRecords, success);
-
-      if (foundOffset != 0 && LE_SUCCESS(success)) {
-        langSysTableOffset = foundOffset;
-      }
-    }
-
-    if (langSysTableOffset != 0) {
-      return LEReferenceTo<LangSysTable>(base, success, langSysTableOffset);
-    }
-
-    return LEReferenceTo<LangSysTable>();
-}
-
-LEReferenceTo<ScriptTable> ScriptListTable::findScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success) ) {
-      return LEReferenceTo<ScriptTable>(); // get out
-    }
-    /*
-     * There are some fonts that have a large, bogus value for scriptCount. To try
-     * and protect against this, we use the offset in the first scriptRecord,
-     * which we know has to be past the end of the scriptRecordArray, to compute
-     * a value which is greater than or equal to the actual script count.
-     *
-     * Note: normally, the first offset will point to just after the scriptRecordArray,
-     * but there's no guarantee of this, only that it's *after* the scriptRecordArray.
-     * Because of this, a binary serach isn't safe, because the new count may include
-     * data that's not actually in the scriptRecordArray and hence the array will appear
-     * to be unsorted.
-     */
-    le_uint16 count = SWAPW(scriptCount);
-
-    if (count == 0) {
-      return LEReferenceTo<ScriptTable>(); // no items, no search
-    }
-
-    // attempt to construct a ref with at least one element
-    LEReferenceToArrayOf<ScriptRecord> oneElementTable(base, success, &scriptRecordArray[0], 1);
-
-    if( LE_FAILURE(success) ) {
-      return LEReferenceTo<ScriptTable>(); // couldn't even read the first record - bad font.
-    }
-
-    le_uint16 limit = ((SWAPW(scriptRecordArray[0].offset) - sizeof(ScriptListTable)) / sizeof(scriptRecordArray)) + ANY_NUMBER;
-    Offset scriptTableOffset = 0;
-
-
-    if (count > limit) {
-        // the scriptCount value is bogus; do a linear search
-        // because limit may still be too large.
-        LEReferenceToArrayOf<ScriptRecord> scriptRecordArrayRef(base, success, &scriptRecordArray[0], limit);
-        for(le_int32 s = 0; (s < limit)&&LE_SUCCESS(success); s += 1) {
-          if (SWAPT(scriptRecordArrayRef(s,success).tag) == scriptTag) {
-            scriptTableOffset = SWAPW(scriptRecordArrayRef(s,success).offset);
-            break;
-          }
-        }
-    } else {
-      LEReferenceToArrayOf<ScriptRecord> scriptRecordArrayRef(base, success, &scriptRecordArray[0], count);
-
-      scriptTableOffset = OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArrayRef, success);
-    }
-
-    if (scriptTableOffset != 0) {
-      return LEReferenceTo<ScriptTable>(base, success, scriptTableOffset);
-    }
-
-  return LEReferenceTo<ScriptTable>();
-}
-
-LEReferenceTo<LangSysTable>  ScriptListTable::findLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const
-{
-  const LEReferenceTo<ScriptTable> scriptTable = findScript(base, scriptTag, success);
-
-  if (scriptTable.isEmpty()) {
-    return LEReferenceTo<LangSysTable>();
-  }
-
-  return scriptTable->findLanguage(scriptTable, languageTag, success, exactMatch).reparent(base);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguage.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SCRIPTANDLANGUAGE_H
-#define __SCRIPTANDLANGUAGE_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-typedef TagAndOffsetRecord LangSysRecord;
-
-struct LangSysTable
-{
-    Offset    lookupOrderOffset;
-    le_uint16 reqFeatureIndex;
-    le_uint16 featureCount;
-    le_uint16 featureIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LangSysTable, featureIndexArray)
-
-struct ScriptTable
-{
-    Offset              defaultLangSysTableOffset;
-    le_uint16           langSysCount;
-    LangSysRecord       langSysRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<LangSysTable>  findLanguage(const LETableReference &base, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-LE_VAR_ARRAY(ScriptTable, langSysRecordArray)
-
-typedef TagAndOffsetRecord ScriptRecord;
-
-struct ScriptListTable
-{
-    le_uint16           scriptCount;
-    ScriptRecord        scriptRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<ScriptTable>   findScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const;
-  LEReferenceTo<LangSysTable>  findLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-LE_VAR_ARRAY(ScriptListTable, scriptRecordArray)
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguageTags.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,279 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
-#include "LEScripts.h"
-#include "LETypes.h"
-#include "ScriptAndLanguageTags.h"
-#include "OpenTypeLayoutEngine.h"
-
-U_NAMESPACE_BEGIN
-
-const LETag OpenTypeLayoutEngine::scriptTags[scriptCodeCount] = {
-    zyyyScriptTag, /* 'zyyy' (COMMON) */
-    zinhScriptTag, /* 'zinh' (INHERITED) */
-    arabScriptTag, /* 'arab' (ARABIC) */
-    armnScriptTag, /* 'armn' (ARMENIAN) */
-    bengScriptTag, /* 'beng' (BENGALI) */
-    bopoScriptTag, /* 'bopo' (BOPOMOFO) */
-    cherScriptTag, /* 'cher' (CHEROKEE) */
-    coptScriptTag, /* 'copt' (COPTIC) */
-    cyrlScriptTag, /* 'cyrl' (CYRILLIC) */
-    dsrtScriptTag, /* 'dsrt' (DESERET) */
-    devaScriptTag, /* 'deva' (DEVANAGARI) */
-    ethiScriptTag, /* 'ethi' (ETHIOPIC) */
-    georScriptTag, /* 'geor' (GEORGIAN) */
-    gothScriptTag, /* 'goth' (GOTHIC) */
-    grekScriptTag, /* 'grek' (GREEK) */
-    gujrScriptTag, /* 'gujr' (GUJARATI) */
-    guruScriptTag, /* 'guru' (GURMUKHI) */
-    haniScriptTag, /* 'hani' (HAN) */
-    hangScriptTag, /* 'hang' (HANGUL) */
-    hebrScriptTag, /* 'hebr' (HEBREW) */
-    hiraScriptTag, /* 'hira' (HIRAGANA) */
-    kndaScriptTag, /* 'knda' (KANNADA) */
-    kanaScriptTag, /* 'kana' (KATAKANA) */
-    khmrScriptTag, /* 'khmr' (KHMER) */
-    laooScriptTag, /* 'lao ' (LAO) */
-    latnScriptTag, /* 'latn' (LATIN) */
-    mlymScriptTag, /* 'mlym' (MALAYALAM) */
-    mongScriptTag, /* 'mong' (MONGOLIAN) */
-    mymrScriptTag, /* 'mymr' (MYANMAR) */
-    ogamScriptTag, /* 'ogam' (OGHAM) */
-    italScriptTag, /* 'ital' (OLD_ITALIC) */
-    oryaScriptTag, /* 'orya' (ORIYA) */
-    runrScriptTag, /* 'runr' (RUNIC) */
-    sinhScriptTag, /* 'sinh' (SINHALA) */
-    syrcScriptTag, /* 'syrc' (SYRIAC) */
-    tamlScriptTag, /* 'taml' (TAMIL) */
-    teluScriptTag, /* 'telu' (TELUGU) */
-    thaaScriptTag, /* 'thaa' (THAANA) */
-    thaiScriptTag, /* 'thai' (THAI) */
-    tibtScriptTag, /* 'tibt' (TIBETAN) */
-    cansScriptTag, /* 'cans' (CANADIAN_ABORIGINAL) */
-    yiiiScriptTag, /* 'yi  ' (YI) */
-    tglgScriptTag, /* 'tglg' (TAGALOG) */
-    hanoScriptTag, /* 'hano' (HANUNOO) */
-    buhdScriptTag, /* 'buhd' (BUHID) */
-    tagbScriptTag, /* 'tagb' (TAGBANWA) */
-    braiScriptTag, /* 'brai' (BRAILLE) */
-    cprtScriptTag, /* 'cprt' (CYPRIOT) */
-    limbScriptTag, /* 'limb' (LIMBU) */
-    linbScriptTag, /* 'linb' (LINEAR_B) */
-    osmaScriptTag, /* 'osma' (OSMANYA) */
-    shawScriptTag, /* 'shaw' (SHAVIAN) */
-    taleScriptTag, /* 'tale' (TAI_LE) */
-    ugarScriptTag, /* 'ugar' (UGARITIC) */
-    hrktScriptTag, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-    bugiScriptTag, /* 'bugi' (BUGINESE) */
-    glagScriptTag, /* 'glag' (GLAGOLITIC) */
-    kharScriptTag, /* 'khar' (KHAROSHTHI) */
-    syloScriptTag, /* 'sylo' (SYLOTI_NAGRI) */
-    taluScriptTag, /* 'talu' (NEW_TAI_LUE) */
-    tfngScriptTag, /* 'tfng' (TIFINAGH) */
-    xpeoScriptTag, /* 'xpeo' (OLD_PERSIAN) */
-    baliScriptTag, /* 'bali' (BALINESE) */
-    batkScriptTag, /* 'batk' (BATAK) */
-    blisScriptTag, /* 'blis' (BLIS) */
-    brahScriptTag, /* 'brah' (BRAHMI) */
-    chamScriptTag, /* 'cham' (CHAM) */
-    cirtScriptTag, /* 'cirt' (CIRT) */
-    cyrsScriptTag, /* 'cyrs' (CYRS) */
-    egydScriptTag, /* 'egyd' (EGYD) */
-    egyhScriptTag, /* 'egyh' (EGYH) */
-    egypScriptTag, /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-    geokScriptTag, /* 'geok' (GEOK) */
-    hansScriptTag, /* 'hans' (HANS) */
-    hantScriptTag, /* 'hant' (HANT) */
-    hmngScriptTag, /* 'hmng' (HMNG) */
-    hungScriptTag, /* 'hung' (HUNG) */
-    indsScriptTag, /* 'inds' (INDS) */
-    javaScriptTag, /* 'java' (JAVANESE) */
-    kaliScriptTag, /* 'kali' (KAYAH_LI) */
-    latfScriptTag, /* 'latf' (LATF) */
-    latgScriptTag, /* 'latg' (LATG) */
-    lepcScriptTag, /* 'lepc' (LEPCHA) */
-    linaScriptTag, /* 'lina' (LINA) */
-    mandScriptTag, /* 'mand' (MANDAIC) */
-    mayaScriptTag, /* 'maya' (MAYA) */
-    meroScriptTag, /* 'mero' (MEROITIC_HIEROGLYPHS) */
-    nkooScriptTag, /* 'nko ' (NKO) */
-    orkhScriptTag, /* 'orkh' (OLD_TURKIC) */
-    permScriptTag, /* 'perm' (PERM) */
-    phagScriptTag, /* 'phag' (PHAGS_PA) */
-    phnxScriptTag, /* 'phnx' (PHOENICIAN) */
-    plrdScriptTag, /* 'plrd' (MIAO/POLLARD) */
-    roroScriptTag, /* 'roro' (RORO) */
-    saraScriptTag, /* 'sara' (SARA) */
-    syreScriptTag, /* 'syre' (SYRE) */
-    syrjScriptTag, /* 'syrj' (SYRJ) */
-    syrnScriptTag, /* 'syrn' (SYRN) */
-    tengScriptTag, /* 'teng' (TENG) */
-    vaiiScriptTag, /* 'vai ' (VAI) */
-    vispScriptTag, /* 'visp' (VISP) */
-    xsuxScriptTag, /* 'xsux' (CUNEIFORM) */
-    zxxxScriptTag, /* 'zxxx' (ZXXX) */
-    zzzzScriptTag, /* 'zzzz' (UNKNOWN) */
-    cariScriptTag, /* 'cari' (CARIAN) */
-    jpanScriptTag, /* 'jpan' (JPAN) */
-    lanaScriptTag, /* 'lana' (TAI_THAM) */
-    lyciScriptTag, /* 'lyci' (LYCIAN) */
-    lydiScriptTag, /* 'lydi' (LYDIAN) */
-    olckScriptTag, /* 'olck' (OL_CHIKI) */
-    rjngScriptTag, /* 'rjng' (REJANG) */
-    saurScriptTag, /* 'saur' (SAURASHTRA) */
-    sgnwScriptTag, /* 'sgnw' (SGNW) */
-    sundScriptTag, /* 'sund' (SUNDANESE) */
-    moonScriptTag, /* 'moon' (MOON) */
-    mteiScriptTag, /* 'mtei' (MEETEI_MAYEK) */
-    armiScriptTag, /* 'armi' (IMPERIAL_ARAMAIC) */
-    avstScriptTag, /* 'avst' (AVESTAN) */
-    cakmScriptTag, /* 'cakm' (CHAKMA) */
-    koreScriptTag, /* 'kore' (KORE) */
-    kthiScriptTag, /* 'kthi' (KAITHI) */
-    maniScriptTag, /* 'mani' (MANI) */
-    phliScriptTag, /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-    phlpScriptTag, /* 'phlp' (PHLP) */
-    phlvScriptTag, /* 'phlv' (PHLV) */
-    prtiScriptTag, /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-    samrScriptTag, /* 'samr' (SAMARITAN) */
-    tavtScriptTag, /* 'tavt' (TAI_VIET) */
-    zmthScriptTag, /* 'zmth' (ZMTH) */
-    zsymScriptTag, /* 'zsym' (ZSYM) */
-    bamuScriptTag, /* 'bamu' (BAMUM) */
-    lisuScriptTag, /* 'lisu' (LISU) */
-    nkgbScriptTag, /* 'nkgb' (NKGB) */
-    sarbScriptTag, /* 'sarb' (OLD_SOUTH_ARABIAN) */
-    bassScriptTag, /* 'bass' (BASS) */
-    duplScriptTag, /* 'dupl' (DUPL) */
-    elbaScriptTag, /* 'elba' (ELBA) */
-    granScriptTag, /* 'gran' (GRAN) */
-    kpelScriptTag, /* 'kpel' (KPEL) */
-    lomaScriptTag, /* 'loma' (LOMA) */
-    mendScriptTag, /* 'mend' (MEND) */
-    mercScriptTag, /* 'merc' (MEROITIC_CURSIVE) */
-    narbScriptTag, /* 'narb' (NARB) */
-    nbatScriptTag, /* 'nbat' (NBAT) */
-    palmScriptTag, /* 'palm' (PALM) */
-    sindScriptTag, /* 'sind' (SIND) */
-    waraScriptTag, /* 'wara' (WARA) */
-    afakScriptTag, /* 'afak' (AFAK) */
-    jurcScriptTag, /* 'jurc' (JURC) */
-    mrooScriptTag, /* 'mroo' (MROO) */
-    nshuScriptTag, /* 'nshu' (NSHU) */
-    shrdScriptTag, /* 'shrd' (SHARADA) */
-    soraScriptTag, /* 'sora' (SORA_SOMPENG) */
-    takrScriptTag, /* 'takr' (TAKRI) */
-    tangScriptTag, /* 'tang' (TANG) */
-    woleScriptTag, /* 'wole' (WOLE) */
-    khojScriptTag, /* 'khoj' (KHOJ) */
-    tirhScriptTag  /* 'tirh' (TIRH) */
-};
-
-const LETag OpenTypeLayoutEngine::languageTags[] = {
-    nullLanguageTag, /* '' (null) */
-    araLanguageTag, /* 'ARA' (Arabic) */
-    asmLanguageTag, /* 'ASM' (Assamese) */
-    benLanguageTag, /* 'BEN' (Bengali) */
-    farLanguageTag, /* 'FAR' (Farsi) */
-    gujLanguageTag, /* 'GUJ' (Gujarati) */
-    hinLanguageTag, /* 'HIN' (Hindi) */
-    iwrLanguageTag, /* 'IWR' (Hebrew) */
-    jiiLanguageTag, /* 'JII' (Yiddish) */
-    janLanguageTag, /* 'JAN' (Japanese) */
-    kanLanguageTag, /* 'KAN' (Kannada) */
-    kokLanguageTag, /* 'KOK' (Konkani) */
-    korLanguageTag, /* 'KOR' (Korean) */
-    kshLanguageTag, /* 'KSH' (Kashmiri) */
-    malLanguageTag, /* 'MAL' (Malayalam (Traditional)) */
-    marLanguageTag, /* 'MAR' (Marathi) */
-    mlrLanguageTag, /* 'MLR' (Malayalam (Reformed)) */
-    mniLanguageTag, /* 'MNI' (Manipuri) */
-    oriLanguageTag, /* 'ORI' (Oriya) */
-    sanLanguageTag, /* 'SAN' (Sanscrit) */
-    sndLanguageTag, /* 'SND' (Sindhi) */
-    snhLanguageTag, /* 'SNH' (Sinhalese) */
-    syrLanguageTag, /* 'SYR' (Syriac) */
-    tamLanguageTag, /* 'TAM' (Tamil) */
-    telLanguageTag, /* 'TEL' (Telugu) */
-    thaLanguageTag, /* 'THA' (Thai) */
-    urdLanguageTag, /* 'URD' (Urdu) */
-    zhpLanguageTag, /* 'ZHP' (Chinese (Phonetic)) */
-    zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
-    zhtLanguageTag, /* 'ZHT' (Chinese (Traditional)) */
-    afkLanguageTag, /* 'AFK' (Afrikaans) */
-    belLanguageTag, /* 'BEL' (Belarussian) */
-    bgrLanguageTag, /* 'BGR' (Bulgarian) */
-    catLanguageTag, /* 'CAT' (Catalan) */
-    cheLanguageTag, /* 'CHE' (Chechen) */
-    copLanguageTag, /* 'COP' (Coptic) */
-    csyLanguageTag, /* 'CSY' (Czech) */
-    danLanguageTag, /* 'DAN' (Danish) */
-    deuLanguageTag, /* 'DEU' (German) */
-    dznLanguageTag, /* 'DZN' (Dzongkha) */
-    ellLanguageTag, /* 'ELL' (Greek) */
-    engLanguageTag, /* 'ENG' (English) */
-    espLanguageTag, /* 'ESP' (Spanish) */
-    etiLanguageTag, /* 'ETI' (Estonian) */
-    euqLanguageTag, /* 'EUQ' (Basque) */
-    finLanguageTag, /* 'FIN' (Finnish) */
-    fraLanguageTag, /* 'FRA' (French) */
-    gaeLanguageTag, /* 'GAE' (Gaelic) */
-    hauLanguageTag, /* 'HAU' (Hausa) */
-    hrvLanguageTag, /* 'HRV' (Croation) */
-    hunLanguageTag, /* 'HUN' (Hungarian) */
-    hyeLanguageTag, /* 'HYE' (Armenian) */
-    indLanguageTag, /* 'IND' (Indonesian) */
-    itaLanguageTag, /* 'ITA' (Italian) */
-    khmLanguageTag, /* 'KHM' (Khmer) */
-    mngLanguageTag, /* 'MNG' (Mongolian) */
-    mtsLanguageTag, /* 'MTS' (Maltese) */
-    nepLanguageTag, /* 'NEP' (Nepali) */
-    nldLanguageTag, /* 'NLD' (Dutch) */
-    pasLanguageTag, /* 'PAS' (Pashto) */
-    plkLanguageTag, /* 'PLK' (Polish) */
-    ptgLanguageTag, /* 'PTG' (Portuguese) */
-    romLanguageTag, /* 'ROM' (Romanian) */
-    rusLanguageTag, /* 'RUS' (Russian) */
-    skyLanguageTag, /* 'SKY' (Slovak) */
-    slvLanguageTag, /* 'SLV' (Slovenian) */
-    sqiLanguageTag, /* 'SQI' (Albanian) */
-    srbLanguageTag, /* 'SRB' (Serbian) */
-    sveLanguageTag, /* 'SVE' (Swedish) */
-    tibLanguageTag, /* 'TIB' (Tibetan) */
-    trkLanguageTag, /* 'TRK' (Turkish) */
-    welLanguageTag  /* 'WEL' (Welsh) */
-};
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ScriptAndLanguageTags.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,294 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
-#ifndef __SCRIPTANDLANGUAGES_H
-#define __SCRIPTANDLANGUAGES_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \internal
- */
-
-U_NAMESPACE_BEGIN
-
-const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
-const LETag zinhScriptTag = 0x7A696E68; /* 'zinh' (INHERITED) */
-const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
-const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */
-const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */
-const LETag bng2ScriptTag = 0x626E6732; /* 'bng2' (BENGALI v.2) (manually added) */
-const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */
-const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */
-const LETag coptScriptTag = 0x636F7074; /* 'copt' (COPTIC) */
-const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */
-const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */
-const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */
-const LETag dev2ScriptTag = 0x64657632; /* 'dev2' (DEVANAGARI v.2) (manually added) */
-const LETag ethiScriptTag = 0x65746869; /* 'ethi' (ETHIOPIC) */
-const LETag georScriptTag = 0x67656F72; /* 'geor' (GEORGIAN) */
-const LETag gothScriptTag = 0x676F7468; /* 'goth' (GOTHIC) */
-const LETag grekScriptTag = 0x6772656B; /* 'grek' (GREEK) */
-const LETag gujrScriptTag = 0x67756A72; /* 'gujr' (GUJARATI) */
-const LETag gjr2ScriptTag = 0x676A7232; /* 'gjr2' (GUJARATI v.2) (manually added) */
-const LETag guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */
-const LETag gur2ScriptTag = 0x67757232; /* 'gur2' (GURMUKHI v.2) (manually added) */
-const LETag haniScriptTag = 0x68616E69; /* 'hani' (HAN) */
-const LETag hangScriptTag = 0x68616E67; /* 'hang' (HANGUL) */
-const LETag hebrScriptTag = 0x68656272; /* 'hebr' (HEBREW) */
-const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */
-const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */
-const LETag knd2ScriptTag = 0x6B6E6432; /* 'knd2' (KANNADA v.2) (manually added) */
-const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */
-const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */
-const LETag laooScriptTag = 0x6C616F20; /* 'lao ' (LAO) */
-const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */
-const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */
-const LETag mlm2ScriptTag = 0x6D6C6D32; /* 'mlm2' (MALAYALAM v.2) (manually added) */
-const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */
-const LETag mymrScriptTag = 0x6D796D72; /* 'mymr' (MYANMAR) */
-const LETag ogamScriptTag = 0x6F67616D; /* 'ogam' (OGHAM) */
-const LETag italScriptTag = 0x6974616C; /* 'ital' (OLD_ITALIC) */
-const LETag oryaScriptTag = 0x6F727961; /* 'orya' (ORIYA) */
-const LETag ory2ScriptTag = 0x6F727932; /* 'ory2' (ORIYA v.2) (manually added) */
-const LETag runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */
-const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */
-const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */
-const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */
-const LETag tml2ScriptTag = 0x746D6C32; /* 'tml2' (TAMIL v.2) (manually added) */
-const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */
-const LETag tel2ScriptTag = 0x74656C32; /* 'tel2' (TELUGU v.2) (manually added) */
-const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */
-const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */
-const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */
-const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */
-const LETag yiiiScriptTag = 0x79692020; /* 'yi  ' (YI) */
-const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */
-const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */
-const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */
-const LETag tagbScriptTag = 0x74616762; /* 'tagb' (TAGBANWA) */
-const LETag braiScriptTag = 0x62726169; /* 'brai' (BRAILLE) */
-const LETag cprtScriptTag = 0x63707274; /* 'cprt' (CYPRIOT) */
-const LETag limbScriptTag = 0x6C696D62; /* 'limb' (LIMBU) */
-const LETag linbScriptTag = 0x6C696E62; /* 'linb' (LINEAR_B) */
-const LETag osmaScriptTag = 0x6F736D61; /* 'osma' (OSMANYA) */
-const LETag shawScriptTag = 0x73686177; /* 'shaw' (SHAVIAN) */
-const LETag taleScriptTag = 0x74616C65; /* 'tale' (TAI_LE) */
-const LETag ugarScriptTag = 0x75676172; /* 'ugar' (UGARITIC) */
-const LETag hrktScriptTag = 0x68726B74; /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-const LETag bugiScriptTag = 0x62756769; /* 'bugi' (BUGINESE) */
-const LETag glagScriptTag = 0x676C6167; /* 'glag' (GLAGOLITIC) */
-const LETag kharScriptTag = 0x6B686172; /* 'khar' (KHAROSHTHI) */
-const LETag syloScriptTag = 0x73796C6F; /* 'sylo' (SYLOTI_NAGRI) */
-const LETag taluScriptTag = 0x74616C75; /* 'talu' (NEW_TAI_LUE) */
-const LETag tfngScriptTag = 0x74666E67; /* 'tfng' (TIFINAGH) */
-const LETag xpeoScriptTag = 0x7870656F; /* 'xpeo' (OLD_PERSIAN) */
-const LETag baliScriptTag = 0x62616C69; /* 'bali' (BALINESE) */
-const LETag batkScriptTag = 0x6261746B; /* 'batk' (BATAK) */
-const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */
-const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAHMI) */
-const LETag chamScriptTag = 0x6368616D; /* 'cham' (CHAM) */
-const LETag cirtScriptTag = 0x63697274; /* 'cirt' (CIRT) */
-const LETag cyrsScriptTag = 0x63797273; /* 'cyrs' (CYRS) */
-const LETag egydScriptTag = 0x65677964; /* 'egyd' (EGYD) */
-const LETag egyhScriptTag = 0x65677968; /* 'egyh' (EGYH) */
-const LETag egypScriptTag = 0x65677970; /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-const LETag geokScriptTag = 0x67656F6B; /* 'geok' (GEOK) */
-const LETag hansScriptTag = 0x68616E73; /* 'hans' (HANS) */
-const LETag hantScriptTag = 0x68616E74; /* 'hant' (HANT) */
-const LETag hmngScriptTag = 0x686D6E67; /* 'hmng' (HMNG) */
-const LETag hungScriptTag = 0x68756E67; /* 'hung' (HUNG) */
-const LETag indsScriptTag = 0x696E6473; /* 'inds' (INDS) */
-const LETag javaScriptTag = 0x6A617661; /* 'java' (JAVANESE) */
-const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KAYAH_LI) */
-const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */
-const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */
-const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPCHA) */
-const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */
-const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MANDAIC) */
-const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */
-const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MEROITIC_HIEROGLYPHS) */
-const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */
-const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (OLD_TURKIC) */
-const LETag permScriptTag = 0x7065726D; /* 'perm' (PERM) */
-const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */
-const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */
-const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (MIAO) */
-const LETag roroScriptTag = 0x726F726F; /* 'roro' (RORO) */
-const LETag saraScriptTag = 0x73617261; /* 'sara' (SARA) */
-const LETag syreScriptTag = 0x73797265; /* 'syre' (SYRE) */
-const LETag syrjScriptTag = 0x7379726A; /* 'syrj' (SYRJ) */
-const LETag syrnScriptTag = 0x7379726E; /* 'syrn' (SYRN) */
-const LETag tengScriptTag = 0x74656E67; /* 'teng' (TENG) */
-const LETag vaiiScriptTag = 0x76616920; /* 'vai ' (VAI) */
-const LETag vispScriptTag = 0x76697370; /* 'visp' (VISP) */
-const LETag xsuxScriptTag = 0x78737578; /* 'xsux' (CUNEIFORM) */
-const LETag zxxxScriptTag = 0x7A787878; /* 'zxxx' (ZXXX) */
-const LETag zzzzScriptTag = 0x7A7A7A7A; /* 'zzzz' (UNKNOWN) */
-const LETag cariScriptTag = 0x63617269; /* 'cari' (CARIAN) */
-const LETag jpanScriptTag = 0x6A70616E; /* 'jpan' (JPAN) */
-const LETag lanaScriptTag = 0x6C616E61; /* 'lana' (TAI_THAM) */
-const LETag lyciScriptTag = 0x6C796369; /* 'lyci' (LYCIAN) */
-const LETag lydiScriptTag = 0x6C796469; /* 'lydi' (LYDIAN) */
-const LETag olckScriptTag = 0x6F6C636B; /* 'olck' (OL_CHIKI) */
-const LETag rjngScriptTag = 0x726A6E67; /* 'rjng' (REJANG) */
-const LETag saurScriptTag = 0x73617572; /* 'saur' (SAURASHTRA) */
-const LETag sgnwScriptTag = 0x73676E77; /* 'sgnw' (SGNW) */
-const LETag sundScriptTag = 0x73756E64; /* 'sund' (SUNDANESE) */
-const LETag moonScriptTag = 0x6D6F6F6E; /* 'moon' (MOON) */
-const LETag mteiScriptTag = 0x6D746569; /* 'mtei' (MEETEI_MAYEK) */
-const LETag armiScriptTag = 0x61726D69; /* 'armi' (IMPERIAL_ARAMAIC) */
-const LETag avstScriptTag = 0x61767374; /* 'avst' (AVESTAN) */
-const LETag cakmScriptTag = 0x63616B6D; /* 'cakm' (CHAKMA) */
-const LETag koreScriptTag = 0x6B6F7265; /* 'kore' (KORE) */
-const LETag kthiScriptTag = 0x6B746869; /* 'kthi' (KAITHI) */
-const LETag maniScriptTag = 0x6D616E69; /* 'mani' (MANI) */
-const LETag phliScriptTag = 0x70686C69; /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-const LETag phlpScriptTag = 0x70686C70; /* 'phlp' (PHLP) */
-const LETag phlvScriptTag = 0x70686C76; /* 'phlv' (PHLV) */
-const LETag prtiScriptTag = 0x70727469; /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-const LETag samrScriptTag = 0x73616D72; /* 'samr' (SAMARITAN) */
-const LETag tavtScriptTag = 0x74617674; /* 'tavt' (TAI_VIET) */
-const LETag zmthScriptTag = 0x7A6D7468; /* 'zmth' (ZMTH) */
-const LETag zsymScriptTag = 0x7A73796D; /* 'zsym' (ZSYM) */
-const LETag bamuScriptTag = 0x62616D75; /* 'bamu' (BAMUM) */
-const LETag lisuScriptTag = 0x6C697375; /* 'lisu' (LISU) */
-const LETag nkgbScriptTag = 0x6E6B6762; /* 'nkgb' (NKGB) */
-const LETag sarbScriptTag = 0x73617262; /* 'sarb' (OLD_SOUTH_ARABIAN) */
-const LETag bassScriptTag = 0x62617373; /* 'bass' (BASS) */
-const LETag duplScriptTag = 0x6475706C; /* 'dupl' (DUPL) */
-const LETag elbaScriptTag = 0x656C6261; /* 'elba' (ELBA) */
-const LETag granScriptTag = 0x6772616E; /* 'gran' (GRAN) */
-const LETag kpelScriptTag = 0x6B70656C; /* 'kpel' (KPEL) */
-const LETag lomaScriptTag = 0x6C6F6D61; /* 'loma' (LOMA) */
-const LETag mendScriptTag = 0x6D656E64; /* 'mend' (MEND) */
-const LETag mercScriptTag = 0x6D657263; /* 'merc' (MEROITIC_CURSIVE) */
-const LETag narbScriptTag = 0x6E617262; /* 'narb' (NARB) */
-const LETag nbatScriptTag = 0x6E626174; /* 'nbat' (NBAT) */
-const LETag palmScriptTag = 0x70616C6D; /* 'palm' (PALM) */
-const LETag sindScriptTag = 0x73696E64; /* 'sind' (SIND) */
-const LETag waraScriptTag = 0x77617261; /* 'wara' (WARA) */
-const LETag afakScriptTag = 0x6166616B; /* 'afak' (AFAK) */
-const LETag jurcScriptTag = 0x6A757263; /* 'jurc' (JURC) */
-const LETag mrooScriptTag = 0x6D726F6F; /* 'mroo' (MROO) */
-const LETag nshuScriptTag = 0x6E736875; /* 'nshu' (NSHU) */
-const LETag shrdScriptTag = 0x73687264; /* 'shrd' (SHARADA) */
-const LETag soraScriptTag = 0x736F7261; /* 'sora' (SORA_SOMPENG) */
-const LETag takrScriptTag = 0x74616B72; /* 'takr' (TAKRI) */
-const LETag tangScriptTag = 0x74616E67; /* 'tang' (TANG) */
-const LETag woleScriptTag = 0x776F6C65; /* 'wole' (WOLE) */
-const LETag khojScriptTag = 0x6B686F6A; /* 'khoj' (KHOJ) */
-const LETag tirhScriptTag = 0x74697268; /* 'tirh' (TIRH) */
-
-const LETag nullScriptTag = 0x00000000; /* ''     (NULL) */
-
-
-const LETag nullLanguageTag = 0x00000000; /* '' (null) */
-const LETag araLanguageTag = 0x41524120; /* 'ARA' (Arabic) */
-const LETag asmLanguageTag = 0x41534D20; /* 'ASM' (Assamese) */
-const LETag benLanguageTag = 0x42454E20; /* 'BEN' (Bengali) */
-const LETag farLanguageTag = 0x46415220; /* 'FAR' (Farsi) */
-const LETag gujLanguageTag = 0x47554A20; /* 'GUJ' (Gujarati) */
-const LETag hinLanguageTag = 0x48494E20; /* 'HIN' (Hindi) */
-const LETag iwrLanguageTag = 0x49575220; /* 'IWR' (Hebrew) */
-const LETag jiiLanguageTag = 0x4A494920; /* 'JII' (Yiddish) */
-const LETag janLanguageTag = 0x4A414E20; /* 'JAN' (Japanese) */
-const LETag kanLanguageTag = 0x4B414E20; /* 'KAN' (Kannada) */
-const LETag kokLanguageTag = 0x4B4F4B20; /* 'KOK' (Konkani) */
-const LETag korLanguageTag = 0x4B4F5220; /* 'KOR' (Korean) */
-const LETag kshLanguageTag = 0x4B534820; /* 'KSH' (Kashmiri) */
-const LETag malLanguageTag = 0x4D414C20; /* 'MAL' (Malayalam (Traditional)) */
-const LETag marLanguageTag = 0x4D415220; /* 'MAR' (Marathi) */
-const LETag mlrLanguageTag = 0x4D4C5220; /* 'MLR' (Malayalam (Reformed)) */
-const LETag mniLanguageTag = 0x4D4E4920; /* 'MNI' (Manipuri) */
-const LETag oriLanguageTag = 0x4F524920; /* 'ORI' (Oriya) */
-const LETag sanLanguageTag = 0x53414E20; /* 'SAN' (Sanscrit) */
-const LETag sndLanguageTag = 0x534E4420; /* 'SND' (Sindhi) */
-const LETag snhLanguageTag = 0x534E4820; /* 'SNH' (Sinhalese) */
-const LETag syrLanguageTag = 0x53595220; /* 'SYR' (Syriac) */
-const LETag tamLanguageTag = 0x54414D20; /* 'TAM' (Tamil) */
-const LETag telLanguageTag = 0x54454C20; /* 'TEL' (Telugu) */
-const LETag thaLanguageTag = 0x54484120; /* 'THA' (Thai) */
-const LETag urdLanguageTag = 0x55524420; /* 'URD' (Urdu) */
-const LETag zhpLanguageTag = 0x5A485020; /* 'ZHP' (Chinese (Phonetic)) */
-const LETag zhsLanguageTag = 0x5A485320; /* 'ZHS' (Chinese (Simplified)) */
-const LETag zhtLanguageTag = 0x5A485420; /* 'ZHT' (Chinese (Traditional)) */
-const LETag afkLanguageTag = 0x41464B20; /* 'AFK' (Afrikaans) */
-const LETag belLanguageTag = 0x42454C20; /* 'BEL' (Belarussian) */
-const LETag bgrLanguageTag = 0x42475220; /* 'BGR' (Bulgarian) */
-const LETag catLanguageTag = 0x43415420; /* 'CAT' (Catalan) */
-const LETag cheLanguageTag = 0x43484520; /* 'CHE' (Chechen) */
-const LETag copLanguageTag = 0x434F5020; /* 'COP' (Coptic) */
-const LETag csyLanguageTag = 0x43535920; /* 'CSY' (Czech) */
-const LETag danLanguageTag = 0x44414E20; /* 'DAN' (Danish) */
-const LETag deuLanguageTag = 0x44455520; /* 'DEU' (German) */
-const LETag dznLanguageTag = 0x445A4E20; /* 'DZN' (Dzongkha) */
-const LETag ellLanguageTag = 0x454C4C20; /* 'ELL' (Greek) */
-const LETag engLanguageTag = 0x454E4720; /* 'ENG' (English) */
-const LETag espLanguageTag = 0x45535020; /* 'ESP' (Spanish) */
-const LETag etiLanguageTag = 0x45544920; /* 'ETI' (Estonian) */
-const LETag euqLanguageTag = 0x45555120; /* 'EUQ' (Basque) */
-const LETag finLanguageTag = 0x46494E20; /* 'FIN' (Finnish) */
-const LETag fraLanguageTag = 0x46524120; /* 'FRA' (French) */
-const LETag gaeLanguageTag = 0x47414520; /* 'GAE' (Gaelic) */
-const LETag hauLanguageTag = 0x48415520; /* 'HAU' (Hausa) */
-const LETag hrvLanguageTag = 0x48525620; /* 'HRV' (Croation) */
-const LETag hunLanguageTag = 0x48554E20; /* 'HUN' (Hungarian) */
-const LETag hyeLanguageTag = 0x48594520; /* 'HYE' (Armenian) */
-const LETag indLanguageTag = 0x494E4420; /* 'IND' (Indonesian) */
-const LETag itaLanguageTag = 0x49544120; /* 'ITA' (Italian) */
-const LETag khmLanguageTag = 0x4B484D20; /* 'KHM' (Khmer) */
-const LETag mngLanguageTag = 0x4D4E4720; /* 'MNG' (Mongolian) */
-const LETag mtsLanguageTag = 0x4D545320; /* 'MTS' (Maltese) */
-const LETag nepLanguageTag = 0x4E455020; /* 'NEP' (Nepali) */
-const LETag nldLanguageTag = 0x4E4C4420; /* 'NLD' (Dutch) */
-const LETag pasLanguageTag = 0x50415320; /* 'PAS' (Pashto) */
-const LETag plkLanguageTag = 0x504C4B20; /* 'PLK' (Polish) */
-const LETag ptgLanguageTag = 0x50544720; /* 'PTG' (Portuguese) */
-const LETag romLanguageTag = 0x524F4D20; /* 'ROM' (Romanian) */
-const LETag rusLanguageTag = 0x52555320; /* 'RUS' (Russian) */
-const LETag skyLanguageTag = 0x534B5920; /* 'SKY' (Slovak) */
-const LETag slvLanguageTag = 0x534C5620; /* 'SLV' (Slovenian) */
-const LETag sqiLanguageTag = 0x53514920; /* 'SQI' (Albanian) */
-const LETag srbLanguageTag = 0x53524220; /* 'SRB' (Serbian) */
-const LETag sveLanguageTag = 0x53564520; /* 'SVE' (Swedish) */
-const LETag tibLanguageTag = 0x54494220; /* 'TIB' (Tibetan) */
-const LETag trkLanguageTag = 0x54524B20; /* 'TRK' (Turkish) */
-const LETag welLanguageTag = 0x57454C20; /* 'WEL' (Welsh) */
-
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SegmentArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor)
-
-SegmentArrayProcessor::SegmentArrayProcessor()
-{
-}
-
-SegmentArrayProcessor::SegmentArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  segmentArrayLookupTable = LEReferenceTo<SegmentArrayLookupTable>(morphSubtableHeader, success, (const SegmentArrayLookupTable*)&header->table);
-}
-
-SegmentArrayProcessor::~SegmentArrayProcessor()
-{
-}
-
-void SegmentArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentArrayLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segmentArrayLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL)  {
-            TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph);
-            le_int16  offset = SWAPW(lookupSegment->value);
-
-            if (offset != 0) {
-              LEReferenceToArrayOf<TTGlyphID> glyphArray(subtableHeader, success, offset, LE_UNBOUNDED_ARRAY);
-              if (LE_FAILURE(success)) { continue; }
-              TTGlyphID   newGlyph   = SWAPW(glyphArray(LE_GET_GLYPH(thisGlyph) - firstGlyph, success));
-              glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-            }
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTARRAYPROCESSOR_H
-#define __SEGMENTARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentArrayProcessor();
-
-protected:
-    LEReferenceTo<SegmentArrayLookupTable> segmentArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SegmentArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor2)
-
-SegmentArrayProcessor2::SegmentArrayProcessor2()
-{
-}
-
-SegmentArrayProcessor2::SegmentArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-  segmentArrayLookupTable = LEReferenceTo<SegmentArrayLookupTable>(morphSubtableHeader,  success, &header->table); // don't parent to 'header' as it is on the stack
-}
-
-SegmentArrayProcessor2::~SegmentArrayProcessor2()
-{
-}
-
-void SegmentArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentArrayLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        // lookupSegment already range checked by lookupSegment() function.
-        const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segmentArrayLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL&& LE_SUCCESS(success))  {
-            TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph);
-            TTGlyphID lastGlyph = SWAPW(lookupSegment->lastGlyph);
-            le_int16  offset = SWAPW(lookupSegment->value);
-            TTGlyphID thisGlyphId=  LE_GET_GLYPH(thisGlyph);
-            LEReferenceToArrayOf<TTGlyphID> glyphArray(subtableHeader, success, offset, lastGlyph - firstGlyph + 1);
-            if (offset != 0 && thisGlyphId <= lastGlyph && thisGlyphId >= firstGlyph && LE_SUCCESS(success) ) {
-              TTGlyphID   newGlyph   = SWAPW(glyphArray[thisGlyphId]);
-              glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-            }
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentArrayProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTARRAYPROCESSOR_H
-#define __SEGMENTARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentArrayProcessor2();
-
-protected:
-    LEReferenceTo<SegmentArrayLookupTable> segmentArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SegmentSingleProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor)
-
-SegmentSingleProcessor::SegmentSingleProcessor()
-{
-}
-
-SegmentSingleProcessor::SegmentSingleProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  segmentSingleLookupTable = LEReferenceTo<SegmentSingleLookupTable>(morphSubtableHeader, success, (const SegmentSingleLookupTable*)&header->table);
-}
-
-SegmentSingleProcessor::~SegmentSingleProcessor()
-{
-}
-
-void SegmentSingleProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentSingleLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount && LE_SUCCESS(success); glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segmentSingleLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL && LE_SUCCESS(success)) {
-            TTGlyphID   newGlyph  = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTSINGLEPROCESSOR_H
-#define __SEGMENTSINGLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentSingleProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentSingleProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentSingleProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentSingleProcessor();
-
-protected:
-    LEReferenceTo<SegmentSingleLookupTable> segmentSingleLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SegmentSingleProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor2)
-
-SegmentSingleProcessor2::SegmentSingleProcessor2()
-{
-}
-
-SegmentSingleProcessor2::SegmentSingleProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-  segmentSingleLookupTable = LEReferenceTo<SegmentSingleLookupTable>(morphSubtableHeader, success, &header->table);
-}
-
-SegmentSingleProcessor2::~SegmentSingleProcessor2()
-{
-}
-
-void SegmentSingleProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentSingleLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segmentSingleLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL && LE_SUCCESS(success)) {
-            TTGlyphID   newGlyph  = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SegmentSingleProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTSINGLEPROCESSOR_H
-#define __SEGMENTSINGLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentSingleProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentSingleProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentSingleProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentSingleProcessor2();
-
-protected:
-    LEReferenceTo<SegmentSingleLookupTable> segmentSingleLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ShapingTypeData.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 07/21/2005 10:31:02 AM PDT
- */
-
-#include "LETypes.h"
-#include "ArabicShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 ArabicShaping::shapingTypeTable[] = {
-    0x00, 0x02, 0x00, 0xD7, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05,
-    0x04, 0x83, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF,
-    0x00, 0x05, 0x05, 0xC1, 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7,
-    0x05, 0xC7, 0x00, 0x05, 0x06, 0x10, 0x06, 0x1A, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04,
-    0x06, 0x26, 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28,
-    0x00, 0x02, 0x06, 0x29, 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F,
-    0x06, 0x32, 0x00, 0x04, 0x06, 0x33, 0x06, 0x3F, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01,
-    0x06, 0x41, 0x06, 0x47, 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A,
-    0x00, 0x02, 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70,
-    0x06, 0x70, 0x00, 0x05, 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04,
-    0x06, 0x78, 0x06, 0x87, 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF,
-    0x00, 0x02, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3,
-    0x06, 0xCB, 0x00, 0x04, 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04,
-    0x06, 0xCE, 0x06, 0xCE, 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1,
-    0x00, 0x02, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6,
-    0x06, 0xDC, 0x00, 0x05, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05,
-    0x06, 0xEA, 0x06, 0xED, 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC,
-    0x00, 0x02, 0x06, 0xFF, 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10,
-    0x07, 0x10, 0x00, 0x04, 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02,
-    0x07, 0x15, 0x07, 0x19, 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E,
-    0x00, 0x04, 0x07, 0x1F, 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29,
-    0x07, 0x29, 0x00, 0x02, 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02,
-    0x07, 0x2C, 0x07, 0x2C, 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F,
-    0x00, 0x04, 0x07, 0x30, 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E,
-    0x07, 0x58, 0x00, 0x02, 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02,
-    0x07, 0x6B, 0x07, 0x6C, 0x00, 0x04, 0x07, 0x6D, 0x07, 0x70, 0x00, 0x02, 0x07, 0x71, 0x07, 0x71,
-    0x00, 0x04, 0x07, 0x72, 0x07, 0x72, 0x00, 0x02, 0x07, 0x73, 0x07, 0x74, 0x00, 0x04, 0x07, 0x75,
-    0x07, 0x77, 0x00, 0x02, 0x07, 0x78, 0x07, 0x79, 0x00, 0x04, 0x07, 0x7A, 0x07, 0x7F, 0x00, 0x02,
-    0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x07, 0xCA, 0x07, 0xEA, 0x00, 0x02, 0x07, 0xEB, 0x07, 0xF3,
-    0x00, 0x05, 0x07, 0xFA, 0x07, 0xFA, 0x00, 0x01, 0x09, 0x01, 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C,
-    0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05,
-    0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63, 0x00, 0x05, 0x09, 0x81, 0x09, 0x81,
-    0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1, 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD,
-    0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05, 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05,
-    0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42, 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48,
-    0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x51, 0x0A, 0x51, 0x00, 0x05, 0x0A, 0x70,
-    0x0A, 0x71, 0x00, 0x05, 0x0A, 0x75, 0x0A, 0x75, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05,
-    0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05, 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8,
-    0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01,
-    0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05,
-    0x0B, 0x41, 0x0B, 0x44, 0x00, 0x05, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56,
-    0x00, 0x05, 0x0B, 0x62, 0x0B, 0x63, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82, 0x00, 0x05, 0x0B, 0xC0,
-    0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E, 0x0C, 0x40, 0x00, 0x05,
-    0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05, 0x0C, 0x55, 0x0C, 0x56,
-    0x00, 0x05, 0x0C, 0x62, 0x0C, 0x63, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF,
-    0x0C, 0xBF, 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05,
-    0x0C, 0xE2, 0x0C, 0xE3, 0x00, 0x05, 0x0D, 0x41, 0x0D, 0x44, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D,
-    0x00, 0x05, 0x0D, 0x62, 0x0D, 0x63, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05, 0x0D, 0xD2,
-    0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31, 0x00, 0x05,
-    0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1, 0x0E, 0xB1,
-    0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05, 0x0E, 0xC8,
-    0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0x05,
-    0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71, 0x0F, 0x7E,
-    0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05, 0x0F, 0x90,
-    0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0x05,
-    0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x3A,
-    0x00, 0x05, 0x10, 0x3D, 0x10, 0x3E, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05, 0x10, 0x5E,
-    0x10, 0x60, 0x00, 0x05, 0x10, 0x71, 0x10, 0x74, 0x00, 0x05, 0x10, 0x82, 0x10, 0x82, 0x00, 0x05,
-    0x10, 0x85, 0x10, 0x86, 0x00, 0x05, 0x10, 0x8D, 0x10, 0x8D, 0x00, 0x05, 0x13, 0x5F, 0x13, 0x5F,
-    0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34, 0x00, 0x05, 0x17, 0x52,
-    0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4, 0x17, 0xB5, 0x00, 0x05,
-    0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05, 0x17, 0xC9, 0x17, 0xD3,
-    0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D, 0x00, 0x05, 0x18, 0xA9,
-    0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27, 0x19, 0x28, 0x00, 0x05,
-    0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05, 0x1A, 0x17, 0x1A, 0x18,
-    0x00, 0x05, 0x1B, 0x00, 0x1B, 0x03, 0x00, 0x05, 0x1B, 0x34, 0x1B, 0x34, 0x00, 0x05, 0x1B, 0x36,
-    0x1B, 0x3A, 0x00, 0x05, 0x1B, 0x3C, 0x1B, 0x3C, 0x00, 0x05, 0x1B, 0x42, 0x1B, 0x42, 0x00, 0x05,
-    0x1B, 0x6B, 0x1B, 0x73, 0x00, 0x05, 0x1B, 0x80, 0x1B, 0x81, 0x00, 0x05, 0x1B, 0xA2, 0x1B, 0xA5,
-    0x00, 0x05, 0x1B, 0xA8, 0x1B, 0xA9, 0x00, 0x05, 0x1C, 0x2C, 0x1C, 0x33, 0x00, 0x05, 0x1C, 0x36,
-    0x1C, 0x37, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xE6, 0x00, 0x05, 0x1D, 0xFE, 0x1D, 0xFF, 0x00, 0x05,
-    0x20, 0x0B, 0x20, 0x0B, 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F,
-    0x00, 0x05, 0x20, 0x2A, 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x64, 0x00, 0x05, 0x20, 0x6A,
-    0x20, 0x6F, 0x00, 0x05, 0x20, 0xD0, 0x20, 0xF0, 0x00, 0x05, 0x2D, 0xE0, 0x2D, 0xFF, 0x00, 0x05,
-    0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x05, 0xA6, 0x6F, 0xA6, 0x72,
-    0x00, 0x05, 0xA6, 0x7C, 0xA6, 0x7D, 0x00, 0x05, 0xA8, 0x02, 0xA8, 0x02, 0x00, 0x05, 0xA8, 0x06,
-    0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25, 0xA8, 0x26, 0x00, 0x05,
-    0xA8, 0xC4, 0xA8, 0xC4, 0x00, 0x05, 0xA9, 0x26, 0xA9, 0x2D, 0x00, 0x05, 0xA9, 0x47, 0xA9, 0x51,
-    0x00, 0x05, 0xAA, 0x29, 0xAA, 0x2E, 0x00, 0x05, 0xAA, 0x31, 0xAA, 0x32, 0x00, 0x05, 0xAA, 0x35,
-    0xAA, 0x36, 0x00, 0x05, 0xAA, 0x43, 0xAA, 0x43, 0x00, 0x05, 0xAA, 0x4C, 0xAA, 0x4C, 0x00, 0x05,
-    0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05, 0xFE, 0x20, 0xFE, 0x26,
-    0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB, 0x00, 0x05
-};
-
-const size_t ArabicShaping::shapingTypeTableLen = sizeof(shapingTypeTable)/sizeof(shapingTypeTable[0]);
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SimpleArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor)
-
-SimpleArrayProcessor::SimpleArrayProcessor()
-{
-}
-
-SimpleArrayProcessor::SimpleArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  simpleArrayLookupTable = LEReferenceTo<SimpleArrayLookupTable>(morphSubtableHeader, success, (const SimpleArrayLookupTable*)&header->table);
-}
-
-SimpleArrayProcessor::~SimpleArrayProcessor()
-{
-}
-
-void SimpleArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    LEReferenceToArrayOf<LookupValue> valueArray(simpleArrayLookupTable, success, (const LookupValue*)&simpleArrayLookupTable->valueArray, LE_UNBOUNDED_ARRAY);
-
-    for (glyph = 0; LE_SUCCESS(success) && (glyph < glyphCount); glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
-          TTGlyphID newGlyph = SWAPW(valueArray.getObject(LE_GET_GLYPH(thisGlyph),success));
-          glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SIMPLEARRAYPROCESSOR_H
-#define __SIMPLEARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SimpleArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SimpleArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SimpleArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SimpleArrayProcessor();
-
-protected:
-    LEReferenceTo<SimpleArrayLookupTable> simpleArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SimpleArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor2)
-
-SimpleArrayProcessor2::SimpleArrayProcessor2()
-{
-}
-
-SimpleArrayProcessor2::SimpleArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-  simpleArrayLookupTable = LEReferenceTo<SimpleArrayLookupTable>(morphSubtableHeader, success, &header->table);
-  valueArray = LEReferenceToArrayOf<LookupValue>(morphSubtableHeader, success, &simpleArrayLookupTable->valueArray[0], LE_UNBOUNDED_ARRAY);
-}
-
-SimpleArrayProcessor2::~SimpleArrayProcessor2()
-{
-}
-
-void SimpleArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
-          TTGlyphID newGlyph = SWAPW(valueArray(LE_GET_GLYPH(thisGlyph),success));
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SimpleArrayProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SIMPLEARRAYPROCESSOR2_H
-#define __SIMPLEARRAYPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SimpleArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SimpleArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SimpleArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SimpleArrayProcessor2();
-
-protected:
-    LEReferenceTo<SimpleArrayLookupTable> simpleArrayLookupTable;
-    LEReferenceToArrayOf<LookupValue> valueArray;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SinglePositioningSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "SinglePositioningSubtables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 SinglePositioningSubtable::process(const LEReferenceTo<SinglePositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<SinglePositioningFormat1Subtable> subtable(base, success, (const SinglePositioningFormat1Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<SinglePositioningFormat2Subtable> subtable(base, success, (const SinglePositioningFormat2Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 SinglePositioningFormat1Subtable::process(const LEReferenceTo<SinglePositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-      valueRecord.adjustPosition(SWAPW(valueFormat), base, *glyphIterator, fontInstance, success);
-
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 SinglePositioningFormat2Subtable::process(const LEReferenceTo<SinglePositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int16 coverageIndex = (le_int16) getGlyphCoverage(base, glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-      valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), base, *glyphIterator, fontInstance, success);
-
-        return 1;
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SinglePositioningSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLEPOSITIONINGSUBTABLES_H
-#define __SINGLEPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SinglePositioningSubtable : GlyphPositioningSubtable
-{
-    le_uint32  process(const LEReferenceTo<SinglePositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct SinglePositioningFormat1Subtable : SinglePositioningSubtable
-{
-    ValueFormat valueFormat;
-    ValueRecord valueRecord;
-
-    le_uint32  process(const LEReferenceTo<SinglePositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct SinglePositioningFormat2Subtable : SinglePositioningSubtable
-{
-    ValueFormat valueFormat;
-    le_uint16   valueCount;
-    ValueRecord valueRecordArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<SinglePositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(SinglePositioningFormat2Subtable, valueRecordArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleSubstitutionSubtables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "SingleSubstitutionSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 SingleSubstitutionSubtable::process(const LEReferenceTo<SingleSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<SingleSubstitutionFormat1Subtable> subtable(base, success, (const SingleSubstitutionFormat1Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, success, filter);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<SingleSubstitutionFormat2Subtable> subtable(base, success, (const SingleSubstitutionFormat2Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, success, filter);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 SingleSubstitutionFormat1Subtable::process(const LEReferenceTo<SingleSubstitutionFormat1Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (coverageIndex >= 0) {
-        TTGlyphID substitute = ((TTGlyphID) LE_GET_GLYPH(glyph)) + SWAPW(deltaGlyphID);
-
-        if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute), success)) {
-            glyphIterator->setCurrGlyphID(substitute);
-        }
-
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 SingleSubstitutionFormat2Subtable::process(const LEReferenceTo<SingleSubstitutionFormat2Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEReferenceToArrayOf<TTGlyphID> substituteArrayRef(base, success, substituteArray, SWAPW(glyphCount));
-
-    if (coverageIndex >= 0 && LE_SUCCESS(success) && coverageIndex < substituteArrayRef.getCount()) {
-        TTGlyphID substitute = SWAPW(substituteArray[coverageIndex]);
-
-        if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute), success)) {
-            glyphIterator->setCurrGlyphID(substitute);
-        }
-
-        return 1;
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleSubstitutionSubtables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLESUBSTITUTIONSUBTABLES_H
-#define __SINGLESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SingleSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-struct SingleSubstitutionFormat1Subtable : SingleSubstitutionSubtable
-{
-    le_int16   deltaGlyphID;
-
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionFormat1Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-struct SingleSubstitutionFormat2Subtable : SingleSubstitutionSubtable
-{
-    le_uint16  glyphCount;
-    TTGlyphID  substituteArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionFormat2Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(SingleSubstitutionFormat2Subtable, substituteArray)
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SingleTableProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor)
-
-SingleTableProcessor::SingleTableProcessor()
-{
-}
-
-SingleTableProcessor::SingleTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  singleTableLookupTable = LEReferenceTo<SingleTableLookupTable>(morphSubtableHeader, success, (const SingleTableLookupTable*)&header->table);
-}
-
-SingleTableProcessor::~SingleTableProcessor()
-{
-}
-
-void SingleTableProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSingle *entries = singleTableLookupTable->entries;
-    le_int32 glyph;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-      const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(singleTableLookupTable, entries, glyphStorage[glyph], success);
-
-        if (lookupSingle != NULL) {
-            glyphStorage[glyph] = SWAPW(lookupSingle->value);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLETABLEPROCESSOR_H
-#define __SINGLETABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SingleTableProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SingleTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SingleTableProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SingleTableProcessor();
-
-protected:
-    LEReferenceTo<SingleTableLookupTable> singleTableLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SingleTableProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor2)
-
-SingleTableProcessor2::SingleTableProcessor2()
-{
-}
-
-SingleTableProcessor2::SingleTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-    singleTableLookupTable = LEReferenceTo<SingleTableLookupTable>(morphSubtableHeader, success, &header->table);
-}
-
-SingleTableProcessor2::~SingleTableProcessor2()
-{
-}
-
-void SingleTableProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return;
-    const LookupSingle *entries = singleTableLookupTable->entries;
-    le_int32 glyph;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-      const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(singleTableLookupTable, entries, glyphStorage[glyph], success);
-
-        if (lookupSingle != NULL) {
-            glyphStorage[glyph] = SWAPW(lookupSingle->value);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SingleTableProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLETABLEPROCESSOR2_H
-#define __SINGLETABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SingleTableProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SingleTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SingleTableProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SingleTableProcessor2();
-
-protected:
-    LEReferenceTo<SingleTableLookupTable> singleTableLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-StateTableProcessor::StateTableProcessor()
-{
-}
-
-StateTableProcessor::StateTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor(morphSubtableHeader, success), stateTableHeader(morphSubtableHeader, success),
-    stHeader(stateTableHeader, success, (const StateTableHeader*)&stateTableHeader->stHeader)
-{
-  if(LE_FAILURE(success)) return;
-    stateSize = SWAPW(stateTableHeader->stHeader.stateSize);
-    classTableOffset = SWAPW(stateTableHeader->stHeader.classTableOffset);
-    stateArrayOffset = SWAPW(stateTableHeader->stHeader.stateArrayOffset);
-    entryTableOffset = SWAPW(stateTableHeader->stHeader.entryTableOffset);
-
-    classTable = LEReferenceTo<ClassTable>(stateTableHeader, success, ((char *) &stateTableHeader->stHeader + classTableOffset));
-  if(LE_FAILURE(success)) return;
-    firstGlyph = SWAPW(classTable->firstGlyph);
-    lastGlyph  = firstGlyph + SWAPW(classTable->nGlyphs);
-}
-
-StateTableProcessor::~StateTableProcessor()
-{
-}
-
-void StateTableProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) return;
-    LE_STATE_PATIENCE_INIT();
-
-    // Start at state 0
-    // XXX: How do we know when to start at state 1?
-    ByteOffset currentState = stateArrayOffset;
-
-    // XXX: reverse?
-    le_int32 currGlyph = 0;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    beginStateTable();
-
-    while (currGlyph <= glyphCount) {
-        if(LE_STATE_PATIENCE_DECR()) break; // patience exceeded.
-        if (LE_FAILURE(success)) break;
-        ClassCode classCode = classCodeOOB;
-        if (currGlyph == glyphCount) {
-            // XXX: How do we handle EOT vs. EOL?
-            classCode = classCodeEOT;
-            break;
-        } else {
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(glyphStorage[currGlyph]);
-
-            if (glyphCode == 0xFFFF) {
-                classCode = classCodeDEL;
-            } else if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-                classCode = classTable->classArray[glyphCode - firstGlyph];
-            }
-        }
-
-        LEReferenceToArrayOf<EntryTableIndex> stateArray(stHeader, success, currentState, LE_UNBOUNDED_ARRAY);
-        EntryTableIndex entryTableIndex = stateArray.getObject((le_uint8)classCode, success);
-        if (LE_FAILURE(success)) { break; }
-        LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-        currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-        LE_STATE_PATIENCE_INCR(currGlyph);
-    }
-
-    endStateTable();
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLEPROCESSOR_H
-#define __STATETABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class StateTableProcessor : public SubtableProcessor
-{
-public:
-    void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    virtual void beginStateTable() = 0;
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index, LEErrorCode &success) = 0;
-
-    virtual void endStateTable() = 0;
-
-protected:
-    StateTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~StateTableProcessor();
-
-    StateTableProcessor();
-
-    le_int16 stateSize;
-    ByteOffset classTableOffset;
-    ByteOffset stateArrayOffset;
-    ByteOffset entryTableOffset;
-
-    LEReferenceTo<ClassTable> classTable;
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-
-    LEReferenceTo<MorphStateTableHeader> stateTableHeader;
-    LEReferenceTo<StateTableHeader> stHeader; // for convenience
-
-private:
-    StateTableProcessor(const StateTableProcessor &other); // forbid copying of this class
-    StateTableProcessor &operator=(const StateTableProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-#include "LookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-StateTableProcessor2::StateTableProcessor2()
-{
-}
-
-StateTableProcessor2::StateTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor2(morphSubtableHeader, success), stateTableHeader(morphSubtableHeader, success),
-    stHeader(stateTableHeader, success, (const StateTableHeader2*)&stateTableHeader->stHeader),
-    nClasses(0), classTableOffset(0), stateArrayOffset(0), entryTableOffset(0), classTable(), format(0),
-    stateArray()
-{
-  if (LE_FAILURE(success)) {
-    return;
-  }
-  nClasses = SWAPL(stHeader->nClasses);
-  classTableOffset = SWAPL(stHeader->classTableOffset);
-  stateArrayOffset = SWAPL(stHeader->stateArrayOffset);
-  entryTableOffset = SWAPL(stHeader->entryTableOffset);
-
-  classTable = LEReferenceTo<LookupTable>(stHeader, success, classTableOffset);
-  if (LE_FAILURE(success)) return;
-  format = SWAPW(classTable->format);
-
-  stateArray = LEReferenceToArrayOf<EntryTableIndex2>(stHeader, success, stateArrayOffset, LE_UNBOUNDED_ARRAY);
-}
-
-StateTableProcessor2::~StateTableProcessor2()
-{
-}
-
-void StateTableProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) return;
-    // Start at state 0
-    // XXX: How do we know when to start at state 1?
-    le_uint16 currentState = 0;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    LE_STATE_PATIENCE_INIT();
-
-    le_int32 currGlyph = 0;
-    if ((coverage & scfReverse2) != 0) {  // process glyphs in descending order
-        currGlyph = glyphCount - 1;
-        dir = -1;
-    } else {
-        dir = 1;
-    }
-
-    beginStateTable();
-    switch (format) {
-        case ltfSimpleArray: {
-#ifdef TEST_FORMAT
-          LEReferenceTo<SimpleArrayLookupTable> lookupTable0(classTable, success);
-          if(LE_FAILURE(success)) break;
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                    break;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                        classCode = SWAPW(lookupTable0->valueArray[gid]);
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex); // return a zero-based index instead of a byte offset
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-#endif
-            break;
-        }
-        case ltfSegmentSingle: {
-          LEReferenceTo<SegmentSingleLookupTable> lookupTable2(classTable, success);
-          if(LE_FAILURE(success)) break;
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded  - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                    break;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                      const LookupSegment *segment =
-                        lookupTable2->lookupSegment(lookupTable2, lookupTable2->segments, gid, success);
-                        if (segment != NULL && LE_SUCCESS(success)) {
-                            classCode = SWAPW(segment->value);
-                        }
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses,success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        case ltfSegmentArray: {
-          //printf("Lookup Table Format4: specific interpretation needed!\n");
-            break;
-        }
-        case ltfSingleTable: {
-            LEReferenceTo<SingleTableLookupTable> lookupTable6(classTable, success);
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                    break;
-                } else if(currGlyph > glyphCount) {
-                  // note if > glyphCount, we've run off the end (bad font)
-                  currGlyph = glyphCount;
-                  classCode = classCodeEOT;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                      const LookupSingle *segment = lookupTable6->lookupSingle(lookupTable6, lookupTable6->entries, gid, success);
-                        if (segment != NULL) {
-                            classCode = SWAPW(segment->value);
-                        }
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        case ltfTrimmedArray: {
-            LEReferenceTo<TrimmedArrayLookupTable> lookupTable8(classTable, success);
-            if (LE_FAILURE(success)) break;
-            TTGlyphID firstGlyph = SWAPW(lookupTable8->firstGlyph);
-            TTGlyphID lastGlyph  = firstGlyph + SWAPW(lookupTable8->glyphCount);
-
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if(LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                    break;
-                } else {
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(glyphStorage[currGlyph]);
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-                        classCode = SWAPW(lookupTable8->valueArray[glyphCode - firstGlyph]);
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    endStateTable();
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/StateTableProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLEPROCESSOR2_H
-#define __STATETABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "LookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class StateTableProcessor2 : public SubtableProcessor2
-{
-public:
-    void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    virtual void beginStateTable() = 0;
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success) = 0;
-
-    virtual void endStateTable() = 0;
-
-protected:
-    StateTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~StateTableProcessor2();
-
-    StateTableProcessor2();
-
-    le_int32  dir;
-    le_uint16 format;
-    le_uint32 nClasses;
-    le_uint32 classTableOffset;
-    le_uint32 stateArrayOffset;
-    le_uint32 entryTableOffset;
-
-    LEReferenceTo<LookupTable> classTable;
-    LEReferenceToArrayOf<EntryTableIndex2> stateArray;
-    LEReferenceTo<MorphStateTableHeader2> stateTableHeader;
-    LEReferenceTo<StateTableHeader2> stHeader; // for convenience
-
-private:
-    StateTableProcessor2(const StateTableProcessor2 &other); // forbid copying of this class
-    StateTableProcessor2 &operator=(const StateTableProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/StateTables.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLES_H
-#define __STATETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-
-U_NAMESPACE_BEGIN
-
-
-
-
-/*
- * State table loop detection.
- * Detects if too many ( LE_STATE_PATIENCE_COUNT ) state changes occur without moving the glyph index 'g'.
- *
- * Usage (pseudocode):
- *
- * {
- *   LE_STATE_PATIENCE_INIT();
- *
- *   int g=0; // the glyph index - expect it to be moving
- *
- *   for(;;) {
- *     if(LE_STATE_PATIENCE_DECR()) { // decrements the patience counter
- *        // ran out of patience, get out.
- *        break;
- *     }
- *
- *     LE_STATE_PATIENCE_CURR(int, g); // store the 'current'
- *     state = newState(state,g);
- *     g+= <something, could be zero>;
- *     LE_STATE_PATIENCE_INCR(g);  // if g has moved, increment the patience counter. Otherwise leave it.
- *   }
- *
- */
-
-#define LE_STATE_PATIENCE_COUNT 4096 /**< give up if a state table doesn't move the glyph after this many iterations */
-#define LE_STATE_PATIENCE_INIT()  le_uint32 le_patience_count = LE_STATE_PATIENCE_COUNT
-#define LE_STATE_PATIENCE_DECR()  --le_patience_count==0
-#define LE_STATE_PATIENCE_CURR(type,x)  type le_patience_curr=(x)
-#define LE_STATE_PATIENCE_INCR(x)    if((x)!=le_patience_curr) ++le_patience_count;
-
-
-struct StateTableHeader
-{
-    le_int16 stateSize;
-    ByteOffset classTableOffset;
-    ByteOffset stateArrayOffset;
-    ByteOffset entryTableOffset;
-};
-
-struct StateTableHeader2
-{
-    le_uint32 nClasses;
-    le_uint32 classTableOffset;
-    le_uint32 stateArrayOffset;
-    le_uint32 entryTableOffset;
-};
-
-enum ClassCodes
-{
-    classCodeEOT = 0,
-    classCodeOOB = 1,
-    classCodeDEL = 2,
-    classCodeEOL = 3,
-    classCodeFirstFree = 4,
-    classCodeMAX = 0xFF
-};
-
-typedef le_uint8 ClassCode;
-
-struct ClassTable
-{
-    TTGlyphID firstGlyph;
-    le_uint16 nGlyphs;
-    ClassCode classArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ClassTable, classArray)
-
-enum StateNumber
-{
-    stateSOT        = 0,
-    stateSOL        = 1,
-    stateFirstFree  = 2,
-    stateMAX        = 0xFF
-};
-
-typedef le_uint8 EntryTableIndex;
-
-struct StateEntry
-{
-    ByteOffset  newStateOffset;
-    le_uint16    flags;
-};
-
-typedef le_uint16 EntryTableIndex2;
-
-struct StateEntry2 // same struct different interpretation
-{
-    le_uint16    newStateIndex;
-    le_uint16    flags;
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SubstitutionLookups.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "SubstitutionLookups.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    NOTE: This could be optimized somewhat by keeping track
-    of the previous sequenceIndex in the loop and doing next()
-    or prev() of the delta between that and the current
-    sequenceIndex instead of always resetting to the front.
-*/
-void SubstitutionLookup::applySubstitutionLookups(
-        LookupProcessor *lookupProcessor,
-        SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    GlyphIterator tempIterator(*glyphIterator);
-
-    for (le_uint16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
-        le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
-        le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
-
-        tempIterator.setCurrStreamPosition(position);
-        tempIterator.next(sequenceIndex);
-
-        lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SubstitutionLookups.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __SUBSTITUTIONLOOKUPS_H
-#define __SUBSTITUTIONLOOKUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-struct SubstitutionLookupRecord
-{
-    le_uint16  sequenceIndex;
-    le_uint16  lookupListIndex;
-};
-
-struct SubstitutionLookup
-{
-    static void applySubstitutionLookups(
-        LookupProcessor *lookupProcessor,
-        SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-                LEErrorCode& success);
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-SubtableProcessor::SubtableProcessor()
-{
-}
-
-SubtableProcessor::SubtableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : length(0), coverage(0), subtableFeatures(0L), subtableHeader(morphSubtableHeader)
-{
-  if(LE_FAILURE(success)) return;
-    length = SWAPW(subtableHeader->length);
-    coverage = SWAPW(subtableHeader->coverage);
-    subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-}
-
-SubtableProcessor::~SubtableProcessor()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __SUBTABLEPROCESSOR_H
-#define __SUBTABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SubtableProcessor : public UMemory {
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-    virtual ~SubtableProcessor();
-
-protected:
-    SubtableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    SubtableProcessor();
-
-    le_int16 length;
-    SubtableCoverage coverage;
-    FeatureFlags subtableFeatures;
-
-    const LEReferenceTo<MorphSubtableHeader> subtableHeader;
-
-private:
-
-    SubtableProcessor(const SubtableProcessor &other); // forbid copying of this class
-    SubtableProcessor &operator=(const SubtableProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-SubtableProcessor2::SubtableProcessor2()
-{
-}
-
-SubtableProcessor2::SubtableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : subtableHeader(morphSubtableHeader, success), length(0), coverage(0), subtableFeatures(0L)
-{
-  if(LE_FAILURE(success)) return;
-
-  length = SWAPL(subtableHeader->length);
-  coverage = SWAPL(subtableHeader->coverage);
-  subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-}
-
-SubtableProcessor2::~SubtableProcessor2()
-{
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/SubtableProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SUBTABLEPROCESSOR2_H
-#define __SUBTABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SubtableProcessor2 : public UMemory {
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-    virtual ~SubtableProcessor2();
-
-protected:
-    SubtableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    SubtableProcessor2();
-
-    le_uint32 length;
-    SubtableCoverage2 coverage;
-    FeatureFlags subtableFeatures;
-
-    const LEReferenceTo<MorphSubtableHeader2> subtableHeader;
-
-private:
-
-    SubtableProcessor2(const SubtableProcessor2 &other); // forbid copying of this class
-    SubtableProcessor2 &operator=(const SubtableProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/SunLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* Header for class sun_font_SunLayoutEngine */
-
-#include <jni_util.h>
-#include <stdlib.h>
-
-#include "FontInstanceAdapter.h"
-#include "LayoutEngine.h"
-#include "sun_font_SunLayoutEngine.h"
-#include "sunfontids.h"
-
-void getFloat(JNIEnv* env, jobject pt, jfloat &x, jfloat &y) {
-    x = env->GetFloatField(pt, sunFontIDs.xFID);
-    y = env->GetFloatField(pt, sunFontIDs.yFID);
-}
-
-void putFloat(JNIEnv* env, jobject pt, jfloat x, jfloat y) {
-    env->SetFloatField(pt, sunFontIDs.xFID, x);
-    env->SetFloatField(pt, sunFontIDs.yFID, y);
-}
-
-static jclass gvdClass = 0;
-static const char* gvdClassName = "sun/font/GlyphLayout$GVData";
-static jfieldID gvdCountFID = 0;
-static jfieldID gvdFlagsFID = 0;
-static jfieldID gvdGlyphsFID = 0;
-static jfieldID gvdPositionsFID = 0;
-static jfieldID gvdIndicesFID = 0;
-
-#define TYPO_RTL 0x80000000
-#define TYPO_MASK 0x7
-
-JNIEXPORT void JNICALL
-Java_sun_font_SunLayoutEngine_initGVIDs
-    (JNIEnv *env, jclass cls) {
-    CHECK_NULL(gvdClass = env->FindClass(gvdClassName));
-    CHECK_NULL(gvdClass = (jclass)env->NewGlobalRef(gvdClass));
-    CHECK_NULL(gvdCountFID = env->GetFieldID(gvdClass, "_count", "I"));
-    CHECK_NULL(gvdFlagsFID = env->GetFieldID(gvdClass, "_flags", "I"));
-    CHECK_NULL(gvdGlyphsFID = env->GetFieldID(gvdClass, "_glyphs", "[I"));
-    CHECK_NULL(gvdPositionsFID = env->GetFieldID(gvdClass, "_positions", "[F"));
-    gvdIndicesFID = env->GetFieldID(gvdClass, "_indices", "[I");
-}
-
-int putGV(JNIEnv* env, jint gmask, jint baseIndex, jobject gvdata, const LayoutEngine* engine, int glyphCount) {
-    int count = env->GetIntField(gvdata, gvdCountFID);
-    if (count < 0) {
-      JNU_ThrowInternalError(env, "count negative");
-      return 0;
-    }
-
-    jarray glyphArray = (jarray)env->GetObjectField(gvdata, gvdGlyphsFID);
-    if (IS_NULL(glyphArray)) {
-      JNU_ThrowInternalError(env, "glypharray null");
-      return 0;
-    }
-    jint capacity = env->GetArrayLength(glyphArray);
-    if (count + glyphCount > capacity) {
-      JNU_ThrowArrayIndexOutOfBoundsException(env, "");
-      return 0;
-    }
-
-    jarray posArray = (jarray)env->GetObjectField(gvdata, gvdPositionsFID);
-    if (IS_NULL(glyphArray)) {
-      JNU_ThrowInternalError(env, "positions array null");
-      return 0;
-    }
-    jarray inxArray = (jarray)env->GetObjectField(gvdata, gvdIndicesFID);
-    if (IS_NULL(inxArray)) {
-      JNU_ThrowInternalError(env, "indices array null");
-      return 0;
-    }
-
-    int countDelta = 0;
-
-    // le_uint32 is the same size as jint... forever, we hope
-    le_uint32* glyphs = (le_uint32*)env->GetPrimitiveArrayCritical(glyphArray, NULL);
-    if (glyphs) {
-      jfloat* positions = (jfloat*)env->GetPrimitiveArrayCritical(posArray, NULL);
-      if (positions) {
-        jint* indices = (jint*)env->GetPrimitiveArrayCritical(inxArray, NULL);
-        if (indices) {
-          LEErrorCode status = (LEErrorCode)0;
-          engine->getGlyphs(glyphs + count, gmask, status);
-          engine->getGlyphPositions(positions + (count * 2), status);
-          engine->getCharIndices((le_int32*)(indices + count), baseIndex, status);
-
-          countDelta = glyphCount;
-
-          // !!! need engine->getFlags to signal positions, indices data
-          /* "0" arg used instead of JNI_COMMIT as we want the carray
-           * to be freed by any VM that actually passes us a copy.
-           */
-          env->ReleasePrimitiveArrayCritical(inxArray, indices, 0);
-        }
-        env->ReleasePrimitiveArrayCritical(posArray, positions, 0);
-      }
-      env->ReleasePrimitiveArrayCritical(glyphArray, glyphs, 0);
-    }
-
-    if (countDelta) {
-      count += countDelta;
-      env->SetIntField(gvdata, gvdCountFID, count);
-    }
-
-  return 1;
-}
-
-/*
- * Class:     sun_font_SunLayoutEngine
- * Method:    nativeLayout
- * Signature: (Lsun/font/FontStrike;[CIIIIZLjava/awt/geom/Point2D$Float;Lsun/font/GlyphLayout$GVData;)V
- */
-JNIEXPORT void JNICALL Java_sun_font_SunLayoutEngine_nativeLayout
-   (JNIEnv *env, jclass cls, jobject font2d, jobject strike, jfloatArray matrix, jint gmask,
-   jint baseIndex, jcharArray text, jint start, jint limit, jint min, jint max,
-   jint script, jint lang, jint typo_flags, jobject pt, jobject gvdata,
-   jlong upem, jlong layoutTables)
-{
-    //  fprintf(stderr, "nl font: %x strike: %x script: %d\n", font2d, strike, script); fflush(stderr);
-  float mat[4];
-  env->GetFloatArrayRegion(matrix, 0, 4, mat);
-  FontInstanceAdapter fia(env, font2d, strike, mat, 72, 72, (le_int32) upem, (TTLayoutTableCache *) layoutTables);
-  LEErrorCode success = LE_NO_ERROR;
-  LayoutEngine *engine = LayoutEngine::layoutEngineFactory(&fia, script, lang, typo_flags & TYPO_MASK, success);
-  if (engine == NULL) {
-    env->SetIntField(gvdata, gvdCountFID, -1); // flag failure
-    return;
-  }
-
-  if (min < 0) min = 0;
-  if (max < min) max = min; /* defensive coding */
-  // have to copy, yuck, since code does upcalls now.  this will be soooo slow
-  jint len = max - min;
-  jchar buffer[256];
-  jchar* chars = buffer;
-  if (len > 256) {
-    size_t size = len * sizeof(jchar);
-    if (size / sizeof(jchar) != (size_t)len) {
-      return;
-    }
-    chars = (jchar*)malloc(size);
-    if (chars == 0) {
-      return;
-    }
-  }
-  //  fprintf(stderr, "nl chars: %x text: %x min %d len %d typo %x\n", chars, text, min, len, typo_flags); fflush(stderr);
-
-  env->GetCharArrayRegion(text, min, len, chars);
-
-  jfloat x, y;
-  getFloat(env, pt, x, y);
-  jboolean rtl = (typo_flags & TYPO_RTL) != 0;
-  int glyphCount = engine->layoutChars(chars, start - min, limit - start, len, rtl, x, y, success);
-    // fprintf(stderr, "sle nl len %d -> gc: %d\n", len, glyphCount); fflush(stderr);
-
-  engine->getGlyphPosition(glyphCount, x, y, success);
-
-   // fprintf(stderr, "layout glyphs: %d x: %g y: %g\n", glyphCount, x, y); fflush(stderr);
-   if (LE_FAILURE(success)) {
-       env->SetIntField(gvdata, gvdCountFID, -1); // flag failure
-   } else {
-      if (putGV(env, gmask, baseIndex, gvdata, engine, glyphCount)) {
-          if (!(env->ExceptionCheck())) {
-              // !!! hmmm, could use current value in positions array of GVData...
-              putFloat(env, pt, x, y);
-          }
-      }
-   }
-
-  if (chars != buffer) {
-    free(chars);
-  }
-
-  delete engine;
-
-}
--- a/src/java.desktop/share/native/libfontmanager/layout/ThaiLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "ThaiLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-
-#include "KernTable.h"
-
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
-
-ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fErrorChar = 0x25CC;
-
-    // Figure out which presentation forms the font uses
-    if (! fontInstance->canDisplay(0x0E01)) {
-        // No Thai in font; don't use presentation forms.
-        fGlyphSet = 3;
-    } else if (fontInstance->canDisplay(0x0E64)) {
-        // WorldType uses reserved space in Thai block
-        fGlyphSet = 0;
-    } else if (fontInstance->canDisplay(0xF701)) {
-        // Microsoft corporate zone
-        fGlyphSet = 1;
-
-        if (!fontInstance->canDisplay(fErrorChar)) {
-            fErrorChar = 0xF71B;
-        }
-    } else if (fontInstance->canDisplay(0xF885)) {
-        // Apple corporate zone
-        fGlyphSet = 2;
-    } else {
-        // no presentation forms in the font
-        fGlyphSet = 3;
-    }
-}
-
-ThaiLayoutEngine::~ThaiLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters (0..max provided for context)
-// Output: glyphs, char indices
-// Returns: the glyph count
-// NOTE: this assumes that ThaiShaping::compose will allocate the outChars array...
-le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    LEUnicode *outChars;
-    le_int32 glyphCount;
-
-    // This is enough room for the worst-case expansion
-    // (it says here...)
-    outChars = LE_NEW_ARRAY(LEUnicode, count * 2);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count * 2, FALSE, success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage);
-    mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success);
-
-    LE_DELETE_ARRAY(outChars);
-
-    glyphStorage.adoptGlyphCount(glyphCount);
-    return glyphCount;
-}
-
-// This is the same as LayoutEngline::adjustGlyphPositions() except that it doesn't call adjustMarkGlyphs
-void ThaiLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool  /*reverse*/,
-                                        LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-      LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-      KernTable kt(kernTable, success);
-      kt.process(glyphStorage, success);
-    }
-
-    // default is no adjustments
-    return;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ThaiLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-#ifndef __THAILAYOUTENGINE_H
-#define __THAILAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-/**
- * This class implements layout for the Thai script, using the ThaiShapingClass.
- * All existing Thai fonts use an encoding which assigns character codes to all
- * the variant forms needed to display accents and tone marks correctly in context.
- * This class can deal with fonts using the Microsoft, Macintosh, and WorldType encodings.
- *
- * @internal
- */
-class ThaiLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This constructs an instance of ThaiLayoutEngine for the given font, script and
-     * language. It examines the font, using LEFontInstance::canDisplay, to set fGlyphSet
-     * and fErrorChar. (see below)
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param languageCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~ThaiLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    /**
-     * A small integer indicating which Thai encoding
-     * the font uses.
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    le_uint8 fGlyphSet;
-
-    /**
-     * The character used as a base for vowels and
-     * tone marks that are out of sequence. Usually
-     * this will be Unicode 0x25CC, if the font can
-     * display it.
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    LEUnicode fErrorChar;
-
-    /**
-     * This method performs Thai layout. It calls ThaiShaping::compose to
-     * generate the correct contextual character codes, and then calls
-     * mapCharsToGlyphs to generate the glyph indices.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does positioning adjustments like accent positioning and
-     * kerning. The default implementation does nothing. Subclasses needing
-     * position adjustments must override this method.
-     *
-     * Note that this method has both characters and glyphs as input so that
-     * it can use the character codes to determine glyph types if that information
-     * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-     * table)
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-     *                       adjusted as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/ThaiShaping.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "LEGlyphStorage.h"
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-enum {
-    CH_SPACE        = 0x0020,
-    CH_YAMAKKAN     = 0x0E4E,
-    CH_MAI_HANAKAT  = 0x0E31,
-    CH_SARA_AA      = 0x0E32,
-    CH_SARA_AM      = 0x0E33,
-    CH_SARA_UEE     = 0x0E37,
-    CH_MAITAIKHU    = 0x0E47,
-    CH_NIKHAHIT     = 0x0E4D,
-    CH_SARA_U       = 0x0E38,
-    CH_PHINTHU      = 0x0E3A,
-    CH_YO_YING      = 0x0E0D,
-    CH_THO_THAN     = 0x0E10,
-    CH_DOTTED_CIRCLE = 0x25CC
-};
-
-    le_uint8 ThaiShaping::getCharClass(LEUnicode ch)
-{
-    le_uint8 charClass = NON;
-
-    if (ch >= 0x0E00 && ch <= 0x0E5B) {
-        charClass = classTable[ch - 0x0E00];
-    }
-
-    return charClass;
-}
-
-
-LEUnicode ThaiShaping::leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet)
-{
-    static const LEUnicode leftAboveVowels[][7] = {
-        {0x0E61, 0x0E32, 0x0E33, 0x0E64, 0x0E65, 0x0E66, 0x0E67},
-        {0xF710, 0x0E32, 0x0E33, 0xF701, 0xF702, 0xF703, 0xF704},
-        {0xF884, 0x0E32, 0x0E33, 0xF885, 0xF886, 0xF887, 0xF788},
-        {0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37}
-    };
-
-    if (vowel >= CH_MAI_HANAKAT && vowel <= CH_SARA_UEE) {
-        return leftAboveVowels[glyphSet][vowel - CH_MAI_HANAKAT];
-    }
-
-    if (vowel == CH_YAMAKKAN && glyphSet == 0) {
-        return 0x0E7E;
-    }
-
-    return vowel;
-}
-
-LEUnicode ThaiShaping::lowerRightTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerRightTones[][7] = {
-        {0x0E68, 0x0E69, 0x0E6A, 0x0E6B, 0x0E6C, 0x0E6D, 0x0E6E},
-        {0x0E47, 0xF70A, 0xF70B, 0xF70C, 0xF70D, 0xF70E, 0x0E4D},
-        {0x0E47, 0xF88B, 0xF88E, 0xF891, 0xF894, 0xF897, 0x0E4D},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return lowerRightTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-
-    return tone;
-}
-
-LEUnicode ThaiShaping::lowerLeftTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerLeftTones[][7] = {
-        {0x0E76, 0x0E77, 0x0E78, 0x0E79, 0x0E7A, 0x0E7B, 0x0E7C},
-        {0xF712, 0xF705, 0xF706, 0xF707, 0xF708, 0xF709, 0xF711},
-        {0xF889, 0xF88C, 0xF88F, 0xF892, 0xF895, 0xF898, 0xF899},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return lowerLeftTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-
-    return tone;
-}
-
-LEUnicode ThaiShaping::upperLeftTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode upperLeftTones[][7] = {
-        {0x0E6F, 0x0E70, 0x0E71, 0x0E72, 0x0E73, 0x0E74, 0x0E75},
-        {0xF712, 0xF713, 0xF714, 0xF715, 0xF716, 0xF717, 0xF711},
-        {0xF889, 0xF88A, 0xF88D, 0xF890, 0xF893, 0xF896, 0xF899},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return upperLeftTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-
-    return tone;
-}
-
-LEUnicode ThaiShaping::lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerBelowVowels[][3] = {
-        {0x0E3C, 0x0E3D, 0x0E3E},
-        {0xF718, 0xF719, 0xF71A},
-        {0x0E38, 0x0E39, 0x0E3A},
-        {0x0E38, 0x0E39, 0x0E3A}
-
-    };
-
-    if (vowel >= CH_SARA_U && vowel <= CH_PHINTHU) {
-        return lowerBelowVowels[glyphSet][vowel - CH_SARA_U];
-    }
-
-    return vowel;
-}
-
-LEUnicode ThaiShaping::noDescenderCOD(LEUnicode cod, le_uint8 glyphSet)
-{
-    static const LEUnicode noDescenderCODs[][4] = {
-        {0x0E60, 0x0E0E, 0x0E0F, 0x0E63},
-        {0xF70F, 0x0E0E, 0x0E0F, 0xF700},
-        {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10},
-        {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10}
-
-    };
-
-    if (cod >= CH_YO_YING && cod <= CH_THO_THAN) {
-        return noDescenderCODs[glyphSet][cod - CH_YO_YING];
-    }
-
-    return cod;
-}
-
-le_uint8 ThaiShaping::doTransition (StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-    switch (transition.action) {
-    case tA:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-
-    case tC:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-
-    case tD:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = leftAboveVowel(currChar, glyphSet);
-        break;
-
-    case tE:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerRightTone(currChar, glyphSet);
-        break;
-
-    case tF:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerLeftTone(currChar, glyphSet);
-        break;
-
-    case tG:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = upperLeftTone(currChar, glyphSet);
-        break;
-
-    case tH:
-    {
-        LEUnicode cod = outputBuffer[outputIndex - 1];
-        LEUnicode coa = noDescenderCOD(cod, glyphSet);
-
-        if (cod != coa) {
-            outputBuffer[outputIndex - 1] = coa;
-
-            glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-            outputBuffer[outputIndex++] = currChar;
-            break;
-        }
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerBelowVowel(currChar, glyphSet);
-        break;
-    }
-
-    case tR:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = errorChar;
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-
-    case tS:
-        if (currChar == CH_SARA_AM) {
-            glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-            outputBuffer[outputIndex++] = errorChar;
-        }
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-
-    default:
-        // FIXME: if we get here, there's an error
-        // in the state table!
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-     }
-
-     return transition.nextState;
-}
-
-le_uint8 ThaiShaping::getNextState(LEUnicode ch, le_uint8 prevState, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
-                              le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
-{
-    StateTransition transition;
-
-    charClass = getCharClass(ch);
-    transition = getTransition(prevState, charClass);
-
-    return doTransition(transition, ch, inputIndex, glyphSet, errorChar, output, glyphStorage, outputIndex);
-}
-
-le_bool ThaiShaping::isLegalHere(LEUnicode ch, le_uint8 prevState)
-{
-    le_uint8 charClass = getCharClass(ch);
-    StateTransition transition = getTransition(prevState, charClass);
-
-    switch (transition.action) {
-    case tA:
-    case tC:
-    case tD:
-    case tE:
-    case tF:
-    case tG:
-    case tH:
-        return TRUE;
-
-    case tR:
-    case tS:
-        return FALSE;
-
-    default:
-        // FIXME: if we get here, there's an error
-        // in the state table!
-        return FALSE;
-    }
-}
-
-le_int32 ThaiShaping::compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
-                          LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage)
-{
-    le_uint8 state = 0;
-    le_int32 inputIndex;
-    le_int32 outputIndex = 0;
-    le_uint8 conState = 0xFF;
-    le_int32 conInput = -1;
-    le_int32 conOutput = -1;
-
-    for (inputIndex = 0; inputIndex < charCount; inputIndex += 1) {
-        LEUnicode ch = input[inputIndex + offset];
-        le_uint8 charClass;
-
-        // Decompose SARA AM into NIKHAHIT + SARA AA
-        if (ch == CH_SARA_AM && isLegalHere(ch, state) && conState < stateCount) {
-            outputIndex = conOutput;
-            state = getNextState(CH_NIKHAHIT, conState, inputIndex, glyphSet, errorChar, charClass,
-                output, glyphStorage, outputIndex);
-
-            for (int j = conInput + 1; j < inputIndex; j += 1) {
-                ch = input[j + offset];
-                state = getNextState(ch, state, j, glyphSet, errorChar, charClass,
-                    output, glyphStorage, outputIndex);
-            }
-
-            ch = CH_SARA_AA;
-        }
-
-        state = getNextState(ch, state, inputIndex, glyphSet, errorChar, charClass,
-            output, glyphStorage, outputIndex);
-
-        if (charClass >= CON && charClass <= COD) {
-            conState = state;
-            conInput = inputIndex;
-            conOutput = outputIndex;
-        }
-    }
-
-    return outputIndex;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ThaiShaping.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __THAISHAPING_H
-#define __THAISHAPING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ThaiShaping /* not : public UObject because all methods are static */ {
-public:
-
-    enum {
-        // Character classes
-        NON =  0,
-        CON =  1,
-        COA =  2,
-        COD =  3,
-        LVO =  4,
-        FV1 =  5,
-        FV2 =  6,
-        FV3 =  7,
-        BV1 =  8,
-        BV2 =  9,
-        BDI = 10,
-        TON = 11,
-        AD1 = 12,
-        AD2 = 13,
-        AD3 = 14,
-        NIK = 15,
-        AV1 = 16,
-        AV2 = 17,
-        AV3 = 18,
-        classCount = 19,
-
-        // State Transition actions
-        tA  =  0,
-        tC  =  1,
-        tD  =  2,
-        tE  =  3,
-        tF  =  4,
-        tG  =  5,
-        tH  =  6,
-        tR  =  7,
-        tS  =  8,
-        stateCount = 52
-    };
-
-    struct StateTransition
-    {
-        le_uint8 nextState;
-        le_uint8 action;
-
-        le_uint8 getNextState() { return nextState; };
-        le_uint8 getAction() { return action; };
-    };
-
-    static le_int32 compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage);
-
-private:
-    // forbid instantiation
-    ThaiShaping();
-
-    static const le_uint8 classTable[];
-    static const StateTransition thaiStateTable[stateCount][classCount];
-
-    inline static StateTransition getTransition(le_uint8 state, le_uint8 currClass);
-
-    static le_uint8 doTransition(StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
-
-    static le_uint8 getNextState(LEUnicode ch, le_uint8 state, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
-        le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
-
-    static le_bool isLegalHere(LEUnicode ch, le_uint8 prevState);
-    static le_uint8 getCharClass(LEUnicode ch);
-
-    static LEUnicode noDescenderCOD(LEUnicode cod, le_uint8 glyphSet);
-    static LEUnicode leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet);
-    static LEUnicode lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet);
-    static LEUnicode lowerRightTone(LEUnicode tone, le_uint8 glyphSet);
-    static LEUnicode lowerLeftTone(LEUnicode tone, le_uint8 glyphSet);
-    static LEUnicode upperLeftTone(LEUnicode tone, le_uint8 glyphSet);
-
-};
-
-inline ThaiShaping::StateTransition ThaiShaping::getTransition(le_uint8 state, le_uint8 currClass)
-{
-    return thaiStateTable[state][currClass];
-}
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ThaiStateTables.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- *
- * (C) Copyright IBM Corp. 1999-2003 - All Rights Reserved
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- */
-
-#include "LETypes.h"
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 ThaiShaping::classTable[] = {
-    //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
-    //       -------------------------------------------------------------------------------
-    /*0E00*/ NON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COD, COD, COD,
-    /*0E10*/ COD, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COA, CON, COA, CON, COA,
-    /*0E20*/ CON, CON, CON, CON, FV3, CON, FV3, CON, CON, CON, CON, CON, CON, CON, CON, NON,
-    /*0E30*/ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, BV1, BV2, BDI, NON, NON, NON, NON, NON,
-    /*0E40*/ LVO, LVO, LVO, LVO, LVO, FV2, NON, AD2, TON, TON, TON, TON, AD1, NIK, AD3, NON,
-    /*0E50*/ NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON
-};
-
-const ThaiShaping::StateTransition ThaiShaping::thaiStateTable[ThaiShaping::stateCount][ThaiShaping::classCount] = {
-    //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-    //|         N         C         C         C         L         F         F         F         B         B         B         T         A         A         A         N         A         A         A    |
-    //|         O         O         O         O         V         V         V         V         V         V         D         O         D         D         D         I         V         V         V    |
-    //|         N         N         A         D         O         1         2         3         1         2         I         N         1         2         3         K         1         2         3    |
-    //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-    /*00*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*01*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 2, tC}, { 6, tC}, { 0, tC}, { 8, tE}, { 0, tE}, { 0, tE}, { 0, tC}, { 9, tE}, {11, tC}, {14, tC}, {16, tC}},
-    /*02*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 3, tE}, { 0, tE}, { 0, tR}, { 0, tR}, { 4, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*03*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*04*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 5, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*05*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*06*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 7, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*07*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*08*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*09*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {10, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*10*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*11*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {12, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {13, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*12*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*13*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*14*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {15, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*15*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*16*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {17, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*17*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*18*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {19, tC}, {23, tC}, { 0, tC}, {25, tF}, { 0, tF}, { 0, tF}, { 0, tD}, {26, tF}, {28, tD}, {31, tD}, {33, tD}},
-    /*19*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {20, tF}, { 0, tF}, { 0, tR}, { 0, tR}, {21, tF}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*20*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*21*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {22, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*22*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*23*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {24, tF}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*24*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*25*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*26*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {27, tG}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*27*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*28*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {29, tG}, { 0, tG}, { 0, tR}, { 0, tR}, {30, tG}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*29*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*30*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*31*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {32, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*32*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*33*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {34, tG}, { 0, tR}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*34*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*35*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {36, tH}, {40, tH}, { 0, tH}, {42, tE}, { 0, tE}, { 0, tE}, { 0, tC}, {43, tE}, {45, tC}, {48, tC}, {50, tC}},
-    /*36*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {37, tE}, { 0, tE}, { 0, tR}, { 0, tR}, {38, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*37*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*38*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {39, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*39*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*40*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {41, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*41*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*42*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*43*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {44, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*44*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*45*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {46, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {47, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*46*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*47*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*48*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {49, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*49*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*50*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {51, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*51*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}}
-};
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/TibetanLayoutEngine.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-
-#include "OpenTypeLayoutEngine.h"
-#include "TibetanLayoutEngine.h"
-#include "LEGlyphStorage.h"
-#include "TibetanReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TibetanOpenTypeLayoutEngine)
-
-TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                         le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap   = TibetanReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap   = TibetanReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-TibetanOpenTypeLayoutEngine::~TibetanOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;  // worst case is 3 for Khmer  TODO check if 2 is enough
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-    le_int32 outCharCount = TibetanReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/TibetanLayoutEngine.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-#ifndef __TIBETANLAYOUTENGINE_H
-#define __TIBETANLAYOUTENGINE_H
-
-// #include "LETypes.h"
-// #include "LEFontInstance.h"
-// #include "LEGlyphFilter.h"
-// #include "LayoutEngine.h"
-// #include "OpenTypeLayoutEngine.h"
-
-// #include "GlyphSubstitutionTables.h"
-// #include "GlyphDefinitionTables.h"
-// #include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-// class MPreFixups;
-// class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Dzongkha and Tibetan OpenType fonts
- *
- * @internal
- */
-class TibetanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of TibetanOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Tibetan OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~TibetanOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @internal ICU 3.6
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @internal ICU 3.6
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Tibetan OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered.
-     * It may also split some vowels, resulting in more output characters than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/TibetanReordering.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,414 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-//#include <stdio.h>
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "TibetanReordering.h"
-#include "LEGlyphStorage.h"
-
-
-U_NAMESPACE_BEGIN
-
-// Characters that get referred to by name...
-enum
-{
-    C_DOTTED_CIRCLE = 0x25CC,
-    C_PRE_NUMBER_MARK = 0x0F3F
- };
-
-
-enum
-{
-    // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-    // they are also used to know where a character should be placed (location in reference to the base character)
-    // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-    // indicate error in syllable construction
-    _xx = TibetanClassTable::CC_RESERVED,
-    _ba = TibetanClassTable::CC_BASE,
-    _sj = TibetanClassTable::CC_SUBJOINED | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _tp = TibetanClassTable::CC_TSA_PHRU  | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _ac = TibetanClassTable::CC_A_CHUNG |  TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _cs = TibetanClassTable::CC_COMP_SANSKRIT | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _ha = TibetanClassTable::CC_HALANTA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _bv = TibetanClassTable::CC_BELOW_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _av = TibetanClassTable::CC_ABOVE_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _an = TibetanClassTable::CC_ANUSVARA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _cb = TibetanClassTable::CC_CANDRABINDU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _vs = TibetanClassTable::CC_VISARGA | TibetanClassTable::CF_DOTTED_CIRCLE| TibetanClassTable::CF_POS_AFTER,
-    _as = TibetanClassTable::CC_ABOVE_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _bs = TibetanClassTable::CC_BELOW_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _di = TibetanClassTable::CC_DIGIT | TibetanClassTable::CF_DIGIT,
-    _pd = TibetanClassTable::CC_PRE_DIGIT_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_PREDIGIT | TibetanClassTable::CF_POS_BEFORE ,
-    _bd = TibetanClassTable::CC_POST_BELOW_DIGIT_M | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_AFTER
-};
-
-
-// Character class tables
-//_xx Non Combining characters
-//_ba Base Consonants
-//_sj Subjoined consonants
-//_tp Tsa - phru
-//_ac A-chung, Vowel Lengthening mark
-//_cs Precomposed Sanskrit vowel + subjoined consonants
-//_ha Halanta/Virama
-//_bv Below vowel
-//_av above vowel
-//_an Anusvara
-//_cb Candrabindu
-//_vs Visaraga/Post mark
-//_as Upper Stress marks
-//_bs Lower Stress marks
-//_di Digit
-//_pd Number pre combining, Needs reordering
-//_bd Other number combining marks
-
-static const TibetanClassTable::CharClass tibetanCharClasses[] =
-{
-   // 0    1    2    3    4    5    6    7    8    9   a     b   c    d     e   f
-    _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0F00 - 0F0F 0
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, // 0F10 - 0F1F 1
-    _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, // 0F20 - 0F2F 2
-    _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, // 0F30 - 0F3F 3
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F40 - 0F4F 4
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F50 - 0F5F 5
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, // 0F60 - 0F6F 6
-    _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, // 0F70 - 0F7F 7
-    _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, // 0F80 - 0F8F 8
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0F90 - 0F9F 9
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0FA0 - 0FAF a
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, // 0FB0 - 0FBF b
-    _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FC0 - 0FCF c
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx,// 0FD0 - 0FDF  d
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FE0 - 0FEF e
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FF0 - 0FFF f
-};
-
-
-//
-// Tibetan Class Tables
-//
-
-//
-// The range of characters defined in the above table is defined here. For Tibetan 0F00 to 0FFF
-// Even if the Tibetan range is bigger, most of the characters are not combinable, and therefore treated
-// as _xx
-static const TibetanClassTable tibetanClassTable = {0x0F00, 0x0FFF, tibetanCharClasses};
-
-
-// Below we define how a character in the input string is either in the tibetanCharClasses table
-// (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back
-TibetanClassTable::CharClass TibetanClassTable::getCharClass(LEUnicode ch) const
-{
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-
-    return classTable[ch - firstChar];
-}
-
-const TibetanClassTable *TibetanClassTable::getTibetanClassTable()
-{
-    return &tibetanClassTable;
-}
-
-
-
-class TibetanReorderingOutput : public UMemory {
-private:
-    le_int32 fSyllableCount;
-    le_int32 fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-
-public:
-    TibetanReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-    {
-        // nothing else to do...
-    }
-
-    ~TibetanReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask featureMask)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, featureMask, success);
-
-        fOutIndex += 1;
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-//TODO remove unused flags
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-
-#define prefFeatureTag LE_PREF_FEATURE_TAG
-#define abvfFeatureTag LE_ABVF_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-// Shaping features
-#define prefFeatureMask 0x80000000UL
-#define blwfFeatureMask 0x40000000UL
-#define abvfFeatureMask 0x20000000UL
-#define pstfFeatureMask 0x10000000UL
-#define presFeatureMask 0x08000000UL
-#define blwsFeatureMask 0x04000000UL
-#define abvsFeatureMask 0x02000000UL
-#define pstsFeatureMask 0x01000000UL
-#define cligFeatureMask 0x00800000UL
-#define ccmpFeatureMask 0x00040000UL
-
-// Positioning features
-#define distFeatureMask 0x00400000UL
-#define blwmFeatureMask 0x00200000UL
-#define abvmFeatureMask 0x00100000UL
-#define mkmkFeatureMask 0x00080000UL
-
-#define tagPref    (ccmpFeatureMask | prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-#define tagAbvf    (ccmpFeatureMask | abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-#define tagPstf    (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-#define tagBlwf    (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-#define tagDefault (ccmpFeatureMask | prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-
-
-
-// These are in the order in which the features need to be applied
-// for correct processing
-static const FeatureMap featureMap[] =
-{
-    // Shaping features
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {prefFeatureTag, prefFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {abvfFeatureTag, abvfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {cligFeatureTag, cligFeatureMask},
-
-    // Positioning features
-    {distFeatureTag, distFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-// The stateTable is used to calculate the end (the length) of a well
-// formed Tibetan Syllable.
-//
-// Each horizontal line is ordered exactly the same way as the values in TibetanClassTable
-// CharClassValues in TibetanReordering.h This coincidence of values allows the
-// follow up of the table.
-//
-// Each line corresponds to a state, which does not necessarily need to be a type
-// of component... for example, state 2 is a base, with is always a first character
-// in the syllable, but the state could be produced a consonant of any type when
-// it is the first character that is analysed (in ground state).
-//
-static const le_int8 tibetanStateTable[][TibetanClassTable::CC_COUNT] =
-{
-
-
-    //Dzongkha state table
-    //xx  ba  sj  tp  ac  cs  ha  bv  av  an  cb  vs  as  bs  di  pd  bd
-    { 1,  2,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, //  1 - exit state (or sign to the right of the syllable)
-    {-1, -1,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  2 - Base consonant
-    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  3 - Tsa phru after base
-    {-1, -1,  4,  6,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  4 - Subjoined consonant after base
-    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  5 - Subjoined consonant after tsa phru
-    {-1, -1, -1, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  6 - Tsa phru after subjoined consonant
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, //  7 - Pre Composed Sanskrit
-    {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  8 - A-chung
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, //  9 - Halanta
-    {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 10 - below vowel 1
-    {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 11 - below vowel 2
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 12 - below vowel 3
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, // 13 - Anusvara before vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, // 14 - above vowel 1
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, // 15 - above vowel 2
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, // 16 - above vowel 3
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, // 17 - Anusvara or Candrabindu after vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 18 - Visarga
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 19 - strss mark
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, // 20 - digit
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 21 - digit mark
-
-
-};
-
-
-const FeatureMap *TibetanReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureMapCount;
-
-    return featureMap;
-}
-
-
-// Given an input string of characters and a location in which to start looking
-// calculate, using the state table, which one is the last character of the syllable
-// that starts in the starting position.
-le_int32 TibetanReordering::findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-
-    while (cursor < charCount) {
-        TibetanClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & TibetanClassTable::CF_CLASS_MASK);
-
-        state = tibetanStateTable[state][charClass];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-
-// This is the real reordering function as applied to the Tibetan language
-
-le_int32 TibetanReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    const TibetanClassTable *classTable = TibetanClassTable::getTibetanClassTable();
-
-    TibetanReorderingOutput output(outChars, glyphStorage);
-    TibetanClassTable::CharClass charClass;
-    le_int32 i, prev = 0;
-
-    // This loop only exits when we reach the end of a run, which may contain
-    // several syllables.
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-
-        output.reset();
-
-        // shall we add a dotted circle?
-        // If in the position in which the base should be (first char in the string) there is
-        // a character that has the Dotted circle flag (a character that cannot be a base)
-        // then write a dotted circle
-        if (classTable->getCharClass(chars[prev]) & TibetanClassTable::CF_DOTTED_CIRCLE) {
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
-        }
-
-        // copy the rest to output, inverting the pre-number mark if present after a digit.
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-
-           if ((TibetanClassTable::CF_DIGIT & charClass)
-              && ( classTable->getCharClass(chars[i+1]) & TibetanClassTable::CF_PREDIGIT))
-           {
-                         output.writeChar(C_PRE_NUMBER_MARK, i, tagPref);
-                         output.writeChar(chars[i], i+1 , tagPref);
-                        i += 1;
-          } else {
-            switch (charClass & TibetanClassTable::CF_POS_MASK) {
-
-                // If the present character is a number, and the next character is a pre-number combining mark
-            // then the two characters are reordered
-
-                case TibetanClassTable::CF_POS_ABOVE :
-                    output.writeChar(chars[i], i, tagAbvf);
-                    break;
-
-                case TibetanClassTable::CF_POS_AFTER :
-                    output.writeChar(chars[i], i, tagPstf);
-                    break;
-
-                case TibetanClassTable::CF_POS_BELOW :
-                    output.writeChar(chars[i], i, tagBlwf);
-                    break;
-
-                default:
-                    // default - any other characters
-                   output.writeChar(chars[i], i, tagDefault);
-                    break;
-            } // switch
-          } // if
-        } // for
-
-        prev = syllable; // move the pointer to the start of next syllable
-    }
-
-    return output.getOutputIndex();
-}
-
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/TibetanReordering.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
- *
- * This file is a modification of the ICU file KhmerReordering.h
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-#ifndef __TIBETANREORDERING_H
-#define __TIBETANREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-// #include "LETypes.h"
-// #include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Vocabulary
-//     Base ->         A consonant in its full (not subscript) form. It is the
-//                     center of the syllable, it can be souranded by subjoined consonants, vowels,
-//                     signs... but there is only one base in a stack, it has to be coded as
-//                     the first character of the syllable.Included here are also groups of base + subjoined
-//                                                                               which are represented by one single code point in unicode (e.g. 0F43) Also other characters that might take
-//                     subjoined consonants or other combining characters.
-//     Subjoined ->    Subjoined consonants and groups of subjoined consonants which have a single code-point
-//                     to repersent the group (even if each subjoined consonant is represented independently
-//                     by anothe code-point
-//     Tsa Phru -->    Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to
-//                                                                              "normalization"
-//                                                                               is placed after all the subjoined consonants, and it is also permitted there.
-//     A Chung  Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels
-//     Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned
-//                     a given code-point (in spite of each single part of them having also a code-point
-//                     They are avoided, and users are encouraged to use the combination of code-points that
-//                     represents the same sound instead of using this combined characters. This is included here
-//                     for compatibility with possible texts that use them (they are not in the Dzongkha keyboard).
-//     Halanta ->      The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel,
-//                     in spite of not having other vowels present. It is usually placed immediatly after a base consonant,
-//                     but in some special cases it can also be placed after a subjoined consonant, so this is also
-//                     permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char)
-//
-//     Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There
-//                     might be as much as three subjoined vowels in a given stack (only one in general text, but up
-//                     to three for abreviations, they have to be permitted).
-//     Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three
-//                     times. They can combine with subjoined vowels, and are always coded after these.
-//     Anusvara -->    Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some
-//                     special cases it can be placed before a vowel, so this is also permitted
-//     Candrabindu ->  Forms of the Anusvara with different glyphs (and different in identity) which can be placed
-//                     without vowel or after the vowel, but never before. Cannot combine with Anusvara.
-//     Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining
-//                     marks, so they have to be attached to a specific stack. The are using to emphasise a syllable.
-//
-//     Digits ->       Digits are not considered as non-combining characters because there are a few characters which
-//                     combine with them, so they have to be considered independently.
-//     Digit combining marks -> dependent marks that combine with digits.
-//
-//     TODO
-//     There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols
-//     are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside
-//     of the tibetan block, they have not been treated in this program.
-
-
-struct TibetanClassTable    // This list must include all types of components that can be used inside a syllable
-{
-    enum CharClassValues  // order is important here! This order must be the same that is found in each horizontal
-                          // line in the statetable for Tibetan (file TibetanReordering.cpp). It assigns one number
-                          // to each type of character that has to be considered when analysing the order in which
-                          // characters can be placed
-    {
-        CC_RESERVED             =  0, //Non Combining Characters
-        CC_BASE                 =  1, // Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks
-        CC_SUBJOINED            =  2, // Subjoined Consonats, combination of more than Subjoined Consonants in the code point
-        CC_TSA_PHRU             =  3, // Tsa-Phru character 0F39
-        CC_A_CHUNG              =  4, // Vowel Lenthening a-chung mark 0F71
-        CC_COMP_SANSKRIT        =  5, // Precomposed Sanskrit vowels including Subjoined characters and vowels
-        CC_HALANTA              =  6, // Halanta Character 0F84
-        CC_BELOW_VOWEL          =  7, // Subjoined vowels
-        CC_ABOVE_VOWEL          =  8, // Superscript vowels
-        CC_ANUSVARA             =  9, // Tibetan sign Rjes Su Nga Ro 0F7E
-        CC_CANDRABINDU          = 10, // Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83
-        CC_VISARGA              = 11, // Tibetan sign Rnam Bcad (0F7F)
-        CC_ABOVE_S_MARK         = 12, // Stress Marks placed above the text
-        CC_BELOW_S_MARK         = 13, // Stress Marks placed below the text
-        CC_DIGIT                = 14, // Dzongkha Digits
-        CC_PRE_DIGIT_MARK       = 15, // Mark placed before the digit
-        CC_POST_BELOW_DIGIT_M   = 16, // Mark placed below or after the digit
-        CC_COUNT                = 17  // This is the number of character classes
-    };
-
-    enum CharClassFlags
-    {
-        CF_CLASS_MASK    = 0x0000FFFF,
-
-        CF_DOTTED_CIRCLE = 0x04000000,  // add a dotted circle if a character with this flag is the first in a syllable
-        CF_DIGIT         = 0x01000000,  // flag to speed up comparaisson
-        CF_PREDIGIT      = 0x02000000,  // flag to detect pre-digit marks for reordering
-
-        // position flags
-        CF_POS_BEFORE    = 0x00080000,
-        CF_POS_BELOW     = 0x00040000,
-        CF_POS_ABOVE     = 0x00020000,
-        CF_POS_AFTER     = 0x00010000,
-        CF_POS_MASK      = 0x000f0000
-    };
-
-    typedef le_uint32 CharClass;
-
-    typedef le_int32 ScriptFlags;
-
-    LEUnicode firstChar;   // for Tibetan this will become xOF00
-    LEUnicode lastChar;    //  and this x0FFF
-    const CharClass *classTable;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    static const TibetanClassTable *getTibetanClassTable();
-};
-
-
-class TibetanReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // do not instantiate
-    TibetanReordering();
-
-    static le_int32 findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "TrimmedArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor)
-
-TrimmedArrayProcessor::TrimmedArrayProcessor()
-{
-}
-
-TrimmedArrayProcessor::TrimmedArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success), firstGlyph(0), lastGlyph(0)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-
-  if(LE_FAILURE(success)) return;
-
-  trimmedArrayLookupTable = LEReferenceTo<TrimmedArrayLookupTable>(morphSubtableHeader, success, (const TrimmedArrayLookupTable*)&header->table);
-
-  if(LE_FAILURE(success)) return;
-
-  firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph);
-  lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount);
-}
-
-TrimmedArrayProcessor::~TrimmedArrayProcessor()
-{
-}
-
-void TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph);
-
-        if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) {
-            TTGlyphID newGlyph = SWAPW(trimmedArrayLookupTable->valueArray[ttGlyph - firstGlyph]);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __TRIMMEDARRAYPROCESSOR_H
-#define __TRIMMEDARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class TrimmedArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    TrimmedArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~TrimmedArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    TrimmedArrayProcessor();
-
-protected:
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    LEReferenceTo<TrimmedArrayLookupTable> trimmedArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
--- a/src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor2.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "TrimmedArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor2)
-
-TrimmedArrayProcessor2::TrimmedArrayProcessor2()
-{
-}
-
-TrimmedArrayProcessor2::TrimmedArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-    const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-    trimmedArrayLookupTable = LEReferenceTo<TrimmedArrayLookupTable>(morphSubtableHeader, success, &header->table);
-    firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph);
-    lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount);
-    valueArray = LEReferenceToArrayOf<LookupValue>(morphSubtableHeader, success, &trimmedArrayLookupTable->valueArray[0], LE_UNBOUNDED_ARRAY);
-}
-
-TrimmedArrayProcessor2::~TrimmedArrayProcessor2()
-{
-}
-
-void TrimmedArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if(LE_FAILURE(success)) return;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph);
-
-        if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) {
-            TTGlyphID newGlyph = SWAPW(valueArray(ttGlyph - firstGlyph, success));
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/TrimmedArrayProcessor2.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __TRIMMEDARRAYPROCESSOR2_H
-#define __TRIMMEDARRAYPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class TrimmedArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    TrimmedArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~TrimmedArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @stable ICU 2.8
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @stable ICU 2.8
-     */
-    static UClassID getStaticClassID();
-
-private:
-    TrimmedArrayProcessor2();
-
-protected:
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    LEReferenceTo<TrimmedArrayLookupTable> trimmedArrayLookupTable;
-    LEReferenceToArrayOf<LookupValue> valueArray;
-};
-
-U_NAMESPACE_END
-#endif
--- a/src/java.desktop/share/native/libfontmanager/layout/ValueRecords.cpp	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,329 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ValueRecords.h"
-#include "DeviceTables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define Nibble(value, nibble) ((value >> (nibble * 4)) & 0xF)
-#define NibbleBits(value, nibble) (bitsInNibble[Nibble(value, nibble)])
-
-le_int16 ValueRecord::getFieldValue(ValueFormat valueFormat, ValueRecordField field) const
-{
-    le_int16 valueIndex = getFieldIndex(valueFormat, field);
-    le_int16 value = values[valueIndex];
-
-    return SWAPW(value);
-}
-
-le_int16 ValueRecord::getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const
-{
-    le_int16 baseIndex = getFieldCount(valueFormat) * index;
-    le_int16 valueIndex = getFieldIndex(valueFormat, field);
-    le_int16 value = values[baseIndex + valueIndex];
-
-    return SWAPW(value);
-}
-
-void ValueRecord::adjustPosition(ValueFormat valueFormat, const LETableReference& base, GlyphIterator &glyphIterator,
-                                 const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    float xPlacementAdjustment = 0;
-    float yPlacementAdjustment = 0;
-    float xAdvanceAdjustment   = 0;
-    float yAdvanceAdjustment   = 0;
-
-    if ((valueFormat & vfbXPlacement) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfXPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYPlacement) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfYPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbXAdvance) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfXAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYAdvance) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfYAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    // FIXME: The device adjustments should really be transformed, but
-    // the only way I know how to do that is to convert them to le_int16 units,
-    // transform them, and then convert them back to pixels. Sigh...
-    if ((valueFormat & vfbAnyDevice) != 0) {
-        le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
-        le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
-
-        if ((valueFormat & vfbXPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfXPlaDevice);
-
-            if (dtOffset != 0) {
-                 LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 xAdj = dt->getAdjustment(dt, xppem, success);
-
-                xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfYPlaDevice);
-
-            if (dtOffset != 0) {
-                 LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 yAdj = dt->getAdjustment(dt, yppem, success);
-
-                yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-
-        if ((valueFormat & vfbXAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfXAdvDevice);
-
-            if (dtOffset != 0) {
-                 LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 xAdj = dt->getAdjustment(dt, xppem, success);
-
-                xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfYAdvDevice);
-
-            if (dtOffset != 0) {
-              LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-              le_int16 yAdj = dt->getAdjustment(dt, yppem, success);
-
-              yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-    }
-
-    glyphIterator.adjustCurrGlyphPositionAdjustment(
-        xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
-}
-
-void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const LETableReference& base, GlyphIterator &glyphIterator,
-                                 const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    float xPlacementAdjustment = 0;
-    float yPlacementAdjustment = 0;
-    float xAdvanceAdjustment   = 0;
-    float yAdvanceAdjustment   = 0;
-
-    if ((valueFormat & vfbXPlacement) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfXPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYPlacement) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfYPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbXAdvance) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfXAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYAdvance) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfYAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    // FIXME: The device adjustments should really be transformed, but
-    // the only way I know how to do that is to convert them to le_int16 units,
-    // transform them, and then convert them back to pixels. Sigh...
-    if ((valueFormat & vfbAnyDevice) != 0) {
-        le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
-        le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
-
-        if ((valueFormat & vfbXPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfXPlaDevice);
-
-            if (dtOffset != 0) {
-                LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 xAdj = dt->getAdjustment(dt, xppem, success);
-
-                xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfYPlaDevice);
-
-            if (dtOffset != 0) {
-                LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 yAdj = dt->getAdjustment(dt, yppem, success);
-
-                yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-
-        if ((valueFormat & vfbXAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfXAdvDevice);
-
-            if (dtOffset != 0) {
-                LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 xAdj = dt->getAdjustment(dt, xppem, success);
-
-                xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfYAdvDevice);
-
-            if (dtOffset != 0) {
-                LEReferenceTo<DeviceTable> dt(base, success, dtOffset);
-                le_int16 yAdj = dt->getAdjustment(dt, yppem, success);
-
-                yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-    }
-
-    glyphIterator.adjustCurrGlyphPositionAdjustment(
-        xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
-}
-
-le_int16 ValueRecord::getSize(ValueFormat valueFormat)
-{
-    return getFieldCount(valueFormat) * sizeof(le_int16);
-}
-
-le_int16 ValueRecord::getFieldCount(ValueFormat valueFormat)
-{
-    static const le_int16 bitsInNibble[] =
-    {
-        0 + 0 + 0 + 0,
-        0 + 0 + 0 + 1,
-        0 + 0 + 1 + 0,
-        0 + 0 + 1 + 1,
-        0 + 1 + 0 + 0,
-        0 + 1 + 0 + 1,
-        0 + 1 + 1 + 0,
-        0 + 1 + 1 + 1,
-        1 + 0 + 0 + 0,
-        1 + 0 + 0 + 1,
-        1 + 0 + 1 + 0,
-        1 + 0 + 1 + 1,
-        1 + 1 + 0 + 0,
-        1 + 1 + 0 + 1,
-        1 + 1 + 1 + 0,
-        1 + 1 + 1 + 1
-    };
-
-    valueFormat &= ~vfbReserved;
-
-    return NibbleBits(valueFormat, 0) + NibbleBits(valueFormat, 1) +
-           NibbleBits(valueFormat, 2) + NibbleBits(valueFormat, 3);
-}
-
-le_int16 ValueRecord::getFieldIndex(ValueFormat valueFormat, ValueRecordField field)
-{
-    static const le_uint16 beforeMasks[] =
-    {
-        0x0000,
-        0x0001,
-        0x0003,
-        0x0007,
-        0x000F,
-        0x001F,
-        0x003F,
-        0x007F,
-        0x00FF,
-        0x01FF,
-        0x03FF,
-        0x07FF,
-        0x0FFF,
-        0x1FFF,
-        0x3FFF,
-        0x7FFF,
-        0xFFFF
-    };
-
-    return getFieldCount(valueFormat & beforeMasks[field]);
-}
-
-U_NAMESPACE_END
--- a/src/java.desktop/share/native/libfontmanager/layout/ValueRecords.h	Thu Oct 12 10:40:45 2017 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __VALUERECORDS_H
-#define __VALUERECORDS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-typedef le_uint16 ValueFormat;
-typedef le_int16 ValueRecordField;
-
-struct ValueRecord
-{
-    le_int16   values[ANY_NUMBER];
-
-    le_int16   getFieldValue(ValueFormat valueFormat, ValueRecordField field) const;
-    le_int16   getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const;
-    void    adjustPosition(ValueFormat valueFormat, const LETableReference &base, GlyphIterator &glyphIterator,
-                const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    void    adjustPosition(le_int16 index, ValueFormat valueFormat, const LETableReference &base, GlyphIterator &glyphIterator,
-                const LEFontInstance *fontInstance, LEErrorCode &success) const;
-
-    static le_int16    getSize(ValueFormat valueFormat);
-
-private:
-    static le_int16    getFieldCount(ValueFormat valueFormat);
-    static le_int16    getFieldIndex(ValueFormat valueFormat, ValueRecordField field);
-};
-LE_VAR_ARRAY(ValueRecord, values)
-
-enum ValueRecordFields
-{
-    vrfXPlacement   = 0,
-    vrfYPlacement   = 1,
-    vrfXAdvance     = 2,
-    vrfYAdvance     = 3,
-    vrfXPlaDevice   = 4,
-    vrfYPlaDevice   = 5,
-    vrfXAdvDevice   = 6,
-    vrfYAdvDevice   = 7
-};
-
-enum ValueFormatBits
-{
-    vfbXPlacement   = 0x0001,
-    vfbYPlacement   = 0x0002,
-    vfbXAdvance     = 0x0004,
-    vfbYAdvance     = 0x0008,
-    vfbXPlaDevice   = 0x0010,
-    vfbYPlaDevice   = 0x0020,
-    vfbXAdvDevice   = 0x0040,
-    vfbYAdvDevice   = 0x0080,
-    vfbReserved     = 0xFF00,
-    vfbAnyDevice    = vfbXPlaDevice + vfbYPlaDevice + vfbXAdvDevice + vfbYAdvDevice
-};
-
-U_NAMESPACE_END
-#endif