diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-04-20 18:13:48 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-04-20 18:13:48 +0000 |
commit | e5786f530f9555469c01435f86039b06aa53feba (patch) | |
tree | c868e8d32282422d7d445b729db95c3fcdafb6d0 /Build/source/libs/icu-xetex/layout | |
parent | ebaa1768b43c8606d923d2e861b5286b74207b3e (diff) |
new build system: build icu libs and xetex plus misc updates
git-svn-id: svn://tug.org/texlive/trunk@12759 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu-xetex/layout')
165 files changed, 0 insertions, 26426 deletions
diff --git a/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.cpp b/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.cpp deleted file mode 100644 index ffe65b320fe..00000000000 --- a/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - // NOTE: For now, we'll just pick the first alternative... - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - le_uint16 altSetCount = SWAPW(alternateSetCount); - - if (coverageIndex < altSetCount) { - Offset alternateSetTableOffset = SWAPW(alternateSetTableOffsetArray[coverageIndex]); - const AlternateSetTable *alternateSetTable = - (const AlternateSetTable *) ((char *) this + alternateSetTableOffset); - le_int32 altIndex = glyphIterator->getFeatureParam(); - - if (altIndex < SWAPW(alternateSetTable->glyphCount)) { - TTGlyphID alternate = SWAPW(alternateSetTable->alternateArray[altIndex]); - - if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, alternate))) { - glyphIterator->setCurrGlyphID(alternate); - } - - return 1; - } - - // feature param was out of range for the glyph - return 0; - } - - // XXXX If we get here, the table's mal-formed... - } - - return 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.h b/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.h deleted file mode 100644 index 41e3bc9409d..00000000000 --- a/Build/source/libs/icu-xetex/layout/AlternateSubstSubtables.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * (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]; -}; - -struct AlternateSubstitutionSubtable : GlyphSubstitutionSubtable -{ - le_uint16 alternateSetCount; - Offset alternateSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/AnchorTables.cpp b/Build/source/libs/icu-xetex/layout/AnchorTables.cpp deleted file mode 100644 index 24f3cf31df4..00000000000 --- a/Build/source/libs/icu-xetex/layout/AnchorTables.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID, const LEFontInstance *fontInstance, - LEPoint &anchor) const -{ - switch(SWAPW(anchorFormat)) { - case 1: - { - const Format1AnchorTable *f1 = (const Format1AnchorTable *) this; - - f1->getAnchor(fontInstance, anchor); - break; - } - - case 2: - { - const Format2AnchorTable *f2 = (const Format2AnchorTable *) this; - - f2->getAnchor(glyphID, fontInstance, anchor); - break; - } - - case 3: - { - const Format3AnchorTable *f3 = (const Format3AnchorTable *) this; - - f3->getAnchor(fontInstance, anchor); - break; - } - - default: - // unknown format: just use x, y coordinate, like format 1... - const Format1AnchorTable *f1 = (const Format1AnchorTable *) this; - - f1->getAnchor(fontInstance, anchor); - break; - } -} - -void Format1AnchorTable::getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) 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(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) 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 LEFontInstance *fontInstance, LEPoint &anchor) 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) { - const DeviceTable *dtx = (const DeviceTable *) ((char *) this + dtxOffset); - le_int16 adjx = dtx->getAdjustment((le_int16) fontInstance->getXPixelsPerEm()); - - pixels.fX += adjx; - } - - if (dtyOffset != 0) { - const DeviceTable *dty = (const DeviceTable *) ((char *) this + dtyOffset); - le_int16 adjy = dty->getAdjustment((le_int16) fontInstance->getYPixelsPerEm()); - - pixels.fY += adjy; - } - - fontInstance->pixelsToUnits(pixels, anchor); -} - -U_NAMESPACE_END - diff --git a/Build/source/libs/icu-xetex/layout/AnchorTables.h b/Build/source/libs/icu-xetex/layout/AnchorTables.h deleted file mode 100644 index 71825c5ca16..00000000000 --- a/Build/source/libs/icu-xetex/layout/AnchorTables.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID, const LEFontInstance *fontInstance, - LEPoint &anchor) const; -}; - -struct Format1AnchorTable : AnchorTable -{ - void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const; -}; - -struct Format2AnchorTable : AnchorTable -{ - le_uint16 anchorPoint; - - void getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) const; -}; - -struct Format3AnchorTable : AnchorTable -{ - Offset xDeviceTableOffset; - Offset yDeviceTableOffset; - - void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.cpp deleted file mode 100644 index c1e11f4c3ba..00000000000 --- a/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.cpp +++ /dev/null @@ -1,217 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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) 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 GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) -{ - fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); - fFeatureOrder = TRUE; -} - -ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) -{ - 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 != NULL) { - OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success); - } else if (fGDEFTable != NULL) { - GDEFMarkFilter filter(fGDEFTable); - - adjustMarkGlyphs(glyphStorage, &filter, success); - } else { - GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; - GDEFMarkFilter filter(gdefTable); - - adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); - } -} - -UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) - : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) -{ - fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; - fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; - - fSubstitutionFilter = new CharSubstitutionFilter(fontInstance); -} - -UnicodeArabicOpenTypeLayoutEngine::~UnicodeArabicOpenTypeLayoutEngine() -{ - delete fSubstitutionFilter; -} - -// "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); - - adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); -} - -U_NAMESPACE_END - diff --git a/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.h b/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.h deleted file mode 100644 index 506b34a8cd1..00000000000 --- a/Build/source/libs/icu-xetex/layout/ArabicLayoutEngine.h +++ /dev/null @@ -1,238 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @see OpenTypeLayoutEngine - * @see ScriptAndLanguageTags.h for script and language codes - * - * @internal - */ - ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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 - * - * @see LEFontInstance - * @see ScriptAndLanguageTags.h for script and language codes - * - * @internal - */ - UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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 paramters: - * @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 - diff --git a/Build/source/libs/icu-xetex/layout/ArabicShaping.cpp b/Build/source/libs/icu-xetex/layout/ArabicShaping.cpp deleted file mode 100644 index 9550910ad84..00000000000 --- a/Build/source/libs/icu-xetex/layout/ArabicShaping.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/* - * - * (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] -}; - -// Draft Mongolian shaping classes, not provided by the Unicode data files at this time -enum { - _c_ = ArabicShaping::ST_NOSHAPE_DUAL, - _d_ = ArabicShaping::ST_DUAL, - _n_ = ArabicShaping::ST_NONE, - _r_ = ArabicShaping::ST_RIGHT, - _t_ = ArabicShaping::ST_TRANSPARENT, - _x_ = ArabicShaping::ST_NOSHAPE_NONE -}; - -const ArabicShaping::ShapeType ArabicShaping::mongolianTypes[] = -{ - _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _t_, _t_, _t_, _t_, _n_, // 0x1800 - 0x180f - _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, // 0x1810 - 0x181f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1820 - 0x182f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1830 - 0x183f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1840 - 0x184f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1850 - 0x185f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1860 - 0x186f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, // 0x1870 - 0x187f - _n_, _n_, _n_, _n_, _n_, _n_, _n_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1880 - 0x188f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1890 - 0x189f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _t_, _n_, _n_, _n_, _n_, _n_, _n_ // 0x18a0 - 0x18af -}; - -/* - 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) -{ - const ClassDefinitionTable *joiningTypes = (const ClassDefinitionTable *) ArabicShaping::shapingTypeTable; - le_int32 joiningType = joiningTypes->getGlyphClass(c); - - if (joiningType == JT_RIGHT_JOINING) { // check for Syriac exceptions ALAPH, DALATH, RISH - if (c == 0x0710) - return ST_ALAPH; - if (c == 0x0715 || c == 0x0716 || c == 0x072A || c == 0x072F) - return ST_DALATH_RISH; - } - - if (joiningType == 0) { // check for Mongolian range, not supported by ArabicShaping::shapingTypeTable - if (c >= 0x1800 && c <= 0x18af) - return mongolianTypes[c - 0x1800]; - } - - if (joiningType >= 0 && joiningType < JT_COUNT) { - return shapeTypes[joiningType]; - } - - return ST_NOSHAPE_NONE; -} - -#define isolFeatureTag LE_ISOL_FEATURE_TAG -#define initFeatureTag LE_INIT_FEATURE_TAG -#define mediFeatureTag LE_MEDI_FEATURE_TAG -#define med2FeatureTag LE_MED2_FEATURE_TAG -#define finaFeatureTag LE_FINA_FEATURE_TAG -#define fin2FeatureTag LE_FIN2_FEATURE_TAG -#define fin3FeatureTag LE_FIN3_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 byte. -#define isolFeatureMask 0x80000000UL -#define finaFeatureMask 0x40000000UL -#define initFeatureMask 0x20000000UL -#define mediFeatureMask 0x10000000UL -#define fin2FeatureMask 0x08000000UL -#define fin3FeatureMask 0x04000000UL -#define med2FeatureMask 0x03000000UL /* two bits, from shifting either fin2 or fin3 */ - -#define ccmpFeatureMask 0x00800000UL -#define rligFeatureMask 0x00400000UL -#define caltFeatureMask 0x00200000UL -#define ligaFeatureMask 0x00100000UL -#define dligFeatureMask 0x00080000UL -#define cswhFeatureMask 0x00040000UL -#define msetFeatureMask 0x00020000UL -#define cursFeatureMask 0x00010000UL -#define kernFeatureMask 0x00008000UL -#define markFeatureMask 0x00004000UL -#define mkmkFeatureMask 0x00002000UL - -#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask) - -#define SHAPE_MASK 0xFF000000UL - -static const FeatureMap featureMap[] = { - {ccmpFeatureTag, ccmpFeatureMask}, - {isolFeatureTag, isolFeatureMask}, - {finaFeatureTag, finaFeatureMask}, - {fin2FeatureTag, fin2FeatureMask}, - {fin3FeatureTag, fin3FeatureMask}, - {mediFeatureTag, mediFeatureMask}, - {med2FeatureTag, med2FeatureMask}, - {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), NULL, 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) - - // special cases for Syriac ALAPH: - // final ALAPH is fin2 when effective right char shapes but does not cause left shaping, and is not DALATH/RISH - // final ALAPH is fin3 when effective right char is DALATH/RISH - // medial ALAPH is med2 when effective right char shapes but does not cause left shaping - // using one of: - // shaper.shape(out, 4) (isolate to fin2) - // shaper.shape(out, 5) (isolate to fin3) - - 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); - - glyphStorage.setAuxData(out, ISOL_FEATURES, NULL, 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); - } - } else if (t == ST_ALAPH) { - if (rightType == ST_DALATH_RISH) { - adjustTags(out, 5, glyphStorage); - } else if (rightShapes && !rightCauses) { - adjustTags(out, 4, glyphStorage); - } - } - - rightShapes = curShapes; - rightCauses = (t & MASK_SHAPE_LEFT) != 0; - rightType = t; // remember this; might need to know if it was DALATH/RISH - erout = out; - } - - if (rightShapes && rightCauses && (leftType & MASK_SHAPE_RIGHT) != 0) { - adjustTags(erout, 2, glyphStorage); - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ArabicShaping.h b/Build/source/libs/icu-xetex/layout/ArabicShaping.h deleted file mode 100644 index 937d619a643..00000000000 --- a/Build/source/libs/icu-xetex/layout/ArabicShaping.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * (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 - - MASK_ALAPH = 16, // if this bit set, char is Syriac ALAPH - MASK_DALATH_RISH = 32 // if this bit set, char is Syriac DALATH/RISH - }; - - // 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, - ST_ALAPH = MASK_ALAPH | MASK_SHAPE_RIGHT, - ST_DALATH_RISH = MASK_DALATH_RISH | MASK_SHAPE_RIGHT - }; - - 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 ShapeType shapeTypes[]; - static const ShapeType mongolianTypes[]; - - static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage); -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/AttachmentPosnSubtables.h b/Build/source/libs/icu-xetex/layout/AttachmentPosnSubtables.h deleted file mode 100644 index 7f8406dc19f..00000000000 --- a/Build/source/libs/icu-xetex/layout/AttachmentPosnSubtables.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * (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(LEGlyphID baseGlyphId) const; - - le_uint32 process(GlyphIterator *glyphIterator) const; -}; - -inline le_int32 AttachmentPositioningSubtable::getBaseCoverage(LEGlyphID baseGlyphID) const -{ - return getGlyphCoverage(baseCoverageTableOffset, baseGlyphID); -} - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/CanonData.cpp b/Build/source/libs/icu-xetex/layout/CanonData.cpp deleted file mode 100644 index f4fe33bb47a..00000000000 --- a/Build/source/libs/icu-xetex/layout/CanonData.cpp +++ /dev/null @@ -1,3619 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008. 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 -}; - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/CanonShaping.cpp b/Build/source/libs/icu-xetex/layout/CanonShaping.cpp deleted file mode 100644 index ea109a77d98..00000000000 --- a/Build/source/libs/icu-xetex/layout/CanonShaping.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * (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) -{ - const GlyphDefinitionTableHeader *gdefTable = (const GlyphDefinitionTableHeader *) glyphDefinitionTable; - const ClassDefinitionTable *classTable = gdefTable->getMarkAttachClassDefinitionTable(); - le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount); - le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount); - LEErrorCode status = LE_NO_ERROR; - le_int32 i; - - for (i = 0; i < charCount; i += 1) { - combiningClasses[i] = classTable->getGlyphClass((LEGlyphID) inChars[i]); - 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, status); - } - - LE_DELETE_ARRAY(indices); - LE_DELETE_ARRAY(combiningClasses); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/CanonShaping.h b/Build/source/libs/icu-xetex/layout/CanonShaping.h deleted file mode 100644 index cdf19595b59..00000000000 --- a/Build/source/libs/icu-xetex/layout/CanonShaping.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2006 - 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 le_uint8 glyphDefinitionTable[]; - - 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 diff --git a/Build/source/libs/icu-xetex/layout/CharSubstitutionFilter.h b/Build/source/libs/icu-xetex/layout/CharSubstitutionFilter.h deleted file mode 100644 index 780e8ad2cdf..00000000000 --- a/Build/source/libs/icu-xetex/layout/CharSubstitutionFilter.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * (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. - * - * @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) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.cpp b/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.cpp deleted file mode 100644 index 124c4d0f24d..00000000000 --- a/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID) const -{ - switch(SWAPW(classFormat)) { - case 0: - return 0; - - case 1: - { - const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this; - - return f1Table->getGlyphClass(glyphID); - } - - case 2: - { - const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this; - - return f2Table->getGlyphClass(glyphID); - } - - default: - return 0; - } -} - -le_bool ClassDefinitionTable::hasGlyphClass(le_int32 glyphClass) const -{ - switch(SWAPW(classFormat)) { - case 0: - return 0; - - case 1: - { - const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this; - - return f1Table->hasGlyphClass(glyphClass); - } - - case 2: - { - const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this; - - return f2Table->hasGlyphClass(glyphClass); - } - - default: - return 0; - } -} - -le_int32 ClassDefFormat1Table::getGlyphClass(LEGlyphID glyphID) const -{ - TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID); - TTGlyphID firstGlyph = SWAPW(startGlyph); - TTGlyphID lastGlyph = firstGlyph + SWAPW(glyphCount); - - if (ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) { - return SWAPW(classValueArray[ttGlyphID - firstGlyph]); - } - - return 0; -} - -le_bool ClassDefFormat1Table::hasGlyphClass(le_int32 glyphClass) const -{ - le_uint16 count = SWAPW(glyphCount); - int i; - - for (i = 0; i < count; i += 1) { - if (SWAPW(classValueArray[i]) == glyphClass) { - return TRUE; - } - } - - return FALSE; -} - -le_int32 ClassDefFormat2Table::getGlyphClass(LEGlyphID glyphID) const -{ - TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyphID); - le_uint16 rangeCount = SWAPW(classRangeCount); - le_int32 rangeIndex = - OpenTypeUtilities::getGlyphRangeIndex(ttGlyph, classRangeRecordArray, rangeCount); - - if (rangeIndex < 0) { - return 0; - } - - return SWAPW(classRangeRecordArray[rangeIndex].rangeValue); -} - -le_bool ClassDefFormat2Table::hasGlyphClass(le_int32 glyphClass) const -{ - le_uint16 rangeCount = SWAPW(classRangeCount); - int i; - - for (i = 0; i < rangeCount; i += 1) { - if (SWAPW(classRangeRecordArray[i].rangeValue) == glyphClass) { - return TRUE; - } - } - - return FALSE; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.h b/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.h deleted file mode 100644 index 3dfe86e61a5..00000000000 --- a/Build/source/libs/icu-xetex/layout/ClassDefinitionTables.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID) const; - le_bool hasGlyphClass(le_int32 glyphClass) const; -}; - -struct ClassDefFormat1Table : ClassDefinitionTable -{ - TTGlyphID startGlyph; - le_uint16 glyphCount; - le_uint16 classValueArray[ANY_NUMBER]; - - le_int32 getGlyphClass(LEGlyphID glyphID) const; - le_bool hasGlyphClass(le_int32 glyphClass) const; -}; - -struct ClassRangeRecord -{ - TTGlyphID start; - TTGlyphID end; - le_uint16 classValue; -}; - -struct ClassDefFormat2Table : ClassDefinitionTable -{ - le_uint16 classRangeCount; - GlyphRangeRecord classRangeRecordArray[ANY_NUMBER]; - - le_int32 getGlyphClass(LEGlyphID glyphID) const; - le_bool hasGlyphClass(le_int32 glyphClass) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/ContextualGlyphInsertion.h b/Build/source/libs/icu-xetex/layout/ContextualGlyphInsertion.h deleted file mode 100644 index ead88425ddc..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualGlyphInsertion.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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 -{ -}; - -enum ContextualGlyphInsertionFlags -{ - cgiSetMark = 0x8000, - cgiDontAdvance = 0x4000, - cgiCurrentIsKashidaLike = 0x2000, - cgiMarkedIsKashidaLike = 0x1000, - cgiCurrentInsertBefore = 0x0800, - cgiMarkInsertBefore = 0x0400, - cgiCurrentInsertCountMask = 0x03E0, - cgiMarkedInsertCountMask = 0x001F -}; - -struct LigatureSubstitutionStateEntry : StateEntry -{ - ByteOffset currentInsertionListOffset; - ByteOffset markedInsertionListOffset; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.cpp b/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.cpp deleted file mode 100644 index 94c4a60b075..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : StateTableProcessor(morphSubtableHeader) -{ - contextualGlyphSubstitutionHeader = (const ContextualGlyphSubstitutionHeader *) morphSubtableHeader; - substitutionTableOffset = SWAPW(contextualGlyphSubstitutionHeader->substitutionTableOffset); - - entryTable = (const ContextualGlyphSubstitutionStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset); -} - -ContextualGlyphSubstitutionProcessor::~ContextualGlyphSubstitutionProcessor() -{ -} - -void ContextualGlyphSubstitutionProcessor::beginStateTable() -{ - markGlyph = 0; -} - -ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) -{ - const ContextualGlyphSubstitutionStateEntry *entry = &entryTable[index]; - ByteOffset newState = SWAPW(entry->newStateOffset); - le_int16 flags = SWAPW(entry->flags); - WordOffset markOffset = SWAPW(entry->markOffset); - WordOffset currOffset = SWAPW(entry->currOffset); - - if (markOffset != 0) { - const le_int16 *table = (const le_int16 *) ((char *) &stateTableHeader->stHeader + markOffset * 2); - LEGlyphID mGlyph = glyphStorage[markGlyph]; - TTGlyphID newGlyph = SWAPW(table[LE_GET_GLYPH(mGlyph)]); - - glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph); - } - - if (currOffset != 0) { - const le_int16 *table = (const le_int16 *) ((char *) &stateTableHeader->stHeader + currOffset * 2); - LEGlyphID thisGlyph = glyphStorage[currGlyph]; - TTGlyphID newGlyph = SWAPW(table[LE_GET_GLYPH(thisGlyph)]); - - 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 diff --git a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.h b/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.h deleted file mode 100644 index b0c5a6b38c3..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstProc.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * (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); - - virtual void endStateTable(); - - ContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader); - 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; - const ContextualGlyphSubstitutionStateEntry *entryTable; - - le_int32 markGlyph; - - const ContextualGlyphSubstitutionHeader *contextualGlyphSubstitutionHeader; - -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstitution.h b/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstitution.h deleted file mode 100644 index 72c23559db9..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualGlyphSubstitution.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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; -}; - -enum ContextualGlyphSubstitutionFlags -{ - cgsSetMark = 0x8000, - cgsDontAdvance = 0x4000, - cgsReserved = 0x3FFF -}; - -struct ContextualGlyphSubstitutionStateEntry : StateEntry -{ - WordOffset markOffset; - WordOffset currOffset; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.cpp b/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.cpp deleted file mode 100644 index 1d8f28c8c17..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.cpp +++ /dev/null @@ -1,522 +0,0 @@ -/* - * (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 SubstitutionLookupRecord *substLookupRecordArray, - le_uint16 substCount, - GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance, - le_int32 position) -{ - GlyphIterator tempIterator(*glyphIterator); - - for (le_int16 subst = 0; subst < substCount; 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); - } -} - -le_bool ContextualSubstitutionBase::matchGlyphIDs(const 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 le_uint16 *classArray, le_uint16 glyphCount, - GlyphIterator *glyphIterator, - const ClassDefinitionTable *classDefinitionTable, - 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; - } - - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 glyphClass = classDefinitionTable->getGlyphClass(glyph); - 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(matchClass)) { - return FALSE; - } - } - - glyphCount -= 1; - match += direction; - } - - return TRUE; -} - -le_bool ContextualSubstitutionBase::matchGlyphCoverages(const Offset *coverageTableOffsetArray, le_uint16 glyphCount, - GlyphIterator *glyphIterator, const char *offsetBase, 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]); - const CoverageTable *coverageTable = (const CoverageTable *) (offsetBase + coverageTableOffset); - - if (! glyphIterator->next()) { - return FALSE; - } - - if (coverageTable->getGlyphCoverage((LEGlyphID) glyphIterator->getCurrGlyphID()) < 0) { - return FALSE; - } - - glyphCount -= 1; - glyph += direction; - } - - return TRUE; -} - -le_uint32 ContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - switch(SWAPW(subtableFormat)) - { - case 0: - return 0; - - case 1: - { - const ContextualSubstitutionFormat1Subtable *subtable = (const ContextualSubstitutionFormat1Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - case 2: - { - const ContextualSubstitutionFormat2Subtable *subtable = (const ContextualSubstitutionFormat2Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - case 3: - { - const ContextualSubstitutionFormat3Subtable *subtable = (const ContextualSubstitutionFormat3Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - default: - return 0; - } -} - -le_uint32 ContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - le_uint16 srSetCount = SWAPW(subRuleSetCount); - - if (coverageIndex < srSetCount) { - Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]); - const SubRuleSetTable *subRuleSetTable = - (const SubRuleSetTable *) ((char *) this + subRuleSetTableOffset); - le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - - for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) { - Offset subRuleTableOffset = - SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]); - const SubRuleTable *subRuleTable = - (const SubRuleTable *) ((char *) subRuleSetTable + subRuleTableOffset); - le_uint16 matchCount = SWAPW(subRuleTable->glyphCount) - 1; - le_uint16 substCount = SWAPW(subRuleTable->substCount); - - if (matchGlyphIDs(subRuleTable->inputGlyphArray, matchCount, glyphIterator)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &subRuleTable->inputGlyphArray[matchCount]; - - applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position); - - return matchCount + 1; - } - - glyphIterator->setCurrStreamPosition(position); - } - } - - // XXX If we get here, the table is mal-formed... - } - - return 0; -} - -le_uint32 ContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - const ClassDefinitionTable *classDefinitionTable = - (const ClassDefinitionTable *) ((char *) this + SWAPW(classDefTableOffset)); - le_uint16 scSetCount = SWAPW(subClassSetCount); - le_int32 setClass = classDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID()); - - if (setClass < scSetCount && subClassSetTableOffsetArray[setClass] != 0) { - Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]); - const SubClassSetTable *subClassSetTable = - (const SubClassSetTable *) ((char *) this + subClassSetTableOffset); - le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - - for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) { - Offset subClassRuleTableOffset = - SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]); - const SubClassRuleTable *subClassRuleTable = - (const SubClassRuleTable *) ((char *) subClassSetTable + subClassRuleTableOffset); - le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1; - le_uint16 substCount = SWAPW(subClassRuleTable->substCount); - - if (matchGlyphClasses(subClassRuleTable->classArray, matchCount, glyphIterator, classDefinitionTable)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount]; - - applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position); - - return matchCount + 1; - } - - glyphIterator->setCurrStreamPosition(position); - } - } - - // XXX If we get here, the table is mal-formed... - } - - return 0; -} - -le_uint32 ContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance)const -{ - 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(); - - if (ContextualSubstitutionBase::matchGlyphCoverages(coverageTableOffsetArray, gCount, glyphIterator, (const char *) this)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &coverageTableOffsetArray[gCount]; - - ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position); - - return gCount + 1; - } - - glyphIterator->setCurrStreamPosition(position); - - return 0; -} - -le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - switch(SWAPW(subtableFormat)) - { - case 0: - return 0; - - case 1: - { - const ChainingContextualSubstitutionFormat1Subtable *subtable = (const ChainingContextualSubstitutionFormat1Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - case 2: - { - const ChainingContextualSubstitutionFormat2Subtable *subtable = (const ChainingContextualSubstitutionFormat2Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - case 3: - { - const ChainingContextualSubstitutionFormat3Subtable *subtable = (const ChainingContextualSubstitutionFormat3Subtable *) this; - - return subtable->process(lookupProcessor, glyphIterator, fontInstance); - } - - 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 LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - le_uint16 srSetCount = SWAPW(chainSubRuleSetCount); - - if (coverageIndex < srSetCount) { - Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]); - const ChainSubRuleSetTable *chainSubRuleSetTable = - (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset); - le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); - - for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) { - Offset chainSubRuleTableOffset = - SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]); - const ChainSubRuleTable *chainSubRuleTable = - (const ChainSubRuleTable *) ((char *) chainSubRuleSetTable + chainSubRuleTableOffset); - le_uint16 backtrackGlyphCount = SWAPW(chainSubRuleTable->backtrackGlyphCount); - le_uint16 inputGlyphCount = (le_uint16) SWAPW(chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount]) - 1; - const TTGlyphID *inputGlyphArray = &chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount + 1]; - le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputGlyphArray[inputGlyphCount]); - const TTGlyphID *lookaheadGlyphArray = &inputGlyphArray[inputGlyphCount + 1]; - le_uint16 substCount = (le_uint16) SWAPW(lookaheadGlyphArray[lookaheadGlyphCount]); - - tempIterator.setCurrStreamPosition(position); - - if (! tempIterator.prev(backtrackGlyphCount)) { - continue; - } - - tempIterator.prev(); - if (! matchGlyphIDs(chainSubRuleTable->backtrackGlyphArray, backtrackGlyphCount, &tempIterator, TRUE)) { - continue; - } - - tempIterator.setCurrStreamPosition(position); - tempIterator.next(inputGlyphCount); - if (!matchGlyphIDs(lookaheadGlyphArray, lookaheadGlyphCount, &tempIterator)) { - continue; - } - - if (matchGlyphIDs(inputGlyphArray, inputGlyphCount, glyphIterator)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &lookaheadGlyphArray[lookaheadGlyphCount + 1]; - - applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position); - - return inputGlyphCount + 1; - } - - glyphIterator->setCurrStreamPosition(position); - } - } - - // XXX If we get here, the table is mal-formed... - } - - return 0; -} - -le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - const ClassDefinitionTable *backtrackClassDefinitionTable = - (const ClassDefinitionTable *) ((char *) this + SWAPW(backtrackClassDefTableOffset)); - const ClassDefinitionTable *inputClassDefinitionTable = - (const ClassDefinitionTable *) ((char *) this + SWAPW(inputClassDefTableOffset)); - const ClassDefinitionTable *lookaheadClassDefinitionTable = - (const ClassDefinitionTable *) ((char *) this + SWAPW(lookaheadClassDefTableOffset)); - le_uint16 scSetCount = SWAPW(chainSubClassSetCount); - le_int32 setClass = inputClassDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID()); - - if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) { - Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]); - const ChainSubClassSetTable *chainSubClassSetTable = - (const ChainSubClassSetTable *) ((char *) this + chainSubClassSetTableOffset); - le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); - - for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) { - Offset chainSubClassRuleTableOffset = - SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]); - const ChainSubClassRuleTable *chainSubClassRuleTable = - (const ChainSubClassRuleTable *) ((char *) chainSubClassSetTable + chainSubClassRuleTableOffset); - le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount); - le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1; - const le_uint16 *inputClassArray = &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1]; - le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray[inputGlyphCount]); - const le_uint16 *lookaheadClassArray = &inputClassArray[inputGlyphCount + 1]; - le_uint16 substCount = SWAPW(lookaheadClassArray[lookaheadGlyphCount]); - - - tempIterator.setCurrStreamPosition(position); - - if (! tempIterator.prev(backtrackGlyphCount)) { - continue; - } - - tempIterator.prev(); - if (! matchGlyphClasses(chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount, - &tempIterator, backtrackClassDefinitionTable, TRUE)) { - continue; - } - - tempIterator.setCurrStreamPosition(position); - tempIterator.next(inputGlyphCount); - if (! matchGlyphClasses(lookaheadClassArray, lookaheadGlyphCount, &tempIterator, lookaheadClassDefinitionTable)) { - continue; - } - - if (matchGlyphClasses(inputClassArray, inputGlyphCount, glyphIterator, inputClassDefinitionTable)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &lookaheadClassArray[lookaheadGlyphCount + 1]; - - applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position); - - return inputGlyphCount + 1; - } - - glyphIterator->setCurrStreamPosition(position); - } - } - - // XXX If we get here, the table is mal-formed... - } - - return 0; -} - -le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount); - le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]); - const Offset *inputCoverageTableOffsetArray = &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1]; - const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]); - const Offset *lookaheadCoverageTableOffsetArray = &inputCoverageTableOffsetArray[inputGlyphCount + 1]; - 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, (const char *) this, TRUE)) { - return 0; - } - - tempIterator.setCurrStreamPosition(position); - tempIterator.next(inputGlyphCount - 1); - if (! ContextualSubstitutionBase::matchGlyphCoverages(lookaheadCoverageTableOffsetArray, - lookaheadGlyphCount, &tempIterator, (const char *) this)) { - 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, (const char *) this)) { - const SubstitutionLookupRecord *substLookupRecordArray = - (const SubstitutionLookupRecord *) &lookaheadCoverageTableOffsetArray[lookaheadGlyphCount + 1]; - - ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position); - - return inputGlyphCount; - } - - glyphIterator->setCurrStreamPosition(position); - - return 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.h b/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.h deleted file mode 100644 index a77a196d1f9..00000000000 --- a/Build/source/libs/icu-xetex/layout/ContextualSubstSubtables.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * - * (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" - -U_NAMESPACE_BEGIN - -struct SubstitutionLookupRecord -{ - le_uint16 sequenceIndex; - le_uint16 lookupListIndex; -}; - -struct ContextualSubstitutionBase : GlyphSubstitutionSubtable -{ - static le_bool matchGlyphIDs( - const TTGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator, - le_bool backtrack = FALSE); - - static le_bool matchGlyphClasses( - const le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator, - const ClassDefinitionTable *classDefinitionTable, le_bool backtrack = FALSE); - - static le_bool matchGlyphCoverages( - const Offset *coverageTableOffsetArray, le_uint16 glyphCount, - GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack = FALSE); - - static void applySubstitutionLookups( - const LookupProcessor *lookupProcessor, - const SubstitutionLookupRecord *substLookupRecordArray, - le_uint16 substCount, - GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance, - le_int32 position); -}; - -struct ContextualSubstitutionSubtable : ContextualSubstitutionBase -{ - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable -{ - le_uint16 subRuleSetCount; - Offset subRuleSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct SubRuleSetTable -{ - le_uint16 subRuleCount; - Offset subRuleTableOffsetArray[ANY_NUMBER]; - -}; - -// NOTE: Multiple variable size arrays!! -struct SubRuleTable -{ - le_uint16 glyphCount; - le_uint16 substCount; - TTGlyphID inputGlyphArray[ANY_NUMBER]; - //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER]; -}; - -struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable -{ - Offset classDefTableOffset; - le_uint16 subClassSetCount; - Offset subClassSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct SubClassSetTable -{ - le_uint16 subClassRuleCount; - Offset subClassRuleTableOffsetArray[ANY_NUMBER]; -}; - -// NOTE: Multiple variable size arrays!! -struct SubClassRuleTable -{ - le_uint16 glyphCount; - le_uint16 substCount; - le_uint16 classArray[ANY_NUMBER]; - //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER]; -}; - -// 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 LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase -{ - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable -{ - le_uint16 chainSubRuleSetCount; - Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct ChainSubRuleSetTable -{ - le_uint16 chainSubRuleCount; - Offset chainSubRuleTableOffsetArray[ANY_NUMBER]; - -}; - -// 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]; -}; - -struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable -{ - Offset backtrackClassDefTableOffset; - Offset inputClassDefTableOffset; - Offset lookaheadClassDefTableOffset; - le_uint16 chainSubClassSetCount; - Offset chainSubClassSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct ChainSubClassSetTable -{ - le_uint16 chainSubClassRuleCount; - Offset chainSubClassRuleTableOffsetArray[ANY_NUMBER]; -}; - -// 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]; -}; - -// 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 LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/CoverageTables.cpp b/Build/source/libs/icu-xetex/layout/CoverageTables.cpp deleted file mode 100644 index e5f1597f864..00000000000 --- a/Build/source/libs/icu-xetex/layout/CoverageTables.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2006 - 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(LEGlyphID glyphID) const -{ - switch(SWAPW(coverageFormat)) - { - case 0: - return -1; - - case 1: - { - const CoverageFormat1Table *f1Table = (const CoverageFormat1Table *) this; - - return f1Table->getGlyphCoverage(glyphID); - } - - case 2: - { - const CoverageFormat2Table *f2Table = (const CoverageFormat2Table *) this; - - return f2Table->getGlyphCoverage(glyphID); - } - - default: - return -1; - } -} - -le_int32 CoverageFormat1Table::getGlyphCoverage(LEGlyphID glyphID) const -{ - 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; - } - - 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(LEGlyphID glyphID) const -{ - TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID); - le_uint16 count = SWAPW(rangeCount); - le_int32 rangeIndex = - OpenTypeUtilities::getGlyphRangeIndex(ttGlyphID, rangeRecordArray, count); - - if (rangeIndex < 0) { - return -1; - } - - TTGlyphID firstInRange = SWAPW(rangeRecordArray[rangeIndex].firstGlyph); - le_uint16 startCoverageIndex = SWAPW(rangeRecordArray[rangeIndex].rangeValue); - - return startCoverageIndex + (ttGlyphID - firstInRange); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/CoverageTables.h b/Build/source/libs/icu-xetex/layout/CoverageTables.h deleted file mode 100644 index 5e9dbaa15a7..00000000000 --- a/Build/source/libs/icu-xetex/layout/CoverageTables.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID) const; -}; - -struct CoverageFormat1Table : CoverageTable -{ - le_uint16 glyphCount; - TTGlyphID glyphArray[ANY_NUMBER]; - - le_int32 getGlyphCoverage(LEGlyphID glyphID) const; -}; - -struct CoverageFormat2Table : CoverageTable -{ - le_uint16 rangeCount; - GlyphRangeRecord rangeRecordArray[ANY_NUMBER]; - - le_int32 getGlyphCoverage(LEGlyphID glyphID) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.cpp b/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.cpp deleted file mode 100644 index 9d2144fcefa..00000000000 --- a/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * (C) Copyright IBM Corp. 1998 - 2007 - 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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID glyphID = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyphID); - le_uint16 eeCount = SWAPW(entryExitCount); - - if (coverageIndex < 0 || coverageIndex >= eeCount) { - glyphIterator->setCursiveGlyph(); - return 0; - } - - LEPoint entryAnchor, exitAnchor; - Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor); - Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor); - - if (entryOffset != 0) { - const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset); - - entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor); - glyphIterator->setCursiveEntryPoint(entryAnchor); - } else { - //glyphIterator->clearCursiveEntryPoint(); - } - - if (exitOffset != 0) { - const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset); - - exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor); - glyphIterator->setCursiveExitPoint(exitAnchor); - } else { - //glyphIterator->clearCursiveExitPoint(); - } - - return 1; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.h b/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.h deleted file mode 100644 index 5eefb2f9888..00000000000 --- a/Build/source/libs/icu-xetex/layout/CursiveAttachmentSubtables.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/DefaultCharMapper.h b/Build/source/libs/icu-xetex/layout/DefaultCharMapper.h deleted file mode 100644 index c0e1bc1c33b..00000000000 --- a/Build/source/libs/icu-xetex/layout/DefaultCharMapper.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * (C) Copyright IBM Corp. 1998-2007 - 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; - - static const LEUnicode32 controlChars[]; - - static const le_int32 controlCharsCount; - - static const LEUnicode32 mirroredChars[]; - static const LEUnicode32 srahCderorrim[]; - - static const le_int32 mirroredCharsCount; - -public: - DefaultCharMapper(le_bool filterControls, le_bool mirror) - : fFilterControls(filterControls), fMirror(mirror) - { - // nothing - }; - - ~DefaultCharMapper() - { - // nada - }; - - LEUnicode32 mapChar(LEUnicode32 ch) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/DeviceTables.cpp b/Build/source/libs/icu-xetex/layout/DeviceTables.cpp deleted file mode 100644 index 0bbbf181496..00000000000 --- a/Build/source/libs/icu-xetex/layout/DeviceTables.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)DeviceTables.cpp 1.5 00/03/15 - * - * (C) Copyright IBM Corp. 1998 - 2006 - 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(le_uint16 ppem) const -{ - le_uint16 start = SWAPW(startSize); - le_uint16 format = SWAPW(deltaFormat) - 1; - le_int16 result = 0; - - if (ppem >= start && ppem <= SWAPW(endSize) && format < FORMAT_COUNT) { - le_uint16 sizeIndex = ppem - start; - le_uint16 bits = fieldBits[format]; - le_uint16 count = 16 / bits; - 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 diff --git a/Build/source/libs/icu-xetex/layout/DeviceTables.h b/Build/source/libs/icu-xetex/layout/DeviceTables.h deleted file mode 100644 index 864bba1ad11..00000000000 --- a/Build/source/libs/icu-xetex/layout/DeviceTables.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)DeviceTables.h 1.5 00/03/15 - * - * (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(le_uint16 ppem) const; - -private: - static const le_uint16 fieldMasks[]; - static const le_uint16 fieldSignBits[]; - static const le_uint16 fieldBits[]; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/ExtensionSubtables.cpp b/Build/source/libs/icu-xetex/layout/ExtensionSubtables.cpp deleted file mode 100644 index 4a6ac4fd571..00000000000 --- a/Build/source/libs/icu-xetex/layout/ExtensionSubtables.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * %W% %E% - * - * (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 LookupProcessor *lookupProcessor, le_uint16 lookupType, - GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - le_uint16 elt = SWAPW(extensionLookupType); - - if (elt != lookupType) { - le_uint32 extOffset = READ_LONG(extensionOffset); - LookupSubtable *subtable = (LookupSubtable *) ((char *) this + extOffset); - - return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance); - } - - return 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ExtensionSubtables.h b/Build/source/libs/icu-xetex/layout/ExtensionSubtables.h deleted file mode 100644 index f522b9ebf33..00000000000 --- a/Build/source/libs/icu-xetex/layout/ExtensionSubtables.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * %W% %E% - * - * (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 LookupProcessor *lookupProcessor, le_uint16 lookupType, - GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/Features.cpp b/Build/source/libs/icu-xetex/layout/Features.cpp deleted file mode 100644 index e1c81a1ac9b..00000000000 --- a/Build/source/libs/icu-xetex/layout/Features.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Features.cpp 1.4 00/03/15 - * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "OpenTypeUtilities.h" -#include "OpenTypeTables.h" -#include "Features.h" -#include "LESwaps.h" - -U_NAMESPACE_BEGIN - -const FeatureTable *FeatureListTable::getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const -{ - if (featureIndex >= SWAPW(featureCount)) { - return 0; - } - - Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset; - - *featureTag = SWAPT(featureRecordArray[featureIndex].featureTag); - - return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset)); -} - -/* - * 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 -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/Features.h b/Build/source/libs/icu-xetex/layout/Features.h deleted file mode 100644 index 47563d9d433..00000000000 --- a/Build/source/libs/icu-xetex/layout/Features.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __FEATURES_H -#define __FEATURES_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]; -}; - -struct FeatureListTable -{ - le_uint16 featureCount; - FeatureRecord featureRecordArray[ANY_NUMBER]; - - const FeatureTable *getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const; - - const FeatureTable *getFeatureTable(LETag featureTag) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.cpp b/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.cpp deleted file mode 100644 index 344e07ab286..00000000000 --- a/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * - * (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 GlyphDefinitionTableHeader *gdefTable) -{ - classDefTable = gdefTable->getGlyphClassDefinitionTable(); -} - -GDEFMarkFilter::~GDEFMarkFilter() -{ - // nothing to do? -} - -le_bool GDEFMarkFilter::accept(LEGlyphID glyph) const -{ - le_int32 glyphClass = classDefTable->getGlyphClass(glyph); - - return glyphClass == gcdMarkGlyph; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.h b/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.h deleted file mode 100644 index 5ae5b45fdfc..00000000000 --- a/Build/source/libs/icu-xetex/layout/GDEFMarkFilter.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * (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 GlyphClassDefinitionTable *classDefTable; - - GDEFMarkFilter(const GDEFMarkFilter &other); // forbid copying of this class - GDEFMarkFilter &operator=(const GDEFMarkFilter &other); // forbid copying of this class - -public: - GDEFMarkFilter(const GlyphDefinitionTableHeader *gdefTable); - virtual ~GDEFMarkFilter(); - - virtual le_bool accept(LEGlyphID glyph) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/GXLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/GXLayoutEngine.cpp deleted file mode 100644 index 4d596bb0f3d..00000000000 --- a/Build/source/libs/icu-xetex/layout/GXLayoutEngine.cpp +++ /dev/null @@ -1,69 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 MorphTableHeader *morphTable) - : LayoutEngine(fontInstance, scriptCode, languageCode, 0), fMorphTable(morphTable) -{ - // 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(glyphStorage); - - return count; -} - -// 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 diff --git a/Build/source/libs/icu-xetex/layout/GXLayoutEngine.h b/Build/source/libs/icu-xetex/layout/GXLayoutEngine.h deleted file mode 100644 index faa511ab1ab..00000000000 --- a/Build/source/libs/icu-xetex/layout/GXLayoutEngine.h +++ /dev/null @@ -1,125 +0,0 @@ - -/* - * - * (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 - * - * @see LayoutEngine::layoutEngineFactory - * @see ScriptAndLangaugeTags.h for script and language codes - * - * @internal - */ - GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable); - - /** - * 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 - */ - const 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 - diff --git a/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.cpp b/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.cpp deleted file mode 100644 index a51e6ba0813..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * (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 GlyphClassDefinitionTable *GlyphDefinitionTableHeader::getGlyphClassDefinitionTable() const -{ - return (const GlyphClassDefinitionTable *) ((char *) this + SWAPW(glyphClassDefOffset)); -} - -const AttachmentListTable *GlyphDefinitionTableHeader::getAttachmentListTable() const -{ - return (const AttachmentListTable *) ((char *) this + SWAPW(attachListOffset)); -} - -const LigatureCaretListTable *GlyphDefinitionTableHeader::getLigatureCaretListTable() const -{ - return (const LigatureCaretListTable *) ((char *) this + SWAPW(ligCaretListOffset)); -} - -const MarkAttachClassDefinitionTable *GlyphDefinitionTableHeader::getMarkAttachClassDefinitionTable() const -{ - return (const MarkAttachClassDefinitionTable *) ((char *) this + SWAPW(MarkAttachClassDefOffset)); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.h b/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.h deleted file mode 100644 index e4cbbb6e1f5..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphDefinitionTables.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * - * (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]; -}; - -struct AttachPointTable -{ - le_uint16 pointCount; - le_uint16 pointIndexArray[ANY_NUMBER]; -}; - -struct LigatureCaretListTable -{ - Offset coverageTableOffset; - le_uint16 ligGlyphCount; - Offset ligGlyphTableOffsetArray[ANY_NUMBER]; -}; - -struct LigatureGlyphTable -{ - le_uint16 caretCount; - Offset caretValueTableOffsetArray[ANY_NUMBER]; -}; - -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 GlyphClassDefinitionTable *getGlyphClassDefinitionTable() const; - const AttachmentListTable *getAttachmentListTable()const ; - const LigatureCaretListTable *getLigatureCaretListTable() const; - const MarkAttachClassDefinitionTable *getMarkAttachClassDefinitionTable() const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/GlyphIterator.cpp b/Build/source/libs/icu-xetex/layout/GlyphIterator.cpp deleted file mode 100644 index eab023cf58b..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphIterator.cpp +++ /dev/null @@ -1,530 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader) - : direction(1), position(-1), nextLimit(-1), prevLimit(-1), - glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments), - srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), featureParam(0), glyphGroup(0), - glyphClassDefinitionTable(NULL), markAttachClassDefinitionTable(NULL) - -{ - le_int32 glyphCount = glyphStorage.getGlyphCount(); - - if (theGlyphDefinitionTableHeader != NULL) { - glyphClassDefinitionTable = theGlyphDefinitionTableHeader->getGlyphClassDefinitionTable(); - markAttachClassDefinitionTable = theGlyphDefinitionTableHeader->getMarkAttachClassDefinitionTable(); - } - - nextLimit = glyphCount; - - if (rightToLeft) { - direction = -1; - position = glyphCount; - nextLimit = -1; - prevLimit = glyphCount; - } -} - -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; - featureParam = that.featureParam; - glyphGroup = that.glyphGroup; - glyphClassDefinitionTable = that.glyphClassDefinitionTable; - markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; -} - -GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask, le_int32 newFeatureParam) - : 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; - featureParam = newFeatureParam; - glyphGroup = 0; - glyphClassDefinitionTable = that.glyphClassDefinitionTable; - markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; -} - -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; - featureParam = that.featureParam; - glyphGroup = that.glyphGroup; - glyphClassDefinitionTable = that.glyphClassDefinitionTable; - markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; -} - -GlyphIterator::~GlyphIterator() -{ - // nothing to do, right? -} - -void GlyphIterator::reset(le_uint16 newLookupFlags, FeatureMask newFeatureMask) -{ - position = prevLimit; - featureMask = newFeatureMask; - featureParam = 0; - glyphGroup = 0; - lookupFlags = newLookupFlags; -} - -LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count) -{ - return glyphStorage.insertGlyphs(position, count); -} - -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_int32 GlyphIterator::getFeatureParam() const -{ - return featureParam; -} - -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()); -} - -le_bool GlyphIterator::filterGlyph(le_uint32 index) const -{ - LEGlyphID glyphID = glyphStorage[index]; - le_int32 glyphClass = gcdNoGlyphClass; - - if (LE_GET_GLYPH(glyphID) >= 0xFFFE) { - return TRUE; - } - - if (glyphClassDefinitionTable != NULL) { - glyphClass = glyphClassDefinitionTable->getGlyphClass(glyphID); - } - - switch (glyphClass) - { - case gcdNoGlyphClass: - return FALSE; - - case gcdSimpleGlyph: - return (lookupFlags & lfIgnoreBaseGlyphs) != 0; - - case gcdLigatureGlyph: - return (lookupFlags & lfIgnoreLigatures) != 0; - - case gcdMarkGlyph: - { - if ((lookupFlags & lfIgnoreMarks) != 0) { - return TRUE; - } - - le_uint16 markAttachType = (lookupFlags & lfMarkAttachTypeMask) >> lfMarkAttachTypeShift; - - if ((markAttachType != 0) && (markAttachClassDefinitionTable != NULL)) { - return markAttachClassDefinitionTable->getGlyphClass(glyphID) != markAttachType; - } - - return FALSE; - } - - case gcdComponentGlyph: - return (lookupFlags & lfIgnoreBaseGlyphs) != 0; - - default: - return FALSE; - } -} - -le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) -{ - featureParam = 0; - - if (featureMask == 0) { - return TRUE; - } - - LEErrorCode success = LE_NO_ERROR; - FeatureMask fm = glyphStorage.getAuxData(position, success); - - if (((fm & featureMask) == featureMask) && (!matchGroup || (fm & LE_GLYPH_GROUP_MASK) == glyphGroup)) { - const le_int32 *paramList = (const le_int32 *) glyphStorage.getAuxParam(position, success); - if (paramList != NULL) { - fm = featureMask; - while ((fm & 0x80000000UL) == 0) { - ++paramList; - fm <<= 1; - } - featureParam = *paramList; - } - return TRUE; - } - - return FALSE; -} - -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; - } while (newPosition != nextLimit && filterGlyph(newPosition)); - - delta -= 1; - } - - position = newPosition; - - 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; - } while (newPosition != prevLimit && filterGlyph(newPosition)); - - delta -= 1; - } - - position = newPosition; - - 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphIterator.h b/Build/source/libs/icu-xetex/layout/GlyphIterator.h deleted file mode 100644 index 477cdd4c56f..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphIterator.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader); - - GlyphIterator(GlyphIterator &that); - - GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask, le_int32 featureParam = 0); - - 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(); - - le_int32 getFeatureParam() const; - - 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); - le_int32 applyInsertions(); - -private: - le_bool filterGlyph(le_uint32 index) const; - le_bool hasFeatureTag(le_bool matchGroup); /* not const because it updates the featureParam field */ - 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; - - le_int32 featureParam; - const GlyphClassDefinitionTable *glyphClassDefinitionTable; - const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable; - - GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/GlyphLookupTables.cpp b/Build/source/libs/icu-xetex/layout/GlyphLookupTables.cpp deleted file mode 100644 index fdc646fe4f8..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphLookupTables.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - * - * (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(LETag scriptTag) const -{ - const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset)); - - return scriptListOffset != 0 && scriptListTable->findScript(scriptTag) != NULL; -} - -le_bool GlyphLookupTableHeader::coversScriptAndLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const -{ - const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset)); - const LangSysTable *langSysTable = scriptListTable->findLanguage(scriptTag, languageTag, exactMatch); - - // FIXME: could check featureListOffset, lookupListOffset, and lookup count... - // Note: don't have to SWAPW langSysTable->featureCount to check for non-zero. - return langSysTable != NULL && langSysTable->featureCount != 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphLookupTables.h b/Build/source/libs/icu-xetex/layout/GlyphLookupTables.h deleted file mode 100644 index 65642d02e28..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphLookupTables.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * (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(LETag scriptTag) const; - le_bool coversScriptAndLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const; -}; - -U_NAMESPACE_END - -#endif - diff --git a/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.cpp b/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.cpp deleted file mode 100644 index 900e1aeecef..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.h b/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.h deleted file mode 100644 index 9c9e39bffe6..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPositionAdjustments.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.cpp b/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.cpp deleted file mode 100644 index b9187b4a295..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * (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(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, - LETag scriptTag, LETag languageTag, - const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const -{ - GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder); - - processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance); - - glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.h b/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.h deleted file mode 100644 index a07c8c26716..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPositioningTables.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * (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" - -U_NAMESPACE_BEGIN - -class LEFontInstance; -class LEGlyphStorage; -class LEGlyphFilter; -class GlyphPositionAdjustments; -struct GlyphDefinitionTableHeader; - -struct GlyphPositioningTableHeader : public GlyphLookupTableHeader -{ - void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, - le_bool rightToLeft, LETag scriptTag, LETag languageTag, - const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.cpp b/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.cpp deleted file mode 100644 index 6f923a1389c..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "LEFontInstance.h" -#include "OpenTypeTables.h" -#include "Features.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 GlyphPositioningTableHeader *glyphPositioningTableHeader, - LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) - : LookupProcessor( - (char *) glyphPositioningTableHeader, - SWAPW(glyphPositioningTableHeader->scriptListOffset), - SWAPW(glyphPositioningTableHeader->featureListOffset), - SWAPW(glyphPositioningTableHeader->lookupListOffset), - scriptTag, languageTag, featureMap, featureMapCount, featureOrder) -{ - // anything? -} - -GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor() -{ -} - -le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, - GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - le_uint32 delta = 0; - - switch(lookupType) - { - case 0: - break; - - case gpstSingle: - { - const SinglePositioningSubtable *subtable = (const SinglePositioningSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstPair: - { - const PairPositioningSubtable *subtable = (const PairPositioningSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstCursive: - { - const CursiveAttachmentSubtable *subtable = (const CursiveAttachmentSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstMarkToBase: - { - const MarkToBasePositioningSubtable *subtable = (const MarkToBasePositioningSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstMarkToLigature: - { - const MarkToLigaturePositioningSubtable *subtable = (const MarkToLigaturePositioningSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstMarkToMark: - { - const MarkToMarkPositioningSubtable *subtable = (const MarkToMarkPositioningSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fontInstance); - break; - } - - case gpstContext: - { - const ContextualPositioningSubtable *subtable = (const ContextualPositioningSubtable *) lookupSubtable; - - delta = subtable->process(this, glyphIterator, fontInstance); - break; - } - - case gpstChainedContext: - { - const ChainingContextualPositioningSubtable *subtable = (const ChainingContextualPositioningSubtable *) lookupSubtable; - - delta = subtable->process(this, glyphIterator, fontInstance); - break; - } - - case gpstExtension: - { - const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable; - - delta = subtable->process(this, lookupType, glyphIterator, fontInstance); - break; - } - - default: - break; - } - - return delta; -} - -GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor() -{ -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.h b/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.h deleted file mode 100644 index ee3606565d3..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphPosnLookupProc.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * (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 "Features.h" -#include "GlyphDefinitionTables.h" -#include "GlyphPositioningTables.h" -#include "GlyphIterator.h" -#include "LookupProcessor.h" - -U_NAMESPACE_BEGIN - -class GlyphPositioningLookupProcessor : public LookupProcessor -{ -public: - GlyphPositioningLookupProcessor(const GlyphPositioningTableHeader *glyphPositioningTableHeader, - LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder); - - virtual ~GlyphPositioningLookupProcessor(); - - virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.cpp b/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.cpp deleted file mode 100644 index eb25680cce1..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "LEGlyphFilter.h" -#include "LEFontInstance.h" -#include "OpenTypeTables.h" -#include "Features.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 GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader, - LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) - : LookupProcessor( - (char *) glyphSubstitutionTableHeader, - SWAPW(glyphSubstitutionTableHeader->scriptListOffset), - SWAPW(glyphSubstitutionTableHeader->featureListOffset), - SWAPW(glyphSubstitutionTableHeader->lookupListOffset), - scriptTag, languageTag, featureMap, featureMapCount, featureOrder), fFilter(filter) -{ - // anything? -} - -GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor() -{ -} - -le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, - GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - le_uint32 delta = 0; - - switch(lookupType) - { - case 0: - break; - - case gsstSingle: - { - const SingleSubstitutionSubtable *subtable = (const SingleSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fFilter); - break; - } - - case gsstMultiple: - { - const MultipleSubstitutionSubtable *subtable = (const MultipleSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fFilter); - break; - } - - case gsstAlternate: - { - const AlternateSubstitutionSubtable *subtable = (const AlternateSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fFilter); - break; - } - - case gsstLigature: - { - const LigatureSubstitutionSubtable *subtable = (const LigatureSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(glyphIterator, fFilter); - break; - } - - case gsstContext: - { - const ContextualSubstitutionSubtable *subtable = (const ContextualSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(this, glyphIterator, fontInstance); - break; - } - - case gsstChainingContext: - { - const ChainingContextualSubstitutionSubtable *subtable = (const ChainingContextualSubstitutionSubtable *) lookupSubtable; - - delta = subtable->process(this, glyphIterator, fontInstance); - break; - } - - case gsstExtension: - { - const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable; - - delta = subtable->process(this, lookupType, glyphIterator, fontInstance); - break; - } - - default: - break; - } - - return delta; -} - -GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor() -{ -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.h b/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.h deleted file mode 100644 index d8c5684a03b..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphSubstLookupProc.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * (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 "Features.h" -#include "GlyphDefinitionTables.h" -#include "GlyphSubstitutionTables.h" -#include "GlyphIterator.h" -#include "LookupProcessor.h" - -U_NAMESPACE_BEGIN - -class GlyphSubstitutionLookupProcessor : public LookupProcessor -{ -public: - GlyphSubstitutionLookupProcessor(const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader, - LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder); - - virtual ~GlyphSubstitutionLookupProcessor(); - - virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) 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 diff --git a/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.cpp b/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.cpp deleted file mode 100644 index 661b30f3ab5..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * - * (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(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag, - const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const -{ - GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder); - - return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.h b/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.h deleted file mode 100644 index 620da29c932..00000000000 --- a/Build/source/libs/icu-xetex/layout/GlyphSubstitutionTables.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * (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(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag, - const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEGlyphFilter *filter, - const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) 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 diff --git a/Build/source/libs/icu-xetex/layout/HanLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/HanLayoutEngine.cpp deleted file mode 100644 index ae0d9dc7d4d..00000000000 --- a/Build/source/libs/icu-xetex/layout/HanLayoutEngine.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * HanLayoutEngine.cpp: OpenType processing for Han fonts. - * - * (C) Copyright IBM Corp. 1998-2005 - 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 GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) -{ - 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, NULL, success); - } - - return count; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/HanLayoutEngine.h b/Build/source/libs/icu-xetex/layout/HanLayoutEngine.h deleted file mode 100644 index 6f683e1e286..00000000000 --- a/Build/source/libs/icu-xetex/layout/HanLayoutEngine.h +++ /dev/null @@ -1,104 +0,0 @@ - -/* - * HanLayoutEngine.h: OpenType processing for Han fonts. - * - * (C) Copyright IBM Corp. 1998-2005 - 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - - /** - * 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 diff --git a/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.cpp deleted file mode 100644 index 0782b85c7e8..00000000000 --- a/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* - * HangulLayoutEngine.cpp: OpenType processing for Han fonts. - * - * (C) Copyright IBM Corp. 1998-2006 - 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 -{ - int32_t newState; - int32_t 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 = 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 GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable) -{ - fFeatureMap = featureMap; - fFeatureMapCount = featureMapCount; - fFeatureOrder = TRUE; -} - -HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/, - le_int32 typoFlags) - : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags) -{ - 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; - int32_t 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, NULL, 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, NULL, success); - } - - if ((transition.actionFlags & AF_V) != 0) { - outChars[outCharCount] = vowel; - glyphStorage.setCharIndex(outCharCount, i-offset, success); - glyphStorage.setAuxData(outCharCount++, vjmoFeatures, NULL, success); - } - - if ((transition.actionFlags & AF_T) != 0) { - outChars[outCharCount] = trail; - glyphStorage.setCharIndex(outCharCount, i-offset, success); - glyphStorage.setAuxData(outCharCount++, tjmoFeatures, NULL, 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, NULL, 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, NULL, success); - } - } - } - } - - glyphStorage.adoptGlyphCount(outCharCount); - return outCharCount; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.h b/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.h deleted file mode 100644 index e77c3b97644..00000000000 --- a/Build/source/libs/icu-xetex/layout/HangulLayoutEngine.h +++ /dev/null @@ -1,125 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2006 - 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes - * - * @internal - */ - HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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 - diff --git a/Build/source/libs/icu-xetex/layout/HindiFeatureTags.h b/Build/source/libs/icu-xetex/layout/HindiFeatureTags.h deleted file mode 100644 index de78f485239..00000000000 --- a/Build/source/libs/icu-xetex/layout/HindiFeatureTags.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __HINDIFEATURETAGS_H -#define __HINDIFEATURETAGS_H - -/** - * \file - * \internal - */ - -#include "jni.h" -#include "LETypes.h" -#include "OpenTypeTables.h" - -U_NAMESPACE_BEGIN - -const LETag oopsFeatureTag = 0x6F6F7073; // 'oops' - -const LETag nuktFeatureTag = 0x6E756B74; // 'nukt' -const LETag akhnFeatureTag = 0x616B686E; // 'akhn' -const LETag rphfFeatureTag = 0x72706866; // 'rphf' -const LETag blwfFeatureTag = 0x626C7766; // 'blwf' -const LETag halfFeatureTag = 0x68616C66; // 'half' -const LETag pstfFeatureTag = 0x70737466; // 'pstf' -const LETag vatuFeatureTag = 0x76617475; // 'vatu' -const LETag presFeatureTag = 0x70726573; // 'pres' -const LETag blwsFeatureTag = 0x626C7773; // 'blws' -const LETag abvsFeatureTag = 0x61627673; // 'abvs' -const LETag pstsFeatureTag = 0x70737473; // 'psts' -const LETag halnFeatureTag = 0x68616C6E; // 'haln' - -const LETag blwmFeatureTag = 0x626C776D; // 'blwm' -const LETag abvmFeatureTag = 0x6162766D; // 'abvm' -const LETag distFeatureTag = 0x64697374; // 'dist' - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/IndicClassTables.cpp b/Build/source/libs/icu-xetex/layout/IndicClassTables.cpp deleted file mode 100644 index 7fb47b0f514..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicClassTables.cpp +++ /dev/null @@ -1,447 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 _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, _xx, _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)) -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, _dr, _dr, _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, _iv, _xx, _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 - _pb, _cn, _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, 4, 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, 4, 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, 4, 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) */ -}; - -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 diff --git a/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.cpp deleted file mode 100644 index ec83e73e462..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.cpp +++ /dev/null @@ -1,114 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2005 - 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, const GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable), fMPreFixups(NULL) -{ - fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount); - fFeatureOrder = TRUE; - - fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode); -} - -IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fMPreFixups(NULL) -{ - fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount); - fFeatureOrder = TRUE; -} - -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; - } - - le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max, rightToLeft, glyphStorage, success); - - if (LE_FAILURE(success)) { - return 0; - } - - IndicReordering::adjustMPres(fMPreFixups, glyphStorage); - - 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; - } - - 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 = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups); - - glyphStorage.adoptGlyphCount(outCharCount); - return outCharCount; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.h b/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.h deleted file mode 100644 index af0f4c97f47..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicLayoutEngine.h +++ /dev/null @@ -1,162 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2005 - 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 - * - * @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, const GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes - * - * @internal - */ - IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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); - -private: - - MPreFixups *fMPreFixups; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/IndicRearrangement.h b/Build/source/libs/icu-xetex/layout/IndicRearrangement.h deleted file mode 100644 index 48b1d08adae..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicRearrangement.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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 -{ -}; - -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 -{ -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.cpp b/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.cpp deleted file mode 100644 index 92202450705..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.cpp +++ /dev/null @@ -1,398 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : StateTableProcessor(morphSubtableHeader) -{ - indicRearrangementSubtableHeader = (const IndicRearrangementSubtableHeader *) morphSubtableHeader; - entryTable = (const IndicRearrangementStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset); -} - -IndicRearrangementProcessor::~IndicRearrangementProcessor() -{ -} - -void IndicRearrangementProcessor::beginStateTable() -{ - firstGlyph = 0; - lastGlyph = 0; -} - -ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) -{ - const IndicRearrangementStateEntry *entry = &entryTable[index]; - ByteOffset newState = SWAPW(entry->newStateOffset); - IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); - - if (flags & irfMarkFirst) { - firstGlyph = currGlyph; - } - - if (flags & irfMarkLast) { - lastGlyph = currGlyph; - } - - doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask)); - - if (!(flags & irfDontAdvance)) { - // XXX: Should handle reverse too... - currGlyph += 1; - } - - return newState; -} - -void IndicRearrangementProcessor::endStateTable() -{ -} - -void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const -{ - LEGlyphID a, b, c, d; - le_int32 ia, ib, ic, id, ix, x; - LEErrorCode success = LE_NO_ERROR; - - switch(verb) - { - case irvNoAction: - break; - - case irvxA: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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 diff --git a/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.h b/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.h deleted file mode 100644 index 0cb46ddfccc..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicRearrangementProcessor.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * - * (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); - - virtual void endStateTable(); - - void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const; - - IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader); - 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; - - const IndicRearrangementStateEntry *entryTable; - const IndicRearrangementSubtableHeader *indicRearrangementSubtableHeader; - -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/IndicReordering.cpp b/Build/source/libs/icu-xetex/layout/IndicReordering.cpp deleted file mode 100644 index 5ca8b1084eb..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicReordering.cpp +++ /dev/null @@ -1,764 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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 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 blwmFeatureTag LE_BLWM_FEATURE_TAG -#define abvmFeatureTag LE_ABVM_FEATURE_TAG -#define distFeatureTag LE_DIST_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 - -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; - - 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) - { - // 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; - } - - 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), NULL, success); - - fOutIndex += 1; - } - - 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 < 3 && (*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 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); - } - } - - le_int32 getOutputIndex() - { - return fOutIndex; - } -}; - -enum -{ - C_MALAYALAM_VOWEL_SIGN_U = 0x0D41, - C_DOTTED_CIRCLE = 0x25CC -}; - -// 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 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; -} - -le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount) -{ - le_int32 cursor = prev; - le_int8 state = 0; - - while (cursor < charCount) { - IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]); - - 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) -{ - MPreFixups *mpreFixups = NULL; - const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode); - - if (classTable->scriptFlags & SF_MPRE_FIXUP) { - mpreFixups = new MPreFixups(charCount); - } - - 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 hasNukta = FALSE; - le_bool hasBelowBaseForm = FALSE; - le_bool hasPostBaseForm = 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; - - if (IndicClassTable::isConsonant(charClass)) { - if (postBaseLimit == 0 || seenVattu || - (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) || - !(hasBelowBaseForm || hasPostBaseForm)) { - break; - } - - // 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 - le_bool supressVattu = TRUE; - - for (i = baseLimit; i < baseConsonant; i += 1) { - LEUnicode ch = chars[i]; - // Don't put 'blwf' on first consonant. - FeatureMask features = (i == baseLimit? tagArray2 : tagArray1); - - 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) { - 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) { - 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) -{ - if (mpreFixups != NULL) { - mpreFixups->apply(glyphStorage); - - delete mpreFixups; - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/IndicReordering.h b/Build/source/libs/icu-xetex/layout/IndicReordering.h deleted file mode 100644 index abd1b722392..00000000000 --- a/Build/source/libs/icu-xetex/layout/IndicReordering.h +++ /dev/null @@ -1,312 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved - * - */ - -#ifndef __INDICREORDERING_H -#define __INDICREORDERING_H - -/** - * \file - * \internal - */ - -#include "LETypes.h" -#include "OpenTypeTables.h" - -U_NAMESPACE_BEGIN - -// Characters that get refered 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_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 - -typedef LEUnicode SplitMatra[3]; - -class MPreFixups; -class LEGlyphStorage; - -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 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); - - 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); - - static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage); - - static const FeatureMap *getFeatureMap(le_int32 &count); - -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::hasBelowBaseForm(CharClass charClass) -{ - return (charClass & CF_BELOW_BASE) != 0; -} - -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)); -} - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/KernTable.cpp b/Build/source/libs/icu-xetex/layout/KernTable.cpp deleted file mode 100644 index 45ce091d440..00000000000 --- a/Build/source/libs/icu-xetex/layout/KernTable.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - * @(#)KernTable.cpp 1.1 04/10/13 - * - * (C) Copyright IBM Corp. 2004-2007 - All Rights Reserved - * - */ - -#include "KernTable.h" -#include "LEFontInstance.h" -#include "LEGlyphStorage.h" - -#include "LESwaps.h" -#include "OpenTypeUtilities.h" - -#include <stdio.h> - -#define DEBUG 0 - -U_NAMESPACE_BEGIN - -struct PairInfo { - le_uint16 left; // left glyph of kern pair - le_uint16 right; // right glyph of kern pair - le_int16 value; // fword, kern value in funits -}; -#define KERN_PAIRINFO_SIZE 6 - -#define SWAP_KEY(p) (((le_uint32) SWAPW((p)->left) << 16) | SWAPW((p)->right)) - -struct Subtable_0 { - le_uint16 nPairs; - le_uint16 searchRange; - le_uint16 entrySelector; - le_uint16 rangeShift; -}; -#define KERN_SUBTABLE_0_HEADER_SIZE 8 - -// Kern table version 0 only -struct SubtableHeader { - le_uint16 version; - le_uint16 length; - le_uint16 coverage; -}; -#define KERN_SUBTABLE_HEADER_SIZE 6 - -// Version 0 only, version 1 has different layout -struct KernTableHeader { - le_uint16 version; - le_uint16 nTables; -}; -#define KERN_TABLE_HEADER_SIZE 4 - -#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 LEFontInstance* font, const void* tableData) - : pairs(0), font(font) -{ - const KernTableHeader* header = (const KernTableHeader*)tableData; - if (header == 0) { -#if DEBUG - fprintf(stderr, "no kern data\n"); -#endif - return; - } - -#if DEBUG - // dump first 32 bytes of header - for (int i = 0; i < 64; ++i) { - fprintf(stderr, "%0.2x ", ((const char*)tableData)[i]&0xff); - if (((i+1)&0xf) == 0) { - fprintf(stderr, "\n"); - } else if (((i+1)&0x7) == 0) { - fprintf(stderr, " "); - } - } -#endif - - if (header->version == 0 && SWAPW(header->nTables) > 0) { - const SubtableHeader* subhead = (const SubtableHeader*)((char*)tableData + KERN_TABLE_HEADER_SIZE); - - if (subhead->version == 0) { - coverage = SWAPW(subhead->coverage); - - if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning - const Subtable_0* table = (const Subtable_0*)((char*)subhead + KERN_SUBTABLE_HEADER_SIZE); - - 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 - - pairs = (const PairInfo*)((char*)table + KERN_SUBTABLE_0_HEADER_SIZE); - -#if DEBUG - fprintf(stderr, "coverage: %0.4x nPairs: %d pairs 0x%x\n", coverage, nPairs, pairs); - fprintf(stderr, " searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift); - - { - // 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; - } - } - - const PairInfo* p = pairs; - - for (i = 0; i < nPairs; ++i, p = (const PairInfo*)((char*)p+KERN_PAIRINFO_SIZE)) { - le_uint16 left = p->left; - le_uint16 right = p->right; - - if (left < 256 && right < 256) { - char c = ids[left]; - - if (c > 0x20 && c < 0x7f) { - fprintf(stderr, "%c/", c & 0xff); - } else { - printf(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) -{ - if (pairs) { - LEErrorCode 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(); 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 = pairs; - const PairInfo* tp = (const PairInfo*)((char*)p + rangeShift); - - if (key > SWAP_KEY(tp)) { - p = tp; - } - -#if DEBUG - fprintf(stderr, "binary search for %0.8x\n", key); -#endif - - le_uint32 probe = searchRange; - - while (probe > KERN_PAIRINFO_SIZE) { - probe >>= 1; - tp = (const PairInfo*)((char*)p + probe); - - le_uint32 tkey = SWAP_KEY(tp); -#if DEBUG - fprintf(stdout, " %.3d (%0.8x)\n", ((char*)tp - (char*)pairs)/KERN_PAIRINFO_SIZE, tkey); -#endif - if (tkey <= key) { - if (tkey == key) { - le_int16 value = SWAPW(tp->value); -#if DEBUG - 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 - adjust += font->xUnitsToPoints(value); - break; - } - - p = tp; - } - } - - storage.adjustPosition(i, adjust, 0, success); - } - - storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success); - } -} - -U_NAMESPACE_END - diff --git a/Build/source/libs/icu-xetex/layout/KernTable.h b/Build/source/libs/icu-xetex/layout/KernTable.h deleted file mode 100644 index b8322cf1fe6..00000000000 --- a/Build/source/libs/icu-xetex/layout/KernTable.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)KernTable.h 1.1 04/10/13 - * - * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved - * - */ - -#ifndef __KERNTABLE_H -#define __KERNTABLE_H - -#ifndef __LETYPES_H -#include "LETypes.h" -#endif - -#include "LETypes.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; - const PairInfo* pairs; - const LEFontInstance* font; - le_uint16 searchRange; - le_uint16 entrySelector; - le_uint16 rangeShift; - - public: - KernTable(const LEFontInstance* font, const void* tableData); - - /* - * Process the glyph positions. - */ - void process(LEGlyphStorage& storage); -}; - -U_NAMESPACE_END - -#endif diff --git a/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.cpp deleted file mode 100644 index 7538eac5568..00000000000 --- a/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.cpp +++ /dev/null @@ -1,81 +0,0 @@ - -/* - * (C) Copyright IBM Corp. 1998-2005 - 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 GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) -{ - fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount); - fFeatureOrder = TRUE; -} - -KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) -{ - 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 diff --git a/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.h b/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.h deleted file mode 100644 index 56b79e975ed..00000000000 --- a/Build/source/libs/icu-xetex/layout/KhmerLayoutEngine.h +++ /dev/null @@ -1,129 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2005 - 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes - * - * @internal - */ - KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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 - diff --git a/Build/source/libs/icu-xetex/layout/KhmerReordering.cpp b/Build/source/libs/icu-xetex/layout/KhmerReordering.cpp deleted file mode 100644 index b448039c90c..00000000000 --- a/Build/source/libs/icu-xetex/layout/KhmerReordering.cpp +++ /dev/null @@ -1,499 +0,0 @@ -/* - * - * (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 refered 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), NULL, 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 diff --git a/Build/source/libs/icu-xetex/layout/KhmerReordering.h b/Build/source/libs/icu-xetex/layout/KhmerReordering.h deleted file mode 100644 index eecd12dff63..00000000000 --- a/Build/source/libs/icu-xetex/layout/KhmerReordering.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * (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 diff --git a/Build/source/libs/icu-xetex/layout/LEFontInstance.cpp b/Build/source/libs/icu-xetex/layout/LEFontInstance.cpp deleted file mode 100644 index eaca51a51b3..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEFontInstance.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - ******************************************************************************* - * - * 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(); -} - -void LEFontInstance::getKernPair(LEGlyphID leftGlyph, LEGlyphID rightGlyph, LEPoint &kern) const -{ - kern.fX = kern.fY = 0; -} - -U_NAMESPACE_END - diff --git a/Build/source/libs/icu-xetex/layout/LEFontInstance.h b/Build/source/libs/icu-xetex/layout/LEFontInstance.h deleted file mode 100644 index 5d6318d7f6d..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEFontInstance.h +++ /dev/null @@ -1,541 +0,0 @@ - -/* - * - * (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>. - * - * @param tableTag - the four byte table tag. (e.g. 'cmap') - * - * @return the address of the table in memory, or <code>NULL</code> - * if the table doesn't exist. - * - * @stable ICU 2.8 - */ - virtual const void *getFontTable(LETag tableTag) 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; - - /** - * 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(); - - /** - * Returns kern value for a glyph pair, if the font has a kern pair list. - */ - virtual void getKernPair(LEGlyphID leftGlyph, LEGlyphID rightGlyph, LEPoint &kern) const; - - /** - * Returns true if writing direction is vertical. - */ - virtual inline bool getLayoutDirVertical() const; -}; - -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); -} - -inline bool LEFontInstance::getLayoutDirVertical() const -{ - return false; -} - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/LEGlyphFilter.h b/Build/source/libs/icu-xetex/layout/LEGlyphFilter.h deleted file mode 100644 index f8fa1731879..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEGlyphFilter.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __LEGLYPHFILTER__H -#define __LEGLYPHFILTER__H - -#include "LETypes.h" - -U_NAMESPACE_BEGIN - -/** - * 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) const = 0; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LEGlyphStorage.cpp b/Build/source/libs/icu-xetex/layout/LEGlyphStorage.cpp deleted file mode 100644 index 1b595159a11..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEGlyphStorage.cpp +++ /dev/null @@ -1,649 +0,0 @@ -/* - ********************************************************************** - * Copyright (C) 1998-2006, 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), fAuxParam(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 (fAuxParam != NULL) { - LE_DELETE_ARRAY(fAuxParam); - fAuxParam = 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); - } -} - -// 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 || fAuxParam != NULL) { - success = LE_INTERNAL_ERROR; - return -1; - } - - fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount); - fAuxParam = LE_NEW_ARRAY(void *, fGlyphCount); - - if (fAuxData == NULL || fAuxParam == 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::getAuxParam(le_int32 glyphIndex, LEErrorCode &success) const -{ - if (LE_FAILURE(success)) { - return NULL; - } - - if (fAuxParam == NULL) { - success = LE_NO_LAYOUT_ERROR; - return NULL; - } - - if (glyphIndex < 0 || glyphIndex >= fGlyphCount) { - success = LE_INDEX_OUT_OF_BOUNDS_ERROR; - return NULL; - } - - return fAuxParam[glyphIndex]; -} - -void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, void *auxParam, LEErrorCode &success) -{ - if (LE_FAILURE(success)) { - return; - } - - if (fAuxData == NULL || fAuxParam == NULL) { - success = LE_NO_LAYOUT_ERROR; - return; - } - - if (glyphIndex < 0 || glyphIndex >= fGlyphCount) { - success = LE_INDEX_OUT_OF_BOUNDS_ERROR; - return; - } - - fAuxData[glyphIndex] = auxData; - fAuxParam[glyphIndex] = auxParam; -} - -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; - } - - 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::adoptAuxDataArrays(LEGlyphStorage &from) -{ - if (fAuxData != NULL) { - LE_DELETE_ARRAY(fAuxData); - } - - if (fAuxParam != NULL) { - LE_DELETE_ARRAY(fAuxParam); - } - - fAuxData = from.fAuxData; - from.fAuxData = NULL; - fAuxParam = from.fAuxParam; - from.fAuxParam = NULL; -} - -void LEGlyphStorage::adoptGlyphCount(LEGlyphStorage &from) -{ - fGlyphCount = from.fGlyphCount; -} - -void LEGlyphStorage::adoptGlyphCount(le_int32 newGlyphCount) -{ - fGlyphCount = newGlyphCount; -} - -// FIXME: add error checking? -LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount) -{ - return fInsertionList->insert(atIndex, insertCount); -} - -le_int32 LEGlyphStorage::applyInsertions() -{ - le_int32 growAmount = fInsertionList->getGrowAmount(); - - if (growAmount == 0) { - return fGlyphCount; - } - - le_int32 newGlyphCount = fGlyphCount + growAmount; - - fGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount); - fCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount); - - if (fAuxData != NULL) { - fAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount); - } - - if (fAuxParam != NULL) { - fAuxParam = (void **) LE_GROW_ARRAY(fAuxParam, newGlyphCount); - } - - 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 (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]; - } - } - - if (fAuxParam != NULL) { - le_int32 src = fSrcIndex, dest = fDestIndex; - - while (src > atPosition) { - fAuxParam[dest--] = fAuxParam[src--]; - } - - for (le_int32 i = count - 1; i >= 0; i -= 1) { - fAuxParam[dest--] = fAuxParam[atPosition]; - } - } - - while (fSrcIndex > atPosition) { - fGlyphs[fDestIndex] = fGlyphs[fSrcIndex]; - fCharIndices[fDestIndex] = fCharIndices[fSrcIndex]; - - fDestIndex -= 1; - fSrcIndex -= 1; - } - - for (le_int32 i = count - 1; i >= 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 - diff --git a/Build/source/libs/icu-xetex/layout/LEGlyphStorage.h b/Build/source/libs/icu-xetex/layout/LEGlyphStorage.h deleted file mode 100644 index 87134543638..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEGlyphStorage.h +++ /dev/null @@ -1,512 +0,0 @@ -/* - ********************************************************************** - * Copyright (C) 1998-2007, 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 auxiliary data arrays. - * - * @internal - */ - le_uint32 *fAuxData; - void **fAuxParam; - - /** - * 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; - void *getAuxParam(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 - * - * @return the address at which to store the replacement glyphs. - * - * @see LEInsetionList.h - * - * @stable ICU 3.0 - */ - LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount); - - /** - * 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 auxiliary data for a particular glyph. - * - * @param glyphIndex the index of the glyph - * @param auxData the new auxiliary data - * @param auxParam the new secondary auxiliary data (parameter) - * @param success will be set to an error code if the auxiliary data cannot be set. - * - * @stable ICU 3.6 - mod for XeTeX - */ - void setAuxData(le_int32 glyphIndex, le_uint32 auxData, void *auxParam, 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 - mod for XeTeX - */ - void adoptAuxDataArrays(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 - diff --git a/Build/source/libs/icu-xetex/layout/LEInsertionList.cpp b/Build/source/libs/icu-xetex/layout/LEInsertionList.cpp deleted file mode 100644 index b92cc474936..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEInsertionList.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - ********************************************************************** - * Copyright (C) 1998-2004, 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) -{ - InsertionRecord *insertion = (InsertionRecord *) LE_NEW_ARRAY(char, sizeof(InsertionRecord) + (count - ANY_NUMBER) * sizeof (LEGlyphID)); - - 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 diff --git a/Build/source/libs/icu-xetex/layout/LEInsertionList.h b/Build/source/libs/icu-xetex/layout/LEInsertionList.h deleted file mode 100644 index a894295280d..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEInsertionList.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - ********************************************************************** - * Copyright (C) 1998-2006, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - */ - -#ifndef __LEINSERTIONLIST_H -#define __LEINSERTIONLIST_H - -#include "LETypes.h" - -U_NAMESPACE_BEGIN - -struct InsertionRecord; - -/** - * 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 - * - * @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); - - /** - * 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; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/LELanguages.h b/Build/source/libs/icu-xetex/layout/LELanguages.h deleted file mode 100644 index d487729f02a..00000000000 --- a/Build/source/libs/icu-xetex/layout/LELanguages.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008. 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/13/2008 05:37:32 PM HST - */ - -#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. - * - * @draft ICU 3.9 - */ - -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, - 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 diff --git a/Build/source/libs/icu-xetex/layout/LEScripts.h b/Build/source/libs/icu-xetex/layout/LEScripts.h deleted file mode 100644 index d8441e7a5cb..00000000000 --- a/Build/source/libs/icu-xetex/layout/LEScripts.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007. All Rights Reserved. - * - * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS - * YOU REALLY KNOW WHAT YOU'RE DOING. - * - * Generated on: 09/03/2007 08:58:55 AM HST - */ - -#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 3.6 - */ - -enum ScriptCodes { - zyyyScriptCode = 0, - qaaiScriptCode = 1, - 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, - cansScriptCode = 40, - yiiiScriptCode = 41, - tglgScriptCode = 42, - hanoScriptCode = 43, - buhdScriptCode = 44, - tagbScriptCode = 45, - braiScriptCode = 46, - cprtScriptCode = 47, - limbScriptCode = 48, - linbScriptCode = 49, - osmaScriptCode = 50, - shawScriptCode = 51, - taleScriptCode = 52, - ugarScriptCode = 53, - hrktScriptCode = 54, - bugiScriptCode = 55, - glagScriptCode = 56, - kharScriptCode = 57, - syloScriptCode = 58, - taluScriptCode = 59, - tfngScriptCode = 60, - xpeoScriptCode = 61, - 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, - cariScriptCode = 104, - jpanScriptCode = 105, - lanaScriptCode = 106, - lyciScriptCode = 107, - lydiScriptCode = 108, - olckScriptCode = 109, - rjngScriptCode = 110, - saurScriptCode = 111, - sgnwScriptCode = 112, - sundScriptCode = 113, - moonScriptCode = 114, - mteiScriptCode = 115, - - scriptCodeCount = 116 -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LESwaps.h b/Build/source/libs/icu-xetex/layout/LESwaps.h deleted file mode 100644 index 5309139d673..00000000000 --- a/Build/source/libs/icu-xetex/layout/LESwaps.h +++ /dev/null @@ -1,87 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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 - */ -#define SWAPW(value) LESwaps::swapWord((const le_uint16 &) (value)) - -/** - * A convenience macro which invokes the swapLong member function - * from a concise call. - * - * @stable ICU 2.8 - */ -#define SWAPL(value) LESwaps::swapLong((const le_uint32 &) (value)) - -/** - * This class is used to access data which stored in big endian order - * regardless of the conventions of the platform. - * - * 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: - - /** - * 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(const le_uint16 &value) - { - const le_uint8 *p = (const le_uint8 *) &value; - - return ((p[0] << 8) + p[1]); - }; - - /** - * 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(const le_uint32 &value) - { - const le_uint8 *p = (const le_uint8 *) &value; - - return ((p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3]); - }; - -private: - LESwaps() {} // private - forbid instantiation -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LETypes.h b/Build/source/libs/icu-xetex/layout/LETypes.h deleted file mode 100644 index 4903a1c0d3a..00000000000 --- a/Build/source/libs/icu-xetex/layout/LETypes.h +++ /dev/null @@ -1,571 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#ifndef __LETYPES_H -#define __LETYPES_H - -#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 XP_CPLUSPLUS -#include "unicode/uobject.h" -#endif - -#ifdef LE_USE_CMEMORY -#include "cmemory.h" -#endif - -U_NAMESPACE_BEGIN - -/*! - * \file - * \brief Basic definitions for the ICU LayoutEngine - */ - -/** - * A type used for signed, 32-bit integers. - * - * @stable ICU 2.4 - */ -typedef int32_t le_int32; - -/** - * A type used for unsigned, 32-bit integers. - * - * @stable ICU 2.4 - */ -typedef uint32_t le_uint32; - -/** - * A type used for signed, 16-bit integers. - * - * @stable ICU 2.4 - */ -typedef int16_t le_int16; - -/** - * A type used for unsigned, 16-bit integers. - * - * @stable ICU 2.4 - */ -typedef uint16_t le_uint16; - -/** - * A type used for signed, 8-bit integers. - * - * @stable ICU 2.4 - */ -typedef int8_t le_int8; - -/** - * A type used for unsigned, 8-bit integers. - * - * @stable ICU 2.4 - */ -typedef uint8_t le_uint8; - - -/** - * A type used for boolean values. - * - * @stable ICU 2.4 - */ -typedef UBool le_bool; - -#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; - -/** - * Used to represent 16-bit Unicode code points. - * - * @deprecated since ICU 2.4. Use LEUnicode16 instead - */ -typedef UChar LEUnicode; - -/** - * 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 XP_CPLUSPLUS -/** - * Used to hold a pair of (x, y) values which represent a point. - * - * @stable ICU 2.4 - */ -typedef struct LEPoint LEPoint; -#endif - - -/** - * 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 *) 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)) -#endif - -/** - * 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_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_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' */ -}; - -/** - * Error codes returned by the LayoutEngine. - * - * @stable ICU 2.4 - */ -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. */ -}; - -#ifndef XP_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 - */ -#define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code)) - -/** - * A convenience macro to test for the failure of a LayoutEngine call. - * - * @stable ICU 2.4 - */ -#define LE_FAILURE(code) (U_FAILURE((UErrorCode)code)) - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/LayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/LayoutEngine.cpp deleted file mode 100644 index b56854fa934..00000000000 --- a/Build/source/libs/icu-xetex/layout/LayoutEngine.cpp +++ /dev/null @@ -1,622 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "LEScripts.h" -#include "LELanguages.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 "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; - -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); - -LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const -{ - 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 GlyphClassDefinitionTable *classDefTable; - - CanonMarkFilter(const CanonMarkFilter &other); // forbid copying of this class - CanonMarkFilter &operator=(const CanonMarkFilter &other); // forbid copying of this class - -public: - CanonMarkFilter(const GlyphDefinitionTableHeader *gdefTable); - virtual ~CanonMarkFilter(); - - virtual le_bool accept(LEGlyphID glyph) const; -}; - -CanonMarkFilter::CanonMarkFilter(const GlyphDefinitionTableHeader *gdefTable) -{ - classDefTable = gdefTable->getMarkAttachClassDefinitionTable(); -} - -CanonMarkFilter::~CanonMarkFilter() -{ - // nothing to do? -} - -le_bool CanonMarkFilter::accept(LEGlyphID glyph) const -{ - le_int32 glyphClass = classDefTable->getGlyphClass(glyph); - - 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) - : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode), - fTypoFlags(typoFlags), fFilterZeroWidth(TRUE) -{ - fGlyphStorage = new LEGlyphStorage(); -} - -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; - } - - const GlyphSubstitutionTableHeader *canonGSUBTable = (GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; - LETag scriptTag = OpenTypeLayoutEngine::getScriptTag(fScriptCode); - LETag langSysTag = OpenTypeLayoutEngine::getLangSysTag(fLanguageCode); - le_int32 i, dir = 1, out = 0, outCharCount = count; - - if (canonGSUBTable->coversScript(scriptTag)) { - CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance); - const LEUnicode *inChars = &chars[offset]; - LEUnicode *reordered = NULL; - LEGlyphStorage fakeGlyphStorage; - - fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success); - - if (LE_FAILURE(success)) { - 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) { - success = LE_MEMORY_ALLOCATION_ERROR; - return 0; - } - - CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage); - inChars = reordered; - } - - fakeGlyphStorage.allocateAuxData(success); - - if (LE_FAILURE(success)) { - 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, NULL, success); - } - - if (reordered != NULL) { - LE_DELETE_ARRAY(reordered); - } - - outCharCount = canonGSUBTable->process(fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE); - - out = (rightToLeft? outCharCount - 1 : 0); - - outChars = LE_NEW_ARRAY(LEUnicode, outCharCount); - 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); - - 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; - } - - GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; - CanonMarkFilter filter(gdefTable); - - adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); - - if (fTypoFlags & 0x1) { /* kerning enabled */ - static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG; - const void* kernTableData = getFontTable(kernTableTag); - if (kernTableData != NULL) { - KernTable kt(fFontInstance, kernTableData); - kt.process(glyphStorage); - } - else { /* no 'kern' table, but the font might know kern pairs from an AFM file, for instance */ - float xAdjust = 0.0, yAdjust = 0.0; - LEGlyphID leftGlyph = glyphStorage.getGlyphID(0, success); - for (le_int32 i = 1; i < glyphStorage.getGlyphCount(); ++i) { - LEGlyphID rightGlyph = glyphStorage.getGlyphID(i, success); - LEPoint kern; - fFontInstance->getKernPair(leftGlyph, rightGlyph, kern); - xAdjust += fFontInstance->xUnitsToPoints(kern.fX); - yAdjust += fFontInstance->yUnitsToPoints(kern.fY); - glyphStorage.adjustPosition(i, xAdjust, yAdjust, success); - leftGlyph = rightGlyph; - } - glyphStorage.adjustPosition(glyphStorage.getGlyphCount(), xAdjust, yAdjust, 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; - glyphStorage.adjustPosition(p, xAdjust, 0, success); - - if (markFilter->accept(glyphStorage[p])) { - 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; - glyphStorage.adjustPosition(p, xAdjust, 0, success); - - if (markFilter->accept(chars[c])) { - xAdjust -= xAdvance; - } - - prev = next; - } - - glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success); -} - -const void *LayoutEngine::getFontTable(LETag tableTag) const -{ - return fFontInstance->getFontTable(tableTag); -} - -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() -{ - fGlyphStorage->reset(); -} - -LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success) -{ - // 3 -> kerning and ligatures - return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, 3, 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; - - if (LE_FAILURE(success)) { - return NULL; - } - - const GlyphSubstitutionTableHeader *gsubTable = (const GlyphSubstitutionTableHeader *) fontInstance->getFontTable(gsubTableTag); - LayoutEngine *result = NULL; - LETag scriptTag = 0x00000000; - LETag languageTag = 0x00000000; - - if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) { - 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, gsubTable); - break; - - case arabScriptCode: - case syrcScriptCode: - case mongScriptCode: - result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - - case hangScriptCode: - result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - - case haniScriptCode: - languageTag = OpenTypeLayoutEngine::getLangSysTag(languageCode); - - switch (languageCode) { - case korLanguageCode: - case janLanguageCode: - case zhtLanguageCode: - case zhsLanguageCode: - if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag, TRUE)) { - result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - } - - // note: falling through to default case. - default: - result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - } - - break; - - case tibtScriptCode: - result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - - case khmrScriptCode: - result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - - default: - result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); - break; - } - } else { - const MorphTableHeader *morphTable = (MorphTableHeader *) fontInstance->getFontTable(mortTableTag); - - if (morphTable != NULL) { - result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable); - } 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); - break; - } - - case arabScriptCode: - //case hebrScriptCode: - result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); - break; - - //case hebrScriptCode: - // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); - - case thaiScriptCode: - result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); - break; - - case hangScriptCode: - result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); - break; - - default: - result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); - break; - } - } - } - - if (result == NULL) { - success = LE_MEMORY_ALLOCATION_ERROR; - } - - return result; -} - -LayoutEngine::~LayoutEngine() { - delete fGlyphStorage; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/LayoutEngine.h b/Build/source/libs/icu-xetex/layout/LayoutEngine.h deleted file mode 100644 index f7711504c8a..00000000000 --- a/Build/source/libs/icu-xetex/layout/LayoutEngine.h +++ /dev/null @@ -1,491 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 { -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; - - /** - * 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. Set bit 1 if kerning - * is desired, set bit 2 if ligature formation is desired. Others are reserved. - * - * @see LEFontInstance - * @see ScriptAndLanguageTags.h - * - * @internal - */ - LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags); - - /** - * 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. - * - * @return the address of the table. - * - * @internal - */ - virtual const void *getFontTable(LETag tableTag) const; - - /** - * 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 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); - - /** - * 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); - - -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 - diff --git a/Build/source/libs/icu-xetex/layout/LayoutTables.h b/Build/source/libs/icu-xetex/layout/LayoutTables.h deleted file mode 100644 index fda5081c7a5..00000000000 --- a/Build/source/libs/icu-xetex/layout/LayoutTables.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * - * (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 - diff --git a/Build/source/libs/icu-xetex/layout/LigatureSubstProc.cpp b/Build/source/libs/icu-xetex/layout/LigatureSubstProc.cpp deleted file mode 100644 index 8df9a7861f3..00000000000 --- a/Build/source/libs/icu-xetex/layout/LigatureSubstProc.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * - * (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 "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 MorphSubtableHeader *morphSubtableHeader) - : StateTableProcessor(morphSubtableHeader) -{ - ligatureSubstitutionHeader = (const LigatureSubstitutionHeader *) morphSubtableHeader; - ligatureActionTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureActionTableOffset); - componentTableOffset = SWAPW(ligatureSubstitutionHeader->componentTableOffset); - ligatureTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureTableOffset); - - entryTable = (const LigatureSubstitutionStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset); -} - -LigatureSubstitutionProcessor::~LigatureSubstitutionProcessor() -{ -} - -void LigatureSubstitutionProcessor::beginStateTable() -{ - m = -1; -} - -ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) -{ - const LigatureSubstitutionStateEntry *entry = &entryTable[index]; - ByteOffset newState = SWAPW(entry->newStateOffset); - le_int16 flags = SWAPW(entry->flags); - - if (flags & lsfSetComponent) { - if (++m >= nComponents) { - m = 0; - } - - componentStack[m] = currGlyph; - } - - ByteOffset actionOffset = flags & lsfActionOffsetMask; - - if (actionOffset != 0) { - const LigatureActionEntry *ap = (const LigatureActionEntry *) ((char *) &ligatureSubstitutionHeader->stHeader + actionOffset); - LigatureActionEntry action; - le_int32 offset, i = 0; - le_int32 stack[nComponents]; - le_int16 mm = -1; - - do { - le_uint32 componentGlyph = componentStack[m--]; - - action = SWAPL(*ap++); - - if (m < 0) { - m = nComponents - 1; - } - - offset = action & lafComponentOffsetMask; - if (offset != 0) { - const le_int16 *offsetTable = (const le_int16 *)((char *) &ligatureSubstitutionHeader->stHeader + 2 * SignExtend(offset, lafComponentOffsetMask)); - - i += SWAPW(offsetTable[LE_GET_GLYPH(glyphStorage[componentGlyph])]); - - if (action & (lafLast | lafStore)) { - const TTGlyphID *ligatureOffset = (const TTGlyphID *) ((char *) &ligatureSubstitutionHeader->stHeader + i); - TTGlyphID ligatureGlyph = SWAPW(*ligatureOffset); - - glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph); - stack[++mm] = componentGlyph; - i = 0; - } else { - glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF); - } - } - } while (!(action & lafLast)); - - 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 diff --git a/Build/source/libs/icu-xetex/layout/LigatureSubstProc.h b/Build/source/libs/icu-xetex/layout/LigatureSubstProc.h deleted file mode 100644 index ef5b1edb5fc..00000000000 --- a/Build/source/libs/icu-xetex/layout/LigatureSubstProc.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * - * (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); - - virtual void endStateTable(); - - LigatureSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader); - 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; - - const LigatureSubstitutionStateEntry *entryTable; - - le_int32 componentStack[nComponents]; - le_int16 m; - - const LigatureSubstitutionHeader *ligatureSubstitutionHeader; - -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.cpp b/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.cpp deleted file mode 100644 index 391ffe649ee..00000000000 --- a/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * (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(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - Offset ligSetTableOffset = SWAPW(ligSetTableOffsetArray[coverageIndex]); - const LigatureSetTable *ligSetTable = (const LigatureSetTable *) ((char *) this + ligSetTableOffset); - le_uint16 ligCount = SWAPW(ligSetTable->ligatureCount); - - for (le_uint16 lig = 0; lig < ligCount; lig += 1) { - Offset ligTableOffset = SWAPW(ligSetTable->ligatureTableOffsetArray[lig]); - const LigatureTable *ligTable = (const LigatureTable *) ((char *)ligSetTable + ligTableOffset); - le_uint16 compCount = SWAPW(ligTable->compCount) - 1; - 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)))) { - 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 diff --git a/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.h b/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.h deleted file mode 100644 index 423c95a663d..00000000000 --- a/Build/source/libs/icu-xetex/layout/LigatureSubstSubtables.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * (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]; -}; - -struct LigatureTable -{ - TTGlyphID ligGlyph; - le_uint16 compCount; - TTGlyphID componentArray[ANY_NUMBER]; -}; - -struct LigatureSubstitutionSubtable : GlyphSubstitutionSubtable -{ - le_uint16 ligSetCount; - Offset ligSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LigatureSubstitution.h b/Build/source/libs/icu-xetex/layout/LigatureSubstitution.h deleted file mode 100644 index 2963b7c1444..00000000000 --- a/Build/source/libs/icu-xetex/layout/LigatureSubstitution.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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; -}; - -enum LigatureSubstitutionFlags -{ - lsfSetComponent = 0x8000, - lsfDontAdvance = 0x4000, - lsfActionOffsetMask = 0x3FFF -}; - -struct LigatureSubstitutionStateEntry : StateEntry -{ -}; - -typedef le_uint32 LigatureActionEntry; - -enum LigatureActionFlags -{ - lafLast = 0x80000000, - lafStore = 0x40000000, - lafComponentOffsetMask = 0x3FFFFFFF -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LookupProcessor.cpp b/Build/source/libs/icu-xetex/layout/LookupProcessor.cpp deleted file mode 100644 index 6f26a13bedb..00000000000 --- a/Build/source/libs/icu-xetex/layout/LookupProcessor.cpp +++ /dev/null @@ -1,271 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "OpenTypeUtilities.h" -#include "LEFontInstance.h" -#include "OpenTypeTables.h" -#include "Features.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 LookupTable *lookupTable, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - 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) { - const LookupSubtable *lookupSubtable = lookupTable->getLookupSubtable(subtable); - - delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance); - - if (delta > 0) { - return 1; - } - - glyphIterator->setCurrStreamPosition(startPosition); - } - - return 1; -} - -le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, - le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEFontInstance *fontInstance) const -{ - le_int32 glyphCount = glyphStorage.getGlyphCount(); - - if (lookupSelectArray == NULL) { - return glyphCount; - } - - GlyphIterator glyphIterator(glyphStorage, glyphPositionAdjustments, - rightToLeft, 0, 0, glyphDefinitionTableHeader); - le_int32 newGlyphCount = glyphCount; - - for (le_uint16 order = 0; order < lookupOrderCount; order += 1) { - le_uint16 lookup = lookupOrderArray[order]; - FeatureMask selectMask = lookupSelectArray[lookup]; - - if (selectMask != 0) { - const LookupTable *lookupTable = lookupListTable->getLookupTable(lookup); - le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags); - - glyphIterator.reset(lookupFlags, selectMask); - - while (glyphIterator.findFeatureTag()) { - applyLookupTable(lookupTable, &glyphIterator, fontInstance); - } - - newGlyphCount = glyphIterator.applyInsertions(); - } - } - - return newGlyphCount; -} - -le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, - const LEFontInstance *fontInstance) const -{ - const LookupTable *lookupTable = lookupListTable->getLookupTable(lookupTableIndex); - le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags); - GlyphIterator tempIterator(*glyphIterator, lookupFlags); - le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance); - - return delta; -} - -le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order) -{ - le_uint16 lookupCount = featureTable? SWAPW(featureTable->lookupCount) : 0; - le_int32 store = order; - - for (le_uint16 lookup = 0; lookup < lookupCount; lookup += 1) { - le_uint16 lookupListIndex = SWAPW(featureTable->lookupListIndexArray[lookup]); - - lookupSelectArray[lookupListIndex] |= featureMask; - lookupOrderArray[store++] = lookupListIndex; - } - - return store - order; -} - -LookupProcessor::LookupProcessor(const char *baseAddress, - Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, - LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures) - : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), - lookupOrderArray(NULL), lookupOrderCount(0) -{ - const ScriptListTable *scriptListTable = NULL; - const LangSysTable *langSysTable = NULL; - le_uint16 featureCount = 0; - le_uint16 lookupListCount = 0; - le_uint16 requiredFeatureIndex; - - if (scriptListOffset != 0) { - scriptListTable = (const ScriptListTable *) (baseAddress + scriptListOffset); - langSysTable = scriptListTable->findLanguage(scriptTag, languageTag); - - if (langSysTable != 0) { - featureCount = SWAPW(langSysTable->featureCount); - } - } - - if (featureListOffset != 0) { - featureListTable = (const FeatureListTable *) (baseAddress + featureListOffset); - } - - if (lookupListOffset != 0) { - lookupListTable = (const LookupListTable *) (baseAddress + lookupListOffset); - lookupListCount = SWAPW(lookupListTable->lookupCount); - } - - if (langSysTable == NULL || featureListTable == NULL || lookupListTable == NULL || - featureCount == 0 || lookupListCount == 0) { - return; - } - - requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex); - - lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount); - - for (int i = 0; i < lookupListCount; i += 1) { - lookupSelectArray[i] = 0; - } - - le_int32 count, order = 0; - le_int32 featureReferences = 0; - const FeatureTable *featureTable = NULL; - LETag featureTag; - - const FeatureTable *requiredFeatureTable = NULL; - 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. - for (le_int32 feature = 0; feature < featureCount; feature += 1) { - le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); - - featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); - featureReferences += SWAPW(featureTable->lookupCount); - } - - if (requiredFeatureIndex != 0xFFFF) { - requiredFeatureTable = featureListTable->getFeatureTable(requiredFeatureIndex, &requiredFeatureTag); - featureReferences += SWAPW(featureTable->lookupCount); - } - - lookupOrderArray = LE_NEW_ARRAY(le_uint16, 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); - } - - 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) { - le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); - - // 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(featureIndex, &featureTag); - - if (featureTag == fm.tag) { - count += selectLookups(featureTable, fm.mask, order + count); - } - } - - if (count > 1) { - OpenTypeUtilities::sort(&lookupOrderArray[order], count); - } - - order += count; - } else { - for (le_uint16 feature = 0; feature < featureCount; feature += 1) { - le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); - - // 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(featureIndex, &featureTag); - - if (featureTag == fm.tag) { - order += selectLookups(featureTable, fm.mask, order); - } - } - } - } - - 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() -{ -} - -LookupProcessor::~LookupProcessor() -{ - LE_DELETE_ARRAY(lookupOrderArray); - LE_DELETE_ARRAY(lookupSelectArray); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/LookupProcessor.h b/Build/source/libs/icu-xetex/layout/LookupProcessor.h deleted file mode 100644 index bc05ae63b79..00000000000 --- a/Build/source/libs/icu-xetex/layout/LookupProcessor.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved - * - */ - -#ifndef __LOOKUPPROCESSOR_H -#define __LOOKUPPROCESSOR_H - -/** - * \file - * \internal - */ - -#include "LETypes.h" -#include "LEFontInstance.h" -#include "OpenTypeTables.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 GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const; - - le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - - le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - - virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 subtableType, - GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const = 0; - - virtual ~LookupProcessor(); - -protected: - LookupProcessor(const char *baseAddress, - Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, - LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures); - - LookupProcessor(); - - le_int32 selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order); - - const LookupListTable *lookupListTable; - const FeatureListTable *featureListTable; - - FeatureMask *lookupSelectArray; - - le_uint16 *lookupOrderArray; - le_uint32 lookupOrderCount; - -private: - - LookupProcessor(const LookupProcessor &other); // forbid copying of this class - LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/LookupTables.cpp b/Build/source/libs/icu-xetex/layout/LookupTables.cpp deleted file mode 100644 index 9766a8133cc..00000000000 --- a/Build/source/libs/icu-xetex/layout/LookupTables.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * (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 LookupSegment *segments, LEGlyphID glyph) const -{ - le_int16 unity = SWAPW(unitSize); - le_int16 probe = SWAPW(searchRange); - le_int16 extra = SWAPW(rangeShift); - TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph); - const LookupSegment *entry = segments; - const LookupSegment *trial = (const LookupSegment *) ((char *) entry + extra); - - if (SWAPW(trial->lastGlyph) <= ttGlyph) { - entry = trial; - } - - while (probe > unity) { - probe >>= 1; - trial = (const LookupSegment *) ((char *) entry + probe); - - if (SWAPW(trial->lastGlyph) <= ttGlyph) { - entry = trial; - } - } - - if (SWAPW(entry->firstGlyph) <= ttGlyph) { - return entry; - } - - return NULL; -} - -const LookupSingle *BinarySearchLookupTable::lookupSingle(const LookupSingle *entries, LEGlyphID glyph) const -{ - le_int16 unity = SWAPW(unitSize); - le_int16 probe = SWAPW(searchRange); - le_int16 extra = SWAPW(rangeShift); - TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph); - const LookupSingle *entry = entries; - const LookupSingle *trial = (const LookupSingle *) ((char *) entry + extra); - - if (SWAPW(trial->glyph) <= ttGlyph) { - entry = trial; - } - - while (probe > unity) { - probe >>= 1; - trial = (const LookupSingle *) ((char *) entry + probe); - - if (SWAPW(trial->glyph) <= ttGlyph) { - entry = trial; - } - } - - if (SWAPW(entry->glyph) == ttGlyph) { - return entry; - } - - return NULL; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/LookupTables.h b/Build/source/libs/icu-xetex/layout/LookupTables.h deleted file mode 100644 index 5fa849940ca..00000000000 --- a/Build/source/libs/icu-xetex/layout/LookupTables.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __LOOKUPTABLES_H -#define __LOOKUPTABLES_H - -/** - * \file - * \internal - */ - -#include "LETypes.h" -#include "LayoutTables.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 LookupSegment *segments, LEGlyphID glyph) const; - - const LookupSingle *lookupSingle(const LookupSingle *entries, LEGlyphID glyph) const; -}; - -struct SimpleArrayLookupTable : LookupTable -{ - LookupValue valueArray[ANY_NUMBER]; -}; - -struct SegmentSingleLookupTable : BinarySearchLookupTable -{ - LookupSegment segments[ANY_NUMBER]; -}; - -struct SegmentArrayLookupTable : BinarySearchLookupTable -{ - LookupSegment segments[ANY_NUMBER]; -}; - -struct SingleTableLookupTable : BinarySearchLookupTable -{ - LookupSingle entries[ANY_NUMBER]; -}; - -struct TrimmedArrayLookupTable : LookupTable -{ - TTGlyphID firstGlyph; - TTGlyphID glyphCount; - LookupValue valueArray[ANY_NUMBER]; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/Lookups.cpp b/Build/source/libs/icu-xetex/layout/Lookups.cpp deleted file mode 100644 index 67f62952e9c..00000000000 --- a/Build/source/libs/icu-xetex/layout/Lookups.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * (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 LookupTable *LookupListTable::getLookupTable(le_uint16 lookupTableIndex) const -{ - if (lookupTableIndex >= SWAPW(lookupCount)) { - return 0; - } - - Offset lookupTableOffset = lookupTableOffsetArray[lookupTableIndex]; - - return (const LookupTable *) ((char *) this + SWAPW(lookupTableOffset)); -} - -const LookupSubtable *LookupTable::getLookupSubtable(le_uint16 subtableIndex) const -{ - if (subtableIndex >= SWAPW(subTableCount)) { - return 0; - } - - Offset subtableOffset = subTableOffsetArray[subtableIndex]; - - return (const LookupSubtable *) ((char *) this + SWAPW(subtableOffset)); -} - -le_int32 LookupSubtable::getGlyphCoverage(Offset tableOffset, LEGlyphID glyphID) const -{ - const CoverageTable *coverageTable = (const CoverageTable *) ((char *) this + SWAPW(tableOffset)); - - return coverageTable->getGlyphCoverage(glyphID); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/Lookups.h b/Build/source/libs/icu-xetex/layout/Lookups.h deleted file mode 100644 index 2316b573b81..00000000000 --- a/Build/source/libs/icu-xetex/layout/Lookups.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID) const; - - le_int32 getGlyphCoverage(Offset tableOffset, LEGlyphID glyphID) const; -}; - -struct LookupTable -{ - le_uint16 lookupType; - le_uint16 lookupFlags; - le_uint16 subTableCount; - Offset subTableOffsetArray[ANY_NUMBER]; - - const LookupSubtable *getLookupSubtable(le_uint16 subtableIndex) const; -}; - -struct LookupListTable -{ - le_uint16 lookupCount; - Offset lookupTableOffsetArray[ANY_NUMBER]; - - const LookupTable *getLookupTable(le_uint16 lookupTableIndex) const; -}; - -inline le_int32 LookupSubtable::getGlyphCoverage(LEGlyphID glyphID) const -{ - return getGlyphCoverage(coverageTableOffset, glyphID); -} - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/MPreFixups.cpp b/Build/source/libs/icu-xetex/layout/MPreFixups.cpp deleted file mode 100644 index 75791eed02c..00000000000 --- a/Build/source/libs/icu-xetex/layout/MPreFixups.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 2002-2004 - 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) -{ - 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); - 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 diff --git a/Build/source/libs/icu-xetex/layout/MPreFixups.h b/Build/source/libs/icu-xetex/layout/MPreFixups.h deleted file mode 100644 index 6053c088d29..00000000000 --- a/Build/source/libs/icu-xetex/layout/MPreFixups.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 2002-2004 - 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); - -private: - FixupData *fFixupData; - le_int32 fFixupCount; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/MakeShapingTypeData.pl b/Build/source/libs/icu-xetex/layout/MakeShapingTypeData.pl deleted file mode 100644 index e8e5a105082..00000000000 --- a/Build/source/libs/icu-xetex/layout/MakeShapingTypeData.pl +++ /dev/null @@ -1,90 +0,0 @@ -#! /usr/bin/perl - -# script to create ShapingTypeData.cpp from UCD file DerivedJoiningType.txt -# written by JK, 2007-01-16 -# This script may be distributed and used freely - -%types = ( - 'C' => 1, - 'D' => 2, - 'R' => 4, - 'T' => 5 -); - -@ranges = (); - -sub addRange -{ - my ($s, $e, $t) = @_; - - if ((scalar @ranges > 0) - && ($ranges[$#ranges]->[2] == $t) - && ($ranges[$#ranges]->[1] == $s - 1)) { - $ranges[$#ranges]->[1] = $e; - return; - } - - push @ranges, [ $s, $e, $t ]; -} - -# read the DerivedJoiningType.txt file and remember all the ranges -while (<>) { - if (m/^([0-9A-F]{4})\s+; ([CDRT]) \#/) { - # single codepoint - $start = hex $1; - $end = $start; - $type = $types{$2}; - addRange($start, $end, $type); - next; - } - if (m/^([0-9A-F]{4})\.\.([0-9A-F]{4})\s+; ([CDRT]) \#/) { - # range of codes - $start = hex $1; - $end = hex $2; - $type = $types{$3}; - addRange($start, $end, $type); - next; - } -} - -# write the ShapingTypeData.cpp file - -$date = `date +"%F %T %Z"`; -print <<__EOT__; -/* - * - * (C) Copyright SIL International. 2007-2008. - * (C) Copyright IBM Corp. 1998-2005. - * Based on code distributed with ICU 3.6 - * and the Unicode Character Database, version 5.1.0d10 - * - * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS - * YOU REALLY KNOW WHAT YOU'RE DOING. - * - * Generated on: $date - */ - -#include "LETypes.h" -#include "ArabicShaping.h" - -U_NAMESPACE_BEGIN - -const le_uint8 ArabicShaping::shapingTypeTable[] = { -__EOT__ - -printf " 0x%02X, 0x%02X, /* classFormat */\n", 0, 2; -printf " 0x%02X, 0x%02X, /* classRangeCount */\n", - (scalar @ranges) / 256, (scalar @ranges) % 256; -print join(",\n", map { - sprintf " 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X", - $_->[0] / 256, $_->[0] % 256, - $_->[1] / 256, $_->[1] % 256, - $_->[2] / 256, $_->[2] % 256, - } sort { $a->[0] <=> $b->[0] } @ranges); - -print <<__EOT__; - -}; - -U_NAMESPACE_END -__EOT__ diff --git a/Build/source/libs/icu-xetex/layout/Makefile.in b/Build/source/libs/icu-xetex/layout/Makefile.in deleted file mode 100644 index 5e9ec49819d..00000000000 --- a/Build/source/libs/icu-xetex/layout/Makefile.in +++ /dev/null @@ -1,236 +0,0 @@ -#****************************************************************************** -# -# Copyright (C) 1999-2007, International Business Machines -# Corporation and others. All Rights Reserved. -# -#****************************************************************************** -## Makefile.in for ICU - layout - -## Source directory information -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ - -top_builddir = .. - -## All the flags and other definitions are included here. -include $(top_builddir)/icudefs.mk - -## Build directory information -subdir = layout - -## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB) - -## Target information - -TARGET_STUBNAME=$(LAYOUT_STUBNAME) - -ifneq ($(ENABLE_STATIC),) -TARGET = $(LIBDIR)/$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A) -endif - -ifneq ($(ENABLE_SHARED),) -SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) - -ifeq ($(ENABLE_SO_VERSION_DATA),1) -SO_VERSION_DATA = layout.res -endif - -ifeq ($(OS390BATCH),1) -BATCH_TARGET = $(BATCH_LAYOUT_TARGET) -BATCH_LIBS = $(BATCH_LIBICUUC) -lm -endif # OS390BATCH - -endif # ENABLE_SHARED - -ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET) - -DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) -DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) -DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -CFLAGS += $(LIBCFLAGS) -CXXFLAGS += $(LIBCXXFLAGS) - -ifneq ($(top_builddir),$(top_srcdir)) -CPPFLAGS += -I$(top_builddir)/common -endif -CPPFLAGS += -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)/common -I$(srcdir)/unicode $(LIBCPPFLAGS) -DEFS += -DU_LAYOUT_IMPLEMENTATION -LDFLAGS += $(LDFLAGSICULE) -LIBS = $(LIBICUUC) $(DEFAULT_LIBS) - -OBJECTS = LEFontInstance.o \ -OpenTypeLayoutEngine.o \ -ThaiLayoutEngine.o \ -ThaiShaping.o \ -ThaiStateTables.o \ -ArabicLayoutEngine.o \ -GXLayoutEngine.o \ -HanLayoutEngine.o \ -IndicLayoutEngine.o \ -LayoutEngine.o \ -ContextualGlyphSubstProc.o \ -IndicRearrangementProcessor.o \ -LigatureSubstProc.o \ -LookupTables.o \ -MorphTables.o \ -NonContextualGlyphSubstProc.o \ -SegmentArrayProcessor.o \ -SegmentSingleProcessor.o \ -SimpleArrayProcessor.o \ -SingleTableProcessor.o \ -StateTableProcessor.o \ -SubtableProcessor.o \ -TrimmedArrayProcessor.o \ -AlternateSubstSubtables.o \ -AnchorTables.o \ -ArabicShaping.o \ -CanonData.o \ -CanonShaping.o \ -ClassDefinitionTables.o \ -ContextualSubstSubtables.o \ -CoverageTables.o \ -CursiveAttachmentSubtables.o \ -DeviceTables.o \ -ExtensionSubtables.o \ -Features.o \ -GDEFMarkFilter.o \ -GlyphDefinitionTables.o \ -GlyphIterator.o \ -GlyphLookupTables.o \ -GlyphPosnLookupProc.o \ -GlyphPositionAdjustments.o \ -GlyphPositioningTables.o \ -GlyphSubstLookupProc.o \ -GlyphSubstitutionTables.o \ -IndicClassTables.o \ -IndicReordering.o \ -LEInsertionList.o \ -LEGlyphStorage.o \ -LigatureSubstSubtables.o \ -LookupProcessor.o \ -Lookups.o \ -MarkArrays.o \ -MarkToBasePosnSubtables.o \ -MarkToLigaturePosnSubtables.o \ -MarkToMarkPosnSubtables.o \ -MirroredCharData.o \ -MPreFixups.o \ -MultipleSubstSubtables.o \ -OpenTypeUtilities.o \ -PairPositioningSubtables.o \ -ScriptAndLanguage.o \ -ScriptAndLanguageTags.o \ -ShapingTypeData.o \ -SinglePositioningSubtables.o \ -SingleSubstitutionSubtables.o \ -SubstitutionLookups.o \ -ValueRecords.o \ -KhmerLayoutEngine.o \ -KhmerReordering.o \ -TibetanLayoutEngine.o \ -TibetanReordering.o \ -HangulLayoutEngine.o \ -KernTable.o \ -loengine.o - -## Header files to install -HEADERS= $(srcdir)/LayoutEngine.h $(srcdir)/LE*.h $(srcdir)/loengine.h - -STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) - -DEPS = $(OBJECTS:.o=.d) - --include Makefile.local - -## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local install-library install-headers dist \ -dist-local check check-local - -## Clear suffix list -.SUFFIXES : - -## List of standard targets -all: all-local -install: install-local -clean: clean-local -distclean : distclean-local -dist: dist-local -check: all check-local - -all-local: $(ALL_TARGETS) - -install-local: install-headers install-library - -install-library: all-local - $(MKINSTALLDIRS) $(DESTDIR)$(libdir) -ifneq ($(ENABLE_STATIC),) - $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir) -endif -ifneq ($(ENABLE_SHARED),) - $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir) -ifneq ($(FINAL_SO_TARGET),$(SO_TARGET)) - cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET)) -ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET)) - cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET)) -endif -endif -ifneq ($(IMPORT_LIB_EXT),) - $(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir) -ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB)) - cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(IMPORT_LIB)) -endif -ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB)) - cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(MIDDLE_IMPORT_LIB)) -endif -endif -endif - -install-headers: - $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout - @for file in $(HEADERS); do \ - echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout"; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout || exit; \ - done - -dist-local: - -clean-local: - test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) - $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) - -distclean-local: clean-local - $(RMV) Makefile - -check-local: - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -ifneq ($(ENABLE_STATIC),) -$(TARGET): $(STATIC_OBJECTS) - $(AR) $(ARFLAGS) $(AR_OUTOPT)$@ $^ - $(RANLIB) $@ -endif - -ifneq ($(ENABLE_SHARED),) -$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) - $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) - -ifeq ($(OS390BATCH),1) -$(BATCH_TARGET):$(OBJECTS) - $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) -endif # OS390BATCH -endif # ENABLE_SHARED - -ifeq (,$(MAKECMDGOALS)) --include $(DEPS) -else -ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) --include $(DEPS) -endif -endif - diff --git a/Build/source/libs/icu-xetex/layout/MarkArrays.cpp b/Build/source/libs/icu-xetex/layout/MarkArrays.cpp deleted file mode 100644 index 47a06251e6d..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkArrays.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance, - LEPoint &anchor) const -{ - le_int32 markClass = -1; - - if (coverageIndex >= 0) { - le_uint16 mCount = SWAPW(markCount); - - if (coverageIndex < mCount) { - const MarkRecord *markRecord = &markRecordArray[coverageIndex]; - Offset anchorTableOffset = SWAPW(markRecord->markAnchorTableOffset); - const AnchorTable *anchorTable = (AnchorTable *) ((char *) this + anchorTableOffset); - - anchorTable->getAnchor(glyphID, fontInstance, anchor); - markClass = SWAPW(markRecord->markClass); - } - - // XXXX If we get here, the table is mal-formed - } - - return markClass; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/MarkArrays.h b/Build/source/libs/icu-xetex/layout/MarkArrays.h deleted file mode 100644 index 66dca2ae688..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkArrays.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * (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(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance, - LEPoint &anchor) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.cpp b/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.cpp deleted file mode 100644 index 70ddf4788c8..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - * - * (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 "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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID markGlyph = glyphIterator->getCurrGlyphID(); - le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph); - - if (markCoverage < 0) { - // markGlyph isn't a covered mark glyph - return 0; - } - - LEPoint markAnchor; - const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset)); - le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor); - 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 base glyph before a previous ligature... - GlyphIterator baseIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreLigatures*/)); - LEGlyphID baseGlyph = findBaseGlyph(&baseIterator); - le_int32 baseCoverage = getBaseCoverage((LEGlyphID) baseGlyph); - const BaseArray *baseArray = (const BaseArray *) ((char *) this + SWAPW(baseArrayOffset)); - 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; - } - - const BaseRecord *baseRecord = &baseArray->baseRecordArray[baseCoverage * mcCount]; - Offset anchorTableOffset = SWAPW(baseRecord->baseAnchorTableOffsetArray[markClass]); - const AnchorTable *anchorTable = (const AnchorTable *) ((char *) baseArray + anchorTableOffset); - LEPoint baseAnchor, markAdvance, pixels; - - if (anchorTableOffset == 0) { - // this means the table is mal-formed... - glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition()); - return 0; - } - - anchorTable->getAnchor(baseGlyph, fontInstance, baseAnchor); - - fontInstance->getGlyphAdvance(markGlyph, pixels); - fontInstance->pixelsToUnits(pixels, markAdvance); - - float anchorDiffX = baseAnchor.fX - markAnchor.fX; - float anchorDiffY = baseAnchor.fY - markAnchor.fY; - - 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 diff --git a/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.h b/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.h deleted file mode 100644 index aa7a0a1262c..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToBasePosnSubtables.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - LEGlyphID findBaseGlyph(GlyphIterator *glyphIterator) const; -}; - -struct BaseRecord -{ - Offset baseAnchorTableOffsetArray[ANY_NUMBER]; -}; - -struct BaseArray -{ - le_int16 baseRecordCount; - BaseRecord baseRecordArray[ANY_NUMBER]; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.cpp b/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.cpp deleted file mode 100644 index e247e4e5892..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID markGlyph = glyphIterator->getCurrGlyphID(); - le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph); - - if (markCoverage < 0) { - // markGlyph isn't a covered mark glyph - return 0; - } - - LEPoint markAnchor; - const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset)); - le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor); - 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((LEGlyphID) ligatureGlyph); - const LigatureArray *ligatureArray = (const LigatureArray *) ((char *) this + SWAPW(baseArrayOffset)); - 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]); - const LigatureAttachTable *ligatureAttachTable = (const LigatureAttachTable *) ((char *) ligatureArray + ligatureAttachOffset); - 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; - } - - const ComponentRecord *componentRecord = &ligatureAttachTable->componentRecordArray[component * mcCount]; - Offset anchorTableOffset = SWAPW(componentRecord->ligatureAnchorTableOffsetArray[markClass]); - const AnchorTable *anchorTable = (const AnchorTable *) ((char *) ligatureAttachTable + anchorTableOffset); - LEPoint ligatureAnchor, markAdvance, pixels; - - anchorTable->getAnchor(ligatureGlyph, fontInstance, ligatureAnchor); - - 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 diff --git a/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.h b/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.h deleted file mode 100644 index b8e34d1dd78..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToLigaturePosnSubtables.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - LEGlyphID findLigatureGlyph(GlyphIterator *glyphIterator) const; -}; - -struct ComponentRecord -{ - Offset ligatureAnchorTableOffsetArray[ANY_NUMBER]; -}; - -struct LigatureAttachTable -{ - le_uint16 componentCount; - ComponentRecord componentRecordArray[ANY_NUMBER]; -}; - -struct LigatureArray -{ - le_uint16 ligatureCount; - Offset ligatureAttachTableOffsetArray[ANY_NUMBER]; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.cpp b/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.cpp deleted file mode 100644 index 3f571f5e39c..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID markGlyph = glyphIterator->getCurrGlyphID(); - le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph); - - if (markCoverage < 0) { - // markGlyph isn't a covered mark glyph - return 0; - } - - LEPoint markAnchor; - const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset)); - le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor); - 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((LEGlyphID) mark2Glyph); - const Mark2Array *mark2Array = (const Mark2Array *) ((char *) this + SWAPW(baseArrayOffset)); - 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; - } - - const Mark2Record *mark2Record = &mark2Array->mark2RecordArray[mark2Coverage * mcCount]; - Offset anchorTableOffset = SWAPW(mark2Record->mark2AnchorTableOffsetArray[markClass]); - const AnchorTable *anchorTable = (const AnchorTable *) ((char *) mark2Array + anchorTableOffset); - LEPoint mark2Anchor, markAdvance, pixels; - - if (anchorTableOffset == 0) { - // this seems to mean that the marks don't attach... - return 0; - } - - anchorTable->getAnchor(mark2Glyph, fontInstance, mark2Anchor); - - fontInstance->getGlyphAdvance(markGlyph, pixels); - fontInstance->pixelsToUnits(pixels, markAdvance); - - float anchorDiffX = mark2Anchor.fX - markAnchor.fX; - float anchorDiffY = mark2Anchor.fY - markAnchor.fY; - - 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 diff --git a/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.h b/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.h deleted file mode 100644 index 746ace2946d..00000000000 --- a/Build/source/libs/icu-xetex/layout/MarkToMarkPosnSubtables.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - LEGlyphID findMark2Glyph(GlyphIterator *glyphIterator) const; -}; - -struct Mark2Record -{ - Offset mark2AnchorTableOffsetArray[ANY_NUMBER]; -}; - -struct Mark2Array -{ - le_uint16 mark2RecordCount; - Mark2Record mark2RecordArray[ANY_NUMBER]; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/MirroredCharData.cpp b/Build/source/libs/icu-xetex/layout/MirroredCharData.cpp deleted file mode 100644 index b813371708f..00000000000 --- a/Build/source/libs/icu-xetex/layout/MirroredCharData.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - * - * (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 diff --git a/Build/source/libs/icu-xetex/layout/MorphStateTables.h b/Build/source/libs/icu-xetex/layout/MorphStateTables.h deleted file mode 100644 index a2e0b00b7fc..00000000000 --- a/Build/source/libs/icu-xetex/layout/MorphStateTables.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/MorphTables.cpp b/Build/source/libs/icu-xetex/layout/MorphTables.cpp deleted file mode 100644 index 9272cc3af3b..00000000000 --- a/Build/source/libs/icu-xetex/layout/MorphTables.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * %W% %W% - * - * (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(LEGlyphStorage &glyphStorage) const -{ - const ChainHeader *chainHeader = chains; - le_uint32 chainCount = SWAPL(this->nChains); - le_uint32 chain; - - for (chain = 0; chain < chainCount; chain += 1) { - FeatureFlags defaultFlags = SWAPL(chainHeader->defaultFlags); - le_uint32 chainLength = SWAPL(chainHeader->chainLength); - le_int16 nFeatureEntries = SWAPW(chainHeader->nFeatureEntries); - le_int16 nSubtables = SWAPW(chainHeader->nSubtables); - const MorphSubtableHeader *subtableHeader = - (const MorphSubtableHeader *)&chainHeader->featureTable[nFeatureEntries]; - le_int16 subtable; - - for (subtable = 0; subtable < nSubtables; subtable += 1) { - le_int16 length = SWAPW(subtableHeader->length); - SubtableCoverage coverage = SWAPW(subtableHeader->coverage); - FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures); - - // should check coverage more carefully... - if ((coverage & scfVertical) == 0 && (subtableFeatures & defaultFlags) != 0) { - subtableHeader->process(glyphStorage); - } - - subtableHeader = (const MorphSubtableHeader *) ((char *)subtableHeader + length); - } - - chainHeader = (const ChainHeader *)((char *)chainHeader + chainLength); - } -} - -void MorphSubtableHeader::process(LEGlyphStorage &glyphStorage) const -{ - SubtableProcessor *processor = NULL; - - switch (SWAPW(coverage) & scfTypeMask) - { - case mstIndicRearrangement: - processor = new IndicRearrangementProcessor(this); - break; - - case mstContextualGlyphSubstitution: - processor = new ContextualGlyphSubstitutionProcessor(this); - break; - - case mstLigatureSubstitution: - processor = new LigatureSubstitutionProcessor(this); - break; - - case mstReservedUnused: - break; - - case mstNonContextualGlyphSubstitution: - processor = NonContextualGlyphSubstitutionProcessor::createInstance(this); - break; - - /* - case mstContextualGlyphInsertion: - processor = new ContextualGlyphInsertionProcessor(this); - break; - */ - - default: - break; - } - - if (processor != NULL) { - processor->process(glyphStorage); - delete processor; - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/MorphTables.h b/Build/source/libs/icu-xetex/layout/MorphTables.h deleted file mode 100644 index 8d198cf41fe..00000000000 --- a/Build/source/libs/icu-xetex/layout/MorphTables.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __MORPHTABLES_H -#define __MORPHTABLES_H - -/** - * \file - * \internal - */ - -#include "LETypes.h" -#include "LayoutTables.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]; -}; - -struct MorphTableHeader -{ - le_int32 version; - le_uint32 nChains; - ChainHeader chains[ANY_NUMBER]; - - void process(LEGlyphStorage &glyphStorage) const; -}; - -typedef le_int16 SubtableCoverage; - -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(LEGlyphStorage &glyphStorage) const; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.cpp b/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.cpp deleted file mode 100644 index 450bf35bc94..00000000000 --- a/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - 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)) { - return 0; - } - - le_int32 coverageIndex = getGlyphCoverage(glyph); - le_uint16 seqCount = SWAPW(sequenceCount); - - if (coverageIndex >= 0 && coverageIndex < seqCount) { - Offset sequenceTableOffset = SWAPW(sequenceTableOffsetArray[coverageIndex]); - const SequenceTable *sequenceTable = (const SequenceTable *) ((char *) this + sequenceTableOffset); - le_uint16 glyphCount = SWAPW(sequenceTable->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))) { - 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)) { - return 0; - } - } - } - - LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount); - 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 diff --git a/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.h b/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.h deleted file mode 100644 index e29963c5856..00000000000 --- a/Build/source/libs/icu-xetex/layout/MultipleSubstSubtables.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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]; -}; - -struct MultipleSubstitutionSubtable : GlyphSubstitutionSubtable -{ - le_uint16 sequenceCount; - Offset sequenceTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubst.h b/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubst.h deleted file mode 100644 index ef2543a1a87..00000000000 --- a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubst.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998-2003 - 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; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.cpp b/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.cpp deleted file mode 100644 index 69c065b4848..00000000000 --- a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : SubtableProcessor(morphSubtableHeader) -{ -} - -NonContextualGlyphSubstitutionProcessor::~NonContextualGlyphSubstitutionProcessor() -{ -} - -SubtableProcessor *NonContextualGlyphSubstitutionProcessor::createInstance(const MorphSubtableHeader *morphSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; - - switch (SWAPW(header->table.format)) - { - case ltfSimpleArray: - return new SimpleArrayProcessor(morphSubtableHeader); - - case ltfSegmentSingle: - return new SegmentSingleProcessor(morphSubtableHeader); - - case ltfSegmentArray: - return new SegmentArrayProcessor(morphSubtableHeader); - - case ltfSingleTable: - return new SingleTableProcessor(morphSubtableHeader); - - case ltfTrimmedArray: - return new TrimmedArrayProcessor(morphSubtableHeader); - - default: - return NULL; - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.h b/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.h deleted file mode 100644 index 4ce96cf3981..00000000000 --- a/Build/source/libs/icu-xetex/layout/NonContextualGlyphSubstProc.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * (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) = 0; - - static SubtableProcessor *createInstance(const MorphSubtableHeader *morphSubtableHeader); - -protected: - NonContextualGlyphSubstitutionProcessor(); - NonContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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 diff --git a/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.cpp deleted file mode 100644 index 027d7d7c292..00000000000 --- a/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.cpp +++ /dev/null @@ -1,394 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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" - -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 - -// 'dlig' not used at the moment -#define dligFeatureTag 0x646C6967 - -// 'palt' -#define paltFeatureTag 0x70616C74 - -#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 minimalFeatures (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask | loclFeatureMask) -#define ligaFeatures (ligaFeatureMask | cligFeatureMask | minimalFeatures) -#define kernFeatures (kernFeatureMask | paltFeatureMask | minimalFeatures) -#define kernAndLigaFeatures (ligaFeatures | kernFeatures) - -static const FeatureMap featureMap[] = -{ - {ccmpFeatureTag, ccmpFeatureMask}, - {ligaFeatureTag, ligaFeatureMask}, - {cligFeatureTag, cligFeatureMask}, - {kernFeatureTag, kernFeatureMask}, - {paltFeatureTag, paltFeatureMask}, - {markFeatureTag, markFeatureMask}, - {mkmkFeatureTag, mkmkFeatureMask}, - {loclFeatureTag, loclFeatureMask} -}; - -static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); - -OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) - : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureMask(minimalFeatures), - fFeatureMap(featureMap), fFeatureParamList(NULL), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE), - fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL) -{ - static const le_uint32 gdefTableTag = LE_GDEF_TABLE_TAG; - static const le_uint32 gposTableTag = LE_GPOS_TABLE_TAG; - const GlyphPositioningTableHeader *gposTable = (const GlyphPositioningTableHeader *) getFontTable(gposTableTag); - - // todo: switch to more flags and bitfield rather than list of feature tags? - switch (typoFlags & ~0x80000000L) { - case 0: break; // default - case 1: fFeatureMask = kernFeatures; break; - case 2: fFeatureMask = ligaFeatures; break; - case 3: fFeatureMask = kernAndLigaFeatures; break; - default: break; - } - - if (typoFlags & 0x80000000L) { - fSubstitutionFilter = new CharSubstitutionFilter(fontInstance); - } - - setScriptAndLanguageTags(); - - fGDEFTable = (const GlyphDefinitionTableHeader *) getFontTable(gdefTableTag); - -// JK patch, 2008-05-30 - see Sinhala bug report and LKLUG font -// if (gposTable != NULL && gposTable->coversScriptAndLanguage(fScriptTag, fLangSysTag)) { - if (gposTable != NULL && gposTable->coversScript(fScriptTag)) { - fGPOSTable = gposTable; - } -} - -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) - : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureOrder(FALSE), - fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL) -{ - setScriptAndLanguageTags(); -} - -OpenTypeLayoutEngine::~OpenTypeLayoutEngine() -{ - if (fTypoFlags & 0x80000000L) { - delete fSubstitutionFilter; - } - - reset(); -} - -LETag OpenTypeLayoutEngine::getScriptTag(le_int32 scriptCode) -{ - if (scriptCode < 0 || scriptCode >= scriptCodeCount) { - return 0xFFFFFFFF; - } - - return scriptTags[scriptCode]; -} - -LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode) -{ - if (languageCode < 0 || languageCode >= languageCodeCount) { - return 0xFFFFFFFF; - } - - return languageTags[languageCode]; -} - -void OpenTypeLayoutEngine::setScriptAndLanguageTags() -{ - fScriptTag = getScriptTag(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, (void *) fFeatureParamList, 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 != NULL) { - count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter, - fFeatureMap, fFeatureMapCount, fFeatureOrder); - } - - 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.adoptAuxDataArrays(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, fakeGlyphCount; - - 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) { - 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 { - 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) -{ - 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 != NULL) { - 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 - - fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, fFontInstance, - fFeatureMap, fFeatureMapCount, fFeatureOrder); - - 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); - 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 0 - // The nbsp translation was only here to make one - // broken font work. Not a good idea in general... - LEGlyphID nbsp = fFontInstance->mapCharToGlyph(0x00A0); - LEGlyphID space = fFontInstance->mapCharToGlyph(0x0020); -#endif - - 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 - } else if (glyph == nbsp) { - glyphStorage[g] = LE_SET_GLYPH(glyph, space); - #endif - } - } - } - -#if 0 - // Don't know why this is here... - LE_DELETE_ARRAY(fFeatureTags); - fFeatureTags = NULL; -#endif -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.h b/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.h deleted file mode 100644 index 961d0a1e6a8..00000000000 --- a/Build/source/libs/icu-xetex/layout/OpenTypeLayoutEngine.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#ifndef __OPENTYPELAYOUTENGINE_H -#define __OPENTYPELAYOUTENGINE_H - -#include "LETypes.h" -#include "LEGlyphFilter.h" -#include "LEFontInstance.h" -#include "LayoutEngine.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 requried 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @internal - */ - OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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. - * - * @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 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[]; - -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; - const le_int32 *fFeatureParamList; - - /** - * 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 - */ - const GlyphSubstitutionTableHeader *fGSUBTable; - - /** - * The address of the GDEF table. - * - * @internal - */ - const GlyphDefinitionTableHeader *fGDEFTable; - - /** - * The address of the GPOS table. - * - * @internal - */ - const 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 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); - - /** - * 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 paramters: - * @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 - diff --git a/Build/source/libs/icu-xetex/layout/OpenTypeTables.h b/Build/source/libs/icu-xetex/layout/OpenTypeTables.h deleted file mode 100644 index 5398d176e47..00000000000 --- a/Build/source/libs/icu-xetex/layout/OpenTypeTables.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#ifndef __OPENTYPETABLES_H -#define __OPENTYPETABLES_H - -/** - * \file - * \internal - */ - -#include "LETypes.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 diff --git a/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.cpp b/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.cpp deleted file mode 100644 index 29c38ddc104..00000000000 --- a/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2006 - 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 TagAndOffsetRecord *records, le_int32 recordCount) -{ - le_uint8 bit = highBit(recordCount); - le_int32 power = 1 << bit; - le_int32 extra = recordCount - power; - le_int32 probe = power; - le_int32 index = 0; - - if (SWAPT(records[extra].tag) <= tag) { - index = extra; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (SWAPT(records[index + probe].tag) <= tag) { - index += probe; - } - } - - if (SWAPT(records[index].tag) == tag) { - return SWAPW(records[index].offset); - } - - return 0; -} - -le_int32 OpenTypeUtilities::getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount) -{ - 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].firstGlyph) <= glyphID) { - range = extra; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (SWAPW(records[range + probe].firstGlyph) <= glyphID) { - range += probe; - } - } - - if (SWAPW(records[range].firstGlyph) <= glyphID && SWAPW(records[range].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 diff --git a/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.h b/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.h deleted file mode 100644 index 67a07c32a06..00000000000 --- a/Build/source/libs/icu-xetex/layout/OpenTypeUtilities.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * (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 TagAndOffsetRecord *records, le_int32 recordCount); - static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount); - 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 diff --git a/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.cpp b/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.cpp deleted file mode 100644 index fce69f87cf0..00000000000 --- a/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2006 - 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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - switch(SWAPW(subtableFormat)) - { - case 0: - return 0; - - case 1: - { - const PairPositioningFormat1Subtable *subtable = (const PairPositioningFormat1Subtable *) this; - - return subtable->process(glyphIterator, fontInstance); - } - - case 2: - { - const PairPositioningFormat2Subtable *subtable = (const PairPositioningFormat2Subtable *) this; - - return subtable->process(glyphIterator, fontInstance); - } - - default: - return 0; - } -} - -le_uint32 PairPositioningFormat1Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(firstGlyph); - GlyphIterator tempIterator(*glyphIterator); - - if (coverageIndex >= 0 && glyphIterator->next()) { - Offset pairSetTableOffset = SWAPW(pairSetTableOffsetArray[coverageIndex]); - PairSetTable *pairSetTable = (PairSetTable *) ((char *) this + pairSetTableOffset); - le_uint16 pairValueCount = SWAPW(pairSetTable->pairValueCount); - 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(); - const PairValueRecord *pairValueRecord = NULL; - - if (pairValueCount != 0) { - pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph), pairSetTable->pairValueRecordArray, pairValueCount, recordSize); - } - - if (pairValueRecord == NULL) { - return 0; - } - - if (valueFormat1 != 0) { - pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance); - } - - if (valueFormat2 != 0) { - const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &pairValueRecord->valueRecord1 + valueRecord1Size); - - valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, *glyphIterator, fontInstance); - } - - // back up glyphIterator so second glyph can be - // first glyph in the next pair - glyphIterator->prev(); - return 1; - } - - return 0; -} - -le_uint32 PairPositioningFormat2Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(firstGlyph); - GlyphIterator tempIterator(*glyphIterator); - - if (coverageIndex >= 0 && glyphIterator->next()) { - LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID(); - const ClassDefinitionTable *classDef1 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef1Offset)); - const ClassDefinitionTable *classDef2 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef2Offset)); - le_int32 class1 = classDef1->getGlyphClass(firstGlyph); - le_int32 class2 = classDef2->getGlyphClass(secondGlyph); - 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 Class1Record *class1Record = (const Class1Record *) ((char *) class1RecordArray + (class1RecordSize * class1)); - const Class2Record *class2Record = (const Class2Record *) ((char *) class1Record->class2RecordArray + (class2RecordSize * class2)); - - - if (valueFormat1 != 0) { - class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance); - } - - if (valueFormat2 != 0) { - const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &class2Record->valueRecord1 + valueRecord1Size); - - valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, *glyphIterator, fontInstance); - } - - // back up glyphIterator so second glyph can be - // first glyph in the next pair - glyphIterator->prev(); - return 1; - } - - return 0; -} - -const PairValueRecord *PairPositioningFormat1Subtable::findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, le_uint16 recordCount, le_uint16 recordSize) 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. - const PairValueRecord *record = records; - - for(le_int32 r = 0; r < recordCount; r += 1) { - if (SWAPW(record->secondGlyph) == glyphID) { - return record; - } - - record = (const PairValueRecord *) ((char *) record + recordSize); - } -#else - 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 NULL; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.h b/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.h deleted file mode 100644 index f017c33f65b..00000000000 --- a/Build/source/libs/icu-xetex/layout/PairPositioningSubtables.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * (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]; -}; - -struct PairPositioningSubtable : GlyphPositioningSubtable -{ - ValueFormat valueFormat1; - ValueFormat valueFormat2; - - le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct PairPositioningFormat1Subtable : PairPositioningSubtable -{ - le_uint16 pairSetCount; - Offset pairSetTableOffsetArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; - -private: - const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, - le_uint16 recordCount, le_uint16 recordSize) const; -}; - -// NOTE: ValueRecord has a variable size -struct Class2Record -{ - ValueRecord valueRecord1; -// ValueRecord valurRecord2; -}; - -struct Class1Record -{ - Class2Record class2RecordArray[ANY_NUMBER]; -}; - -struct PairPositioningFormat2Subtable : PairPositioningSubtable -{ - Offset classDef1Offset; - Offset classDef2Offset; - le_uint16 class1Count; - le_uint16 class2Count; - Class1Record class1RecordArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.cpp b/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.cpp deleted file mode 100644 index 126f5f2f078..00000000000 --- a/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "OpenTypeTables.h" -#include "OpenTypeUtilities.h" -#include "ScriptAndLanguage.h" -#include "LESwaps.h" - -U_NAMESPACE_BEGIN - -const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const -{ - le_uint16 count = SWAPW(langSysCount); - Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset); - - if (count > 0) { - Offset foundOffset = - OpenTypeUtilities::getTagOffset(languageTag, langSysRecordArray, count); - - if (foundOffset != 0) { - langSysTableOffset = foundOffset; - } - } - - if (langSysTableOffset != 0) { - return (const LangSysTable *) ((char *)this + langSysTableOffset); - } - - return NULL; -} - -const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const -{ - /* - * 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); - 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. - for(le_int32 s = 0; s < limit; s += 1) { - if (SWAPT(scriptRecordArray[s].tag) == scriptTag) { - scriptTableOffset = SWAPW(scriptRecordArray[s].offset); - break; - } - } - } else { - scriptTableOffset = OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count); - } - - if (scriptTableOffset != 0) { - return (const ScriptTable *) ((char *)this + scriptTableOffset); - } - - return NULL; -} - -const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const -{ - const ScriptTable *scriptTable = findScript(scriptTag); - - if (scriptTable == 0) { - return NULL; - } - - return scriptTable->findLanguage(languageTag, exactMatch); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.h b/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.h deleted file mode 100644 index 804dae9665e..00000000000 --- a/Build/source/libs/icu-xetex/layout/ScriptAndLanguage.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * (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]; -}; - -struct ScriptTable -{ - Offset defaultLangSysTableOffset; - le_uint16 langSysCount; - LangSysRecord langSysRecordArray[ANY_NUMBER]; - - const LangSysTable *findLanguage(LETag languageTag, le_bool exactMatch = FALSE) const; -}; - -typedef TagAndOffsetRecord ScriptRecord; - -struct ScriptListTable -{ - le_uint16 scriptCount; - ScriptRecord scriptRecordArray[ANY_NUMBER]; - - const ScriptTable *findScript(LETag scriptTag) const; - const LangSysTable *findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.cpp b/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.cpp deleted file mode 100644 index 500fb2528c8..00000000000 --- a/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008. 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/13/2008 05:37:32 PM HST - */ - -#include "LETypes.h" -#include "ScriptAndLanguageTags.h" -#include "OpenTypeLayoutEngine.h" - -U_NAMESPACE_BEGIN - -const LETag OpenTypeLayoutEngine::scriptTags[] = { - zyyyScriptTag, /* 'zyyy' (COMMON) */ - qaaiScriptTag, /* 'qaai' (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' (BATK) */ - blisScriptTag, /* 'blis' (BLIS) */ - brahScriptTag, /* 'brah' (BRAH) */ - chamScriptTag, /* 'cham' (CHAM) */ - cirtScriptTag, /* 'cirt' (CIRT) */ - cyrsScriptTag, /* 'cyrs' (CYRS) */ - egydScriptTag, /* 'egyd' (EGYD) */ - egyhScriptTag, /* 'egyh' (EGYH) */ - egypScriptTag, /* 'egyp' (EGYP) */ - geokScriptTag, /* 'geok' (GEOK) */ - hansScriptTag, /* 'hans' (HANS) */ - hantScriptTag, /* 'hant' (HANT) */ - hmngScriptTag, /* 'hmng' (HMNG) */ - hungScriptTag, /* 'hung' (HUNG) */ - indsScriptTag, /* 'inds' (INDS) */ - javaScriptTag, /* 'java' (JAVA) */ - kaliScriptTag, /* 'kali' (KALI) */ - latfScriptTag, /* 'latf' (LATF) */ - latgScriptTag, /* 'latg' (LATG) */ - lepcScriptTag, /* 'lepc' (LEPC) */ - linaScriptTag, /* 'lina' (LINA) */ - mandScriptTag, /* 'mand' (MAND) */ - mayaScriptTag, /* 'maya' (MAYA) */ - meroScriptTag, /* 'mero' (MERO) */ - nkooScriptTag, /* 'nko ' (NKO) */ - orkhScriptTag, /* 'orkh' (ORKH) */ - permScriptTag, /* 'perm' (PERM) */ - phagScriptTag, /* 'phag' (PHAGS_PA) */ - phnxScriptTag, /* 'phnx' (PHOENICIAN) */ - plrdScriptTag, /* 'plrd' (PLRD) */ - roroScriptTag, /* 'roro' (RORO) */ - saraScriptTag, /* 'sara' (SARA) */ - syreScriptTag, /* 'syre' (SYRE) */ - syrjScriptTag, /* 'syrj' (SYRJ) */ - syrnScriptTag, /* 'syrn' (SYRN) */ - tengScriptTag, /* 'teng' (TENG) */ - vaiiScriptTag, /* 'vai ' (VAII) */ - vispScriptTag, /* 'visp' (VISP) */ - xsuxScriptTag, /* 'xsux' (CUNEIFORM) */ - zxxxScriptTag, /* 'zxxx' (ZXXX) */ - zzzzScriptTag, /* 'zzzz' (UNKNOWN) */ - cariScriptTag, /* 'cari' (CARI) */ - jpanScriptTag, /* 'jpan' (JPAN) */ - lanaScriptTag, /* 'lana' (LANA) */ - lyciScriptTag, /* 'lyci' (LYCI) */ - lydiScriptTag, /* 'lydi' (LYDI) */ - olckScriptTag, /* 'olck' (OLCK) */ - rjngScriptTag, /* 'rjng' (RJNG) */ - saurScriptTag, /* 'saur' (SAUR) */ - sgnwScriptTag, /* 'sgnw' (SGNW) */ - sundScriptTag, /* 'sund' (SUND) */ - moonScriptTag, /* 'moon' (MOON) */ - mteiScriptTag /* 'mtei' (MTEI) */ -}; - -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 diff --git a/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.h b/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.h deleted file mode 100644 index 23372df32d2..00000000000 --- a/Build/source/libs/icu-xetex/layout/ScriptAndLanguageTags.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2008. 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/13/2008 05:37:32 PM HST - */ - -#ifndef __SCRIPTANDLANGUAGES_H -#define __SCRIPTANDLANGUAGES_H - -#include "LETypes.h" - -/** - * \file - * \internal - */ - -U_NAMESPACE_BEGIN - -const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */ -const LETag qaaiScriptTag = 0x71616169; /* 'qaai' (INHERITED) */ -const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */ -const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */ -const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */ -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 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 guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */ -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 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 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 runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */ -const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */ -const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */ -const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */ -const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */ -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' (BATK) */ -const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */ -const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAH) */ -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' (EGYP) */ -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' (JAVA) */ -const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KALI) */ -const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */ -const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */ -const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPC) */ -const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */ -const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MAND) */ -const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */ -const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MERO) */ -const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */ -const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (ORKH) */ -const LETag permScriptTag = 0x7065726D; /* 'perm' (PERM) */ -const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */ -const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */ -const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (PLRD) */ -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 ' (VAII) */ -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' (CARI) */ -const LETag jpanScriptTag = 0x6A70616E; /* 'jpan' (JPAN) */ -const LETag lanaScriptTag = 0x6C616E61; /* 'lana' (LANA) */ -const LETag lyciScriptTag = 0x6C796369; /* 'lyci' (LYCI) */ -const LETag lydiScriptTag = 0x6C796469; /* 'lydi' (LYDI) */ -const LETag olckScriptTag = 0x6F6C636B; /* 'olck' (OLCK) */ -const LETag rjngScriptTag = 0x726A6E67; /* 'rjng' (RJNG) */ -const LETag saurScriptTag = 0x73617572; /* 'saur' (SAUR) */ -const LETag sgnwScriptTag = 0x73676E77; /* 'sgnw' (SGNW) */ -const LETag sundScriptTag = 0x73756E64; /* 'sund' (SUND) */ -const LETag moonScriptTag = 0x6D6F6F6E; /* 'moon' (MOON) */ -const LETag mteiScriptTag = 0x6D746569; /* 'mtei' (MTEI) */ - -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 diff --git a/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.cpp b/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.cpp deleted file mode 100644 index b915cb9b92c..00000000000 --- a/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; - - segmentArrayLookupTable = (const SegmentArrayLookupTable *) &header->table; -} - -SegmentArrayProcessor::~SegmentArrayProcessor() -{ -} - -void SegmentArrayProcessor::process(LEGlyphStorage &glyphStorage) -{ - const LookupSegment *segments = segmentArrayLookupTable->segments; - le_int32 glyphCount = glyphStorage.getGlyphCount(); - le_int32 glyph; - - for (glyph = 0; glyph < glyphCount; glyph += 1) { - LEGlyphID thisGlyph = glyphStorage[glyph]; - const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segments, thisGlyph); - - if (lookupSegment != NULL) { - TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph); - le_int16 offset = SWAPW(lookupSegment->value); - - if (offset != 0) { - TTGlyphID *glyphArray = (TTGlyphID *) ((char *) subtableHeader + offset); - TTGlyphID newGlyph = SWAPW(glyphArray[LE_GET_GLYPH(thisGlyph) - firstGlyph]); - - glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); - } - } - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.h b/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.h deleted file mode 100644 index 7e2028c98b5..00000000000 --- a/Build/source/libs/icu-xetex/layout/SegmentArrayProcessor.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * (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); - - SegmentArrayProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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: - const SegmentArrayLookupTable *segmentArrayLookupTable; - -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.cpp b/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.cpp deleted file mode 100644 index 75e33eb01d2..00000000000 --- a/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; - - segmentSingleLookupTable = (const SegmentSingleLookupTable *) &header->table; -} - -SegmentSingleProcessor::~SegmentSingleProcessor() -{ -} - -void SegmentSingleProcessor::process(LEGlyphStorage &glyphStorage) -{ - const LookupSegment *segments = segmentSingleLookupTable->segments; - le_int32 glyphCount = glyphStorage.getGlyphCount(); - le_int32 glyph; - - for (glyph = 0; glyph < glyphCount; glyph += 1) { - LEGlyphID thisGlyph = glyphStorage[glyph]; - const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segments, thisGlyph); - - if (lookupSegment != NULL) { - TTGlyphID newGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value); - - glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); - } - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.h b/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.h deleted file mode 100644 index 64b2b72f162..00000000000 --- a/Build/source/libs/icu-xetex/layout/SegmentSingleProcessor.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * (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); - - SegmentSingleProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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: - const SegmentSingleLookupTable *segmentSingleLookupTable; - -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/ShapingTypeData.cpp b/Build/source/libs/icu-xetex/layout/ShapingTypeData.cpp deleted file mode 100644 index e45be45a199..00000000000 --- a/Build/source/libs/icu-xetex/layout/ShapingTypeData.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - * - * (C) Copyright SIL International. 2007-2008. - * (C) Copyright IBM Corp. 1998-2005. - * Based on code distributed with ICU 3.6 - * and the Unicode Character Database, version 5.1.0d10 - * - * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS - * YOU REALLY KNOW WHAT YOU'RE DOING. - * - * Generated on: 2008-02-21 12:20:49 GMT - - */ - -#include "LETypes.h" -#include "ArabicShaping.h" - -U_NAMESPACE_BEGIN - -const le_uint8 ArabicShaping::shapingTypeTable[] = { - 0x00, 0x02, /* classFormat */ - 0x00, 0xD6, /* classRangeCount */ - 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, 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 -}; - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.cpp b/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.cpp deleted file mode 100644 index d677f545f6b..00000000000 --- a/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; - - simpleArrayLookupTable = (const SimpleArrayLookupTable *) &header->table; -} - -SimpleArrayProcessor::~SimpleArrayProcessor() -{ -} - -void SimpleArrayProcessor::process(LEGlyphStorage &glyphStorage) -{ - le_int32 glyphCount = glyphStorage.getGlyphCount(); - le_int32 glyph; - - for (glyph = 0; glyph < glyphCount; glyph += 1) { - LEGlyphID thisGlyph = glyphStorage[glyph]; - if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) { - TTGlyphID newGlyph = SWAPW(simpleArrayLookupTable->valueArray[LE_GET_GLYPH(thisGlyph)]); - - glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); - } - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.h b/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.h deleted file mode 100644 index afee79c4971..00000000000 --- a/Build/source/libs/icu-xetex/layout/SimpleArrayProcessor.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * (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); - - SimpleArrayProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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: - const SimpleArrayLookupTable *simpleArrayLookupTable; - -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.cpp b/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.cpp deleted file mode 100644 index e8759d21a19..00000000000 --- a/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - switch(SWAPW(subtableFormat)) - { - case 0: - return 0; - - case 1: - { - const SinglePositioningFormat1Subtable *subtable = (const SinglePositioningFormat1Subtable *) this; - - return subtable->process(glyphIterator, fontInstance); - } - - case 2: - { - const SinglePositioningFormat2Subtable *subtable = (const SinglePositioningFormat2Subtable *) this; - - return subtable->process(glyphIterator, fontInstance); - } - - default: - return 0; - } -} - -le_uint32 SinglePositioningFormat1Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - valueRecord.adjustPosition(SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance); - - return 1; - } - - return 0; -} - -le_uint32 SinglePositioningFormat2Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int16 coverageIndex = (le_int16) getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance); - - return 1; - } - - return 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.h b/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.h deleted file mode 100644 index ec2ffcc9269..00000000000 --- a/Build/source/libs/icu-xetex/layout/SinglePositioningSubtables.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct SinglePositioningFormat1Subtable : SinglePositioningSubtable -{ - ValueFormat valueFormat; - ValueRecord valueRecord; - - le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -struct SinglePositioningFormat2Subtable : SinglePositioningSubtable -{ - ValueFormat valueFormat; - le_uint16 valueCount; - ValueRecord valueRecordArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.cpp b/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.cpp deleted file mode 100644 index ae72ddfd04f..00000000000 --- a/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - switch(SWAPW(subtableFormat)) - { - case 0: - return 0; - - case 1: - { - const SingleSubstitutionFormat1Subtable *subtable = (const SingleSubstitutionFormat1Subtable *) this; - - return subtable->process(glyphIterator, filter); - } - - case 2: - { - const SingleSubstitutionFormat2Subtable *subtable = (const SingleSubstitutionFormat2Subtable *) this; - - return subtable->process(glyphIterator, filter); - } - - default: - return 0; - } -} - -le_uint32 SingleSubstitutionFormat1Subtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - TTGlyphID substitute = ((TTGlyphID) LE_GET_GLYPH(glyph)) + SWAPW(deltaGlyphID); - - if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) { - glyphIterator->setCurrGlyphID(substitute); - } - - return 1; - } - - return 0; -} - -le_uint32 SingleSubstitutionFormat2Subtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const -{ - LEGlyphID glyph = glyphIterator->getCurrGlyphID(); - le_int32 coverageIndex = getGlyphCoverage(glyph); - - if (coverageIndex >= 0) { - TTGlyphID substitute = SWAPW(substituteArray[coverageIndex]); - - if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) { - glyphIterator->setCurrGlyphID(substitute); - } - - return 1; - } - - return 0; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.h b/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.h deleted file mode 100644 index dfd2dad8809..00000000000 --- a/Build/source/libs/icu-xetex/layout/SingleSubstitutionSubtables.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * (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(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -struct SingleSubstitutionFormat1Subtable : SingleSubstitutionSubtable -{ - le_int16 deltaGlyphID; - - le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -struct SingleSubstitutionFormat2Subtable : SingleSubstitutionSubtable -{ - le_uint16 glyphCount; - TTGlyphID substituteArray[ANY_NUMBER]; - - le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; -}; - -U_NAMESPACE_END -#endif - - diff --git a/Build/source/libs/icu-xetex/layout/SingleTableProcessor.cpp b/Build/source/libs/icu-xetex/layout/SingleTableProcessor.cpp deleted file mode 100644 index 94a4edd7571..00000000000 --- a/Build/source/libs/icu-xetex/layout/SingleTableProcessor.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *moprhSubtableHeader) - : NonContextualGlyphSubstitutionProcessor(moprhSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) moprhSubtableHeader; - - singleTableLookupTable = (const SingleTableLookupTable *) &header->table; -} - -SingleTableProcessor::~SingleTableProcessor() -{ -} - -void SingleTableProcessor::process(LEGlyphStorage &glyphStorage) -{ - 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(entries, glyphStorage[glyph]); - - if (lookupSingle != NULL) { - glyphStorage[glyph] = SWAPW(lookupSingle->value); - } - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SingleTableProcessor.h b/Build/source/libs/icu-xetex/layout/SingleTableProcessor.h deleted file mode 100644 index d6ca048b049..00000000000 --- a/Build/source/libs/icu-xetex/layout/SingleTableProcessor.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - * (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); - - SingleTableProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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: - const SingleTableLookupTable *singleTableLookupTable; - -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/StateTableProcessor.cpp b/Build/source/libs/icu-xetex/layout/StateTableProcessor.cpp deleted file mode 100644 index 223959b8b16..00000000000 --- a/Build/source/libs/icu-xetex/layout/StateTableProcessor.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : SubtableProcessor(morphSubtableHeader) -{ - stateTableHeader = (const MorphStateTableHeader *) morphSubtableHeader; - - stateSize = SWAPW(stateTableHeader->stHeader.stateSize); - classTableOffset = SWAPW(stateTableHeader->stHeader.classTableOffset); - stateArrayOffset = SWAPW(stateTableHeader->stHeader.stateArrayOffset); - entryTableOffset = SWAPW(stateTableHeader->stHeader.entryTableOffset); - - classTable = (const ClassTable *) ((char *) &stateTableHeader->stHeader + classTableOffset); - firstGlyph = SWAPW(classTable->firstGlyph); - lastGlyph = firstGlyph + SWAPW(classTable->nGlyphs); -} - -StateTableProcessor::~StateTableProcessor() -{ -} - -void StateTableProcessor::process(LEGlyphStorage &glyphStorage) -{ - // 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) { - ClassCode classCode = classCodeOOB; - if (currGlyph == glyphCount) { - // XXX: How do we handle EOT vs. EOL? - classCode = classCodeEOT; - } 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]; - } - } - - const EntryTableIndex *stateArray = (const EntryTableIndex *) ((char *) &stateTableHeader->stHeader + currentState); - EntryTableIndex entryTableIndex = stateArray[(le_uint8)classCode]; - - currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex); - } - - endStateTable(); -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/StateTableProcessor.h b/Build/source/libs/icu-xetex/layout/StateTableProcessor.h deleted file mode 100644 index 41c50debe94..00000000000 --- a/Build/source/libs/icu-xetex/layout/StateTableProcessor.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * (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); - - virtual void beginStateTable() = 0; - - virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) = 0; - - virtual void endStateTable() = 0; - -protected: - StateTableProcessor(const MorphSubtableHeader *morphSubtableHeader); - virtual ~StateTableProcessor(); - - StateTableProcessor(); - - le_int16 stateSize; - ByteOffset classTableOffset; - ByteOffset stateArrayOffset; - ByteOffset entryTableOffset; - - const ClassTable *classTable; - TTGlyphID firstGlyph; - TTGlyphID lastGlyph; - - const MorphStateTableHeader *stateTableHeader; - -private: - StateTableProcessor(const StateTableProcessor &other); // forbid copying of this class - StateTableProcessor &operator=(const StateTableProcessor &other); // forbid copying of this class -}; - -U_NAMESPACE_END -#endif diff --git a/Build/source/libs/icu-xetex/layout/StateTables.h b/Build/source/libs/icu-xetex/layout/StateTables.h deleted file mode 100644 index 8b5f867770a..00000000000 --- a/Build/source/libs/icu-xetex/layout/StateTables.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __STATETABLES_H -#define __STATETABLES_H - -/** - * \file - * \internal - */ - -#include "LETypes.h" -#include "LayoutTables.h" - -U_NAMESPACE_BEGIN - -struct StateTableHeader -{ - le_int16 stateSize; - ByteOffset classTableOffset; - ByteOffset stateArrayOffset; - ByteOffset 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]; -}; - -enum StateNumber -{ - stateSOT = 0, - stateSOL = 1, - stateFirstFree = 2, - stateMAX = 0xFF -}; - -typedef le_uint8 EntryTableIndex; - -struct StateEntry -{ - ByteOffset newStateOffset; - le_int16 flags; -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/SubstitutionLookups.cpp b/Build/source/libs/icu-xetex/layout/SubstitutionLookups.cpp deleted file mode 100644 index fa6771ac1f7..00000000000 --- a/Build/source/libs/icu-xetex/layout/SubstitutionLookups.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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) -{ - GlyphIterator tempIterator(*glyphIterator); - - for (le_uint16 subst = 0; subst < substCount; 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); - } -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SubstitutionLookups.h b/Build/source/libs/icu-xetex/layout/SubstitutionLookups.h deleted file mode 100644 index 3365850642b..00000000000 --- a/Build/source/libs/icu-xetex/layout/SubstitutionLookups.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - 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); -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/SubtableProcessor.cpp b/Build/source/libs/icu-xetex/layout/SubtableProcessor.cpp deleted file mode 100644 index dd5ce187b21..00000000000 --- a/Build/source/libs/icu-xetex/layout/SubtableProcessor.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) -{ - subtableHeader = morphSubtableHeader; - - length = SWAPW(subtableHeader->length); - coverage = SWAPW(subtableHeader->coverage); - subtableFeatures = SWAPL(subtableHeader->subtableFeatures); -} - -SubtableProcessor::~SubtableProcessor() -{ -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/SubtableProcessor.h b/Build/source/libs/icu-xetex/layout/SubtableProcessor.h deleted file mode 100644 index f304cb956e9..00000000000 --- a/Build/source/libs/icu-xetex/layout/SubtableProcessor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * (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) = 0; - virtual ~SubtableProcessor(); - -protected: - SubtableProcessor(const MorphSubtableHeader *morphSubtableHeader); - - SubtableProcessor(); - - le_int16 length; - SubtableCoverage coverage; - FeatureFlags subtableFeatures; - - const 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 - diff --git a/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.cpp deleted file mode 100644 index 89154277765..00000000000 --- a/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.cpp +++ /dev/null @@ -1,123 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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) - : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) -{ - 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 & 0x1) { /* kerning enabled */ - static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG; - - KernTable kt(fFontInstance, getFontTable(kernTableTag)); - kt.process(glyphStorage); - } - - // default is no adjustments - return; -} - -U_NAMESPACE_END diff --git a/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.h b/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.h deleted file mode 100644 index b0e1a52dd33..00000000000 --- a/Build/source/libs/icu-xetex/layout/ThaiLayoutEngine.h +++ /dev/null @@ -1,143 +0,0 @@ - -/* - * - * (C) Copyright IBM Corp. 1998-2008 - 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 - * - * @see LEFontInstance - * @see ScriptAndLanguageTags.h for script and language codes - * - * @internal - */ - ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags); - - /** - * 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 - diff --git a/Build/source/libs/icu-xetex/layout/ThaiShaping.cpp b/Build/source/libs/icu-xetex/layout/ThaiShaping.cpp deleted file mode 100644 index 1680f0fe515..00000000000 --- a/Build/source/libs/icu-xetex/layout/ThaiShaping.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - * - * (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)) { - 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 diff --git a/Build/source/libs/icu-xetex/layout/ThaiShaping.h b/Build/source/libs/icu-xetex/layout/ThaiShaping.h deleted file mode 100644 index 4c6d6a51f4f..00000000000 --- a/Build/source/libs/icu-xetex/layout/ThaiShaping.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * - * (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 - }; - - 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[][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 - - diff --git a/Build/source/libs/icu-xetex/layout/ThaiStateTables.cpp b/Build/source/libs/icu-xetex/layout/ThaiStateTables.cpp deleted file mode 100644 index b1f8b184fbf..00000000000 --- a/Build/source/libs/icu-xetex/layout/ThaiStateTables.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * %W% %E% - * - * (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::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 diff --git a/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.cpp b/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.cpp deleted file mode 100644 index be97ab5baf4..00000000000 --- a/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2005 - 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 GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) -{ - fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount); - fFeatureOrder = TRUE; -} - -TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) -{ - 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 diff --git a/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.h b/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.h deleted file mode 100644 index 799d8b679a6..00000000000 --- a/Build/source/libs/icu-xetex/layout/TibetanLayoutEngine.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 - * - * @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 GlyphSubstitutionTableHeader *gsubTable); - - /** - * 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 - * - * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes - * - * @internal - */ - TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - le_int32 typoFlags); - - /** - * 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 - diff --git a/Build/source/libs/icu-xetex/layout/TibetanReordering.cpp b/Build/source/libs/icu-xetex/layout/TibetanReordering.cpp deleted file mode 100644 index 3d018d596af..00000000000 --- a/Build/source/libs/icu-xetex/layout/TibetanReordering.cpp +++ /dev/null @@ -1,389 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - 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 refered 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, NULL, 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 diff --git a/Build/source/libs/icu-xetex/layout/TibetanReordering.h b/Build/source/libs/icu-xetex/layout/TibetanReordering.h deleted file mode 100644 index cafcf5646c8..00000000000 --- a/Build/source/libs/icu-xetex/layout/TibetanReordering.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2005 - 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 __TIBETANORDERING_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 diff --git a/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp b/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp deleted file mode 100644 index a68c056267f..00000000000 --- a/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * (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 MorphSubtableHeader *morphSubtableHeader) - : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) -{ - const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; - - trimmedArrayLookupTable = (const TrimmedArrayLookupTable *) &header->table; - firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph); - lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount); -} - -TrimmedArrayProcessor::~TrimmedArrayProcessor() -{ -} - -void TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage) -{ - 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 diff --git a/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.h b/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.h deleted file mode 100644 index 9d86980c327..00000000000 --- a/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * (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); - - TrimmedArrayProcessor(const MorphSubtableHeader *morphSubtableHeader); - - 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; - const TrimmedArrayLookupTable *trimmedArrayLookupTable; - -}; - -U_NAMESPACE_END -#endif - diff --git a/Build/source/libs/icu-xetex/layout/ValueRecords.cpp b/Build/source/libs/icu-xetex/layout/ValueRecords.cpp deleted file mode 100644 index bdf68468d0c..00000000000 --- a/Build/source/libs/icu-xetex/layout/ValueRecords.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/* - * - * (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 char *base, GlyphIterator &glyphIterator, - const LEFontInstance *fontInstance) 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->getLayoutDirVertical() - ? -fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbYPlacement) != 0) { - le_int16 value = getFieldValue(valueFormat, vrfYPlacement); - LEPoint pixels; - - fontInstance->transformFunits(0, value, pixels); - - xPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbXAdvance) != 0) { - le_int16 value = getFieldValue(valueFormat, vrfXAdvance); - LEPoint pixels; - - fontInstance->transformFunits(value, 0, pixels); - - xAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbYAdvance) != 0) { - le_int16 value = getFieldValue(valueFormat, vrfYAdvance); - LEPoint pixels; - - fontInstance->transformFunits(0, value, pixels); - - xAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->xPixelsToUnits(pixels.fX) - : 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) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 xAdj = dt->getAdjustment(xppem); - - if (fontInstance->getLayoutDirVertical()) - yPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); - else - xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); - } - } - - if ((valueFormat & vfbYPlaDevice) != 0) { - Offset dtOffset = getFieldValue(valueFormat, vrfYPlaDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 yAdj = dt->getAdjustment(yppem); - - if (fontInstance->getLayoutDirVertical()) - xPlacementAdjustment -= fontInstance->yPixelsToUnits(yAdj); - else - yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj); - } - } - - if ((valueFormat & vfbXAdvDevice) != 0) { - Offset dtOffset = getFieldValue(valueFormat, vrfXAdvDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 xAdj = dt->getAdjustment(xppem); - - if (fontInstance->getLayoutDirVertical()) - yAdvanceAdjustment -= fontInstance->xPixelsToUnits(xAdj); - else - xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj); - } - } - - if ((valueFormat & vfbYAdvDevice) != 0) { - Offset dtOffset = getFieldValue(valueFormat, vrfYAdvDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 yAdj = dt->getAdjustment(yppem); - - if (fontInstance->getLayoutDirVertical()) - xAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); - else - yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); - } - } - } - - glyphIterator.adjustCurrGlyphPositionAdjustment( - xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment); -} - -void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, - const LEFontInstance *fontInstance) 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->getLayoutDirVertical() - ? -fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbYPlacement) != 0) { - le_int16 value = getFieldValue(index, valueFormat, vrfYPlacement); - LEPoint pixels; - - fontInstance->transformFunits(0, value, pixels); - - xPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yPlacementAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbXAdvance) != 0) { - le_int16 value = getFieldValue(index, valueFormat, vrfXAdvance); - LEPoint pixels; - - fontInstance->transformFunits(value, 0, pixels); - - xAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->xPixelsToUnits(pixels.fX) - : fontInstance->yPixelsToUnits(pixels.fY); - } - - if ((valueFormat & vfbYAdvance) != 0) { - le_int16 value = getFieldValue(index, valueFormat, vrfYAdvance); - LEPoint pixels; - - fontInstance->transformFunits(0, value, pixels); - - xAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? fontInstance->yPixelsToUnits(pixels.fY) - : fontInstance->xPixelsToUnits(pixels.fX); - yAdvanceAdjustment += fontInstance->getLayoutDirVertical() - ? -fontInstance->xPixelsToUnits(pixels.fX) - : 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) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 xAdj = dt->getAdjustment(xppem); - - if (fontInstance->getLayoutDirVertical()) - yPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); - else - xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); - } - } - - if ((valueFormat & vfbYPlaDevice) != 0) { - Offset dtOffset = getFieldValue(index, valueFormat, vrfYPlaDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 yAdj = dt->getAdjustment(yppem); - - if (fontInstance->getLayoutDirVertical()) - xPlacementAdjustment -= fontInstance->yPixelsToUnits(yAdj); - else - yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj); - } - } - - if ((valueFormat & vfbXAdvDevice) != 0) { - Offset dtOffset = getFieldValue(index, valueFormat, vrfXAdvDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 xAdj = dt->getAdjustment(xppem); - - if (fontInstance->getLayoutDirVertical()) - yAdvanceAdjustment -= fontInstance->xPixelsToUnits(xAdj); - else - xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj); - } - } - - if ((valueFormat & vfbYAdvDevice) != 0) { - Offset dtOffset = getFieldValue(index, valueFormat, vrfYAdvDevice); - - if (dtOffset != 0) { - const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); - le_int16 yAdj = dt->getAdjustment(yppem); - - if (fontInstance->getLayoutDirVertical()) - xAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); - else - 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 diff --git a/Build/source/libs/icu-xetex/layout/ValueRecords.h b/Build/source/libs/icu-xetex/layout/ValueRecords.h deleted file mode 100644 index 83db7b31972..00000000000 --- a/Build/source/libs/icu-xetex/layout/ValueRecords.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * (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 char *base, GlyphIterator &glyphIterator, - const LEFontInstance *fontInstance) const; - void adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, - const LEFontInstance *fontInstance) const; - - static le_int16 getSize(ValueFormat valueFormat); - -private: - static le_int16 getFieldCount(ValueFormat valueFormat); - static le_int16 getFieldIndex(ValueFormat valueFormat, ValueRecordField field); -}; - -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 - - diff --git a/Build/source/libs/icu-xetex/layout/layout.rc b/Build/source/libs/icu-xetex/layout/layout.rc deleted file mode 100644 index 7eb64da2edf..00000000000 --- a/Build/source/libs/icu-xetex/layout/layout.rc +++ /dev/null @@ -1,108 +0,0 @@ -// Do not edit with Microsoft Developer Studio Resource Editor. -// It will permanently substitute version numbers that are intended to be -// picked up by the pre-processor during each build. -// Copyright (c) 2001-2005 International Business Machines -// Corporation and others. All Rights Reserved. -// -#include "../common/msvcres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include <winresrc.h> -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// - -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "../common/msvcres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include <winresrc.h>\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -#define STR(s) #s -#define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "00000000" - BEGIN - VALUE "Comments", ICU_WEBSITE "\0" - VALUE "CompanyName", "IBM Corporation and others\0" - VALUE "FileDescription", "IBM ICU Layout DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) - VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" -#ifdef _DEBUG - VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT "d.dll\0") -#else - VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT ".dll\0") -#endif - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x000, 0000 - END -END - -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Build/source/libs/icu-xetex/layout/layout.vcproj b/Build/source/libs/icu-xetex/layout/layout.vcproj deleted file mode 100644 index c428d1dde10..00000000000 --- a/Build/source/libs/icu-xetex/layout/layout.vcproj +++ /dev/null @@ -1,1054 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="8.00" - Name="layout" - ProjectGUID="{C920062A-0647-4553-A3B2-37C58065664B}" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory=".\..\..\lib" - IntermediateDirectory=".\Debug" - ConfigurationType="2" - InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" - UseOfMFC="0" - ATLMinimizesCRunTimeLibraryUsage="false" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - PreprocessorDefinitions="_DEBUG" - MkTypLibCompatible="true" - SuppressStartupBanner="true" - TargetEnvironment="1" - TypeLibraryName=".\..\..\lib\iculed.tlb" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..\..\include;..\common" - PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - BufferSecurityCheck="true" - DisableLanguageExtensions="true" - TreatWChar_tAsBuiltInType="true" - PrecompiledHeaderFile=".\Debug/layout.pch" - AssemblerListingLocation=".\Debug/" - ObjectFile=".\Debug/" - ProgramDataBaseFileName=".\Debug/" - BrowseInformation="1" - WarningLevel="3" - SuppressStartupBanner="true" - DebugInformationFormat="4" - CompileAs="0" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - PreprocessorDefinitions="_DEBUG" - Culture="1033" - AdditionalIncludeDirectories="..\common" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="..\..\bin\icule38d.dll" - LinkIncremental="2" - SuppressStartupBanner="true" - GenerateDebugInformation="true" - ProgramDatabaseFile=".\..\..\lib\icule38d.pdb" - BaseAddress="0x4ac00000" - ImportLibrary="..\..\lib\iculed.lib" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - UseFAT32Workaround="true" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory=".\..\..\lib" - IntermediateDirectory=".\Release" - ConfigurationType="2" - InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" - UseOfMFC="0" - ATLMinimizesCRunTimeLibraryUsage="false" - CharacterSet="2" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - PreprocessorDefinitions="NDEBUG" - MkTypLibCompatible="true" - SuppressStartupBanner="true" - TargetEnvironment="1" - TypeLibraryName=".\..\..\lib\icule.tlb" - /> - <Tool - Name="VCCLCompilerTool" - AdditionalIncludeDirectories="..\..\include;..\common" - PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION" - StringPooling="true" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - DisableLanguageExtensions="true" - TreatWChar_tAsBuiltInType="true" - PrecompiledHeaderFile=".\Release/layout.pch" - AssemblerListingLocation=".\Release/" - ObjectFile=".\Release/" - ProgramDataBaseFileName=".\Release/" - WarningLevel="3" - SuppressStartupBanner="true" - CompileAs="0" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - PreprocessorDefinitions="NDEBUG" - Culture="1033" - AdditionalIncludeDirectories="..\common" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - OutputFile="..\..\bin\icule38.dll" - LinkIncremental="1" - SuppressStartupBanner="true" - ProgramDatabaseFile=".\..\..\lib\icule38.pdb" - EnableCOMDATFolding="2" - BaseAddress="0x4ac00000" - ImportLibrary="..\..\lib\icule.lib" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="Source Files" - Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" - > - <File - RelativePath=".\AlternateSubstSubtables.cpp" - > - </File> - <File - RelativePath=".\AnchorTables.cpp" - > - </File> - <File - RelativePath=".\ArabicLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\ArabicShaping.cpp" - > - </File> - <File - RelativePath=".\CanonData.cpp" - > - </File> - <File - RelativePath=".\CanonShaping.cpp" - > - </File> - <File - RelativePath=".\ClassDefinitionTables.cpp" - > - </File> - <File - RelativePath=".\ContextualGlyphSubstProc.cpp" - > - </File> - <File - RelativePath=".\ContextualSubstSubtables.cpp" - > - </File> - <File - RelativePath=".\CoverageTables.cpp" - > - </File> - <File - RelativePath=".\CursiveAttachmentSubtables.cpp" - > - </File> - <File - RelativePath=".\DeviceTables.cpp" - > - </File> - <File - RelativePath=".\ExtensionSubtables.cpp" - > - </File> - <File - RelativePath=".\Features.cpp" - > - </File> - <File - RelativePath=".\GDEFMarkFilter.cpp" - > - </File> - <File - RelativePath=".\GlyphDefinitionTables.cpp" - > - </File> - <File - RelativePath=".\GlyphIterator.cpp" - > - </File> - <File - RelativePath="GlyphLookupTables.cpp" - > - </File> - <File - RelativePath=".\GlyphPositionAdjustments.cpp" - > - </File> - <File - RelativePath=".\GlyphPositioningTables.cpp" - > - </File> - <File - RelativePath=".\GlyphPosnLookupProc.cpp" - > - </File> - <File - RelativePath=".\GlyphSubstitutionTables.cpp" - > - </File> - <File - RelativePath=".\GlyphSubstLookupProc.cpp" - > - </File> - <File - RelativePath=".\GXLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\HangulLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\HanLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\IndicClassTables.cpp" - > - </File> - <File - RelativePath=".\IndicLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\IndicRearrangementProcessor.cpp" - > - </File> - <File - RelativePath=".\IndicReordering.cpp" - > - </File> - <File - RelativePath=".\KernTable.cpp" - > - </File> - <File - RelativePath=".\KhmerLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\KhmerReordering.cpp" - > - </File> - <File - RelativePath=".\LayoutEngine.cpp" - > - </File> - <File - RelativePath=".\LEFontInstance.cpp" - > - </File> - <File - RelativePath=".\LEGlyphStorage.cpp" - > - </File> - <File - RelativePath=".\LEInsertionList.cpp" - > - </File> - <File - RelativePath=".\LigatureSubstProc.cpp" - > - </File> - <File - RelativePath=".\LigatureSubstSubtables.cpp" - > - </File> - <File - RelativePath=".\loengine.cpp" - > - </File> - <File - RelativePath=".\LookupProcessor.cpp" - > - </File> - <File - RelativePath=".\Lookups.cpp" - > - </File> - <File - RelativePath=".\LookupTables.cpp" - > - </File> - <File - RelativePath=".\MarkArrays.cpp" - > - </File> - <File - RelativePath=".\MarkToBasePosnSubtables.cpp" - > - </File> - <File - RelativePath=".\MarkToLigaturePosnSubtables.cpp" - > - </File> - <File - RelativePath=".\MarkToMarkPosnSubtables.cpp" - > - </File> - <File - RelativePath=".\MirroredCharData.cpp" - > - </File> - <File - RelativePath=".\MorphTables.cpp" - > - </File> - <File - RelativePath=".\MPreFixups.cpp" - > - </File> - <File - RelativePath=".\MultipleSubstSubtables.cpp" - > - </File> - <File - RelativePath=".\NonContextualGlyphSubstProc.cpp" - > - </File> - <File - RelativePath=".\OpenTypeLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\OpenTypeUtilities.cpp" - > - </File> - <File - RelativePath=".\PairPositioningSubtables.cpp" - > - </File> - <File - RelativePath=".\ScriptAndLanguage.cpp" - > - </File> - <File - RelativePath=".\ScriptAndLanguageTags.cpp" - > - </File> - <File - RelativePath=".\SegmentArrayProcessor.cpp" - > - </File> - <File - RelativePath=".\SegmentSingleProcessor.cpp" - > - </File> - <File - RelativePath=".\ShapingTypeData.cpp" - > - </File> - <File - RelativePath=".\SimpleArrayProcessor.cpp" - > - </File> - <File - RelativePath=".\SinglePositioningSubtables.cpp" - > - </File> - <File - RelativePath=".\SingleSubstitutionSubtables.cpp" - > - </File> - <File - RelativePath=".\SingleTableProcessor.cpp" - > - </File> - <File - RelativePath=".\StateTableProcessor.cpp" - > - </File> - <File - RelativePath=".\SubstitutionLookups.cpp" - > - </File> - <File - RelativePath=".\SubtableProcessor.cpp" - > - </File> - <File - RelativePath=".\ThaiLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\ThaiShaping.cpp" - > - </File> - <File - RelativePath=".\ThaiStateTables.cpp" - > - </File> - <File - RelativePath=".\TibetanLayoutEngine.cpp" - > - </File> - <File - RelativePath=".\TibetanReordering.cpp" - > - </File> - <File - RelativePath=".\TrimmedArrayProcessor.cpp" - > - </File> - <File - RelativePath=".\ValueRecords.cpp" - > - </File> - </Filter> - <Filter - Name="Header Files" - Filter="h;hpp;hxx;hm;inl" - > - <File - RelativePath=".\AlternateSubstSubtables.h" - > - </File> - <File - RelativePath=".\AnchorTables.h" - > - </File> - <File - RelativePath=".\ArabicLayoutEngine.h" - > - </File> - <File - RelativePath=".\ArabicShaping.h" - > - </File> - <File - RelativePath=".\AttachmentPosnSubtables.h" - > - </File> - <File - RelativePath=".\CanonShaping.h" - > - </File> - <File - RelativePath=".\CharSubstitutionFilter.h" - > - </File> - <File - RelativePath=".\ClassDefinitionTables.h" - > - </File> - <File - RelativePath=".\ContextualGlyphInsertion.h" - > - </File> - <File - RelativePath=".\ContextualGlyphSubstitution.h" - > - </File> - <File - RelativePath=".\ContextualGlyphSubstProc.h" - > - </File> - <File - RelativePath=".\ContextualSubstSubtables.h" - > - </File> - <File - RelativePath=".\CoverageTables.h" - > - </File> - <File - RelativePath=".\CursiveAttachmentSubtables.h" - > - </File> - <File - RelativePath=".\DefaultCharMapper.h" - > - </File> - <File - RelativePath=".\DeviceTables.h" - > - </File> - <File - RelativePath=".\ExtensionSubtables.h" - > - </File> - <File - RelativePath=".\Features.h" - > - </File> - <File - RelativePath=".\GDEFMarkFilter.h" - > - </File> - <File - RelativePath=".\GlyphDefinitionTables.h" - > - </File> - <File - RelativePath=".\GlyphIterator.h" - > - </File> - <File - RelativePath="GlyphLookupTables.h" - > - </File> - <File - RelativePath=".\GlyphPositionAdjustments.h" - > - </File> - <File - RelativePath=".\GlyphPositioningTables.h" - > - </File> - <File - RelativePath=".\GlyphPosnLookupProc.h" - > - </File> - <File - RelativePath=".\GlyphSubstitutionTables.h" - > - </File> - <File - RelativePath=".\GlyphSubstLookupProc.h" - > - </File> - <File - RelativePath=".\GXLayoutEngine.h" - > - </File> - <File - RelativePath=".\HangulLayoutEngine.h" - > - </File> - <File - RelativePath=".\HanLayoutEngine.h" - > - </File> - <File - RelativePath=".\IndicLayoutEngine.h" - > - </File> - <File - RelativePath=".\IndicRearrangement.h" - > - </File> - <File - RelativePath=".\IndicRearrangementProcessor.h" - > - </File> - <File - RelativePath=".\IndicReordering.h" - > - </File> - <File - RelativePath=".\KernTable.h" - > - </File> - <File - RelativePath=".\KhmerLayoutEngine.h" - > - </File> - <File - RelativePath=".\KhmerReordering.h" - > - </File> - <File - RelativePath=".\LayoutEngine.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LayoutTables.h" - > - </File> - <File - RelativePath=".\LEFontInstance.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LEGlyphFilter.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LEGlyphStorage.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LEInsertionList.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LELanguages.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LEScripts.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LESwaps.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LETypes.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LigatureSubstitution.h" - > - </File> - <File - RelativePath=".\LigatureSubstProc.h" - > - </File> - <File - RelativePath=".\LigatureSubstSubtables.h" - > - </File> - <File - RelativePath=".\loengine.h" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\layout" - Outputs="..\..\include\layout\$(InputFileName)" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\LookupProcessor.h" - > - </File> - <File - RelativePath=".\Lookups.h" - > - </File> - <File - RelativePath=".\LookupTables.h" - > - </File> - <File - RelativePath=".\MarkArrays.h" - > - </File> - <File - RelativePath=".\MarkToBasePosnSubtables.h" - > - </File> - <File - RelativePath=".\MarkToLigaturePosnSubtables.h" - > - </File> - <File - RelativePath=".\MarkToMarkPosnSubtables.h" - > - </File> - <File - RelativePath=".\MorphStateTables.h" - > - </File> - <File - RelativePath=".\MorphTables.h" - > - </File> - <File - RelativePath=".\MPreFixups.h" - > - </File> - <File - RelativePath=".\MultipleSubstSubtables.h" - > - </File> - <File - RelativePath=".\NonContextualGlyphSubst.h" - > - </File> - <File - RelativePath=".\NonContextualGlyphSubstProc.h" - > - </File> - <File - RelativePath=".\OpenTypeLayoutEngine.h" - > - </File> - <File - RelativePath=".\OpenTypeTables.h" - > - </File> - <File - RelativePath=".\OpenTypeUtilities.h" - > - </File> - <File - RelativePath=".\PairPositioningSubtables.h" - > - </File> - <File - RelativePath=".\ScriptAndLanguage.h" - > - </File> - <File - RelativePath=".\ScriptAndLanguageTags.h" - > - </File> - <File - RelativePath=".\SegmentArrayProcessor.h" - > - </File> - <File - RelativePath=".\SegmentSingleProcessor.h" - > - </File> - <File - RelativePath=".\SimpleArrayProcessor.h" - > - </File> - <File - RelativePath=".\SinglePositioningSubtables.h" - > - </File> - <File - RelativePath=".\SingleSubstitutionSubtables.h" - > - </File> - <File - RelativePath=".\SingleTableProcessor.h" - > - </File> - <File - RelativePath=".\StateTableProcessor.h" - > - </File> - <File - RelativePath=".\StateTables.h" - > - </File> - <File - RelativePath=".\SubstitutionLookups.h" - > - </File> - <File - RelativePath=".\SubtableProcessor.h" - > - </File> - <File - RelativePath=".\ThaiLayoutEngine.h" - > - </File> - <File - RelativePath=".\ThaiShaping.h" - > - </File> - <File - RelativePath=".\TibetanLayoutEngine.h" - > - </File> - <File - RelativePath=".\TibetanReordering.h" - > - </File> - <File - RelativePath=".\TrimmedArrayProcessor.h" - > - </File> - <File - RelativePath=".\ValueRecords.h" - > - </File> - </Filter> - <Filter - Name="Resource Files" - Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" - > - <File - RelativePath=".\layout.rc" - > - </File> - </Filter> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/Build/source/libs/icu-xetex/layout/loengine.cpp b/Build/source/libs/icu-xetex/layout/loengine.cpp deleted file mode 100644 index 3718b9f6f8a..00000000000 --- a/Build/source/libs/icu-xetex/layout/loengine.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "loengine.h" -#include "LayoutEngine.h" - -/** - * \file - * \brief C API for complex text layout. - */ - -U_NAMESPACE_USE - -U_CAPI le_engine * U_EXPORT2 -le_create(const le_font *font, - le_int32 scriptCode, - le_int32 languageCode, - le_int32 typo_flags, - LEErrorCode *success) -{ - LEFontInstance *fontInstance = (LEFontInstance *) font; - - return (le_engine *) LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, typo_flags, *success); -} - -U_CAPI void U_EXPORT2 -le_close(le_engine *engine) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - delete le; -} - -U_CAPI le_int32 U_EXPORT2 -le_layoutChars(le_engine *engine, - const LEUnicode chars[], - le_int32 offset, - le_int32 count, - le_int32 max, - le_bool rightToLeft, - float x, - float y, - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return -1; - } - - return le->layoutChars(chars, offset, count, max, rightToLeft, x, y, *success); -} - -U_CAPI le_int32 U_EXPORT2 -le_getGlyphCount(le_engine *engine, - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return -1; - } - - return le->getGlyphCount(); -} - -U_CAPI void U_EXPORT2 -le_getGlyphs(le_engine *engine, - LEGlyphID glyphs[], - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->getGlyphs(glyphs, *success); -} - -U_CAPI void U_EXPORT2 -le_getCharIndices(le_engine *engine, - le_int32 charIndices[], - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->getCharIndices(charIndices, *success); -} - -U_CAPI void U_EXPORT2 -le_getCharIndicesWithBase(le_engine *engine, - le_int32 charIndices[], - le_int32 indexBase, - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->getCharIndices(charIndices, indexBase, *success); -} - -U_CAPI void U_EXPORT2 -le_getGlyphPositions(le_engine *engine, - float positions[], - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->getGlyphPositions(positions, *success); -} - -U_CAPI void U_EXPORT2 -le_getGlyphPosition(le_engine *engine, - le_int32 glyphIndex, - float *x, - float *y, - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->getGlyphPosition(glyphIndex, *x, *y, *success); -} - -U_CAPI void U_EXPORT2 -le_reset(le_engine *engine, - LEErrorCode *success) -{ - LayoutEngine *le = (LayoutEngine *) engine; - - if (le == NULL) { - *success = LE_ILLEGAL_ARGUMENT_ERROR; - return; - } - - le->reset(); -} diff --git a/Build/source/libs/icu-xetex/layout/loengine.h b/Build/source/libs/icu-xetex/layout/loengine.h deleted file mode 100644 index 722dd32d844..00000000000 --- a/Build/source/libs/icu-xetex/layout/loengine.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved - * - */ - -#ifndef __LOENGINE_H -#define __LOENGINE_H - -#include "LETypes.h" - -/** - * \file - * \brief C API for complex text layout. - * \internal - * - * This is a technology preview. The API may - * change significantly. - * - */ - -/** - * The opaque type for a LayoutEngine. - * - * @internal - */ -typedef void le_engine; - -/** - * The opaque type for a font instance. - * - * @internal - */ -typedef void le_font; - -/** - * This function returns an le_engine capable of laying out text - * in the given font, script and langauge. Note that the LayoutEngine - * returned may be a subclass of LayoutEngine. - * - * @param font - the font of the text - * @param scriptCode - the script of the text - * @param languageCode - the language of the text - * @param typo_flags - flags that control layout features like kerning and ligatures. - * @param success - output parameter set to an error code if the operation fails - * - * @return an le_engine which can layout text in the given font. - * - * @internal - */ -U_INTERNAL le_engine * U_EXPORT2 -le_create(const le_font *font, - le_int32 scriptCode, - le_int32 languageCode, - le_int32 typo_flags, - LEErrorCode *success); - -/** - * This function closes the given LayoutEngine. After - * it returns, the le_engine is no longer valid. - * - * @param engine - the LayoutEngine to close. - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_close(le_engine *engine); - -/** - * This routine will compute the glyph, character index and position arrays. - * - * @param engine - the LayoutEngine - * @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 routines below. - * - * Note: If you call this function more than once, you must call the reset() - * function first to free the glyph, character index and position arrays - * allocated by the previous call. - * - * @internal - */ -U_INTERNAL le_int32 U_EXPORT2 -le_layoutChars(le_engine *engine, - const LEUnicode chars[], - le_int32 offset, - le_int32 count, - le_int32 max, - le_bool rightToLeft, - float x, - float y, - LEErrorCode *success); - -/** - * This function 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. - * - * @param engine - the LayoutEngine - * @param success - output parameter set to an error code if the operation fails. - * - * @return the number of glyphs in the glyph array - * - * @internal - */ -U_INTERNAL le_int32 U_EXPORT2 -le_getGlyphCount(le_engine *engine, - LEErrorCode *success); - -/** - * This function 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 engine - the LayoutEngine - * @param glyphs - the destiniation glyph array - * @param success - set to an error code if the operation fails - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_getGlyphs(le_engine *engine, - LEGlyphID glyphs[], - LEErrorCode *success); - -/** - * This function 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 engine - the LayoutEngine - * @param charIndices - the destiniation character index array - * @param success - set to an error code if the operation fails - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_getCharIndices(le_engine *engine, - le_int32 charIndices[], - LEErrorCode *success); - -/** - * This function 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 engine - the LayoutEngine - * @param charIndices - the destiniation character index array - * @param indexBase - an offset that will be added to each index. - * @param success - set to an error code if the operation fails - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_getCharIndicesWithBase(le_engine *engine, - le_int32 charIndices[], - le_int32 indexBase, - LEErrorCode *success); - -/** - * This function 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 engine - the LayoutEngine - * @param positions - the destiniation position array - * @param success - set to an error code if the operation fails - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_getGlyphPositions(le_engine *engine, - float positions[], - LEErrorCode *success); - -/** - * This function returns the X and Y position of the glyph at - * the given index. - * - * Input parameters: - * @param engine - the LayoutEngine - * @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 - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_getGlyphPosition(le_engine *engine, - le_int32 glyphIndex, - float *x, - float *y, - LEErrorCode *success); - -/** - * This function frees the glyph, character index and position arrays - * so that the LayoutEngine can be reused to layout a different - * characer array. (This function is also called by le_close) - * - * @param engine - the LayoutEngine - * @param success - set to an error code if the operation fails - * - * @internal - */ -U_INTERNAL void U_EXPORT2 -le_reset(le_engine *engine, - LEErrorCode *success); - -#endif |