summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2024-01-17 22:14:11 -0800
committerXin Li <delphij@google.com>2024-01-17 22:14:11 -0800
commit6a7aede6653c3ba893ab17ad028853c534a7c15a (patch)
treeeb4fbc475f8f3d307ac7a07716f21f3192d15a62
parentaf5bc35e6f6b0abdbc1ae87eefce22e20da8281b (diff)
parent2ddfc05c281623c991753d3c04374e60d9431743 (diff)
downloadminikin-6a7aede6653c3ba893ab17ad028853c534a7c15a.tar.gz
Merge Android 24Q1 Release (ab/11220357)
Bug: 319669529 Merged-In: Icfd0ce32db4f770bd1b0c5f164c4c87e846ae1d9 Change-Id: I97001fa86dc3f6af805ebf43156e941b0e1aa75a
-rw-r--r--TEST_MAPPING19
-rw-r--r--include/minikin/AndroidLineBreakerHelper.h14
-rw-r--r--include/minikin/BoundsCache.h110
-rw-r--r--include/minikin/Characters.h1
-rw-r--r--include/minikin/Constants.h38
-rw-r--r--include/minikin/Debug.h50
-rw-r--r--include/minikin/FamilyVariant.h14
-rw-r--r--include/minikin/Font.h111
-rw-r--r--include/minikin/FontCollection.h7
-rw-r--r--include/minikin/FontFamily.h14
-rw-r--r--include/minikin/FontFeature.h77
-rw-r--r--include/minikin/FontStyle.h29
-rw-r--r--include/minikin/Hasher.h17
-rw-r--r--include/minikin/Layout.h15
-rw-r--r--include/minikin/LayoutCache.h76
-rw-r--r--include/minikin/LayoutCore.h26
-rw-r--r--include/minikin/LayoutPieces.h40
-rw-r--r--include/minikin/LineBreakStyle.h3
-rw-r--r--include/minikin/LineBreaker.h4
-rw-r--r--include/minikin/MeasuredText.h114
-rw-r--r--include/minikin/MinikinExtent.h21
-rw-r--r--include/minikin/MinikinFont.h4
-rw-r--r--include/minikin/MinikinPaint.h9
-rw-r--r--include/minikin/MinikinRect.h70
-rw-r--r--include/minikin/Point.h44
-rw-r--r--include/minikin/Range.h6
-rw-r--r--libs/minikin/Android.bp9
-rw-r--r--libs/minikin/BoundsCache.cpp43
-rw-r--r--libs/minikin/Debug.cpp123
-rw-r--r--libs/minikin/FeatureFlags.h45
-rw-r--r--libs/minikin/Font.cpp102
-rw-r--r--libs/minikin/FontCollection.cpp85
-rw-r--r--libs/minikin/FontFamily.cpp40
-rw-r--r--libs/minikin/FontFeatureUtils.cpp51
-rw-r--r--libs/minikin/FontFeatureUtils.h40
-rw-r--r--libs/minikin/FontFileParser.cpp14
-rw-r--r--libs/minikin/GreedyLineBreaker.cpp227
-rw-r--r--libs/minikin/GreedyLineBreaker.h2
-rw-r--r--libs/minikin/Layout.cpp85
-rw-r--r--libs/minikin/LayoutCore.cpp84
-rw-r--r--libs/minikin/LineBreaker.cpp8
-rw-r--r--libs/minikin/LineBreakerUtil.h93
-rw-r--r--libs/minikin/Locale.cpp31
-rw-r--r--libs/minikin/Locale.h8
-rw-r--r--libs/minikin/MeasuredText.cpp141
-rw-r--r--libs/minikin/Measurement.cpp26
-rw-r--r--libs/minikin/MinikinInternal.cpp13
-rw-r--r--libs/minikin/OptimalLineBreaker.cpp185
-rw-r--r--libs/minikin/OptimalLineBreaker.h3
-rw-r--r--libs/minikin/ScriptUtils.cpp88
-rw-r--r--libs/minikin/ScriptUtils.h89
-rw-r--r--libs/minikin/StringPiece.h1
-rw-r--r--libs/minikin/WordBreaker.cpp62
-rw-r--r--libs/minikin/WordBreaker.h41
-rw-r--r--tests/Android.bp4
-rw-r--r--tests/data/Hangul.ttfbin0 -> 140268 bytes
-rw-r--r--tests/data/Hangul.ttx11819
-rw-r--r--tests/data/Japanese.ttfbin0 -> 3060 bytes
-rw-r--r--tests/data/Japanese.ttx388
-rw-r--r--tests/data/OvershootTest.ttfbin0 -> 880 bytes
-rw-r--r--tests/data/OvershootTest.ttx257
-rw-r--r--tests/data/WeightEqualsEmVariableFont.ttfbin0 -> 2080 bytes
-rw-r--r--tests/data/WeightEqualsEmVariableFont.ttx282
-rw-r--r--tests/perftests/Android.bp5
-rw-r--r--tests/stresstest/Android.bp4
-rw-r--r--tests/unittest/Android.bp7
-rw-r--r--tests/unittest/BoundsCacheTest.cpp172
-rw-r--r--tests/unittest/FontCollectionItemizeTest.cpp19
-rw-r--r--tests/unittest/FontCollectionTest.cpp20
-rw-r--r--tests/unittest/FontFamilyTest.cpp15
-rw-r--r--tests/unittest/FontFeatureTest.cpp39
-rw-r--r--tests/unittest/FontTest.cpp182
-rw-r--r--tests/unittest/GreedyLineBreakerTest.cpp794
-rw-r--r--tests/unittest/LayoutCacheTest.cpp126
-rw-r--r--tests/unittest/LayoutCoreTest.cpp76
-rw-r--r--tests/unittest/LayoutTest.cpp6
-rw-r--r--tests/unittest/LineBreakerTestHelper.h20
-rw-r--r--tests/unittest/MeasuredTextTest.cpp134
-rw-r--r--tests/unittest/OptimalLineBreakerTest.cpp660
-rw-r--r--tests/unittest/ScriptUtilsTest.cpp162
-rw-r--r--tests/unittest/SystemFontsTest.cpp2
-rw-r--r--tests/unittest/WordBreakerTests.cpp2
-rw-r--r--tests/util/FontTestUtils.cpp9
-rw-r--r--tests/util/FreeTypeMinikinFontForTest.cpp10
-rw-r--r--tests/util/FreeTypeMinikinFontForTest.h8
-rw-r--r--tests/util/UnicodeUtils.cpp17
-rw-r--r--tests/util/UnicodeUtils.h2
87 files changed, 16904 insertions, 1009 deletions
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 279657d..287c353 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -2,6 +2,25 @@
"presubmit": [
{
"name": "minikin_tests"
+ },
+ {
+ "name": "CtsTextTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ },
+ {
+ "exclude-annotation": "androidx.test.filters.LargeTest"
+ }
+ ]
+ },
+ {
+ "name": "CtsGraphicsTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
}
]
}
diff --git a/include/minikin/AndroidLineBreakerHelper.h b/include/minikin/AndroidLineBreakerHelper.h
index 302d2b1..88dd2dd 100644
--- a/include/minikin/AndroidLineBreakerHelper.h
+++ b/include/minikin/AndroidLineBreakerHelper.h
@@ -74,11 +74,17 @@ private:
class StaticLayoutNative {
public:
StaticLayoutNative(BreakStrategy strategy, HyphenationFrequency frequency, bool isJustified,
- std::vector<float>&& indents)
+ std::vector<float>&& indents, bool useBoundsForWidth)
: mStrategy(strategy),
mFrequency(frequency),
mIsJustified(isJustified),
- mIndents(std::move(indents)) {}
+ mIndents(std::move(indents)),
+ mUseBoundsForWidth(useBoundsForWidth) {}
+
+ StaticLayoutNative(BreakStrategy strategy, HyphenationFrequency frequency, bool isJustified,
+ std::vector<float>&& indents)
+ : StaticLayoutNative(strategy, frequency, isJustified, std::move(indents),
+ false /* useBoundsForWidth */) {}
LineBreakResult computeBreaks(const U16StringPiece& textBuf, const MeasuredText& measuredText,
// Line width arguments
@@ -90,7 +96,8 @@ public:
AndroidLineWidth lineWidth(firstWidth, firstWidthLineCount, restWidth, mIndents,
indentsOffset);
return breakIntoLines(textBuf, mStrategy, mFrequency, mIsJustified, measuredText, lineWidth,
- TabStops(tabStops, tabStopSize, defaultTabStopWidth));
+ TabStops(tabStops, tabStopSize, defaultTabStopWidth),
+ mUseBoundsForWidth);
}
inline BreakStrategy getStrategy() const { return mStrategy; }
@@ -104,6 +111,7 @@ private:
const std::vector<float> mIndents;
const std::vector<float> mLeftPaddings;
const std::vector<float> mRightPaddings;
+ const bool mUseBoundsForWidth;
};
} // namespace android
diff --git a/include/minikin/BoundsCache.h b/include/minikin/BoundsCache.h
deleted file mode 100644
index 64f2b49..0000000
--- a/include/minikin/BoundsCache.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MINIKIN_BOUNDS_CACHE_H
-#define MINIKIN_BOUNDS_CACHE_H
-
-#include "minikin/LayoutCache.h"
-
-#include <mutex>
-
-#include <utils/LruCache.h>
-
-#include "minikin/BoundsCache.h"
-#include "minikin/FontCollection.h"
-#include "minikin/Hasher.h"
-#include "minikin/MinikinPaint.h"
-
-namespace minikin {
-
-// Cache entry
-struct BoundsValue {
- MinikinRect rect;
- float advance;
-};
-
-// Used for callback for LayoutCache.
-struct ValueExtractor {
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint);
- std::unique_ptr<BoundsValue> value;
-};
-
-class BoundsCache : private android::OnEntryRemoved<LayoutCacheKey, BoundsValue*> {
-public:
- void clear() {
- std::lock_guard<std::mutex> lock(mMutex);
- mCache.clear();
- }
-
- // Do not use BoundsCache inside the callback function, otherwise dead-lock may happen.
- template <typename F>
- void getOrCreate(const U16StringPiece& text, const Range& range, const MinikinPaint& paint,
- bool dir, StartHyphenEdit startHyphen, EndHyphenEdit endHyphen, F& f) {
- LayoutCacheKey key(text, range, paint, dir, startHyphen, endHyphen);
- if (paint.skipCache() || range.getLength() >= LENGTH_LIMIT_CACHE) {
- LayoutPiece piece = LayoutPiece(text, range, dir, paint, startHyphen, endHyphen);
- f(getBounds(piece, paint), piece.advance());
- return;
- }
- {
- std::lock_guard<std::mutex> lock(mMutex);
- BoundsValue* value = mCache.get(key);
- if (value != nullptr) {
- f(value->rect, value->advance);
- return;
- }
- }
- // Doing text layout takes long time, so releases the mutex during doing layout.
- // Don't care even if we do the same layout in other thread.
- key.copyText();
- ValueExtractor ve;
- LayoutCache::getInstance().getOrCreate(text, range, paint, dir, startHyphen, endHyphen, ve);
- f(ve.value->rect, ve.value->advance);
- {
- std::lock_guard<std::mutex> lock(mMutex);
- mCache.put(key, ve.value.release());
- }
- }
-
- static BoundsCache& getInstance() {
- static BoundsCache cache(kMaxEntries);
- return cache;
- }
-
- // Compute new bounding box for the layout piece.
- static MinikinRect getBounds(const LayoutPiece& layoutPiece, const MinikinPaint& paint);
-
-protected:
- BoundsCache(uint32_t maxEntries) : mCache(maxEntries) {
- mCache.setOnEntryRemovedListener(this);
- }
-
-private:
- // callback for OnEntryRemoved
- void operator()(LayoutCacheKey& key, BoundsValue*& value) {
- key.freeText();
- delete value;
- }
-
- std::mutex mMutex;
- android::LruCache<LayoutCacheKey, BoundsValue*> mCache GUARDED_BY(mMutex) GUARDED_BY(mMutex);
- // LRU cache capacity. Should be fine to be less than LayoutCache#kMaxEntries since bbox
- // calculation happens less than layout calculation.
- static const size_t kMaxEntries = 500;
-};
-
-} // namespace minikin
-#endif // MINIKIN_BOUNDS_CACHE_H
diff --git a/include/minikin/Characters.h b/include/minikin/Characters.h
index 074d134..d298d07 100644
--- a/include/minikin/Characters.h
+++ b/include/minikin/Characters.h
@@ -34,6 +34,7 @@ constexpr uint32_t CHAR_MAQAF = 0x05BE;
constexpr uint32_t CHAR_UCAS_HYPHEN = 0x1400;
constexpr uint32_t CHAR_ZWJ = 0x200D;
constexpr uint32_t CHAR_HYPHEN = 0x2010;
+constexpr uint32_t CHAR_REPLACEMENT_CHARACTER = 0xFFFD;
} // namespace minikin
diff --git a/include/minikin/Constants.h b/include/minikin/Constants.h
new file mode 100644
index 0000000..ba074e4
--- /dev/null
+++ b/include/minikin/Constants.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_CONST_H
+#define MINIKIN_CONST_H
+
+#include <cstdint>
+#include <memory>
+#include <vector>
+
+#include "minikin/FontVariation.h"
+
+namespace minikin {
+
+constexpr uint32_t MakeTag(char c1, char c2, char c3, char c4) {
+ return ((uint32_t)c1 << 24) | ((uint32_t)c2 << 16) | ((uint32_t)c3 << 8) | (uint32_t)c4;
+}
+
+// Axis tags
+const uint32_t TAG_wght = MakeTag('w', 'g', 'h', 't');
+const uint32_t TAG_ital = MakeTag('i', 't', 'a', 'l');
+
+} // namespace minikin
+
+#endif // MINIKIN_CONST_H
diff --git a/include/minikin/Debug.h b/include/minikin/Debug.h
new file mode 100644
index 0000000..20d8d8d
--- /dev/null
+++ b/include/minikin/Debug.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_DEBUG_H
+#define MINIKIN_DEBUG_H
+
+#include <string>
+
+namespace minikin {
+
+struct Point;
+struct MinikinRect;
+struct MinikinExtent;
+struct MinikinPaint;
+struct FontFeature;
+class Range;
+class U16StringPiece;
+class LayoutPiece;
+
+namespace debug {
+
+// Convert UTF16 string to std::string for debugging purpose.
+std::string toUtf8(const U16StringPiece& text);
+
+std::string toString(const Point& point);
+std::string toString(const MinikinRect& rect);
+std::string toString(const Range& range);
+std::string toString(const MinikinExtent& extent);
+std::string toString(const LayoutPiece& layout);
+std::string toString(const MinikinPaint& paint);
+std::string toString(const FontFeature& feature);
+std::string toString(const std::vector<FontFeature>& features);
+
+} // namespace debug
+
+} // namespace minikin
+#endif // MINIKIN_DEBUG_H
diff --git a/include/minikin/FamilyVariant.h b/include/minikin/FamilyVariant.h
index 1734a1f..7711484 100644
--- a/include/minikin/FamilyVariant.h
+++ b/include/minikin/FamilyVariant.h
@@ -18,6 +18,7 @@
#define MINIKIN_FAMILY_VARIANT_H
#include <cstdint>
+#include <ostream>
namespace minikin {
@@ -28,6 +29,19 @@ enum class FamilyVariant : uint8_t {
ELEGANT = 2, // Must be the same as FontConfig.VARIANT_ELEGANT
};
+inline std::ostream& operator<<(std::ostream& os, const FamilyVariant& variant) {
+ switch (variant) {
+ case FamilyVariant::DEFAULT:
+ return os << "default";
+ case FamilyVariant::COMPACT:
+ return os << "compact";
+ case FamilyVariant::ELEGANT:
+ return os << "elegant";
+ default:
+ return os << "[UNKNOWN]";
+ }
+}
+
} // namespace minikin
#endif // MINIKIN_FAMILY_VARIANT_H
diff --git a/include/minikin/Font.h b/include/minikin/Font.h
index f144bea..5f85b77 100644
--- a/include/minikin/Font.h
+++ b/include/minikin/Font.h
@@ -20,7 +20,9 @@
#include <gtest/gtest_prod.h>
#include <atomic>
+#include <map>
#include <memory>
+#include <mutex>
#include <unordered_set>
#include "minikin/Buffer.h"
@@ -38,33 +40,65 @@ class Font;
// attributes representing transforms (fake bold, fake italic) to match styles
class FontFakery {
public:
- FontFakery() : mFakeBold(false), mFakeItalic(false) {}
- FontFakery(bool fakeBold, bool fakeItalic) : mFakeBold(fakeBold), mFakeItalic(fakeItalic) {}
+ FontFakery() : FontFakery(false, false, -1, -1) {}
+ FontFakery(bool fakeBold, bool fakeItalic) : FontFakery(fakeBold, fakeItalic, -1, -1) {}
+ FontFakery(bool fakeBold, bool fakeItalic, int16_t wghtAdjustment, int8_t italAdjustment)
+ : mBits(pack(fakeBold, fakeItalic, wghtAdjustment, italAdjustment)) {}
+
// TODO: want to support graded fake bolding
- bool isFakeBold() { return mFakeBold; }
- bool isFakeItalic() { return mFakeItalic; }
- inline bool operator==(const FontFakery& o) const {
- return mFakeBold == o.mFakeBold && mFakeItalic == o.mFakeItalic;
+ bool isFakeBold() { return (mBits & MASK_FAKE_BOLD) != 0; }
+ bool isFakeItalic() { return (mBits & MASK_FAKE_ITALIC) != 0; }
+ bool hasAdjustment() const { return hasWghtAdjustment() || hasItalAdjustment(); }
+ bool hasWghtAdjustment() const { return (mBits & MASK_HAS_WGHT_ADJUSTMENT) != 0; }
+ bool hasItalAdjustment() const { return (mBits & MASK_HAS_ITAL_ADJUSTMENT) != 0; }
+ int16_t wghtAdjustment() const {
+ if (hasWghtAdjustment()) {
+ return (mBits & MASK_WGHT_ADJUSTMENT) >> WGHT_ADJUSTMENT_SHIFT;
+ } else {
+ return -1;
+ }
+ }
+
+ int8_t italAdjustment() const {
+ if (hasItalAdjustment()) {
+ return (mBits & MASK_ITAL_ADJUSTMENT) != 0 ? 1 : 0;
+ } else {
+ return -1;
+ }
}
+
+ uint16_t bits() const { return mBits; }
+
+ inline bool operator==(const FontFakery& o) const { return mBits == o.mBits; }
inline bool operator!=(const FontFakery& o) const { return !(*this == o); }
private:
- bool mFakeBold;
- bool mFakeItalic;
-};
-
-struct FakedFont {
- inline bool operator==(const FakedFont& o) const {
- return font == o.font && fakery == o.fakery;
+ static constexpr uint16_t MASK_FAKE_BOLD = 1u;
+ static constexpr uint16_t MASK_FAKE_ITALIC = 1u << 1;
+ static constexpr uint16_t MASK_HAS_WGHT_ADJUSTMENT = 1u << 2;
+ static constexpr uint16_t MASK_HAS_ITAL_ADJUSTMENT = 1u << 3;
+ static constexpr uint16_t MASK_ITAL_ADJUSTMENT = 1u << 4;
+ static constexpr uint16_t MASK_WGHT_ADJUSTMENT = 0b1111111111u << 5;
+ static constexpr uint16_t WGHT_ADJUSTMENT_SHIFT = 5;
+
+ uint16_t pack(bool isFakeBold, bool isFakeItalic, int16_t wghtAdjustment,
+ int8_t italAdjustment) {
+ uint16_t bits = 0u;
+ bits |= isFakeBold ? MASK_FAKE_BOLD : 0;
+ bits |= isFakeItalic ? MASK_FAKE_ITALIC : 0;
+ if (wghtAdjustment != -1) {
+ bits |= MASK_HAS_WGHT_ADJUSTMENT;
+ bits |= (static_cast<uint16_t>(wghtAdjustment) << WGHT_ADJUSTMENT_SHIFT) &
+ MASK_WGHT_ADJUSTMENT;
+ }
+ if (italAdjustment != -1) {
+ bits |= MASK_HAS_ITAL_ADJUSTMENT;
+ bits |= (italAdjustment == 1) ? MASK_ITAL_ADJUSTMENT : 0;
+ }
+ return bits;
}
- inline bool operator!=(const FakedFont& o) const { return !(*this == o); }
- // ownership is the enclosing FontCollection
- // FakedFont will be stored in the LayoutCache. It is not a good idea too keep font instance
- // even if the enclosing FontCollection, i.e. Typeface is GC-ed. The layout cache is only
- // purged when it is overflown, thus intentionally keep only reference.
- const std::shared_ptr<Font>& font;
- FontFakery fakery;
+ const uint16_t mBits;
};
// Represents a single font file.
@@ -121,9 +155,16 @@ public:
// This locale list is just for API compatibility. This is not used in font selection or family
// fallback.
uint32_t getLocaleListId() const { return mLocaleListId; }
- const std::shared_ptr<MinikinFont>& typeface() const;
inline FontStyle style() const { return mStyle; }
+
const HbFontUniquePtr& baseFont() const;
+ const std::shared_ptr<MinikinFont>& baseTypeface() const;
+
+ // Returns an adjusted hb_font_t instance and MinikinFont instance.
+ // Passing -1 each means do not override the current variation settings.
+ HbFontUniquePtr getAdjustedFont(int wght, int ital) const;
+ const std::shared_ptr<MinikinFont>& getAdjustedTypeface(int wght, int ital) const;
+
BufferReader typefaceMetadataReader() const { return mTypefaceMetadataReader; }
std::unordered_set<AxisTag> getSupportedAxes() const;
@@ -139,6 +180,11 @@ private:
std::shared_ptr<MinikinFont> mTypeface;
HbFontUniquePtr mBaseFont;
+
+ const std::shared_ptr<MinikinFont>& getAdjustedTypeface(int wght, int ital) const;
+ mutable std::mutex mMutex;
+ mutable std::map<uint16_t, std::shared_ptr<MinikinFont>> mVarTypefaceCache
+ GUARDED_BY(mMutex);
};
// Use Builder instead.
@@ -152,6 +198,7 @@ private:
void resetExternalRefs(ExternalRefs* refs);
const ExternalRefs* getExternalRefs() const;
+ std::vector<FontVariation> getAdjustedVariations(int wght, int ital) const;
static HbFontUniquePtr prepareFont(const std::shared_ptr<MinikinFont>& typeface);
static FontStyle analyzeStyle(const HbFontUniquePtr& font);
@@ -172,6 +219,28 @@ private:
FRIEND_TEST(FontTest, MoveAssignmentTest);
};
+struct FakedFont {
+ inline bool operator==(const FakedFont& o) const {
+ return font == o.font && fakery == o.fakery;
+ }
+ inline bool operator!=(const FakedFont& o) const { return !(*this == o); }
+
+ HbFontUniquePtr hbFont() const {
+ return font->getAdjustedFont(fakery.wghtAdjustment(), fakery.italAdjustment());
+ }
+
+ const std::shared_ptr<MinikinFont>& typeface() const {
+ return font->getAdjustedTypeface(fakery.wghtAdjustment(), fakery.italAdjustment());
+ }
+
+ // ownership is the enclosing FontCollection
+ // FakedFont will be stored in the LayoutCache. It is not a good idea too keep font instance
+ // even if the enclosing FontCollection, i.e. Typeface is GC-ed. The layout cache is only
+ // purged when it is overflown, thus intentionally keep only reference.
+ const std::shared_ptr<Font>& font;
+ FontFakery fakery;
+};
+
} // namespace minikin
#endif // MINIKIN_FONT_H
diff --git a/include/minikin/FontCollection.h b/include/minikin/FontCollection.h
index 1679abc..ee0315e 100644
--- a/include/minikin/FontCollection.h
+++ b/include/minikin/FontCollection.h
@@ -34,6 +34,8 @@ namespace minikin {
// The maximum number of font families.
constexpr uint32_t MAX_FAMILY_COUNT = 254;
+class LocaleList;
+
class FontCollection {
public:
static std::shared_ptr<FontCollection> create(
@@ -147,6 +149,8 @@ public:
return itemize(text, style, localeListId, familyVariant, text.size());
}
+ MinikinExtent getReferenceExtentForLocale(const MinikinPaint& paint) const;
+
// Returns true if there is a glyph for the code point and variation selector pair.
// Returns false if no fonts have a glyph for the code point and variation
// selector pair, or invalid variation selector is passed.
@@ -223,6 +227,9 @@ private:
bool isPrimaryFamily(const std::shared_ptr<FontFamily>& fontFamily) const;
+ void filterFamilyByLocale(const LocaleList& localeList,
+ const std::function<void(const FontFamily& family)>& callback) const;
+
static uint32_t calcLocaleMatchingScore(uint32_t userLocaleListId,
const FontFamily& fontFamily);
diff --git a/include/minikin/FontFamily.h b/include/minikin/FontFamily.h
index 6161f5c..c61a076 100644
--- a/include/minikin/FontFamily.h
+++ b/include/minikin/FontFamily.h
@@ -30,6 +30,13 @@
namespace minikin {
+enum VariationFamilyType : uint8_t {
+ None = 0,
+ SingleFont_wghtOnly = 1,
+ SingleFont_wght_ital = 2,
+ TwoFont_wght = 3,
+};
+
class FontFamily {
public:
static std::shared_ptr<FontFamily> create(std::vector<std::shared_ptr<Font>>&& fonts);
@@ -37,7 +44,8 @@ public:
std::vector<std::shared_ptr<Font>>&& fonts);
static std::shared_ptr<FontFamily> create(uint32_t localeListId, FamilyVariant variant,
std::vector<std::shared_ptr<Font>>&& fonts,
- bool isCustomFallback, bool isDefaultFallback);
+ bool isCustomFallback, bool isDefaultFallback,
+ VariationFamilyType varFamilyType);
FontFamily(FontFamily&&) = default;
FontFamily& operator=(FontFamily&&) = default;
@@ -47,6 +55,7 @@ public:
const std::vector<std::shared_ptr<FontFamily>>& families);
FakedFont getClosestMatch(FontStyle style) const;
+ FakedFont getVariationFamilyAdjustment(FontStyle style) const;
uint32_t localeListId() const { return mLocaleListId; }
FamilyVariant variant() const { return mVariant; }
@@ -80,7 +89,7 @@ public:
private:
FontFamily(uint32_t localeListId, FamilyVariant variant,
std::vector<std::shared_ptr<Font>>&& fonts, bool isCustomFallback,
- bool isDefaultFallback);
+ bool isDefaultFallback, VariationFamilyType varFamilyType);
explicit FontFamily(BufferReader* reader, const std::shared_ptr<std::vector<Font>>& fonts);
void writeTo(BufferWriter* writer, uint32_t* fontIndex) const;
@@ -103,6 +112,7 @@ private:
bool mIsColorEmoji; // 1 byte
bool mIsCustomFallback; // 1 byte
bool mIsDefaultFallback; // 1 byte
+ VariationFamilyType mVarFamilyType; // 1byte
MINIKIN_PREVENT_COPY_AND_ASSIGN(FontFamily);
};
diff --git a/include/minikin/FontFeature.h b/include/minikin/FontFeature.h
new file mode 100644
index 0000000..c47594b
--- /dev/null
+++ b/include/minikin/FontFeature.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_FONT_FEATURE_H
+#define MINIKIN_FONT_FEATURE_H
+
+#include <hb.h>
+
+#include <ostream>
+#include <string_view>
+#include <vector>
+
+namespace minikin {
+
+struct MinikinPaint;
+
+// Subset of the hb_feature_t since we don't allow setting features on ranges.
+struct FontFeature {
+ hb_tag_t tag;
+ uint32_t value;
+
+ static std::vector<FontFeature> parse(std::string_view fontFeatureString);
+};
+
+/**
+ * Returns the final set of font features based on the features requested by this paint object and
+ * extra defaults or implied font features.
+ *
+ * Features are included from the paint object if they are:
+ * 1) in a supported range
+ *
+ * Default features are added based if they are:
+ * 1) implied due to Paint settings such as letterSpacing
+ * 2) default features that do not conflict with requested features
+ */
+std::vector<hb_feature_t> cleanAndAddDefaultFontFeatures(const MinikinPaint& features);
+
+// For gtest output
+inline std::ostream& operator<<(std::ostream& os, const FontFeature& feature) {
+ return os << static_cast<char>(feature.tag >> 24) << static_cast<char>(feature.tag >> 16)
+ << static_cast<char>(feature.tag >> 8) << static_cast<char>(feature.tag) << " "
+ << feature.value;
+}
+
+inline std::ostream& operator<<(std::ostream& os, const std::vector<FontFeature>& features) {
+ for (size_t i = 0; i < features.size(); ++i) {
+ if (i != 0) {
+ os << ", ";
+ }
+ os << features;
+ }
+ return os;
+}
+
+constexpr bool operator==(const FontFeature& l, const FontFeature& r) {
+ return l.tag == r.tag && l.value == r.value;
+}
+
+constexpr bool operator!=(const FontFeature& l, const FontFeature& r) {
+ return !(l == r);
+}
+
+} // namespace minikin
+#endif // MINIKIN_LAYOUT_H
diff --git a/include/minikin/FontStyle.h b/include/minikin/FontStyle.h
index 51e4ad8..7a9e597 100644
--- a/include/minikin/FontStyle.h
+++ b/include/minikin/FontStyle.h
@@ -19,6 +19,8 @@
#include <minikin/Buffer.h>
+#include <ostream>
+
namespace minikin {
// FontStyle represents style information.
@@ -61,10 +63,6 @@ public:
constexpr uint16_t weight() const { return mWeight; }
constexpr Slant slant() const { return mSlant; }
- constexpr bool operator==(const FontStyle& other) const {
- return weight() == other.weight() && slant() == other.slant();
- }
-
constexpr uint32_t identifier() const {
return (static_cast<uint32_t>(weight()) << 16) | static_cast<uint32_t>(slant());
}
@@ -74,6 +72,29 @@ private:
Slant mSlant;
};
+inline std::ostream& operator<<(std::ostream& os, const FontStyle::Slant& slant) {
+ switch (slant) {
+ case FontStyle::Slant::ITALIC:
+ return os << "italic";
+ case FontStyle::Slant::UPRIGHT:
+ return os << "upright";
+ default:
+ return os << "[UNKNOWN]";
+ }
+}
+
+inline std::ostream& operator<<(std::ostream& os, const FontStyle& style) {
+ return os << "{weight=" << style.weight() << ", slant=" << style.slant() << "}";
+}
+
+constexpr bool operator==(const FontStyle& l, const FontStyle& r) {
+ return l.weight() == r.weight() && l.slant() == r.slant();
+}
+
+constexpr bool operator!=(const FontStyle& l, const FontStyle& r) {
+ return !(l == r);
+}
+
} // namespace minikin
#endif // MINIKIN_FONT_STYLE_H
diff --git a/include/minikin/Hasher.h b/include/minikin/Hasher.h
index 4a76b29..dcfdd0b 100644
--- a/include/minikin/Hasher.h
+++ b/include/minikin/Hasher.h
@@ -18,9 +18,9 @@
#define MINIKIN_HASHER_H
#include <cstdint>
-
#include <string>
+#include "minikin/FontFeature.h"
#include "minikin/Macros.h"
namespace minikin {
@@ -57,6 +57,21 @@ public:
return update(bits.i);
}
+ inline Hasher& update(const std::vector<FontFeature>& features) {
+ uint32_t size = features.size();
+ update(size);
+ for (const FontFeature& feature : features) {
+ update(feature);
+ }
+ return *this;
+ }
+
+ inline Hasher& update(const FontFeature& feature) {
+ update(feature.tag);
+ update(feature.value);
+ return *this;
+ }
+
inline Hasher& updateShorts(const uint16_t* data, uint32_t length) {
update(length);
uint32_t i;
diff --git a/include/minikin/Layout.h b/include/minikin/Layout.h
index 388a7a7..d1f2137 100644
--- a/include/minikin/Layout.h
+++ b/include/minikin/Layout.h
@@ -78,7 +78,13 @@ public:
static float measureText(const U16StringPiece& str, const Range& range, Bidi bidiFlags,
const MinikinPaint& paint, StartHyphenEdit startHyphen,
- EndHyphenEdit endHyphen, float* advances);
+ EndHyphenEdit endHyphen, float* advances) {
+ return measureText(str, range, bidiFlags, paint, startHyphen, endHyphen, advances, nullptr);
+ }
+
+ static float measureText(const U16StringPiece& str, const Range& range, Bidi bidiFlags,
+ const MinikinPaint& paint, StartHyphenEdit startHyphen,
+ EndHyphenEdit endHyphen, float* advances, MinikinRect* bounds);
const std::vector<float>& advances() const { return mAdvances; }
@@ -87,6 +93,7 @@ public:
const Font* getFont(int i) const { return mGlyphs[i].font.font.get(); }
const std::shared_ptr<Font>& getFontRef(int i) const { return mGlyphs[i].font.font; }
FontFakery getFakery(int i) const { return mGlyphs[i].font.fakery; }
+ const std::shared_ptr<MinikinFont>& typeface(int i) const { return mGlyphs[i].font.typeface(); }
unsigned int getGlyphId(int i) const { return mGlyphs[i].glyph_id; }
float getX(int i) const { return mGlyphs[i].x; }
float getY(int i) const { return mGlyphs[i].y; }
@@ -115,18 +122,18 @@ private:
static float doLayoutRunCached(const U16StringPiece& textBuf, const Range& range, bool isRtl,
const MinikinPaint& paint, size_t dstStart,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen,
- Layout* layout, float* advances);
+ Layout* layout, float* advances, MinikinRect* bounds);
// Lay out a single word
static float doLayoutWord(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
bool isRtl, const MinikinPaint& paint, size_t bufStart,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen, Layout* layout,
- float* advances);
+ float* advances, MinikinRect* bounds);
// Lay out a single bidi run
void doLayoutRun(const uint16_t* buf, size_t start, size_t count, size_t bufSize, bool isRtl,
const MinikinPaint& paint, StartHyphenEdit startHyphen,
- EndHyphenEdit endHyphen);
+ EndHyphenEdit endHyphen, MinikinRect* bounds);
std::vector<LayoutGlyph> mGlyphs;
diff --git a/include/minikin/LayoutCache.h b/include/minikin/LayoutCache.h
index a1cc34a..fa572fb 100644
--- a/include/minikin/LayoutCache.h
+++ b/include/minikin/LayoutCache.h
@@ -55,6 +55,7 @@ public:
mStartHyphen(startHyphen),
mEndHyphen(endHyphen),
mIsRtl(dir),
+ mFontFeatureSettings(paint.fontFeatureSettings),
mHash(computeHash()) {}
bool operator==(const LayoutCacheKey& o) const {
@@ -64,6 +65,7 @@ public:
mFontFlags == o.mFontFlags && mLocaleListId == o.mLocaleListId &&
mFamilyVariant == o.mFamilyVariant && mStartHyphen == o.mStartHyphen &&
mEndHyphen == o.mEndHyphen && mIsRtl == o.mIsRtl && mNchars == o.mNchars &&
+ mFontFeatureSettings == o.mFontFeatureSettings &&
!memcmp(mChars, o.mChars, mNchars * sizeof(uint16_t));
}
@@ -77,6 +79,7 @@ public:
void freeText() {
delete[] mChars;
mChars = NULL;
+ mFontFeatureSettings.clear();
}
uint32_t getMemoryUsage() const { return sizeof(LayoutCacheKey) + sizeof(uint16_t) * mNchars; }
@@ -99,6 +102,7 @@ private:
StartHyphenEdit mStartHyphen;
EndHyphenEdit mEndHyphen;
bool mIsRtl;
+ std::vector<FontFeature> mFontFeatureSettings;
// Note: any fields added to MinikinPaint must also be reflected here.
// TODO: language matching (possibly integrate into style)
android::hash_t mHash;
@@ -120,11 +124,33 @@ private:
.update(packHyphenEdit(mStartHyphen, mEndHyphen))
.update(mIsRtl)
.updateShorts(mChars, mNchars)
+ .update(mFontFeatureSettings)
.hash();
}
};
-class LayoutCache : private android::OnEntryRemoved<LayoutCacheKey, LayoutPiece*> {
+// A class holds a layout information and bounding box of it. The bounding box can be invalid if not
+// calculated.
+class LayoutSlot {
+public:
+ LayoutSlot(LayoutPiece&& layout)
+ : mLayout(std::move(layout)), mBounds(MinikinRect::makeInvalid()) {}
+ LayoutSlot(LayoutPiece&& layout, MinikinRect&& bounds)
+ : mLayout(std::move(layout)), mBounds(std::move(bounds)) {}
+ LayoutSlot(const LayoutPiece& layout, const MinikinRect& bounds)
+ : mLayout(layout), mBounds(bounds) {}
+
+ const LayoutPiece mLayout;
+ MinikinRect mBounds;
+
+private:
+ LayoutSlot(const LayoutSlot&) = delete;
+ LayoutSlot& operator=(const LayoutSlot&) = delete;
+ LayoutSlot(LayoutSlot&&) = delete;
+ LayoutSlot& operator=(LayoutSlot&&) = delete;
+};
+
+class LayoutCache : private android::OnEntryRemoved<LayoutCacheKey, LayoutSlot*> {
public:
void clear() {
std::lock_guard<std::mutex> lock(mMutex);
@@ -134,29 +160,55 @@ public:
// Do not use LayoutCache inside the callback function, otherwise dead-lock may happen.
template <typename F>
void getOrCreate(const U16StringPiece& text, const Range& range, const MinikinPaint& paint,
- bool dir, StartHyphenEdit startHyphen, EndHyphenEdit endHyphen, F& f) {
+ bool dir, StartHyphenEdit startHyphen, EndHyphenEdit endHyphen,
+ bool boundsCalculation, F& f) {
LayoutCacheKey key(text, range, paint, dir, startHyphen, endHyphen);
if (paint.skipCache() || range.getLength() >= LENGTH_LIMIT_CACHE) {
- f(LayoutPiece(text, range, dir, paint, startHyphen, endHyphen), paint);
+ LayoutPiece piece(text, range, dir, paint, startHyphen, endHyphen);
+ if (boundsCalculation) {
+ f(piece, paint, LayoutPiece::calculateBounds(piece, paint));
+ } else {
+ f(piece, paint, MinikinRect::makeInvalid());
+ }
return;
}
+
+ LayoutSlot* cachedSlot;
{
std::lock_guard<std::mutex> lock(mMutex);
- LayoutPiece* layout = mCache.get(key);
- if (layout != nullptr) {
- f(*layout, paint);
+ cachedSlot = mCache.get(key);
+
+ if (cachedSlot != nullptr) {
+ if (boundsCalculation && !cachedSlot->mBounds.isValid()) {
+ MinikinRect bounds = LayoutPiece::calculateBounds(cachedSlot->mLayout, paint);
+ LayoutPiece lp = cachedSlot->mLayout;
+ f(lp, paint, bounds);
+ cachedSlot->mBounds = bounds;
+ } else {
+ f(cachedSlot->mLayout, paint, cachedSlot->mBounds);
+ }
return;
}
}
// Doing text layout takes long time, so releases the mutex during doing layout.
// Don't care even if we do the same layout in other thred.
key.copyText();
- std::unique_ptr<LayoutPiece> layout =
- std::make_unique<LayoutPiece>(text, range, dir, paint, startHyphen, endHyphen);
- f(*layout, paint);
+
+ std::unique_ptr<LayoutSlot> slot;
+ if (boundsCalculation) {
+ LayoutPiece lp = LayoutPiece(text, range, dir, paint, startHyphen, endHyphen);
+ MinikinRect rect = LayoutPiece::calculateBounds(lp, paint);
+
+ slot = std::make_unique<LayoutSlot>(std::move(lp), std::move(rect));
+ } else {
+ slot = std::make_unique<LayoutSlot>(
+ LayoutPiece(text, range, dir, paint, startHyphen, endHyphen));
+ }
+
+ f(slot->mLayout, paint, slot->mBounds);
{
std::lock_guard<std::mutex> lock(mMutex);
- mCache.put(key, layout.release());
+ mCache.put(key, slot.release());
}
}
@@ -177,12 +229,12 @@ protected:
private:
// callback for OnEntryRemoved
- void operator()(LayoutCacheKey& key, LayoutPiece*& value) {
+ void operator()(LayoutCacheKey& key, LayoutSlot*& value) {
key.freeText();
delete value;
}
- android::LruCache<LayoutCacheKey, LayoutPiece*> mCache GUARDED_BY(mMutex);
+ android::LruCache<LayoutCacheKey, LayoutSlot*> mCache GUARDED_BY(mMutex);
// static const size_t kMaxEntries = LruCache<LayoutCacheKey, Layout*>::kUnlimitedCapacity;
diff --git a/include/minikin/LayoutCore.h b/include/minikin/LayoutCore.h
index cade517..cf5b958 100644
--- a/include/minikin/LayoutCore.h
+++ b/include/minikin/LayoutCore.h
@@ -17,15 +17,16 @@
#ifndef MINIKIN_LAYOUT_CORE_H
#define MINIKIN_LAYOUT_CORE_H
-#include <vector>
-
#include <gtest/gtest_prod.h>
+#include <vector>
+
#include "minikin/FontFamily.h"
#include "minikin/Hyphenator.h"
#include "minikin/MinikinExtent.h"
#include "minikin/MinikinFont.h"
#include "minikin/MinikinRect.h"
+#include "minikin/Point.h"
#include "minikin/Range.h"
#include "minikin/U16StringPiece.h"
@@ -33,19 +34,12 @@ namespace minikin {
struct MinikinPaint;
-struct Point {
- Point() : x(0), y(0) {}
- Point(float x, float y) : x(x), y(y) {}
- bool operator==(const Point& o) const { return x == o.x && y == o.y; }
- float x;
- float y;
-};
-
// Immutable, recycle-able layout result.
class LayoutPiece {
public:
LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool isRtl,
const MinikinPaint& paint, StartHyphenEdit startHyphen, EndHyphenEdit endHyphen);
+ ~LayoutPiece();
// Low level accessors.
const std::vector<uint8_t>& fontIndices() const { return mFontIndices; }
@@ -68,12 +62,14 @@ public:
sizeof(MinikinRect) + sizeof(MinikinExtent);
}
+ static MinikinRect calculateBounds(const LayoutPiece& layout, const MinikinPaint& paint);
+
private:
FRIEND_TEST(LayoutTest, doLayoutWithPrecomputedPiecesTest);
- std::vector<uint8_t> mFontIndices; // per glyph
- std::vector<uint32_t> mGlyphIds; // per glyph
- std::vector<Point> mPoints; // per glyph
+ std::vector<uint8_t> mFontIndices; // per glyph
+ std::vector<uint32_t> mGlyphIds; // per glyph
+ std::vector<Point> mPoints; // per glyph
std::vector<float> mAdvances; // per code units
@@ -83,10 +79,6 @@ private:
std::vector<FakedFont> mFonts;
};
-// For gtest output
-inline std::ostream& operator<<(std::ostream& os, const Point& p) {
- return os << "(" << p.x << ", " << p.y << ")";
-}
} // namespace minikin
#endif // MINIKIN_LAYOUT_CORE_H
diff --git a/include/minikin/LayoutPieces.h b/include/minikin/LayoutPieces.h
index 7985ecc..d98ba35 100644
--- a/include/minikin/LayoutPieces.h
+++ b/include/minikin/LayoutPieces.h
@@ -30,14 +30,19 @@ struct LayoutPieces {
struct Key {
Key(const Range& range, HyphenEdit hyphenEdit, bool dir, uint32_t paintId)
- : range(range), hyphenEdit(hyphenEdit), dir(dir), paintId(paintId) {}
+ : range(range),
+ hyphenEdit(hyphenEdit),
+ dir(dir),
+ paintId(paintId),
+ hash(calcHash()) {}
Range range;
HyphenEdit hyphenEdit;
bool dir;
uint32_t paintId;
+ uint32_t hash;
- uint32_t hash() const {
+ uint32_t calcHash() const {
return Hasher()
.update(range.getStart())
.update(range.getEnd())
@@ -58,7 +63,7 @@ struct LayoutPieces {
};
struct KeyHasher {
- std::size_t operator()(const Key& key) const { return key.hash(); }
+ std::size_t operator()(const Key& key) const { return key.hash; }
};
struct PaintHasher {
@@ -70,10 +75,10 @@ struct LayoutPieces {
uint32_t nextPaintId;
std::unordered_map<MinikinPaint, uint32_t, PaintHasher> paintMap;
- std::unordered_map<Key, LayoutPiece, KeyHasher> offsetMap;
+ std::unordered_map<Key, LayoutSlot, KeyHasher> offsetMap;
void insert(const Range& range, HyphenEdit edit, const LayoutPiece& layout, bool dir,
- const MinikinPaint& paint) {
+ const MinikinPaint& paint, const MinikinRect& rect) {
uint32_t paintId = findPaintId(paint);
if (paintId == kNoPaintId) {
paintId = nextPaintId++;
@@ -81,22 +86,29 @@ struct LayoutPieces {
}
offsetMap.emplace(std::piecewise_construct,
std::forward_as_tuple(range, edit, dir, paintId),
- std::forward_as_tuple(layout));
+ std::forward_as_tuple(layout, rect));
}
template <typename F>
void getOrCreate(const U16StringPiece& textBuf, const Range& range, const Range& context,
const MinikinPaint& paint, bool dir, StartHyphenEdit startEdit,
- EndHyphenEdit endEdit, uint32_t paintId, F& f) const {
+ EndHyphenEdit endEdit, uint32_t paintId, bool boundsCalculation, F& f) const {
const HyphenEdit edit = packHyphenEdit(startEdit, endEdit);
auto it = offsetMap.find(Key(range, edit, dir, paintId));
- if (it == offsetMap.end()) {
- LayoutCache::getInstance().getOrCreate(textBuf.substr(context),
- range - context.getStart(), paint, dir,
- startEdit, endEdit, f);
- } else {
- f(it->second, paint);
+ if (it != offsetMap.end()) {
+ const LayoutPiece& piece = it->second.mLayout;
+ const MinikinRect& bounds = it->second.mBounds;
+ if (boundsCalculation && !bounds.isValid()) {
+ f(piece, paint, LayoutPiece::calculateBounds(piece, paint));
+ } else {
+ f(piece, paint, bounds);
+ }
+ return;
}
+
+ LayoutCache::getInstance().getOrCreate(textBuf.substr(context), range - context.getStart(),
+ paint, dir, startEdit, endEdit, boundsCalculation,
+ f);
}
uint32_t findPaintId(const MinikinPaint& paint) const {
@@ -107,7 +119,7 @@ struct LayoutPieces {
uint32_t getMemoryUsage() const {
uint32_t result = 0;
for (const auto& i : offsetMap) {
- result += i.first.getMemoryUsage() + i.second.getMemoryUsage();
+ result += i.first.getMemoryUsage() + i.second.mLayout.getMemoryUsage();
}
result += (sizeof(MinikinPaint) + sizeof(uint32_t)) * paintMap.size();
return result;
diff --git a/include/minikin/LineBreakStyle.h b/include/minikin/LineBreakStyle.h
index f474cbd..aadf5bb 100644
--- a/include/minikin/LineBreakStyle.h
+++ b/include/minikin/LineBreakStyle.h
@@ -26,6 +26,8 @@ enum class LineBreakStyle : uint8_t {
Loose = 1,
Normal = 2,
Strict = 3,
+ NoBreak = 4,
+ Auto = 5,
};
// The line break word style(lw) of the strings.
@@ -33,6 +35,7 @@ enum class LineBreakStyle : uint8_t {
enum class LineBreakWordStyle : uint8_t {
None = 0,
Phrase = 1,
+ Auto = 2,
};
} // namespace minikin
diff --git a/include/minikin/LineBreaker.h b/include/minikin/LineBreaker.h
index 5d3e752..7fee1b7 100644
--- a/include/minikin/LineBreaker.h
+++ b/include/minikin/LineBreaker.h
@@ -99,6 +99,7 @@ public:
std::vector<float> ascents;
std::vector<float> descents;
std::vector<int> flags;
+ std::vector<MinikinRect> bounds;
LineBreakResult(LineBreakResult&&) = default;
LineBreakResult& operator=(LineBreakResult&&) = default;
@@ -109,6 +110,7 @@ public:
std::reverse(ascents.begin(), ascents.end());
std::reverse(descents.begin(), descents.end());
std::reverse(flags.begin(), flags.end());
+ std::reverse(bounds.begin(), bounds.end());
}
private:
@@ -118,7 +120,7 @@ private:
LineBreakResult breakIntoLines(const U16StringPiece& textBuffer, BreakStrategy strategy,
HyphenationFrequency frequency, bool justified,
const MeasuredText& measuredText, const LineWidth& lineWidth,
- const TabStops& tabStops);
+ const TabStops& tabStops, bool useBoundsForWidth);
} // namespace minikin
diff --git a/include/minikin/MeasuredText.h b/include/minikin/MeasuredText.h
index fa37eb6..a3b8bf1 100644
--- a/include/minikin/MeasuredText.h
+++ b/include/minikin/MeasuredText.h
@@ -31,6 +31,27 @@
namespace minikin {
+// Structs that of line metrics information.
+struct LineMetrics {
+ LineMetrics() : advance(0) {}
+ LineMetrics(const MinikinExtent& extent, const MinikinRect& bounds, float advance)
+ : extent(extent), bounds(bounds), advance(advance) {}
+
+ void append(const LineMetrics& metrics) {
+ append(metrics.extent, metrics.bounds, metrics.advance);
+ }
+
+ void append(const MinikinExtent& nextExtent, const MinikinRect& nextBounds, float nextAdvance) {
+ extent.extendBy(nextExtent);
+ bounds.join(nextBounds, advance, 0);
+ advance += nextAdvance;
+ }
+
+ MinikinExtent extent;
+ MinikinRect bounds;
+ float advance;
+};
+
class Run {
public:
Run(const Range& range) : mRange(range) {}
@@ -42,6 +63,9 @@ public:
// Returns true if this run can be broken into multiple pieces for line breaking.
virtual bool canBreak() const = 0;
+ // Returns true if this run can be hyphenated.
+ virtual bool canHyphenate() const = 0;
+
// Return the line break style(lb) for this run.
virtual LineBreakStyle lineBreakStyle() const = 0;
@@ -53,13 +77,17 @@ public:
// Fills the each character's advances, extents and overhangs.
virtual void getMetrics(const U16StringPiece& text, std::vector<float>* advances,
- LayoutPieces* precomputed, LayoutPieces* outPieces) const = 0;
+ std::vector<uint8_t>* flags, LayoutPieces* precomputed,
+ bool boundsCalculation, LayoutPieces* outPieces) const = 0;
virtual std::pair<float, MinikinRect> getBounds(const U16StringPiece& text, const Range& range,
const LayoutPieces& pieces) const = 0;
virtual MinikinExtent getExtent(const U16StringPiece& text, const Range& range,
const LayoutPieces& pieces) const = 0;
+ virtual LineMetrics getLineMetrics(const U16StringPiece& text, const Range& range,
+ const LayoutPieces& pieces) const = 0;
+
virtual void appendLayout(const U16StringPiece& text, const Range& range,
const Range& contextRange, const LayoutPieces& pieces,
const MinikinPaint& paint, uint32_t outOrigin,
@@ -93,11 +121,12 @@ protected:
class StyleRun : public Run {
public:
StyleRun(const Range& range, MinikinPaint&& paint, int lineBreakStyle, int lineBreakWordStyle,
- bool isRtl)
+ bool hyphenation, bool isRtl)
: Run(range),
mPaint(std::move(paint)),
mLineBreakStyle(lineBreakStyle),
mLineBreakWordStyle(lineBreakWordStyle),
+ mHyphenation(hyphenation),
mIsRtl(isRtl) {}
bool canBreak() const override { return true; }
@@ -107,11 +136,13 @@ public:
LineBreakWordStyle lineBreakWordStyle() const override {
return static_cast<LineBreakWordStyle>(mLineBreakWordStyle);
}
+ bool canHyphenate() const override { return mHyphenation; }
uint32_t getLocaleListId() const override { return mPaint.localeListId; }
bool isRtl() const override { return mIsRtl; }
void getMetrics(const U16StringPiece& text, std::vector<float>* advances,
- LayoutPieces* precomputed, LayoutPieces* outPieces) const override;
+ std::vector<uint8_t>* flags, LayoutPieces* precomputed, bool boundsCalculation,
+ LayoutPieces* outPieces) const override;
std::pair<float, MinikinRect> getBounds(const U16StringPiece& text, const Range& range,
const LayoutPieces& pieces) const override;
@@ -119,6 +150,9 @@ public:
MinikinExtent getExtent(const U16StringPiece& text, const Range& range,
const LayoutPieces& pieces) const override;
+ LineMetrics getLineMetrics(const U16StringPiece& text, const Range& range,
+ const LayoutPieces& pieces) const override;
+
void appendLayout(const U16StringPiece& text, const Range& range, const Range& contextRange,
const LayoutPieces& pieces, const MinikinPaint& paint, uint32_t outOrigin,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen,
@@ -135,6 +169,7 @@ private:
MinikinPaint mPaint;
int mLineBreakStyle;
int mLineBreakWordStyle;
+ const bool mHyphenation;
const bool mIsRtl;
};
@@ -145,12 +180,14 @@ public:
bool isRtl() const { return false; }
bool canBreak() const { return false; }
+ bool canHyphenate() const { return false; }
LineBreakStyle lineBreakStyle() const override { return LineBreakStyle::None; }
LineBreakWordStyle lineBreakWordStyle() const override { return LineBreakWordStyle::None; }
uint32_t getLocaleListId() const { return mLocaleListId; }
void getMetrics(const U16StringPiece& /* text */, std::vector<float>* advances,
- LayoutPieces* /* precomputed */, LayoutPieces* /* outPieces */) const override {
+ std::vector<uint8_t>* /*flags*/, LayoutPieces* /* precomputed */, bool,
+ LayoutPieces* /* outPieces */) const override {
(*advances)[mRange.getStart()] = mWidth;
// TODO: Get the extents information from the caller.
}
@@ -167,6 +204,11 @@ public:
return MinikinExtent();
}
+ LineMetrics getLineMetrics(const U16StringPiece& /*text*/, const Range& /*range*/,
+ const LayoutPieces& /*pieces*/) const override {
+ return LineMetrics();
+ }
+
void appendLayout(const U16StringPiece& /* text */, const Range& /* range */,
const Range& /* contextRange */, const LayoutPieces& /* pieces */,
const MinikinPaint& /* paint */, uint32_t /* outOrigin */,
@@ -209,10 +251,45 @@ public:
// The style information.
std::vector<std::unique_ptr<Run>> runs;
+ // Per character flags.
+ // The loweset bit represents that that character *may* have overhang. If this bit is not set,
+ // the character doesn't have overhang. If this bit is set, the character *may* have overhang.
+ // This information is used for determining using the bounding box based line breaking.
+ static constexpr uint8_t MAY_OVERHANG_BIT = 0b0000'0001;
+ std::vector<uint8_t> flags;
+
// The copied layout pieces for construcing final layouts.
// TODO: Stop assigning width/extents if layout pieces are available for reducing memory impact.
LayoutPieces layoutPieces;
+ bool hasOverhang(const Range& range) const {
+ // Heuristics: Check first 5 and last 5 characters and treat there is overhang if at least
+ // one character has overhang.
+ constexpr uint32_t CHARS_TO_DUMPER = 5;
+
+ if (range.getLength() < CHARS_TO_DUMPER * 2) {
+ for (uint32_t i : range) {
+ if ((flags[i] & MAY_OVERHANG_BIT) == MAY_OVERHANG_BIT) {
+ return true;
+ }
+ }
+ } else {
+ Range first = Range(range.getStart(), range.getStart() + CHARS_TO_DUMPER);
+ Range last = Range(range.getEnd() - CHARS_TO_DUMPER, range.getEnd());
+ for (uint32_t i : first) {
+ if ((flags[i] & MAY_OVERHANG_BIT) == MAY_OVERHANG_BIT) {
+ return true;
+ }
+ }
+ for (uint32_t i : last) {
+ if ((flags[i] & MAY_OVERHANG_BIT) == MAY_OVERHANG_BIT) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
uint32_t getMemoryUsage() const {
return sizeof(float) * widths.size() + sizeof(HyphenBreak) * hyphenBreaks.size() +
layoutPieces.getMemoryUsage();
@@ -223,6 +300,7 @@ public:
EndHyphenEdit endHyphen);
MinikinRect getBounds(const U16StringPiece& textBuf, const Range& range) const;
MinikinExtent getExtent(const U16StringPiece& textBuf, const Range& range) const;
+ LineMetrics getLineMetrics(const U16StringPiece& textBuf, const Range& range) const;
MeasuredText(MeasuredText&&) = default;
MeasuredText& operator=(MeasuredText&&) = default;
@@ -233,14 +311,15 @@ private:
friend class MeasuredTextBuilder;
void measure(const U16StringPiece& textBuf, bool computeHyphenation, bool computeLayout,
- bool ignoreHyphenKerning, MeasuredText* hint);
+ bool computeBounds, bool ignoreHyphenKerning, MeasuredText* hint);
// Use MeasuredTextBuilder instead.
MeasuredText(const U16StringPiece& textBuf, std::vector<std::unique_ptr<Run>>&& runs,
- bool computeHyphenation, bool computeLayout, bool ignoreHyphenKerning,
- MeasuredText* hint)
- : widths(textBuf.size()), runs(std::move(runs)) {
- measure(textBuf, computeHyphenation, computeLayout, ignoreHyphenKerning, hint);
+ bool computeHyphenation, bool computeLayout, bool computeBounds,
+ bool ignoreHyphenKerning, MeasuredText* hint)
+ : widths(textBuf.size()), runs(std::move(runs)), flags(textBuf.size(), 0) {
+ measure(textBuf, computeHyphenation, computeLayout, computeBounds, ignoreHyphenKerning,
+ hint);
}
};
@@ -249,9 +328,10 @@ public:
MeasuredTextBuilder() {}
void addStyleRun(int32_t start, int32_t end, MinikinPaint&& paint, int lineBreakStyle,
- int lineBreakWordStyle, bool isRtl) {
+ int lineBreakWordStyle, bool hyphenation, bool isRtl) {
mRuns.emplace_back(std::make_unique<StyleRun>(Range(start, end), std::move(paint),
- lineBreakStyle, lineBreakWordStyle, isRtl));
+ lineBreakStyle, lineBreakWordStyle,
+ hyphenation, isRtl));
}
void addReplacementRun(int32_t start, int32_t end, float width, uint32_t localeListId) {
@@ -267,10 +347,16 @@ public:
std::unique_ptr<MeasuredText> build(const U16StringPiece& textBuf, bool computeHyphenation,
bool computeLayout, bool ignoreHyphenKerning,
MeasuredText* hint) {
+ return build(textBuf, computeHyphenation, computeLayout, false, ignoreHyphenKerning, hint);
+ }
+
+ std::unique_ptr<MeasuredText> build(const U16StringPiece& textBuf, bool computeHyphenation,
+ bool computeLayout, bool computeBounds,
+ bool ignoreHyphenKerning, MeasuredText* hint) {
// Unable to use make_unique here since make_unique is not a friend of MeasuredText.
- return std::unique_ptr<MeasuredText>(new MeasuredText(textBuf, std::move(mRuns),
- computeHyphenation, computeLayout,
- ignoreHyphenKerning, hint));
+ return std::unique_ptr<MeasuredText>(
+ new MeasuredText(textBuf, std::move(mRuns), computeHyphenation, computeLayout,
+ computeBounds, ignoreHyphenKerning, hint));
}
MINIKIN_PREVENT_COPY_ASSIGN_AND_MOVE(MeasuredTextBuilder);
diff --git a/include/minikin/MinikinExtent.h b/include/minikin/MinikinExtent.h
index ac9b49f..baa56ff 100644
--- a/include/minikin/MinikinExtent.h
+++ b/include/minikin/MinikinExtent.h
@@ -25,24 +25,29 @@ namespace minikin {
struct MinikinExtent {
MinikinExtent() : ascent(0), descent(0) {}
MinikinExtent(float ascent, float descent) : ascent(ascent), descent(descent) {}
- bool operator==(const MinikinExtent& o) const {
- return ascent == o.ascent && descent == o.descent;
- }
- float ascent; // negative
- float descent; // positive
-
- void reset() { ascent = descent = 0.0; }
void extendBy(const MinikinExtent& e) {
ascent = std::min(ascent, e.ascent);
descent = std::max(descent, e.descent);
}
+
+ float ascent; // negative
+ float descent; // positive
};
// For gtest output
inline std::ostream& operator<<(std::ostream& os, const MinikinExtent& e) {
- return os << e.ascent << ", " << e.descent;
+ return os << "(ascent = " << e.ascent << ", descent = " << e.descent << ")";
+}
+
+inline bool operator==(const MinikinExtent& l, const MinikinExtent& r) {
+ return l.ascent == r.ascent && l.descent == r.descent;
}
+
+inline bool operator!=(const MinikinExtent& l, const MinikinExtent& r) {
+ return !(l == r);
+}
+
} // namespace minikin
#endif // MINIKIN_MINIKIN_EXTENT_H
diff --git a/include/minikin/MinikinFont.h b/include/minikin/MinikinFont.h
index 4d3ba9c..6d5f006 100644
--- a/include/minikin/MinikinFont.h
+++ b/include/minikin/MinikinFont.h
@@ -75,10 +75,6 @@ public:
const std::vector<FontVariation>&) const {
return nullptr;
}
-
- static uint32_t MakeTag(char c1, char c2, char c3, char c4) {
- return ((uint32_t)c1 << 24) | ((uint32_t)c2 << 16) | ((uint32_t)c3 << 8) | (uint32_t)c4;
- }
};
} // namespace minikin
diff --git a/include/minikin/MinikinPaint.h b/include/minikin/MinikinPaint.h
index 54b476f..04cab1d 100644
--- a/include/minikin/MinikinPaint.h
+++ b/include/minikin/MinikinPaint.h
@@ -23,6 +23,7 @@
#include "minikin/FamilyVariant.h"
#include "minikin/FontCollection.h"
#include "minikin/FontFamily.h"
+#include "minikin/FontFeature.h"
#include "minikin/Hasher.h"
namespace minikin {
@@ -45,7 +46,7 @@ enum MinikinFontFlags {
};
// Possibly move into own .h file?
-// Note: if you add a field here, either add it to LayoutCacheKey or to skipCache()
+// Note: if you add a field here, either add it to LayoutCacheKey
struct MinikinPaint {
MinikinPaint(const std::shared_ptr<FontCollection>& font)
: size(0),
@@ -59,7 +60,7 @@ struct MinikinPaint {
fontFeatureSettings(),
font(font) {}
- bool skipCache() const { return !fontFeatureSettings.empty(); }
+ bool skipCache() const;
float size;
float scaleX;
@@ -70,7 +71,7 @@ struct MinikinPaint {
uint32_t localeListId;
FontStyle fontStyle;
FamilyVariant familyVariant;
- std::string fontFeatureSettings;
+ std::vector<FontFeature> fontFeatureSettings;
std::shared_ptr<FontCollection> font;
void copyFrom(const MinikinPaint& paint) { *this = paint; }
@@ -100,7 +101,7 @@ struct MinikinPaint {
.update(localeListId)
.update(fontStyle.identifier())
.update(static_cast<uint8_t>(familyVariant))
- .updateString(fontFeatureSettings)
+ .update(fontFeatureSettings)
.update(font->getId())
.hash();
}
diff --git a/include/minikin/MinikinRect.h b/include/minikin/MinikinRect.h
index 38c2180..f37cc2f 100644
--- a/include/minikin/MinikinRect.h
+++ b/include/minikin/MinikinRect.h
@@ -19,45 +19,63 @@
#include <ostream>
+#include "minikin/Point.h"
+
namespace minikin {
struct MinikinRect {
MinikinRect() : mLeft(0), mTop(0), mRight(0), mBottom(0) {}
MinikinRect(float left, float top, float right, float bottom)
: mLeft(left), mTop(top), mRight(right), mBottom(bottom) {}
- bool operator==(const MinikinRect& o) const {
- return mLeft == o.mLeft && mTop == o.mTop && mRight == o.mRight && mBottom == o.mBottom;
- }
- bool operator!=(const MinikinRect& o) const { return !(*this == o); }
- float mLeft;
- float mTop;
- float mRight;
- float mBottom;
bool isEmpty() const { return mLeft == mRight || mTop == mBottom; }
- void set(const MinikinRect& r) {
- mLeft = r.mLeft;
- mTop = r.mTop;
- mRight = r.mRight;
- mBottom = r.mBottom;
- }
+ bool isValid() const { return !std::isnan(mLeft); }
+ float width() const { return mRight - mLeft; }
+
+ void setEmpty() { mLeft = mRight = mTop = mBottom = 0; }
+
+ // Shift the rectangle with given amount.
void offset(float dx, float dy) {
mLeft += dx;
mTop += dy;
mRight += dx;
mBottom += dy;
}
- void setEmpty() { mLeft = mTop = mRight = mBottom = 0.0; }
- void join(const MinikinRect& r) {
+
+ // Update the rectangle with the union of the given rectangle with shifting.
+ void join(float l, float t, float r, float b, float dx, float dy) {
if (isEmpty()) {
- set(r);
- } else if (!r.isEmpty()) {
- mLeft = std::min(mLeft, r.mLeft);
- mTop = std::min(mTop, r.mTop);
- mRight = std::max(mRight, r.mRight);
- mBottom = std::max(mBottom, r.mBottom);
+ mLeft = l + dx;
+ mTop = t + dy;
+ mRight = r + dx;
+ mBottom = b + dy;
+ } else {
+ mLeft = std::min(mLeft, l + dx);
+ mTop = std::min(mTop, t + dy);
+ mRight = std::max(mRight, r + dx);
+ mBottom = std::max(mBottom, b + dy);
}
}
+
+ void offset(const Point& p) { offset(p.x, p.y); }
+ void join(const MinikinRect& r) { return join(r.mLeft, r.mTop, r.mRight, r.mBottom, 0, 0); }
+ void join(const MinikinRect& r, float dx, float dy) {
+ return join(r.mLeft, r.mTop, r.mRight, r.mBottom, dx, dy);
+ }
+ void join(const MinikinRect& r, const Point& p) {
+ return join(r.mLeft, r.mTop, r.mRight, r.mBottom, p.x, p.y);
+ }
+
+ static MinikinRect makeInvalid() {
+ return MinikinRect(
+ std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN(),
+ std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN());
+ }
+
+ float mLeft;
+ float mTop;
+ float mRight;
+ float mBottom;
};
// For gtest output
@@ -65,6 +83,14 @@ inline std::ostream& operator<<(std::ostream& os, const MinikinRect& r) {
return os << "(" << r.mLeft << ", " << r.mTop << ")-(" << r.mRight << ", " << r.mBottom << ")";
}
+inline bool operator==(const MinikinRect& l, const MinikinRect& r) {
+ return l.mLeft == r.mLeft && l.mTop == r.mTop && l.mRight == r.mRight && l.mBottom == r.mBottom;
+}
+
+inline bool operator!=(const MinikinRect& l, const MinikinRect& r) {
+ return !(l == r);
+}
+
} // namespace minikin
#endif // MINIKIN_MINIKIN_RECT_H
diff --git a/include/minikin/Point.h b/include/minikin/Point.h
new file mode 100644
index 0000000..c3fe2f3
--- /dev/null
+++ b/include/minikin/Point.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_POINT_H
+#define MINIKIN_POINT_H
+
+#include <ostream>
+
+namespace minikin {
+
+struct Point {
+ Point(float x, float y) : x(x), y(y) {}
+ float x, y;
+};
+
+// For gtest
+inline std::ostream& operator<<(std::ostream& os, const Point& p) {
+ return os << "(" << p.x << ", " << p.y << ")";
+}
+
+inline bool operator==(const Point& l, const Point& r) {
+ return l.x == r.x && l.y == r.y;
+}
+
+inline bool operator!=(const Point& l, const Point& r) {
+ return !(l == r);
+}
+
+} // namespace minikin
+
+#endif // MINIKIN_POINT_H
diff --git a/include/minikin/Range.h b/include/minikin/Range.h
index 991912d..f8b8ba8 100644
--- a/include/minikin/Range.h
+++ b/include/minikin/Range.h
@@ -19,6 +19,7 @@
#include <algorithm>
#include <limits>
+#include <ostream>
#include <utility>
namespace minikin {
@@ -117,6 +118,11 @@ private:
uint32_t mEnd;
};
+// For gtest output
+inline std::ostream& operator<<(std::ostream& os, const Range& r) {
+ return os << "(" << r.getStart() << ", " << r.getEnd() << ")";
+}
+
} // namespace minikin
#endif // MINIKIN_RANGE_H
diff --git a/libs/minikin/Android.bp b/libs/minikin/Android.bp
index 5c7abf2..d23f053 100644
--- a/libs/minikin/Android.bp
+++ b/libs/minikin/Android.bp
@@ -28,7 +28,6 @@ cc_library {
host_supported: true,
srcs: [
"BidiUtils.cpp",
- "BoundsCache.cpp",
"CmapCoverage.cpp",
"Emoji.cpp",
"Font.cpp",
@@ -53,6 +52,7 @@ cc_library {
"MinikinFontFactory.cpp",
"MinikinInternal.cpp",
"OptimalLineBreaker.cpp",
+ "ScriptUtils.cpp",
"SparseBitSet.cpp",
"SystemFonts.cpp",
"WordBreaker.cpp",
@@ -68,12 +68,16 @@ cc_library {
product_variables: {
debuggable: {
// Enable assertion on eng and userdebug build.
- cppflags: ["-DENABLE_ASSERTION"],
+ srcs: [
+ "Debug.cpp",
+ ],
+ cppflags: [ "-DENABLE_ASSERTION" ],
},
},
shared_libs: [
"liblog",
"libharfbuzz_ng",
+ "libcutils",
],
header_libs: [
"libbase_headers",
@@ -86,6 +90,7 @@ cc_library {
android: {
shared_libs: [
"libicu",
+ "aconfig_text_flags_c_lib",
],
export_shared_lib_headers: [
"libicu",
diff --git a/libs/minikin/BoundsCache.cpp b/libs/minikin/BoundsCache.cpp
deleted file mode 100644
index 1edc853..0000000
--- a/libs/minikin/BoundsCache.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "minikin/BoundsCache.h"
-
-namespace minikin {
-
-void ValueExtractor::operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint) {
- value.reset(new BoundsValue);
- value->rect = BoundsCache::getBounds(layoutPiece, paint);
- value->advance = layoutPiece.advance();
-}
-
-// static
-MinikinRect BoundsCache::getBounds(const LayoutPiece& layoutPiece, const MinikinPaint& paint) {
- MinikinRect pieceBounds;
- MinikinRect tmpRect;
- for (uint32_t i = 0; i < layoutPiece.glyphCount(); ++i) {
- const FakedFont& font = layoutPiece.fontAt(i);
- const Point& point = layoutPiece.pointAt(i);
-
- MinikinFont* minikinFont = font.font->typeface().get();
- minikinFont->GetBounds(&tmpRect, layoutPiece.glyphIdAt(i), paint, font.fakery);
- tmpRect.offset(point.x, point.y);
- pieceBounds.join(tmpRect);
- }
- return pieceBounds;
-}
-
-} // namespace minikin
diff --git a/libs/minikin/Debug.cpp b/libs/minikin/Debug.cpp
new file mode 100644
index 0000000..8168a77
--- /dev/null
+++ b/libs/minikin/Debug.cpp
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "minikin/Debug.h"
+
+#include <unicode/utf16.h>
+#include <unicode/utf8.h>
+
+#include <sstream>
+
+#include "minikin/FontFeature.h"
+#include "minikin/FontFileParser.h"
+#include "minikin/LayoutCore.h"
+#include "minikin/LocaleList.h"
+#include "minikin/MinikinExtent.h"
+#include "minikin/MinikinPaint.h"
+#include "minikin/MinikinRect.h"
+#include "minikin/Point.h"
+#include "minikin/Range.h"
+#include "minikin/U16StringPiece.h"
+
+namespace minikin {
+
+namespace debug {
+
+std::string toUtf8(const U16StringPiece& text) {
+ std::string output;
+ output.resize(text.size() * 4);
+ uint32_t in_i = 0;
+ uint32_t out_i = 0;
+ bool isError = false;
+
+ while (in_i < text.size()) {
+ uint32_t ch;
+ U16_NEXT(text, in_i, text.size(), ch);
+ U8_APPEND(output, out_i, output.size(), ch, isError);
+ if (isError) {
+ return "";
+ }
+ }
+
+ output.resize(out_i);
+ return output;
+}
+
+std::string toString(const Point& point) {
+ std::stringstream ss;
+ ss << point;
+ return ss.str();
+}
+
+std::string toString(const MinikinRect& rect) {
+ std::stringstream ss;
+ ss << rect;
+ return ss.str();
+}
+
+std::string toString(const Range& range) {
+ std::stringstream ss;
+ ss << range;
+ return ss.str();
+}
+
+std::string toString(const MinikinExtent& extent) {
+ std::stringstream ss;
+ ss << extent;
+ return ss.str();
+}
+
+std::string toString(const FontFeature& feature) {
+ std::stringstream ss;
+ ss << feature;
+ return ss.str();
+}
+
+std::string toString(const std::vector<FontFeature>& features) {
+ std::stringstream ss;
+ ss << features;
+ return ss.str();
+}
+
+std::string toString(const LayoutPiece& layout) {
+ std::stringstream ss;
+ ss << "{advance=" << layout.advance() << ", extent=" << toString(layout.extent())
+ << ", glyphs=";
+
+ for (uint32_t i = 0; i < layout.glyphCount(); ++i) {
+ ss << "{id:" << layout.glyphIdAt(i) << ", pos = " << toString(layout.pointAt(i))
+ << ", font = \""
+ << FontFileParser(layout.fontAt(i).hbFont()).getPostScriptName().value_or("[UNKNOWN]")
+ << "\"}, ";
+ }
+ return ss.str();
+}
+
+std::string toString(const MinikinPaint& paint) {
+ std::stringstream ss;
+ ss << "{size=" << paint.size << ", scaleX=" << paint.scaleX << ", skewX=" << paint.skewX
+ << ", letterSpacing=" << paint.letterSpacing << ", wordSpacing=" << paint.wordSpacing
+ << ", fontFlags=" << paint.fontFlags
+ << ", localeList=" << getLocaleString(paint.localeListId)
+ << ", fontStyle=" << paint.fontStyle << ", familyVariant=" << paint.familyVariant
+ << ", fontFeatureSettings=" << paint.fontFeatureSettings
+ << ", fontCollectionId=" << paint.font->getId();
+ return ss.str();
+}
+
+} // namespace debug
+
+} // namespace minikin
diff --git a/libs/minikin/FeatureFlags.h b/libs/minikin/FeatureFlags.h
new file mode 100644
index 0000000..9cfcf9d
--- /dev/null
+++ b/libs/minikin/FeatureFlags.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_FEATURE_FLAGS_H
+#define MINIKIN_FEATURE_FLAGS_H
+
+#ifdef __ANDROID__
+#include <com_android_text_flags.h>
+#endif // __ANDROID__
+
+namespace features {
+
+#ifdef __ANDROID__
+#define DEFINE_FEATURE_FLAG_ACCESSOROR(feature_name) \
+ inline bool feature_name() { \
+ static bool flag = com_android_text_flags_##feature_name(); \
+ return flag; \
+ }
+#else // __ANDROID__
+#define DEFINE_FEATURE_FLAG_ACCESSOROR(feature_name) \
+ inline bool feature_name() { \
+ return true; \
+ }
+#endif // __ANDROID__
+
+DEFINE_FEATURE_FLAG_ACCESSOROR(phrase_strict_fallback)
+DEFINE_FEATURE_FLAG_ACCESSOROR(word_style_auto)
+DEFINE_FEATURE_FLAG_ACCESSOROR(inter_character_justification)
+
+} // namespace features
+
+#endif // FEATURE_FLAGS
diff --git a/libs/minikin/Font.cpp b/libs/minikin/Font.cpp
index bf7450a..a044b90 100644
--- a/libs/minikin/Font.cpp
+++ b/libs/minikin/Font.cpp
@@ -27,12 +27,35 @@
#include "FontUtils.h"
#include "LocaleListCache.h"
#include "MinikinInternal.h"
+#include "minikin/Constants.h"
#include "minikin/HbUtils.h"
#include "minikin/MinikinFont.h"
#include "minikin/MinikinFontFactory.h"
namespace minikin {
+namespace {
+
+// |-------|-------|
+// X : (1 bit) 1 if weight variation is available, otherwise 0.
+// Y : (1 bit) 1 if italic variation is available, otherwise 0.
+// I : (1 bit) 1 for italic, 0 for upright
+// WWWWWWWWWW : (10 bits) unsigned 10 bits integer for weight value.
+inline uint16_t packKey(int wght, int ital) {
+ uint16_t res = 0;
+ if (wght != -1) {
+ res |= 1u;
+ res |= static_cast<uint16_t>(wght) << 3;
+ }
+ if (ital != -1) {
+ res |= 1u << 1;
+ res |= (ital == 1) ? 1 << 2 : 0;
+ }
+ return res;
+}
+
+} // namespace
+
std::shared_ptr<Font> Font::Builder::build() {
if (mIsWeightSet && mIsSlantSet) {
// No need to read OS/2 header of the font file.
@@ -62,7 +85,7 @@ Font::Font(BufferReader* reader) : mExternalRefsHolder(nullptr), mTypefaceMetada
void Font::writeTo(BufferWriter* writer) const {
mStyle.writeTo(writer);
LocaleListCache::writeTo(writer, mLocaleListId);
- MinikinFontFactory::getInstance().write(writer, typeface().get());
+ MinikinFontFactory::getInstance().write(writer, baseTypeface().get());
}
Font::Font(Font&& o) noexcept
@@ -91,7 +114,7 @@ void Font::resetExternalRefs(ExternalRefs* refs) {
}
}
-const std::shared_ptr<MinikinFont>& Font::typeface() const {
+const std::shared_ptr<MinikinFont>& Font::baseTypeface() const {
return getExternalRefs()->mTypeface;
}
@@ -154,7 +177,7 @@ HbFontUniquePtr Font::prepareFont(const std::shared_ptr<MinikinFont>& typeface)
// static
FontStyle Font::analyzeStyle(const HbFontUniquePtr& font) {
- HbBlob os2Table(font, MinikinFont::MakeTag('O', 'S', '/', '2'));
+ HbBlob os2Table(font, MakeTag('O', 'S', '/', '2'));
if (!os2Table) {
return FontStyle();
}
@@ -169,7 +192,7 @@ FontStyle Font::analyzeStyle(const HbFontUniquePtr& font) {
}
std::unordered_set<AxisTag> Font::getSupportedAxes() const {
- HbBlob fvarTable(baseFont(), MinikinFont::MakeTag('f', 'v', 'a', 'r'));
+ HbBlob fvarTable(baseFont(), MakeTag('f', 'v', 'a', 'r'));
if (!fvarTable) {
return std::unordered_set<AxisTag>();
}
@@ -178,4 +201,75 @@ std::unordered_set<AxisTag> Font::getSupportedAxes() const {
return supportedAxes;
}
+HbFontUniquePtr Font::getAdjustedFont(int wght, int ital) const {
+ if (wght == -1 && ital == -1) {
+ return HbFontUniquePtr(hb_font_reference(baseFont().get()));
+ }
+
+ HbFontUniquePtr font(hb_font_create_sub_font(baseFont().get()));
+ std::vector<hb_variation_t> variations;
+ variations.reserve(baseTypeface()->GetAxes().size());
+ for (const FontVariation& variation : baseTypeface()->GetAxes()) {
+ if (wght != -1 && variation.axisTag == TAG_wght) {
+ continue; // Add wght axis later
+ } else if (ital != -1 && variation.axisTag == TAG_ital) {
+ continue; // Add ital axis later
+ } else {
+ variations.push_back({variation.axisTag, variation.value});
+ }
+ }
+ if (wght != -1) {
+ variations.push_back({TAG_wght, static_cast<float>(wght)});
+ }
+ if (ital != -1) {
+ variations.push_back({TAG_ital, static_cast<float>(ital)});
+ }
+ hb_font_set_variations(font.get(), variations.data(), variations.size());
+ return font;
+}
+
+const std::shared_ptr<MinikinFont>& Font::getAdjustedTypeface(int wght, int ital) const {
+ return getExternalRefs()->getAdjustedTypeface(wght, ital);
+}
+
+const std::shared_ptr<MinikinFont>& Font::ExternalRefs::getAdjustedTypeface(int wght,
+ int ital) const {
+ if (wght == -1 && ital == -1) {
+ return mTypeface;
+ }
+
+ const uint16_t key = packKey(wght, ital);
+
+ std::lock_guard<std::mutex> lock(mMutex);
+
+ std::map<uint16_t, std::shared_ptr<MinikinFont>>::iterator it = mVarTypefaceCache.find(key);
+ if (it != mVarTypefaceCache.end()) {
+ return it->second;
+ }
+
+ std::vector<FontVariation> variations;
+ variations.reserve(mTypeface->GetAxes().size());
+ for (const FontVariation& variation : mTypeface->GetAxes()) {
+ if (wght != -1 && variation.axisTag == TAG_wght) {
+ continue; // Add wght axis later
+ } else if (ital != -1 && variation.axisTag == TAG_ital) {
+ continue; // Add ital axis later
+ } else {
+ variations.push_back({variation.axisTag, variation.value});
+ }
+ }
+ if (wght != -1) {
+ variations.push_back({TAG_wght, static_cast<float>(wght)});
+ }
+ if (ital != -1) {
+ variations.push_back({TAG_ital, static_cast<float>(ital)});
+ }
+ std::shared_ptr<MinikinFont> newTypeface = mTypeface->createFontWithVariation(variations);
+
+ auto [result_iterator, _] =
+ mVarTypefaceCache.insert(std::make_pair(key, std::move(newTypeface)));
+
+ return result_iterator->second;
+}
+
} // namespace minikin
diff --git a/libs/minikin/FontCollection.cpp b/libs/minikin/FontCollection.cpp
index 0c1a173..84e5dd9 100644
--- a/libs/minikin/FontCollection.cpp
+++ b/libs/minikin/FontCollection.cpp
@@ -30,6 +30,8 @@
#include "minikin/Characters.h"
#include "minikin/Emoji.h"
#include "minikin/FontFileParser.h"
+#include "minikin/MinikinExtent.h"
+#include "minikin/MinikinPaint.h"
using std::vector;
@@ -606,6 +608,89 @@ FontCollection::FamilyMatchResult FontCollection::FamilyMatchResult::intersect(
return b.build();
}
+void FontCollection::filterFamilyByLocale(
+ const LocaleList& localeList,
+ const std::function<void(const FontFamily& family)>& callback) const {
+ for (uint8_t i = 0; i < mFamilyCount; ++i) {
+ const auto& family = getFamilyAt(i);
+
+ uint32_t fontLocaleId = family->localeListId();
+ if (fontLocaleId == LocaleListCache::kInvalidListId) {
+ continue;
+ }
+ const LocaleList& fontLocaleList = LocaleListCache::getById(fontLocaleId);
+ if (!localeList.atLeastOneScriptMatch(fontLocaleList)) {
+ continue;
+ }
+
+ callback(*family.get());
+ }
+}
+
+MinikinExtent FontCollection::getReferenceExtentForLocale(const MinikinPaint& paint) const {
+ uint32_t localeId = paint.localeListId;
+ MinikinExtent result(0, 0);
+ for (uint8_t i = 0; i < mFamilyCount; ++i) {
+ const auto& family = getFamilyAt(i);
+ if (!family->isCustomFallback()) {
+ break;
+ }
+
+ // Use this family
+ MinikinExtent extent(0, 0);
+ FakedFont font = getFamilyAt(i)->getClosestMatch(paint.fontStyle);
+ font.typeface()->GetFontExtent(&extent, paint, font.fakery);
+ result.extendBy(extent);
+ }
+
+ if (localeId == LocaleListCache::kInvalidListId) {
+ return result;
+ }
+
+ // If default is requested, use compact one.
+ const FamilyVariant requestVariant = paint.familyVariant == FamilyVariant::DEFAULT
+ ? FamilyVariant::COMPACT
+ : paint.familyVariant;
+ const LocaleList& requestedLocaleList = LocaleListCache::getById(localeId);
+
+ bool familyFound = false;
+ filterFamilyByLocale(requestedLocaleList, [&](const FontFamily& family) {
+ const FamilyVariant familyVariant = family.variant() == FamilyVariant::DEFAULT
+ ? FamilyVariant::COMPACT
+ : family.variant();
+
+ if (familyVariant != requestVariant) {
+ return;
+ }
+
+ MinikinExtent extent(0, 0);
+ FakedFont font = family.getClosestMatch(paint.fontStyle);
+ font.typeface()->GetFontExtent(&extent, paint, font.fakery);
+ result.extendBy(extent);
+
+ familyFound = true;
+ });
+
+ // If nothing matches, try non-variant match cases since it is used for fallback.
+ filterFamilyByLocale(requestedLocaleList, [&](const FontFamily& family) {
+ // Use this family
+ MinikinExtent extent(0, 0);
+ FakedFont font = family.getClosestMatch(paint.fontStyle);
+ font.typeface()->GetFontExtent(&extent, paint, font.fakery);
+ result.extendBy(extent);
+
+ familyFound = true;
+ });
+
+ // If nothing matches, use default font.
+ if (!familyFound) {
+ FakedFont font = getFamilyAt(0)->getClosestMatch(paint.fontStyle);
+ font.typeface()->GetFontExtent(&result, paint, font.fakery);
+ }
+
+ return result;
+}
+
std::vector<FontCollection::Run> FontCollection::itemize(U16StringPiece text, FontStyle,
uint32_t localeListId,
FamilyVariant familyVariant,
diff --git a/libs/minikin/FontFamily.cpp b/libs/minikin/FontFamily.cpp
index 836674c..e6da84e 100644
--- a/libs/minikin/FontFamily.cpp
+++ b/libs/minikin/FontFamily.cpp
@@ -29,6 +29,7 @@
#include "LocaleListCache.h"
#include "MinikinInternal.h"
#include "minikin/CmapCoverage.h"
+#include "minikin/Constants.h"
#include "minikin/FamilyVariant.h"
#include "minikin/HbUtils.h"
#include "minikin/MinikinFont.h"
@@ -44,21 +45,23 @@ std::shared_ptr<FontFamily> FontFamily::create(std::vector<std::shared_ptr<Font>
std::shared_ptr<FontFamily> FontFamily::create(FamilyVariant variant,
std::vector<std::shared_ptr<Font>>&& fonts) {
return create(kEmptyLocaleListId, variant, std::move(fonts), false /* isCustomFallback */,
- false /* isDefaultFallback */);
+ false /* isDefaultFallback */, VariationFamilyType::None);
}
// static
std::shared_ptr<FontFamily> FontFamily::create(uint32_t localeListId, FamilyVariant variant,
std::vector<std::shared_ptr<Font>>&& fonts,
- bool isCustomFallback, bool isDefaultFallback) {
+ bool isCustomFallback, bool isDefaultFallback,
+ VariationFamilyType varFamilyType) {
// TODO(b/174672300): Revert back to make_shared.
return std::shared_ptr<FontFamily>(new FontFamily(localeListId, variant, std::move(fonts),
- isCustomFallback, isDefaultFallback));
+ isCustomFallback, isDefaultFallback,
+ varFamilyType));
}
FontFamily::FontFamily(uint32_t localeListId, FamilyVariant variant,
std::vector<std::shared_ptr<Font>>&& fonts, bool isCustomFallback,
- bool isDefaultFallback)
+ bool isDefaultFallback, VariationFamilyType varFamilyType)
: mFonts(std::make_unique<std::shared_ptr<Font>[]>(fonts.size())),
// computeCoverage may update supported axes and coverages later.
mSupportedAxes(nullptr),
@@ -72,7 +75,8 @@ FontFamily::FontFamily(uint32_t localeListId, FamilyVariant variant,
mIsColorEmoji(LocaleListCache::getById(localeListId).getEmojiStyle() ==
EmojiStyle::EMOJI),
mIsCustomFallback(isCustomFallback),
- mIsDefaultFallback(isDefaultFallback) {
+ mIsDefaultFallback(isDefaultFallback),
+ mVarFamilyType(varFamilyType) {
MINIKIN_ASSERT(!fonts.empty(), "FontFamily must contain at least one font.");
MINIKIN_ASSERT(fonts.size() <= std::numeric_limits<uint32_t>::max(),
"Number of fonts must be less than 2^32.");
@@ -107,6 +111,7 @@ FontFamily::FontFamily(BufferReader* reader, const std::shared_ptr<std::vector<F
mIsColorEmoji = static_cast<bool>(reader->read<uint8_t>());
mIsCustomFallback = static_cast<bool>(reader->read<uint8_t>());
mIsDefaultFallback = static_cast<bool>(reader->read<uint8_t>());
+ mVarFamilyType = reader->read<VariationFamilyType>();
mCoverage = SparseBitSet(reader);
// Read mCmapFmt14Coverage. As it can have null entries, it is stored in the buffer as a sparse
// array (size, non-null entry count, array of (index, entry)).
@@ -133,6 +138,7 @@ void FontFamily::writeTo(BufferWriter* writer, uint32_t* fontIndex) const {
writer->write<uint8_t>(mIsColorEmoji);
writer->write<uint8_t>(mIsCustomFallback);
writer->write<uint8_t>(mIsDefaultFallback);
+ writer->write<VariationFamilyType>(mVarFamilyType);
mCoverage.writeTo(writer);
// Write mCmapFmt14Coverage as a sparse array (size, non-null entry count,
// array of (index, entry))
@@ -223,6 +229,9 @@ static FontFakery computeFakery(FontStyle wanted, FontStyle actual) {
}
FakedFont FontFamily::getClosestMatch(FontStyle style) const {
+ if (mVarFamilyType != VariationFamilyType::None) {
+ return getVariationFamilyAdjustment(style);
+ }
int bestIndex = 0;
Font* bestFont = mFonts[bestIndex].get();
int bestMatch = computeMatch(bestFont->style(), style);
@@ -238,9 +247,23 @@ FakedFont FontFamily::getClosestMatch(FontStyle style) const {
return FakedFont{mFonts[bestIndex], computeFakery(style, bestFont->style())};
}
+FakedFont FontFamily::getVariationFamilyAdjustment(FontStyle style) const {
+ const bool italic = style.slant() == FontStyle::Slant::ITALIC;
+ switch (mVarFamilyType) {
+ case VariationFamilyType::SingleFont_wghtOnly:
+ return FakedFont{mFonts[0], FontFakery(false, italic, style.weight(), -1)};
+ case VariationFamilyType::SingleFont_wght_ital:
+ return FakedFont{mFonts[0], FontFakery(false, false, style.weight(), italic ? 1 : 0)};
+ case VariationFamilyType::TwoFont_wght:
+ return FakedFont{mFonts[italic ? 1 : 0], FontFakery(false, false, style.weight(), -1)};
+ case VariationFamilyType::None:
+ return FakedFont{mFonts[0], FontFakery()};
+ }
+}
+
void FontFamily::computeCoverage() {
const std::shared_ptr<Font>& font = getClosestMatch(FontStyle()).font;
- HbBlob cmapTable(font->baseFont(), MinikinFont::MakeTag('c', 'm', 'a', 'p'));
+ HbBlob cmapTable(font->baseFont(), MakeTag('c', 'm', 'a', 'p'));
if (cmapTable.get() == nullptr) {
ALOGE("Could not get cmap table size!\n");
return;
@@ -333,7 +356,7 @@ std::shared_ptr<FontFamily> FontFamily::createFamilyWithVariation(
}
std::shared_ptr<MinikinFont> minikinFont;
if (supportedVariations) {
- minikinFont = font->typeface()->createFontWithVariation(variations);
+ minikinFont = font->baseTypeface()->createFontWithVariation(variations);
}
if (minikinFont == nullptr) {
fonts.push_back(font);
@@ -342,7 +365,8 @@ std::shared_ptr<FontFamily> FontFamily::createFamilyWithVariation(
}
}
- return create(mLocaleListId, mVariant, std::move(fonts), mIsCustomFallback, mIsDefaultFallback);
+ return create(mLocaleListId, mVariant, std::move(fonts), mIsCustomFallback, mIsDefaultFallback,
+ VariationFamilyType::None);
}
} // namespace minikin
diff --git a/libs/minikin/FontFeatureUtils.cpp b/libs/minikin/FontFeatureUtils.cpp
index e1ec065..cc0749a 100644
--- a/libs/minikin/FontFeatureUtils.cpp
+++ b/libs/minikin/FontFeatureUtils.cpp
@@ -14,12 +14,29 @@
* limitations under the License.
*/
-#include "FontFeatureUtils.h"
-
#include "StringPiece.h"
+#include "minikin/FontFeature.h"
+#include "minikin/MinikinPaint.h"
namespace minikin {
+std::vector<FontFeature> FontFeature::parse(std::string_view fontFeatureSettings) {
+ std::vector<FontFeature> features;
+
+ SplitIterator it(StringPiece(fontFeatureSettings), ',');
+ while (it.hasNext()) {
+ StringPiece featureStr = it.next();
+ static hb_feature_t feature;
+ // We do not allow setting features on ranges. As such, reject any setting that has
+ // non-universal range.
+ if (hb_feature_from_string(featureStr.data(), featureStr.size(), &feature) &&
+ feature.start == 0 && feature.end == (unsigned int)-1) {
+ features.push_back({feature.tag, feature.value});
+ }
+ }
+ return features;
+}
+
std::vector<hb_feature_t> cleanAndAddDefaultFontFeatures(const MinikinPaint& paint) {
std::vector<hb_feature_t> features;
// Disable default-on non-required ligature features if letter-spacing
@@ -40,27 +57,17 @@ std::vector<hb_feature_t> cleanAndAddDefaultFontFeatures(const MinikinPaint& pai
static constexpr hb_tag_t halt_tag = HB_TAG('h', 'a', 'l', 't');
static constexpr hb_tag_t palt_tag = HB_TAG('p', 'a', 'l', 't');
- SplitIterator it(paint.fontFeatureSettings, ',');
- while (it.hasNext()) {
- StringPiece featureStr = it.next();
- static hb_feature_t feature;
- // We do not allow setting features on ranges. As such, reject any setting that has
- // non-universal range.
- if (hb_feature_from_string(featureStr.data(), featureStr.size(), &feature) &&
- feature.start == 0 && feature.end == (unsigned int)-1) {
- // OpenType requires disabling default `chws` feature if glyph-width features.
- // https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-chws
- // Here, we follow Chrome's impl: not enabling default `chws` feature if `palt` or
- // `halt` is enabled.
- // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/fonts/shaping/font_features.cc;drc=77a9a09de0688ca449f5333a305ceaf3f36b6daf;l=215
- if (default_enable_chws &&
- (feature.tag == chws_tag ||
- (feature.value && (feature.tag == halt_tag || feature.tag == palt_tag)))) {
- default_enable_chws = false;
- }
-
- features.push_back(feature);
+ for (const FontFeature& feature : paint.fontFeatureSettings) {
+ // OpenType requires disabling default `chws` feature if glyph-width features.
+ // https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-chws
+ // Here, we follow Chrome's impl: not enabling default `chws` feature if `palt` or
+ // `halt` is enabled.
+ // https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/fonts/shaping/font_features.cc;drc=77a9a09de0688ca449f5333a305ceaf3f36b6daf;l=215
+ if (feature.tag == chws_tag ||
+ (feature.value && (feature.tag == halt_tag || feature.tag == palt_tag))) {
+ default_enable_chws = false;
}
+ features.push_back({feature.tag, feature.value, 0, ~0u});
}
if (default_enable_chws) {
diff --git a/libs/minikin/FontFeatureUtils.h b/libs/minikin/FontFeatureUtils.h
deleted file mode 100644
index 1a02173..0000000
--- a/libs/minikin/FontFeatureUtils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MINIKIN_FONT_FEATURE_UTILS_H
-#define MINIKIN_FONT_FEATURE_UTILS_H
-
-#include <hb.h>
-
-#include "minikin/MinikinPaint.h"
-
-namespace minikin {
-
-/**
- * Returns the final set of font features based on the features requested by this paint object and
- * extra defaults or implied font features.
- *
- * Features are included from the paint object if they are:
- * 1) in a supported range
- *
- * Default features are added based if they are:
- * 1) implied due to Paint settings such as letterSpacing
- * 2) default features that do not conflict with requested features
- */
-std::vector<hb_feature_t> cleanAndAddDefaultFontFeatures(const MinikinPaint& paint);
-
-} // namespace minikin
-#endif // MINIKIN_LAYOUT_UTILS_H
diff --git a/libs/minikin/FontFileParser.cpp b/libs/minikin/FontFileParser.cpp
index 1bcb711..a7d5210 100644
--- a/libs/minikin/FontFileParser.cpp
+++ b/libs/minikin/FontFileParser.cpp
@@ -18,16 +18,16 @@
#define LOG_TAG "Minikin"
+#include <hb-ot.h>
+#include <hb.h>
+
#include <cstdint>
#include <optional>
#include <string>
#include <vector>
-#include <hb-ot.h>
-#include <hb.h>
-
#include "MinikinInternal.h"
-#include "minikin/MinikinFont.h"
+#include "minikin/Constants.h"
namespace minikin {
@@ -175,7 +175,7 @@ HbFaceUniquePtr FontFileParser::makeHbFace(const void* buffer, size_t size, uint
std::optional<uint32_t> FontFileParser::getFontRevision() const {
if (!mFace) return std::optional<uint32_t>();
- HbBlob headTable(mFace, MinikinFont::MakeTag('h', 'e', 'a', 'd'));
+ HbBlob headTable(mFace, MakeTag('h', 'e', 'a', 'd'));
if (!headTable) return std::optional<uint32_t>();
uint32_t out = 0;
@@ -211,8 +211,8 @@ std::optional<std::string> FontFileParser::getPostScriptName() const {
std::optional<bool> FontFileParser::isPostScriptType1Font() const {
if (!mFace) return std::optional<bool>();
- HbBlob cffTable(mFace, MinikinFont::MakeTag('C', 'F', 'F', ' '));
- HbBlob cff2Table(mFace, MinikinFont::MakeTag('C', 'F', 'F', '2'));
+ HbBlob cffTable(mFace, MakeTag('C', 'F', 'F', ' '));
+ HbBlob cff2Table(mFace, MakeTag('C', 'F', 'F', '2'));
return cffTable || cff2Table;
}
diff --git a/libs/minikin/GreedyLineBreaker.cpp b/libs/minikin/GreedyLineBreaker.cpp
index bb2f91c..c4ceabe 100644
--- a/libs/minikin/GreedyLineBreaker.cpp
+++ b/libs/minikin/GreedyLineBreaker.cpp
@@ -16,17 +16,17 @@
#define LOG_TAG "GreedyLineBreak"
-#include "minikin/Characters.h"
-#include "minikin/LineBreaker.h"
-#include "minikin/MeasuredText.h"
-#include "minikin/Range.h"
-#include "minikin/U16StringPiece.h"
-
+#include "FeatureFlags.h"
#include "HyphenatorMap.h"
#include "LineBreakerUtil.h"
#include "Locale.h"
#include "LocaleListCache.h"
#include "WordBreaker.h"
+#include "minikin/Characters.h"
+#include "minikin/LineBreaker.h"
+#include "minikin/MeasuredText.h"
+#include "minikin/Range.h"
+#include "minikin/U16StringPiece.h"
namespace minikin {
@@ -40,18 +40,21 @@ public:
// destructed.
GreedyLineBreaker(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidthLimits, const TabStops& tabStops,
- bool enableHyphenation)
+ bool enableHyphenation, bool useBoundsForWidth)
: mLineWidthLimit(lineWidthLimits.getAt(0)),
mTextBuf(textBuf),
mMeasuredText(measured),
mLineWidthLimits(lineWidthLimits),
mTabStops(tabStops),
- mEnableHyphenation(enableHyphenation) {}
+ mEnableHyphenation(enableHyphenation),
+ mUseBoundsForWidth(useBoundsForWidth) {}
- void process();
+ void process(bool forceWordStyleAutoToPhrase);
LineBreakResult getResult() const;
+ bool retryWithPhraseWordBreak = false;
+
private:
struct BreakPoint {
BreakPoint(uint32_t offset, float lineWidth, StartHyphenEdit startHyphen,
@@ -99,6 +102,9 @@ private:
// This method return true if there is no characters to be processed.
bool doLineBreakWithGraphemeBounds(const Range& range);
+ bool overhangExceedLineLimit(const Range& range);
+ bool doLineBreakWithFallback(const Range& range);
+
// Info about the line currently processing.
uint32_t mLineNum = 0;
double mLineWidth = 0;
@@ -121,6 +127,7 @@ private:
const LineWidth& mLineWidthLimits;
const TabStops& mTabStops;
bool mEnableHyphenation;
+ bool mUseBoundsForWidth;
// The result of line breaking.
std::vector<BreakPoint> mBreakPoints;
@@ -181,6 +188,10 @@ bool GreedyLineBreaker::tryLineBreakWithHyphenation(const Range& range, WordBrea
return false;
}
+ if (!targetRun->canHyphenate()) {
+ return false;
+ }
+
const std::vector<HyphenationType> hyphenResult =
hyphenate(mTextBuf.substr(targetRange), *mHyphenator);
Range contextRange = range;
@@ -263,7 +274,8 @@ bool GreedyLineBreaker::doLineBreakWithGraphemeBounds(const Range& range) {
if (w == 0) {
continue; // w == 0 means here is not a grapheme bounds. Don't break here.
}
- if (width + w > mLineWidthLimit) {
+ if (width + w > mLineWidthLimit ||
+ overhangExceedLineLimit(Range(range.getStart(), i + 1))) {
// Okay, here is the longest position.
breakLineAt(i, width, mLineWidth - width, mSumOfCharWidths - width,
EndHyphenEdit::NO_EDIT, StartHyphenEdit::NO_EDIT);
@@ -282,6 +294,72 @@ bool GreedyLineBreaker::doLineBreakWithGraphemeBounds(const Range& range) {
return true;
}
+bool GreedyLineBreaker::doLineBreakWithFallback(const Range& range) {
+ if (!features::phrase_strict_fallback()) {
+ return false;
+ }
+ Run* targetRun = nullptr;
+ for (const auto& run : mMeasuredText.runs) {
+ if (run->getRange().contains(range)) {
+ targetRun = run.get();
+ }
+ }
+
+ if (targetRun == nullptr) {
+ return false; // The target range may lay on multiple run. Unable to fallback.
+ }
+
+ if (targetRun->lineBreakWordStyle() == LineBreakWordStyle::None) {
+ return false; // If the line break word style is already none, nothing can be falled back.
+ }
+
+ WordBreaker wb;
+ wb.setText(mTextBuf.data(), mTextBuf.length());
+ ssize_t next = wb.followingWithLocale(getEffectiveLocale(targetRun->getLocaleListId()),
+ targetRun->lineBreakStyle(), LineBreakWordStyle::None,
+ range.getStart());
+
+ if (!range.contains(next)) {
+ return false; // No fallback break points.
+ }
+
+ int32_t prevBreak = -1;
+ float wordWidth = 0;
+ float preBreakWidth = 0;
+ for (uint32_t i = range.getStart(); i < range.getEnd(); ++i) {
+ const float w = mMeasuredText.widths[i];
+ if (w == 0) {
+ continue; // w == 0 means here is not a grapheme bounds. Don't break here.
+ }
+ if (i == (uint32_t)next) {
+ if (preBreakWidth + wordWidth > mLineWidthLimit) {
+ if (prevBreak == -1) {
+ return false; // No candidate before this point. Give up.
+ }
+ breakLineAt(prevBreak, preBreakWidth, mLineWidth - preBreakWidth,
+ mSumOfCharWidths - preBreakWidth, EndHyphenEdit::NO_EDIT,
+ StartHyphenEdit::NO_EDIT);
+ return true;
+ }
+ prevBreak = i;
+ next = wb.next();
+ preBreakWidth += wordWidth;
+ wordWidth = w;
+ } else {
+ wordWidth += w;
+ }
+ }
+
+ if (preBreakWidth <= mLineWidthLimit) {
+ breakLineAt(prevBreak, preBreakWidth, mLineWidth - preBreakWidth,
+ mSumOfCharWidths - preBreakWidth, EndHyphenEdit::NO_EDIT,
+ StartHyphenEdit::NO_EDIT);
+ return true;
+ }
+
+ return false;
+}
+
void GreedyLineBreaker::updateLineWidth(uint16_t c, float width) {
if (c == CHAR_TAB) {
mSumOfCharWidths = mTabStops.nextTab(mSumOfCharWidths);
@@ -294,18 +372,48 @@ void GreedyLineBreaker::updateLineWidth(uint16_t c, float width) {
}
}
+bool GreedyLineBreaker::overhangExceedLineLimit(const Range& range) {
+ if (!mUseBoundsForWidth) {
+ return false;
+ }
+ if (!mMeasuredText.hasOverhang(range)) {
+ return false;
+ }
+
+ uint32_t i;
+ for (i = 0; i < range.getLength(); ++i) {
+ uint16_t ch = mTextBuf[range.getEnd() - i - 1];
+ if (!isLineEndSpace(ch)) {
+ break;
+ }
+ }
+ if (i == range.getLength()) {
+ return false;
+ }
+
+ return mMeasuredText.getBounds(mTextBuf, Range(range.getStart(), range.getEnd() - i)).width() >
+ mLineWidthLimit;
+}
+
void GreedyLineBreaker::processLineBreak(uint32_t offset, WordBreaker* breaker,
bool doHyphenation) {
- while (mLineWidth > mLineWidthLimit) {
- const Range lineRange(getPrevLineBreakOffset(), offset); // The range we need to address.
+ while (mLineWidth > mLineWidthLimit ||
+ overhangExceedLineLimit(Range(getPrevLineBreakOffset(), offset))) {
if (tryLineBreakWithWordBreak()) {
continue; // The word in the new line may still be too long for the line limit.
- } else if (doHyphenation && tryLineBreakWithHyphenation(lineRange, breaker)) {
+ }
+
+ if (doHyphenation &&
+ tryLineBreakWithHyphenation(Range(getPrevLineBreakOffset(), offset), breaker)) {
continue; // TODO: we may be able to return here.
- } else {
- if (doLineBreakWithGraphemeBounds(lineRange)) {
- return;
- }
+ }
+
+ if (doLineBreakWithFallback(Range(getPrevLineBreakOffset(), offset))) {
+ continue;
+ }
+
+ if (doLineBreakWithGraphemeBounds(Range(getPrevLineBreakOffset(), offset))) {
+ return;
}
}
@@ -319,24 +427,27 @@ void GreedyLineBreaker::processLineBreak(uint32_t offset, WordBreaker* breaker,
}
}
-void GreedyLineBreaker::process() {
+void GreedyLineBreaker::process(bool forceWordStyleAutoToPhrase) {
WordBreaker wordBreaker;
wordBreaker.setText(mTextBuf.data(), mTextBuf.size());
- // Following two will be initialized after the first iteration.
- uint32_t localeListId = LocaleListCache::kInvalidListId;
+ WordBreakerTransitionTracker wbTracker;
uint32_t nextWordBoundaryOffset = 0;
for (const auto& run : mMeasuredText.runs) {
const Range range = run->getRange();
// Update locale if necessary.
- uint32_t newLocaleListId = run->getLocaleListId();
- if (localeListId != newLocaleListId) {
- Locale locale = getEffectiveLocale(newLocaleListId);
- nextWordBoundaryOffset = wordBreaker.followingWithLocale(
- locale, run->lineBreakStyle(), run->lineBreakWordStyle(), range.getStart());
+ if (wbTracker.update(*run)) {
+ const LocaleList& localeList = wbTracker.getCurrentLocaleList();
+ const Locale locale = localeList.empty() ? Locale() : localeList[0];
+
+ LineBreakWordStyle lbWordStyle = wbTracker.getCurrentLineBreakWordStyle();
+ std::tie(lbWordStyle, retryWithPhraseWordBreak) =
+ resolveWordStyleAuto(lbWordStyle, localeList, forceWordStyleAutoToPhrase);
+
+ nextWordBoundaryOffset = wordBreaker.followingWithLocale(locale, run->lineBreakStyle(),
+ lbWordStyle, range.getStart());
mHyphenator = HyphenatorMap::lookup(locale);
- localeListId = newLocaleListId;
}
for (uint32_t i = range.getStart(); i < range.getEnd(); ++i) {
@@ -371,12 +482,32 @@ LineBreakResult GreedyLineBreaker::getResult() const {
hasTabChar |= mTextBuf[i] == CHAR_TAB;
}
- MinikinExtent extent =
- mMeasuredText.getExtent(mTextBuf, Range(prevBreakOffset, breakPoint.offset));
+ if (mUseBoundsForWidth) {
+ Range range = Range(prevBreakOffset, breakPoint.offset);
+ Range actualRange = trimTrailingLineEndSpaces(mTextBuf, range);
+ if (actualRange.isEmpty()) {
+ // No characters before the line-end-spaces.
+ MinikinExtent extent = mMeasuredText.getExtent(mTextBuf, range);
+ out.ascents.push_back(extent.ascent);
+ out.descents.push_back(extent.descent);
+ out.bounds.emplace_back(0, extent.ascent, breakPoint.lineWidth, extent.descent);
+ } else {
+ LineMetrics metrics = mMeasuredText.getLineMetrics(mTextBuf, actualRange);
+ out.ascents.push_back(metrics.extent.ascent);
+ out.descents.push_back(metrics.extent.descent);
+ out.bounds.emplace_back(metrics.bounds);
+ }
+ } else {
+ MinikinExtent extent =
+ mMeasuredText.getExtent(mTextBuf, Range(prevBreakOffset, breakPoint.offset));
+ out.ascents.push_back(extent.ascent);
+ out.descents.push_back(extent.descent);
+ // We don't have bounding box if mUseBoundsForWidth is false. Use line ascent/descent
+ // and linew width for the bounding box.
+ out.bounds.emplace_back(0, extent.ascent, breakPoint.lineWidth, extent.descent);
+ }
out.breakPoints.push_back(breakPoint.offset);
out.widths.push_back(breakPoint.lineWidth);
- out.ascents.push_back(extent.ascent);
- out.descents.push_back(extent.descent);
out.flags.push_back((hasTabChar ? TAB_BIT : 0) | static_cast<int>(breakPoint.hyphenEdit));
prevBreakOffset = breakPoint.offset;
@@ -388,13 +519,41 @@ LineBreakResult GreedyLineBreaker::getResult() const {
LineBreakResult breakLineGreedy(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidthLimits, const TabStops& tabStops,
- bool enableHyphenation) {
+ bool enableHyphenation, bool useBoundsForWidth) {
if (textBuf.size() == 0) {
return LineBreakResult();
}
- GreedyLineBreaker lineBreaker(textBuf, measured, lineWidthLimits, tabStops, enableHyphenation);
- lineBreaker.process();
- return lineBreaker.getResult();
+ GreedyLineBreaker lineBreaker(textBuf, measured, lineWidthLimits, tabStops, enableHyphenation,
+ useBoundsForWidth);
+ lineBreaker.process(false);
+ LineBreakResult res = lineBreaker.getResult();
+
+ if (!features::word_style_auto()) {
+ return res;
+ }
+
+ // The line breaker says that retry with phrase based word break because of the auto option and
+ // given locales.
+ if (!lineBreaker.retryWithPhraseWordBreak) {
+ return res;
+ }
+
+ // If the line break result is more than heuristics threshold, don't try pharse based word
+ // break.
+ if (res.breakPoints.size() >= LBW_AUTO_HEURISTICS_LINE_COUNT) {
+ return res;
+ }
+
+ GreedyLineBreaker phLineBreaker(textBuf, measured, lineWidthLimits, tabStops, enableHyphenation,
+ useBoundsForWidth);
+ phLineBreaker.process(true);
+ LineBreakResult res2 = phLineBreaker.getResult();
+
+ if (res2.breakPoints.size() < LBW_AUTO_HEURISTICS_LINE_COUNT) {
+ return res2;
+ } else {
+ return res;
+ }
}
} // namespace minikin
diff --git a/libs/minikin/GreedyLineBreaker.h b/libs/minikin/GreedyLineBreaker.h
index ead93e4..9d17ec2 100644
--- a/libs/minikin/GreedyLineBreaker.h
+++ b/libs/minikin/GreedyLineBreaker.h
@@ -27,7 +27,7 @@ namespace minikin {
LineBreakResult breakLineGreedy(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidthLimits, const TabStops& tabStops,
- bool enableHyphenation);
+ bool enableHyphenation, bool useBoundsForWidth);
} // namespace minikin
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp
index e7d41c8..6369109 100644
--- a/libs/minikin/Layout.cpp
+++ b/libs/minikin/Layout.cpp
@@ -18,12 +18,6 @@
#include "minikin/Layout.h"
-#include <cmath>
-#include <iostream>
-#include <mutex>
-#include <string>
-#include <vector>
-
#include <hb-icu.h>
#include <hb-ot.h>
#include <log/log.h>
@@ -31,18 +25,22 @@
#include <unicode/utf16.h>
#include <utils/LruCache.h>
-#include "minikin/Emoji.h"
-#include "minikin/HbUtils.h"
-#include "minikin/LayoutCache.h"
-#include "minikin/LayoutPieces.h"
-#include "minikin/Macros.h"
+#include <cmath>
+#include <iostream>
+#include <mutex>
+#include <string>
+#include <vector>
#include "BidiUtils.h"
#include "LayoutSplitter.h"
#include "LayoutUtils.h"
#include "LocaleListCache.h"
#include "MinikinInternal.h"
-
+#include "minikin/Emoji.h"
+#include "minikin/HbUtils.h"
+#include "minikin/LayoutCache.h"
+#include "minikin/LayoutPieces.h"
+#include "minikin/Macros.h"
namespace minikin {
void Layout::doLayout(const U16StringPiece& textBuf, const Range& range, Bidi bidiFlags,
@@ -53,19 +51,27 @@ void Layout::doLayout(const U16StringPiece& textBuf, const Range& range, Bidi bi
mGlyphs.reserve(count);
for (const BidiText::RunInfo& runInfo : BidiText(textBuf, range, bidiFlags)) {
doLayoutRunCached(textBuf, runInfo.range, runInfo.isRtl, paint, range.getStart(),
- startHyphen, endHyphen, this, nullptr);
+ startHyphen, endHyphen, this, nullptr, nullptr);
}
}
float Layout::measureText(const U16StringPiece& textBuf, const Range& range, Bidi bidiFlags,
const MinikinPaint& paint, StartHyphenEdit startHyphen,
- EndHyphenEdit endHyphen, float* advances) {
+ EndHyphenEdit endHyphen, float* advances, MinikinRect* bounds) {
float advance = 0;
+
+ MinikinRect tmpBounds;
for (const BidiText::RunInfo& runInfo : BidiText(textBuf, range, bidiFlags)) {
const size_t offset = range.toRangeOffset(runInfo.range.getStart());
float* advancesForRun = advances ? advances + offset : nullptr;
- advance += doLayoutRunCached(textBuf, runInfo.range, runInfo.isRtl, paint, 0, startHyphen,
- endHyphen, nullptr, advancesForRun);
+ tmpBounds.setEmpty();
+ float run_advance = doLayoutRunCached(textBuf, runInfo.range, runInfo.isRtl, paint, 0,
+ startHyphen, endHyphen, nullptr, advancesForRun,
+ bounds ? &tmpBounds : nullptr);
+ if (bounds) {
+ bounds->join(tmpBounds, advance, 0);
+ }
+ advance += run_advance;
}
return advance;
}
@@ -73,11 +79,12 @@ float Layout::measureText(const U16StringPiece& textBuf, const Range& range, Bid
float Layout::doLayoutRunCached(const U16StringPiece& textBuf, const Range& range, bool isRtl,
const MinikinPaint& paint, size_t dstStart,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen,
- Layout* layout, float* advances) {
+ Layout* layout, float* advances, MinikinRect* bounds) {
if (!range.isValid()) {
return 0.0f; // ICU failed to retrieve the bidi run?
}
float advance = 0;
+ MinikinRect tmpBounds;
for (const auto[context, piece] : LayoutSplitter(textBuf, range, isRtl)) {
// Hyphenation only applies to the start/end of run.
const StartHyphenEdit pieceStartHyphen =
@@ -86,25 +93,32 @@ float Layout::doLayoutRunCached(const U16StringPiece& textBuf, const Range& rang
(piece.getEnd() == range.getEnd()) ? endHyphen : EndHyphenEdit::NO_EDIT;
float* advancesForRun =
advances ? advances + (piece.getStart() - range.getStart()) : nullptr;
- advance += doLayoutWord(textBuf.data() + context.getStart(),
- piece.getStart() - context.getStart(), piece.getLength(),
- context.getLength(), isRtl, paint, piece.getStart() - dstStart,
- pieceStartHyphen, pieceEndHyphen, layout, advancesForRun);
+ tmpBounds.setEmpty();
+ float word_advance = doLayoutWord(
+ textBuf.data() + context.getStart(), piece.getStart() - context.getStart(),
+ piece.getLength(), context.getLength(), isRtl, paint, piece.getStart() - dstStart,
+ pieceStartHyphen, pieceEndHyphen, layout, advancesForRun,
+ bounds ? &tmpBounds : nullptr);
+ if (bounds) {
+ bounds->join(tmpBounds, advance, 0);
+ }
+ advance += word_advance;
}
return advance;
}
class LayoutAppendFunctor {
public:
- LayoutAppendFunctor(Layout* layout, float* advances, float* totalAdvance, uint32_t outOffset,
- float wordSpacing)
+ LayoutAppendFunctor(Layout* layout, float* advances, uint32_t outOffset, float wordSpacing,
+ MinikinRect* bounds)
: mLayout(layout),
mAdvances(advances),
- mTotalAdvance(totalAdvance),
mOutOffset(outOffset),
- mWordSpacing(wordSpacing) {}
+ mWordSpacing(wordSpacing),
+ mBounds(bounds) {}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect& bounds) {
if (mLayout) {
mLayout->appendLayout(layoutPiece, mOutOffset, mWordSpacing);
}
@@ -112,30 +126,37 @@ public:
const std::vector<float>& advances = layoutPiece.advances();
std::copy(advances.begin(), advances.end(), mAdvances);
}
- if (mTotalAdvance) {
- *mTotalAdvance = layoutPiece.advance();
+ if (mBounds) {
+ mBounds->join(bounds, mTotalAdvance, 0);
}
+ mTotalAdvance += layoutPiece.advance();
}
+ float getTotalAdvance() { return mTotalAdvance; }
+
private:
Layout* mLayout;
float* mAdvances;
- float* mTotalAdvance;
+ float mTotalAdvance{0};
const uint32_t mOutOffset;
const float mWordSpacing;
+ MinikinRect* mBounds;
};
float Layout::doLayoutWord(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
bool isRtl, const MinikinPaint& paint, size_t bufStart,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen, Layout* layout,
- float* advances) {
+ float* advances, MinikinRect* bounds) {
float wordSpacing = count == 1 && isWordSpace(buf[start]) ? paint.wordSpacing : 0;
float totalAdvance = 0;
+ const bool boundsCalculation = bounds != nullptr;
const U16StringPiece textBuf(buf, bufSize);
const Range range(start, start + count);
- LayoutAppendFunctor f(layout, advances, &totalAdvance, bufStart, wordSpacing);
- LayoutCache::getInstance().getOrCreate(textBuf, range, paint, isRtl, startHyphen, endHyphen, f);
+ LayoutAppendFunctor f(layout, advances, bufStart, wordSpacing, bounds);
+ LayoutCache::getInstance().getOrCreate(textBuf, range, paint, isRtl, startHyphen, endHyphen,
+ boundsCalculation, f);
+ totalAdvance = f.getTotalAdvance();
if (wordSpacing != 0) {
totalAdvance += wordSpacing;
diff --git a/libs/minikin/LayoutCore.cpp b/libs/minikin/LayoutCore.cpp
index 6f33ad7..b079e85 100644
--- a/libs/minikin/LayoutCore.cpp
+++ b/libs/minikin/LayoutCore.cpp
@@ -15,6 +15,7 @@
*/
#define LOG_TAG "Minikin"
+#define ATRACE_TAG ATRACE_TAG_VIEW
#include "minikin/LayoutCore.h"
@@ -24,6 +25,7 @@
#include <unicode/ubidi.h>
#include <unicode/utf16.h>
#include <utils/LruCache.h>
+#include <utils/Trace.h>
#include <cmath>
#include <iostream>
@@ -32,11 +34,12 @@
#include <vector>
#include "BidiUtils.h"
-#include "FontFeatureUtils.h"
#include "LayoutUtils.h"
#include "LocaleListCache.h"
#include "MinikinInternal.h"
+#include "ScriptUtils.h"
#include "minikin/Emoji.h"
+#include "minikin/FontFeature.h"
#include "minikin/HbUtils.h"
#include "minikin/LayoutCache.h"
#include "minikin/LayoutPieces.h"
@@ -136,45 +139,6 @@ static bool isColorBitmapFont(const HbFontUniquePtr& font) {
return cbdt;
}
-static hb_codepoint_t decodeUtf16(const uint16_t* chars, size_t len, ssize_t* iter) {
- UChar32 result;
- U16_NEXT(chars, *iter, (ssize_t)len, result);
- if (U_IS_SURROGATE(result)) { // isolated surrogate
- result = 0xFFFDu; // U+FFFD REPLACEMENT CHARACTER
- }
- return (hb_codepoint_t)result;
-}
-
-static hb_script_t getScriptRun(const uint16_t* chars, size_t len, ssize_t* iter) {
- if (size_t(*iter) == len) {
- return HB_SCRIPT_UNKNOWN;
- }
- uint32_t cp = decodeUtf16(chars, len, iter);
- hb_unicode_funcs_t* unicode_func = hb_unicode_funcs_get_default();
- hb_script_t current_script = hb_unicode_script(unicode_func, cp);
- for (;;) {
- if (size_t(*iter) == len) break;
- const ssize_t prev_iter = *iter;
- cp = decodeUtf16(chars, len, iter);
- const hb_script_t script = hb_unicode_script(unicode_func, cp);
- if (script != current_script) {
- if (current_script == HB_SCRIPT_INHERITED || current_script == HB_SCRIPT_COMMON) {
- current_script = script;
- } else if (script == HB_SCRIPT_INHERITED || script == HB_SCRIPT_COMMON) {
- continue;
- } else {
- *iter = prev_iter;
- break;
- }
- }
- }
- if (current_script == HB_SCRIPT_INHERITED) {
- current_script = HB_SCRIPT_COMMON;
- }
-
- return current_script;
-}
-
/**
* Disable certain scripts (mostly those with cursive connection) from having letterspacing
* applied. See https://github.com/behdad/harfbuzz/issues/64 for more details.
@@ -349,7 +313,7 @@ LayoutPiece::LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool
double size = paint.size;
double scaleX = paint.scaleX;
- std::unordered_map<const Font*, uint32_t> fontMap;
+ std::unordered_map<const MinikinFont*, uint32_t> fontMap;
float x = 0;
float y = 0;
@@ -358,19 +322,20 @@ LayoutPiece::LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool
isRtl ? --run_ix : ++run_ix) {
FontCollection::Run& run = items[run_ix];
FakedFont fakedFont = paint.font->getBestFont(substr, run, paint.fontStyle);
- auto it = fontMap.find(fakedFont.font.get());
+ const std::shared_ptr<MinikinFont>& typeface = fakedFont.typeface();
+ auto it = fontMap.find(typeface.get());
uint8_t font_ix;
if (it == fontMap.end()) {
// First time to see this font.
font_ix = mFonts.size();
mFonts.push_back(fakedFont);
- fontMap.insert(std::make_pair(fakedFont.font.get(), font_ix));
+ fontMap.insert(std::make_pair(typeface.get(), font_ix));
// We override some functions which are not thread safe.
- HbFontUniquePtr font(hb_font_create_sub_font(fakedFont.font->baseFont().get()));
+ HbFontUniquePtr font(hb_font_create_sub_font(fakedFont.hbFont().get()));
hb_font_set_funcs(
font.get(), isColorBitmapFont(font) ? getFontFuncsForEmoji() : getFontFuncs(),
- new SkiaArguments({fakedFont.font->typeface().get(), &paint, fakedFont.fakery}),
+ new SkiaArguments({fakedFont.typeface().get(), &paint, fakedFont.fakery}),
[](void* data) { delete reinterpret_cast<SkiaArguments*>(data); });
hbFonts.push_back(std::move(font));
} else {
@@ -387,7 +352,7 @@ LayoutPiece::LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool
}
if (needExtent) {
MinikinExtent verticalExtent;
- fakedFont.font->typeface()->GetFontExtent(&verticalExtent, paint, fakedFont.fakery);
+ typeface->GetFontExtent(&verticalExtent, paint, fakedFont.fakery);
mExtent.extendBy(verticalExtent);
}
@@ -400,11 +365,10 @@ LayoutPiece::LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool
// Note: scriptRunStart and scriptRunEnd, as well as run.start and run.end, run between 0
// and count.
- ssize_t scriptRunEnd;
- for (ssize_t scriptRunStart = run.start; scriptRunStart < run.end;
- scriptRunStart = scriptRunEnd) {
- scriptRunEnd = scriptRunStart;
- hb_script_t script = getScriptRun(buf + start, run.end, &scriptRunEnd /* iterator */);
+ for (const auto [range, script] : ScriptText(textBuf, run.start, run.end)) {
+ ssize_t scriptRunStart = range.getStart();
+ ssize_t scriptRunEnd = range.getEnd();
+
// After the last line, scriptRunEnd is guaranteed to have increased, since the only
// time getScriptRun does not increase its iterator is when it has already reached the
// end of the buffer. But that can't happen, since if we have already reached the end
@@ -494,4 +458,22 @@ LayoutPiece::LayoutPiece(const U16StringPiece& textBuf, const Range& range, bool
mAdvance = x;
}
+// static
+MinikinRect LayoutPiece::calculateBounds(const LayoutPiece& layout, const MinikinPaint& paint) {
+ ATRACE_CALL();
+ MinikinRect out;
+ for (uint32_t i = 0; i < layout.glyphCount(); ++i) {
+ MinikinRect bounds;
+ uint32_t glyphId = layout.glyphIdAt(i);
+ const FakedFont& fakedFont = layout.fontAt(i);
+ const Point& pos = layout.pointAt(i);
+
+ fakedFont.typeface()->GetBounds(&bounds, glyphId, paint, fakedFont.fakery);
+ out.join(bounds, pos);
+ }
+ return out;
+}
+
+LayoutPiece::~LayoutPiece() {}
+
} // namespace minikin
diff --git a/libs/minikin/LineBreaker.cpp b/libs/minikin/LineBreaker.cpp
index 12cf9bd..20a075c 100644
--- a/libs/minikin/LineBreaker.cpp
+++ b/libs/minikin/LineBreaker.cpp
@@ -24,13 +24,13 @@ namespace minikin {
LineBreakResult breakIntoLines(const U16StringPiece& textBuffer, BreakStrategy strategy,
HyphenationFrequency frequency, bool justified,
const MeasuredText& measuredText, const LineWidth& lineWidth,
- const TabStops& tabStops) {
+ const TabStops& tabStops, bool useBoundsForWidth) {
if (strategy == BreakStrategy::Greedy || textBuffer.hasChar(CHAR_TAB)) {
return breakLineGreedy(textBuffer, measuredText, lineWidth, tabStops,
- frequency != HyphenationFrequency::None);
+ frequency != HyphenationFrequency::None, useBoundsForWidth);
} else {
- return breakLineOptimal(textBuffer, measuredText, lineWidth, strategy, frequency,
- justified);
+ return breakLineOptimal(textBuffer, measuredText, lineWidth, strategy, frequency, justified,
+ useBoundsForWidth);
}
}
diff --git a/libs/minikin/LineBreakerUtil.h b/libs/minikin/LineBreakerUtil.h
index 5764c5e..030e677 100644
--- a/libs/minikin/LineBreakerUtil.h
+++ b/libs/minikin/LineBreakerUtil.h
@@ -19,19 +19,21 @@
#include <vector>
-#include "minikin/Hyphenator.h"
-#include "minikin/MeasuredText.h"
-#include "minikin/U16StringPiece.h"
-
#include "HyphenatorMap.h"
#include "LayoutUtils.h"
#include "Locale.h"
#include "LocaleListCache.h"
#include "MinikinInternal.h"
#include "WordBreaker.h"
+#include "minikin/Hyphenator.h"
+#include "minikin/LineBreakStyle.h"
+#include "minikin/MeasuredText.h"
+#include "minikin/U16StringPiece.h"
namespace minikin {
+constexpr uint32_t LBW_AUTO_HEURISTICS_LINE_COUNT = 5;
+
// ParaWidth is used to hold cumulative width from beginning of paragraph. Note that for very large
// paragraphs, accuracy could degrade using only 32-bit float. Note however that float is used
// extensively on the Java side for this. This is a typedef so that we can easily change it based
@@ -55,6 +57,15 @@ inline bool isLineEndSpace(uint16_t c) {
|| c == 0x3000;
}
+inline Range trimTrailingLineEndSpaces(const U16StringPiece& textBuf, const Range& range) {
+ for (uint32_t i = 0; i < range.getLength(); i++) {
+ if (!isLineEndSpace(textBuf[range.getEnd() - i - 1])) {
+ return Range(range.getStart(), range.getEnd() - i);
+ }
+ }
+ return Range(range.getStart(), range.getStart());
+}
+
inline Locale getEffectiveLocale(uint32_t localeListId) {
const LocaleList& localeList = LocaleListCache::getById(localeListId);
return localeList.empty() ? Locale() : localeList[0];
@@ -125,6 +136,58 @@ inline void populateHyphenationPoints(
}
}
+// Class for tracking the word breaker transition point.
+class WordBreakerTransitionTracker {
+public:
+ // Update the word breaker transition information. This function return true if the word
+ // breaker need to be updated.
+ bool update(const Run& run) {
+ const uint32_t newLocaleListId = run.getLocaleListId();
+ const LineBreakStyle newLineBreakStyle = run.lineBreakStyle();
+ const LineBreakWordStyle newLineBreakWordStyle = run.lineBreakWordStyle();
+ const bool isUpdate = localeListId != newLocaleListId ||
+ lineBreakStyle != newLineBreakStyle ||
+ lineBreakWordStyle != newLineBreakWordStyle;
+
+ localeListId = newLocaleListId;
+ lineBreakStyle = newLineBreakStyle;
+ lineBreakWordStyle = newLineBreakWordStyle;
+
+ return isUpdate;
+ }
+
+ const LocaleList& getCurrentLocaleList() const {
+ return LocaleListCache::getById(localeListId);
+ }
+
+ LineBreakStyle getCurrentLineBreakStyle() const { return lineBreakStyle; }
+
+ LineBreakWordStyle getCurrentLineBreakWordStyle() const { return lineBreakWordStyle; }
+
+private:
+ uint32_t localeListId = LocaleListCache::kInvalidListId;
+ LineBreakStyle lineBreakStyle = LineBreakStyle::None;
+ LineBreakWordStyle lineBreakWordStyle = LineBreakWordStyle::None;
+};
+
+inline std::pair<LineBreakWordStyle, bool> resolveWordStyleAuto(LineBreakWordStyle lbWordStyle,
+ const LocaleList& localeList,
+ bool forceWordStyleAutoToPhrase) {
+ if (lbWordStyle == LineBreakWordStyle::Auto) {
+ if (forceWordStyleAutoToPhrase) {
+ return std::make_pair(LineBreakWordStyle::Phrase, false);
+ } else if (localeList.hasKorean()) {
+ return std::make_pair(LineBreakWordStyle::Phrase, false);
+ } else if (localeList.hasJapanese()) {
+ return std::make_pair(LineBreakWordStyle::None, true);
+ } else {
+ return std::make_pair(LineBreakWordStyle::None, false);
+ }
+ } else {
+ return std::make_pair(lbWordStyle, false);
+ }
+}
+
// Processes and retrieve informations from characters in the paragraph.
struct CharProcessor {
// The number of spaces.
@@ -157,6 +220,8 @@ struct CharProcessor {
// The current hyphenator.
const Hyphenator* hyphenator = nullptr;
+ bool retryWithPhraseWordBreak = false;
+
// Retrieve the current word range.
inline Range wordRange() const { return breaker.wordRange(); }
@@ -175,15 +240,17 @@ struct CharProcessor {
// The user of CharProcessor must call updateLocaleIfNecessary with valid locale at least one
// time before feeding characters.
- void updateLocaleIfNecessary(const Run& run) {
- uint32_t newLocaleListId = run.getLocaleListId();
- if (localeListId != newLocaleListId) {
- Locale locale = getEffectiveLocale(newLocaleListId);
- nextWordBreak = breaker.followingWithLocale(locale, run.lineBreakStyle(),
- run.lineBreakWordStyle(),
+ void updateLocaleIfNecessary(const Run& run, bool forceWordStyleAutoToPhrase) {
+ if (wbTracker.update(run)) {
+ const LocaleList& localeList = wbTracker.getCurrentLocaleList();
+ const Locale locale = localeList.empty() ? Locale() : localeList[0];
+
+ LineBreakWordStyle lbWordStyle = wbTracker.getCurrentLineBreakWordStyle();
+ std::tie(lbWordStyle, retryWithPhraseWordBreak) =
+ resolveWordStyleAuto(lbWordStyle, localeList, forceWordStyleAutoToPhrase);
+ nextWordBreak = breaker.followingWithLocale(locale, run.lineBreakStyle(), lbWordStyle,
run.getRange().getStart());
hyphenator = HyphenatorMap::lookup(locale);
- localeListId = newLocaleListId;
}
}
@@ -212,9 +279,7 @@ struct CharProcessor {
}
private:
- // The current locale list id.
- uint32_t localeListId = LocaleListCache::kInvalidListId;
-
+ WordBreakerTransitionTracker wbTracker;
WordBreaker breaker;
};
} // namespace minikin
diff --git a/libs/minikin/Locale.cpp b/libs/minikin/Locale.cpp
index d246020..f7e7323 100644
--- a/libs/minikin/Locale.cpp
+++ b/libs/minikin/Locale.cpp
@@ -467,6 +467,12 @@ bool Locale::supportsScript(uint32_t script) const {
return supportsScript(mSubScriptBits, scriptToSubScriptBits(packedScript));
}
+bool Locale::supportsScript(char c1, char c2, char c3, char c4) const {
+ uint32_t packedScript = packScript(c1, c2, c3, c4);
+ if (packedScript == mScript) return true;
+ return supportsScript(mSubScriptBits, scriptToSubScriptBits(packedScript));
+}
+
int Locale::calcScoreFor(const LocaleList& supported) const {
bool languageScriptMatch = false;
bool subtagMatch = false;
@@ -528,4 +534,29 @@ LocaleList::LocaleList(std::vector<Locale>&& locales) : mLocales(std::move(local
}
}
+bool LocaleList::atLeastOneScriptMatch(const LocaleList& list) const {
+ if ((mUnionOfSubScriptBits & list.mUnionOfSubScriptBits) != 0) {
+ return true;
+ }
+
+ for (const Locale& myLocale : mLocales) {
+ for (const Locale& otherLocale : list.mLocales) {
+ if (myLocale.isEqualScript(otherLocale)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool LocaleList::hasScript(char c1, char c2, char c3, char c4) const {
+ for (const Locale& locale : mLocales) {
+ if (locale.supportsScript(c1, c2, c3, c4)) {
+ return true;
+ }
+ }
+ return false;
+}
+
} // namespace minikin
diff --git a/libs/minikin/Locale.h b/libs/minikin/Locale.h
index 285bb7b..a19daa9 100644
--- a/libs/minikin/Locale.h
+++ b/libs/minikin/Locale.h
@@ -123,6 +123,7 @@ public:
// Returns true if this script supports the given script. For example, ja-Jpan supports Hira,
// ja-Hira doesn't support Jpan.
bool supportsScript(uint32_t script) const;
+ bool supportsScript(char c1, char c2, char c3, char c4) const;
std::string getString() const;
@@ -217,6 +218,11 @@ public:
// The effective means the first non empty emoji style in the list.
EmojiStyle getEmojiStyle() const { return mEmojiStyle; }
+ bool atLeastOneScriptMatch(const LocaleList& list) const;
+
+ bool hasJapanese() const { return hasScript('J', 'p', 'a', 'n'); }
+ bool hasKorean() const { return hasScript('K', 'o', 'r', 'e'); }
+
private:
friend struct Locale; // for calcScoreFor
@@ -231,6 +237,8 @@ private:
uint8_t getUnionOfSubScriptBits() const { return mUnionOfSubScriptBits; }
bool isAllTheSameLocale() const { return mIsAllTheSameLocale; }
+ bool hasScript(char c1, char c2, char c3, char c4) const;
+
// Do not copy and assign.
LocaleList(const LocaleList&) = delete;
void operator=(const LocaleList&) = delete;
diff --git a/libs/minikin/MeasuredText.cpp b/libs/minikin/MeasuredText.cpp
index 33dab38..8a37dc7 100644
--- a/libs/minikin/MeasuredText.cpp
+++ b/libs/minikin/MeasuredText.cpp
@@ -17,32 +17,40 @@
#define LOG_TAG "Minikin"
#include "minikin/MeasuredText.h"
-#include "minikin/Layout.h"
-
#include "BidiUtils.h"
#include "LayoutSplitter.h"
#include "LayoutUtils.h"
#include "LineBreakerUtil.h"
+#include "minikin/Characters.h"
+#include "minikin/Layout.h"
namespace minikin {
// Helper class for composing character advances.
class AdvancesCompositor {
public:
- AdvancesCompositor(std::vector<float>* outAdvances, LayoutPieces* outPieces)
- : mOutAdvances(outAdvances), mOutPieces(outPieces) {}
+ AdvancesCompositor(std::vector<float>* outAdvances, std::vector<uint8_t>* flags,
+ LayoutPieces* outPieces)
+ : mOutAdvances(outAdvances), mFlags(flags), mOutPieces(outPieces) {}
void setNextRange(const Range& range, bool dir) {
mRange = range;
mDir = dir;
}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint,
+ const MinikinRect& bounds) {
const std::vector<float>& advances = layoutPiece.advances();
std::copy(advances.begin(), advances.end(), mOutAdvances->begin() + mRange.getStart());
+ if (bounds.mLeft < 0 || bounds.mRight > layoutPiece.advance()) {
+ for (uint32_t i : mRange) {
+ (*mFlags)[i] |= MeasuredText::MAY_OVERHANG_BIT;
+ }
+ }
+
if (mOutPieces != nullptr) {
- mOutPieces->insert(mRange, 0 /* no edit */, layoutPiece, mDir, paint);
+ mOutPieces->insert(mRange, 0 /* no edit */, layoutPiece, mDir, paint, bounds);
}
}
@@ -50,12 +58,14 @@ private:
Range mRange;
bool mDir;
std::vector<float>* mOutAdvances;
+ std::vector<uint8_t>* mFlags;
LayoutPieces* mOutPieces;
};
void StyleRun::getMetrics(const U16StringPiece& textBuf, std::vector<float>* advances,
- LayoutPieces* precomputed, LayoutPieces* outPieces) const {
- AdvancesCompositor compositor(advances, outPieces);
+ std::vector<uint8_t>* flags, LayoutPieces* precomputed,
+ bool boundsCalculation, LayoutPieces* outPieces) const {
+ AdvancesCompositor compositor(advances, flags, outPieces);
const Bidi bidiFlag = mIsRtl ? Bidi::FORCE_RTL : Bidi::FORCE_LTR;
const uint32_t paintId =
(precomputed == nullptr) ? LayoutPieces::kNoPaintId : precomputed->findPaintId(mPaint);
@@ -65,11 +75,12 @@ void StyleRun::getMetrics(const U16StringPiece& textBuf, std::vector<float>* adv
if (paintId == LayoutPieces::kNoPaintId) {
LayoutCache::getInstance().getOrCreate(
textBuf.substr(context), piece - context.getStart(), mPaint, info.isRtl,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, compositor);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, boundsCalculation,
+ compositor);
} else {
precomputed->getOrCreate(textBuf, piece, context, mPaint, info.isRtl,
StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, paintId,
- compositor);
+ boundsCalculation, compositor);
}
}
}
@@ -80,7 +91,7 @@ class TotalAdvancesCompositor {
public:
TotalAdvancesCompositor() : mOut(0) {}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint&) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint&, const MinikinRect&) {
for (float w : layoutPiece.advances()) {
mOut += w;
}
@@ -100,7 +111,7 @@ float StyleRun::measureText(const U16StringPiece& textBuf) const {
for (const auto [context, piece] : LayoutSplitter(textBuf, info.range, info.isRtl)) {
layoutCache.getOrCreate(textBuf.substr(context), piece - context.getStart(), mPaint,
info.isRtl, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
- compositor);
+ false /* bounds calculation */, compositor);
}
}
return compositor.getTotalAdvance();
@@ -117,10 +128,11 @@ public:
mDir = dir;
}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint,
+ const MinikinRect& bounds) {
mTotalAdvance += layoutPiece.advance();
if (mOutPieces != nullptr) {
- mOutPieces->insert(mRange, mEdit, layoutPiece, mDir, paint);
+ mOutPieces->insert(mRange, mEdit, layoutPiece, mDir, paint, bounds);
}
}
@@ -147,16 +159,17 @@ float StyleRun::measureHyphenPiece(const U16StringPiece& textBuf, const Range& r
piece.getEnd() == range.getEnd() ? endHyphen : EndHyphenEdit::NO_EDIT;
compositor.setNextContext(piece, packHyphenEdit(startEdit, endEdit), info.isRtl);
- LayoutCache::getInstance().getOrCreate(textBuf.substr(context),
- piece - context.getStart(), mPaint, info.isRtl,
- startEdit, endEdit, compositor);
+ LayoutCache::getInstance().getOrCreate(
+ textBuf.substr(context), piece - context.getStart(), mPaint, info.isRtl,
+ startEdit, endEdit, false /* bounds calculation */, compositor);
}
}
return compositor.advance();
}
void MeasuredText::measure(const U16StringPiece& textBuf, bool computeHyphenation,
- bool computeLayout, bool ignoreHyphenKerning, MeasuredText* hint) {
+ bool computeLayout, bool computeBounds, bool ignoreHyphenKerning,
+ MeasuredText* hint) {
if (textBuf.size() == 0) {
return;
}
@@ -165,13 +178,14 @@ void MeasuredText::measure(const U16StringPiece& textBuf, bool computeHyphenatio
CharProcessor proc(textBuf);
for (const auto& run : runs) {
const Range& range = run->getRange();
- run->getMetrics(textBuf, &widths, hint ? &hint->layoutPieces : nullptr, piecesOut);
+ run->getMetrics(textBuf, &widths, &flags, hint ? &hint->layoutPieces : nullptr,
+ computeBounds, piecesOut);
if (!computeHyphenation || !run->canBreak()) {
continue;
}
- proc.updateLocaleIfNecessary(*run);
+ proc.updateLocaleIfNecessary(*run, false /* forceWordStyleAutoToPhrase */);
for (uint32_t i = range.getStart(); i < range.getEnd(); ++i) {
// Even if the run is not a candidate of line break, treat the end of run as the line
// break candidate.
@@ -198,7 +212,8 @@ public:
void setOutOffset(uint32_t outOffset) { mOutOffset = outOffset; }
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect&) {
mOutLayout->appendLayout(layoutPiece, mOutOffset, mExtraAdvance);
}
@@ -212,6 +227,7 @@ void StyleRun::appendLayout(const U16StringPiece& textBuf, const Range& range,
const MinikinPaint& paint, uint32_t outOrigin,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen,
Layout* outLayout) const {
+ bool boundsCalculation = false;
float wordSpacing = range.getLength() == 1 && isWordSpace(textBuf[range.getStart()])
? mPaint.wordSpacing
: 0;
@@ -230,11 +246,11 @@ void StyleRun::appendLayout(const U16StringPiece& textBuf, const Range& range,
if (canUsePrecomputedResult) {
pieces.getOrCreate(textBuf, piece, context, mPaint, info.isRtl, startEdit, endEdit,
- paintId, compositor);
+ paintId, boundsCalculation, compositor);
} else {
- LayoutCache::getInstance().getOrCreate(textBuf.substr(context),
- piece - context.getStart(), paint,
- info.isRtl, startEdit, endEdit, compositor);
+ LayoutCache::getInstance().getOrCreate(
+ textBuf.substr(context), piece - context.getStart(), paint, info.isRtl,
+ startEdit, endEdit, boundsCalculation, compositor);
}
}
}
@@ -245,20 +261,9 @@ class BoundsCompositor {
public:
BoundsCompositor() : mAdvance(0) {}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint) {
- MinikinRect pieceBounds;
- MinikinRect tmpRect;
- for (uint32_t i = 0; i < layoutPiece.glyphCount(); ++i) {
- const FakedFont& font = layoutPiece.fontAt(i);
- const Point& point = layoutPiece.pointAt(i);
-
- MinikinFont* minikinFont = font.font->typeface().get();
- minikinFont->GetBounds(&tmpRect, layoutPiece.glyphIdAt(i), paint, font.fakery);
- tmpRect.offset(point.x, point.y);
- pieceBounds.join(tmpRect);
- }
- pieceBounds.offset(mAdvance, 0);
- mBounds.join(pieceBounds);
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect& bounds) {
+ mBounds.join(bounds, mAdvance, 0);
mAdvance += layoutPiece.advance();
}
@@ -279,7 +284,7 @@ std::pair<float, MinikinRect> StyleRun::getBounds(const U16StringPiece& textBuf,
for (const auto[context, piece] : LayoutSplitter(textBuf, info.range, info.isRtl)) {
pieces.getOrCreate(textBuf, piece, context, mPaint, info.isRtl,
StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, paintId,
- compositor);
+ true /* bounds calculation */, compositor);
}
}
return std::make_pair(compositor.advance(), compositor.bounds());
@@ -290,7 +295,8 @@ class ExtentCompositor {
public:
ExtentCompositor() {}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect&) {
mExtent.extendBy(layoutPiece.extent());
}
@@ -309,12 +315,42 @@ MinikinExtent StyleRun::getExtent(const U16StringPiece& textBuf, const Range& ra
for (const auto[context, piece] : LayoutSplitter(textBuf, info.range, info.isRtl)) {
pieces.getOrCreate(textBuf, piece, context, mPaint, info.isRtl,
StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, paintId,
- compositor);
+ false /* bounds calculation */, compositor);
}
}
return compositor.extent();
}
+class LineMetricsCompositor {
+public:
+ LineMetricsCompositor() {}
+
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect& bounds) {
+ mMetrics.append(layoutPiece.extent(), bounds, layoutPiece.advance());
+ }
+
+ const LineMetrics& metrics() const { return mMetrics; }
+
+private:
+ LineMetrics mMetrics;
+};
+
+LineMetrics StyleRun::getLineMetrics(const U16StringPiece& textBuf, const Range& range,
+ const LayoutPieces& pieces) const {
+ LineMetricsCompositor compositor;
+ Bidi bidiFlag = mIsRtl ? Bidi::FORCE_RTL : Bidi::FORCE_LTR;
+ const uint32_t paintId = pieces.findPaintId(mPaint);
+ for (const BidiText::RunInfo info : BidiText(textBuf, range, bidiFlag)) {
+ for (const auto [context, piece] : LayoutSplitter(textBuf, info.range, info.isRtl)) {
+ pieces.getOrCreate(textBuf, piece, context, mPaint, info.isRtl,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, paintId,
+ true /* bounds calculation */, compositor);
+ }
+ }
+ return compositor.metrics();
+}
+
Layout MeasuredText::buildLayout(const U16StringPiece& textBuf, const Range& range,
const Range& contextRange, const MinikinPaint& paint,
StartHyphenEdit startHyphen, EndHyphenEdit endHyphen) {
@@ -346,8 +382,7 @@ MinikinRect MeasuredText::getBounds(const U16StringPiece& textBuf, const Range&
}
auto[advance, bounds] =
run->getBounds(textBuf, Range::intersection(runRange, range), layoutPieces);
- bounds.offset(totalAdvance, 0);
- rect.join(bounds);
+ rect.join(bounds, totalAdvance, 0);
totalAdvance += advance;
}
return rect;
@@ -360,11 +395,23 @@ MinikinExtent MeasuredText::getExtent(const U16StringPiece& textBuf, const Range
if (!Range::intersects(range, runRange)) {
continue;
}
- MinikinExtent runExtent =
- run->getExtent(textBuf, Range::intersection(runRange, range), layoutPieces);
- extent.extendBy(runExtent);
+ extent.extendBy(
+ run->getExtent(textBuf, Range::intersection(runRange, range), layoutPieces));
}
return extent;
}
+LineMetrics MeasuredText::getLineMetrics(const U16StringPiece& textBuf, const Range& range) const {
+ LineMetrics metrics;
+ for (const auto& run : runs) {
+ const Range& runRange = run->getRange();
+ if (!Range::intersects(range, runRange)) {
+ continue;
+ }
+ metrics.append(
+ run->getLineMetrics(textBuf, Range::intersection(runRange, range), layoutPieces));
+ }
+ return metrics;
+}
+
} // namespace minikin
diff --git a/libs/minikin/Measurement.cpp b/libs/minikin/Measurement.cpp
index 968ab6f..7797faa 100644
--- a/libs/minikin/Measurement.cpp
+++ b/libs/minikin/Measurement.cpp
@@ -21,8 +21,8 @@
#include "BidiUtils.h"
#include "LayoutSplitter.h"
-#include "minikin/BoundsCache.h"
#include "minikin/GraphemeBreak.h"
+#include "minikin/LayoutCache.h"
namespace {
bool isAsciiOrBidiControlCharacter(uint16_t c) {
@@ -194,11 +194,10 @@ size_t getOffsetForAdvance(const float* advances, const uint16_t* buf, size_t st
struct BoundsComposer {
BoundsComposer() : mAdvance(0) {}
- void operator()(const MinikinRect& rect, float advance) {
- MinikinRect tmp = rect;
- tmp.offset(mAdvance, 0);
- mBounds.join(tmp);
- mAdvance += advance;
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint& /* paint */,
+ const MinikinRect& bounds) {
+ mBounds.join(bounds, mAdvance, 0);
+ mAdvance += layoutPiece.advance();
}
float mAdvance;
@@ -215,9 +214,9 @@ void getBounds(const U16StringPiece& str, const Range& range, Bidi bidiFlag,
(piece.getStart() == range.getStart()) ? startHyphen : StartHyphenEdit::NO_EDIT;
const EndHyphenEdit pieceEndHyphen =
(piece.getEnd() == range.getEnd()) ? endHyphen : EndHyphenEdit::NO_EDIT;
- BoundsCache::getInstance().getOrCreate(str.substr(context), piece - context.getStart(),
- paint, info.isRtl, pieceStartHyphen,
- pieceEndHyphen, bc);
+ LayoutCache::getInstance().getOrCreate(
+ str.substr(context), piece - context.getStart(), paint, info.isRtl,
+ pieceStartHyphen, pieceEndHyphen, true /* bounds calculation */, bc);
// Increment word spacing for spacer
if (piece.getLength() == 1 && isWordSpace(str[piece.getStart()])) {
bc.mAdvance += paint.wordSpacing;
@@ -230,7 +229,7 @@ void getBounds(const U16StringPiece& str, const Range& range, Bidi bidiFlag,
struct ExtentComposer {
ExtentComposer() {}
- void operator()(const LayoutPiece& layoutPiece, const MinikinPaint&) {
+ void operator()(const LayoutPiece& layoutPiece, const MinikinPaint&, const MinikinRect&) {
extent.extendBy(layoutPiece.extent());
}
@@ -242,9 +241,10 @@ MinikinExtent getFontExtent(const U16StringPiece& textBuf, const Range& range, B
ExtentComposer composer;
for (const BidiText::RunInfo info : BidiText(textBuf, range, bidiFlag)) {
for (const auto [context, piece] : LayoutSplitter(textBuf, info.range, info.isRtl)) {
- LayoutCache::getInstance().getOrCreate(
- textBuf.substr(context), piece - context.getStart(), paint, info.isRtl,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, composer);
+ LayoutCache::getInstance().getOrCreate(textBuf.substr(context),
+ piece - context.getStart(), paint, info.isRtl,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
+ false /* bounds calculation */, composer);
}
}
return composer.extent;
diff --git a/libs/minikin/MinikinInternal.cpp b/libs/minikin/MinikinInternal.cpp
index d02f71f..5b81406 100644
--- a/libs/minikin/MinikinInternal.cpp
+++ b/libs/minikin/MinikinInternal.cpp
@@ -17,9 +17,12 @@
#define LOG_TAG "Minikin"
+#include "MinikinInternal.h"
+
#include <log/log.h>
-#include "MinikinInternal.h"
+#include "FeatureFlags.h"
+#include "minikin/MinikinPaint.h"
namespace minikin {
@@ -45,4 +48,12 @@ bool isVariationSelector(uint32_t codePoint) {
return isBMPVariationSelector(codePoint) || isVariationSelectorSupplement(codePoint);
}
+bool MinikinPaint::skipCache() const {
+ if (features::inter_character_justification()) {
+ return false; // if the flag is on, do not skip the cache.
+ } else {
+ return !fontFeatureSettings.empty();
+ }
+}
+
} // namespace minikin
diff --git a/libs/minikin/OptimalLineBreaker.cpp b/libs/minikin/OptimalLineBreaker.cpp
index b05a94d..1d11532 100644
--- a/libs/minikin/OptimalLineBreaker.cpp
+++ b/libs/minikin/OptimalLineBreaker.cpp
@@ -19,11 +19,7 @@
#include <algorithm>
#include <limits>
-#include "minikin/Characters.h"
-#include "minikin/Layout.h"
-#include "minikin/Range.h"
-#include "minikin/U16StringPiece.h"
-
+#include "FeatureFlags.h"
#include "HyphenatorMap.h"
#include "LayoutUtils.h"
#include "LineBreakerUtil.h"
@@ -31,6 +27,10 @@
#include "LocaleListCache.h"
#include "MinikinInternal.h"
#include "WordBreaker.h"
+#include "minikin/Characters.h"
+#include "minikin/Layout.h"
+#include "minikin/Range.h"
+#include "minikin/U16StringPiece.h"
namespace minikin {
@@ -41,6 +41,7 @@ namespace {
constexpr float SCORE_INFTY = std::numeric_limits<float>::max();
constexpr float SCORE_OVERFULL = 1e12f;
constexpr float SCORE_DESPERATE = 1e10f;
+constexpr float SCORE_FALLBACK = 1e6f;
// Multiplier for hyphen penalty on last line.
constexpr float LAST_LINE_PENALTY_MULTIPLIER = 4.0f;
@@ -96,12 +97,13 @@ struct OptimizeContext {
// fonts), it's only guaranteed to pick one.
float spaceWidth = 0.0f;
+ bool retryWithPhraseWordBreak = false;
+
// Append desperate break point to the candidates.
- inline void pushDesperate(uint32_t offset, ParaWidth sumOfCharWidths, uint32_t spaceCount,
- bool isRtl) {
- candidates.emplace_back(offset, sumOfCharWidths, sumOfCharWidths, SCORE_DESPERATE,
- spaceCount, spaceCount,
- HyphenationType::BREAK_AND_DONT_INSERT_HYPHEN, isRtl);
+ inline void pushDesperate(uint32_t offset, ParaWidth sumOfCharWidths, float score,
+ uint32_t spaceCount, bool isRtl) {
+ candidates.emplace_back(offset, sumOfCharWidths, sumOfCharWidths, score, spaceCount,
+ spaceCount, HyphenationType::BREAK_AND_DONT_INSERT_HYPHEN, isRtl);
}
// Append hyphenation break point to the candidates.
@@ -156,23 +158,56 @@ struct DesperateBreak {
// The sum of the character width from the beginning of the word.
ParaWidth sumOfChars;
- DesperateBreak(uint32_t offset, ParaWidth sumOfChars)
- : offset(offset), sumOfChars(sumOfChars){};
+ float score;
+
+ DesperateBreak(uint32_t offset, ParaWidth sumOfChars, float score)
+ : offset(offset), sumOfChars(sumOfChars), score(score){};
};
// Retrieves desperate break points from a word.
-std::vector<DesperateBreak> populateDesperatePoints(const MeasuredText& measured,
- const Range& range) {
+std::vector<DesperateBreak> populateDesperatePoints(const U16StringPiece& textBuf,
+ const MeasuredText& measured,
+ const Range& range, const Run& run) {
std::vector<DesperateBreak> out;
- ParaWidth width = measured.widths[range.getStart()];
- for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
- const float w = measured.widths[i];
- if (w == 0) {
- continue; // w == 0 means here is not a grapheme bounds. Don't break here.
+
+ if (!features::phrase_strict_fallback() ||
+ run.lineBreakWordStyle() == LineBreakWordStyle::None) {
+ ParaWidth width = measured.widths[range.getStart()];
+ for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
+ const float w = measured.widths[i];
+ if (w == 0) {
+ continue; // w == 0 means here is not a grapheme bounds. Don't break here.
+ }
+ out.emplace_back(i, width, SCORE_DESPERATE);
+ width += w;
+ }
+ } else {
+ WordBreaker wb;
+ wb.setText(textBuf.data(), textBuf.length());
+ ssize_t next = wb.followingWithLocale(getEffectiveLocale(run.getLocaleListId()),
+ run.lineBreakStyle(), LineBreakWordStyle::None,
+ range.getStart());
+
+ const bool calculateFallback = range.contains(next);
+ ParaWidth width = measured.widths[range.getStart()];
+ for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
+ const float w = measured.widths[i];
+ if (w == 0) {
+ continue; // w == 0 means here is not a grapheme bounds. Don't break here.
+ }
+ if (calculateFallback && i == (uint32_t)next) {
+ out.emplace_back(i, width, SCORE_FALLBACK);
+ next = wb.next();
+ if (!range.contains(next)) {
+ break;
+ }
+ } else {
+ out.emplace_back(i, width, SCORE_DESPERATE);
+ }
+ width += w;
}
- out.emplace_back(i, width);
- width += w;
}
+
return out;
}
@@ -192,7 +227,7 @@ void appendWithMerging(std::vector<HyphenBreak>::const_iterator hyIter,
// breaks first.
if (d != desperates.end() && (hyIter == endHyIter || d->offset <= hyIter->offset)) {
out->pushDesperate(d->offset, proc.sumOfCharWidthsAtPrevWordBreak + d->sumOfChars,
- proc.effectiveSpaceCount, isRtl);
+ d->score, proc.effectiveSpaceCount, isRtl);
d++;
} else {
out->pushHyphenation(hyIter->offset, proc.sumOfCharWidths - hyIter->second,
@@ -206,7 +241,7 @@ void appendWithMerging(std::vector<HyphenBreak>::const_iterator hyIter,
// Enumerate all line break candidates.
OptimizeContext populateCandidates(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidth, HyphenationFrequency frequency,
- bool isJustified) {
+ bool isJustified, bool forceWordStyleAutoToPhrase) {
const ParaWidth minLineWidth = lineWidth.getMin();
CharProcessor proc(textBuf);
@@ -227,7 +262,7 @@ OptimizeContext populateCandidates(const U16StringPiece& textBuf, const Measured
result.linePenalty = std::max(penalties.second, result.linePenalty);
}
- proc.updateLocaleIfNecessary(*run);
+ proc.updateLocaleIfNecessary(*run, forceWordStyleAutoToPhrase);
for (uint32_t i = range.getStart(); i < range.getEnd(); ++i) {
MINIKIN_ASSERT(textBuf[i] != CHAR_TAB, "TAB is not supported in optimal line breaker");
@@ -252,9 +287,10 @@ OptimizeContext populateCandidates(const U16StringPiece& textBuf, const Measured
hyIter++;
}
if (proc.widthFromLastWordBreak() > minLineWidth) {
- desperateBreaks = populateDesperatePoints(measured, contextRange);
+ desperateBreaks = populateDesperatePoints(textBuf, measured, contextRange, *run);
}
- appendWithMerging(beginHyIter, doHyphenation ? hyIter : beginHyIter, desperateBreaks,
+ const bool doHyphenationRun = doHyphenation && run->canHyphenate();
+ appendWithMerging(beginHyIter, doHyphenationRun ? hyIter : beginHyIter, desperateBreaks,
proc, hyphenPenalty, isRtl, &result);
// We skip breaks for zero-width characters inside replacement spans.
@@ -267,6 +303,7 @@ OptimizeContext populateCandidates(const U16StringPiece& textBuf, const Measured
}
}
result.spaceWidth = proc.spaceWidth;
+ result.retryWithPhraseWordBreak = proc.retryWithPhraseWordBreak;
return result;
}
@@ -276,7 +313,7 @@ public:
LineBreakResult computeBreaks(const OptimizeContext& context, const U16StringPiece& textBuf,
const MeasuredText& measuredText, const LineWidth& lineWidth,
- BreakStrategy strategy, bool justified);
+ BreakStrategy strategy, bool justified, bool useBoundsForWidth);
private:
// Data used to compute optimal line breaks
@@ -287,14 +324,15 @@ private:
};
LineBreakResult finishBreaksOptimal(const U16StringPiece& textBuf, const MeasuredText& measured,
const std::vector<OptimalBreaksData>& breaksData,
- const std::vector<Candidate>& candidates);
+ const std::vector<Candidate>& candidates,
+ bool useBoundsForWidth);
};
// Follow "prev" links in candidates array, and copy to result arrays.
LineBreakResult LineBreakOptimizer::finishBreaksOptimal(
const U16StringPiece& textBuf, const MeasuredText& measured,
- const std::vector<OptimalBreaksData>& breaksData,
- const std::vector<Candidate>& candidates) {
+ const std::vector<OptimalBreaksData>& breaksData, const std::vector<Candidate>& candidates,
+ bool useBoundsForWidth) {
LineBreakResult result;
const uint32_t nCand = candidates.size();
uint32_t prevIndex;
@@ -305,9 +343,28 @@ LineBreakResult LineBreakOptimizer::finishBreaksOptimal(
result.breakPoints.push_back(cand.offset);
result.widths.push_back(cand.postBreak - prev.preBreak);
- MinikinExtent extent = measured.getExtent(textBuf, Range(prev.offset, cand.offset));
- result.ascents.push_back(extent.ascent);
- result.descents.push_back(extent.descent);
+ if (useBoundsForWidth) {
+ Range range = Range(prev.offset, cand.offset);
+ Range actualRange = trimTrailingLineEndSpaces(textBuf, range);
+ if (actualRange.isEmpty()) {
+ MinikinExtent extent = measured.getExtent(textBuf, range);
+ result.ascents.push_back(extent.ascent);
+ result.descents.push_back(extent.descent);
+ result.bounds.emplace_back(0, extent.ascent, cand.postBreak - prev.preBreak,
+ extent.descent);
+ } else {
+ LineMetrics metrics = measured.getLineMetrics(textBuf, actualRange);
+ result.ascents.push_back(metrics.extent.ascent);
+ result.descents.push_back(metrics.extent.descent);
+ result.bounds.emplace_back(metrics.bounds);
+ }
+ } else {
+ MinikinExtent extent = measured.getExtent(textBuf, Range(prev.offset, cand.offset));
+ result.ascents.push_back(extent.ascent);
+ result.descents.push_back(extent.descent);
+ result.bounds.emplace_back(0, extent.ascent, cand.postBreak - prev.preBreak,
+ extent.descent);
+ }
const HyphenEdit edit =
packHyphenEdit(editForNextLine(prev.hyphenType), editForThisLine(cand.hyphenType));
@@ -321,7 +378,8 @@ LineBreakResult LineBreakOptimizer::computeBreaks(const OptimizeContext& context
const U16StringPiece& textBuf,
const MeasuredText& measured,
const LineWidth& lineWidth,
- BreakStrategy strategy, bool justified) {
+ BreakStrategy strategy, bool justified,
+ bool useBoundsForWidth) {
const std::vector<Candidate>& candidates = context.candidates;
uint32_t active = 0;
const uint32_t nCand = candidates.size();
@@ -357,7 +415,25 @@ LineBreakResult LineBreakOptimizer::computeBreaks(const OptimizeContext& context
}
const float jScore = breaksData[j].score;
if (jScore + bestHope >= best) continue;
- const float delta = candidates[j].preBreak - leftEdge;
+ float delta = candidates[j].preBreak - leftEdge;
+
+ if (useBoundsForWidth) {
+ // FIXME: Support bounds based line break for hyphenated break point.
+ if (candidates[i].hyphenType == HyphenationType::DONT_BREAK &&
+ candidates[j].hyphenType == HyphenationType::DONT_BREAK) {
+ if (delta >= 0) {
+ Range range = Range(candidates[j].offset, candidates[i].offset);
+ Range actualRange = trimTrailingLineEndSpaces(textBuf, range);
+ if (!actualRange.isEmpty() && measured.hasOverhang(range)) {
+ float boundsDelta =
+ width - measured.getBounds(textBuf, actualRange).width();
+ if (boundsDelta < 0) {
+ delta = boundsDelta;
+ }
+ }
+ }
+ }
+ }
// compute width score for line
@@ -399,21 +475,52 @@ LineBreakResult LineBreakOptimizer::computeBreaks(const OptimizeContext& context
bestPrev, // prev
breaksData[bestPrev].lineNumber + 1}); // lineNumber
}
- return finishBreaksOptimal(textBuf, measured, breaksData, candidates);
+ return finishBreaksOptimal(textBuf, measured, breaksData, candidates, useBoundsForWidth);
}
} // namespace
LineBreakResult breakLineOptimal(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidth, BreakStrategy strategy,
- HyphenationFrequency frequency, bool justified) {
+ HyphenationFrequency frequency, bool justified,
+ bool useBoundsForWidth) {
if (textBuf.size() == 0) {
return LineBreakResult();
}
+
const OptimizeContext context =
- populateCandidates(textBuf, measured, lineWidth, frequency, justified);
+ populateCandidates(textBuf, measured, lineWidth, frequency, justified,
+ false /* forceWordStyleAutoToPhrase */);
LineBreakOptimizer optimizer;
- return optimizer.computeBreaks(context, textBuf, measured, lineWidth, strategy, justified);
+ LineBreakResult res = optimizer.computeBreaks(context, textBuf, measured, lineWidth, strategy,
+ justified, useBoundsForWidth);
+
+ if (!features::word_style_auto()) {
+ return res;
+ }
+
+ // The line breaker says that retry with phrase based word break because of the auto option and
+ // given locales.
+ if (!context.retryWithPhraseWordBreak) {
+ return res;
+ }
+
+ // If the line break result is more than heuristics threshold, don't try pharse based word
+ // break.
+ if (res.breakPoints.size() >= LBW_AUTO_HEURISTICS_LINE_COUNT) {
+ return res;
+ }
+
+ const OptimizeContext phContext =
+ populateCandidates(textBuf, measured, lineWidth, frequency, justified,
+ true /* forceWordStyleAutoToPhrase */);
+ LineBreakResult res2 = optimizer.computeBreaks(phContext, textBuf, measured, lineWidth,
+ strategy, justified, useBoundsForWidth);
+ if (res2.breakPoints.size() < LBW_AUTO_HEURISTICS_LINE_COUNT) {
+ return res2;
+ } else {
+ return res;
+ }
}
} // namespace minikin
diff --git a/libs/minikin/OptimalLineBreaker.h b/libs/minikin/OptimalLineBreaker.h
index f13e2a8..da7798d 100644
--- a/libs/minikin/OptimalLineBreaker.h
+++ b/libs/minikin/OptimalLineBreaker.h
@@ -25,7 +25,8 @@ namespace minikin {
LineBreakResult breakLineOptimal(const U16StringPiece& textBuf, const MeasuredText& measured,
const LineWidth& lineWidthLimits, BreakStrategy strategy,
- HyphenationFrequency frequency, bool justified);
+ HyphenationFrequency frequency, bool justified,
+ bool useBoundsForWidth);
} // namespace minikin
diff --git a/libs/minikin/ScriptUtils.cpp b/libs/minikin/ScriptUtils.cpp
new file mode 100644
index 0000000..90bd5de
--- /dev/null
+++ b/libs/minikin/ScriptUtils.cpp
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "Minikin"
+
+#include "ScriptUtils.h"
+
+#include <unicode/ubidi.h>
+#include <unicode/uscript.h>
+#include <unicode/utf16.h>
+#include <unicode/utypes.h>
+
+#include <algorithm>
+
+#include "MinikinInternal.h"
+#include "minikin/Emoji.h"
+
+namespace minikin {
+
+static hb_codepoint_t decodeUtf16(U16StringPiece text, Range range, uint32_t pos) {
+ uint32_t result;
+ U16_NEXT(text.data(), pos, range.getEnd(), result);
+ if (U_IS_SURROGATE(result)) { // isolated surrogate
+ result = CHAR_REPLACEMENT_CHARACTER;
+ }
+ return static_cast<hb_codepoint_t>(result);
+}
+
+static UScriptCode getICUScript(uint32_t cp) {
+ UErrorCode status = U_ZERO_ERROR;
+ UScriptCode scriptCode = uscript_getScript(cp, &status);
+ if (U_FAILURE(status)) [[unlikely]] {
+ return USCRIPT_INVALID_CODE;
+ }
+ return scriptCode;
+}
+
+static hb_script_t getHbScript(uint32_t cp) {
+ hb_unicode_funcs_t* unicode_func = hb_unicode_funcs_get_default();
+ return hb_unicode_script(unicode_func, cp);
+}
+
+// static
+std::pair<uint32_t, hb_script_t> ScriptText::getScriptRun(U16StringPiece text, Range range,
+ uint32_t pos) {
+ if (!range.contains(pos)) {
+ return std::make_pair(range.getEnd(), HB_SCRIPT_UNKNOWN);
+ }
+
+ uint32_t cp = decodeUtf16(text, range, pos);
+ UScriptCode current_script = getICUScript(cp);
+ hb_script_t current_hb_script = getHbScript(cp);
+ uint32_t i;
+ for (i = pos + U16_LENGTH(cp); i < range.getEnd(); i += U16_LENGTH(cp)) {
+ cp = decodeUtf16(text, range, i);
+ UScriptCode next_script = getICUScript(cp);
+ if (current_script != next_script) {
+ if (current_script == USCRIPT_INHERITED || current_script == USCRIPT_COMMON) {
+ current_script = next_script;
+ current_hb_script = getHbScript(cp);
+ } else if (next_script == USCRIPT_INHERITED || next_script == USCRIPT_COMMON) {
+ continue;
+ } else {
+ break;
+ }
+ }
+ }
+ if (current_script == USCRIPT_INHERITED) {
+ return std::make_pair(i, HB_SCRIPT_COMMON);
+ } else {
+ return std::make_pair(i, current_hb_script);
+ }
+}
+
+} // namespace minikin
diff --git a/libs/minikin/ScriptUtils.h b/libs/minikin/ScriptUtils.h
new file mode 100644
index 0000000..7bf575f
--- /dev/null
+++ b/libs/minikin/ScriptUtils.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_SCRIPT_UTILS_H
+#define MINIKIN_SCRIPT_UTILS_H
+
+#define LOG_TAG "Minikin"
+
+#include <unicode/ubidi.h>
+
+#include <memory>
+
+#include "minikin/Layout.h"
+#include "minikin/Macros.h"
+#include "minikin/U16StringPiece.h"
+
+namespace minikin {
+
+// A helper class for iterating the bidi run transitions.
+class ScriptText {
+public:
+ struct RunInfo {
+ Range range;
+ hb_script_t script;
+ };
+
+ ScriptText(const U16StringPiece& textBuf, uint32_t start, uint32_t end)
+ : mTextBuf(textBuf), mRange(start, end) {}
+
+ class iterator {
+ public:
+ inline bool operator==(const iterator& o) const {
+ return mStart == o.mStart && mParent == o.mParent;
+ }
+
+ inline bool operator!=(const iterator& o) const { return !(*this == o); }
+
+ inline std::pair<Range, hb_script_t> operator*() const {
+ return std::make_pair(Range(mStart, mEnd), mScript);
+ }
+
+ inline iterator& operator++() {
+ mStart = mEnd;
+ std::tie(mEnd, mScript) = getScriptRun(mParent->mTextBuf, mParent->mRange, mStart);
+ return *this;
+ }
+
+ private:
+ friend class ScriptText;
+
+ iterator(const ScriptText* parent, uint32_t start) : mParent(parent), mStart(start) {
+ std::tie(mEnd, mScript) = getScriptRun(mParent->mTextBuf, mParent->mRange, mStart);
+ }
+
+ const ScriptText* mParent;
+ uint32_t mStart;
+ uint32_t mEnd;
+ hb_script_t mScript;
+ };
+
+ inline iterator begin() const { return iterator(this, mRange.getStart()); }
+ inline iterator end() const { return iterator(this, mRange.getEnd()); }
+
+private:
+ U16StringPiece mTextBuf;
+ Range mRange;
+
+ static std::pair<uint32_t, hb_script_t> getScriptRun(U16StringPiece text, Range range,
+ uint32_t pos);
+
+ MINIKIN_PREVENT_COPY_AND_ASSIGN(ScriptText);
+};
+
+} // namespace minikin
+
+#endif // MINIKIN_SCRIPT_UTILS_H
diff --git a/libs/minikin/StringPiece.h b/libs/minikin/StringPiece.h
index befb312..84c7d17 100644
--- a/libs/minikin/StringPiece.h
+++ b/libs/minikin/StringPiece.h
@@ -29,6 +29,7 @@ public:
StringPiece(const char* data) : mData(data), mLength(data == nullptr ? 0 : strlen(data)) {}
StringPiece(const char* data, size_t length) : mData(data), mLength(length) {}
StringPiece(const std::string& str) : mData(str.data()), mLength(str.size()) {}
+ StringPiece(std::string_view str) : mData(str.data()), mLength(str.size()) {}
inline const char* data() const { return mData; }
inline size_t length() const { return mLength; }
diff --git a/libs/minikin/WordBreaker.cpp b/libs/minikin/WordBreaker.cpp
index ae79d3c..a1e9526 100644
--- a/libs/minikin/WordBreaker.cpp
+++ b/libs/minikin/WordBreaker.cpp
@@ -32,20 +32,54 @@
namespace minikin {
namespace {
-static UBreakIterator* createNewIterator(const Locale& locale, LineBreakStyle lbStyle,
- LineBreakWordStyle lbWordStyle) {
+static std::unique_ptr<BreakIterator> createNewIterator(const Locale& locale,
+ LineBreakStyle lbStyle,
+ LineBreakWordStyle lbWordStyle) {
+ MINIKIN_ASSERT(lbStyle != LineBreakStyle::Auto,
+ "LineBreakStyle::Auto must be resolved beforehand.");
+ MINIKIN_ASSERT(lbWordStyle != LineBreakWordStyle::Auto,
+ "LineBreakWordStyle::Auto must be resolved beforehand.");
+
// TODO: handle failure status
- UErrorCode status = U_ZERO_ERROR;
- char localeID[ULOC_FULLNAME_CAPACITY] = {};
- uloc_forLanguageTag(locale.getStringWithLineBreakOption(lbStyle, lbWordStyle).c_str(), localeID,
- ULOC_FULLNAME_CAPACITY, nullptr, &status);
- return ubrk_open(UBreakIteratorType::UBRK_LINE, localeID, nullptr, 0, &status);
+ if (lbStyle == LineBreakStyle::NoBreak) {
+ return std::make_unique<NoBreakBreakIterator>();
+ } else {
+ UErrorCode status = U_ZERO_ERROR;
+ char localeID[ULOC_FULLNAME_CAPACITY] = {};
+ uloc_forLanguageTag(locale.getStringWithLineBreakOption(lbStyle, lbWordStyle).c_str(),
+ localeID, ULOC_FULLNAME_CAPACITY, nullptr, &status);
+ IcuUbrkUniquePtr icuBrkPtr(
+ ubrk_open(UBreakIteratorType::UBRK_LINE, localeID, nullptr, 0, &status));
+ return std::make_unique<ICUBreakIterator>(std::move(icuBrkPtr));
+ }
}
} // namespace
+void ICUBreakIterator::setText(UText* text, size_t) {
+ UErrorCode status = U_ZERO_ERROR;
+ ubrk_setUText(mBreaker.get(), text, &status);
+}
+
+bool ICUBreakIterator::isBoundary(int32_t i) {
+ return ubrk_isBoundary(mBreaker.get(), i);
+}
+
+int32_t ICUBreakIterator::following(size_t i) {
+ return ubrk_following(mBreaker.get(), i);
+}
+
+int32_t ICUBreakIterator::next() {
+ return ubrk_next(mBreaker.get());
+}
+
ICULineBreakerPool::Slot ICULineBreakerPoolImpl::acquire(const Locale& locale,
LineBreakStyle lbStyle,
LineBreakWordStyle lbWordStyle) {
+ if (lbStyle == LineBreakStyle::Auto) {
+ lbStyle = locale.supportsScript('J', 'p', 'a', 'n') ? LineBreakStyle::Strict
+ : LineBreakStyle::None;
+ }
+
const uint64_t id = locale.getIdentifier();
std::lock_guard<std::mutex> lock(mMutex);
for (auto i = mPool.begin(); i != mPool.end(); i++) {
@@ -57,8 +91,7 @@ ICULineBreakerPool::Slot ICULineBreakerPoolImpl::acquire(const Locale& locale,
}
// Not found in pool. Create new one.
- return {id, lbStyle, lbWordStyle,
- IcuUbrkUniquePtr(createNewIterator(locale, lbStyle, lbWordStyle))};
+ return {id, lbStyle, lbWordStyle, createNewIterator(locale, lbStyle, lbWordStyle)};
}
void ICULineBreakerPoolImpl::release(ICULineBreakerPool::Slot&& slot) {
@@ -86,10 +119,9 @@ ssize_t WordBreaker::followingWithLocale(const Locale& locale, LineBreakStyle lb
return mCurrent;
}
mIcuBreaker = mPool->acquire(locale, lbStyle, lbWordStyle);
- UErrorCode status = U_ZERO_ERROR;
MINIKIN_ASSERT(mText != nullptr, "setText must be called first");
// TODO: handle failure status
- ubrk_setUText(mIcuBreaker.breaker.get(), mUText.get(), &status);
+ mIcuBreaker.breaker->setText(mUText.get(), mTextSize);
if (mInEmailOrUrl) {
// Note:
// Don't reset mCurrent, mLast, or mScanOffset for keeping email/URL context.
@@ -171,9 +203,9 @@ static bool isValidBreak(const uint16_t* buf, size_t bufEnd, int32_t i) {
// Customized iteratorNext that takes care of both resets and our modifications
// to ICU's behavior.
int32_t WordBreaker::iteratorNext() {
- int32_t result = ubrk_following(mIcuBreaker.breaker.get(), mCurrent);
+ int32_t result = mIcuBreaker.breaker->following(mCurrent);
while (!isValidBreak(mText, mTextSize, result)) {
- result = ubrk_next(mIcuBreaker.breaker.get());
+ result = mIcuBreaker.breaker->next();
}
return result;
}
@@ -221,11 +253,11 @@ void WordBreaker::detectEmailOrUrl() {
}
}
if (state == SAW_AT || state == SAW_COLON_SLASH_SLASH) {
- if (!ubrk_isBoundary(mIcuBreaker.breaker.get(), i)) {
+ if (!mIcuBreaker.breaker->isBoundary(i)) {
// If there are combining marks or such at the end of the URL or the email address,
// consider them a part of the URL or the email, and skip to the next actual
// boundary.
- i = ubrk_following(mIcuBreaker.breaker.get(), i);
+ i = mIcuBreaker.breaker->following(i);
}
mInEmailOrUrl = true;
} else {
diff --git a/libs/minikin/WordBreaker.h b/libs/minikin/WordBreaker.h
index c4af635..ccb3186 100644
--- a/libs/minikin/WordBreaker.h
+++ b/libs/minikin/WordBreaker.h
@@ -37,6 +37,16 @@
namespace minikin {
+class BreakIterator {
+public:
+ BreakIterator() {}
+ virtual ~BreakIterator() {}
+ virtual void setText(UText* text, size_t size) = 0;
+ virtual bool isBoundary(int32_t i) = 0;
+ virtual int32_t following(size_t i) = 0;
+ virtual int32_t next() = 0;
+};
+
// A class interface for providing pooling implementation of ICU's line breaker.
// The implementation can be customized for testing purposes.
class ICULineBreakerPool {
@@ -44,7 +54,7 @@ public:
struct Slot {
Slot() : localeId(0), breaker(nullptr) {}
Slot(uint64_t localeId, LineBreakStyle lbStyle, LineBreakWordStyle lbWordStyle,
- IcuUbrkUniquePtr&& breaker)
+ std::unique_ptr<BreakIterator>&& breaker)
: localeId(localeId),
lbStyle(lbStyle),
lbWordStyle(lbWordStyle),
@@ -60,7 +70,7 @@ public:
uint64_t localeId;
LineBreakStyle lbStyle;
LineBreakWordStyle lbWordStyle;
- IcuUbrkUniquePtr breaker;
+ std::unique_ptr<BreakIterator> breaker;
};
virtual ~ICULineBreakerPool() {}
virtual Slot acquire(const Locale& locale, LineBreakStyle lbStyle,
@@ -95,6 +105,33 @@ private:
mutable std::mutex mMutex;
};
+class ICUBreakIterator : public BreakIterator {
+public:
+ ICUBreakIterator(IcuUbrkUniquePtr&& breaker) : mBreaker(std::move(breaker)) {}
+ virtual ~ICUBreakIterator() {}
+ virtual void setText(UText* text, size_t size);
+ virtual bool isBoundary(int32_t i);
+ virtual int32_t following(size_t i);
+ virtual int32_t next();
+
+private:
+ IcuUbrkUniquePtr mBreaker;
+};
+
+class NoBreakBreakIterator : public BreakIterator {
+public:
+ NoBreakBreakIterator() {}
+ virtual ~NoBreakBreakIterator() {}
+
+ virtual void setText(UText*, size_t size) { mSize = size; }
+ virtual bool isBoundary(int32_t i) { return i == 0 || i == static_cast<int32_t>(mSize); }
+ virtual int32_t following(size_t) { return mSize; }
+ virtual int32_t next() { return mSize; }
+
+private:
+ size_t mSize = 0;
+};
+
class WordBreaker {
public:
virtual ~WordBreaker() { finish(); }
diff --git a/tests/Android.bp b/tests/Android.bp
index 3088ca4..4611594 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -16,15 +16,18 @@ filegroup {
"data/CustomExtent.ttf",
"data/Emoji.ttf",
"data/EmojiBase.ttf",
+ "data/Hangul.ttf",
"data/Hiragana.ttf",
"data/Italic.ttf",
"data/Ja.ttf",
+ "data/Japanese.ttf",
"data/Ko.ttf",
"data/Ligature.ttf",
"data/LayoutTestFont.ttf",
"data/MultiAxis.ttf",
"data/NoCmapFormat14.ttf",
"data/NoGlyphFont.ttf",
+ "data/OvershootTest.ttf",
"data/OverrideEmoji.ttf",
"data/Regular.ttf",
"data/TextEmojiFont.ttf",
@@ -32,6 +35,7 @@ filegroup {
"data/UnicodeBMPOnly2.ttf",
"data/UnicodeUCS4.ttf",
"data/VariationSelectorTest-Regular.ttf",
+ "data/WeightEqualsEmVariableFont.ttf",
"data/ZhHans.ttf",
"data/ZhHant.ttf",
"data/emoji.xml",
diff --git a/tests/data/Hangul.ttf b/tests/data/Hangul.ttf
new file mode 100644
index 0000000..1dff832
--- /dev/null
+++ b/tests/data/Hangul.ttf
Binary files differ
diff --git a/tests/data/Hangul.ttx b/tests/data/Hangul.ttx
new file mode 100644
index 0000000..ea17053
--- /dev/null
+++ b/tests/data/Hangul.ttx
@@ -0,0 +1,11819 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
+
+ <GlyphOrder>
+ <GlyphID id="0" name=".notdef"/>
+ <GlyphID id="1" name="1em"/>
+ </GlyphOrder>
+
+ <head>
+ <tableVersion value="1.0"/>
+ <fontRevision value="1.0"/>
+ <checkSumAdjustment value="0x640cdb2f"/>
+ <magicNumber value="0x5f0f3cf5"/>
+ <flags value="00000000 00000011"/>
+ <unitsPerEm value="100"/>
+ <created value="Fri Mar 17 07:26:00 2017"/>
+ <macStyle value="00000000 00000000"/>
+ <lowestRecPPEM value="7"/>
+ <fontDirectionHint value="2"/>
+ <glyphDataFormat value="0"/>
+ </head>
+
+ <hhea>
+ <tableVersion value="0x00010000"/>
+ <ascent value="0"/>
+ <descent value="0"/>
+ <lineGap value="0"/>
+ <caretSlopeRise value="1"/>
+ <caretSlopeRun value="0"/>
+ <caretOffset value="0"/>
+ <reserved0 value="0"/>
+ <reserved1 value="0"/>
+ <reserved2 value="0"/>
+ <reserved3 value="0"/>
+ <metricDataFormat value="0"/>
+ </hhea>
+
+ <maxp>
+ <tableVersion value="0x10000"/>
+ <maxZones value="0"/>
+ <maxTwilightPoints value="0"/>
+ <maxStorage value="0"/>
+ <maxFunctionDefs value="0"/>
+ <maxInstructionDefs value="0"/>
+ <maxStackElements value="0"/>
+ <maxSizeOfInstructions value="0"/>
+ <maxComponentElements value="0"/>
+ </maxp>
+
+ <OS_2>
+ <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
+ will be recalculated by the compiler -->
+ <version value="3"/>
+ <xAvgCharWidth value="594"/>
+ <usWeightClass value="400"/>
+ <usWidthClass value="5"/>
+ <fsType value="00000000 00001000"/>
+ <ySubscriptXSize value="650"/>
+ <ySubscriptYSize value="600"/>
+ <ySubscriptXOffset value="0"/>
+ <ySubscriptYOffset value="75"/>
+ <ySuperscriptXSize value="650"/>
+ <ySuperscriptYSize value="600"/>
+ <ySuperscriptXOffset value="0"/>
+ <ySuperscriptYOffset value="350"/>
+ <yStrikeoutSize value="50"/>
+ <yStrikeoutPosition value="300"/>
+ <sFamilyClass value="0"/>
+ <panose>
+ <bFamilyType value="0"/>
+ <bSerifStyle value="0"/>
+ <bWeight value="5"/>
+ <bProportion value="0"/>
+ <bContrast value="0"/>
+ <bStrokeVariation value="0"/>
+ <bArmStyle value="0"/>
+ <bLetterForm value="0"/>
+ <bMidline value="0"/>
+ <bXHeight value="0"/>
+ </panose>
+ <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+ <achVendID value="UKWN"/>
+ <fsSelection value="00000000 01000000"/>
+ <usFirstCharIndex value="32"/>
+ <usLastCharIndex value="122"/>
+ <sTypoAscender value="800"/>
+ <sTypoDescender value="-200"/>
+ <sTypoLineGap value="200"/>
+ <usWinAscent value="1000"/>
+ <usWinDescent value="200"/>
+ <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+ <sxHeight value="500"/>
+ <sCapHeight value="700"/>
+ <usDefaultChar value="0"/>
+ <usBreakChar value="32"/>
+ <usMaxContext value="0"/>
+ </OS_2>
+
+ <hmtx>
+ <mtx name=".notdef" width="50" lsb="0"/>
+ <mtx name="1em" width="100" lsb="0"/>
+ </hmtx>
+
+ <cmap>
+ <tableVersion version="0"/>
+ <cmap_format_12 format="12" reserved="0" length="6" nGroups="1" platformID="3" platEncID="10" language="0">
+ <map code="0x0020" name="1em" />
+ <map code="0x002E" name="1em" />
+
+ <!-- CJK Symbols -->
+ <map code="0x3000" name="1em" /> <!-- IDEOGRAPHIC SPACE -->
+ <map code="0x3001" name="1em" /> <!-- IDEOGRAPHIC COMMA -->
+ <map code="0x3002" name="1em" /> <!-- IDEOGRAPHIC FULL STOP -->
+
+ <!-- Hangul letters -->
+ <map code="0x1100" name="1em"/><!-- HANGUL CHOSEONG KIYEOK -->
+ <map code="0x1101" name="1em"/><!-- HANGUL CHOSEONG SSANGKIYEOK -->
+ <map code="0x1102" name="1em"/><!-- HANGUL CHOSEONG NIEUN -->
+ <map code="0x1103" name="1em"/><!-- HANGUL CHOSEONG TIKEUT -->
+ <map code="0x1104" name="1em"/><!-- HANGUL CHOSEONG SSANGTIKEUT -->
+ <map code="0x1105" name="1em"/><!-- HANGUL CHOSEONG RIEUL -->
+ <map code="0x1106" name="1em"/><!-- HANGUL CHOSEONG MIEUM -->
+ <map code="0x1107" name="1em"/><!-- HANGUL CHOSEONG PIEUP -->
+ <map code="0x1108" name="1em"/><!-- HANGUL CHOSEONG SSANGPIEUP -->
+ <map code="0x1109" name="1em"/><!-- HANGUL CHOSEONG SIOS -->
+ <map code="0x110a" name="1em"/><!-- HANGUL CHOSEONG SSANGSIOS -->
+ <map code="0x110b" name="1em"/><!-- HANGUL CHOSEONG IEUNG -->
+ <map code="0x110c" name="1em"/><!-- HANGUL CHOSEONG CIEUC -->
+ <map code="0x110d" name="1em"/><!-- HANGUL CHOSEONG SSANGCIEUC -->
+ <map code="0x110e" name="1em"/><!-- HANGUL CHOSEONG CHIEUCH -->
+ <map code="0x110f" name="1em"/><!-- HANGUL CHOSEONG KHIEUKH -->
+ <map code="0x1110" name="1em"/><!-- HANGUL CHOSEONG THIEUTH -->
+ <map code="0x1111" name="1em"/><!-- HANGUL CHOSEONG PHIEUPH -->
+ <map code="0x1112" name="1em"/><!-- HANGUL CHOSEONG HIEUH -->
+ <map code="0x1113" name="1em"/><!-- HANGUL CHOSEONG NIEUN-KIYEOK -->
+ <map code="0x1114" name="1em"/><!-- HANGUL CHOSEONG SSANGNIEUN -->
+ <map code="0x1115" name="1em"/><!-- HANGUL CHOSEONG NIEUN-TIKEUT -->
+ <map code="0x1116" name="1em"/><!-- HANGUL CHOSEONG NIEUN-PIEUP -->
+ <map code="0x1117" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-KIYEOK -->
+ <map code="0x1118" name="1em"/><!-- HANGUL CHOSEONG RIEUL-NIEUN -->
+ <map code="0x1119" name="1em"/><!-- HANGUL CHOSEONG SSANGRIEUL -->
+ <map code="0x111a" name="1em"/><!-- HANGUL CHOSEONG RIEUL-HIEUH -->
+ <map code="0x111b" name="1em"/><!-- HANGUL CHOSEONG KAPYEOUNRIEUL -->
+ <map code="0x111c" name="1em"/><!-- HANGUL CHOSEONG MIEUM-PIEUP -->
+ <map code="0x111d" name="1em"/><!-- HANGUL CHOSEONG KAPYEOUNMIEUM -->
+ <map code="0x111e" name="1em"/><!-- HANGUL CHOSEONG PIEUP-KIYEOK -->
+ <map code="0x111f" name="1em"/><!-- HANGUL CHOSEONG PIEUP-NIEUN -->
+ <map code="0x1120" name="1em"/><!-- HANGUL CHOSEONG PIEUP-TIKEUT -->
+ <map code="0x1121" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS -->
+ <map code="0x1122" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS-KIYEOK -->
+ <map code="0x1123" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS-TIKEUT -->
+ <map code="0x1124" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS-PIEUP -->
+ <map code="0x1125" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SSANGSIOS -->
+ <map code="0x1126" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS-CIEUC -->
+ <map code="0x1127" name="1em"/><!-- HANGUL CHOSEONG PIEUP-CIEUC -->
+ <map code="0x1128" name="1em"/><!-- HANGUL CHOSEONG PIEUP-CHIEUCH -->
+ <map code="0x1129" name="1em"/><!-- HANGUL CHOSEONG PIEUP-THIEUTH -->
+ <map code="0x112a" name="1em"/><!-- HANGUL CHOSEONG PIEUP-PHIEUPH -->
+ <map code="0x112b" name="1em"/><!-- HANGUL CHOSEONG KAPYEOUNPIEUP -->
+ <map code="0x112c" name="1em"/><!-- HANGUL CHOSEONG KAPYEOUNSSANGPIEUP -->
+ <map code="0x112d" name="1em"/><!-- HANGUL CHOSEONG SIOS-KIYEOK -->
+ <map code="0x112e" name="1em"/><!-- HANGUL CHOSEONG SIOS-NIEUN -->
+ <map code="0x112f" name="1em"/><!-- HANGUL CHOSEONG SIOS-TIKEUT -->
+ <map code="0x1130" name="1em"/><!-- HANGUL CHOSEONG SIOS-RIEUL -->
+ <map code="0x1131" name="1em"/><!-- HANGUL CHOSEONG SIOS-MIEUM -->
+ <map code="0x1132" name="1em"/><!-- HANGUL CHOSEONG SIOS-PIEUP -->
+ <map code="0x1133" name="1em"/><!-- HANGUL CHOSEONG SIOS-PIEUP-KIYEOK -->
+ <map code="0x1134" name="1em"/><!-- HANGUL CHOSEONG SIOS-SSANGSIOS -->
+ <map code="0x1135" name="1em"/><!-- HANGUL CHOSEONG SIOS-IEUNG -->
+ <map code="0x1136" name="1em"/><!-- HANGUL CHOSEONG SIOS-CIEUC -->
+ <map code="0x1137" name="1em"/><!-- HANGUL CHOSEONG SIOS-CHIEUCH -->
+ <map code="0x1138" name="1em"/><!-- HANGUL CHOSEONG SIOS-KHIEUKH -->
+ <map code="0x1139" name="1em"/><!-- HANGUL CHOSEONG SIOS-THIEUTH -->
+ <map code="0x113a" name="1em"/><!-- HANGUL CHOSEONG SIOS-PHIEUPH -->
+ <map code="0x113b" name="1em"/><!-- HANGUL CHOSEONG SIOS-HIEUH -->
+ <map code="0x113c" name="1em"/><!-- HANGUL CHOSEONG CHITUEUMSIOS -->
+ <map code="0x113d" name="1em"/><!-- HANGUL CHOSEONG CHITUEUMSSANGSIOS -->
+ <map code="0x113e" name="1em"/><!-- HANGUL CHOSEONG CEONGCHIEUMSIOS -->
+ <map code="0x113f" name="1em"/><!-- HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS -->
+ <map code="0x1140" name="1em"/><!-- HANGUL CHOSEONG PANSIOS -->
+ <map code="0x1141" name="1em"/><!-- HANGUL CHOSEONG IEUNG-KIYEOK -->
+ <map code="0x1142" name="1em"/><!-- HANGUL CHOSEONG IEUNG-TIKEUT -->
+ <map code="0x1143" name="1em"/><!-- HANGUL CHOSEONG IEUNG-MIEUM -->
+ <map code="0x1144" name="1em"/><!-- HANGUL CHOSEONG IEUNG-PIEUP -->
+ <map code="0x1145" name="1em"/><!-- HANGUL CHOSEONG IEUNG-SIOS -->
+ <map code="0x1146" name="1em"/><!-- HANGUL CHOSEONG IEUNG-PANSIOS -->
+ <map code="0x1147" name="1em"/><!-- HANGUL CHOSEONG SSANGIEUNG -->
+ <map code="0x1148" name="1em"/><!-- HANGUL CHOSEONG IEUNG-CIEUC -->
+ <map code="0x1149" name="1em"/><!-- HANGUL CHOSEONG IEUNG-CHIEUCH -->
+ <map code="0x114a" name="1em"/><!-- HANGUL CHOSEONG IEUNG-THIEUTH -->
+ <map code="0x114b" name="1em"/><!-- HANGUL CHOSEONG IEUNG-PHIEUPH -->
+ <map code="0x114c" name="1em"/><!-- HANGUL CHOSEONG YESIEUNG -->
+ <map code="0x114d" name="1em"/><!-- HANGUL CHOSEONG CIEUC-IEUNG -->
+ <map code="0x114e" name="1em"/><!-- HANGUL CHOSEONG CHITUEUMCIEUC -->
+ <map code="0x114f" name="1em"/><!-- HANGUL CHOSEONG CHITUEUMSSANGCIEUC -->
+ <map code="0x1150" name="1em"/><!-- HANGUL CHOSEONG CEONGCHIEUMCIEUC -->
+ <map code="0x1151" name="1em"/><!-- HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC -->
+ <map code="0x1152" name="1em"/><!-- HANGUL CHOSEONG CHIEUCH-KHIEUKH -->
+ <map code="0x1153" name="1em"/><!-- HANGUL CHOSEONG CHIEUCH-HIEUH -->
+ <map code="0x1154" name="1em"/><!-- HANGUL CHOSEONG CHITUEUMCHIEUCH -->
+ <map code="0x1155" name="1em"/><!-- HANGUL CHOSEONG CEONGCHIEUMCHIEUCH -->
+ <map code="0x1156" name="1em"/><!-- HANGUL CHOSEONG PHIEUPH-PIEUP -->
+ <map code="0x1157" name="1em"/><!-- HANGUL CHOSEONG KAPYEOUNPHIEUPH -->
+ <map code="0x1158" name="1em"/><!-- HANGUL CHOSEONG SSANGHIEUH -->
+ <map code="0x1159" name="1em"/><!-- HANGUL CHOSEONG YEORINHIEUH -->
+ <map code="0x115a" name="1em"/><!-- HANGUL CHOSEONG KIYEOK-TIKEUT -->
+ <map code="0x115b" name="1em"/><!-- HANGUL CHOSEONG NIEUN-SIOS -->
+ <map code="0x115c" name="1em"/><!-- HANGUL CHOSEONG NIEUN-CIEUC -->
+ <map code="0x115d" name="1em"/><!-- HANGUL CHOSEONG NIEUN-HIEUH -->
+ <map code="0x115e" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-RIEUL -->
+ <map code="0x115f" name="1em"/><!-- HANGUL CHOSEONG FILLER -->
+ <map code="0x1160" name="1em"/><!-- HANGUL JUNGSEONG FILLER -->
+ <map code="0x1161" name="1em"/><!-- HANGUL JUNGSEONG A -->
+ <map code="0x1162" name="1em"/><!-- HANGUL JUNGSEONG AE -->
+ <map code="0x1163" name="1em"/><!-- HANGUL JUNGSEONG YA -->
+ <map code="0x1164" name="1em"/><!-- HANGUL JUNGSEONG YAE -->
+ <map code="0x1165" name="1em"/><!-- HANGUL JUNGSEONG EO -->
+ <map code="0x1166" name="1em"/><!-- HANGUL JUNGSEONG E -->
+ <map code="0x1167" name="1em"/><!-- HANGUL JUNGSEONG YEO -->
+ <map code="0x1168" name="1em"/><!-- HANGUL JUNGSEONG YE -->
+ <map code="0x1169" name="1em"/><!-- HANGUL JUNGSEONG O -->
+ <map code="0x116a" name="1em"/><!-- HANGUL JUNGSEONG WA -->
+ <map code="0x116b" name="1em"/><!-- HANGUL JUNGSEONG WAE -->
+ <map code="0x116c" name="1em"/><!-- HANGUL JUNGSEONG OE -->
+ <map code="0x116d" name="1em"/><!-- HANGUL JUNGSEONG YO -->
+ <map code="0x116e" name="1em"/><!-- HANGUL JUNGSEONG U -->
+ <map code="0x116f" name="1em"/><!-- HANGUL JUNGSEONG WEO -->
+ <map code="0x1170" name="1em"/><!-- HANGUL JUNGSEONG WE -->
+ <map code="0x1171" name="1em"/><!-- HANGUL JUNGSEONG WI -->
+ <map code="0x1172" name="1em"/><!-- HANGUL JUNGSEONG YU -->
+ <map code="0x1173" name="1em"/><!-- HANGUL JUNGSEONG EU -->
+ <map code="0x1174" name="1em"/><!-- HANGUL JUNGSEONG YI -->
+ <map code="0x1175" name="1em"/><!-- HANGUL JUNGSEONG I -->
+ <map code="0x1176" name="1em"/><!-- HANGUL JUNGSEONG A-O -->
+ <map code="0x1177" name="1em"/><!-- HANGUL JUNGSEONG A-U -->
+ <map code="0x1178" name="1em"/><!-- HANGUL JUNGSEONG YA-O -->
+ <map code="0x1179" name="1em"/><!-- HANGUL JUNGSEONG YA-YO -->
+ <map code="0x117a" name="1em"/><!-- HANGUL JUNGSEONG EO-O -->
+ <map code="0x117b" name="1em"/><!-- HANGUL JUNGSEONG EO-U -->
+ <map code="0x117c" name="1em"/><!-- HANGUL JUNGSEONG EO-EU -->
+ <map code="0x117d" name="1em"/><!-- HANGUL JUNGSEONG YEO-O -->
+ <map code="0x117e" name="1em"/><!-- HANGUL JUNGSEONG YEO-U -->
+ <map code="0x117f" name="1em"/><!-- HANGUL JUNGSEONG O-EO -->
+ <map code="0x1180" name="1em"/><!-- HANGUL JUNGSEONG O-E -->
+ <map code="0x1181" name="1em"/><!-- HANGUL JUNGSEONG O-YE -->
+ <map code="0x1182" name="1em"/><!-- HANGUL JUNGSEONG O-O -->
+ <map code="0x1183" name="1em"/><!-- HANGUL JUNGSEONG O-U -->
+ <map code="0x1184" name="1em"/><!-- HANGUL JUNGSEONG YO-YA -->
+ <map code="0x1185" name="1em"/><!-- HANGUL JUNGSEONG YO-YAE -->
+ <map code="0x1186" name="1em"/><!-- HANGUL JUNGSEONG YO-YEO -->
+ <map code="0x1187" name="1em"/><!-- HANGUL JUNGSEONG YO-O -->
+ <map code="0x1188" name="1em"/><!-- HANGUL JUNGSEONG YO-I -->
+ <map code="0x1189" name="1em"/><!-- HANGUL JUNGSEONG U-A -->
+ <map code="0x118a" name="1em"/><!-- HANGUL JUNGSEONG U-AE -->
+ <map code="0x118b" name="1em"/><!-- HANGUL JUNGSEONG U-EO-EU -->
+ <map code="0x118c" name="1em"/><!-- HANGUL JUNGSEONG U-YE -->
+ <map code="0x118d" name="1em"/><!-- HANGUL JUNGSEONG U-U -->
+ <map code="0x118e" name="1em"/><!-- HANGUL JUNGSEONG YU-A -->
+ <map code="0x118f" name="1em"/><!-- HANGUL JUNGSEONG YU-EO -->
+ <map code="0x1190" name="1em"/><!-- HANGUL JUNGSEONG YU-E -->
+ <map code="0x1191" name="1em"/><!-- HANGUL JUNGSEONG YU-YEO -->
+ <map code="0x1192" name="1em"/><!-- HANGUL JUNGSEONG YU-YE -->
+ <map code="0x1193" name="1em"/><!-- HANGUL JUNGSEONG YU-U -->
+ <map code="0x1194" name="1em"/><!-- HANGUL JUNGSEONG YU-I -->
+ <map code="0x1195" name="1em"/><!-- HANGUL JUNGSEONG EU-U -->
+ <map code="0x1196" name="1em"/><!-- HANGUL JUNGSEONG EU-EU -->
+ <map code="0x1197" name="1em"/><!-- HANGUL JUNGSEONG YI-U -->
+ <map code="0x1198" name="1em"/><!-- HANGUL JUNGSEONG I-A -->
+ <map code="0x1199" name="1em"/><!-- HANGUL JUNGSEONG I-YA -->
+ <map code="0x119a" name="1em"/><!-- HANGUL JUNGSEONG I-O -->
+ <map code="0x119b" name="1em"/><!-- HANGUL JUNGSEONG I-U -->
+ <map code="0x119c" name="1em"/><!-- HANGUL JUNGSEONG I-EU -->
+ <map code="0x119d" name="1em"/><!-- HANGUL JUNGSEONG I-ARAEA -->
+ <map code="0x119e" name="1em"/><!-- HANGUL JUNGSEONG ARAEA -->
+ <map code="0x119f" name="1em"/><!-- HANGUL JUNGSEONG ARAEA-EO -->
+ <map code="0x11a0" name="1em"/><!-- HANGUL JUNGSEONG ARAEA-U -->
+ <map code="0x11a1" name="1em"/><!-- HANGUL JUNGSEONG ARAEA-I -->
+ <map code="0x11a2" name="1em"/><!-- HANGUL JUNGSEONG SSANGARAEA -->
+ <map code="0x11a3" name="1em"/><!-- HANGUL JUNGSEONG A-EU -->
+ <map code="0x11a4" name="1em"/><!-- HANGUL JUNGSEONG YA-U -->
+ <map code="0x11a5" name="1em"/><!-- HANGUL JUNGSEONG YEO-YA -->
+ <map code="0x11a6" name="1em"/><!-- HANGUL JUNGSEONG O-YA -->
+ <map code="0x11a7" name="1em"/><!-- HANGUL JUNGSEONG O-YAE -->
+ <map code="0x11a8" name="1em"/><!-- HANGUL JONGSEONG KIYEOK -->
+ <map code="0x11a9" name="1em"/><!-- HANGUL JONGSEONG SSANGKIYEOK -->
+ <map code="0x11aa" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-SIOS -->
+ <map code="0x11ab" name="1em"/><!-- HANGUL JONGSEONG NIEUN -->
+ <map code="0x11ac" name="1em"/><!-- HANGUL JONGSEONG NIEUN-CIEUC -->
+ <map code="0x11ad" name="1em"/><!-- HANGUL JONGSEONG NIEUN-HIEUH -->
+ <map code="0x11ae" name="1em"/><!-- HANGUL JONGSEONG TIKEUT -->
+ <map code="0x11af" name="1em"/><!-- HANGUL JONGSEONG RIEUL -->
+ <map code="0x11b0" name="1em"/><!-- HANGUL JONGSEONG RIEUL-KIYEOK -->
+ <map code="0x11b1" name="1em"/><!-- HANGUL JONGSEONG RIEUL-MIEUM -->
+ <map code="0x11b2" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PIEUP -->
+ <map code="0x11b3" name="1em"/><!-- HANGUL JONGSEONG RIEUL-SIOS -->
+ <map code="0x11b4" name="1em"/><!-- HANGUL JONGSEONG RIEUL-THIEUTH -->
+ <map code="0x11b5" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PHIEUPH -->
+ <map code="0x11b6" name="1em"/><!-- HANGUL JONGSEONG RIEUL-HIEUH -->
+ <map code="0x11b7" name="1em"/><!-- HANGUL JONGSEONG MIEUM -->
+ <map code="0x11b8" name="1em"/><!-- HANGUL JONGSEONG PIEUP -->
+ <map code="0x11b9" name="1em"/><!-- HANGUL JONGSEONG PIEUP-SIOS -->
+ <map code="0x11ba" name="1em"/><!-- HANGUL JONGSEONG SIOS -->
+ <map code="0x11bb" name="1em"/><!-- HANGUL JONGSEONG SSANGSIOS -->
+ <map code="0x11bc" name="1em"/><!-- HANGUL JONGSEONG IEUNG -->
+ <map code="0x11bd" name="1em"/><!-- HANGUL JONGSEONG CIEUC -->
+ <map code="0x11be" name="1em"/><!-- HANGUL JONGSEONG CHIEUCH -->
+ <map code="0x11bf" name="1em"/><!-- HANGUL JONGSEONG KHIEUKH -->
+ <map code="0x11c0" name="1em"/><!-- HANGUL JONGSEONG THIEUTH -->
+ <map code="0x11c1" name="1em"/><!-- HANGUL JONGSEONG PHIEUPH -->
+ <map code="0x11c2" name="1em"/><!-- HANGUL JONGSEONG HIEUH -->
+ <map code="0x11c3" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-RIEUL -->
+ <map code="0x11c4" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK -->
+ <map code="0x11c5" name="1em"/><!-- HANGUL JONGSEONG NIEUN-KIYEOK -->
+ <map code="0x11c6" name="1em"/><!-- HANGUL JONGSEONG NIEUN-TIKEUT -->
+ <map code="0x11c7" name="1em"/><!-- HANGUL JONGSEONG NIEUN-SIOS -->
+ <map code="0x11c8" name="1em"/><!-- HANGUL JONGSEONG NIEUN-PANSIOS -->
+ <map code="0x11c9" name="1em"/><!-- HANGUL JONGSEONG NIEUN-THIEUTH -->
+ <map code="0x11ca" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-KIYEOK -->
+ <map code="0x11cb" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-RIEUL -->
+ <map code="0x11cc" name="1em"/><!-- HANGUL JONGSEONG RIEUL-KIYEOK-SIOS -->
+ <map code="0x11cd" name="1em"/><!-- HANGUL JONGSEONG RIEUL-NIEUN -->
+ <map code="0x11ce" name="1em"/><!-- HANGUL JONGSEONG RIEUL-TIKEUT -->
+ <map code="0x11cf" name="1em"/><!-- HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH -->
+ <map code="0x11d0" name="1em"/><!-- HANGUL JONGSEONG SSANGRIEUL -->
+ <map code="0x11d1" name="1em"/><!-- HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK -->
+ <map code="0x11d2" name="1em"/><!-- HANGUL JONGSEONG RIEUL-MIEUM-SIOS -->
+ <map code="0x11d3" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PIEUP-SIOS -->
+ <map code="0x11d4" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PIEUP-HIEUH -->
+ <map code="0x11d5" name="1em"/><!-- HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP -->
+ <map code="0x11d6" name="1em"/><!-- HANGUL JONGSEONG RIEUL-SSANGSIOS -->
+ <map code="0x11d7" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PANSIOS -->
+ <map code="0x11d8" name="1em"/><!-- HANGUL JONGSEONG RIEUL-KHIEUKH -->
+ <map code="0x11d9" name="1em"/><!-- HANGUL JONGSEONG RIEUL-YEORINHIEUH -->
+ <map code="0x11da" name="1em"/><!-- HANGUL JONGSEONG MIEUM-KIYEOK -->
+ <map code="0x11db" name="1em"/><!-- HANGUL JONGSEONG MIEUM-RIEUL -->
+ <map code="0x11dc" name="1em"/><!-- HANGUL JONGSEONG MIEUM-PIEUP -->
+ <map code="0x11dd" name="1em"/><!-- HANGUL JONGSEONG MIEUM-SIOS -->
+ <map code="0x11de" name="1em"/><!-- HANGUL JONGSEONG MIEUM-SSANGSIOS -->
+ <map code="0x11df" name="1em"/><!-- HANGUL JONGSEONG MIEUM-PANSIOS -->
+ <map code="0x11e0" name="1em"/><!-- HANGUL JONGSEONG MIEUM-CHIEUCH -->
+ <map code="0x11e1" name="1em"/><!-- HANGUL JONGSEONG MIEUM-HIEUH -->
+ <map code="0x11e2" name="1em"/><!-- HANGUL JONGSEONG KAPYEOUNMIEUM -->
+ <map code="0x11e3" name="1em"/><!-- HANGUL JONGSEONG PIEUP-RIEUL -->
+ <map code="0x11e4" name="1em"/><!-- HANGUL JONGSEONG PIEUP-PHIEUPH -->
+ <map code="0x11e5" name="1em"/><!-- HANGUL JONGSEONG PIEUP-HIEUH -->
+ <map code="0x11e6" name="1em"/><!-- HANGUL JONGSEONG KAPYEOUNPIEUP -->
+ <map code="0x11e7" name="1em"/><!-- HANGUL JONGSEONG SIOS-KIYEOK -->
+ <map code="0x11e8" name="1em"/><!-- HANGUL JONGSEONG SIOS-TIKEUT -->
+ <map code="0x11e9" name="1em"/><!-- HANGUL JONGSEONG SIOS-RIEUL -->
+ <map code="0x11ea" name="1em"/><!-- HANGUL JONGSEONG SIOS-PIEUP -->
+ <map code="0x11eb" name="1em"/><!-- HANGUL JONGSEONG PANSIOS -->
+ <map code="0x11ec" name="1em"/><!-- HANGUL JONGSEONG IEUNG-KIYEOK -->
+ <map code="0x11ed" name="1em"/><!-- HANGUL JONGSEONG IEUNG-SSANGKIYEOK -->
+ <map code="0x11ee" name="1em"/><!-- HANGUL JONGSEONG SSANGIEUNG -->
+ <map code="0x11ef" name="1em"/><!-- HANGUL JONGSEONG IEUNG-KHIEUKH -->
+ <map code="0x11f0" name="1em"/><!-- HANGUL JONGSEONG YESIEUNG -->
+ <map code="0x11f1" name="1em"/><!-- HANGUL JONGSEONG YESIEUNG-SIOS -->
+ <map code="0x11f2" name="1em"/><!-- HANGUL JONGSEONG YESIEUNG-PANSIOS -->
+ <map code="0x11f3" name="1em"/><!-- HANGUL JONGSEONG PHIEUPH-PIEUP -->
+ <map code="0x11f4" name="1em"/><!-- HANGUL JONGSEONG KAPYEOUNPHIEUPH -->
+ <map code="0x11f5" name="1em"/><!-- HANGUL JONGSEONG HIEUH-NIEUN -->
+ <map code="0x11f6" name="1em"/><!-- HANGUL JONGSEONG HIEUH-RIEUL -->
+ <map code="0x11f7" name="1em"/><!-- HANGUL JONGSEONG HIEUH-MIEUM -->
+ <map code="0x11f8" name="1em"/><!-- HANGUL JONGSEONG HIEUH-PIEUP -->
+ <map code="0x11f9" name="1em"/><!-- HANGUL JONGSEONG YEORINHIEUH -->
+ <map code="0x11fa" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-NIEUN -->
+ <map code="0x11fb" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-PIEUP -->
+ <map code="0x11fc" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-CHIEUCH -->
+ <map code="0x11fd" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-KHIEUKH -->
+ <map code="0x11fe" name="1em"/><!-- HANGUL JONGSEONG KIYEOK-HIEUH -->
+ <map code="0x11ff" name="1em"/><!-- HANGUL JONGSEONG SSANGNIEUN -->
+ <map code="0x302e" name="1em"/><!-- HANGUL SINGLE DOT TONE MARK -->
+ <map code="0x302f" name="1em"/><!-- HANGUL DOUBLE DOT TONE MARK -->
+ <map code="0x3131" name="1em"/><!-- HANGUL LETTER KIYEOK -->
+ <map code="0x3132" name="1em"/><!-- HANGUL LETTER SSANGKIYEOK -->
+ <map code="0x3133" name="1em"/><!-- HANGUL LETTER KIYEOK-SIOS -->
+ <map code="0x3134" name="1em"/><!-- HANGUL LETTER NIEUN -->
+ <map code="0x3135" name="1em"/><!-- HANGUL LETTER NIEUN-CIEUC -->
+ <map code="0x3136" name="1em"/><!-- HANGUL LETTER NIEUN-HIEUH -->
+ <map code="0x3137" name="1em"/><!-- HANGUL LETTER TIKEUT -->
+ <map code="0x3138" name="1em"/><!-- HANGUL LETTER SSANGTIKEUT -->
+ <map code="0x3139" name="1em"/><!-- HANGUL LETTER RIEUL -->
+ <map code="0x313a" name="1em"/><!-- HANGUL LETTER RIEUL-KIYEOK -->
+ <map code="0x313b" name="1em"/><!-- HANGUL LETTER RIEUL-MIEUM -->
+ <map code="0x313c" name="1em"/><!-- HANGUL LETTER RIEUL-PIEUP -->
+ <map code="0x313d" name="1em"/><!-- HANGUL LETTER RIEUL-SIOS -->
+ <map code="0x313e" name="1em"/><!-- HANGUL LETTER RIEUL-THIEUTH -->
+ <map code="0x313f" name="1em"/><!-- HANGUL LETTER RIEUL-PHIEUPH -->
+ <map code="0x3140" name="1em"/><!-- HANGUL LETTER RIEUL-HIEUH -->
+ <map code="0x3141" name="1em"/><!-- HANGUL LETTER MIEUM -->
+ <map code="0x3142" name="1em"/><!-- HANGUL LETTER PIEUP -->
+ <map code="0x3143" name="1em"/><!-- HANGUL LETTER SSANGPIEUP -->
+ <map code="0x3144" name="1em"/><!-- HANGUL LETTER PIEUP-SIOS -->
+ <map code="0x3145" name="1em"/><!-- HANGUL LETTER SIOS -->
+ <map code="0x3146" name="1em"/><!-- HANGUL LETTER SSANGSIOS -->
+ <map code="0x3147" name="1em"/><!-- HANGUL LETTER IEUNG -->
+ <map code="0x3148" name="1em"/><!-- HANGUL LETTER CIEUC -->
+ <map code="0x3149" name="1em"/><!-- HANGUL LETTER SSANGCIEUC -->
+ <map code="0x314a" name="1em"/><!-- HANGUL LETTER CHIEUCH -->
+ <map code="0x314b" name="1em"/><!-- HANGUL LETTER KHIEUKH -->
+ <map code="0x314c" name="1em"/><!-- HANGUL LETTER THIEUTH -->
+ <map code="0x314d" name="1em"/><!-- HANGUL LETTER PHIEUPH -->
+ <map code="0x314e" name="1em"/><!-- HANGUL LETTER HIEUH -->
+ <map code="0x314f" name="1em"/><!-- HANGUL LETTER A -->
+ <map code="0x3150" name="1em"/><!-- HANGUL LETTER AE -->
+ <map code="0x3151" name="1em"/><!-- HANGUL LETTER YA -->
+ <map code="0x3152" name="1em"/><!-- HANGUL LETTER YAE -->
+ <map code="0x3153" name="1em"/><!-- HANGUL LETTER EO -->
+ <map code="0x3154" name="1em"/><!-- HANGUL LETTER E -->
+ <map code="0x3155" name="1em"/><!-- HANGUL LETTER YEO -->
+ <map code="0x3156" name="1em"/><!-- HANGUL LETTER YE -->
+ <map code="0x3157" name="1em"/><!-- HANGUL LETTER O -->
+ <map code="0x3158" name="1em"/><!-- HANGUL LETTER WA -->
+ <map code="0x3159" name="1em"/><!-- HANGUL LETTER WAE -->
+ <map code="0x315a" name="1em"/><!-- HANGUL LETTER OE -->
+ <map code="0x315b" name="1em"/><!-- HANGUL LETTER YO -->
+ <map code="0x315c" name="1em"/><!-- HANGUL LETTER U -->
+ <map code="0x315d" name="1em"/><!-- HANGUL LETTER WEO -->
+ <map code="0x315e" name="1em"/><!-- HANGUL LETTER WE -->
+ <map code="0x315f" name="1em"/><!-- HANGUL LETTER WI -->
+ <map code="0x3160" name="1em"/><!-- HANGUL LETTER YU -->
+ <map code="0x3161" name="1em"/><!-- HANGUL LETTER EU -->
+ <map code="0x3162" name="1em"/><!-- HANGUL LETTER YI -->
+ <map code="0x3163" name="1em"/><!-- HANGUL LETTER I -->
+ <map code="0x3164" name="1em"/><!-- HANGUL FILLER -->
+ <map code="0x3165" name="1em"/><!-- HANGUL LETTER SSANGNIEUN -->
+ <map code="0x3166" name="1em"/><!-- HANGUL LETTER NIEUN-TIKEUT -->
+ <map code="0x3167" name="1em"/><!-- HANGUL LETTER NIEUN-SIOS -->
+ <map code="0x3168" name="1em"/><!-- HANGUL LETTER NIEUN-PANSIOS -->
+ <map code="0x3169" name="1em"/><!-- HANGUL LETTER RIEUL-KIYEOK-SIOS -->
+ <map code="0x316a" name="1em"/><!-- HANGUL LETTER RIEUL-TIKEUT -->
+ <map code="0x316b" name="1em"/><!-- HANGUL LETTER RIEUL-PIEUP-SIOS -->
+ <map code="0x316c" name="1em"/><!-- HANGUL LETTER RIEUL-PANSIOS -->
+ <map code="0x316d" name="1em"/><!-- HANGUL LETTER RIEUL-YEORINHIEUH -->
+ <map code="0x316e" name="1em"/><!-- HANGUL LETTER MIEUM-PIEUP -->
+ <map code="0x316f" name="1em"/><!-- HANGUL LETTER MIEUM-SIOS -->
+ <map code="0x3170" name="1em"/><!-- HANGUL LETTER MIEUM-PANSIOS -->
+ <map code="0x3171" name="1em"/><!-- HANGUL LETTER KAPYEOUNMIEUM -->
+ <map code="0x3172" name="1em"/><!-- HANGUL LETTER PIEUP-KIYEOK -->
+ <map code="0x3173" name="1em"/><!-- HANGUL LETTER PIEUP-TIKEUT -->
+ <map code="0x3174" name="1em"/><!-- HANGUL LETTER PIEUP-SIOS-KIYEOK -->
+ <map code="0x3175" name="1em"/><!-- HANGUL LETTER PIEUP-SIOS-TIKEUT -->
+ <map code="0x3176" name="1em"/><!-- HANGUL LETTER PIEUP-CIEUC -->
+ <map code="0x3177" name="1em"/><!-- HANGUL LETTER PIEUP-THIEUTH -->
+ <map code="0x3178" name="1em"/><!-- HANGUL LETTER KAPYEOUNPIEUP -->
+ <map code="0x3179" name="1em"/><!-- HANGUL LETTER KAPYEOUNSSANGPIEUP -->
+ <map code="0x317a" name="1em"/><!-- HANGUL LETTER SIOS-KIYEOK -->
+ <map code="0x317b" name="1em"/><!-- HANGUL LETTER SIOS-NIEUN -->
+ <map code="0x317c" name="1em"/><!-- HANGUL LETTER SIOS-TIKEUT -->
+ <map code="0x317d" name="1em"/><!-- HANGUL LETTER SIOS-PIEUP -->
+ <map code="0x317e" name="1em"/><!-- HANGUL LETTER SIOS-CIEUC -->
+ <map code="0x317f" name="1em"/><!-- HANGUL LETTER PANSIOS -->
+ <map code="0x3180" name="1em"/><!-- HANGUL LETTER SSANGIEUNG -->
+ <map code="0x3181" name="1em"/><!-- HANGUL LETTER YESIEUNG -->
+ <map code="0x3182" name="1em"/><!-- HANGUL LETTER YESIEUNG-SIOS -->
+ <map code="0x3183" name="1em"/><!-- HANGUL LETTER YESIEUNG-PANSIOS -->
+ <map code="0x3184" name="1em"/><!-- HANGUL LETTER KAPYEOUNPHIEUPH -->
+ <map code="0x3185" name="1em"/><!-- HANGUL LETTER SSANGHIEUH -->
+ <map code="0x3186" name="1em"/><!-- HANGUL LETTER YEORINHIEUH -->
+ <map code="0x3187" name="1em"/><!-- HANGUL LETTER YO-YA -->
+ <map code="0x3188" name="1em"/><!-- HANGUL LETTER YO-YAE -->
+ <map code="0x3189" name="1em"/><!-- HANGUL LETTER YO-I -->
+ <map code="0x318a" name="1em"/><!-- HANGUL LETTER YU-YEO -->
+ <map code="0x318b" name="1em"/><!-- HANGUL LETTER YU-YE -->
+ <map code="0x318c" name="1em"/><!-- HANGUL LETTER YU-I -->
+ <map code="0x318d" name="1em"/><!-- HANGUL LETTER ARAEA -->
+ <map code="0x318e" name="1em"/><!-- HANGUL LETTER ARAEAE -->
+ <map code="0xa960" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-MIEUM -->
+ <map code="0xa961" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-PIEUP -->
+ <map code="0xa962" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-SIOS -->
+ <map code="0xa963" name="1em"/><!-- HANGUL CHOSEONG TIKEUT-CIEUC -->
+ <map code="0xa964" name="1em"/><!-- HANGUL CHOSEONG RIEUL-KIYEOK -->
+ <map code="0xa965" name="1em"/><!-- HANGUL CHOSEONG RIEUL-SSANGKIYEOK -->
+ <map code="0xa966" name="1em"/><!-- HANGUL CHOSEONG RIEUL-TIKEUT -->
+ <map code="0xa967" name="1em"/><!-- HANGUL CHOSEONG RIEUL-SSANGTIKEUT -->
+ <map code="0xa968" name="1em"/><!-- HANGUL CHOSEONG RIEUL-MIEUM -->
+ <map code="0xa969" name="1em"/><!-- HANGUL CHOSEONG RIEUL-PIEUP -->
+ <map code="0xa96a" name="1em"/><!-- HANGUL CHOSEONG RIEUL-SSANGPIEUP -->
+ <map code="0xa96b" name="1em"/><!-- HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP -->
+ <map code="0xa96c" name="1em"/><!-- HANGUL CHOSEONG RIEUL-SIOS -->
+ <map code="0xa96d" name="1em"/><!-- HANGUL CHOSEONG RIEUL-CIEUC -->
+ <map code="0xa96e" name="1em"/><!-- HANGUL CHOSEONG RIEUL-KHIEUKH -->
+ <map code="0xa96f" name="1em"/><!-- HANGUL CHOSEONG MIEUM-KIYEOK -->
+ <map code="0xa970" name="1em"/><!-- HANGUL CHOSEONG MIEUM-TIKEUT -->
+ <map code="0xa971" name="1em"/><!-- HANGUL CHOSEONG MIEUM-SIOS -->
+ <map code="0xa972" name="1em"/><!-- HANGUL CHOSEONG PIEUP-SIOS-THIEUTH -->
+ <map code="0xa973" name="1em"/><!-- HANGUL CHOSEONG PIEUP-KHIEUKH -->
+ <map code="0xa974" name="1em"/><!-- HANGUL CHOSEONG PIEUP-HIEUH -->
+ <map code="0xa975" name="1em"/><!-- HANGUL CHOSEONG SSANGSIOS-PIEUP -->
+ <map code="0xa976" name="1em"/><!-- HANGUL CHOSEONG IEUNG-RIEUL -->
+ <map code="0xa977" name="1em"/><!-- HANGUL CHOSEONG IEUNG-HIEUH -->
+ <map code="0xa978" name="1em"/><!-- HANGUL CHOSEONG SSANGCIEUC-HIEUH -->
+ <map code="0xa979" name="1em"/><!-- HANGUL CHOSEONG SSANGTHIEUTH -->
+ <map code="0xa97a" name="1em"/><!-- HANGUL CHOSEONG PHIEUPH-HIEUH -->
+ <map code="0xa97b" name="1em"/><!-- HANGUL CHOSEONG HIEUH-SIOS -->
+ <map code="0xa97c" name="1em"/><!-- HANGUL CHOSEONG SSANGYEORINHIEUH -->
+ <map code="0xac00" name="1em"/><!-- HANGUL SYLLABLE GA -->
+ <map code="0xac01" name="1em"/><!-- HANGUL SYLLABLE GAG -->
+ <map code="0xac02" name="1em"/><!-- HANGUL SYLLABLE GAGG -->
+ <map code="0xac03" name="1em"/><!-- HANGUL SYLLABLE GAGS -->
+ <map code="0xac04" name="1em"/><!-- HANGUL SYLLABLE GAN -->
+ <map code="0xac05" name="1em"/><!-- HANGUL SYLLABLE GANJ -->
+ <map code="0xac06" name="1em"/><!-- HANGUL SYLLABLE GANH -->
+ <map code="0xac07" name="1em"/><!-- HANGUL SYLLABLE GAD -->
+ <map code="0xac08" name="1em"/><!-- HANGUL SYLLABLE GAL -->
+ <map code="0xac09" name="1em"/><!-- HANGUL SYLLABLE GALG -->
+ <map code="0xac0a" name="1em"/><!-- HANGUL SYLLABLE GALM -->
+ <map code="0xac0b" name="1em"/><!-- HANGUL SYLLABLE GALB -->
+ <map code="0xac0c" name="1em"/><!-- HANGUL SYLLABLE GALS -->
+ <map code="0xac0d" name="1em"/><!-- HANGUL SYLLABLE GALT -->
+ <map code="0xac0e" name="1em"/><!-- HANGUL SYLLABLE GALP -->
+ <map code="0xac0f" name="1em"/><!-- HANGUL SYLLABLE GALH -->
+ <map code="0xac10" name="1em"/><!-- HANGUL SYLLABLE GAM -->
+ <map code="0xac11" name="1em"/><!-- HANGUL SYLLABLE GAB -->
+ <map code="0xac12" name="1em"/><!-- HANGUL SYLLABLE GABS -->
+ <map code="0xac13" name="1em"/><!-- HANGUL SYLLABLE GAS -->
+ <map code="0xac14" name="1em"/><!-- HANGUL SYLLABLE GASS -->
+ <map code="0xac15" name="1em"/><!-- HANGUL SYLLABLE GANG -->
+ <map code="0xac16" name="1em"/><!-- HANGUL SYLLABLE GAJ -->
+ <map code="0xac17" name="1em"/><!-- HANGUL SYLLABLE GAC -->
+ <map code="0xac18" name="1em"/><!-- HANGUL SYLLABLE GAK -->
+ <map code="0xac19" name="1em"/><!-- HANGUL SYLLABLE GAT -->
+ <map code="0xac1a" name="1em"/><!-- HANGUL SYLLABLE GAP -->
+ <map code="0xac1b" name="1em"/><!-- HANGUL SYLLABLE GAH -->
+ <map code="0xac1c" name="1em"/><!-- HANGUL SYLLABLE GAE -->
+ <map code="0xac1d" name="1em"/><!-- HANGUL SYLLABLE GAEG -->
+ <map code="0xac1e" name="1em"/><!-- HANGUL SYLLABLE GAEGG -->
+ <map code="0xac1f" name="1em"/><!-- HANGUL SYLLABLE GAEGS -->
+ <map code="0xac20" name="1em"/><!-- HANGUL SYLLABLE GAEN -->
+ <map code="0xac21" name="1em"/><!-- HANGUL SYLLABLE GAENJ -->
+ <map code="0xac22" name="1em"/><!-- HANGUL SYLLABLE GAENH -->
+ <map code="0xac23" name="1em"/><!-- HANGUL SYLLABLE GAED -->
+ <map code="0xac24" name="1em"/><!-- HANGUL SYLLABLE GAEL -->
+ <map code="0xac25" name="1em"/><!-- HANGUL SYLLABLE GAELG -->
+ <map code="0xac26" name="1em"/><!-- HANGUL SYLLABLE GAELM -->
+ <map code="0xac27" name="1em"/><!-- HANGUL SYLLABLE GAELB -->
+ <map code="0xac28" name="1em"/><!-- HANGUL SYLLABLE GAELS -->
+ <map code="0xac29" name="1em"/><!-- HANGUL SYLLABLE GAELT -->
+ <map code="0xac2a" name="1em"/><!-- HANGUL SYLLABLE GAELP -->
+ <map code="0xac2b" name="1em"/><!-- HANGUL SYLLABLE GAELH -->
+ <map code="0xac2c" name="1em"/><!-- HANGUL SYLLABLE GAEM -->
+ <map code="0xac2d" name="1em"/><!-- HANGUL SYLLABLE GAEB -->
+ <map code="0xac2e" name="1em"/><!-- HANGUL SYLLABLE GAEBS -->
+ <map code="0xac2f" name="1em"/><!-- HANGUL SYLLABLE GAES -->
+ <map code="0xac30" name="1em"/><!-- HANGUL SYLLABLE GAESS -->
+ <map code="0xac31" name="1em"/><!-- HANGUL SYLLABLE GAENG -->
+ <map code="0xac32" name="1em"/><!-- HANGUL SYLLABLE GAEJ -->
+ <map code="0xac33" name="1em"/><!-- HANGUL SYLLABLE GAEC -->
+ <map code="0xac34" name="1em"/><!-- HANGUL SYLLABLE GAEK -->
+ <map code="0xac35" name="1em"/><!-- HANGUL SYLLABLE GAET -->
+ <map code="0xac36" name="1em"/><!-- HANGUL SYLLABLE GAEP -->
+ <map code="0xac37" name="1em"/><!-- HANGUL SYLLABLE GAEH -->
+ <map code="0xac38" name="1em"/><!-- HANGUL SYLLABLE GYA -->
+ <map code="0xac39" name="1em"/><!-- HANGUL SYLLABLE GYAG -->
+ <map code="0xac3a" name="1em"/><!-- HANGUL SYLLABLE GYAGG -->
+ <map code="0xac3b" name="1em"/><!-- HANGUL SYLLABLE GYAGS -->
+ <map code="0xac3c" name="1em"/><!-- HANGUL SYLLABLE GYAN -->
+ <map code="0xac3d" name="1em"/><!-- HANGUL SYLLABLE GYANJ -->
+ <map code="0xac3e" name="1em"/><!-- HANGUL SYLLABLE GYANH -->
+ <map code="0xac3f" name="1em"/><!-- HANGUL SYLLABLE GYAD -->
+ <map code="0xac40" name="1em"/><!-- HANGUL SYLLABLE GYAL -->
+ <map code="0xac41" name="1em"/><!-- HANGUL SYLLABLE GYALG -->
+ <map code="0xac42" name="1em"/><!-- HANGUL SYLLABLE GYALM -->
+ <map code="0xac43" name="1em"/><!-- HANGUL SYLLABLE GYALB -->
+ <map code="0xac44" name="1em"/><!-- HANGUL SYLLABLE GYALS -->
+ <map code="0xac45" name="1em"/><!-- HANGUL SYLLABLE GYALT -->
+ <map code="0xac46" name="1em"/><!-- HANGUL SYLLABLE GYALP -->
+ <map code="0xac47" name="1em"/><!-- HANGUL SYLLABLE GYALH -->
+ <map code="0xac48" name="1em"/><!-- HANGUL SYLLABLE GYAM -->
+ <map code="0xac49" name="1em"/><!-- HANGUL SYLLABLE GYAB -->
+ <map code="0xac4a" name="1em"/><!-- HANGUL SYLLABLE GYABS -->
+ <map code="0xac4b" name="1em"/><!-- HANGUL SYLLABLE GYAS -->
+ <map code="0xac4c" name="1em"/><!-- HANGUL SYLLABLE GYASS -->
+ <map code="0xac4d" name="1em"/><!-- HANGUL SYLLABLE GYANG -->
+ <map code="0xac4e" name="1em"/><!-- HANGUL SYLLABLE GYAJ -->
+ <map code="0xac4f" name="1em"/><!-- HANGUL SYLLABLE GYAC -->
+ <map code="0xac50" name="1em"/><!-- HANGUL SYLLABLE GYAK -->
+ <map code="0xac51" name="1em"/><!-- HANGUL SYLLABLE GYAT -->
+ <map code="0xac52" name="1em"/><!-- HANGUL SYLLABLE GYAP -->
+ <map code="0xac53" name="1em"/><!-- HANGUL SYLLABLE GYAH -->
+ <map code="0xac54" name="1em"/><!-- HANGUL SYLLABLE GYAE -->
+ <map code="0xac55" name="1em"/><!-- HANGUL SYLLABLE GYAEG -->
+ <map code="0xac56" name="1em"/><!-- HANGUL SYLLABLE GYAEGG -->
+ <map code="0xac57" name="1em"/><!-- HANGUL SYLLABLE GYAEGS -->
+ <map code="0xac58" name="1em"/><!-- HANGUL SYLLABLE GYAEN -->
+ <map code="0xac59" name="1em"/><!-- HANGUL SYLLABLE GYAENJ -->
+ <map code="0xac5a" name="1em"/><!-- HANGUL SYLLABLE GYAENH -->
+ <map code="0xac5b" name="1em"/><!-- HANGUL SYLLABLE GYAED -->
+ <map code="0xac5c" name="1em"/><!-- HANGUL SYLLABLE GYAEL -->
+ <map code="0xac5d" name="1em"/><!-- HANGUL SYLLABLE GYAELG -->
+ <map code="0xac5e" name="1em"/><!-- HANGUL SYLLABLE GYAELM -->
+ <map code="0xac5f" name="1em"/><!-- HANGUL SYLLABLE GYAELB -->
+ <map code="0xac60" name="1em"/><!-- HANGUL SYLLABLE GYAELS -->
+ <map code="0xac61" name="1em"/><!-- HANGUL SYLLABLE GYAELT -->
+ <map code="0xac62" name="1em"/><!-- HANGUL SYLLABLE GYAELP -->
+ <map code="0xac63" name="1em"/><!-- HANGUL SYLLABLE GYAELH -->
+ <map code="0xac64" name="1em"/><!-- HANGUL SYLLABLE GYAEM -->
+ <map code="0xac65" name="1em"/><!-- HANGUL SYLLABLE GYAEB -->
+ <map code="0xac66" name="1em"/><!-- HANGUL SYLLABLE GYAEBS -->
+ <map code="0xac67" name="1em"/><!-- HANGUL SYLLABLE GYAES -->
+ <map code="0xac68" name="1em"/><!-- HANGUL SYLLABLE GYAESS -->
+ <map code="0xac69" name="1em"/><!-- HANGUL SYLLABLE GYAENG -->
+ <map code="0xac6a" name="1em"/><!-- HANGUL SYLLABLE GYAEJ -->
+ <map code="0xac6b" name="1em"/><!-- HANGUL SYLLABLE GYAEC -->
+ <map code="0xac6c" name="1em"/><!-- HANGUL SYLLABLE GYAEK -->
+ <map code="0xac6d" name="1em"/><!-- HANGUL SYLLABLE GYAET -->
+ <map code="0xac6e" name="1em"/><!-- HANGUL SYLLABLE GYAEP -->
+ <map code="0xac6f" name="1em"/><!-- HANGUL SYLLABLE GYAEH -->
+ <map code="0xac70" name="1em"/><!-- HANGUL SYLLABLE GEO -->
+ <map code="0xac71" name="1em"/><!-- HANGUL SYLLABLE GEOG -->
+ <map code="0xac72" name="1em"/><!-- HANGUL SYLLABLE GEOGG -->
+ <map code="0xac73" name="1em"/><!-- HANGUL SYLLABLE GEOGS -->
+ <map code="0xac74" name="1em"/><!-- HANGUL SYLLABLE GEON -->
+ <map code="0xac75" name="1em"/><!-- HANGUL SYLLABLE GEONJ -->
+ <map code="0xac76" name="1em"/><!-- HANGUL SYLLABLE GEONH -->
+ <map code="0xac77" name="1em"/><!-- HANGUL SYLLABLE GEOD -->
+ <map code="0xac78" name="1em"/><!-- HANGUL SYLLABLE GEOL -->
+ <map code="0xac79" name="1em"/><!-- HANGUL SYLLABLE GEOLG -->
+ <map code="0xac7a" name="1em"/><!-- HANGUL SYLLABLE GEOLM -->
+ <map code="0xac7b" name="1em"/><!-- HANGUL SYLLABLE GEOLB -->
+ <map code="0xac7c" name="1em"/><!-- HANGUL SYLLABLE GEOLS -->
+ <map code="0xac7d" name="1em"/><!-- HANGUL SYLLABLE GEOLT -->
+ <map code="0xac7e" name="1em"/><!-- HANGUL SYLLABLE GEOLP -->
+ <map code="0xac7f" name="1em"/><!-- HANGUL SYLLABLE GEOLH -->
+ <map code="0xac80" name="1em"/><!-- HANGUL SYLLABLE GEOM -->
+ <map code="0xac81" name="1em"/><!-- HANGUL SYLLABLE GEOB -->
+ <map code="0xac82" name="1em"/><!-- HANGUL SYLLABLE GEOBS -->
+ <map code="0xac83" name="1em"/><!-- HANGUL SYLLABLE GEOS -->
+ <map code="0xac84" name="1em"/><!-- HANGUL SYLLABLE GEOSS -->
+ <map code="0xac85" name="1em"/><!-- HANGUL SYLLABLE GEONG -->
+ <map code="0xac86" name="1em"/><!-- HANGUL SYLLABLE GEOJ -->
+ <map code="0xac87" name="1em"/><!-- HANGUL SYLLABLE GEOC -->
+ <map code="0xac88" name="1em"/><!-- HANGUL SYLLABLE GEOK -->
+ <map code="0xac89" name="1em"/><!-- HANGUL SYLLABLE GEOT -->
+ <map code="0xac8a" name="1em"/><!-- HANGUL SYLLABLE GEOP -->
+ <map code="0xac8b" name="1em"/><!-- HANGUL SYLLABLE GEOH -->
+ <map code="0xac8c" name="1em"/><!-- HANGUL SYLLABLE GE -->
+ <map code="0xac8d" name="1em"/><!-- HANGUL SYLLABLE GEG -->
+ <map code="0xac8e" name="1em"/><!-- HANGUL SYLLABLE GEGG -->
+ <map code="0xac8f" name="1em"/><!-- HANGUL SYLLABLE GEGS -->
+ <map code="0xac90" name="1em"/><!-- HANGUL SYLLABLE GEN -->
+ <map code="0xac91" name="1em"/><!-- HANGUL SYLLABLE GENJ -->
+ <map code="0xac92" name="1em"/><!-- HANGUL SYLLABLE GENH -->
+ <map code="0xac93" name="1em"/><!-- HANGUL SYLLABLE GED -->
+ <map code="0xac94" name="1em"/><!-- HANGUL SYLLABLE GEL -->
+ <map code="0xac95" name="1em"/><!-- HANGUL SYLLABLE GELG -->
+ <map code="0xac96" name="1em"/><!-- HANGUL SYLLABLE GELM -->
+ <map code="0xac97" name="1em"/><!-- HANGUL SYLLABLE GELB -->
+ <map code="0xac98" name="1em"/><!-- HANGUL SYLLABLE GELS -->
+ <map code="0xac99" name="1em"/><!-- HANGUL SYLLABLE GELT -->
+ <map code="0xac9a" name="1em"/><!-- HANGUL SYLLABLE GELP -->
+ <map code="0xac9b" name="1em"/><!-- HANGUL SYLLABLE GELH -->
+ <map code="0xac9c" name="1em"/><!-- HANGUL SYLLABLE GEM -->
+ <map code="0xac9d" name="1em"/><!-- HANGUL SYLLABLE GEB -->
+ <map code="0xac9e" name="1em"/><!-- HANGUL SYLLABLE GEBS -->
+ <map code="0xac9f" name="1em"/><!-- HANGUL SYLLABLE GES -->
+ <map code="0xaca0" name="1em"/><!-- HANGUL SYLLABLE GESS -->
+ <map code="0xaca1" name="1em"/><!-- HANGUL SYLLABLE GENG -->
+ <map code="0xaca2" name="1em"/><!-- HANGUL SYLLABLE GEJ -->
+ <map code="0xaca3" name="1em"/><!-- HANGUL SYLLABLE GEC -->
+ <map code="0xaca4" name="1em"/><!-- HANGUL SYLLABLE GEK -->
+ <map code="0xaca5" name="1em"/><!-- HANGUL SYLLABLE GET -->
+ <map code="0xaca6" name="1em"/><!-- HANGUL SYLLABLE GEP -->
+ <map code="0xaca7" name="1em"/><!-- HANGUL SYLLABLE GEH -->
+ <map code="0xaca8" name="1em"/><!-- HANGUL SYLLABLE GYEO -->
+ <map code="0xaca9" name="1em"/><!-- HANGUL SYLLABLE GYEOG -->
+ <map code="0xacaa" name="1em"/><!-- HANGUL SYLLABLE GYEOGG -->
+ <map code="0xacab" name="1em"/><!-- HANGUL SYLLABLE GYEOGS -->
+ <map code="0xacac" name="1em"/><!-- HANGUL SYLLABLE GYEON -->
+ <map code="0xacad" name="1em"/><!-- HANGUL SYLLABLE GYEONJ -->
+ <map code="0xacae" name="1em"/><!-- HANGUL SYLLABLE GYEONH -->
+ <map code="0xacaf" name="1em"/><!-- HANGUL SYLLABLE GYEOD -->
+ <map code="0xacb0" name="1em"/><!-- HANGUL SYLLABLE GYEOL -->
+ <map code="0xacb1" name="1em"/><!-- HANGUL SYLLABLE GYEOLG -->
+ <map code="0xacb2" name="1em"/><!-- HANGUL SYLLABLE GYEOLM -->
+ <map code="0xacb3" name="1em"/><!-- HANGUL SYLLABLE GYEOLB -->
+ <map code="0xacb4" name="1em"/><!-- HANGUL SYLLABLE GYEOLS -->
+ <map code="0xacb5" name="1em"/><!-- HANGUL SYLLABLE GYEOLT -->
+ <map code="0xacb6" name="1em"/><!-- HANGUL SYLLABLE GYEOLP -->
+ <map code="0xacb7" name="1em"/><!-- HANGUL SYLLABLE GYEOLH -->
+ <map code="0xacb8" name="1em"/><!-- HANGUL SYLLABLE GYEOM -->
+ <map code="0xacb9" name="1em"/><!-- HANGUL SYLLABLE GYEOB -->
+ <map code="0xacba" name="1em"/><!-- HANGUL SYLLABLE GYEOBS -->
+ <map code="0xacbb" name="1em"/><!-- HANGUL SYLLABLE GYEOS -->
+ <map code="0xacbc" name="1em"/><!-- HANGUL SYLLABLE GYEOSS -->
+ <map code="0xacbd" name="1em"/><!-- HANGUL SYLLABLE GYEONG -->
+ <map code="0xacbe" name="1em"/><!-- HANGUL SYLLABLE GYEOJ -->
+ <map code="0xacbf" name="1em"/><!-- HANGUL SYLLABLE GYEOC -->
+ <map code="0xacc0" name="1em"/><!-- HANGUL SYLLABLE GYEOK -->
+ <map code="0xacc1" name="1em"/><!-- HANGUL SYLLABLE GYEOT -->
+ <map code="0xacc2" name="1em"/><!-- HANGUL SYLLABLE GYEOP -->
+ <map code="0xacc3" name="1em"/><!-- HANGUL SYLLABLE GYEOH -->
+ <map code="0xacc4" name="1em"/><!-- HANGUL SYLLABLE GYE -->
+ <map code="0xacc5" name="1em"/><!-- HANGUL SYLLABLE GYEG -->
+ <map code="0xacc6" name="1em"/><!-- HANGUL SYLLABLE GYEGG -->
+ <map code="0xacc7" name="1em"/><!-- HANGUL SYLLABLE GYEGS -->
+ <map code="0xacc8" name="1em"/><!-- HANGUL SYLLABLE GYEN -->
+ <map code="0xacc9" name="1em"/><!-- HANGUL SYLLABLE GYENJ -->
+ <map code="0xacca" name="1em"/><!-- HANGUL SYLLABLE GYENH -->
+ <map code="0xaccb" name="1em"/><!-- HANGUL SYLLABLE GYED -->
+ <map code="0xaccc" name="1em"/><!-- HANGUL SYLLABLE GYEL -->
+ <map code="0xaccd" name="1em"/><!-- HANGUL SYLLABLE GYELG -->
+ <map code="0xacce" name="1em"/><!-- HANGUL SYLLABLE GYELM -->
+ <map code="0xaccf" name="1em"/><!-- HANGUL SYLLABLE GYELB -->
+ <map code="0xacd0" name="1em"/><!-- HANGUL SYLLABLE GYELS -->
+ <map code="0xacd1" name="1em"/><!-- HANGUL SYLLABLE GYELT -->
+ <map code="0xacd2" name="1em"/><!-- HANGUL SYLLABLE GYELP -->
+ <map code="0xacd3" name="1em"/><!-- HANGUL SYLLABLE GYELH -->
+ <map code="0xacd4" name="1em"/><!-- HANGUL SYLLABLE GYEM -->
+ <map code="0xacd5" name="1em"/><!-- HANGUL SYLLABLE GYEB -->
+ <map code="0xacd6" name="1em"/><!-- HANGUL SYLLABLE GYEBS -->
+ <map code="0xacd7" name="1em"/><!-- HANGUL SYLLABLE GYES -->
+ <map code="0xacd8" name="1em"/><!-- HANGUL SYLLABLE GYESS -->
+ <map code="0xacd9" name="1em"/><!-- HANGUL SYLLABLE GYENG -->
+ <map code="0xacda" name="1em"/><!-- HANGUL SYLLABLE GYEJ -->
+ <map code="0xacdb" name="1em"/><!-- HANGUL SYLLABLE GYEC -->
+ <map code="0xacdc" name="1em"/><!-- HANGUL SYLLABLE GYEK -->
+ <map code="0xacdd" name="1em"/><!-- HANGUL SYLLABLE GYET -->
+ <map code="0xacde" name="1em"/><!-- HANGUL SYLLABLE GYEP -->
+ <map code="0xacdf" name="1em"/><!-- HANGUL SYLLABLE GYEH -->
+ <map code="0xace0" name="1em"/><!-- HANGUL SYLLABLE GO -->
+ <map code="0xace1" name="1em"/><!-- HANGUL SYLLABLE GOG -->
+ <map code="0xace2" name="1em"/><!-- HANGUL SYLLABLE GOGG -->
+ <map code="0xace3" name="1em"/><!-- HANGUL SYLLABLE GOGS -->
+ <map code="0xace4" name="1em"/><!-- HANGUL SYLLABLE GON -->
+ <map code="0xace5" name="1em"/><!-- HANGUL SYLLABLE GONJ -->
+ <map code="0xace6" name="1em"/><!-- HANGUL SYLLABLE GONH -->
+ <map code="0xace7" name="1em"/><!-- HANGUL SYLLABLE GOD -->
+ <map code="0xace8" name="1em"/><!-- HANGUL SYLLABLE GOL -->
+ <map code="0xace9" name="1em"/><!-- HANGUL SYLLABLE GOLG -->
+ <map code="0xacea" name="1em"/><!-- HANGUL SYLLABLE GOLM -->
+ <map code="0xaceb" name="1em"/><!-- HANGUL SYLLABLE GOLB -->
+ <map code="0xacec" name="1em"/><!-- HANGUL SYLLABLE GOLS -->
+ <map code="0xaced" name="1em"/><!-- HANGUL SYLLABLE GOLT -->
+ <map code="0xacee" name="1em"/><!-- HANGUL SYLLABLE GOLP -->
+ <map code="0xacef" name="1em"/><!-- HANGUL SYLLABLE GOLH -->
+ <map code="0xacf0" name="1em"/><!-- HANGUL SYLLABLE GOM -->
+ <map code="0xacf1" name="1em"/><!-- HANGUL SYLLABLE GOB -->
+ <map code="0xacf2" name="1em"/><!-- HANGUL SYLLABLE GOBS -->
+ <map code="0xacf3" name="1em"/><!-- HANGUL SYLLABLE GOS -->
+ <map code="0xacf4" name="1em"/><!-- HANGUL SYLLABLE GOSS -->
+ <map code="0xacf5" name="1em"/><!-- HANGUL SYLLABLE GONG -->
+ <map code="0xacf6" name="1em"/><!-- HANGUL SYLLABLE GOJ -->
+ <map code="0xacf7" name="1em"/><!-- HANGUL SYLLABLE GOC -->
+ <map code="0xacf8" name="1em"/><!-- HANGUL SYLLABLE GOK -->
+ <map code="0xacf9" name="1em"/><!-- HANGUL SYLLABLE GOT -->
+ <map code="0xacfa" name="1em"/><!-- HANGUL SYLLABLE GOP -->
+ <map code="0xacfb" name="1em"/><!-- HANGUL SYLLABLE GOH -->
+ <map code="0xacfc" name="1em"/><!-- HANGUL SYLLABLE GWA -->
+ <map code="0xacfd" name="1em"/><!-- HANGUL SYLLABLE GWAG -->
+ <map code="0xacfe" name="1em"/><!-- HANGUL SYLLABLE GWAGG -->
+ <map code="0xacff" name="1em"/><!-- HANGUL SYLLABLE GWAGS -->
+ <map code="0xad00" name="1em"/><!-- HANGUL SYLLABLE GWAN -->
+ <map code="0xad01" name="1em"/><!-- HANGUL SYLLABLE GWANJ -->
+ <map code="0xad02" name="1em"/><!-- HANGUL SYLLABLE GWANH -->
+ <map code="0xad03" name="1em"/><!-- HANGUL SYLLABLE GWAD -->
+ <map code="0xad04" name="1em"/><!-- HANGUL SYLLABLE GWAL -->
+ <map code="0xad05" name="1em"/><!-- HANGUL SYLLABLE GWALG -->
+ <map code="0xad06" name="1em"/><!-- HANGUL SYLLABLE GWALM -->
+ <map code="0xad07" name="1em"/><!-- HANGUL SYLLABLE GWALB -->
+ <map code="0xad08" name="1em"/><!-- HANGUL SYLLABLE GWALS -->
+ <map code="0xad09" name="1em"/><!-- HANGUL SYLLABLE GWALT -->
+ <map code="0xad0a" name="1em"/><!-- HANGUL SYLLABLE GWALP -->
+ <map code="0xad0b" name="1em"/><!-- HANGUL SYLLABLE GWALH -->
+ <map code="0xad0c" name="1em"/><!-- HANGUL SYLLABLE GWAM -->
+ <map code="0xad0d" name="1em"/><!-- HANGUL SYLLABLE GWAB -->
+ <map code="0xad0e" name="1em"/><!-- HANGUL SYLLABLE GWABS -->
+ <map code="0xad0f" name="1em"/><!-- HANGUL SYLLABLE GWAS -->
+ <map code="0xad10" name="1em"/><!-- HANGUL SYLLABLE GWASS -->
+ <map code="0xad11" name="1em"/><!-- HANGUL SYLLABLE GWANG -->
+ <map code="0xad12" name="1em"/><!-- HANGUL SYLLABLE GWAJ -->
+ <map code="0xad13" name="1em"/><!-- HANGUL SYLLABLE GWAC -->
+ <map code="0xad14" name="1em"/><!-- HANGUL SYLLABLE GWAK -->
+ <map code="0xad15" name="1em"/><!-- HANGUL SYLLABLE GWAT -->
+ <map code="0xad16" name="1em"/><!-- HANGUL SYLLABLE GWAP -->
+ <map code="0xad17" name="1em"/><!-- HANGUL SYLLABLE GWAH -->
+ <map code="0xad18" name="1em"/><!-- HANGUL SYLLABLE GWAE -->
+ <map code="0xad19" name="1em"/><!-- HANGUL SYLLABLE GWAEG -->
+ <map code="0xad1a" name="1em"/><!-- HANGUL SYLLABLE GWAEGG -->
+ <map code="0xad1b" name="1em"/><!-- HANGUL SYLLABLE GWAEGS -->
+ <map code="0xad1c" name="1em"/><!-- HANGUL SYLLABLE GWAEN -->
+ <map code="0xad1d" name="1em"/><!-- HANGUL SYLLABLE GWAENJ -->
+ <map code="0xad1e" name="1em"/><!-- HANGUL SYLLABLE GWAENH -->
+ <map code="0xad1f" name="1em"/><!-- HANGUL SYLLABLE GWAED -->
+ <map code="0xad20" name="1em"/><!-- HANGUL SYLLABLE GWAEL -->
+ <map code="0xad21" name="1em"/><!-- HANGUL SYLLABLE GWAELG -->
+ <map code="0xad22" name="1em"/><!-- HANGUL SYLLABLE GWAELM -->
+ <map code="0xad23" name="1em"/><!-- HANGUL SYLLABLE GWAELB -->
+ <map code="0xad24" name="1em"/><!-- HANGUL SYLLABLE GWAELS -->
+ <map code="0xad25" name="1em"/><!-- HANGUL SYLLABLE GWAELT -->
+ <map code="0xad26" name="1em"/><!-- HANGUL SYLLABLE GWAELP -->
+ <map code="0xad27" name="1em"/><!-- HANGUL SYLLABLE GWAELH -->
+ <map code="0xad28" name="1em"/><!-- HANGUL SYLLABLE GWAEM -->
+ <map code="0xad29" name="1em"/><!-- HANGUL SYLLABLE GWAEB -->
+ <map code="0xad2a" name="1em"/><!-- HANGUL SYLLABLE GWAEBS -->
+ <map code="0xad2b" name="1em"/><!-- HANGUL SYLLABLE GWAES -->
+ <map code="0xad2c" name="1em"/><!-- HANGUL SYLLABLE GWAESS -->
+ <map code="0xad2d" name="1em"/><!-- HANGUL SYLLABLE GWAENG -->
+ <map code="0xad2e" name="1em"/><!-- HANGUL SYLLABLE GWAEJ -->
+ <map code="0xad2f" name="1em"/><!-- HANGUL SYLLABLE GWAEC -->
+ <map code="0xad30" name="1em"/><!-- HANGUL SYLLABLE GWAEK -->
+ <map code="0xad31" name="1em"/><!-- HANGUL SYLLABLE GWAET -->
+ <map code="0xad32" name="1em"/><!-- HANGUL SYLLABLE GWAEP -->
+ <map code="0xad33" name="1em"/><!-- HANGUL SYLLABLE GWAEH -->
+ <map code="0xad34" name="1em"/><!-- HANGUL SYLLABLE GOE -->
+ <map code="0xad35" name="1em"/><!-- HANGUL SYLLABLE GOEG -->
+ <map code="0xad36" name="1em"/><!-- HANGUL SYLLABLE GOEGG -->
+ <map code="0xad37" name="1em"/><!-- HANGUL SYLLABLE GOEGS -->
+ <map code="0xad38" name="1em"/><!-- HANGUL SYLLABLE GOEN -->
+ <map code="0xad39" name="1em"/><!-- HANGUL SYLLABLE GOENJ -->
+ <map code="0xad3a" name="1em"/><!-- HANGUL SYLLABLE GOENH -->
+ <map code="0xad3b" name="1em"/><!-- HANGUL SYLLABLE GOED -->
+ <map code="0xad3c" name="1em"/><!-- HANGUL SYLLABLE GOEL -->
+ <map code="0xad3d" name="1em"/><!-- HANGUL SYLLABLE GOELG -->
+ <map code="0xad3e" name="1em"/><!-- HANGUL SYLLABLE GOELM -->
+ <map code="0xad3f" name="1em"/><!-- HANGUL SYLLABLE GOELB -->
+ <map code="0xad40" name="1em"/><!-- HANGUL SYLLABLE GOELS -->
+ <map code="0xad41" name="1em"/><!-- HANGUL SYLLABLE GOELT -->
+ <map code="0xad42" name="1em"/><!-- HANGUL SYLLABLE GOELP -->
+ <map code="0xad43" name="1em"/><!-- HANGUL SYLLABLE GOELH -->
+ <map code="0xad44" name="1em"/><!-- HANGUL SYLLABLE GOEM -->
+ <map code="0xad45" name="1em"/><!-- HANGUL SYLLABLE GOEB -->
+ <map code="0xad46" name="1em"/><!-- HANGUL SYLLABLE GOEBS -->
+ <map code="0xad47" name="1em"/><!-- HANGUL SYLLABLE GOES -->
+ <map code="0xad48" name="1em"/><!-- HANGUL SYLLABLE GOESS -->
+ <map code="0xad49" name="1em"/><!-- HANGUL SYLLABLE GOENG -->
+ <map code="0xad4a" name="1em"/><!-- HANGUL SYLLABLE GOEJ -->
+ <map code="0xad4b" name="1em"/><!-- HANGUL SYLLABLE GOEC -->
+ <map code="0xad4c" name="1em"/><!-- HANGUL SYLLABLE GOEK -->
+ <map code="0xad4d" name="1em"/><!-- HANGUL SYLLABLE GOET -->
+ <map code="0xad4e" name="1em"/><!-- HANGUL SYLLABLE GOEP -->
+ <map code="0xad4f" name="1em"/><!-- HANGUL SYLLABLE GOEH -->
+ <map code="0xad50" name="1em"/><!-- HANGUL SYLLABLE GYO -->
+ <map code="0xad51" name="1em"/><!-- HANGUL SYLLABLE GYOG -->
+ <map code="0xad52" name="1em"/><!-- HANGUL SYLLABLE GYOGG -->
+ <map code="0xad53" name="1em"/><!-- HANGUL SYLLABLE GYOGS -->
+ <map code="0xad54" name="1em"/><!-- HANGUL SYLLABLE GYON -->
+ <map code="0xad55" name="1em"/><!-- HANGUL SYLLABLE GYONJ -->
+ <map code="0xad56" name="1em"/><!-- HANGUL SYLLABLE GYONH -->
+ <map code="0xad57" name="1em"/><!-- HANGUL SYLLABLE GYOD -->
+ <map code="0xad58" name="1em"/><!-- HANGUL SYLLABLE GYOL -->
+ <map code="0xad59" name="1em"/><!-- HANGUL SYLLABLE GYOLG -->
+ <map code="0xad5a" name="1em"/><!-- HANGUL SYLLABLE GYOLM -->
+ <map code="0xad5b" name="1em"/><!-- HANGUL SYLLABLE GYOLB -->
+ <map code="0xad5c" name="1em"/><!-- HANGUL SYLLABLE GYOLS -->
+ <map code="0xad5d" name="1em"/><!-- HANGUL SYLLABLE GYOLT -->
+ <map code="0xad5e" name="1em"/><!-- HANGUL SYLLABLE GYOLP -->
+ <map code="0xad5f" name="1em"/><!-- HANGUL SYLLABLE GYOLH -->
+ <map code="0xad60" name="1em"/><!-- HANGUL SYLLABLE GYOM -->
+ <map code="0xad61" name="1em"/><!-- HANGUL SYLLABLE GYOB -->
+ <map code="0xad62" name="1em"/><!-- HANGUL SYLLABLE GYOBS -->
+ <map code="0xad63" name="1em"/><!-- HANGUL SYLLABLE GYOS -->
+ <map code="0xad64" name="1em"/><!-- HANGUL SYLLABLE GYOSS -->
+ <map code="0xad65" name="1em"/><!-- HANGUL SYLLABLE GYONG -->
+ <map code="0xad66" name="1em"/><!-- HANGUL SYLLABLE GYOJ -->
+ <map code="0xad67" name="1em"/><!-- HANGUL SYLLABLE GYOC -->
+ <map code="0xad68" name="1em"/><!-- HANGUL SYLLABLE GYOK -->
+ <map code="0xad69" name="1em"/><!-- HANGUL SYLLABLE GYOT -->
+ <map code="0xad6a" name="1em"/><!-- HANGUL SYLLABLE GYOP -->
+ <map code="0xad6b" name="1em"/><!-- HANGUL SYLLABLE GYOH -->
+ <map code="0xad6c" name="1em"/><!-- HANGUL SYLLABLE GU -->
+ <map code="0xad6d" name="1em"/><!-- HANGUL SYLLABLE GUG -->
+ <map code="0xad6e" name="1em"/><!-- HANGUL SYLLABLE GUGG -->
+ <map code="0xad6f" name="1em"/><!-- HANGUL SYLLABLE GUGS -->
+ <map code="0xad70" name="1em"/><!-- HANGUL SYLLABLE GUN -->
+ <map code="0xad71" name="1em"/><!-- HANGUL SYLLABLE GUNJ -->
+ <map code="0xad72" name="1em"/><!-- HANGUL SYLLABLE GUNH -->
+ <map code="0xad73" name="1em"/><!-- HANGUL SYLLABLE GUD -->
+ <map code="0xad74" name="1em"/><!-- HANGUL SYLLABLE GUL -->
+ <map code="0xad75" name="1em"/><!-- HANGUL SYLLABLE GULG -->
+ <map code="0xad76" name="1em"/><!-- HANGUL SYLLABLE GULM -->
+ <map code="0xad77" name="1em"/><!-- HANGUL SYLLABLE GULB -->
+ <map code="0xad78" name="1em"/><!-- HANGUL SYLLABLE GULS -->
+ <map code="0xad79" name="1em"/><!-- HANGUL SYLLABLE GULT -->
+ <map code="0xad7a" name="1em"/><!-- HANGUL SYLLABLE GULP -->
+ <map code="0xad7b" name="1em"/><!-- HANGUL SYLLABLE GULH -->
+ <map code="0xad7c" name="1em"/><!-- HANGUL SYLLABLE GUM -->
+ <map code="0xad7d" name="1em"/><!-- HANGUL SYLLABLE GUB -->
+ <map code="0xad7e" name="1em"/><!-- HANGUL SYLLABLE GUBS -->
+ <map code="0xad7f" name="1em"/><!-- HANGUL SYLLABLE GUS -->
+ <map code="0xad80" name="1em"/><!-- HANGUL SYLLABLE GUSS -->
+ <map code="0xad81" name="1em"/><!-- HANGUL SYLLABLE GUNG -->
+ <map code="0xad82" name="1em"/><!-- HANGUL SYLLABLE GUJ -->
+ <map code="0xad83" name="1em"/><!-- HANGUL SYLLABLE GUC -->
+ <map code="0xad84" name="1em"/><!-- HANGUL SYLLABLE GUK -->
+ <map code="0xad85" name="1em"/><!-- HANGUL SYLLABLE GUT -->
+ <map code="0xad86" name="1em"/><!-- HANGUL SYLLABLE GUP -->
+ <map code="0xad87" name="1em"/><!-- HANGUL SYLLABLE GUH -->
+ <map code="0xad88" name="1em"/><!-- HANGUL SYLLABLE GWEO -->
+ <map code="0xad89" name="1em"/><!-- HANGUL SYLLABLE GWEOG -->
+ <map code="0xad8a" name="1em"/><!-- HANGUL SYLLABLE GWEOGG -->
+ <map code="0xad8b" name="1em"/><!-- HANGUL SYLLABLE GWEOGS -->
+ <map code="0xad8c" name="1em"/><!-- HANGUL SYLLABLE GWEON -->
+ <map code="0xad8d" name="1em"/><!-- HANGUL SYLLABLE GWEONJ -->
+ <map code="0xad8e" name="1em"/><!-- HANGUL SYLLABLE GWEONH -->
+ <map code="0xad8f" name="1em"/><!-- HANGUL SYLLABLE GWEOD -->
+ <map code="0xad90" name="1em"/><!-- HANGUL SYLLABLE GWEOL -->
+ <map code="0xad91" name="1em"/><!-- HANGUL SYLLABLE GWEOLG -->
+ <map code="0xad92" name="1em"/><!-- HANGUL SYLLABLE GWEOLM -->
+ <map code="0xad93" name="1em"/><!-- HANGUL SYLLABLE GWEOLB -->
+ <map code="0xad94" name="1em"/><!-- HANGUL SYLLABLE GWEOLS -->
+ <map code="0xad95" name="1em"/><!-- HANGUL SYLLABLE GWEOLT -->
+ <map code="0xad96" name="1em"/><!-- HANGUL SYLLABLE GWEOLP -->
+ <map code="0xad97" name="1em"/><!-- HANGUL SYLLABLE GWEOLH -->
+ <map code="0xad98" name="1em"/><!-- HANGUL SYLLABLE GWEOM -->
+ <map code="0xad99" name="1em"/><!-- HANGUL SYLLABLE GWEOB -->
+ <map code="0xad9a" name="1em"/><!-- HANGUL SYLLABLE GWEOBS -->
+ <map code="0xad9b" name="1em"/><!-- HANGUL SYLLABLE GWEOS -->
+ <map code="0xad9c" name="1em"/><!-- HANGUL SYLLABLE GWEOSS -->
+ <map code="0xad9d" name="1em"/><!-- HANGUL SYLLABLE GWEONG -->
+ <map code="0xad9e" name="1em"/><!-- HANGUL SYLLABLE GWEOJ -->
+ <map code="0xad9f" name="1em"/><!-- HANGUL SYLLABLE GWEOC -->
+ <map code="0xada0" name="1em"/><!-- HANGUL SYLLABLE GWEOK -->
+ <map code="0xada1" name="1em"/><!-- HANGUL SYLLABLE GWEOT -->
+ <map code="0xada2" name="1em"/><!-- HANGUL SYLLABLE GWEOP -->
+ <map code="0xada3" name="1em"/><!-- HANGUL SYLLABLE GWEOH -->
+ <map code="0xada4" name="1em"/><!-- HANGUL SYLLABLE GWE -->
+ <map code="0xada5" name="1em"/><!-- HANGUL SYLLABLE GWEG -->
+ <map code="0xada6" name="1em"/><!-- HANGUL SYLLABLE GWEGG -->
+ <map code="0xada7" name="1em"/><!-- HANGUL SYLLABLE GWEGS -->
+ <map code="0xada8" name="1em"/><!-- HANGUL SYLLABLE GWEN -->
+ <map code="0xada9" name="1em"/><!-- HANGUL SYLLABLE GWENJ -->
+ <map code="0xadaa" name="1em"/><!-- HANGUL SYLLABLE GWENH -->
+ <map code="0xadab" name="1em"/><!-- HANGUL SYLLABLE GWED -->
+ <map code="0xadac" name="1em"/><!-- HANGUL SYLLABLE GWEL -->
+ <map code="0xadad" name="1em"/><!-- HANGUL SYLLABLE GWELG -->
+ <map code="0xadae" name="1em"/><!-- HANGUL SYLLABLE GWELM -->
+ <map code="0xadaf" name="1em"/><!-- HANGUL SYLLABLE GWELB -->
+ <map code="0xadb0" name="1em"/><!-- HANGUL SYLLABLE GWELS -->
+ <map code="0xadb1" name="1em"/><!-- HANGUL SYLLABLE GWELT -->
+ <map code="0xadb2" name="1em"/><!-- HANGUL SYLLABLE GWELP -->
+ <map code="0xadb3" name="1em"/><!-- HANGUL SYLLABLE GWELH -->
+ <map code="0xadb4" name="1em"/><!-- HANGUL SYLLABLE GWEM -->
+ <map code="0xadb5" name="1em"/><!-- HANGUL SYLLABLE GWEB -->
+ <map code="0xadb6" name="1em"/><!-- HANGUL SYLLABLE GWEBS -->
+ <map code="0xadb7" name="1em"/><!-- HANGUL SYLLABLE GWES -->
+ <map code="0xadb8" name="1em"/><!-- HANGUL SYLLABLE GWESS -->
+ <map code="0xadb9" name="1em"/><!-- HANGUL SYLLABLE GWENG -->
+ <map code="0xadba" name="1em"/><!-- HANGUL SYLLABLE GWEJ -->
+ <map code="0xadbb" name="1em"/><!-- HANGUL SYLLABLE GWEC -->
+ <map code="0xadbc" name="1em"/><!-- HANGUL SYLLABLE GWEK -->
+ <map code="0xadbd" name="1em"/><!-- HANGUL SYLLABLE GWET -->
+ <map code="0xadbe" name="1em"/><!-- HANGUL SYLLABLE GWEP -->
+ <map code="0xadbf" name="1em"/><!-- HANGUL SYLLABLE GWEH -->
+ <map code="0xadc0" name="1em"/><!-- HANGUL SYLLABLE GWI -->
+ <map code="0xadc1" name="1em"/><!-- HANGUL SYLLABLE GWIG -->
+ <map code="0xadc2" name="1em"/><!-- HANGUL SYLLABLE GWIGG -->
+ <map code="0xadc3" name="1em"/><!-- HANGUL SYLLABLE GWIGS -->
+ <map code="0xadc4" name="1em"/><!-- HANGUL SYLLABLE GWIN -->
+ <map code="0xadc5" name="1em"/><!-- HANGUL SYLLABLE GWINJ -->
+ <map code="0xadc6" name="1em"/><!-- HANGUL SYLLABLE GWINH -->
+ <map code="0xadc7" name="1em"/><!-- HANGUL SYLLABLE GWID -->
+ <map code="0xadc8" name="1em"/><!-- HANGUL SYLLABLE GWIL -->
+ <map code="0xadc9" name="1em"/><!-- HANGUL SYLLABLE GWILG -->
+ <map code="0xadca" name="1em"/><!-- HANGUL SYLLABLE GWILM -->
+ <map code="0xadcb" name="1em"/><!-- HANGUL SYLLABLE GWILB -->
+ <map code="0xadcc" name="1em"/><!-- HANGUL SYLLABLE GWILS -->
+ <map code="0xadcd" name="1em"/><!-- HANGUL SYLLABLE GWILT -->
+ <map code="0xadce" name="1em"/><!-- HANGUL SYLLABLE GWILP -->
+ <map code="0xadcf" name="1em"/><!-- HANGUL SYLLABLE GWILH -->
+ <map code="0xadd0" name="1em"/><!-- HANGUL SYLLABLE GWIM -->
+ <map code="0xadd1" name="1em"/><!-- HANGUL SYLLABLE GWIB -->
+ <map code="0xadd2" name="1em"/><!-- HANGUL SYLLABLE GWIBS -->
+ <map code="0xadd3" name="1em"/><!-- HANGUL SYLLABLE GWIS -->
+ <map code="0xadd4" name="1em"/><!-- HANGUL SYLLABLE GWISS -->
+ <map code="0xadd5" name="1em"/><!-- HANGUL SYLLABLE GWING -->
+ <map code="0xadd6" name="1em"/><!-- HANGUL SYLLABLE GWIJ -->
+ <map code="0xadd7" name="1em"/><!-- HANGUL SYLLABLE GWIC -->
+ <map code="0xadd8" name="1em"/><!-- HANGUL SYLLABLE GWIK -->
+ <map code="0xadd9" name="1em"/><!-- HANGUL SYLLABLE GWIT -->
+ <map code="0xadda" name="1em"/><!-- HANGUL SYLLABLE GWIP -->
+ <map code="0xaddb" name="1em"/><!-- HANGUL SYLLABLE GWIH -->
+ <map code="0xaddc" name="1em"/><!-- HANGUL SYLLABLE GYU -->
+ <map code="0xaddd" name="1em"/><!-- HANGUL SYLLABLE GYUG -->
+ <map code="0xadde" name="1em"/><!-- HANGUL SYLLABLE GYUGG -->
+ <map code="0xaddf" name="1em"/><!-- HANGUL SYLLABLE GYUGS -->
+ <map code="0xade0" name="1em"/><!-- HANGUL SYLLABLE GYUN -->
+ <map code="0xade1" name="1em"/><!-- HANGUL SYLLABLE GYUNJ -->
+ <map code="0xade2" name="1em"/><!-- HANGUL SYLLABLE GYUNH -->
+ <map code="0xade3" name="1em"/><!-- HANGUL SYLLABLE GYUD -->
+ <map code="0xade4" name="1em"/><!-- HANGUL SYLLABLE GYUL -->
+ <map code="0xade5" name="1em"/><!-- HANGUL SYLLABLE GYULG -->
+ <map code="0xade6" name="1em"/><!-- HANGUL SYLLABLE GYULM -->
+ <map code="0xade7" name="1em"/><!-- HANGUL SYLLABLE GYULB -->
+ <map code="0xade8" name="1em"/><!-- HANGUL SYLLABLE GYULS -->
+ <map code="0xade9" name="1em"/><!-- HANGUL SYLLABLE GYULT -->
+ <map code="0xadea" name="1em"/><!-- HANGUL SYLLABLE GYULP -->
+ <map code="0xadeb" name="1em"/><!-- HANGUL SYLLABLE GYULH -->
+ <map code="0xadec" name="1em"/><!-- HANGUL SYLLABLE GYUM -->
+ <map code="0xaded" name="1em"/><!-- HANGUL SYLLABLE GYUB -->
+ <map code="0xadee" name="1em"/><!-- HANGUL SYLLABLE GYUBS -->
+ <map code="0xadef" name="1em"/><!-- HANGUL SYLLABLE GYUS -->
+ <map code="0xadf0" name="1em"/><!-- HANGUL SYLLABLE GYUSS -->
+ <map code="0xadf1" name="1em"/><!-- HANGUL SYLLABLE GYUNG -->
+ <map code="0xadf2" name="1em"/><!-- HANGUL SYLLABLE GYUJ -->
+ <map code="0xadf3" name="1em"/><!-- HANGUL SYLLABLE GYUC -->
+ <map code="0xadf4" name="1em"/><!-- HANGUL SYLLABLE GYUK -->
+ <map code="0xadf5" name="1em"/><!-- HANGUL SYLLABLE GYUT -->
+ <map code="0xadf6" name="1em"/><!-- HANGUL SYLLABLE GYUP -->
+ <map code="0xadf7" name="1em"/><!-- HANGUL SYLLABLE GYUH -->
+ <map code="0xadf8" name="1em"/><!-- HANGUL SYLLABLE GEU -->
+ <map code="0xadf9" name="1em"/><!-- HANGUL SYLLABLE GEUG -->
+ <map code="0xadfa" name="1em"/><!-- HANGUL SYLLABLE GEUGG -->
+ <map code="0xadfb" name="1em"/><!-- HANGUL SYLLABLE GEUGS -->
+ <map code="0xadfc" name="1em"/><!-- HANGUL SYLLABLE GEUN -->
+ <map code="0xadfd" name="1em"/><!-- HANGUL SYLLABLE GEUNJ -->
+ <map code="0xadfe" name="1em"/><!-- HANGUL SYLLABLE GEUNH -->
+ <map code="0xadff" name="1em"/><!-- HANGUL SYLLABLE GEUD -->
+ <map code="0xae00" name="1em"/><!-- HANGUL SYLLABLE GEUL -->
+ <map code="0xae01" name="1em"/><!-- HANGUL SYLLABLE GEULG -->
+ <map code="0xae02" name="1em"/><!-- HANGUL SYLLABLE GEULM -->
+ <map code="0xae03" name="1em"/><!-- HANGUL SYLLABLE GEULB -->
+ <map code="0xae04" name="1em"/><!-- HANGUL SYLLABLE GEULS -->
+ <map code="0xae05" name="1em"/><!-- HANGUL SYLLABLE GEULT -->
+ <map code="0xae06" name="1em"/><!-- HANGUL SYLLABLE GEULP -->
+ <map code="0xae07" name="1em"/><!-- HANGUL SYLLABLE GEULH -->
+ <map code="0xae08" name="1em"/><!-- HANGUL SYLLABLE GEUM -->
+ <map code="0xae09" name="1em"/><!-- HANGUL SYLLABLE GEUB -->
+ <map code="0xae0a" name="1em"/><!-- HANGUL SYLLABLE GEUBS -->
+ <map code="0xae0b" name="1em"/><!-- HANGUL SYLLABLE GEUS -->
+ <map code="0xae0c" name="1em"/><!-- HANGUL SYLLABLE GEUSS -->
+ <map code="0xae0d" name="1em"/><!-- HANGUL SYLLABLE GEUNG -->
+ <map code="0xae0e" name="1em"/><!-- HANGUL SYLLABLE GEUJ -->
+ <map code="0xae0f" name="1em"/><!-- HANGUL SYLLABLE GEUC -->
+ <map code="0xae10" name="1em"/><!-- HANGUL SYLLABLE GEUK -->
+ <map code="0xae11" name="1em"/><!-- HANGUL SYLLABLE GEUT -->
+ <map code="0xae12" name="1em"/><!-- HANGUL SYLLABLE GEUP -->
+ <map code="0xae13" name="1em"/><!-- HANGUL SYLLABLE GEUH -->
+ <map code="0xae14" name="1em"/><!-- HANGUL SYLLABLE GYI -->
+ <map code="0xae15" name="1em"/><!-- HANGUL SYLLABLE GYIG -->
+ <map code="0xae16" name="1em"/><!-- HANGUL SYLLABLE GYIGG -->
+ <map code="0xae17" name="1em"/><!-- HANGUL SYLLABLE GYIGS -->
+ <map code="0xae18" name="1em"/><!-- HANGUL SYLLABLE GYIN -->
+ <map code="0xae19" name="1em"/><!-- HANGUL SYLLABLE GYINJ -->
+ <map code="0xae1a" name="1em"/><!-- HANGUL SYLLABLE GYINH -->
+ <map code="0xae1b" name="1em"/><!-- HANGUL SYLLABLE GYID -->
+ <map code="0xae1c" name="1em"/><!-- HANGUL SYLLABLE GYIL -->
+ <map code="0xae1d" name="1em"/><!-- HANGUL SYLLABLE GYILG -->
+ <map code="0xae1e" name="1em"/><!-- HANGUL SYLLABLE GYILM -->
+ <map code="0xae1f" name="1em"/><!-- HANGUL SYLLABLE GYILB -->
+ <map code="0xae20" name="1em"/><!-- HANGUL SYLLABLE GYILS -->
+ <map code="0xae21" name="1em"/><!-- HANGUL SYLLABLE GYILT -->
+ <map code="0xae22" name="1em"/><!-- HANGUL SYLLABLE GYILP -->
+ <map code="0xae23" name="1em"/><!-- HANGUL SYLLABLE GYILH -->
+ <map code="0xae24" name="1em"/><!-- HANGUL SYLLABLE GYIM -->
+ <map code="0xae25" name="1em"/><!-- HANGUL SYLLABLE GYIB -->
+ <map code="0xae26" name="1em"/><!-- HANGUL SYLLABLE GYIBS -->
+ <map code="0xae27" name="1em"/><!-- HANGUL SYLLABLE GYIS -->
+ <map code="0xae28" name="1em"/><!-- HANGUL SYLLABLE GYISS -->
+ <map code="0xae29" name="1em"/><!-- HANGUL SYLLABLE GYING -->
+ <map code="0xae2a" name="1em"/><!-- HANGUL SYLLABLE GYIJ -->
+ <map code="0xae2b" name="1em"/><!-- HANGUL SYLLABLE GYIC -->
+ <map code="0xae2c" name="1em"/><!-- HANGUL SYLLABLE GYIK -->
+ <map code="0xae2d" name="1em"/><!-- HANGUL SYLLABLE GYIT -->
+ <map code="0xae2e" name="1em"/><!-- HANGUL SYLLABLE GYIP -->
+ <map code="0xae2f" name="1em"/><!-- HANGUL SYLLABLE GYIH -->
+ <map code="0xae30" name="1em"/><!-- HANGUL SYLLABLE GI -->
+ <map code="0xae31" name="1em"/><!-- HANGUL SYLLABLE GIG -->
+ <map code="0xae32" name="1em"/><!-- HANGUL SYLLABLE GIGG -->
+ <map code="0xae33" name="1em"/><!-- HANGUL SYLLABLE GIGS -->
+ <map code="0xae34" name="1em"/><!-- HANGUL SYLLABLE GIN -->
+ <map code="0xae35" name="1em"/><!-- HANGUL SYLLABLE GINJ -->
+ <map code="0xae36" name="1em"/><!-- HANGUL SYLLABLE GINH -->
+ <map code="0xae37" name="1em"/><!-- HANGUL SYLLABLE GID -->
+ <map code="0xae38" name="1em"/><!-- HANGUL SYLLABLE GIL -->
+ <map code="0xae39" name="1em"/><!-- HANGUL SYLLABLE GILG -->
+ <map code="0xae3a" name="1em"/><!-- HANGUL SYLLABLE GILM -->
+ <map code="0xae3b" name="1em"/><!-- HANGUL SYLLABLE GILB -->
+ <map code="0xae3c" name="1em"/><!-- HANGUL SYLLABLE GILS -->
+ <map code="0xae3d" name="1em"/><!-- HANGUL SYLLABLE GILT -->
+ <map code="0xae3e" name="1em"/><!-- HANGUL SYLLABLE GILP -->
+ <map code="0xae3f" name="1em"/><!-- HANGUL SYLLABLE GILH -->
+ <map code="0xae40" name="1em"/><!-- HANGUL SYLLABLE GIM -->
+ <map code="0xae41" name="1em"/><!-- HANGUL SYLLABLE GIB -->
+ <map code="0xae42" name="1em"/><!-- HANGUL SYLLABLE GIBS -->
+ <map code="0xae43" name="1em"/><!-- HANGUL SYLLABLE GIS -->
+ <map code="0xae44" name="1em"/><!-- HANGUL SYLLABLE GISS -->
+ <map code="0xae45" name="1em"/><!-- HANGUL SYLLABLE GING -->
+ <map code="0xae46" name="1em"/><!-- HANGUL SYLLABLE GIJ -->
+ <map code="0xae47" name="1em"/><!-- HANGUL SYLLABLE GIC -->
+ <map code="0xae48" name="1em"/><!-- HANGUL SYLLABLE GIK -->
+ <map code="0xae49" name="1em"/><!-- HANGUL SYLLABLE GIT -->
+ <map code="0xae4a" name="1em"/><!-- HANGUL SYLLABLE GIP -->
+ <map code="0xae4b" name="1em"/><!-- HANGUL SYLLABLE GIH -->
+ <map code="0xae4c" name="1em"/><!-- HANGUL SYLLABLE GGA -->
+ <map code="0xae4d" name="1em"/><!-- HANGUL SYLLABLE GGAG -->
+ <map code="0xae4e" name="1em"/><!-- HANGUL SYLLABLE GGAGG -->
+ <map code="0xae4f" name="1em"/><!-- HANGUL SYLLABLE GGAGS -->
+ <map code="0xae50" name="1em"/><!-- HANGUL SYLLABLE GGAN -->
+ <map code="0xae51" name="1em"/><!-- HANGUL SYLLABLE GGANJ -->
+ <map code="0xae52" name="1em"/><!-- HANGUL SYLLABLE GGANH -->
+ <map code="0xae53" name="1em"/><!-- HANGUL SYLLABLE GGAD -->
+ <map code="0xae54" name="1em"/><!-- HANGUL SYLLABLE GGAL -->
+ <map code="0xae55" name="1em"/><!-- HANGUL SYLLABLE GGALG -->
+ <map code="0xae56" name="1em"/><!-- HANGUL SYLLABLE GGALM -->
+ <map code="0xae57" name="1em"/><!-- HANGUL SYLLABLE GGALB -->
+ <map code="0xae58" name="1em"/><!-- HANGUL SYLLABLE GGALS -->
+ <map code="0xae59" name="1em"/><!-- HANGUL SYLLABLE GGALT -->
+ <map code="0xae5a" name="1em"/><!-- HANGUL SYLLABLE GGALP -->
+ <map code="0xae5b" name="1em"/><!-- HANGUL SYLLABLE GGALH -->
+ <map code="0xae5c" name="1em"/><!-- HANGUL SYLLABLE GGAM -->
+ <map code="0xae5d" name="1em"/><!-- HANGUL SYLLABLE GGAB -->
+ <map code="0xae5e" name="1em"/><!-- HANGUL SYLLABLE GGABS -->
+ <map code="0xae5f" name="1em"/><!-- HANGUL SYLLABLE GGAS -->
+ <map code="0xae60" name="1em"/><!-- HANGUL SYLLABLE GGASS -->
+ <map code="0xae61" name="1em"/><!-- HANGUL SYLLABLE GGANG -->
+ <map code="0xae62" name="1em"/><!-- HANGUL SYLLABLE GGAJ -->
+ <map code="0xae63" name="1em"/><!-- HANGUL SYLLABLE GGAC -->
+ <map code="0xae64" name="1em"/><!-- HANGUL SYLLABLE GGAK -->
+ <map code="0xae65" name="1em"/><!-- HANGUL SYLLABLE GGAT -->
+ <map code="0xae66" name="1em"/><!-- HANGUL SYLLABLE GGAP -->
+ <map code="0xae67" name="1em"/><!-- HANGUL SYLLABLE GGAH -->
+ <map code="0xae68" name="1em"/><!-- HANGUL SYLLABLE GGAE -->
+ <map code="0xae69" name="1em"/><!-- HANGUL SYLLABLE GGAEG -->
+ <map code="0xae6a" name="1em"/><!-- HANGUL SYLLABLE GGAEGG -->
+ <map code="0xae6b" name="1em"/><!-- HANGUL SYLLABLE GGAEGS -->
+ <map code="0xae6c" name="1em"/><!-- HANGUL SYLLABLE GGAEN -->
+ <map code="0xae6d" name="1em"/><!-- HANGUL SYLLABLE GGAENJ -->
+ <map code="0xae6e" name="1em"/><!-- HANGUL SYLLABLE GGAENH -->
+ <map code="0xae6f" name="1em"/><!-- HANGUL SYLLABLE GGAED -->
+ <map code="0xae70" name="1em"/><!-- HANGUL SYLLABLE GGAEL -->
+ <map code="0xae71" name="1em"/><!-- HANGUL SYLLABLE GGAELG -->
+ <map code="0xae72" name="1em"/><!-- HANGUL SYLLABLE GGAELM -->
+ <map code="0xae73" name="1em"/><!-- HANGUL SYLLABLE GGAELB -->
+ <map code="0xae74" name="1em"/><!-- HANGUL SYLLABLE GGAELS -->
+ <map code="0xae75" name="1em"/><!-- HANGUL SYLLABLE GGAELT -->
+ <map code="0xae76" name="1em"/><!-- HANGUL SYLLABLE GGAELP -->
+ <map code="0xae77" name="1em"/><!-- HANGUL SYLLABLE GGAELH -->
+ <map code="0xae78" name="1em"/><!-- HANGUL SYLLABLE GGAEM -->
+ <map code="0xae79" name="1em"/><!-- HANGUL SYLLABLE GGAEB -->
+ <map code="0xae7a" name="1em"/><!-- HANGUL SYLLABLE GGAEBS -->
+ <map code="0xae7b" name="1em"/><!-- HANGUL SYLLABLE GGAES -->
+ <map code="0xae7c" name="1em"/><!-- HANGUL SYLLABLE GGAESS -->
+ <map code="0xae7d" name="1em"/><!-- HANGUL SYLLABLE GGAENG -->
+ <map code="0xae7e" name="1em"/><!-- HANGUL SYLLABLE GGAEJ -->
+ <map code="0xae7f" name="1em"/><!-- HANGUL SYLLABLE GGAEC -->
+ <map code="0xae80" name="1em"/><!-- HANGUL SYLLABLE GGAEK -->
+ <map code="0xae81" name="1em"/><!-- HANGUL SYLLABLE GGAET -->
+ <map code="0xae82" name="1em"/><!-- HANGUL SYLLABLE GGAEP -->
+ <map code="0xae83" name="1em"/><!-- HANGUL SYLLABLE GGAEH -->
+ <map code="0xae84" name="1em"/><!-- HANGUL SYLLABLE GGYA -->
+ <map code="0xae85" name="1em"/><!-- HANGUL SYLLABLE GGYAG -->
+ <map code="0xae86" name="1em"/><!-- HANGUL SYLLABLE GGYAGG -->
+ <map code="0xae87" name="1em"/><!-- HANGUL SYLLABLE GGYAGS -->
+ <map code="0xae88" name="1em"/><!-- HANGUL SYLLABLE GGYAN -->
+ <map code="0xae89" name="1em"/><!-- HANGUL SYLLABLE GGYANJ -->
+ <map code="0xae8a" name="1em"/><!-- HANGUL SYLLABLE GGYANH -->
+ <map code="0xae8b" name="1em"/><!-- HANGUL SYLLABLE GGYAD -->
+ <map code="0xae8c" name="1em"/><!-- HANGUL SYLLABLE GGYAL -->
+ <map code="0xae8d" name="1em"/><!-- HANGUL SYLLABLE GGYALG -->
+ <map code="0xae8e" name="1em"/><!-- HANGUL SYLLABLE GGYALM -->
+ <map code="0xae8f" name="1em"/><!-- HANGUL SYLLABLE GGYALB -->
+ <map code="0xae90" name="1em"/><!-- HANGUL SYLLABLE GGYALS -->
+ <map code="0xae91" name="1em"/><!-- HANGUL SYLLABLE GGYALT -->
+ <map code="0xae92" name="1em"/><!-- HANGUL SYLLABLE GGYALP -->
+ <map code="0xae93" name="1em"/><!-- HANGUL SYLLABLE GGYALH -->
+ <map code="0xae94" name="1em"/><!-- HANGUL SYLLABLE GGYAM -->
+ <map code="0xae95" name="1em"/><!-- HANGUL SYLLABLE GGYAB -->
+ <map code="0xae96" name="1em"/><!-- HANGUL SYLLABLE GGYABS -->
+ <map code="0xae97" name="1em"/><!-- HANGUL SYLLABLE GGYAS -->
+ <map code="0xae98" name="1em"/><!-- HANGUL SYLLABLE GGYASS -->
+ <map code="0xae99" name="1em"/><!-- HANGUL SYLLABLE GGYANG -->
+ <map code="0xae9a" name="1em"/><!-- HANGUL SYLLABLE GGYAJ -->
+ <map code="0xae9b" name="1em"/><!-- HANGUL SYLLABLE GGYAC -->
+ <map code="0xae9c" name="1em"/><!-- HANGUL SYLLABLE GGYAK -->
+ <map code="0xae9d" name="1em"/><!-- HANGUL SYLLABLE GGYAT -->
+ <map code="0xae9e" name="1em"/><!-- HANGUL SYLLABLE GGYAP -->
+ <map code="0xae9f" name="1em"/><!-- HANGUL SYLLABLE GGYAH -->
+ <map code="0xaea0" name="1em"/><!-- HANGUL SYLLABLE GGYAE -->
+ <map code="0xaea1" name="1em"/><!-- HANGUL SYLLABLE GGYAEG -->
+ <map code="0xaea2" name="1em"/><!-- HANGUL SYLLABLE GGYAEGG -->
+ <map code="0xaea3" name="1em"/><!-- HANGUL SYLLABLE GGYAEGS -->
+ <map code="0xaea4" name="1em"/><!-- HANGUL SYLLABLE GGYAEN -->
+ <map code="0xaea5" name="1em"/><!-- HANGUL SYLLABLE GGYAENJ -->
+ <map code="0xaea6" name="1em"/><!-- HANGUL SYLLABLE GGYAENH -->
+ <map code="0xaea7" name="1em"/><!-- HANGUL SYLLABLE GGYAED -->
+ <map code="0xaea8" name="1em"/><!-- HANGUL SYLLABLE GGYAEL -->
+ <map code="0xaea9" name="1em"/><!-- HANGUL SYLLABLE GGYAELG -->
+ <map code="0xaeaa" name="1em"/><!-- HANGUL SYLLABLE GGYAELM -->
+ <map code="0xaeab" name="1em"/><!-- HANGUL SYLLABLE GGYAELB -->
+ <map code="0xaeac" name="1em"/><!-- HANGUL SYLLABLE GGYAELS -->
+ <map code="0xaead" name="1em"/><!-- HANGUL SYLLABLE GGYAELT -->
+ <map code="0xaeae" name="1em"/><!-- HANGUL SYLLABLE GGYAELP -->
+ <map code="0xaeaf" name="1em"/><!-- HANGUL SYLLABLE GGYAELH -->
+ <map code="0xaeb0" name="1em"/><!-- HANGUL SYLLABLE GGYAEM -->
+ <map code="0xaeb1" name="1em"/><!-- HANGUL SYLLABLE GGYAEB -->
+ <map code="0xaeb2" name="1em"/><!-- HANGUL SYLLABLE GGYAEBS -->
+ <map code="0xaeb3" name="1em"/><!-- HANGUL SYLLABLE GGYAES -->
+ <map code="0xaeb4" name="1em"/><!-- HANGUL SYLLABLE GGYAESS -->
+ <map code="0xaeb5" name="1em"/><!-- HANGUL SYLLABLE GGYAENG -->
+ <map code="0xaeb6" name="1em"/><!-- HANGUL SYLLABLE GGYAEJ -->
+ <map code="0xaeb7" name="1em"/><!-- HANGUL SYLLABLE GGYAEC -->
+ <map code="0xaeb8" name="1em"/><!-- HANGUL SYLLABLE GGYAEK -->
+ <map code="0xaeb9" name="1em"/><!-- HANGUL SYLLABLE GGYAET -->
+ <map code="0xaeba" name="1em"/><!-- HANGUL SYLLABLE GGYAEP -->
+ <map code="0xaebb" name="1em"/><!-- HANGUL SYLLABLE GGYAEH -->
+ <map code="0xaebc" name="1em"/><!-- HANGUL SYLLABLE GGEO -->
+ <map code="0xaebd" name="1em"/><!-- HANGUL SYLLABLE GGEOG -->
+ <map code="0xaebe" name="1em"/><!-- HANGUL SYLLABLE GGEOGG -->
+ <map code="0xaebf" name="1em"/><!-- HANGUL SYLLABLE GGEOGS -->
+ <map code="0xaec0" name="1em"/><!-- HANGUL SYLLABLE GGEON -->
+ <map code="0xaec1" name="1em"/><!-- HANGUL SYLLABLE GGEONJ -->
+ <map code="0xaec2" name="1em"/><!-- HANGUL SYLLABLE GGEONH -->
+ <map code="0xaec3" name="1em"/><!-- HANGUL SYLLABLE GGEOD -->
+ <map code="0xaec4" name="1em"/><!-- HANGUL SYLLABLE GGEOL -->
+ <map code="0xaec5" name="1em"/><!-- HANGUL SYLLABLE GGEOLG -->
+ <map code="0xaec6" name="1em"/><!-- HANGUL SYLLABLE GGEOLM -->
+ <map code="0xaec7" name="1em"/><!-- HANGUL SYLLABLE GGEOLB -->
+ <map code="0xaec8" name="1em"/><!-- HANGUL SYLLABLE GGEOLS -->
+ <map code="0xaec9" name="1em"/><!-- HANGUL SYLLABLE GGEOLT -->
+ <map code="0xaeca" name="1em"/><!-- HANGUL SYLLABLE GGEOLP -->
+ <map code="0xaecb" name="1em"/><!-- HANGUL SYLLABLE GGEOLH -->
+ <map code="0xaecc" name="1em"/><!-- HANGUL SYLLABLE GGEOM -->
+ <map code="0xaecd" name="1em"/><!-- HANGUL SYLLABLE GGEOB -->
+ <map code="0xaece" name="1em"/><!-- HANGUL SYLLABLE GGEOBS -->
+ <map code="0xaecf" name="1em"/><!-- HANGUL SYLLABLE GGEOS -->
+ <map code="0xaed0" name="1em"/><!-- HANGUL SYLLABLE GGEOSS -->
+ <map code="0xaed1" name="1em"/><!-- HANGUL SYLLABLE GGEONG -->
+ <map code="0xaed2" name="1em"/><!-- HANGUL SYLLABLE GGEOJ -->
+ <map code="0xaed3" name="1em"/><!-- HANGUL SYLLABLE GGEOC -->
+ <map code="0xaed4" name="1em"/><!-- HANGUL SYLLABLE GGEOK -->
+ <map code="0xaed5" name="1em"/><!-- HANGUL SYLLABLE GGEOT -->
+ <map code="0xaed6" name="1em"/><!-- HANGUL SYLLABLE GGEOP -->
+ <map code="0xaed7" name="1em"/><!-- HANGUL SYLLABLE GGEOH -->
+ <map code="0xaed8" name="1em"/><!-- HANGUL SYLLABLE GGE -->
+ <map code="0xaed9" name="1em"/><!-- HANGUL SYLLABLE GGEG -->
+ <map code="0xaeda" name="1em"/><!-- HANGUL SYLLABLE GGEGG -->
+ <map code="0xaedb" name="1em"/><!-- HANGUL SYLLABLE GGEGS -->
+ <map code="0xaedc" name="1em"/><!-- HANGUL SYLLABLE GGEN -->
+ <map code="0xaedd" name="1em"/><!-- HANGUL SYLLABLE GGENJ -->
+ <map code="0xaede" name="1em"/><!-- HANGUL SYLLABLE GGENH -->
+ <map code="0xaedf" name="1em"/><!-- HANGUL SYLLABLE GGED -->
+ <map code="0xaee0" name="1em"/><!-- HANGUL SYLLABLE GGEL -->
+ <map code="0xaee1" name="1em"/><!-- HANGUL SYLLABLE GGELG -->
+ <map code="0xaee2" name="1em"/><!-- HANGUL SYLLABLE GGELM -->
+ <map code="0xaee3" name="1em"/><!-- HANGUL SYLLABLE GGELB -->
+ <map code="0xaee4" name="1em"/><!-- HANGUL SYLLABLE GGELS -->
+ <map code="0xaee5" name="1em"/><!-- HANGUL SYLLABLE GGELT -->
+ <map code="0xaee6" name="1em"/><!-- HANGUL SYLLABLE GGELP -->
+ <map code="0xaee7" name="1em"/><!-- HANGUL SYLLABLE GGELH -->
+ <map code="0xaee8" name="1em"/><!-- HANGUL SYLLABLE GGEM -->
+ <map code="0xaee9" name="1em"/><!-- HANGUL SYLLABLE GGEB -->
+ <map code="0xaeea" name="1em"/><!-- HANGUL SYLLABLE GGEBS -->
+ <map code="0xaeeb" name="1em"/><!-- HANGUL SYLLABLE GGES -->
+ <map code="0xaeec" name="1em"/><!-- HANGUL SYLLABLE GGESS -->
+ <map code="0xaeed" name="1em"/><!-- HANGUL SYLLABLE GGENG -->
+ <map code="0xaeee" name="1em"/><!-- HANGUL SYLLABLE GGEJ -->
+ <map code="0xaeef" name="1em"/><!-- HANGUL SYLLABLE GGEC -->
+ <map code="0xaef0" name="1em"/><!-- HANGUL SYLLABLE GGEK -->
+ <map code="0xaef1" name="1em"/><!-- HANGUL SYLLABLE GGET -->
+ <map code="0xaef2" name="1em"/><!-- HANGUL SYLLABLE GGEP -->
+ <map code="0xaef3" name="1em"/><!-- HANGUL SYLLABLE GGEH -->
+ <map code="0xaef4" name="1em"/><!-- HANGUL SYLLABLE GGYEO -->
+ <map code="0xaef5" name="1em"/><!-- HANGUL SYLLABLE GGYEOG -->
+ <map code="0xaef6" name="1em"/><!-- HANGUL SYLLABLE GGYEOGG -->
+ <map code="0xaef7" name="1em"/><!-- HANGUL SYLLABLE GGYEOGS -->
+ <map code="0xaef8" name="1em"/><!-- HANGUL SYLLABLE GGYEON -->
+ <map code="0xaef9" name="1em"/><!-- HANGUL SYLLABLE GGYEONJ -->
+ <map code="0xaefa" name="1em"/><!-- HANGUL SYLLABLE GGYEONH -->
+ <map code="0xaefb" name="1em"/><!-- HANGUL SYLLABLE GGYEOD -->
+ <map code="0xaefc" name="1em"/><!-- HANGUL SYLLABLE GGYEOL -->
+ <map code="0xaefd" name="1em"/><!-- HANGUL SYLLABLE GGYEOLG -->
+ <map code="0xaefe" name="1em"/><!-- HANGUL SYLLABLE GGYEOLM -->
+ <map code="0xaeff" name="1em"/><!-- HANGUL SYLLABLE GGYEOLB -->
+ <map code="0xaf00" name="1em"/><!-- HANGUL SYLLABLE GGYEOLS -->
+ <map code="0xaf01" name="1em"/><!-- HANGUL SYLLABLE GGYEOLT -->
+ <map code="0xaf02" name="1em"/><!-- HANGUL SYLLABLE GGYEOLP -->
+ <map code="0xaf03" name="1em"/><!-- HANGUL SYLLABLE GGYEOLH -->
+ <map code="0xaf04" name="1em"/><!-- HANGUL SYLLABLE GGYEOM -->
+ <map code="0xaf05" name="1em"/><!-- HANGUL SYLLABLE GGYEOB -->
+ <map code="0xaf06" name="1em"/><!-- HANGUL SYLLABLE GGYEOBS -->
+ <map code="0xaf07" name="1em"/><!-- HANGUL SYLLABLE GGYEOS -->
+ <map code="0xaf08" name="1em"/><!-- HANGUL SYLLABLE GGYEOSS -->
+ <map code="0xaf09" name="1em"/><!-- HANGUL SYLLABLE GGYEONG -->
+ <map code="0xaf0a" name="1em"/><!-- HANGUL SYLLABLE GGYEOJ -->
+ <map code="0xaf0b" name="1em"/><!-- HANGUL SYLLABLE GGYEOC -->
+ <map code="0xaf0c" name="1em"/><!-- HANGUL SYLLABLE GGYEOK -->
+ <map code="0xaf0d" name="1em"/><!-- HANGUL SYLLABLE GGYEOT -->
+ <map code="0xaf0e" name="1em"/><!-- HANGUL SYLLABLE GGYEOP -->
+ <map code="0xaf0f" name="1em"/><!-- HANGUL SYLLABLE GGYEOH -->
+ <map code="0xaf10" name="1em"/><!-- HANGUL SYLLABLE GGYE -->
+ <map code="0xaf11" name="1em"/><!-- HANGUL SYLLABLE GGYEG -->
+ <map code="0xaf12" name="1em"/><!-- HANGUL SYLLABLE GGYEGG -->
+ <map code="0xaf13" name="1em"/><!-- HANGUL SYLLABLE GGYEGS -->
+ <map code="0xaf14" name="1em"/><!-- HANGUL SYLLABLE GGYEN -->
+ <map code="0xaf15" name="1em"/><!-- HANGUL SYLLABLE GGYENJ -->
+ <map code="0xaf16" name="1em"/><!-- HANGUL SYLLABLE GGYENH -->
+ <map code="0xaf17" name="1em"/><!-- HANGUL SYLLABLE GGYED -->
+ <map code="0xaf18" name="1em"/><!-- HANGUL SYLLABLE GGYEL -->
+ <map code="0xaf19" name="1em"/><!-- HANGUL SYLLABLE GGYELG -->
+ <map code="0xaf1a" name="1em"/><!-- HANGUL SYLLABLE GGYELM -->
+ <map code="0xaf1b" name="1em"/><!-- HANGUL SYLLABLE GGYELB -->
+ <map code="0xaf1c" name="1em"/><!-- HANGUL SYLLABLE GGYELS -->
+ <map code="0xaf1d" name="1em"/><!-- HANGUL SYLLABLE GGYELT -->
+ <map code="0xaf1e" name="1em"/><!-- HANGUL SYLLABLE GGYELP -->
+ <map code="0xaf1f" name="1em"/><!-- HANGUL SYLLABLE GGYELH -->
+ <map code="0xaf20" name="1em"/><!-- HANGUL SYLLABLE GGYEM -->
+ <map code="0xaf21" name="1em"/><!-- HANGUL SYLLABLE GGYEB -->
+ <map code="0xaf22" name="1em"/><!-- HANGUL SYLLABLE GGYEBS -->
+ <map code="0xaf23" name="1em"/><!-- HANGUL SYLLABLE GGYES -->
+ <map code="0xaf24" name="1em"/><!-- HANGUL SYLLABLE GGYESS -->
+ <map code="0xaf25" name="1em"/><!-- HANGUL SYLLABLE GGYENG -->
+ <map code="0xaf26" name="1em"/><!-- HANGUL SYLLABLE GGYEJ -->
+ <map code="0xaf27" name="1em"/><!-- HANGUL SYLLABLE GGYEC -->
+ <map code="0xaf28" name="1em"/><!-- HANGUL SYLLABLE GGYEK -->
+ <map code="0xaf29" name="1em"/><!-- HANGUL SYLLABLE GGYET -->
+ <map code="0xaf2a" name="1em"/><!-- HANGUL SYLLABLE GGYEP -->
+ <map code="0xaf2b" name="1em"/><!-- HANGUL SYLLABLE GGYEH -->
+ <map code="0xaf2c" name="1em"/><!-- HANGUL SYLLABLE GGO -->
+ <map code="0xaf2d" name="1em"/><!-- HANGUL SYLLABLE GGOG -->
+ <map code="0xaf2e" name="1em"/><!-- HANGUL SYLLABLE GGOGG -->
+ <map code="0xaf2f" name="1em"/><!-- HANGUL SYLLABLE GGOGS -->
+ <map code="0xaf30" name="1em"/><!-- HANGUL SYLLABLE GGON -->
+ <map code="0xaf31" name="1em"/><!-- HANGUL SYLLABLE GGONJ -->
+ <map code="0xaf32" name="1em"/><!-- HANGUL SYLLABLE GGONH -->
+ <map code="0xaf33" name="1em"/><!-- HANGUL SYLLABLE GGOD -->
+ <map code="0xaf34" name="1em"/><!-- HANGUL SYLLABLE GGOL -->
+ <map code="0xaf35" name="1em"/><!-- HANGUL SYLLABLE GGOLG -->
+ <map code="0xaf36" name="1em"/><!-- HANGUL SYLLABLE GGOLM -->
+ <map code="0xaf37" name="1em"/><!-- HANGUL SYLLABLE GGOLB -->
+ <map code="0xaf38" name="1em"/><!-- HANGUL SYLLABLE GGOLS -->
+ <map code="0xaf39" name="1em"/><!-- HANGUL SYLLABLE GGOLT -->
+ <map code="0xaf3a" name="1em"/><!-- HANGUL SYLLABLE GGOLP -->
+ <map code="0xaf3b" name="1em"/><!-- HANGUL SYLLABLE GGOLH -->
+ <map code="0xaf3c" name="1em"/><!-- HANGUL SYLLABLE GGOM -->
+ <map code="0xaf3d" name="1em"/><!-- HANGUL SYLLABLE GGOB -->
+ <map code="0xaf3e" name="1em"/><!-- HANGUL SYLLABLE GGOBS -->
+ <map code="0xaf3f" name="1em"/><!-- HANGUL SYLLABLE GGOS -->
+ <map code="0xaf40" name="1em"/><!-- HANGUL SYLLABLE GGOSS -->
+ <map code="0xaf41" name="1em"/><!-- HANGUL SYLLABLE GGONG -->
+ <map code="0xaf42" name="1em"/><!-- HANGUL SYLLABLE GGOJ -->
+ <map code="0xaf43" name="1em"/><!-- HANGUL SYLLABLE GGOC -->
+ <map code="0xaf44" name="1em"/><!-- HANGUL SYLLABLE GGOK -->
+ <map code="0xaf45" name="1em"/><!-- HANGUL SYLLABLE GGOT -->
+ <map code="0xaf46" name="1em"/><!-- HANGUL SYLLABLE GGOP -->
+ <map code="0xaf47" name="1em"/><!-- HANGUL SYLLABLE GGOH -->
+ <map code="0xaf48" name="1em"/><!-- HANGUL SYLLABLE GGWA -->
+ <map code="0xaf49" name="1em"/><!-- HANGUL SYLLABLE GGWAG -->
+ <map code="0xaf4a" name="1em"/><!-- HANGUL SYLLABLE GGWAGG -->
+ <map code="0xaf4b" name="1em"/><!-- HANGUL SYLLABLE GGWAGS -->
+ <map code="0xaf4c" name="1em"/><!-- HANGUL SYLLABLE GGWAN -->
+ <map code="0xaf4d" name="1em"/><!-- HANGUL SYLLABLE GGWANJ -->
+ <map code="0xaf4e" name="1em"/><!-- HANGUL SYLLABLE GGWANH -->
+ <map code="0xaf4f" name="1em"/><!-- HANGUL SYLLABLE GGWAD -->
+ <map code="0xaf50" name="1em"/><!-- HANGUL SYLLABLE GGWAL -->
+ <map code="0xaf51" name="1em"/><!-- HANGUL SYLLABLE GGWALG -->
+ <map code="0xaf52" name="1em"/><!-- HANGUL SYLLABLE GGWALM -->
+ <map code="0xaf53" name="1em"/><!-- HANGUL SYLLABLE GGWALB -->
+ <map code="0xaf54" name="1em"/><!-- HANGUL SYLLABLE GGWALS -->
+ <map code="0xaf55" name="1em"/><!-- HANGUL SYLLABLE GGWALT -->
+ <map code="0xaf56" name="1em"/><!-- HANGUL SYLLABLE GGWALP -->
+ <map code="0xaf57" name="1em"/><!-- HANGUL SYLLABLE GGWALH -->
+ <map code="0xaf58" name="1em"/><!-- HANGUL SYLLABLE GGWAM -->
+ <map code="0xaf59" name="1em"/><!-- HANGUL SYLLABLE GGWAB -->
+ <map code="0xaf5a" name="1em"/><!-- HANGUL SYLLABLE GGWABS -->
+ <map code="0xaf5b" name="1em"/><!-- HANGUL SYLLABLE GGWAS -->
+ <map code="0xaf5c" name="1em"/><!-- HANGUL SYLLABLE GGWASS -->
+ <map code="0xaf5d" name="1em"/><!-- HANGUL SYLLABLE GGWANG -->
+ <map code="0xaf5e" name="1em"/><!-- HANGUL SYLLABLE GGWAJ -->
+ <map code="0xaf5f" name="1em"/><!-- HANGUL SYLLABLE GGWAC -->
+ <map code="0xaf60" name="1em"/><!-- HANGUL SYLLABLE GGWAK -->
+ <map code="0xaf61" name="1em"/><!-- HANGUL SYLLABLE GGWAT -->
+ <map code="0xaf62" name="1em"/><!-- HANGUL SYLLABLE GGWAP -->
+ <map code="0xaf63" name="1em"/><!-- HANGUL SYLLABLE GGWAH -->
+ <map code="0xaf64" name="1em"/><!-- HANGUL SYLLABLE GGWAE -->
+ <map code="0xaf65" name="1em"/><!-- HANGUL SYLLABLE GGWAEG -->
+ <map code="0xaf66" name="1em"/><!-- HANGUL SYLLABLE GGWAEGG -->
+ <map code="0xaf67" name="1em"/><!-- HANGUL SYLLABLE GGWAEGS -->
+ <map code="0xaf68" name="1em"/><!-- HANGUL SYLLABLE GGWAEN -->
+ <map code="0xaf69" name="1em"/><!-- HANGUL SYLLABLE GGWAENJ -->
+ <map code="0xaf6a" name="1em"/><!-- HANGUL SYLLABLE GGWAENH -->
+ <map code="0xaf6b" name="1em"/><!-- HANGUL SYLLABLE GGWAED -->
+ <map code="0xaf6c" name="1em"/><!-- HANGUL SYLLABLE GGWAEL -->
+ <map code="0xaf6d" name="1em"/><!-- HANGUL SYLLABLE GGWAELG -->
+ <map code="0xaf6e" name="1em"/><!-- HANGUL SYLLABLE GGWAELM -->
+ <map code="0xaf6f" name="1em"/><!-- HANGUL SYLLABLE GGWAELB -->
+ <map code="0xaf70" name="1em"/><!-- HANGUL SYLLABLE GGWAELS -->
+ <map code="0xaf71" name="1em"/><!-- HANGUL SYLLABLE GGWAELT -->
+ <map code="0xaf72" name="1em"/><!-- HANGUL SYLLABLE GGWAELP -->
+ <map code="0xaf73" name="1em"/><!-- HANGUL SYLLABLE GGWAELH -->
+ <map code="0xaf74" name="1em"/><!-- HANGUL SYLLABLE GGWAEM -->
+ <map code="0xaf75" name="1em"/><!-- HANGUL SYLLABLE GGWAEB -->
+ <map code="0xaf76" name="1em"/><!-- HANGUL SYLLABLE GGWAEBS -->
+ <map code="0xaf77" name="1em"/><!-- HANGUL SYLLABLE GGWAES -->
+ <map code="0xaf78" name="1em"/><!-- HANGUL SYLLABLE GGWAESS -->
+ <map code="0xaf79" name="1em"/><!-- HANGUL SYLLABLE GGWAENG -->
+ <map code="0xaf7a" name="1em"/><!-- HANGUL SYLLABLE GGWAEJ -->
+ <map code="0xaf7b" name="1em"/><!-- HANGUL SYLLABLE GGWAEC -->
+ <map code="0xaf7c" name="1em"/><!-- HANGUL SYLLABLE GGWAEK -->
+ <map code="0xaf7d" name="1em"/><!-- HANGUL SYLLABLE GGWAET -->
+ <map code="0xaf7e" name="1em"/><!-- HANGUL SYLLABLE GGWAEP -->
+ <map code="0xaf7f" name="1em"/><!-- HANGUL SYLLABLE GGWAEH -->
+ <map code="0xaf80" name="1em"/><!-- HANGUL SYLLABLE GGOE -->
+ <map code="0xaf81" name="1em"/><!-- HANGUL SYLLABLE GGOEG -->
+ <map code="0xaf82" name="1em"/><!-- HANGUL SYLLABLE GGOEGG -->
+ <map code="0xaf83" name="1em"/><!-- HANGUL SYLLABLE GGOEGS -->
+ <map code="0xaf84" name="1em"/><!-- HANGUL SYLLABLE GGOEN -->
+ <map code="0xaf85" name="1em"/><!-- HANGUL SYLLABLE GGOENJ -->
+ <map code="0xaf86" name="1em"/><!-- HANGUL SYLLABLE GGOENH -->
+ <map code="0xaf87" name="1em"/><!-- HANGUL SYLLABLE GGOED -->
+ <map code="0xaf88" name="1em"/><!-- HANGUL SYLLABLE GGOEL -->
+ <map code="0xaf89" name="1em"/><!-- HANGUL SYLLABLE GGOELG -->
+ <map code="0xaf8a" name="1em"/><!-- HANGUL SYLLABLE GGOELM -->
+ <map code="0xaf8b" name="1em"/><!-- HANGUL SYLLABLE GGOELB -->
+ <map code="0xaf8c" name="1em"/><!-- HANGUL SYLLABLE GGOELS -->
+ <map code="0xaf8d" name="1em"/><!-- HANGUL SYLLABLE GGOELT -->
+ <map code="0xaf8e" name="1em"/><!-- HANGUL SYLLABLE GGOELP -->
+ <map code="0xaf8f" name="1em"/><!-- HANGUL SYLLABLE GGOELH -->
+ <map code="0xaf90" name="1em"/><!-- HANGUL SYLLABLE GGOEM -->
+ <map code="0xaf91" name="1em"/><!-- HANGUL SYLLABLE GGOEB -->
+ <map code="0xaf92" name="1em"/><!-- HANGUL SYLLABLE GGOEBS -->
+ <map code="0xaf93" name="1em"/><!-- HANGUL SYLLABLE GGOES -->
+ <map code="0xaf94" name="1em"/><!-- HANGUL SYLLABLE GGOESS -->
+ <map code="0xaf95" name="1em"/><!-- HANGUL SYLLABLE GGOENG -->
+ <map code="0xaf96" name="1em"/><!-- HANGUL SYLLABLE GGOEJ -->
+ <map code="0xaf97" name="1em"/><!-- HANGUL SYLLABLE GGOEC -->
+ <map code="0xaf98" name="1em"/><!-- HANGUL SYLLABLE GGOEK -->
+ <map code="0xaf99" name="1em"/><!-- HANGUL SYLLABLE GGOET -->
+ <map code="0xaf9a" name="1em"/><!-- HANGUL SYLLABLE GGOEP -->
+ <map code="0xaf9b" name="1em"/><!-- HANGUL SYLLABLE GGOEH -->
+ <map code="0xaf9c" name="1em"/><!-- HANGUL SYLLABLE GGYO -->
+ <map code="0xaf9d" name="1em"/><!-- HANGUL SYLLABLE GGYOG -->
+ <map code="0xaf9e" name="1em"/><!-- HANGUL SYLLABLE GGYOGG -->
+ <map code="0xaf9f" name="1em"/><!-- HANGUL SYLLABLE GGYOGS -->
+ <map code="0xafa0" name="1em"/><!-- HANGUL SYLLABLE GGYON -->
+ <map code="0xafa1" name="1em"/><!-- HANGUL SYLLABLE GGYONJ -->
+ <map code="0xafa2" name="1em"/><!-- HANGUL SYLLABLE GGYONH -->
+ <map code="0xafa3" name="1em"/><!-- HANGUL SYLLABLE GGYOD -->
+ <map code="0xafa4" name="1em"/><!-- HANGUL SYLLABLE GGYOL -->
+ <map code="0xafa5" name="1em"/><!-- HANGUL SYLLABLE GGYOLG -->
+ <map code="0xafa6" name="1em"/><!-- HANGUL SYLLABLE GGYOLM -->
+ <map code="0xafa7" name="1em"/><!-- HANGUL SYLLABLE GGYOLB -->
+ <map code="0xafa8" name="1em"/><!-- HANGUL SYLLABLE GGYOLS -->
+ <map code="0xafa9" name="1em"/><!-- HANGUL SYLLABLE GGYOLT -->
+ <map code="0xafaa" name="1em"/><!-- HANGUL SYLLABLE GGYOLP -->
+ <map code="0xafab" name="1em"/><!-- HANGUL SYLLABLE GGYOLH -->
+ <map code="0xafac" name="1em"/><!-- HANGUL SYLLABLE GGYOM -->
+ <map code="0xafad" name="1em"/><!-- HANGUL SYLLABLE GGYOB -->
+ <map code="0xafae" name="1em"/><!-- HANGUL SYLLABLE GGYOBS -->
+ <map code="0xafaf" name="1em"/><!-- HANGUL SYLLABLE GGYOS -->
+ <map code="0xafb0" name="1em"/><!-- HANGUL SYLLABLE GGYOSS -->
+ <map code="0xafb1" name="1em"/><!-- HANGUL SYLLABLE GGYONG -->
+ <map code="0xafb2" name="1em"/><!-- HANGUL SYLLABLE GGYOJ -->
+ <map code="0xafb3" name="1em"/><!-- HANGUL SYLLABLE GGYOC -->
+ <map code="0xafb4" name="1em"/><!-- HANGUL SYLLABLE GGYOK -->
+ <map code="0xafb5" name="1em"/><!-- HANGUL SYLLABLE GGYOT -->
+ <map code="0xafb6" name="1em"/><!-- HANGUL SYLLABLE GGYOP -->
+ <map code="0xafb7" name="1em"/><!-- HANGUL SYLLABLE GGYOH -->
+ <map code="0xafb8" name="1em"/><!-- HANGUL SYLLABLE GGU -->
+ <map code="0xafb9" name="1em"/><!-- HANGUL SYLLABLE GGUG -->
+ <map code="0xafba" name="1em"/><!-- HANGUL SYLLABLE GGUGG -->
+ <map code="0xafbb" name="1em"/><!-- HANGUL SYLLABLE GGUGS -->
+ <map code="0xafbc" name="1em"/><!-- HANGUL SYLLABLE GGUN -->
+ <map code="0xafbd" name="1em"/><!-- HANGUL SYLLABLE GGUNJ -->
+ <map code="0xafbe" name="1em"/><!-- HANGUL SYLLABLE GGUNH -->
+ <map code="0xafbf" name="1em"/><!-- HANGUL SYLLABLE GGUD -->
+ <map code="0xafc0" name="1em"/><!-- HANGUL SYLLABLE GGUL -->
+ <map code="0xafc1" name="1em"/><!-- HANGUL SYLLABLE GGULG -->
+ <map code="0xafc2" name="1em"/><!-- HANGUL SYLLABLE GGULM -->
+ <map code="0xafc3" name="1em"/><!-- HANGUL SYLLABLE GGULB -->
+ <map code="0xafc4" name="1em"/><!-- HANGUL SYLLABLE GGULS -->
+ <map code="0xafc5" name="1em"/><!-- HANGUL SYLLABLE GGULT -->
+ <map code="0xafc6" name="1em"/><!-- HANGUL SYLLABLE GGULP -->
+ <map code="0xafc7" name="1em"/><!-- HANGUL SYLLABLE GGULH -->
+ <map code="0xafc8" name="1em"/><!-- HANGUL SYLLABLE GGUM -->
+ <map code="0xafc9" name="1em"/><!-- HANGUL SYLLABLE GGUB -->
+ <map code="0xafca" name="1em"/><!-- HANGUL SYLLABLE GGUBS -->
+ <map code="0xafcb" name="1em"/><!-- HANGUL SYLLABLE GGUS -->
+ <map code="0xafcc" name="1em"/><!-- HANGUL SYLLABLE GGUSS -->
+ <map code="0xafcd" name="1em"/><!-- HANGUL SYLLABLE GGUNG -->
+ <map code="0xafce" name="1em"/><!-- HANGUL SYLLABLE GGUJ -->
+ <map code="0xafcf" name="1em"/><!-- HANGUL SYLLABLE GGUC -->
+ <map code="0xafd0" name="1em"/><!-- HANGUL SYLLABLE GGUK -->
+ <map code="0xafd1" name="1em"/><!-- HANGUL SYLLABLE GGUT -->
+ <map code="0xafd2" name="1em"/><!-- HANGUL SYLLABLE GGUP -->
+ <map code="0xafd3" name="1em"/><!-- HANGUL SYLLABLE GGUH -->
+ <map code="0xafd4" name="1em"/><!-- HANGUL SYLLABLE GGWEO -->
+ <map code="0xafd5" name="1em"/><!-- HANGUL SYLLABLE GGWEOG -->
+ <map code="0xafd6" name="1em"/><!-- HANGUL SYLLABLE GGWEOGG -->
+ <map code="0xafd7" name="1em"/><!-- HANGUL SYLLABLE GGWEOGS -->
+ <map code="0xafd8" name="1em"/><!-- HANGUL SYLLABLE GGWEON -->
+ <map code="0xafd9" name="1em"/><!-- HANGUL SYLLABLE GGWEONJ -->
+ <map code="0xafda" name="1em"/><!-- HANGUL SYLLABLE GGWEONH -->
+ <map code="0xafdb" name="1em"/><!-- HANGUL SYLLABLE GGWEOD -->
+ <map code="0xafdc" name="1em"/><!-- HANGUL SYLLABLE GGWEOL -->
+ <map code="0xafdd" name="1em"/><!-- HANGUL SYLLABLE GGWEOLG -->
+ <map code="0xafde" name="1em"/><!-- HANGUL SYLLABLE GGWEOLM -->
+ <map code="0xafdf" name="1em"/><!-- HANGUL SYLLABLE GGWEOLB -->
+ <map code="0xafe0" name="1em"/><!-- HANGUL SYLLABLE GGWEOLS -->
+ <map code="0xafe1" name="1em"/><!-- HANGUL SYLLABLE GGWEOLT -->
+ <map code="0xafe2" name="1em"/><!-- HANGUL SYLLABLE GGWEOLP -->
+ <map code="0xafe3" name="1em"/><!-- HANGUL SYLLABLE GGWEOLH -->
+ <map code="0xafe4" name="1em"/><!-- HANGUL SYLLABLE GGWEOM -->
+ <map code="0xafe5" name="1em"/><!-- HANGUL SYLLABLE GGWEOB -->
+ <map code="0xafe6" name="1em"/><!-- HANGUL SYLLABLE GGWEOBS -->
+ <map code="0xafe7" name="1em"/><!-- HANGUL SYLLABLE GGWEOS -->
+ <map code="0xafe8" name="1em"/><!-- HANGUL SYLLABLE GGWEOSS -->
+ <map code="0xafe9" name="1em"/><!-- HANGUL SYLLABLE GGWEONG -->
+ <map code="0xafea" name="1em"/><!-- HANGUL SYLLABLE GGWEOJ -->
+ <map code="0xafeb" name="1em"/><!-- HANGUL SYLLABLE GGWEOC -->
+ <map code="0xafec" name="1em"/><!-- HANGUL SYLLABLE GGWEOK -->
+ <map code="0xafed" name="1em"/><!-- HANGUL SYLLABLE GGWEOT -->
+ <map code="0xafee" name="1em"/><!-- HANGUL SYLLABLE GGWEOP -->
+ <map code="0xafef" name="1em"/><!-- HANGUL SYLLABLE GGWEOH -->
+ <map code="0xaff0" name="1em"/><!-- HANGUL SYLLABLE GGWE -->
+ <map code="0xaff1" name="1em"/><!-- HANGUL SYLLABLE GGWEG -->
+ <map code="0xaff2" name="1em"/><!-- HANGUL SYLLABLE GGWEGG -->
+ <map code="0xaff3" name="1em"/><!-- HANGUL SYLLABLE GGWEGS -->
+ <map code="0xaff4" name="1em"/><!-- HANGUL SYLLABLE GGWEN -->
+ <map code="0xaff5" name="1em"/><!-- HANGUL SYLLABLE GGWENJ -->
+ <map code="0xaff6" name="1em"/><!-- HANGUL SYLLABLE GGWENH -->
+ <map code="0xaff7" name="1em"/><!-- HANGUL SYLLABLE GGWED -->
+ <map code="0xaff8" name="1em"/><!-- HANGUL SYLLABLE GGWEL -->
+ <map code="0xaff9" name="1em"/><!-- HANGUL SYLLABLE GGWELG -->
+ <map code="0xaffa" name="1em"/><!-- HANGUL SYLLABLE GGWELM -->
+ <map code="0xaffb" name="1em"/><!-- HANGUL SYLLABLE GGWELB -->
+ <map code="0xaffc" name="1em"/><!-- HANGUL SYLLABLE GGWELS -->
+ <map code="0xaffd" name="1em"/><!-- HANGUL SYLLABLE GGWELT -->
+ <map code="0xaffe" name="1em"/><!-- HANGUL SYLLABLE GGWELP -->
+ <map code="0xafff" name="1em"/><!-- HANGUL SYLLABLE GGWELH -->
+ <map code="0xb000" name="1em"/><!-- HANGUL SYLLABLE GGWEM -->
+ <map code="0xb001" name="1em"/><!-- HANGUL SYLLABLE GGWEB -->
+ <map code="0xb002" name="1em"/><!-- HANGUL SYLLABLE GGWEBS -->
+ <map code="0xb003" name="1em"/><!-- HANGUL SYLLABLE GGWES -->
+ <map code="0xb004" name="1em"/><!-- HANGUL SYLLABLE GGWESS -->
+ <map code="0xb005" name="1em"/><!-- HANGUL SYLLABLE GGWENG -->
+ <map code="0xb006" name="1em"/><!-- HANGUL SYLLABLE GGWEJ -->
+ <map code="0xb007" name="1em"/><!-- HANGUL SYLLABLE GGWEC -->
+ <map code="0xb008" name="1em"/><!-- HANGUL SYLLABLE GGWEK -->
+ <map code="0xb009" name="1em"/><!-- HANGUL SYLLABLE GGWET -->
+ <map code="0xb00a" name="1em"/><!-- HANGUL SYLLABLE GGWEP -->
+ <map code="0xb00b" name="1em"/><!-- HANGUL SYLLABLE GGWEH -->
+ <map code="0xb00c" name="1em"/><!-- HANGUL SYLLABLE GGWI -->
+ <map code="0xb00d" name="1em"/><!-- HANGUL SYLLABLE GGWIG -->
+ <map code="0xb00e" name="1em"/><!-- HANGUL SYLLABLE GGWIGG -->
+ <map code="0xb00f" name="1em"/><!-- HANGUL SYLLABLE GGWIGS -->
+ <map code="0xb010" name="1em"/><!-- HANGUL SYLLABLE GGWIN -->
+ <map code="0xb011" name="1em"/><!-- HANGUL SYLLABLE GGWINJ -->
+ <map code="0xb012" name="1em"/><!-- HANGUL SYLLABLE GGWINH -->
+ <map code="0xb013" name="1em"/><!-- HANGUL SYLLABLE GGWID -->
+ <map code="0xb014" name="1em"/><!-- HANGUL SYLLABLE GGWIL -->
+ <map code="0xb015" name="1em"/><!-- HANGUL SYLLABLE GGWILG -->
+ <map code="0xb016" name="1em"/><!-- HANGUL SYLLABLE GGWILM -->
+ <map code="0xb017" name="1em"/><!-- HANGUL SYLLABLE GGWILB -->
+ <map code="0xb018" name="1em"/><!-- HANGUL SYLLABLE GGWILS -->
+ <map code="0xb019" name="1em"/><!-- HANGUL SYLLABLE GGWILT -->
+ <map code="0xb01a" name="1em"/><!-- HANGUL SYLLABLE GGWILP -->
+ <map code="0xb01b" name="1em"/><!-- HANGUL SYLLABLE GGWILH -->
+ <map code="0xb01c" name="1em"/><!-- HANGUL SYLLABLE GGWIM -->
+ <map code="0xb01d" name="1em"/><!-- HANGUL SYLLABLE GGWIB -->
+ <map code="0xb01e" name="1em"/><!-- HANGUL SYLLABLE GGWIBS -->
+ <map code="0xb01f" name="1em"/><!-- HANGUL SYLLABLE GGWIS -->
+ <map code="0xb020" name="1em"/><!-- HANGUL SYLLABLE GGWISS -->
+ <map code="0xb021" name="1em"/><!-- HANGUL SYLLABLE GGWING -->
+ <map code="0xb022" name="1em"/><!-- HANGUL SYLLABLE GGWIJ -->
+ <map code="0xb023" name="1em"/><!-- HANGUL SYLLABLE GGWIC -->
+ <map code="0xb024" name="1em"/><!-- HANGUL SYLLABLE GGWIK -->
+ <map code="0xb025" name="1em"/><!-- HANGUL SYLLABLE GGWIT -->
+ <map code="0xb026" name="1em"/><!-- HANGUL SYLLABLE GGWIP -->
+ <map code="0xb027" name="1em"/><!-- HANGUL SYLLABLE GGWIH -->
+ <map code="0xb028" name="1em"/><!-- HANGUL SYLLABLE GGYU -->
+ <map code="0xb029" name="1em"/><!-- HANGUL SYLLABLE GGYUG -->
+ <map code="0xb02a" name="1em"/><!-- HANGUL SYLLABLE GGYUGG -->
+ <map code="0xb02b" name="1em"/><!-- HANGUL SYLLABLE GGYUGS -->
+ <map code="0xb02c" name="1em"/><!-- HANGUL SYLLABLE GGYUN -->
+ <map code="0xb02d" name="1em"/><!-- HANGUL SYLLABLE GGYUNJ -->
+ <map code="0xb02e" name="1em"/><!-- HANGUL SYLLABLE GGYUNH -->
+ <map code="0xb02f" name="1em"/><!-- HANGUL SYLLABLE GGYUD -->
+ <map code="0xb030" name="1em"/><!-- HANGUL SYLLABLE GGYUL -->
+ <map code="0xb031" name="1em"/><!-- HANGUL SYLLABLE GGYULG -->
+ <map code="0xb032" name="1em"/><!-- HANGUL SYLLABLE GGYULM -->
+ <map code="0xb033" name="1em"/><!-- HANGUL SYLLABLE GGYULB -->
+ <map code="0xb034" name="1em"/><!-- HANGUL SYLLABLE GGYULS -->
+ <map code="0xb035" name="1em"/><!-- HANGUL SYLLABLE GGYULT -->
+ <map code="0xb036" name="1em"/><!-- HANGUL SYLLABLE GGYULP -->
+ <map code="0xb037" name="1em"/><!-- HANGUL SYLLABLE GGYULH -->
+ <map code="0xb038" name="1em"/><!-- HANGUL SYLLABLE GGYUM -->
+ <map code="0xb039" name="1em"/><!-- HANGUL SYLLABLE GGYUB -->
+ <map code="0xb03a" name="1em"/><!-- HANGUL SYLLABLE GGYUBS -->
+ <map code="0xb03b" name="1em"/><!-- HANGUL SYLLABLE GGYUS -->
+ <map code="0xb03c" name="1em"/><!-- HANGUL SYLLABLE GGYUSS -->
+ <map code="0xb03d" name="1em"/><!-- HANGUL SYLLABLE GGYUNG -->
+ <map code="0xb03e" name="1em"/><!-- HANGUL SYLLABLE GGYUJ -->
+ <map code="0xb03f" name="1em"/><!-- HANGUL SYLLABLE GGYUC -->
+ <map code="0xb040" name="1em"/><!-- HANGUL SYLLABLE GGYUK -->
+ <map code="0xb041" name="1em"/><!-- HANGUL SYLLABLE GGYUT -->
+ <map code="0xb042" name="1em"/><!-- HANGUL SYLLABLE GGYUP -->
+ <map code="0xb043" name="1em"/><!-- HANGUL SYLLABLE GGYUH -->
+ <map code="0xb044" name="1em"/><!-- HANGUL SYLLABLE GGEU -->
+ <map code="0xb045" name="1em"/><!-- HANGUL SYLLABLE GGEUG -->
+ <map code="0xb046" name="1em"/><!-- HANGUL SYLLABLE GGEUGG -->
+ <map code="0xb047" name="1em"/><!-- HANGUL SYLLABLE GGEUGS -->
+ <map code="0xb048" name="1em"/><!-- HANGUL SYLLABLE GGEUN -->
+ <map code="0xb049" name="1em"/><!-- HANGUL SYLLABLE GGEUNJ -->
+ <map code="0xb04a" name="1em"/><!-- HANGUL SYLLABLE GGEUNH -->
+ <map code="0xb04b" name="1em"/><!-- HANGUL SYLLABLE GGEUD -->
+ <map code="0xb04c" name="1em"/><!-- HANGUL SYLLABLE GGEUL -->
+ <map code="0xb04d" name="1em"/><!-- HANGUL SYLLABLE GGEULG -->
+ <map code="0xb04e" name="1em"/><!-- HANGUL SYLLABLE GGEULM -->
+ <map code="0xb04f" name="1em"/><!-- HANGUL SYLLABLE GGEULB -->
+ <map code="0xb050" name="1em"/><!-- HANGUL SYLLABLE GGEULS -->
+ <map code="0xb051" name="1em"/><!-- HANGUL SYLLABLE GGEULT -->
+ <map code="0xb052" name="1em"/><!-- HANGUL SYLLABLE GGEULP -->
+ <map code="0xb053" name="1em"/><!-- HANGUL SYLLABLE GGEULH -->
+ <map code="0xb054" name="1em"/><!-- HANGUL SYLLABLE GGEUM -->
+ <map code="0xb055" name="1em"/><!-- HANGUL SYLLABLE GGEUB -->
+ <map code="0xb056" name="1em"/><!-- HANGUL SYLLABLE GGEUBS -->
+ <map code="0xb057" name="1em"/><!-- HANGUL SYLLABLE GGEUS -->
+ <map code="0xb058" name="1em"/><!-- HANGUL SYLLABLE GGEUSS -->
+ <map code="0xb059" name="1em"/><!-- HANGUL SYLLABLE GGEUNG -->
+ <map code="0xb05a" name="1em"/><!-- HANGUL SYLLABLE GGEUJ -->
+ <map code="0xb05b" name="1em"/><!-- HANGUL SYLLABLE GGEUC -->
+ <map code="0xb05c" name="1em"/><!-- HANGUL SYLLABLE GGEUK -->
+ <map code="0xb05d" name="1em"/><!-- HANGUL SYLLABLE GGEUT -->
+ <map code="0xb05e" name="1em"/><!-- HANGUL SYLLABLE GGEUP -->
+ <map code="0xb05f" name="1em"/><!-- HANGUL SYLLABLE GGEUH -->
+ <map code="0xb060" name="1em"/><!-- HANGUL SYLLABLE GGYI -->
+ <map code="0xb061" name="1em"/><!-- HANGUL SYLLABLE GGYIG -->
+ <map code="0xb062" name="1em"/><!-- HANGUL SYLLABLE GGYIGG -->
+ <map code="0xb063" name="1em"/><!-- HANGUL SYLLABLE GGYIGS -->
+ <map code="0xb064" name="1em"/><!-- HANGUL SYLLABLE GGYIN -->
+ <map code="0xb065" name="1em"/><!-- HANGUL SYLLABLE GGYINJ -->
+ <map code="0xb066" name="1em"/><!-- HANGUL SYLLABLE GGYINH -->
+ <map code="0xb067" name="1em"/><!-- HANGUL SYLLABLE GGYID -->
+ <map code="0xb068" name="1em"/><!-- HANGUL SYLLABLE GGYIL -->
+ <map code="0xb069" name="1em"/><!-- HANGUL SYLLABLE GGYILG -->
+ <map code="0xb06a" name="1em"/><!-- HANGUL SYLLABLE GGYILM -->
+ <map code="0xb06b" name="1em"/><!-- HANGUL SYLLABLE GGYILB -->
+ <map code="0xb06c" name="1em"/><!-- HANGUL SYLLABLE GGYILS -->
+ <map code="0xb06d" name="1em"/><!-- HANGUL SYLLABLE GGYILT -->
+ <map code="0xb06e" name="1em"/><!-- HANGUL SYLLABLE GGYILP -->
+ <map code="0xb06f" name="1em"/><!-- HANGUL SYLLABLE GGYILH -->
+ <map code="0xb070" name="1em"/><!-- HANGUL SYLLABLE GGYIM -->
+ <map code="0xb071" name="1em"/><!-- HANGUL SYLLABLE GGYIB -->
+ <map code="0xb072" name="1em"/><!-- HANGUL SYLLABLE GGYIBS -->
+ <map code="0xb073" name="1em"/><!-- HANGUL SYLLABLE GGYIS -->
+ <map code="0xb074" name="1em"/><!-- HANGUL SYLLABLE GGYISS -->
+ <map code="0xb075" name="1em"/><!-- HANGUL SYLLABLE GGYING -->
+ <map code="0xb076" name="1em"/><!-- HANGUL SYLLABLE GGYIJ -->
+ <map code="0xb077" name="1em"/><!-- HANGUL SYLLABLE GGYIC -->
+ <map code="0xb078" name="1em"/><!-- HANGUL SYLLABLE GGYIK -->
+ <map code="0xb079" name="1em"/><!-- HANGUL SYLLABLE GGYIT -->
+ <map code="0xb07a" name="1em"/><!-- HANGUL SYLLABLE GGYIP -->
+ <map code="0xb07b" name="1em"/><!-- HANGUL SYLLABLE GGYIH -->
+ <map code="0xb07c" name="1em"/><!-- HANGUL SYLLABLE GGI -->
+ <map code="0xb07d" name="1em"/><!-- HANGUL SYLLABLE GGIG -->
+ <map code="0xb07e" name="1em"/><!-- HANGUL SYLLABLE GGIGG -->
+ <map code="0xb07f" name="1em"/><!-- HANGUL SYLLABLE GGIGS -->
+ <map code="0xb080" name="1em"/><!-- HANGUL SYLLABLE GGIN -->
+ <map code="0xb081" name="1em"/><!-- HANGUL SYLLABLE GGINJ -->
+ <map code="0xb082" name="1em"/><!-- HANGUL SYLLABLE GGINH -->
+ <map code="0xb083" name="1em"/><!-- HANGUL SYLLABLE GGID -->
+ <map code="0xb084" name="1em"/><!-- HANGUL SYLLABLE GGIL -->
+ <map code="0xb085" name="1em"/><!-- HANGUL SYLLABLE GGILG -->
+ <map code="0xb086" name="1em"/><!-- HANGUL SYLLABLE GGILM -->
+ <map code="0xb087" name="1em"/><!-- HANGUL SYLLABLE GGILB -->
+ <map code="0xb088" name="1em"/><!-- HANGUL SYLLABLE GGILS -->
+ <map code="0xb089" name="1em"/><!-- HANGUL SYLLABLE GGILT -->
+ <map code="0xb08a" name="1em"/><!-- HANGUL SYLLABLE GGILP -->
+ <map code="0xb08b" name="1em"/><!-- HANGUL SYLLABLE GGILH -->
+ <map code="0xb08c" name="1em"/><!-- HANGUL SYLLABLE GGIM -->
+ <map code="0xb08d" name="1em"/><!-- HANGUL SYLLABLE GGIB -->
+ <map code="0xb08e" name="1em"/><!-- HANGUL SYLLABLE GGIBS -->
+ <map code="0xb08f" name="1em"/><!-- HANGUL SYLLABLE GGIS -->
+ <map code="0xb090" name="1em"/><!-- HANGUL SYLLABLE GGISS -->
+ <map code="0xb091" name="1em"/><!-- HANGUL SYLLABLE GGING -->
+ <map code="0xb092" name="1em"/><!-- HANGUL SYLLABLE GGIJ -->
+ <map code="0xb093" name="1em"/><!-- HANGUL SYLLABLE GGIC -->
+ <map code="0xb094" name="1em"/><!-- HANGUL SYLLABLE GGIK -->
+ <map code="0xb095" name="1em"/><!-- HANGUL SYLLABLE GGIT -->
+ <map code="0xb096" name="1em"/><!-- HANGUL SYLLABLE GGIP -->
+ <map code="0xb097" name="1em"/><!-- HANGUL SYLLABLE GGIH -->
+ <map code="0xb098" name="1em"/><!-- HANGUL SYLLABLE NA -->
+ <map code="0xb099" name="1em"/><!-- HANGUL SYLLABLE NAG -->
+ <map code="0xb09a" name="1em"/><!-- HANGUL SYLLABLE NAGG -->
+ <map code="0xb09b" name="1em"/><!-- HANGUL SYLLABLE NAGS -->
+ <map code="0xb09c" name="1em"/><!-- HANGUL SYLLABLE NAN -->
+ <map code="0xb09d" name="1em"/><!-- HANGUL SYLLABLE NANJ -->
+ <map code="0xb09e" name="1em"/><!-- HANGUL SYLLABLE NANH -->
+ <map code="0xb09f" name="1em"/><!-- HANGUL SYLLABLE NAD -->
+ <map code="0xb0a0" name="1em"/><!-- HANGUL SYLLABLE NAL -->
+ <map code="0xb0a1" name="1em"/><!-- HANGUL SYLLABLE NALG -->
+ <map code="0xb0a2" name="1em"/><!-- HANGUL SYLLABLE NALM -->
+ <map code="0xb0a3" name="1em"/><!-- HANGUL SYLLABLE NALB -->
+ <map code="0xb0a4" name="1em"/><!-- HANGUL SYLLABLE NALS -->
+ <map code="0xb0a5" name="1em"/><!-- HANGUL SYLLABLE NALT -->
+ <map code="0xb0a6" name="1em"/><!-- HANGUL SYLLABLE NALP -->
+ <map code="0xb0a7" name="1em"/><!-- HANGUL SYLLABLE NALH -->
+ <map code="0xb0a8" name="1em"/><!-- HANGUL SYLLABLE NAM -->
+ <map code="0xb0a9" name="1em"/><!-- HANGUL SYLLABLE NAB -->
+ <map code="0xb0aa" name="1em"/><!-- HANGUL SYLLABLE NABS -->
+ <map code="0xb0ab" name="1em"/><!-- HANGUL SYLLABLE NAS -->
+ <map code="0xb0ac" name="1em"/><!-- HANGUL SYLLABLE NASS -->
+ <map code="0xb0ad" name="1em"/><!-- HANGUL SYLLABLE NANG -->
+ <map code="0xb0ae" name="1em"/><!-- HANGUL SYLLABLE NAJ -->
+ <map code="0xb0af" name="1em"/><!-- HANGUL SYLLABLE NAC -->
+ <map code="0xb0b0" name="1em"/><!-- HANGUL SYLLABLE NAK -->
+ <map code="0xb0b1" name="1em"/><!-- HANGUL SYLLABLE NAT -->
+ <map code="0xb0b2" name="1em"/><!-- HANGUL SYLLABLE NAP -->
+ <map code="0xb0b3" name="1em"/><!-- HANGUL SYLLABLE NAH -->
+ <map code="0xb0b4" name="1em"/><!-- HANGUL SYLLABLE NAE -->
+ <map code="0xb0b5" name="1em"/><!-- HANGUL SYLLABLE NAEG -->
+ <map code="0xb0b6" name="1em"/><!-- HANGUL SYLLABLE NAEGG -->
+ <map code="0xb0b7" name="1em"/><!-- HANGUL SYLLABLE NAEGS -->
+ <map code="0xb0b8" name="1em"/><!-- HANGUL SYLLABLE NAEN -->
+ <map code="0xb0b9" name="1em"/><!-- HANGUL SYLLABLE NAENJ -->
+ <map code="0xb0ba" name="1em"/><!-- HANGUL SYLLABLE NAENH -->
+ <map code="0xb0bb" name="1em"/><!-- HANGUL SYLLABLE NAED -->
+ <map code="0xb0bc" name="1em"/><!-- HANGUL SYLLABLE NAEL -->
+ <map code="0xb0bd" name="1em"/><!-- HANGUL SYLLABLE NAELG -->
+ <map code="0xb0be" name="1em"/><!-- HANGUL SYLLABLE NAELM -->
+ <map code="0xb0bf" name="1em"/><!-- HANGUL SYLLABLE NAELB -->
+ <map code="0xb0c0" name="1em"/><!-- HANGUL SYLLABLE NAELS -->
+ <map code="0xb0c1" name="1em"/><!-- HANGUL SYLLABLE NAELT -->
+ <map code="0xb0c2" name="1em"/><!-- HANGUL SYLLABLE NAELP -->
+ <map code="0xb0c3" name="1em"/><!-- HANGUL SYLLABLE NAELH -->
+ <map code="0xb0c4" name="1em"/><!-- HANGUL SYLLABLE NAEM -->
+ <map code="0xb0c5" name="1em"/><!-- HANGUL SYLLABLE NAEB -->
+ <map code="0xb0c6" name="1em"/><!-- HANGUL SYLLABLE NAEBS -->
+ <map code="0xb0c7" name="1em"/><!-- HANGUL SYLLABLE NAES -->
+ <map code="0xb0c8" name="1em"/><!-- HANGUL SYLLABLE NAESS -->
+ <map code="0xb0c9" name="1em"/><!-- HANGUL SYLLABLE NAENG -->
+ <map code="0xb0ca" name="1em"/><!-- HANGUL SYLLABLE NAEJ -->
+ <map code="0xb0cb" name="1em"/><!-- HANGUL SYLLABLE NAEC -->
+ <map code="0xb0cc" name="1em"/><!-- HANGUL SYLLABLE NAEK -->
+ <map code="0xb0cd" name="1em"/><!-- HANGUL SYLLABLE NAET -->
+ <map code="0xb0ce" name="1em"/><!-- HANGUL SYLLABLE NAEP -->
+ <map code="0xb0cf" name="1em"/><!-- HANGUL SYLLABLE NAEH -->
+ <map code="0xb0d0" name="1em"/><!-- HANGUL SYLLABLE NYA -->
+ <map code="0xb0d1" name="1em"/><!-- HANGUL SYLLABLE NYAG -->
+ <map code="0xb0d2" name="1em"/><!-- HANGUL SYLLABLE NYAGG -->
+ <map code="0xb0d3" name="1em"/><!-- HANGUL SYLLABLE NYAGS -->
+ <map code="0xb0d4" name="1em"/><!-- HANGUL SYLLABLE NYAN -->
+ <map code="0xb0d5" name="1em"/><!-- HANGUL SYLLABLE NYANJ -->
+ <map code="0xb0d6" name="1em"/><!-- HANGUL SYLLABLE NYANH -->
+ <map code="0xb0d7" name="1em"/><!-- HANGUL SYLLABLE NYAD -->
+ <map code="0xb0d8" name="1em"/><!-- HANGUL SYLLABLE NYAL -->
+ <map code="0xb0d9" name="1em"/><!-- HANGUL SYLLABLE NYALG -->
+ <map code="0xb0da" name="1em"/><!-- HANGUL SYLLABLE NYALM -->
+ <map code="0xb0db" name="1em"/><!-- HANGUL SYLLABLE NYALB -->
+ <map code="0xb0dc" name="1em"/><!-- HANGUL SYLLABLE NYALS -->
+ <map code="0xb0dd" name="1em"/><!-- HANGUL SYLLABLE NYALT -->
+ <map code="0xb0de" name="1em"/><!-- HANGUL SYLLABLE NYALP -->
+ <map code="0xb0df" name="1em"/><!-- HANGUL SYLLABLE NYALH -->
+ <map code="0xb0e0" name="1em"/><!-- HANGUL SYLLABLE NYAM -->
+ <map code="0xb0e1" name="1em"/><!-- HANGUL SYLLABLE NYAB -->
+ <map code="0xb0e2" name="1em"/><!-- HANGUL SYLLABLE NYABS -->
+ <map code="0xb0e3" name="1em"/><!-- HANGUL SYLLABLE NYAS -->
+ <map code="0xb0e4" name="1em"/><!-- HANGUL SYLLABLE NYASS -->
+ <map code="0xb0e5" name="1em"/><!-- HANGUL SYLLABLE NYANG -->
+ <map code="0xb0e6" name="1em"/><!-- HANGUL SYLLABLE NYAJ -->
+ <map code="0xb0e7" name="1em"/><!-- HANGUL SYLLABLE NYAC -->
+ <map code="0xb0e8" name="1em"/><!-- HANGUL SYLLABLE NYAK -->
+ <map code="0xb0e9" name="1em"/><!-- HANGUL SYLLABLE NYAT -->
+ <map code="0xb0ea" name="1em"/><!-- HANGUL SYLLABLE NYAP -->
+ <map code="0xb0eb" name="1em"/><!-- HANGUL SYLLABLE NYAH -->
+ <map code="0xb0ec" name="1em"/><!-- HANGUL SYLLABLE NYAE -->
+ <map code="0xb0ed" name="1em"/><!-- HANGUL SYLLABLE NYAEG -->
+ <map code="0xb0ee" name="1em"/><!-- HANGUL SYLLABLE NYAEGG -->
+ <map code="0xb0ef" name="1em"/><!-- HANGUL SYLLABLE NYAEGS -->
+ <map code="0xb0f0" name="1em"/><!-- HANGUL SYLLABLE NYAEN -->
+ <map code="0xb0f1" name="1em"/><!-- HANGUL SYLLABLE NYAENJ -->
+ <map code="0xb0f2" name="1em"/><!-- HANGUL SYLLABLE NYAENH -->
+ <map code="0xb0f3" name="1em"/><!-- HANGUL SYLLABLE NYAED -->
+ <map code="0xb0f4" name="1em"/><!-- HANGUL SYLLABLE NYAEL -->
+ <map code="0xb0f5" name="1em"/><!-- HANGUL SYLLABLE NYAELG -->
+ <map code="0xb0f6" name="1em"/><!-- HANGUL SYLLABLE NYAELM -->
+ <map code="0xb0f7" name="1em"/><!-- HANGUL SYLLABLE NYAELB -->
+ <map code="0xb0f8" name="1em"/><!-- HANGUL SYLLABLE NYAELS -->
+ <map code="0xb0f9" name="1em"/><!-- HANGUL SYLLABLE NYAELT -->
+ <map code="0xb0fa" name="1em"/><!-- HANGUL SYLLABLE NYAELP -->
+ <map code="0xb0fb" name="1em"/><!-- HANGUL SYLLABLE NYAELH -->
+ <map code="0xb0fc" name="1em"/><!-- HANGUL SYLLABLE NYAEM -->
+ <map code="0xb0fd" name="1em"/><!-- HANGUL SYLLABLE NYAEB -->
+ <map code="0xb0fe" name="1em"/><!-- HANGUL SYLLABLE NYAEBS -->
+ <map code="0xb0ff" name="1em"/><!-- HANGUL SYLLABLE NYAES -->
+ <map code="0xb100" name="1em"/><!-- HANGUL SYLLABLE NYAESS -->
+ <map code="0xb101" name="1em"/><!-- HANGUL SYLLABLE NYAENG -->
+ <map code="0xb102" name="1em"/><!-- HANGUL SYLLABLE NYAEJ -->
+ <map code="0xb103" name="1em"/><!-- HANGUL SYLLABLE NYAEC -->
+ <map code="0xb104" name="1em"/><!-- HANGUL SYLLABLE NYAEK -->
+ <map code="0xb105" name="1em"/><!-- HANGUL SYLLABLE NYAET -->
+ <map code="0xb106" name="1em"/><!-- HANGUL SYLLABLE NYAEP -->
+ <map code="0xb107" name="1em"/><!-- HANGUL SYLLABLE NYAEH -->
+ <map code="0xb108" name="1em"/><!-- HANGUL SYLLABLE NEO -->
+ <map code="0xb109" name="1em"/><!-- HANGUL SYLLABLE NEOG -->
+ <map code="0xb10a" name="1em"/><!-- HANGUL SYLLABLE NEOGG -->
+ <map code="0xb10b" name="1em"/><!-- HANGUL SYLLABLE NEOGS -->
+ <map code="0xb10c" name="1em"/><!-- HANGUL SYLLABLE NEON -->
+ <map code="0xb10d" name="1em"/><!-- HANGUL SYLLABLE NEONJ -->
+ <map code="0xb10e" name="1em"/><!-- HANGUL SYLLABLE NEONH -->
+ <map code="0xb10f" name="1em"/><!-- HANGUL SYLLABLE NEOD -->
+ <map code="0xb110" name="1em"/><!-- HANGUL SYLLABLE NEOL -->
+ <map code="0xb111" name="1em"/><!-- HANGUL SYLLABLE NEOLG -->
+ <map code="0xb112" name="1em"/><!-- HANGUL SYLLABLE NEOLM -->
+ <map code="0xb113" name="1em"/><!-- HANGUL SYLLABLE NEOLB -->
+ <map code="0xb114" name="1em"/><!-- HANGUL SYLLABLE NEOLS -->
+ <map code="0xb115" name="1em"/><!-- HANGUL SYLLABLE NEOLT -->
+ <map code="0xb116" name="1em"/><!-- HANGUL SYLLABLE NEOLP -->
+ <map code="0xb117" name="1em"/><!-- HANGUL SYLLABLE NEOLH -->
+ <map code="0xb118" name="1em"/><!-- HANGUL SYLLABLE NEOM -->
+ <map code="0xb119" name="1em"/><!-- HANGUL SYLLABLE NEOB -->
+ <map code="0xb11a" name="1em"/><!-- HANGUL SYLLABLE NEOBS -->
+ <map code="0xb11b" name="1em"/><!-- HANGUL SYLLABLE NEOS -->
+ <map code="0xb11c" name="1em"/><!-- HANGUL SYLLABLE NEOSS -->
+ <map code="0xb11d" name="1em"/><!-- HANGUL SYLLABLE NEONG -->
+ <map code="0xb11e" name="1em"/><!-- HANGUL SYLLABLE NEOJ -->
+ <map code="0xb11f" name="1em"/><!-- HANGUL SYLLABLE NEOC -->
+ <map code="0xb120" name="1em"/><!-- HANGUL SYLLABLE NEOK -->
+ <map code="0xb121" name="1em"/><!-- HANGUL SYLLABLE NEOT -->
+ <map code="0xb122" name="1em"/><!-- HANGUL SYLLABLE NEOP -->
+ <map code="0xb123" name="1em"/><!-- HANGUL SYLLABLE NEOH -->
+ <map code="0xb124" name="1em"/><!-- HANGUL SYLLABLE NE -->
+ <map code="0xb125" name="1em"/><!-- HANGUL SYLLABLE NEG -->
+ <map code="0xb126" name="1em"/><!-- HANGUL SYLLABLE NEGG -->
+ <map code="0xb127" name="1em"/><!-- HANGUL SYLLABLE NEGS -->
+ <map code="0xb128" name="1em"/><!-- HANGUL SYLLABLE NEN -->
+ <map code="0xb129" name="1em"/><!-- HANGUL SYLLABLE NENJ -->
+ <map code="0xb12a" name="1em"/><!-- HANGUL SYLLABLE NENH -->
+ <map code="0xb12b" name="1em"/><!-- HANGUL SYLLABLE NED -->
+ <map code="0xb12c" name="1em"/><!-- HANGUL SYLLABLE NEL -->
+ <map code="0xb12d" name="1em"/><!-- HANGUL SYLLABLE NELG -->
+ <map code="0xb12e" name="1em"/><!-- HANGUL SYLLABLE NELM -->
+ <map code="0xb12f" name="1em"/><!-- HANGUL SYLLABLE NELB -->
+ <map code="0xb130" name="1em"/><!-- HANGUL SYLLABLE NELS -->
+ <map code="0xb131" name="1em"/><!-- HANGUL SYLLABLE NELT -->
+ <map code="0xb132" name="1em"/><!-- HANGUL SYLLABLE NELP -->
+ <map code="0xb133" name="1em"/><!-- HANGUL SYLLABLE NELH -->
+ <map code="0xb134" name="1em"/><!-- HANGUL SYLLABLE NEM -->
+ <map code="0xb135" name="1em"/><!-- HANGUL SYLLABLE NEB -->
+ <map code="0xb136" name="1em"/><!-- HANGUL SYLLABLE NEBS -->
+ <map code="0xb137" name="1em"/><!-- HANGUL SYLLABLE NES -->
+ <map code="0xb138" name="1em"/><!-- HANGUL SYLLABLE NESS -->
+ <map code="0xb139" name="1em"/><!-- HANGUL SYLLABLE NENG -->
+ <map code="0xb13a" name="1em"/><!-- HANGUL SYLLABLE NEJ -->
+ <map code="0xb13b" name="1em"/><!-- HANGUL SYLLABLE NEC -->
+ <map code="0xb13c" name="1em"/><!-- HANGUL SYLLABLE NEK -->
+ <map code="0xb13d" name="1em"/><!-- HANGUL SYLLABLE NET -->
+ <map code="0xb13e" name="1em"/><!-- HANGUL SYLLABLE NEP -->
+ <map code="0xb13f" name="1em"/><!-- HANGUL SYLLABLE NEH -->
+ <map code="0xb140" name="1em"/><!-- HANGUL SYLLABLE NYEO -->
+ <map code="0xb141" name="1em"/><!-- HANGUL SYLLABLE NYEOG -->
+ <map code="0xb142" name="1em"/><!-- HANGUL SYLLABLE NYEOGG -->
+ <map code="0xb143" name="1em"/><!-- HANGUL SYLLABLE NYEOGS -->
+ <map code="0xb144" name="1em"/><!-- HANGUL SYLLABLE NYEON -->
+ <map code="0xb145" name="1em"/><!-- HANGUL SYLLABLE NYEONJ -->
+ <map code="0xb146" name="1em"/><!-- HANGUL SYLLABLE NYEONH -->
+ <map code="0xb147" name="1em"/><!-- HANGUL SYLLABLE NYEOD -->
+ <map code="0xb148" name="1em"/><!-- HANGUL SYLLABLE NYEOL -->
+ <map code="0xb149" name="1em"/><!-- HANGUL SYLLABLE NYEOLG -->
+ <map code="0xb14a" name="1em"/><!-- HANGUL SYLLABLE NYEOLM -->
+ <map code="0xb14b" name="1em"/><!-- HANGUL SYLLABLE NYEOLB -->
+ <map code="0xb14c" name="1em"/><!-- HANGUL SYLLABLE NYEOLS -->
+ <map code="0xb14d" name="1em"/><!-- HANGUL SYLLABLE NYEOLT -->
+ <map code="0xb14e" name="1em"/><!-- HANGUL SYLLABLE NYEOLP -->
+ <map code="0xb14f" name="1em"/><!-- HANGUL SYLLABLE NYEOLH -->
+ <map code="0xb150" name="1em"/><!-- HANGUL SYLLABLE NYEOM -->
+ <map code="0xb151" name="1em"/><!-- HANGUL SYLLABLE NYEOB -->
+ <map code="0xb152" name="1em"/><!-- HANGUL SYLLABLE NYEOBS -->
+ <map code="0xb153" name="1em"/><!-- HANGUL SYLLABLE NYEOS -->
+ <map code="0xb154" name="1em"/><!-- HANGUL SYLLABLE NYEOSS -->
+ <map code="0xb155" name="1em"/><!-- HANGUL SYLLABLE NYEONG -->
+ <map code="0xb156" name="1em"/><!-- HANGUL SYLLABLE NYEOJ -->
+ <map code="0xb157" name="1em"/><!-- HANGUL SYLLABLE NYEOC -->
+ <map code="0xb158" name="1em"/><!-- HANGUL SYLLABLE NYEOK -->
+ <map code="0xb159" name="1em"/><!-- HANGUL SYLLABLE NYEOT -->
+ <map code="0xb15a" name="1em"/><!-- HANGUL SYLLABLE NYEOP -->
+ <map code="0xb15b" name="1em"/><!-- HANGUL SYLLABLE NYEOH -->
+ <map code="0xb15c" name="1em"/><!-- HANGUL SYLLABLE NYE -->
+ <map code="0xb15d" name="1em"/><!-- HANGUL SYLLABLE NYEG -->
+ <map code="0xb15e" name="1em"/><!-- HANGUL SYLLABLE NYEGG -->
+ <map code="0xb15f" name="1em"/><!-- HANGUL SYLLABLE NYEGS -->
+ <map code="0xb160" name="1em"/><!-- HANGUL SYLLABLE NYEN -->
+ <map code="0xb161" name="1em"/><!-- HANGUL SYLLABLE NYENJ -->
+ <map code="0xb162" name="1em"/><!-- HANGUL SYLLABLE NYENH -->
+ <map code="0xb163" name="1em"/><!-- HANGUL SYLLABLE NYED -->
+ <map code="0xb164" name="1em"/><!-- HANGUL SYLLABLE NYEL -->
+ <map code="0xb165" name="1em"/><!-- HANGUL SYLLABLE NYELG -->
+ <map code="0xb166" name="1em"/><!-- HANGUL SYLLABLE NYELM -->
+ <map code="0xb167" name="1em"/><!-- HANGUL SYLLABLE NYELB -->
+ <map code="0xb168" name="1em"/><!-- HANGUL SYLLABLE NYELS -->
+ <map code="0xb169" name="1em"/><!-- HANGUL SYLLABLE NYELT -->
+ <map code="0xb16a" name="1em"/><!-- HANGUL SYLLABLE NYELP -->
+ <map code="0xb16b" name="1em"/><!-- HANGUL SYLLABLE NYELH -->
+ <map code="0xb16c" name="1em"/><!-- HANGUL SYLLABLE NYEM -->
+ <map code="0xb16d" name="1em"/><!-- HANGUL SYLLABLE NYEB -->
+ <map code="0xb16e" name="1em"/><!-- HANGUL SYLLABLE NYEBS -->
+ <map code="0xb16f" name="1em"/><!-- HANGUL SYLLABLE NYES -->
+ <map code="0xb170" name="1em"/><!-- HANGUL SYLLABLE NYESS -->
+ <map code="0xb171" name="1em"/><!-- HANGUL SYLLABLE NYENG -->
+ <map code="0xb172" name="1em"/><!-- HANGUL SYLLABLE NYEJ -->
+ <map code="0xb173" name="1em"/><!-- HANGUL SYLLABLE NYEC -->
+ <map code="0xb174" name="1em"/><!-- HANGUL SYLLABLE NYEK -->
+ <map code="0xb175" name="1em"/><!-- HANGUL SYLLABLE NYET -->
+ <map code="0xb176" name="1em"/><!-- HANGUL SYLLABLE NYEP -->
+ <map code="0xb177" name="1em"/><!-- HANGUL SYLLABLE NYEH -->
+ <map code="0xb178" name="1em"/><!-- HANGUL SYLLABLE NO -->
+ <map code="0xb179" name="1em"/><!-- HANGUL SYLLABLE NOG -->
+ <map code="0xb17a" name="1em"/><!-- HANGUL SYLLABLE NOGG -->
+ <map code="0xb17b" name="1em"/><!-- HANGUL SYLLABLE NOGS -->
+ <map code="0xb17c" name="1em"/><!-- HANGUL SYLLABLE NON -->
+ <map code="0xb17d" name="1em"/><!-- HANGUL SYLLABLE NONJ -->
+ <map code="0xb17e" name="1em"/><!-- HANGUL SYLLABLE NONH -->
+ <map code="0xb17f" name="1em"/><!-- HANGUL SYLLABLE NOD -->
+ <map code="0xb180" name="1em"/><!-- HANGUL SYLLABLE NOL -->
+ <map code="0xb181" name="1em"/><!-- HANGUL SYLLABLE NOLG -->
+ <map code="0xb182" name="1em"/><!-- HANGUL SYLLABLE NOLM -->
+ <map code="0xb183" name="1em"/><!-- HANGUL SYLLABLE NOLB -->
+ <map code="0xb184" name="1em"/><!-- HANGUL SYLLABLE NOLS -->
+ <map code="0xb185" name="1em"/><!-- HANGUL SYLLABLE NOLT -->
+ <map code="0xb186" name="1em"/><!-- HANGUL SYLLABLE NOLP -->
+ <map code="0xb187" name="1em"/><!-- HANGUL SYLLABLE NOLH -->
+ <map code="0xb188" name="1em"/><!-- HANGUL SYLLABLE NOM -->
+ <map code="0xb189" name="1em"/><!-- HANGUL SYLLABLE NOB -->
+ <map code="0xb18a" name="1em"/><!-- HANGUL SYLLABLE NOBS -->
+ <map code="0xb18b" name="1em"/><!-- HANGUL SYLLABLE NOS -->
+ <map code="0xb18c" name="1em"/><!-- HANGUL SYLLABLE NOSS -->
+ <map code="0xb18d" name="1em"/><!-- HANGUL SYLLABLE NONG -->
+ <map code="0xb18e" name="1em"/><!-- HANGUL SYLLABLE NOJ -->
+ <map code="0xb18f" name="1em"/><!-- HANGUL SYLLABLE NOC -->
+ <map code="0xb190" name="1em"/><!-- HANGUL SYLLABLE NOK -->
+ <map code="0xb191" name="1em"/><!-- HANGUL SYLLABLE NOT -->
+ <map code="0xb192" name="1em"/><!-- HANGUL SYLLABLE NOP -->
+ <map code="0xb193" name="1em"/><!-- HANGUL SYLLABLE NOH -->
+ <map code="0xb194" name="1em"/><!-- HANGUL SYLLABLE NWA -->
+ <map code="0xb195" name="1em"/><!-- HANGUL SYLLABLE NWAG -->
+ <map code="0xb196" name="1em"/><!-- HANGUL SYLLABLE NWAGG -->
+ <map code="0xb197" name="1em"/><!-- HANGUL SYLLABLE NWAGS -->
+ <map code="0xb198" name="1em"/><!-- HANGUL SYLLABLE NWAN -->
+ <map code="0xb199" name="1em"/><!-- HANGUL SYLLABLE NWANJ -->
+ <map code="0xb19a" name="1em"/><!-- HANGUL SYLLABLE NWANH -->
+ <map code="0xb19b" name="1em"/><!-- HANGUL SYLLABLE NWAD -->
+ <map code="0xb19c" name="1em"/><!-- HANGUL SYLLABLE NWAL -->
+ <map code="0xb19d" name="1em"/><!-- HANGUL SYLLABLE NWALG -->
+ <map code="0xb19e" name="1em"/><!-- HANGUL SYLLABLE NWALM -->
+ <map code="0xb19f" name="1em"/><!-- HANGUL SYLLABLE NWALB -->
+ <map code="0xb1a0" name="1em"/><!-- HANGUL SYLLABLE NWALS -->
+ <map code="0xb1a1" name="1em"/><!-- HANGUL SYLLABLE NWALT -->
+ <map code="0xb1a2" name="1em"/><!-- HANGUL SYLLABLE NWALP -->
+ <map code="0xb1a3" name="1em"/><!-- HANGUL SYLLABLE NWALH -->
+ <map code="0xb1a4" name="1em"/><!-- HANGUL SYLLABLE NWAM -->
+ <map code="0xb1a5" name="1em"/><!-- HANGUL SYLLABLE NWAB -->
+ <map code="0xb1a6" name="1em"/><!-- HANGUL SYLLABLE NWABS -->
+ <map code="0xb1a7" name="1em"/><!-- HANGUL SYLLABLE NWAS -->
+ <map code="0xb1a8" name="1em"/><!-- HANGUL SYLLABLE NWASS -->
+ <map code="0xb1a9" name="1em"/><!-- HANGUL SYLLABLE NWANG -->
+ <map code="0xb1aa" name="1em"/><!-- HANGUL SYLLABLE NWAJ -->
+ <map code="0xb1ab" name="1em"/><!-- HANGUL SYLLABLE NWAC -->
+ <map code="0xb1ac" name="1em"/><!-- HANGUL SYLLABLE NWAK -->
+ <map code="0xb1ad" name="1em"/><!-- HANGUL SYLLABLE NWAT -->
+ <map code="0xb1ae" name="1em"/><!-- HANGUL SYLLABLE NWAP -->
+ <map code="0xb1af" name="1em"/><!-- HANGUL SYLLABLE NWAH -->
+ <map code="0xb1b0" name="1em"/><!-- HANGUL SYLLABLE NWAE -->
+ <map code="0xb1b1" name="1em"/><!-- HANGUL SYLLABLE NWAEG -->
+ <map code="0xb1b2" name="1em"/><!-- HANGUL SYLLABLE NWAEGG -->
+ <map code="0xb1b3" name="1em"/><!-- HANGUL SYLLABLE NWAEGS -->
+ <map code="0xb1b4" name="1em"/><!-- HANGUL SYLLABLE NWAEN -->
+ <map code="0xb1b5" name="1em"/><!-- HANGUL SYLLABLE NWAENJ -->
+ <map code="0xb1b6" name="1em"/><!-- HANGUL SYLLABLE NWAENH -->
+ <map code="0xb1b7" name="1em"/><!-- HANGUL SYLLABLE NWAED -->
+ <map code="0xb1b8" name="1em"/><!-- HANGUL SYLLABLE NWAEL -->
+ <map code="0xb1b9" name="1em"/><!-- HANGUL SYLLABLE NWAELG -->
+ <map code="0xb1ba" name="1em"/><!-- HANGUL SYLLABLE NWAELM -->
+ <map code="0xb1bb" name="1em"/><!-- HANGUL SYLLABLE NWAELB -->
+ <map code="0xb1bc" name="1em"/><!-- HANGUL SYLLABLE NWAELS -->
+ <map code="0xb1bd" name="1em"/><!-- HANGUL SYLLABLE NWAELT -->
+ <map code="0xb1be" name="1em"/><!-- HANGUL SYLLABLE NWAELP -->
+ <map code="0xb1bf" name="1em"/><!-- HANGUL SYLLABLE NWAELH -->
+ <map code="0xb1c0" name="1em"/><!-- HANGUL SYLLABLE NWAEM -->
+ <map code="0xb1c1" name="1em"/><!-- HANGUL SYLLABLE NWAEB -->
+ <map code="0xb1c2" name="1em"/><!-- HANGUL SYLLABLE NWAEBS -->
+ <map code="0xb1c3" name="1em"/><!-- HANGUL SYLLABLE NWAES -->
+ <map code="0xb1c4" name="1em"/><!-- HANGUL SYLLABLE NWAESS -->
+ <map code="0xb1c5" name="1em"/><!-- HANGUL SYLLABLE NWAENG -->
+ <map code="0xb1c6" name="1em"/><!-- HANGUL SYLLABLE NWAEJ -->
+ <map code="0xb1c7" name="1em"/><!-- HANGUL SYLLABLE NWAEC -->
+ <map code="0xb1c8" name="1em"/><!-- HANGUL SYLLABLE NWAEK -->
+ <map code="0xb1c9" name="1em"/><!-- HANGUL SYLLABLE NWAET -->
+ <map code="0xb1ca" name="1em"/><!-- HANGUL SYLLABLE NWAEP -->
+ <map code="0xb1cb" name="1em"/><!-- HANGUL SYLLABLE NWAEH -->
+ <map code="0xb1cc" name="1em"/><!-- HANGUL SYLLABLE NOE -->
+ <map code="0xb1cd" name="1em"/><!-- HANGUL SYLLABLE NOEG -->
+ <map code="0xb1ce" name="1em"/><!-- HANGUL SYLLABLE NOEGG -->
+ <map code="0xb1cf" name="1em"/><!-- HANGUL SYLLABLE NOEGS -->
+ <map code="0xb1d0" name="1em"/><!-- HANGUL SYLLABLE NOEN -->
+ <map code="0xb1d1" name="1em"/><!-- HANGUL SYLLABLE NOENJ -->
+ <map code="0xb1d2" name="1em"/><!-- HANGUL SYLLABLE NOENH -->
+ <map code="0xb1d3" name="1em"/><!-- HANGUL SYLLABLE NOED -->
+ <map code="0xb1d4" name="1em"/><!-- HANGUL SYLLABLE NOEL -->
+ <map code="0xb1d5" name="1em"/><!-- HANGUL SYLLABLE NOELG -->
+ <map code="0xb1d6" name="1em"/><!-- HANGUL SYLLABLE NOELM -->
+ <map code="0xb1d7" name="1em"/><!-- HANGUL SYLLABLE NOELB -->
+ <map code="0xb1d8" name="1em"/><!-- HANGUL SYLLABLE NOELS -->
+ <map code="0xb1d9" name="1em"/><!-- HANGUL SYLLABLE NOELT -->
+ <map code="0xb1da" name="1em"/><!-- HANGUL SYLLABLE NOELP -->
+ <map code="0xb1db" name="1em"/><!-- HANGUL SYLLABLE NOELH -->
+ <map code="0xb1dc" name="1em"/><!-- HANGUL SYLLABLE NOEM -->
+ <map code="0xb1dd" name="1em"/><!-- HANGUL SYLLABLE NOEB -->
+ <map code="0xb1de" name="1em"/><!-- HANGUL SYLLABLE NOEBS -->
+ <map code="0xb1df" name="1em"/><!-- HANGUL SYLLABLE NOES -->
+ <map code="0xb1e0" name="1em"/><!-- HANGUL SYLLABLE NOESS -->
+ <map code="0xb1e1" name="1em"/><!-- HANGUL SYLLABLE NOENG -->
+ <map code="0xb1e2" name="1em"/><!-- HANGUL SYLLABLE NOEJ -->
+ <map code="0xb1e3" name="1em"/><!-- HANGUL SYLLABLE NOEC -->
+ <map code="0xb1e4" name="1em"/><!-- HANGUL SYLLABLE NOEK -->
+ <map code="0xb1e5" name="1em"/><!-- HANGUL SYLLABLE NOET -->
+ <map code="0xb1e6" name="1em"/><!-- HANGUL SYLLABLE NOEP -->
+ <map code="0xb1e7" name="1em"/><!-- HANGUL SYLLABLE NOEH -->
+ <map code="0xb1e8" name="1em"/><!-- HANGUL SYLLABLE NYO -->
+ <map code="0xb1e9" name="1em"/><!-- HANGUL SYLLABLE NYOG -->
+ <map code="0xb1ea" name="1em"/><!-- HANGUL SYLLABLE NYOGG -->
+ <map code="0xb1eb" name="1em"/><!-- HANGUL SYLLABLE NYOGS -->
+ <map code="0xb1ec" name="1em"/><!-- HANGUL SYLLABLE NYON -->
+ <map code="0xb1ed" name="1em"/><!-- HANGUL SYLLABLE NYONJ -->
+ <map code="0xb1ee" name="1em"/><!-- HANGUL SYLLABLE NYONH -->
+ <map code="0xb1ef" name="1em"/><!-- HANGUL SYLLABLE NYOD -->
+ <map code="0xb1f0" name="1em"/><!-- HANGUL SYLLABLE NYOL -->
+ <map code="0xb1f1" name="1em"/><!-- HANGUL SYLLABLE NYOLG -->
+ <map code="0xb1f2" name="1em"/><!-- HANGUL SYLLABLE NYOLM -->
+ <map code="0xb1f3" name="1em"/><!-- HANGUL SYLLABLE NYOLB -->
+ <map code="0xb1f4" name="1em"/><!-- HANGUL SYLLABLE NYOLS -->
+ <map code="0xb1f5" name="1em"/><!-- HANGUL SYLLABLE NYOLT -->
+ <map code="0xb1f6" name="1em"/><!-- HANGUL SYLLABLE NYOLP -->
+ <map code="0xb1f7" name="1em"/><!-- HANGUL SYLLABLE NYOLH -->
+ <map code="0xb1f8" name="1em"/><!-- HANGUL SYLLABLE NYOM -->
+ <map code="0xb1f9" name="1em"/><!-- HANGUL SYLLABLE NYOB -->
+ <map code="0xb1fa" name="1em"/><!-- HANGUL SYLLABLE NYOBS -->
+ <map code="0xb1fb" name="1em"/><!-- HANGUL SYLLABLE NYOS -->
+ <map code="0xb1fc" name="1em"/><!-- HANGUL SYLLABLE NYOSS -->
+ <map code="0xb1fd" name="1em"/><!-- HANGUL SYLLABLE NYONG -->
+ <map code="0xb1fe" name="1em"/><!-- HANGUL SYLLABLE NYOJ -->
+ <map code="0xb1ff" name="1em"/><!-- HANGUL SYLLABLE NYOC -->
+ <map code="0xb200" name="1em"/><!-- HANGUL SYLLABLE NYOK -->
+ <map code="0xb201" name="1em"/><!-- HANGUL SYLLABLE NYOT -->
+ <map code="0xb202" name="1em"/><!-- HANGUL SYLLABLE NYOP -->
+ <map code="0xb203" name="1em"/><!-- HANGUL SYLLABLE NYOH -->
+ <map code="0xb204" name="1em"/><!-- HANGUL SYLLABLE NU -->
+ <map code="0xb205" name="1em"/><!-- HANGUL SYLLABLE NUG -->
+ <map code="0xb206" name="1em"/><!-- HANGUL SYLLABLE NUGG -->
+ <map code="0xb207" name="1em"/><!-- HANGUL SYLLABLE NUGS -->
+ <map code="0xb208" name="1em"/><!-- HANGUL SYLLABLE NUN -->
+ <map code="0xb209" name="1em"/><!-- HANGUL SYLLABLE NUNJ -->
+ <map code="0xb20a" name="1em"/><!-- HANGUL SYLLABLE NUNH -->
+ <map code="0xb20b" name="1em"/><!-- HANGUL SYLLABLE NUD -->
+ <map code="0xb20c" name="1em"/><!-- HANGUL SYLLABLE NUL -->
+ <map code="0xb20d" name="1em"/><!-- HANGUL SYLLABLE NULG -->
+ <map code="0xb20e" name="1em"/><!-- HANGUL SYLLABLE NULM -->
+ <map code="0xb20f" name="1em"/><!-- HANGUL SYLLABLE NULB -->
+ <map code="0xb210" name="1em"/><!-- HANGUL SYLLABLE NULS -->
+ <map code="0xb211" name="1em"/><!-- HANGUL SYLLABLE NULT -->
+ <map code="0xb212" name="1em"/><!-- HANGUL SYLLABLE NULP -->
+ <map code="0xb213" name="1em"/><!-- HANGUL SYLLABLE NULH -->
+ <map code="0xb214" name="1em"/><!-- HANGUL SYLLABLE NUM -->
+ <map code="0xb215" name="1em"/><!-- HANGUL SYLLABLE NUB -->
+ <map code="0xb216" name="1em"/><!-- HANGUL SYLLABLE NUBS -->
+ <map code="0xb217" name="1em"/><!-- HANGUL SYLLABLE NUS -->
+ <map code="0xb218" name="1em"/><!-- HANGUL SYLLABLE NUSS -->
+ <map code="0xb219" name="1em"/><!-- HANGUL SYLLABLE NUNG -->
+ <map code="0xb21a" name="1em"/><!-- HANGUL SYLLABLE NUJ -->
+ <map code="0xb21b" name="1em"/><!-- HANGUL SYLLABLE NUC -->
+ <map code="0xb21c" name="1em"/><!-- HANGUL SYLLABLE NUK -->
+ <map code="0xb21d" name="1em"/><!-- HANGUL SYLLABLE NUT -->
+ <map code="0xb21e" name="1em"/><!-- HANGUL SYLLABLE NUP -->
+ <map code="0xb21f" name="1em"/><!-- HANGUL SYLLABLE NUH -->
+ <map code="0xb220" name="1em"/><!-- HANGUL SYLLABLE NWEO -->
+ <map code="0xb221" name="1em"/><!-- HANGUL SYLLABLE NWEOG -->
+ <map code="0xb222" name="1em"/><!-- HANGUL SYLLABLE NWEOGG -->
+ <map code="0xb223" name="1em"/><!-- HANGUL SYLLABLE NWEOGS -->
+ <map code="0xb224" name="1em"/><!-- HANGUL SYLLABLE NWEON -->
+ <map code="0xb225" name="1em"/><!-- HANGUL SYLLABLE NWEONJ -->
+ <map code="0xb226" name="1em"/><!-- HANGUL SYLLABLE NWEONH -->
+ <map code="0xb227" name="1em"/><!-- HANGUL SYLLABLE NWEOD -->
+ <map code="0xb228" name="1em"/><!-- HANGUL SYLLABLE NWEOL -->
+ <map code="0xb229" name="1em"/><!-- HANGUL SYLLABLE NWEOLG -->
+ <map code="0xb22a" name="1em"/><!-- HANGUL SYLLABLE NWEOLM -->
+ <map code="0xb22b" name="1em"/><!-- HANGUL SYLLABLE NWEOLB -->
+ <map code="0xb22c" name="1em"/><!-- HANGUL SYLLABLE NWEOLS -->
+ <map code="0xb22d" name="1em"/><!-- HANGUL SYLLABLE NWEOLT -->
+ <map code="0xb22e" name="1em"/><!-- HANGUL SYLLABLE NWEOLP -->
+ <map code="0xb22f" name="1em"/><!-- HANGUL SYLLABLE NWEOLH -->
+ <map code="0xb230" name="1em"/><!-- HANGUL SYLLABLE NWEOM -->
+ <map code="0xb231" name="1em"/><!-- HANGUL SYLLABLE NWEOB -->
+ <map code="0xb232" name="1em"/><!-- HANGUL SYLLABLE NWEOBS -->
+ <map code="0xb233" name="1em"/><!-- HANGUL SYLLABLE NWEOS -->
+ <map code="0xb234" name="1em"/><!-- HANGUL SYLLABLE NWEOSS -->
+ <map code="0xb235" name="1em"/><!-- HANGUL SYLLABLE NWEONG -->
+ <map code="0xb236" name="1em"/><!-- HANGUL SYLLABLE NWEOJ -->
+ <map code="0xb237" name="1em"/><!-- HANGUL SYLLABLE NWEOC -->
+ <map code="0xb238" name="1em"/><!-- HANGUL SYLLABLE NWEOK -->
+ <map code="0xb239" name="1em"/><!-- HANGUL SYLLABLE NWEOT -->
+ <map code="0xb23a" name="1em"/><!-- HANGUL SYLLABLE NWEOP -->
+ <map code="0xb23b" name="1em"/><!-- HANGUL SYLLABLE NWEOH -->
+ <map code="0xb23c" name="1em"/><!-- HANGUL SYLLABLE NWE -->
+ <map code="0xb23d" name="1em"/><!-- HANGUL SYLLABLE NWEG -->
+ <map code="0xb23e" name="1em"/><!-- HANGUL SYLLABLE NWEGG -->
+ <map code="0xb23f" name="1em"/><!-- HANGUL SYLLABLE NWEGS -->
+ <map code="0xb240" name="1em"/><!-- HANGUL SYLLABLE NWEN -->
+ <map code="0xb241" name="1em"/><!-- HANGUL SYLLABLE NWENJ -->
+ <map code="0xb242" name="1em"/><!-- HANGUL SYLLABLE NWENH -->
+ <map code="0xb243" name="1em"/><!-- HANGUL SYLLABLE NWED -->
+ <map code="0xb244" name="1em"/><!-- HANGUL SYLLABLE NWEL -->
+ <map code="0xb245" name="1em"/><!-- HANGUL SYLLABLE NWELG -->
+ <map code="0xb246" name="1em"/><!-- HANGUL SYLLABLE NWELM -->
+ <map code="0xb247" name="1em"/><!-- HANGUL SYLLABLE NWELB -->
+ <map code="0xb248" name="1em"/><!-- HANGUL SYLLABLE NWELS -->
+ <map code="0xb249" name="1em"/><!-- HANGUL SYLLABLE NWELT -->
+ <map code="0xb24a" name="1em"/><!-- HANGUL SYLLABLE NWELP -->
+ <map code="0xb24b" name="1em"/><!-- HANGUL SYLLABLE NWELH -->
+ <map code="0xb24c" name="1em"/><!-- HANGUL SYLLABLE NWEM -->
+ <map code="0xb24d" name="1em"/><!-- HANGUL SYLLABLE NWEB -->
+ <map code="0xb24e" name="1em"/><!-- HANGUL SYLLABLE NWEBS -->
+ <map code="0xb24f" name="1em"/><!-- HANGUL SYLLABLE NWES -->
+ <map code="0xb250" name="1em"/><!-- HANGUL SYLLABLE NWESS -->
+ <map code="0xb251" name="1em"/><!-- HANGUL SYLLABLE NWENG -->
+ <map code="0xb252" name="1em"/><!-- HANGUL SYLLABLE NWEJ -->
+ <map code="0xb253" name="1em"/><!-- HANGUL SYLLABLE NWEC -->
+ <map code="0xb254" name="1em"/><!-- HANGUL SYLLABLE NWEK -->
+ <map code="0xb255" name="1em"/><!-- HANGUL SYLLABLE NWET -->
+ <map code="0xb256" name="1em"/><!-- HANGUL SYLLABLE NWEP -->
+ <map code="0xb257" name="1em"/><!-- HANGUL SYLLABLE NWEH -->
+ <map code="0xb258" name="1em"/><!-- HANGUL SYLLABLE NWI -->
+ <map code="0xb259" name="1em"/><!-- HANGUL SYLLABLE NWIG -->
+ <map code="0xb25a" name="1em"/><!-- HANGUL SYLLABLE NWIGG -->
+ <map code="0xb25b" name="1em"/><!-- HANGUL SYLLABLE NWIGS -->
+ <map code="0xb25c" name="1em"/><!-- HANGUL SYLLABLE NWIN -->
+ <map code="0xb25d" name="1em"/><!-- HANGUL SYLLABLE NWINJ -->
+ <map code="0xb25e" name="1em"/><!-- HANGUL SYLLABLE NWINH -->
+ <map code="0xb25f" name="1em"/><!-- HANGUL SYLLABLE NWID -->
+ <map code="0xb260" name="1em"/><!-- HANGUL SYLLABLE NWIL -->
+ <map code="0xb261" name="1em"/><!-- HANGUL SYLLABLE NWILG -->
+ <map code="0xb262" name="1em"/><!-- HANGUL SYLLABLE NWILM -->
+ <map code="0xb263" name="1em"/><!-- HANGUL SYLLABLE NWILB -->
+ <map code="0xb264" name="1em"/><!-- HANGUL SYLLABLE NWILS -->
+ <map code="0xb265" name="1em"/><!-- HANGUL SYLLABLE NWILT -->
+ <map code="0xb266" name="1em"/><!-- HANGUL SYLLABLE NWILP -->
+ <map code="0xb267" name="1em"/><!-- HANGUL SYLLABLE NWILH -->
+ <map code="0xb268" name="1em"/><!-- HANGUL SYLLABLE NWIM -->
+ <map code="0xb269" name="1em"/><!-- HANGUL SYLLABLE NWIB -->
+ <map code="0xb26a" name="1em"/><!-- HANGUL SYLLABLE NWIBS -->
+ <map code="0xb26b" name="1em"/><!-- HANGUL SYLLABLE NWIS -->
+ <map code="0xb26c" name="1em"/><!-- HANGUL SYLLABLE NWISS -->
+ <map code="0xb26d" name="1em"/><!-- HANGUL SYLLABLE NWING -->
+ <map code="0xb26e" name="1em"/><!-- HANGUL SYLLABLE NWIJ -->
+ <map code="0xb26f" name="1em"/><!-- HANGUL SYLLABLE NWIC -->
+ <map code="0xb270" name="1em"/><!-- HANGUL SYLLABLE NWIK -->
+ <map code="0xb271" name="1em"/><!-- HANGUL SYLLABLE NWIT -->
+ <map code="0xb272" name="1em"/><!-- HANGUL SYLLABLE NWIP -->
+ <map code="0xb273" name="1em"/><!-- HANGUL SYLLABLE NWIH -->
+ <map code="0xb274" name="1em"/><!-- HANGUL SYLLABLE NYU -->
+ <map code="0xb275" name="1em"/><!-- HANGUL SYLLABLE NYUG -->
+ <map code="0xb276" name="1em"/><!-- HANGUL SYLLABLE NYUGG -->
+ <map code="0xb277" name="1em"/><!-- HANGUL SYLLABLE NYUGS -->
+ <map code="0xb278" name="1em"/><!-- HANGUL SYLLABLE NYUN -->
+ <map code="0xb279" name="1em"/><!-- HANGUL SYLLABLE NYUNJ -->
+ <map code="0xb27a" name="1em"/><!-- HANGUL SYLLABLE NYUNH -->
+ <map code="0xb27b" name="1em"/><!-- HANGUL SYLLABLE NYUD -->
+ <map code="0xb27c" name="1em"/><!-- HANGUL SYLLABLE NYUL -->
+ <map code="0xb27d" name="1em"/><!-- HANGUL SYLLABLE NYULG -->
+ <map code="0xb27e" name="1em"/><!-- HANGUL SYLLABLE NYULM -->
+ <map code="0xb27f" name="1em"/><!-- HANGUL SYLLABLE NYULB -->
+ <map code="0xb280" name="1em"/><!-- HANGUL SYLLABLE NYULS -->
+ <map code="0xb281" name="1em"/><!-- HANGUL SYLLABLE NYULT -->
+ <map code="0xb282" name="1em"/><!-- HANGUL SYLLABLE NYULP -->
+ <map code="0xb283" name="1em"/><!-- HANGUL SYLLABLE NYULH -->
+ <map code="0xb284" name="1em"/><!-- HANGUL SYLLABLE NYUM -->
+ <map code="0xb285" name="1em"/><!-- HANGUL SYLLABLE NYUB -->
+ <map code="0xb286" name="1em"/><!-- HANGUL SYLLABLE NYUBS -->
+ <map code="0xb287" name="1em"/><!-- HANGUL SYLLABLE NYUS -->
+ <map code="0xb288" name="1em"/><!-- HANGUL SYLLABLE NYUSS -->
+ <map code="0xb289" name="1em"/><!-- HANGUL SYLLABLE NYUNG -->
+ <map code="0xb28a" name="1em"/><!-- HANGUL SYLLABLE NYUJ -->
+ <map code="0xb28b" name="1em"/><!-- HANGUL SYLLABLE NYUC -->
+ <map code="0xb28c" name="1em"/><!-- HANGUL SYLLABLE NYUK -->
+ <map code="0xb28d" name="1em"/><!-- HANGUL SYLLABLE NYUT -->
+ <map code="0xb28e" name="1em"/><!-- HANGUL SYLLABLE NYUP -->
+ <map code="0xb28f" name="1em"/><!-- HANGUL SYLLABLE NYUH -->
+ <map code="0xb290" name="1em"/><!-- HANGUL SYLLABLE NEU -->
+ <map code="0xb291" name="1em"/><!-- HANGUL SYLLABLE NEUG -->
+ <map code="0xb292" name="1em"/><!-- HANGUL SYLLABLE NEUGG -->
+ <map code="0xb293" name="1em"/><!-- HANGUL SYLLABLE NEUGS -->
+ <map code="0xb294" name="1em"/><!-- HANGUL SYLLABLE NEUN -->
+ <map code="0xb295" name="1em"/><!-- HANGUL SYLLABLE NEUNJ -->
+ <map code="0xb296" name="1em"/><!-- HANGUL SYLLABLE NEUNH -->
+ <map code="0xb297" name="1em"/><!-- HANGUL SYLLABLE NEUD -->
+ <map code="0xb298" name="1em"/><!-- HANGUL SYLLABLE NEUL -->
+ <map code="0xb299" name="1em"/><!-- HANGUL SYLLABLE NEULG -->
+ <map code="0xb29a" name="1em"/><!-- HANGUL SYLLABLE NEULM -->
+ <map code="0xb29b" name="1em"/><!-- HANGUL SYLLABLE NEULB -->
+ <map code="0xb29c" name="1em"/><!-- HANGUL SYLLABLE NEULS -->
+ <map code="0xb29d" name="1em"/><!-- HANGUL SYLLABLE NEULT -->
+ <map code="0xb29e" name="1em"/><!-- HANGUL SYLLABLE NEULP -->
+ <map code="0xb29f" name="1em"/><!-- HANGUL SYLLABLE NEULH -->
+ <map code="0xb2a0" name="1em"/><!-- HANGUL SYLLABLE NEUM -->
+ <map code="0xb2a1" name="1em"/><!-- HANGUL SYLLABLE NEUB -->
+ <map code="0xb2a2" name="1em"/><!-- HANGUL SYLLABLE NEUBS -->
+ <map code="0xb2a3" name="1em"/><!-- HANGUL SYLLABLE NEUS -->
+ <map code="0xb2a4" name="1em"/><!-- HANGUL SYLLABLE NEUSS -->
+ <map code="0xb2a5" name="1em"/><!-- HANGUL SYLLABLE NEUNG -->
+ <map code="0xb2a6" name="1em"/><!-- HANGUL SYLLABLE NEUJ -->
+ <map code="0xb2a7" name="1em"/><!-- HANGUL SYLLABLE NEUC -->
+ <map code="0xb2a8" name="1em"/><!-- HANGUL SYLLABLE NEUK -->
+ <map code="0xb2a9" name="1em"/><!-- HANGUL SYLLABLE NEUT -->
+ <map code="0xb2aa" name="1em"/><!-- HANGUL SYLLABLE NEUP -->
+ <map code="0xb2ab" name="1em"/><!-- HANGUL SYLLABLE NEUH -->
+ <map code="0xb2ac" name="1em"/><!-- HANGUL SYLLABLE NYI -->
+ <map code="0xb2ad" name="1em"/><!-- HANGUL SYLLABLE NYIG -->
+ <map code="0xb2ae" name="1em"/><!-- HANGUL SYLLABLE NYIGG -->
+ <map code="0xb2af" name="1em"/><!-- HANGUL SYLLABLE NYIGS -->
+ <map code="0xb2b0" name="1em"/><!-- HANGUL SYLLABLE NYIN -->
+ <map code="0xb2b1" name="1em"/><!-- HANGUL SYLLABLE NYINJ -->
+ <map code="0xb2b2" name="1em"/><!-- HANGUL SYLLABLE NYINH -->
+ <map code="0xb2b3" name="1em"/><!-- HANGUL SYLLABLE NYID -->
+ <map code="0xb2b4" name="1em"/><!-- HANGUL SYLLABLE NYIL -->
+ <map code="0xb2b5" name="1em"/><!-- HANGUL SYLLABLE NYILG -->
+ <map code="0xb2b6" name="1em"/><!-- HANGUL SYLLABLE NYILM -->
+ <map code="0xb2b7" name="1em"/><!-- HANGUL SYLLABLE NYILB -->
+ <map code="0xb2b8" name="1em"/><!-- HANGUL SYLLABLE NYILS -->
+ <map code="0xb2b9" name="1em"/><!-- HANGUL SYLLABLE NYILT -->
+ <map code="0xb2ba" name="1em"/><!-- HANGUL SYLLABLE NYILP -->
+ <map code="0xb2bb" name="1em"/><!-- HANGUL SYLLABLE NYILH -->
+ <map code="0xb2bc" name="1em"/><!-- HANGUL SYLLABLE NYIM -->
+ <map code="0xb2bd" name="1em"/><!-- HANGUL SYLLABLE NYIB -->
+ <map code="0xb2be" name="1em"/><!-- HANGUL SYLLABLE NYIBS -->
+ <map code="0xb2bf" name="1em"/><!-- HANGUL SYLLABLE NYIS -->
+ <map code="0xb2c0" name="1em"/><!-- HANGUL SYLLABLE NYISS -->
+ <map code="0xb2c1" name="1em"/><!-- HANGUL SYLLABLE NYING -->
+ <map code="0xb2c2" name="1em"/><!-- HANGUL SYLLABLE NYIJ -->
+ <map code="0xb2c3" name="1em"/><!-- HANGUL SYLLABLE NYIC -->
+ <map code="0xb2c4" name="1em"/><!-- HANGUL SYLLABLE NYIK -->
+ <map code="0xb2c5" name="1em"/><!-- HANGUL SYLLABLE NYIT -->
+ <map code="0xb2c6" name="1em"/><!-- HANGUL SYLLABLE NYIP -->
+ <map code="0xb2c7" name="1em"/><!-- HANGUL SYLLABLE NYIH -->
+ <map code="0xb2c8" name="1em"/><!-- HANGUL SYLLABLE NI -->
+ <map code="0xb2c9" name="1em"/><!-- HANGUL SYLLABLE NIG -->
+ <map code="0xb2ca" name="1em"/><!-- HANGUL SYLLABLE NIGG -->
+ <map code="0xb2cb" name="1em"/><!-- HANGUL SYLLABLE NIGS -->
+ <map code="0xb2cc" name="1em"/><!-- HANGUL SYLLABLE NIN -->
+ <map code="0xb2cd" name="1em"/><!-- HANGUL SYLLABLE NINJ -->
+ <map code="0xb2ce" name="1em"/><!-- HANGUL SYLLABLE NINH -->
+ <map code="0xb2cf" name="1em"/><!-- HANGUL SYLLABLE NID -->
+ <map code="0xb2d0" name="1em"/><!-- HANGUL SYLLABLE NIL -->
+ <map code="0xb2d1" name="1em"/><!-- HANGUL SYLLABLE NILG -->
+ <map code="0xb2d2" name="1em"/><!-- HANGUL SYLLABLE NILM -->
+ <map code="0xb2d3" name="1em"/><!-- HANGUL SYLLABLE NILB -->
+ <map code="0xb2d4" name="1em"/><!-- HANGUL SYLLABLE NILS -->
+ <map code="0xb2d5" name="1em"/><!-- HANGUL SYLLABLE NILT -->
+ <map code="0xb2d6" name="1em"/><!-- HANGUL SYLLABLE NILP -->
+ <map code="0xb2d7" name="1em"/><!-- HANGUL SYLLABLE NILH -->
+ <map code="0xb2d8" name="1em"/><!-- HANGUL SYLLABLE NIM -->
+ <map code="0xb2d9" name="1em"/><!-- HANGUL SYLLABLE NIB -->
+ <map code="0xb2da" name="1em"/><!-- HANGUL SYLLABLE NIBS -->
+ <map code="0xb2db" name="1em"/><!-- HANGUL SYLLABLE NIS -->
+ <map code="0xb2dc" name="1em"/><!-- HANGUL SYLLABLE NISS -->
+ <map code="0xb2dd" name="1em"/><!-- HANGUL SYLLABLE NING -->
+ <map code="0xb2de" name="1em"/><!-- HANGUL SYLLABLE NIJ -->
+ <map code="0xb2df" name="1em"/><!-- HANGUL SYLLABLE NIC -->
+ <map code="0xb2e0" name="1em"/><!-- HANGUL SYLLABLE NIK -->
+ <map code="0xb2e1" name="1em"/><!-- HANGUL SYLLABLE NIT -->
+ <map code="0xb2e2" name="1em"/><!-- HANGUL SYLLABLE NIP -->
+ <map code="0xb2e3" name="1em"/><!-- HANGUL SYLLABLE NIH -->
+ <map code="0xb2e4" name="1em"/><!-- HANGUL SYLLABLE DA -->
+ <map code="0xb2e5" name="1em"/><!-- HANGUL SYLLABLE DAG -->
+ <map code="0xb2e6" name="1em"/><!-- HANGUL SYLLABLE DAGG -->
+ <map code="0xb2e7" name="1em"/><!-- HANGUL SYLLABLE DAGS -->
+ <map code="0xb2e8" name="1em"/><!-- HANGUL SYLLABLE DAN -->
+ <map code="0xb2e9" name="1em"/><!-- HANGUL SYLLABLE DANJ -->
+ <map code="0xb2ea" name="1em"/><!-- HANGUL SYLLABLE DANH -->
+ <map code="0xb2eb" name="1em"/><!-- HANGUL SYLLABLE DAD -->
+ <map code="0xb2ec" name="1em"/><!-- HANGUL SYLLABLE DAL -->
+ <map code="0xb2ed" name="1em"/><!-- HANGUL SYLLABLE DALG -->
+ <map code="0xb2ee" name="1em"/><!-- HANGUL SYLLABLE DALM -->
+ <map code="0xb2ef" name="1em"/><!-- HANGUL SYLLABLE DALB -->
+ <map code="0xb2f0" name="1em"/><!-- HANGUL SYLLABLE DALS -->
+ <map code="0xb2f1" name="1em"/><!-- HANGUL SYLLABLE DALT -->
+ <map code="0xb2f2" name="1em"/><!-- HANGUL SYLLABLE DALP -->
+ <map code="0xb2f3" name="1em"/><!-- HANGUL SYLLABLE DALH -->
+ <map code="0xb2f4" name="1em"/><!-- HANGUL SYLLABLE DAM -->
+ <map code="0xb2f5" name="1em"/><!-- HANGUL SYLLABLE DAB -->
+ <map code="0xb2f6" name="1em"/><!-- HANGUL SYLLABLE DABS -->
+ <map code="0xb2f7" name="1em"/><!-- HANGUL SYLLABLE DAS -->
+ <map code="0xb2f8" name="1em"/><!-- HANGUL SYLLABLE DASS -->
+ <map code="0xb2f9" name="1em"/><!-- HANGUL SYLLABLE DANG -->
+ <map code="0xb2fa" name="1em"/><!-- HANGUL SYLLABLE DAJ -->
+ <map code="0xb2fb" name="1em"/><!-- HANGUL SYLLABLE DAC -->
+ <map code="0xb2fc" name="1em"/><!-- HANGUL SYLLABLE DAK -->
+ <map code="0xb2fd" name="1em"/><!-- HANGUL SYLLABLE DAT -->
+ <map code="0xb2fe" name="1em"/><!-- HANGUL SYLLABLE DAP -->
+ <map code="0xb2ff" name="1em"/><!-- HANGUL SYLLABLE DAH -->
+ <map code="0xb300" name="1em"/><!-- HANGUL SYLLABLE DAE -->
+ <map code="0xb301" name="1em"/><!-- HANGUL SYLLABLE DAEG -->
+ <map code="0xb302" name="1em"/><!-- HANGUL SYLLABLE DAEGG -->
+ <map code="0xb303" name="1em"/><!-- HANGUL SYLLABLE DAEGS -->
+ <map code="0xb304" name="1em"/><!-- HANGUL SYLLABLE DAEN -->
+ <map code="0xb305" name="1em"/><!-- HANGUL SYLLABLE DAENJ -->
+ <map code="0xb306" name="1em"/><!-- HANGUL SYLLABLE DAENH -->
+ <map code="0xb307" name="1em"/><!-- HANGUL SYLLABLE DAED -->
+ <map code="0xb308" name="1em"/><!-- HANGUL SYLLABLE DAEL -->
+ <map code="0xb309" name="1em"/><!-- HANGUL SYLLABLE DAELG -->
+ <map code="0xb30a" name="1em"/><!-- HANGUL SYLLABLE DAELM -->
+ <map code="0xb30b" name="1em"/><!-- HANGUL SYLLABLE DAELB -->
+ <map code="0xb30c" name="1em"/><!-- HANGUL SYLLABLE DAELS -->
+ <map code="0xb30d" name="1em"/><!-- HANGUL SYLLABLE DAELT -->
+ <map code="0xb30e" name="1em"/><!-- HANGUL SYLLABLE DAELP -->
+ <map code="0xb30f" name="1em"/><!-- HANGUL SYLLABLE DAELH -->
+ <map code="0xb310" name="1em"/><!-- HANGUL SYLLABLE DAEM -->
+ <map code="0xb311" name="1em"/><!-- HANGUL SYLLABLE DAEB -->
+ <map code="0xb312" name="1em"/><!-- HANGUL SYLLABLE DAEBS -->
+ <map code="0xb313" name="1em"/><!-- HANGUL SYLLABLE DAES -->
+ <map code="0xb314" name="1em"/><!-- HANGUL SYLLABLE DAESS -->
+ <map code="0xb315" name="1em"/><!-- HANGUL SYLLABLE DAENG -->
+ <map code="0xb316" name="1em"/><!-- HANGUL SYLLABLE DAEJ -->
+ <map code="0xb317" name="1em"/><!-- HANGUL SYLLABLE DAEC -->
+ <map code="0xb318" name="1em"/><!-- HANGUL SYLLABLE DAEK -->
+ <map code="0xb319" name="1em"/><!-- HANGUL SYLLABLE DAET -->
+ <map code="0xb31a" name="1em"/><!-- HANGUL SYLLABLE DAEP -->
+ <map code="0xb31b" name="1em"/><!-- HANGUL SYLLABLE DAEH -->
+ <map code="0xb31c" name="1em"/><!-- HANGUL SYLLABLE DYA -->
+ <map code="0xb31d" name="1em"/><!-- HANGUL SYLLABLE DYAG -->
+ <map code="0xb31e" name="1em"/><!-- HANGUL SYLLABLE DYAGG -->
+ <map code="0xb31f" name="1em"/><!-- HANGUL SYLLABLE DYAGS -->
+ <map code="0xb320" name="1em"/><!-- HANGUL SYLLABLE DYAN -->
+ <map code="0xb321" name="1em"/><!-- HANGUL SYLLABLE DYANJ -->
+ <map code="0xb322" name="1em"/><!-- HANGUL SYLLABLE DYANH -->
+ <map code="0xb323" name="1em"/><!-- HANGUL SYLLABLE DYAD -->
+ <map code="0xb324" name="1em"/><!-- HANGUL SYLLABLE DYAL -->
+ <map code="0xb325" name="1em"/><!-- HANGUL SYLLABLE DYALG -->
+ <map code="0xb326" name="1em"/><!-- HANGUL SYLLABLE DYALM -->
+ <map code="0xb327" name="1em"/><!-- HANGUL SYLLABLE DYALB -->
+ <map code="0xb328" name="1em"/><!-- HANGUL SYLLABLE DYALS -->
+ <map code="0xb329" name="1em"/><!-- HANGUL SYLLABLE DYALT -->
+ <map code="0xb32a" name="1em"/><!-- HANGUL SYLLABLE DYALP -->
+ <map code="0xb32b" name="1em"/><!-- HANGUL SYLLABLE DYALH -->
+ <map code="0xb32c" name="1em"/><!-- HANGUL SYLLABLE DYAM -->
+ <map code="0xb32d" name="1em"/><!-- HANGUL SYLLABLE DYAB -->
+ <map code="0xb32e" name="1em"/><!-- HANGUL SYLLABLE DYABS -->
+ <map code="0xb32f" name="1em"/><!-- HANGUL SYLLABLE DYAS -->
+ <map code="0xb330" name="1em"/><!-- HANGUL SYLLABLE DYASS -->
+ <map code="0xb331" name="1em"/><!-- HANGUL SYLLABLE DYANG -->
+ <map code="0xb332" name="1em"/><!-- HANGUL SYLLABLE DYAJ -->
+ <map code="0xb333" name="1em"/><!-- HANGUL SYLLABLE DYAC -->
+ <map code="0xb334" name="1em"/><!-- HANGUL SYLLABLE DYAK -->
+ <map code="0xb335" name="1em"/><!-- HANGUL SYLLABLE DYAT -->
+ <map code="0xb336" name="1em"/><!-- HANGUL SYLLABLE DYAP -->
+ <map code="0xb337" name="1em"/><!-- HANGUL SYLLABLE DYAH -->
+ <map code="0xb338" name="1em"/><!-- HANGUL SYLLABLE DYAE -->
+ <map code="0xb339" name="1em"/><!-- HANGUL SYLLABLE DYAEG -->
+ <map code="0xb33a" name="1em"/><!-- HANGUL SYLLABLE DYAEGG -->
+ <map code="0xb33b" name="1em"/><!-- HANGUL SYLLABLE DYAEGS -->
+ <map code="0xb33c" name="1em"/><!-- HANGUL SYLLABLE DYAEN -->
+ <map code="0xb33d" name="1em"/><!-- HANGUL SYLLABLE DYAENJ -->
+ <map code="0xb33e" name="1em"/><!-- HANGUL SYLLABLE DYAENH -->
+ <map code="0xb33f" name="1em"/><!-- HANGUL SYLLABLE DYAED -->
+ <map code="0xb340" name="1em"/><!-- HANGUL SYLLABLE DYAEL -->
+ <map code="0xb341" name="1em"/><!-- HANGUL SYLLABLE DYAELG -->
+ <map code="0xb342" name="1em"/><!-- HANGUL SYLLABLE DYAELM -->
+ <map code="0xb343" name="1em"/><!-- HANGUL SYLLABLE DYAELB -->
+ <map code="0xb344" name="1em"/><!-- HANGUL SYLLABLE DYAELS -->
+ <map code="0xb345" name="1em"/><!-- HANGUL SYLLABLE DYAELT -->
+ <map code="0xb346" name="1em"/><!-- HANGUL SYLLABLE DYAELP -->
+ <map code="0xb347" name="1em"/><!-- HANGUL SYLLABLE DYAELH -->
+ <map code="0xb348" name="1em"/><!-- HANGUL SYLLABLE DYAEM -->
+ <map code="0xb349" name="1em"/><!-- HANGUL SYLLABLE DYAEB -->
+ <map code="0xb34a" name="1em"/><!-- HANGUL SYLLABLE DYAEBS -->
+ <map code="0xb34b" name="1em"/><!-- HANGUL SYLLABLE DYAES -->
+ <map code="0xb34c" name="1em"/><!-- HANGUL SYLLABLE DYAESS -->
+ <map code="0xb34d" name="1em"/><!-- HANGUL SYLLABLE DYAENG -->
+ <map code="0xb34e" name="1em"/><!-- HANGUL SYLLABLE DYAEJ -->
+ <map code="0xb34f" name="1em"/><!-- HANGUL SYLLABLE DYAEC -->
+ <map code="0xb350" name="1em"/><!-- HANGUL SYLLABLE DYAEK -->
+ <map code="0xb351" name="1em"/><!-- HANGUL SYLLABLE DYAET -->
+ <map code="0xb352" name="1em"/><!-- HANGUL SYLLABLE DYAEP -->
+ <map code="0xb353" name="1em"/><!-- HANGUL SYLLABLE DYAEH -->
+ <map code="0xb354" name="1em"/><!-- HANGUL SYLLABLE DEO -->
+ <map code="0xb355" name="1em"/><!-- HANGUL SYLLABLE DEOG -->
+ <map code="0xb356" name="1em"/><!-- HANGUL SYLLABLE DEOGG -->
+ <map code="0xb357" name="1em"/><!-- HANGUL SYLLABLE DEOGS -->
+ <map code="0xb358" name="1em"/><!-- HANGUL SYLLABLE DEON -->
+ <map code="0xb359" name="1em"/><!-- HANGUL SYLLABLE DEONJ -->
+ <map code="0xb35a" name="1em"/><!-- HANGUL SYLLABLE DEONH -->
+ <map code="0xb35b" name="1em"/><!-- HANGUL SYLLABLE DEOD -->
+ <map code="0xb35c" name="1em"/><!-- HANGUL SYLLABLE DEOL -->
+ <map code="0xb35d" name="1em"/><!-- HANGUL SYLLABLE DEOLG -->
+ <map code="0xb35e" name="1em"/><!-- HANGUL SYLLABLE DEOLM -->
+ <map code="0xb35f" name="1em"/><!-- HANGUL SYLLABLE DEOLB -->
+ <map code="0xb360" name="1em"/><!-- HANGUL SYLLABLE DEOLS -->
+ <map code="0xb361" name="1em"/><!-- HANGUL SYLLABLE DEOLT -->
+ <map code="0xb362" name="1em"/><!-- HANGUL SYLLABLE DEOLP -->
+ <map code="0xb363" name="1em"/><!-- HANGUL SYLLABLE DEOLH -->
+ <map code="0xb364" name="1em"/><!-- HANGUL SYLLABLE DEOM -->
+ <map code="0xb365" name="1em"/><!-- HANGUL SYLLABLE DEOB -->
+ <map code="0xb366" name="1em"/><!-- HANGUL SYLLABLE DEOBS -->
+ <map code="0xb367" name="1em"/><!-- HANGUL SYLLABLE DEOS -->
+ <map code="0xb368" name="1em"/><!-- HANGUL SYLLABLE DEOSS -->
+ <map code="0xb369" name="1em"/><!-- HANGUL SYLLABLE DEONG -->
+ <map code="0xb36a" name="1em"/><!-- HANGUL SYLLABLE DEOJ -->
+ <map code="0xb36b" name="1em"/><!-- HANGUL SYLLABLE DEOC -->
+ <map code="0xb36c" name="1em"/><!-- HANGUL SYLLABLE DEOK -->
+ <map code="0xb36d" name="1em"/><!-- HANGUL SYLLABLE DEOT -->
+ <map code="0xb36e" name="1em"/><!-- HANGUL SYLLABLE DEOP -->
+ <map code="0xb36f" name="1em"/><!-- HANGUL SYLLABLE DEOH -->
+ <map code="0xb370" name="1em"/><!-- HANGUL SYLLABLE DE -->
+ <map code="0xb371" name="1em"/><!-- HANGUL SYLLABLE DEG -->
+ <map code="0xb372" name="1em"/><!-- HANGUL SYLLABLE DEGG -->
+ <map code="0xb373" name="1em"/><!-- HANGUL SYLLABLE DEGS -->
+ <map code="0xb374" name="1em"/><!-- HANGUL SYLLABLE DEN -->
+ <map code="0xb375" name="1em"/><!-- HANGUL SYLLABLE DENJ -->
+ <map code="0xb376" name="1em"/><!-- HANGUL SYLLABLE DENH -->
+ <map code="0xb377" name="1em"/><!-- HANGUL SYLLABLE DED -->
+ <map code="0xb378" name="1em"/><!-- HANGUL SYLLABLE DEL -->
+ <map code="0xb379" name="1em"/><!-- HANGUL SYLLABLE DELG -->
+ <map code="0xb37a" name="1em"/><!-- HANGUL SYLLABLE DELM -->
+ <map code="0xb37b" name="1em"/><!-- HANGUL SYLLABLE DELB -->
+ <map code="0xb37c" name="1em"/><!-- HANGUL SYLLABLE DELS -->
+ <map code="0xb37d" name="1em"/><!-- HANGUL SYLLABLE DELT -->
+ <map code="0xb37e" name="1em"/><!-- HANGUL SYLLABLE DELP -->
+ <map code="0xb37f" name="1em"/><!-- HANGUL SYLLABLE DELH -->
+ <map code="0xb380" name="1em"/><!-- HANGUL SYLLABLE DEM -->
+ <map code="0xb381" name="1em"/><!-- HANGUL SYLLABLE DEB -->
+ <map code="0xb382" name="1em"/><!-- HANGUL SYLLABLE DEBS -->
+ <map code="0xb383" name="1em"/><!-- HANGUL SYLLABLE DES -->
+ <map code="0xb384" name="1em"/><!-- HANGUL SYLLABLE DESS -->
+ <map code="0xb385" name="1em"/><!-- HANGUL SYLLABLE DENG -->
+ <map code="0xb386" name="1em"/><!-- HANGUL SYLLABLE DEJ -->
+ <map code="0xb387" name="1em"/><!-- HANGUL SYLLABLE DEC -->
+ <map code="0xb388" name="1em"/><!-- HANGUL SYLLABLE DEK -->
+ <map code="0xb389" name="1em"/><!-- HANGUL SYLLABLE DET -->
+ <map code="0xb38a" name="1em"/><!-- HANGUL SYLLABLE DEP -->
+ <map code="0xb38b" name="1em"/><!-- HANGUL SYLLABLE DEH -->
+ <map code="0xb38c" name="1em"/><!-- HANGUL SYLLABLE DYEO -->
+ <map code="0xb38d" name="1em"/><!-- HANGUL SYLLABLE DYEOG -->
+ <map code="0xb38e" name="1em"/><!-- HANGUL SYLLABLE DYEOGG -->
+ <map code="0xb38f" name="1em"/><!-- HANGUL SYLLABLE DYEOGS -->
+ <map code="0xb390" name="1em"/><!-- HANGUL SYLLABLE DYEON -->
+ <map code="0xb391" name="1em"/><!-- HANGUL SYLLABLE DYEONJ -->
+ <map code="0xb392" name="1em"/><!-- HANGUL SYLLABLE DYEONH -->
+ <map code="0xb393" name="1em"/><!-- HANGUL SYLLABLE DYEOD -->
+ <map code="0xb394" name="1em"/><!-- HANGUL SYLLABLE DYEOL -->
+ <map code="0xb395" name="1em"/><!-- HANGUL SYLLABLE DYEOLG -->
+ <map code="0xb396" name="1em"/><!-- HANGUL SYLLABLE DYEOLM -->
+ <map code="0xb397" name="1em"/><!-- HANGUL SYLLABLE DYEOLB -->
+ <map code="0xb398" name="1em"/><!-- HANGUL SYLLABLE DYEOLS -->
+ <map code="0xb399" name="1em"/><!-- HANGUL SYLLABLE DYEOLT -->
+ <map code="0xb39a" name="1em"/><!-- HANGUL SYLLABLE DYEOLP -->
+ <map code="0xb39b" name="1em"/><!-- HANGUL SYLLABLE DYEOLH -->
+ <map code="0xb39c" name="1em"/><!-- HANGUL SYLLABLE DYEOM -->
+ <map code="0xb39d" name="1em"/><!-- HANGUL SYLLABLE DYEOB -->
+ <map code="0xb39e" name="1em"/><!-- HANGUL SYLLABLE DYEOBS -->
+ <map code="0xb39f" name="1em"/><!-- HANGUL SYLLABLE DYEOS -->
+ <map code="0xb3a0" name="1em"/><!-- HANGUL SYLLABLE DYEOSS -->
+ <map code="0xb3a1" name="1em"/><!-- HANGUL SYLLABLE DYEONG -->
+ <map code="0xb3a2" name="1em"/><!-- HANGUL SYLLABLE DYEOJ -->
+ <map code="0xb3a3" name="1em"/><!-- HANGUL SYLLABLE DYEOC -->
+ <map code="0xb3a4" name="1em"/><!-- HANGUL SYLLABLE DYEOK -->
+ <map code="0xb3a5" name="1em"/><!-- HANGUL SYLLABLE DYEOT -->
+ <map code="0xb3a6" name="1em"/><!-- HANGUL SYLLABLE DYEOP -->
+ <map code="0xb3a7" name="1em"/><!-- HANGUL SYLLABLE DYEOH -->
+ <map code="0xb3a8" name="1em"/><!-- HANGUL SYLLABLE DYE -->
+ <map code="0xb3a9" name="1em"/><!-- HANGUL SYLLABLE DYEG -->
+ <map code="0xb3aa" name="1em"/><!-- HANGUL SYLLABLE DYEGG -->
+ <map code="0xb3ab" name="1em"/><!-- HANGUL SYLLABLE DYEGS -->
+ <map code="0xb3ac" name="1em"/><!-- HANGUL SYLLABLE DYEN -->
+ <map code="0xb3ad" name="1em"/><!-- HANGUL SYLLABLE DYENJ -->
+ <map code="0xb3ae" name="1em"/><!-- HANGUL SYLLABLE DYENH -->
+ <map code="0xb3af" name="1em"/><!-- HANGUL SYLLABLE DYED -->
+ <map code="0xb3b0" name="1em"/><!-- HANGUL SYLLABLE DYEL -->
+ <map code="0xb3b1" name="1em"/><!-- HANGUL SYLLABLE DYELG -->
+ <map code="0xb3b2" name="1em"/><!-- HANGUL SYLLABLE DYELM -->
+ <map code="0xb3b3" name="1em"/><!-- HANGUL SYLLABLE DYELB -->
+ <map code="0xb3b4" name="1em"/><!-- HANGUL SYLLABLE DYELS -->
+ <map code="0xb3b5" name="1em"/><!-- HANGUL SYLLABLE DYELT -->
+ <map code="0xb3b6" name="1em"/><!-- HANGUL SYLLABLE DYELP -->
+ <map code="0xb3b7" name="1em"/><!-- HANGUL SYLLABLE DYELH -->
+ <map code="0xb3b8" name="1em"/><!-- HANGUL SYLLABLE DYEM -->
+ <map code="0xb3b9" name="1em"/><!-- HANGUL SYLLABLE DYEB -->
+ <map code="0xb3ba" name="1em"/><!-- HANGUL SYLLABLE DYEBS -->
+ <map code="0xb3bb" name="1em"/><!-- HANGUL SYLLABLE DYES -->
+ <map code="0xb3bc" name="1em"/><!-- HANGUL SYLLABLE DYESS -->
+ <map code="0xb3bd" name="1em"/><!-- HANGUL SYLLABLE DYENG -->
+ <map code="0xb3be" name="1em"/><!-- HANGUL SYLLABLE DYEJ -->
+ <map code="0xb3bf" name="1em"/><!-- HANGUL SYLLABLE DYEC -->
+ <map code="0xb3c0" name="1em"/><!-- HANGUL SYLLABLE DYEK -->
+ <map code="0xb3c1" name="1em"/><!-- HANGUL SYLLABLE DYET -->
+ <map code="0xb3c2" name="1em"/><!-- HANGUL SYLLABLE DYEP -->
+ <map code="0xb3c3" name="1em"/><!-- HANGUL SYLLABLE DYEH -->
+ <map code="0xb3c4" name="1em"/><!-- HANGUL SYLLABLE DO -->
+ <map code="0xb3c5" name="1em"/><!-- HANGUL SYLLABLE DOG -->
+ <map code="0xb3c6" name="1em"/><!-- HANGUL SYLLABLE DOGG -->
+ <map code="0xb3c7" name="1em"/><!-- HANGUL SYLLABLE DOGS -->
+ <map code="0xb3c8" name="1em"/><!-- HANGUL SYLLABLE DON -->
+ <map code="0xb3c9" name="1em"/><!-- HANGUL SYLLABLE DONJ -->
+ <map code="0xb3ca" name="1em"/><!-- HANGUL SYLLABLE DONH -->
+ <map code="0xb3cb" name="1em"/><!-- HANGUL SYLLABLE DOD -->
+ <map code="0xb3cc" name="1em"/><!-- HANGUL SYLLABLE DOL -->
+ <map code="0xb3cd" name="1em"/><!-- HANGUL SYLLABLE DOLG -->
+ <map code="0xb3ce" name="1em"/><!-- HANGUL SYLLABLE DOLM -->
+ <map code="0xb3cf" name="1em"/><!-- HANGUL SYLLABLE DOLB -->
+ <map code="0xb3d0" name="1em"/><!-- HANGUL SYLLABLE DOLS -->
+ <map code="0xb3d1" name="1em"/><!-- HANGUL SYLLABLE DOLT -->
+ <map code="0xb3d2" name="1em"/><!-- HANGUL SYLLABLE DOLP -->
+ <map code="0xb3d3" name="1em"/><!-- HANGUL SYLLABLE DOLH -->
+ <map code="0xb3d4" name="1em"/><!-- HANGUL SYLLABLE DOM -->
+ <map code="0xb3d5" name="1em"/><!-- HANGUL SYLLABLE DOB -->
+ <map code="0xb3d6" name="1em"/><!-- HANGUL SYLLABLE DOBS -->
+ <map code="0xb3d7" name="1em"/><!-- HANGUL SYLLABLE DOS -->
+ <map code="0xb3d8" name="1em"/><!-- HANGUL SYLLABLE DOSS -->
+ <map code="0xb3d9" name="1em"/><!-- HANGUL SYLLABLE DONG -->
+ <map code="0xb3da" name="1em"/><!-- HANGUL SYLLABLE DOJ -->
+ <map code="0xb3db" name="1em"/><!-- HANGUL SYLLABLE DOC -->
+ <map code="0xb3dc" name="1em"/><!-- HANGUL SYLLABLE DOK -->
+ <map code="0xb3dd" name="1em"/><!-- HANGUL SYLLABLE DOT -->
+ <map code="0xb3de" name="1em"/><!-- HANGUL SYLLABLE DOP -->
+ <map code="0xb3df" name="1em"/><!-- HANGUL SYLLABLE DOH -->
+ <map code="0xb3e0" name="1em"/><!-- HANGUL SYLLABLE DWA -->
+ <map code="0xb3e1" name="1em"/><!-- HANGUL SYLLABLE DWAG -->
+ <map code="0xb3e2" name="1em"/><!-- HANGUL SYLLABLE DWAGG -->
+ <map code="0xb3e3" name="1em"/><!-- HANGUL SYLLABLE DWAGS -->
+ <map code="0xb3e4" name="1em"/><!-- HANGUL SYLLABLE DWAN -->
+ <map code="0xb3e5" name="1em"/><!-- HANGUL SYLLABLE DWANJ -->
+ <map code="0xb3e6" name="1em"/><!-- HANGUL SYLLABLE DWANH -->
+ <map code="0xb3e7" name="1em"/><!-- HANGUL SYLLABLE DWAD -->
+ <map code="0xb3e8" name="1em"/><!-- HANGUL SYLLABLE DWAL -->
+ <map code="0xb3e9" name="1em"/><!-- HANGUL SYLLABLE DWALG -->
+ <map code="0xb3ea" name="1em"/><!-- HANGUL SYLLABLE DWALM -->
+ <map code="0xb3eb" name="1em"/><!-- HANGUL SYLLABLE DWALB -->
+ <map code="0xb3ec" name="1em"/><!-- HANGUL SYLLABLE DWALS -->
+ <map code="0xb3ed" name="1em"/><!-- HANGUL SYLLABLE DWALT -->
+ <map code="0xb3ee" name="1em"/><!-- HANGUL SYLLABLE DWALP -->
+ <map code="0xb3ef" name="1em"/><!-- HANGUL SYLLABLE DWALH -->
+ <map code="0xb3f0" name="1em"/><!-- HANGUL SYLLABLE DWAM -->
+ <map code="0xb3f1" name="1em"/><!-- HANGUL SYLLABLE DWAB -->
+ <map code="0xb3f2" name="1em"/><!-- HANGUL SYLLABLE DWABS -->
+ <map code="0xb3f3" name="1em"/><!-- HANGUL SYLLABLE DWAS -->
+ <map code="0xb3f4" name="1em"/><!-- HANGUL SYLLABLE DWASS -->
+ <map code="0xb3f5" name="1em"/><!-- HANGUL SYLLABLE DWANG -->
+ <map code="0xb3f6" name="1em"/><!-- HANGUL SYLLABLE DWAJ -->
+ <map code="0xb3f7" name="1em"/><!-- HANGUL SYLLABLE DWAC -->
+ <map code="0xb3f8" name="1em"/><!-- HANGUL SYLLABLE DWAK -->
+ <map code="0xb3f9" name="1em"/><!-- HANGUL SYLLABLE DWAT -->
+ <map code="0xb3fa" name="1em"/><!-- HANGUL SYLLABLE DWAP -->
+ <map code="0xb3fb" name="1em"/><!-- HANGUL SYLLABLE DWAH -->
+ <map code="0xb3fc" name="1em"/><!-- HANGUL SYLLABLE DWAE -->
+ <map code="0xb3fd" name="1em"/><!-- HANGUL SYLLABLE DWAEG -->
+ <map code="0xb3fe" name="1em"/><!-- HANGUL SYLLABLE DWAEGG -->
+ <map code="0xb3ff" name="1em"/><!-- HANGUL SYLLABLE DWAEGS -->
+ <map code="0xb400" name="1em"/><!-- HANGUL SYLLABLE DWAEN -->
+ <map code="0xb401" name="1em"/><!-- HANGUL SYLLABLE DWAENJ -->
+ <map code="0xb402" name="1em"/><!-- HANGUL SYLLABLE DWAENH -->
+ <map code="0xb403" name="1em"/><!-- HANGUL SYLLABLE DWAED -->
+ <map code="0xb404" name="1em"/><!-- HANGUL SYLLABLE DWAEL -->
+ <map code="0xb405" name="1em"/><!-- HANGUL SYLLABLE DWAELG -->
+ <map code="0xb406" name="1em"/><!-- HANGUL SYLLABLE DWAELM -->
+ <map code="0xb407" name="1em"/><!-- HANGUL SYLLABLE DWAELB -->
+ <map code="0xb408" name="1em"/><!-- HANGUL SYLLABLE DWAELS -->
+ <map code="0xb409" name="1em"/><!-- HANGUL SYLLABLE DWAELT -->
+ <map code="0xb40a" name="1em"/><!-- HANGUL SYLLABLE DWAELP -->
+ <map code="0xb40b" name="1em"/><!-- HANGUL SYLLABLE DWAELH -->
+ <map code="0xb40c" name="1em"/><!-- HANGUL SYLLABLE DWAEM -->
+ <map code="0xb40d" name="1em"/><!-- HANGUL SYLLABLE DWAEB -->
+ <map code="0xb40e" name="1em"/><!-- HANGUL SYLLABLE DWAEBS -->
+ <map code="0xb40f" name="1em"/><!-- HANGUL SYLLABLE DWAES -->
+ <map code="0xb410" name="1em"/><!-- HANGUL SYLLABLE DWAESS -->
+ <map code="0xb411" name="1em"/><!-- HANGUL SYLLABLE DWAENG -->
+ <map code="0xb412" name="1em"/><!-- HANGUL SYLLABLE DWAEJ -->
+ <map code="0xb413" name="1em"/><!-- HANGUL SYLLABLE DWAEC -->
+ <map code="0xb414" name="1em"/><!-- HANGUL SYLLABLE DWAEK -->
+ <map code="0xb415" name="1em"/><!-- HANGUL SYLLABLE DWAET -->
+ <map code="0xb416" name="1em"/><!-- HANGUL SYLLABLE DWAEP -->
+ <map code="0xb417" name="1em"/><!-- HANGUL SYLLABLE DWAEH -->
+ <map code="0xb418" name="1em"/><!-- HANGUL SYLLABLE DOE -->
+ <map code="0xb419" name="1em"/><!-- HANGUL SYLLABLE DOEG -->
+ <map code="0xb41a" name="1em"/><!-- HANGUL SYLLABLE DOEGG -->
+ <map code="0xb41b" name="1em"/><!-- HANGUL SYLLABLE DOEGS -->
+ <map code="0xb41c" name="1em"/><!-- HANGUL SYLLABLE DOEN -->
+ <map code="0xb41d" name="1em"/><!-- HANGUL SYLLABLE DOENJ -->
+ <map code="0xb41e" name="1em"/><!-- HANGUL SYLLABLE DOENH -->
+ <map code="0xb41f" name="1em"/><!-- HANGUL SYLLABLE DOED -->
+ <map code="0xb420" name="1em"/><!-- HANGUL SYLLABLE DOEL -->
+ <map code="0xb421" name="1em"/><!-- HANGUL SYLLABLE DOELG -->
+ <map code="0xb422" name="1em"/><!-- HANGUL SYLLABLE DOELM -->
+ <map code="0xb423" name="1em"/><!-- HANGUL SYLLABLE DOELB -->
+ <map code="0xb424" name="1em"/><!-- HANGUL SYLLABLE DOELS -->
+ <map code="0xb425" name="1em"/><!-- HANGUL SYLLABLE DOELT -->
+ <map code="0xb426" name="1em"/><!-- HANGUL SYLLABLE DOELP -->
+ <map code="0xb427" name="1em"/><!-- HANGUL SYLLABLE DOELH -->
+ <map code="0xb428" name="1em"/><!-- HANGUL SYLLABLE DOEM -->
+ <map code="0xb429" name="1em"/><!-- HANGUL SYLLABLE DOEB -->
+ <map code="0xb42a" name="1em"/><!-- HANGUL SYLLABLE DOEBS -->
+ <map code="0xb42b" name="1em"/><!-- HANGUL SYLLABLE DOES -->
+ <map code="0xb42c" name="1em"/><!-- HANGUL SYLLABLE DOESS -->
+ <map code="0xb42d" name="1em"/><!-- HANGUL SYLLABLE DOENG -->
+ <map code="0xb42e" name="1em"/><!-- HANGUL SYLLABLE DOEJ -->
+ <map code="0xb42f" name="1em"/><!-- HANGUL SYLLABLE DOEC -->
+ <map code="0xb430" name="1em"/><!-- HANGUL SYLLABLE DOEK -->
+ <map code="0xb431" name="1em"/><!-- HANGUL SYLLABLE DOET -->
+ <map code="0xb432" name="1em"/><!-- HANGUL SYLLABLE DOEP -->
+ <map code="0xb433" name="1em"/><!-- HANGUL SYLLABLE DOEH -->
+ <map code="0xb434" name="1em"/><!-- HANGUL SYLLABLE DYO -->
+ <map code="0xb435" name="1em"/><!-- HANGUL SYLLABLE DYOG -->
+ <map code="0xb436" name="1em"/><!-- HANGUL SYLLABLE DYOGG -->
+ <map code="0xb437" name="1em"/><!-- HANGUL SYLLABLE DYOGS -->
+ <map code="0xb438" name="1em"/><!-- HANGUL SYLLABLE DYON -->
+ <map code="0xb439" name="1em"/><!-- HANGUL SYLLABLE DYONJ -->
+ <map code="0xb43a" name="1em"/><!-- HANGUL SYLLABLE DYONH -->
+ <map code="0xb43b" name="1em"/><!-- HANGUL SYLLABLE DYOD -->
+ <map code="0xb43c" name="1em"/><!-- HANGUL SYLLABLE DYOL -->
+ <map code="0xb43d" name="1em"/><!-- HANGUL SYLLABLE DYOLG -->
+ <map code="0xb43e" name="1em"/><!-- HANGUL SYLLABLE DYOLM -->
+ <map code="0xb43f" name="1em"/><!-- HANGUL SYLLABLE DYOLB -->
+ <map code="0xb440" name="1em"/><!-- HANGUL SYLLABLE DYOLS -->
+ <map code="0xb441" name="1em"/><!-- HANGUL SYLLABLE DYOLT -->
+ <map code="0xb442" name="1em"/><!-- HANGUL SYLLABLE DYOLP -->
+ <map code="0xb443" name="1em"/><!-- HANGUL SYLLABLE DYOLH -->
+ <map code="0xb444" name="1em"/><!-- HANGUL SYLLABLE DYOM -->
+ <map code="0xb445" name="1em"/><!-- HANGUL SYLLABLE DYOB -->
+ <map code="0xb446" name="1em"/><!-- HANGUL SYLLABLE DYOBS -->
+ <map code="0xb447" name="1em"/><!-- HANGUL SYLLABLE DYOS -->
+ <map code="0xb448" name="1em"/><!-- HANGUL SYLLABLE DYOSS -->
+ <map code="0xb449" name="1em"/><!-- HANGUL SYLLABLE DYONG -->
+ <map code="0xb44a" name="1em"/><!-- HANGUL SYLLABLE DYOJ -->
+ <map code="0xb44b" name="1em"/><!-- HANGUL SYLLABLE DYOC -->
+ <map code="0xb44c" name="1em"/><!-- HANGUL SYLLABLE DYOK -->
+ <map code="0xb44d" name="1em"/><!-- HANGUL SYLLABLE DYOT -->
+ <map code="0xb44e" name="1em"/><!-- HANGUL SYLLABLE DYOP -->
+ <map code="0xb44f" name="1em"/><!-- HANGUL SYLLABLE DYOH -->
+ <map code="0xb450" name="1em"/><!-- HANGUL SYLLABLE DU -->
+ <map code="0xb451" name="1em"/><!-- HANGUL SYLLABLE DUG -->
+ <map code="0xb452" name="1em"/><!-- HANGUL SYLLABLE DUGG -->
+ <map code="0xb453" name="1em"/><!-- HANGUL SYLLABLE DUGS -->
+ <map code="0xb454" name="1em"/><!-- HANGUL SYLLABLE DUN -->
+ <map code="0xb455" name="1em"/><!-- HANGUL SYLLABLE DUNJ -->
+ <map code="0xb456" name="1em"/><!-- HANGUL SYLLABLE DUNH -->
+ <map code="0xb457" name="1em"/><!-- HANGUL SYLLABLE DUD -->
+ <map code="0xb458" name="1em"/><!-- HANGUL SYLLABLE DUL -->
+ <map code="0xb459" name="1em"/><!-- HANGUL SYLLABLE DULG -->
+ <map code="0xb45a" name="1em"/><!-- HANGUL SYLLABLE DULM -->
+ <map code="0xb45b" name="1em"/><!-- HANGUL SYLLABLE DULB -->
+ <map code="0xb45c" name="1em"/><!-- HANGUL SYLLABLE DULS -->
+ <map code="0xb45d" name="1em"/><!-- HANGUL SYLLABLE DULT -->
+ <map code="0xb45e" name="1em"/><!-- HANGUL SYLLABLE DULP -->
+ <map code="0xb45f" name="1em"/><!-- HANGUL SYLLABLE DULH -->
+ <map code="0xb460" name="1em"/><!-- HANGUL SYLLABLE DUM -->
+ <map code="0xb461" name="1em"/><!-- HANGUL SYLLABLE DUB -->
+ <map code="0xb462" name="1em"/><!-- HANGUL SYLLABLE DUBS -->
+ <map code="0xb463" name="1em"/><!-- HANGUL SYLLABLE DUS -->
+ <map code="0xb464" name="1em"/><!-- HANGUL SYLLABLE DUSS -->
+ <map code="0xb465" name="1em"/><!-- HANGUL SYLLABLE DUNG -->
+ <map code="0xb466" name="1em"/><!-- HANGUL SYLLABLE DUJ -->
+ <map code="0xb467" name="1em"/><!-- HANGUL SYLLABLE DUC -->
+ <map code="0xb468" name="1em"/><!-- HANGUL SYLLABLE DUK -->
+ <map code="0xb469" name="1em"/><!-- HANGUL SYLLABLE DUT -->
+ <map code="0xb46a" name="1em"/><!-- HANGUL SYLLABLE DUP -->
+ <map code="0xb46b" name="1em"/><!-- HANGUL SYLLABLE DUH -->
+ <map code="0xb46c" name="1em"/><!-- HANGUL SYLLABLE DWEO -->
+ <map code="0xb46d" name="1em"/><!-- HANGUL SYLLABLE DWEOG -->
+ <map code="0xb46e" name="1em"/><!-- HANGUL SYLLABLE DWEOGG -->
+ <map code="0xb46f" name="1em"/><!-- HANGUL SYLLABLE DWEOGS -->
+ <map code="0xb470" name="1em"/><!-- HANGUL SYLLABLE DWEON -->
+ <map code="0xb471" name="1em"/><!-- HANGUL SYLLABLE DWEONJ -->
+ <map code="0xb472" name="1em"/><!-- HANGUL SYLLABLE DWEONH -->
+ <map code="0xb473" name="1em"/><!-- HANGUL SYLLABLE DWEOD -->
+ <map code="0xb474" name="1em"/><!-- HANGUL SYLLABLE DWEOL -->
+ <map code="0xb475" name="1em"/><!-- HANGUL SYLLABLE DWEOLG -->
+ <map code="0xb476" name="1em"/><!-- HANGUL SYLLABLE DWEOLM -->
+ <map code="0xb477" name="1em"/><!-- HANGUL SYLLABLE DWEOLB -->
+ <map code="0xb478" name="1em"/><!-- HANGUL SYLLABLE DWEOLS -->
+ <map code="0xb479" name="1em"/><!-- HANGUL SYLLABLE DWEOLT -->
+ <map code="0xb47a" name="1em"/><!-- HANGUL SYLLABLE DWEOLP -->
+ <map code="0xb47b" name="1em"/><!-- HANGUL SYLLABLE DWEOLH -->
+ <map code="0xb47c" name="1em"/><!-- HANGUL SYLLABLE DWEOM -->
+ <map code="0xb47d" name="1em"/><!-- HANGUL SYLLABLE DWEOB -->
+ <map code="0xb47e" name="1em"/><!-- HANGUL SYLLABLE DWEOBS -->
+ <map code="0xb47f" name="1em"/><!-- HANGUL SYLLABLE DWEOS -->
+ <map code="0xb480" name="1em"/><!-- HANGUL SYLLABLE DWEOSS -->
+ <map code="0xb481" name="1em"/><!-- HANGUL SYLLABLE DWEONG -->
+ <map code="0xb482" name="1em"/><!-- HANGUL SYLLABLE DWEOJ -->
+ <map code="0xb483" name="1em"/><!-- HANGUL SYLLABLE DWEOC -->
+ <map code="0xb484" name="1em"/><!-- HANGUL SYLLABLE DWEOK -->
+ <map code="0xb485" name="1em"/><!-- HANGUL SYLLABLE DWEOT -->
+ <map code="0xb486" name="1em"/><!-- HANGUL SYLLABLE DWEOP -->
+ <map code="0xb487" name="1em"/><!-- HANGUL SYLLABLE DWEOH -->
+ <map code="0xb488" name="1em"/><!-- HANGUL SYLLABLE DWE -->
+ <map code="0xb489" name="1em"/><!-- HANGUL SYLLABLE DWEG -->
+ <map code="0xb48a" name="1em"/><!-- HANGUL SYLLABLE DWEGG -->
+ <map code="0xb48b" name="1em"/><!-- HANGUL SYLLABLE DWEGS -->
+ <map code="0xb48c" name="1em"/><!-- HANGUL SYLLABLE DWEN -->
+ <map code="0xb48d" name="1em"/><!-- HANGUL SYLLABLE DWENJ -->
+ <map code="0xb48e" name="1em"/><!-- HANGUL SYLLABLE DWENH -->
+ <map code="0xb48f" name="1em"/><!-- HANGUL SYLLABLE DWED -->
+ <map code="0xb490" name="1em"/><!-- HANGUL SYLLABLE DWEL -->
+ <map code="0xb491" name="1em"/><!-- HANGUL SYLLABLE DWELG -->
+ <map code="0xb492" name="1em"/><!-- HANGUL SYLLABLE DWELM -->
+ <map code="0xb493" name="1em"/><!-- HANGUL SYLLABLE DWELB -->
+ <map code="0xb494" name="1em"/><!-- HANGUL SYLLABLE DWELS -->
+ <map code="0xb495" name="1em"/><!-- HANGUL SYLLABLE DWELT -->
+ <map code="0xb496" name="1em"/><!-- HANGUL SYLLABLE DWELP -->
+ <map code="0xb497" name="1em"/><!-- HANGUL SYLLABLE DWELH -->
+ <map code="0xb498" name="1em"/><!-- HANGUL SYLLABLE DWEM -->
+ <map code="0xb499" name="1em"/><!-- HANGUL SYLLABLE DWEB -->
+ <map code="0xb49a" name="1em"/><!-- HANGUL SYLLABLE DWEBS -->
+ <map code="0xb49b" name="1em"/><!-- HANGUL SYLLABLE DWES -->
+ <map code="0xb49c" name="1em"/><!-- HANGUL SYLLABLE DWESS -->
+ <map code="0xb49d" name="1em"/><!-- HANGUL SYLLABLE DWENG -->
+ <map code="0xb49e" name="1em"/><!-- HANGUL SYLLABLE DWEJ -->
+ <map code="0xb49f" name="1em"/><!-- HANGUL SYLLABLE DWEC -->
+ <map code="0xb4a0" name="1em"/><!-- HANGUL SYLLABLE DWEK -->
+ <map code="0xb4a1" name="1em"/><!-- HANGUL SYLLABLE DWET -->
+ <map code="0xb4a2" name="1em"/><!-- HANGUL SYLLABLE DWEP -->
+ <map code="0xb4a3" name="1em"/><!-- HANGUL SYLLABLE DWEH -->
+ <map code="0xb4a4" name="1em"/><!-- HANGUL SYLLABLE DWI -->
+ <map code="0xb4a5" name="1em"/><!-- HANGUL SYLLABLE DWIG -->
+ <map code="0xb4a6" name="1em"/><!-- HANGUL SYLLABLE DWIGG -->
+ <map code="0xb4a7" name="1em"/><!-- HANGUL SYLLABLE DWIGS -->
+ <map code="0xb4a8" name="1em"/><!-- HANGUL SYLLABLE DWIN -->
+ <map code="0xb4a9" name="1em"/><!-- HANGUL SYLLABLE DWINJ -->
+ <map code="0xb4aa" name="1em"/><!-- HANGUL SYLLABLE DWINH -->
+ <map code="0xb4ab" name="1em"/><!-- HANGUL SYLLABLE DWID -->
+ <map code="0xb4ac" name="1em"/><!-- HANGUL SYLLABLE DWIL -->
+ <map code="0xb4ad" name="1em"/><!-- HANGUL SYLLABLE DWILG -->
+ <map code="0xb4ae" name="1em"/><!-- HANGUL SYLLABLE DWILM -->
+ <map code="0xb4af" name="1em"/><!-- HANGUL SYLLABLE DWILB -->
+ <map code="0xb4b0" name="1em"/><!-- HANGUL SYLLABLE DWILS -->
+ <map code="0xb4b1" name="1em"/><!-- HANGUL SYLLABLE DWILT -->
+ <map code="0xb4b2" name="1em"/><!-- HANGUL SYLLABLE DWILP -->
+ <map code="0xb4b3" name="1em"/><!-- HANGUL SYLLABLE DWILH -->
+ <map code="0xb4b4" name="1em"/><!-- HANGUL SYLLABLE DWIM -->
+ <map code="0xb4b5" name="1em"/><!-- HANGUL SYLLABLE DWIB -->
+ <map code="0xb4b6" name="1em"/><!-- HANGUL SYLLABLE DWIBS -->
+ <map code="0xb4b7" name="1em"/><!-- HANGUL SYLLABLE DWIS -->
+ <map code="0xb4b8" name="1em"/><!-- HANGUL SYLLABLE DWISS -->
+ <map code="0xb4b9" name="1em"/><!-- HANGUL SYLLABLE DWING -->
+ <map code="0xb4ba" name="1em"/><!-- HANGUL SYLLABLE DWIJ -->
+ <map code="0xb4bb" name="1em"/><!-- HANGUL SYLLABLE DWIC -->
+ <map code="0xb4bc" name="1em"/><!-- HANGUL SYLLABLE DWIK -->
+ <map code="0xb4bd" name="1em"/><!-- HANGUL SYLLABLE DWIT -->
+ <map code="0xb4be" name="1em"/><!-- HANGUL SYLLABLE DWIP -->
+ <map code="0xb4bf" name="1em"/><!-- HANGUL SYLLABLE DWIH -->
+ <map code="0xb4c0" name="1em"/><!-- HANGUL SYLLABLE DYU -->
+ <map code="0xb4c1" name="1em"/><!-- HANGUL SYLLABLE DYUG -->
+ <map code="0xb4c2" name="1em"/><!-- HANGUL SYLLABLE DYUGG -->
+ <map code="0xb4c3" name="1em"/><!-- HANGUL SYLLABLE DYUGS -->
+ <map code="0xb4c4" name="1em"/><!-- HANGUL SYLLABLE DYUN -->
+ <map code="0xb4c5" name="1em"/><!-- HANGUL SYLLABLE DYUNJ -->
+ <map code="0xb4c6" name="1em"/><!-- HANGUL SYLLABLE DYUNH -->
+ <map code="0xb4c7" name="1em"/><!-- HANGUL SYLLABLE DYUD -->
+ <map code="0xb4c8" name="1em"/><!-- HANGUL SYLLABLE DYUL -->
+ <map code="0xb4c9" name="1em"/><!-- HANGUL SYLLABLE DYULG -->
+ <map code="0xb4ca" name="1em"/><!-- HANGUL SYLLABLE DYULM -->
+ <map code="0xb4cb" name="1em"/><!-- HANGUL SYLLABLE DYULB -->
+ <map code="0xb4cc" name="1em"/><!-- HANGUL SYLLABLE DYULS -->
+ <map code="0xb4cd" name="1em"/><!-- HANGUL SYLLABLE DYULT -->
+ <map code="0xb4ce" name="1em"/><!-- HANGUL SYLLABLE DYULP -->
+ <map code="0xb4cf" name="1em"/><!-- HANGUL SYLLABLE DYULH -->
+ <map code="0xb4d0" name="1em"/><!-- HANGUL SYLLABLE DYUM -->
+ <map code="0xb4d1" name="1em"/><!-- HANGUL SYLLABLE DYUB -->
+ <map code="0xb4d2" name="1em"/><!-- HANGUL SYLLABLE DYUBS -->
+ <map code="0xb4d3" name="1em"/><!-- HANGUL SYLLABLE DYUS -->
+ <map code="0xb4d4" name="1em"/><!-- HANGUL SYLLABLE DYUSS -->
+ <map code="0xb4d5" name="1em"/><!-- HANGUL SYLLABLE DYUNG -->
+ <map code="0xb4d6" name="1em"/><!-- HANGUL SYLLABLE DYUJ -->
+ <map code="0xb4d7" name="1em"/><!-- HANGUL SYLLABLE DYUC -->
+ <map code="0xb4d8" name="1em"/><!-- HANGUL SYLLABLE DYUK -->
+ <map code="0xb4d9" name="1em"/><!-- HANGUL SYLLABLE DYUT -->
+ <map code="0xb4da" name="1em"/><!-- HANGUL SYLLABLE DYUP -->
+ <map code="0xb4db" name="1em"/><!-- HANGUL SYLLABLE DYUH -->
+ <map code="0xb4dc" name="1em"/><!-- HANGUL SYLLABLE DEU -->
+ <map code="0xb4dd" name="1em"/><!-- HANGUL SYLLABLE DEUG -->
+ <map code="0xb4de" name="1em"/><!-- HANGUL SYLLABLE DEUGG -->
+ <map code="0xb4df" name="1em"/><!-- HANGUL SYLLABLE DEUGS -->
+ <map code="0xb4e0" name="1em"/><!-- HANGUL SYLLABLE DEUN -->
+ <map code="0xb4e1" name="1em"/><!-- HANGUL SYLLABLE DEUNJ -->
+ <map code="0xb4e2" name="1em"/><!-- HANGUL SYLLABLE DEUNH -->
+ <map code="0xb4e3" name="1em"/><!-- HANGUL SYLLABLE DEUD -->
+ <map code="0xb4e4" name="1em"/><!-- HANGUL SYLLABLE DEUL -->
+ <map code="0xb4e5" name="1em"/><!-- HANGUL SYLLABLE DEULG -->
+ <map code="0xb4e6" name="1em"/><!-- HANGUL SYLLABLE DEULM -->
+ <map code="0xb4e7" name="1em"/><!-- HANGUL SYLLABLE DEULB -->
+ <map code="0xb4e8" name="1em"/><!-- HANGUL SYLLABLE DEULS -->
+ <map code="0xb4e9" name="1em"/><!-- HANGUL SYLLABLE DEULT -->
+ <map code="0xb4ea" name="1em"/><!-- HANGUL SYLLABLE DEULP -->
+ <map code="0xb4eb" name="1em"/><!-- HANGUL SYLLABLE DEULH -->
+ <map code="0xb4ec" name="1em"/><!-- HANGUL SYLLABLE DEUM -->
+ <map code="0xb4ed" name="1em"/><!-- HANGUL SYLLABLE DEUB -->
+ <map code="0xb4ee" name="1em"/><!-- HANGUL SYLLABLE DEUBS -->
+ <map code="0xb4ef" name="1em"/><!-- HANGUL SYLLABLE DEUS -->
+ <map code="0xb4f0" name="1em"/><!-- HANGUL SYLLABLE DEUSS -->
+ <map code="0xb4f1" name="1em"/><!-- HANGUL SYLLABLE DEUNG -->
+ <map code="0xb4f2" name="1em"/><!-- HANGUL SYLLABLE DEUJ -->
+ <map code="0xb4f3" name="1em"/><!-- HANGUL SYLLABLE DEUC -->
+ <map code="0xb4f4" name="1em"/><!-- HANGUL SYLLABLE DEUK -->
+ <map code="0xb4f5" name="1em"/><!-- HANGUL SYLLABLE DEUT -->
+ <map code="0xb4f6" name="1em"/><!-- HANGUL SYLLABLE DEUP -->
+ <map code="0xb4f7" name="1em"/><!-- HANGUL SYLLABLE DEUH -->
+ <map code="0xb4f8" name="1em"/><!-- HANGUL SYLLABLE DYI -->
+ <map code="0xb4f9" name="1em"/><!-- HANGUL SYLLABLE DYIG -->
+ <map code="0xb4fa" name="1em"/><!-- HANGUL SYLLABLE DYIGG -->
+ <map code="0xb4fb" name="1em"/><!-- HANGUL SYLLABLE DYIGS -->
+ <map code="0xb4fc" name="1em"/><!-- HANGUL SYLLABLE DYIN -->
+ <map code="0xb4fd" name="1em"/><!-- HANGUL SYLLABLE DYINJ -->
+ <map code="0xb4fe" name="1em"/><!-- HANGUL SYLLABLE DYINH -->
+ <map code="0xb4ff" name="1em"/><!-- HANGUL SYLLABLE DYID -->
+ <map code="0xb500" name="1em"/><!-- HANGUL SYLLABLE DYIL -->
+ <map code="0xb501" name="1em"/><!-- HANGUL SYLLABLE DYILG -->
+ <map code="0xb502" name="1em"/><!-- HANGUL SYLLABLE DYILM -->
+ <map code="0xb503" name="1em"/><!-- HANGUL SYLLABLE DYILB -->
+ <map code="0xb504" name="1em"/><!-- HANGUL SYLLABLE DYILS -->
+ <map code="0xb505" name="1em"/><!-- HANGUL SYLLABLE DYILT -->
+ <map code="0xb506" name="1em"/><!-- HANGUL SYLLABLE DYILP -->
+ <map code="0xb507" name="1em"/><!-- HANGUL SYLLABLE DYILH -->
+ <map code="0xb508" name="1em"/><!-- HANGUL SYLLABLE DYIM -->
+ <map code="0xb509" name="1em"/><!-- HANGUL SYLLABLE DYIB -->
+ <map code="0xb50a" name="1em"/><!-- HANGUL SYLLABLE DYIBS -->
+ <map code="0xb50b" name="1em"/><!-- HANGUL SYLLABLE DYIS -->
+ <map code="0xb50c" name="1em"/><!-- HANGUL SYLLABLE DYISS -->
+ <map code="0xb50d" name="1em"/><!-- HANGUL SYLLABLE DYING -->
+ <map code="0xb50e" name="1em"/><!-- HANGUL SYLLABLE DYIJ -->
+ <map code="0xb50f" name="1em"/><!-- HANGUL SYLLABLE DYIC -->
+ <map code="0xb510" name="1em"/><!-- HANGUL SYLLABLE DYIK -->
+ <map code="0xb511" name="1em"/><!-- HANGUL SYLLABLE DYIT -->
+ <map code="0xb512" name="1em"/><!-- HANGUL SYLLABLE DYIP -->
+ <map code="0xb513" name="1em"/><!-- HANGUL SYLLABLE DYIH -->
+ <map code="0xb514" name="1em"/><!-- HANGUL SYLLABLE DI -->
+ <map code="0xb515" name="1em"/><!-- HANGUL SYLLABLE DIG -->
+ <map code="0xb516" name="1em"/><!-- HANGUL SYLLABLE DIGG -->
+ <map code="0xb517" name="1em"/><!-- HANGUL SYLLABLE DIGS -->
+ <map code="0xb518" name="1em"/><!-- HANGUL SYLLABLE DIN -->
+ <map code="0xb519" name="1em"/><!-- HANGUL SYLLABLE DINJ -->
+ <map code="0xb51a" name="1em"/><!-- HANGUL SYLLABLE DINH -->
+ <map code="0xb51b" name="1em"/><!-- HANGUL SYLLABLE DID -->
+ <map code="0xb51c" name="1em"/><!-- HANGUL SYLLABLE DIL -->
+ <map code="0xb51d" name="1em"/><!-- HANGUL SYLLABLE DILG -->
+ <map code="0xb51e" name="1em"/><!-- HANGUL SYLLABLE DILM -->
+ <map code="0xb51f" name="1em"/><!-- HANGUL SYLLABLE DILB -->
+ <map code="0xb520" name="1em"/><!-- HANGUL SYLLABLE DILS -->
+ <map code="0xb521" name="1em"/><!-- HANGUL SYLLABLE DILT -->
+ <map code="0xb522" name="1em"/><!-- HANGUL SYLLABLE DILP -->
+ <map code="0xb523" name="1em"/><!-- HANGUL SYLLABLE DILH -->
+ <map code="0xb524" name="1em"/><!-- HANGUL SYLLABLE DIM -->
+ <map code="0xb525" name="1em"/><!-- HANGUL SYLLABLE DIB -->
+ <map code="0xb526" name="1em"/><!-- HANGUL SYLLABLE DIBS -->
+ <map code="0xb527" name="1em"/><!-- HANGUL SYLLABLE DIS -->
+ <map code="0xb528" name="1em"/><!-- HANGUL SYLLABLE DISS -->
+ <map code="0xb529" name="1em"/><!-- HANGUL SYLLABLE DING -->
+ <map code="0xb52a" name="1em"/><!-- HANGUL SYLLABLE DIJ -->
+ <map code="0xb52b" name="1em"/><!-- HANGUL SYLLABLE DIC -->
+ <map code="0xb52c" name="1em"/><!-- HANGUL SYLLABLE DIK -->
+ <map code="0xb52d" name="1em"/><!-- HANGUL SYLLABLE DIT -->
+ <map code="0xb52e" name="1em"/><!-- HANGUL SYLLABLE DIP -->
+ <map code="0xb52f" name="1em"/><!-- HANGUL SYLLABLE DIH -->
+ <map code="0xb530" name="1em"/><!-- HANGUL SYLLABLE DDA -->
+ <map code="0xb531" name="1em"/><!-- HANGUL SYLLABLE DDAG -->
+ <map code="0xb532" name="1em"/><!-- HANGUL SYLLABLE DDAGG -->
+ <map code="0xb533" name="1em"/><!-- HANGUL SYLLABLE DDAGS -->
+ <map code="0xb534" name="1em"/><!-- HANGUL SYLLABLE DDAN -->
+ <map code="0xb535" name="1em"/><!-- HANGUL SYLLABLE DDANJ -->
+ <map code="0xb536" name="1em"/><!-- HANGUL SYLLABLE DDANH -->
+ <map code="0xb537" name="1em"/><!-- HANGUL SYLLABLE DDAD -->
+ <map code="0xb538" name="1em"/><!-- HANGUL SYLLABLE DDAL -->
+ <map code="0xb539" name="1em"/><!-- HANGUL SYLLABLE DDALG -->
+ <map code="0xb53a" name="1em"/><!-- HANGUL SYLLABLE DDALM -->
+ <map code="0xb53b" name="1em"/><!-- HANGUL SYLLABLE DDALB -->
+ <map code="0xb53c" name="1em"/><!-- HANGUL SYLLABLE DDALS -->
+ <map code="0xb53d" name="1em"/><!-- HANGUL SYLLABLE DDALT -->
+ <map code="0xb53e" name="1em"/><!-- HANGUL SYLLABLE DDALP -->
+ <map code="0xb53f" name="1em"/><!-- HANGUL SYLLABLE DDALH -->
+ <map code="0xb540" name="1em"/><!-- HANGUL SYLLABLE DDAM -->
+ <map code="0xb541" name="1em"/><!-- HANGUL SYLLABLE DDAB -->
+ <map code="0xb542" name="1em"/><!-- HANGUL SYLLABLE DDABS -->
+ <map code="0xb543" name="1em"/><!-- HANGUL SYLLABLE DDAS -->
+ <map code="0xb544" name="1em"/><!-- HANGUL SYLLABLE DDASS -->
+ <map code="0xb545" name="1em"/><!-- HANGUL SYLLABLE DDANG -->
+ <map code="0xb546" name="1em"/><!-- HANGUL SYLLABLE DDAJ -->
+ <map code="0xb547" name="1em"/><!-- HANGUL SYLLABLE DDAC -->
+ <map code="0xb548" name="1em"/><!-- HANGUL SYLLABLE DDAK -->
+ <map code="0xb549" name="1em"/><!-- HANGUL SYLLABLE DDAT -->
+ <map code="0xb54a" name="1em"/><!-- HANGUL SYLLABLE DDAP -->
+ <map code="0xb54b" name="1em"/><!-- HANGUL SYLLABLE DDAH -->
+ <map code="0xb54c" name="1em"/><!-- HANGUL SYLLABLE DDAE -->
+ <map code="0xb54d" name="1em"/><!-- HANGUL SYLLABLE DDAEG -->
+ <map code="0xb54e" name="1em"/><!-- HANGUL SYLLABLE DDAEGG -->
+ <map code="0xb54f" name="1em"/><!-- HANGUL SYLLABLE DDAEGS -->
+ <map code="0xb550" name="1em"/><!-- HANGUL SYLLABLE DDAEN -->
+ <map code="0xb551" name="1em"/><!-- HANGUL SYLLABLE DDAENJ -->
+ <map code="0xb552" name="1em"/><!-- HANGUL SYLLABLE DDAENH -->
+ <map code="0xb553" name="1em"/><!-- HANGUL SYLLABLE DDAED -->
+ <map code="0xb554" name="1em"/><!-- HANGUL SYLLABLE DDAEL -->
+ <map code="0xb555" name="1em"/><!-- HANGUL SYLLABLE DDAELG -->
+ <map code="0xb556" name="1em"/><!-- HANGUL SYLLABLE DDAELM -->
+ <map code="0xb557" name="1em"/><!-- HANGUL SYLLABLE DDAELB -->
+ <map code="0xb558" name="1em"/><!-- HANGUL SYLLABLE DDAELS -->
+ <map code="0xb559" name="1em"/><!-- HANGUL SYLLABLE DDAELT -->
+ <map code="0xb55a" name="1em"/><!-- HANGUL SYLLABLE DDAELP -->
+ <map code="0xb55b" name="1em"/><!-- HANGUL SYLLABLE DDAELH -->
+ <map code="0xb55c" name="1em"/><!-- HANGUL SYLLABLE DDAEM -->
+ <map code="0xb55d" name="1em"/><!-- HANGUL SYLLABLE DDAEB -->
+ <map code="0xb55e" name="1em"/><!-- HANGUL SYLLABLE DDAEBS -->
+ <map code="0xb55f" name="1em"/><!-- HANGUL SYLLABLE DDAES -->
+ <map code="0xb560" name="1em"/><!-- HANGUL SYLLABLE DDAESS -->
+ <map code="0xb561" name="1em"/><!-- HANGUL SYLLABLE DDAENG -->
+ <map code="0xb562" name="1em"/><!-- HANGUL SYLLABLE DDAEJ -->
+ <map code="0xb563" name="1em"/><!-- HANGUL SYLLABLE DDAEC -->
+ <map code="0xb564" name="1em"/><!-- HANGUL SYLLABLE DDAEK -->
+ <map code="0xb565" name="1em"/><!-- HANGUL SYLLABLE DDAET -->
+ <map code="0xb566" name="1em"/><!-- HANGUL SYLLABLE DDAEP -->
+ <map code="0xb567" name="1em"/><!-- HANGUL SYLLABLE DDAEH -->
+ <map code="0xb568" name="1em"/><!-- HANGUL SYLLABLE DDYA -->
+ <map code="0xb569" name="1em"/><!-- HANGUL SYLLABLE DDYAG -->
+ <map code="0xb56a" name="1em"/><!-- HANGUL SYLLABLE DDYAGG -->
+ <map code="0xb56b" name="1em"/><!-- HANGUL SYLLABLE DDYAGS -->
+ <map code="0xb56c" name="1em"/><!-- HANGUL SYLLABLE DDYAN -->
+ <map code="0xb56d" name="1em"/><!-- HANGUL SYLLABLE DDYANJ -->
+ <map code="0xb56e" name="1em"/><!-- HANGUL SYLLABLE DDYANH -->
+ <map code="0xb56f" name="1em"/><!-- HANGUL SYLLABLE DDYAD -->
+ <map code="0xb570" name="1em"/><!-- HANGUL SYLLABLE DDYAL -->
+ <map code="0xb571" name="1em"/><!-- HANGUL SYLLABLE DDYALG -->
+ <map code="0xb572" name="1em"/><!-- HANGUL SYLLABLE DDYALM -->
+ <map code="0xb573" name="1em"/><!-- HANGUL SYLLABLE DDYALB -->
+ <map code="0xb574" name="1em"/><!-- HANGUL SYLLABLE DDYALS -->
+ <map code="0xb575" name="1em"/><!-- HANGUL SYLLABLE DDYALT -->
+ <map code="0xb576" name="1em"/><!-- HANGUL SYLLABLE DDYALP -->
+ <map code="0xb577" name="1em"/><!-- HANGUL SYLLABLE DDYALH -->
+ <map code="0xb578" name="1em"/><!-- HANGUL SYLLABLE DDYAM -->
+ <map code="0xb579" name="1em"/><!-- HANGUL SYLLABLE DDYAB -->
+ <map code="0xb57a" name="1em"/><!-- HANGUL SYLLABLE DDYABS -->
+ <map code="0xb57b" name="1em"/><!-- HANGUL SYLLABLE DDYAS -->
+ <map code="0xb57c" name="1em"/><!-- HANGUL SYLLABLE DDYASS -->
+ <map code="0xb57d" name="1em"/><!-- HANGUL SYLLABLE DDYANG -->
+ <map code="0xb57e" name="1em"/><!-- HANGUL SYLLABLE DDYAJ -->
+ <map code="0xb57f" name="1em"/><!-- HANGUL SYLLABLE DDYAC -->
+ <map code="0xb580" name="1em"/><!-- HANGUL SYLLABLE DDYAK -->
+ <map code="0xb581" name="1em"/><!-- HANGUL SYLLABLE DDYAT -->
+ <map code="0xb582" name="1em"/><!-- HANGUL SYLLABLE DDYAP -->
+ <map code="0xb583" name="1em"/><!-- HANGUL SYLLABLE DDYAH -->
+ <map code="0xb584" name="1em"/><!-- HANGUL SYLLABLE DDYAE -->
+ <map code="0xb585" name="1em"/><!-- HANGUL SYLLABLE DDYAEG -->
+ <map code="0xb586" name="1em"/><!-- HANGUL SYLLABLE DDYAEGG -->
+ <map code="0xb587" name="1em"/><!-- HANGUL SYLLABLE DDYAEGS -->
+ <map code="0xb588" name="1em"/><!-- HANGUL SYLLABLE DDYAEN -->
+ <map code="0xb589" name="1em"/><!-- HANGUL SYLLABLE DDYAENJ -->
+ <map code="0xb58a" name="1em"/><!-- HANGUL SYLLABLE DDYAENH -->
+ <map code="0xb58b" name="1em"/><!-- HANGUL SYLLABLE DDYAED -->
+ <map code="0xb58c" name="1em"/><!-- HANGUL SYLLABLE DDYAEL -->
+ <map code="0xb58d" name="1em"/><!-- HANGUL SYLLABLE DDYAELG -->
+ <map code="0xb58e" name="1em"/><!-- HANGUL SYLLABLE DDYAELM -->
+ <map code="0xb58f" name="1em"/><!-- HANGUL SYLLABLE DDYAELB -->
+ <map code="0xb590" name="1em"/><!-- HANGUL SYLLABLE DDYAELS -->
+ <map code="0xb591" name="1em"/><!-- HANGUL SYLLABLE DDYAELT -->
+ <map code="0xb592" name="1em"/><!-- HANGUL SYLLABLE DDYAELP -->
+ <map code="0xb593" name="1em"/><!-- HANGUL SYLLABLE DDYAELH -->
+ <map code="0xb594" name="1em"/><!-- HANGUL SYLLABLE DDYAEM -->
+ <map code="0xb595" name="1em"/><!-- HANGUL SYLLABLE DDYAEB -->
+ <map code="0xb596" name="1em"/><!-- HANGUL SYLLABLE DDYAEBS -->
+ <map code="0xb597" name="1em"/><!-- HANGUL SYLLABLE DDYAES -->
+ <map code="0xb598" name="1em"/><!-- HANGUL SYLLABLE DDYAESS -->
+ <map code="0xb599" name="1em"/><!-- HANGUL SYLLABLE DDYAENG -->
+ <map code="0xb59a" name="1em"/><!-- HANGUL SYLLABLE DDYAEJ -->
+ <map code="0xb59b" name="1em"/><!-- HANGUL SYLLABLE DDYAEC -->
+ <map code="0xb59c" name="1em"/><!-- HANGUL SYLLABLE DDYAEK -->
+ <map code="0xb59d" name="1em"/><!-- HANGUL SYLLABLE DDYAET -->
+ <map code="0xb59e" name="1em"/><!-- HANGUL SYLLABLE DDYAEP -->
+ <map code="0xb59f" name="1em"/><!-- HANGUL SYLLABLE DDYAEH -->
+ <map code="0xb5a0" name="1em"/><!-- HANGUL SYLLABLE DDEO -->
+ <map code="0xb5a1" name="1em"/><!-- HANGUL SYLLABLE DDEOG -->
+ <map code="0xb5a2" name="1em"/><!-- HANGUL SYLLABLE DDEOGG -->
+ <map code="0xb5a3" name="1em"/><!-- HANGUL SYLLABLE DDEOGS -->
+ <map code="0xb5a4" name="1em"/><!-- HANGUL SYLLABLE DDEON -->
+ <map code="0xb5a5" name="1em"/><!-- HANGUL SYLLABLE DDEONJ -->
+ <map code="0xb5a6" name="1em"/><!-- HANGUL SYLLABLE DDEONH -->
+ <map code="0xb5a7" name="1em"/><!-- HANGUL SYLLABLE DDEOD -->
+ <map code="0xb5a8" name="1em"/><!-- HANGUL SYLLABLE DDEOL -->
+ <map code="0xb5a9" name="1em"/><!-- HANGUL SYLLABLE DDEOLG -->
+ <map code="0xb5aa" name="1em"/><!-- HANGUL SYLLABLE DDEOLM -->
+ <map code="0xb5ab" name="1em"/><!-- HANGUL SYLLABLE DDEOLB -->
+ <map code="0xb5ac" name="1em"/><!-- HANGUL SYLLABLE DDEOLS -->
+ <map code="0xb5ad" name="1em"/><!-- HANGUL SYLLABLE DDEOLT -->
+ <map code="0xb5ae" name="1em"/><!-- HANGUL SYLLABLE DDEOLP -->
+ <map code="0xb5af" name="1em"/><!-- HANGUL SYLLABLE DDEOLH -->
+ <map code="0xb5b0" name="1em"/><!-- HANGUL SYLLABLE DDEOM -->
+ <map code="0xb5b1" name="1em"/><!-- HANGUL SYLLABLE DDEOB -->
+ <map code="0xb5b2" name="1em"/><!-- HANGUL SYLLABLE DDEOBS -->
+ <map code="0xb5b3" name="1em"/><!-- HANGUL SYLLABLE DDEOS -->
+ <map code="0xb5b4" name="1em"/><!-- HANGUL SYLLABLE DDEOSS -->
+ <map code="0xb5b5" name="1em"/><!-- HANGUL SYLLABLE DDEONG -->
+ <map code="0xb5b6" name="1em"/><!-- HANGUL SYLLABLE DDEOJ -->
+ <map code="0xb5b7" name="1em"/><!-- HANGUL SYLLABLE DDEOC -->
+ <map code="0xb5b8" name="1em"/><!-- HANGUL SYLLABLE DDEOK -->
+ <map code="0xb5b9" name="1em"/><!-- HANGUL SYLLABLE DDEOT -->
+ <map code="0xb5ba" name="1em"/><!-- HANGUL SYLLABLE DDEOP -->
+ <map code="0xb5bb" name="1em"/><!-- HANGUL SYLLABLE DDEOH -->
+ <map code="0xb5bc" name="1em"/><!-- HANGUL SYLLABLE DDE -->
+ <map code="0xb5bd" name="1em"/><!-- HANGUL SYLLABLE DDEG -->
+ <map code="0xb5be" name="1em"/><!-- HANGUL SYLLABLE DDEGG -->
+ <map code="0xb5bf" name="1em"/><!-- HANGUL SYLLABLE DDEGS -->
+ <map code="0xb5c0" name="1em"/><!-- HANGUL SYLLABLE DDEN -->
+ <map code="0xb5c1" name="1em"/><!-- HANGUL SYLLABLE DDENJ -->
+ <map code="0xb5c2" name="1em"/><!-- HANGUL SYLLABLE DDENH -->
+ <map code="0xb5c3" name="1em"/><!-- HANGUL SYLLABLE DDED -->
+ <map code="0xb5c4" name="1em"/><!-- HANGUL SYLLABLE DDEL -->
+ <map code="0xb5c5" name="1em"/><!-- HANGUL SYLLABLE DDELG -->
+ <map code="0xb5c6" name="1em"/><!-- HANGUL SYLLABLE DDELM -->
+ <map code="0xb5c7" name="1em"/><!-- HANGUL SYLLABLE DDELB -->
+ <map code="0xb5c8" name="1em"/><!-- HANGUL SYLLABLE DDELS -->
+ <map code="0xb5c9" name="1em"/><!-- HANGUL SYLLABLE DDELT -->
+ <map code="0xb5ca" name="1em"/><!-- HANGUL SYLLABLE DDELP -->
+ <map code="0xb5cb" name="1em"/><!-- HANGUL SYLLABLE DDELH -->
+ <map code="0xb5cc" name="1em"/><!-- HANGUL SYLLABLE DDEM -->
+ <map code="0xb5cd" name="1em"/><!-- HANGUL SYLLABLE DDEB -->
+ <map code="0xb5ce" name="1em"/><!-- HANGUL SYLLABLE DDEBS -->
+ <map code="0xb5cf" name="1em"/><!-- HANGUL SYLLABLE DDES -->
+ <map code="0xb5d0" name="1em"/><!-- HANGUL SYLLABLE DDESS -->
+ <map code="0xb5d1" name="1em"/><!-- HANGUL SYLLABLE DDENG -->
+ <map code="0xb5d2" name="1em"/><!-- HANGUL SYLLABLE DDEJ -->
+ <map code="0xb5d3" name="1em"/><!-- HANGUL SYLLABLE DDEC -->
+ <map code="0xb5d4" name="1em"/><!-- HANGUL SYLLABLE DDEK -->
+ <map code="0xb5d5" name="1em"/><!-- HANGUL SYLLABLE DDET -->
+ <map code="0xb5d6" name="1em"/><!-- HANGUL SYLLABLE DDEP -->
+ <map code="0xb5d7" name="1em"/><!-- HANGUL SYLLABLE DDEH -->
+ <map code="0xb5d8" name="1em"/><!-- HANGUL SYLLABLE DDYEO -->
+ <map code="0xb5d9" name="1em"/><!-- HANGUL SYLLABLE DDYEOG -->
+ <map code="0xb5da" name="1em"/><!-- HANGUL SYLLABLE DDYEOGG -->
+ <map code="0xb5db" name="1em"/><!-- HANGUL SYLLABLE DDYEOGS -->
+ <map code="0xb5dc" name="1em"/><!-- HANGUL SYLLABLE DDYEON -->
+ <map code="0xb5dd" name="1em"/><!-- HANGUL SYLLABLE DDYEONJ -->
+ <map code="0xb5de" name="1em"/><!-- HANGUL SYLLABLE DDYEONH -->
+ <map code="0xb5df" name="1em"/><!-- HANGUL SYLLABLE DDYEOD -->
+ <map code="0xb5e0" name="1em"/><!-- HANGUL SYLLABLE DDYEOL -->
+ <map code="0xb5e1" name="1em"/><!-- HANGUL SYLLABLE DDYEOLG -->
+ <map code="0xb5e2" name="1em"/><!-- HANGUL SYLLABLE DDYEOLM -->
+ <map code="0xb5e3" name="1em"/><!-- HANGUL SYLLABLE DDYEOLB -->
+ <map code="0xb5e4" name="1em"/><!-- HANGUL SYLLABLE DDYEOLS -->
+ <map code="0xb5e5" name="1em"/><!-- HANGUL SYLLABLE DDYEOLT -->
+ <map code="0xb5e6" name="1em"/><!-- HANGUL SYLLABLE DDYEOLP -->
+ <map code="0xb5e7" name="1em"/><!-- HANGUL SYLLABLE DDYEOLH -->
+ <map code="0xb5e8" name="1em"/><!-- HANGUL SYLLABLE DDYEOM -->
+ <map code="0xb5e9" name="1em"/><!-- HANGUL SYLLABLE DDYEOB -->
+ <map code="0xb5ea" name="1em"/><!-- HANGUL SYLLABLE DDYEOBS -->
+ <map code="0xb5eb" name="1em"/><!-- HANGUL SYLLABLE DDYEOS -->
+ <map code="0xb5ec" name="1em"/><!-- HANGUL SYLLABLE DDYEOSS -->
+ <map code="0xb5ed" name="1em"/><!-- HANGUL SYLLABLE DDYEONG -->
+ <map code="0xb5ee" name="1em"/><!-- HANGUL SYLLABLE DDYEOJ -->
+ <map code="0xb5ef" name="1em"/><!-- HANGUL SYLLABLE DDYEOC -->
+ <map code="0xb5f0" name="1em"/><!-- HANGUL SYLLABLE DDYEOK -->
+ <map code="0xb5f1" name="1em"/><!-- HANGUL SYLLABLE DDYEOT -->
+ <map code="0xb5f2" name="1em"/><!-- HANGUL SYLLABLE DDYEOP -->
+ <map code="0xb5f3" name="1em"/><!-- HANGUL SYLLABLE DDYEOH -->
+ <map code="0xb5f4" name="1em"/><!-- HANGUL SYLLABLE DDYE -->
+ <map code="0xb5f5" name="1em"/><!-- HANGUL SYLLABLE DDYEG -->
+ <map code="0xb5f6" name="1em"/><!-- HANGUL SYLLABLE DDYEGG -->
+ <map code="0xb5f7" name="1em"/><!-- HANGUL SYLLABLE DDYEGS -->
+ <map code="0xb5f8" name="1em"/><!-- HANGUL SYLLABLE DDYEN -->
+ <map code="0xb5f9" name="1em"/><!-- HANGUL SYLLABLE DDYENJ -->
+ <map code="0xb5fa" name="1em"/><!-- HANGUL SYLLABLE DDYENH -->
+ <map code="0xb5fb" name="1em"/><!-- HANGUL SYLLABLE DDYED -->
+ <map code="0xb5fc" name="1em"/><!-- HANGUL SYLLABLE DDYEL -->
+ <map code="0xb5fd" name="1em"/><!-- HANGUL SYLLABLE DDYELG -->
+ <map code="0xb5fe" name="1em"/><!-- HANGUL SYLLABLE DDYELM -->
+ <map code="0xb5ff" name="1em"/><!-- HANGUL SYLLABLE DDYELB -->
+ <map code="0xb600" name="1em"/><!-- HANGUL SYLLABLE DDYELS -->
+ <map code="0xb601" name="1em"/><!-- HANGUL SYLLABLE DDYELT -->
+ <map code="0xb602" name="1em"/><!-- HANGUL SYLLABLE DDYELP -->
+ <map code="0xb603" name="1em"/><!-- HANGUL SYLLABLE DDYELH -->
+ <map code="0xb604" name="1em"/><!-- HANGUL SYLLABLE DDYEM -->
+ <map code="0xb605" name="1em"/><!-- HANGUL SYLLABLE DDYEB -->
+ <map code="0xb606" name="1em"/><!-- HANGUL SYLLABLE DDYEBS -->
+ <map code="0xb607" name="1em"/><!-- HANGUL SYLLABLE DDYES -->
+ <map code="0xb608" name="1em"/><!-- HANGUL SYLLABLE DDYESS -->
+ <map code="0xb609" name="1em"/><!-- HANGUL SYLLABLE DDYENG -->
+ <map code="0xb60a" name="1em"/><!-- HANGUL SYLLABLE DDYEJ -->
+ <map code="0xb60b" name="1em"/><!-- HANGUL SYLLABLE DDYEC -->
+ <map code="0xb60c" name="1em"/><!-- HANGUL SYLLABLE DDYEK -->
+ <map code="0xb60d" name="1em"/><!-- HANGUL SYLLABLE DDYET -->
+ <map code="0xb60e" name="1em"/><!-- HANGUL SYLLABLE DDYEP -->
+ <map code="0xb60f" name="1em"/><!-- HANGUL SYLLABLE DDYEH -->
+ <map code="0xb610" name="1em"/><!-- HANGUL SYLLABLE DDO -->
+ <map code="0xb611" name="1em"/><!-- HANGUL SYLLABLE DDOG -->
+ <map code="0xb612" name="1em"/><!-- HANGUL SYLLABLE DDOGG -->
+ <map code="0xb613" name="1em"/><!-- HANGUL SYLLABLE DDOGS -->
+ <map code="0xb614" name="1em"/><!-- HANGUL SYLLABLE DDON -->
+ <map code="0xb615" name="1em"/><!-- HANGUL SYLLABLE DDONJ -->
+ <map code="0xb616" name="1em"/><!-- HANGUL SYLLABLE DDONH -->
+ <map code="0xb617" name="1em"/><!-- HANGUL SYLLABLE DDOD -->
+ <map code="0xb618" name="1em"/><!-- HANGUL SYLLABLE DDOL -->
+ <map code="0xb619" name="1em"/><!-- HANGUL SYLLABLE DDOLG -->
+ <map code="0xb61a" name="1em"/><!-- HANGUL SYLLABLE DDOLM -->
+ <map code="0xb61b" name="1em"/><!-- HANGUL SYLLABLE DDOLB -->
+ <map code="0xb61c" name="1em"/><!-- HANGUL SYLLABLE DDOLS -->
+ <map code="0xb61d" name="1em"/><!-- HANGUL SYLLABLE DDOLT -->
+ <map code="0xb61e" name="1em"/><!-- HANGUL SYLLABLE DDOLP -->
+ <map code="0xb61f" name="1em"/><!-- HANGUL SYLLABLE DDOLH -->
+ <map code="0xb620" name="1em"/><!-- HANGUL SYLLABLE DDOM -->
+ <map code="0xb621" name="1em"/><!-- HANGUL SYLLABLE DDOB -->
+ <map code="0xb622" name="1em"/><!-- HANGUL SYLLABLE DDOBS -->
+ <map code="0xb623" name="1em"/><!-- HANGUL SYLLABLE DDOS -->
+ <map code="0xb624" name="1em"/><!-- HANGUL SYLLABLE DDOSS -->
+ <map code="0xb625" name="1em"/><!-- HANGUL SYLLABLE DDONG -->
+ <map code="0xb626" name="1em"/><!-- HANGUL SYLLABLE DDOJ -->
+ <map code="0xb627" name="1em"/><!-- HANGUL SYLLABLE DDOC -->
+ <map code="0xb628" name="1em"/><!-- HANGUL SYLLABLE DDOK -->
+ <map code="0xb629" name="1em"/><!-- HANGUL SYLLABLE DDOT -->
+ <map code="0xb62a" name="1em"/><!-- HANGUL SYLLABLE DDOP -->
+ <map code="0xb62b" name="1em"/><!-- HANGUL SYLLABLE DDOH -->
+ <map code="0xb62c" name="1em"/><!-- HANGUL SYLLABLE DDWA -->
+ <map code="0xb62d" name="1em"/><!-- HANGUL SYLLABLE DDWAG -->
+ <map code="0xb62e" name="1em"/><!-- HANGUL SYLLABLE DDWAGG -->
+ <map code="0xb62f" name="1em"/><!-- HANGUL SYLLABLE DDWAGS -->
+ <map code="0xb630" name="1em"/><!-- HANGUL SYLLABLE DDWAN -->
+ <map code="0xb631" name="1em"/><!-- HANGUL SYLLABLE DDWANJ -->
+ <map code="0xb632" name="1em"/><!-- HANGUL SYLLABLE DDWANH -->
+ <map code="0xb633" name="1em"/><!-- HANGUL SYLLABLE DDWAD -->
+ <map code="0xb634" name="1em"/><!-- HANGUL SYLLABLE DDWAL -->
+ <map code="0xb635" name="1em"/><!-- HANGUL SYLLABLE DDWALG -->
+ <map code="0xb636" name="1em"/><!-- HANGUL SYLLABLE DDWALM -->
+ <map code="0xb637" name="1em"/><!-- HANGUL SYLLABLE DDWALB -->
+ <map code="0xb638" name="1em"/><!-- HANGUL SYLLABLE DDWALS -->
+ <map code="0xb639" name="1em"/><!-- HANGUL SYLLABLE DDWALT -->
+ <map code="0xb63a" name="1em"/><!-- HANGUL SYLLABLE DDWALP -->
+ <map code="0xb63b" name="1em"/><!-- HANGUL SYLLABLE DDWALH -->
+ <map code="0xb63c" name="1em"/><!-- HANGUL SYLLABLE DDWAM -->
+ <map code="0xb63d" name="1em"/><!-- HANGUL SYLLABLE DDWAB -->
+ <map code="0xb63e" name="1em"/><!-- HANGUL SYLLABLE DDWABS -->
+ <map code="0xb63f" name="1em"/><!-- HANGUL SYLLABLE DDWAS -->
+ <map code="0xb640" name="1em"/><!-- HANGUL SYLLABLE DDWASS -->
+ <map code="0xb641" name="1em"/><!-- HANGUL SYLLABLE DDWANG -->
+ <map code="0xb642" name="1em"/><!-- HANGUL SYLLABLE DDWAJ -->
+ <map code="0xb643" name="1em"/><!-- HANGUL SYLLABLE DDWAC -->
+ <map code="0xb644" name="1em"/><!-- HANGUL SYLLABLE DDWAK -->
+ <map code="0xb645" name="1em"/><!-- HANGUL SYLLABLE DDWAT -->
+ <map code="0xb646" name="1em"/><!-- HANGUL SYLLABLE DDWAP -->
+ <map code="0xb647" name="1em"/><!-- HANGUL SYLLABLE DDWAH -->
+ <map code="0xb648" name="1em"/><!-- HANGUL SYLLABLE DDWAE -->
+ <map code="0xb649" name="1em"/><!-- HANGUL SYLLABLE DDWAEG -->
+ <map code="0xb64a" name="1em"/><!-- HANGUL SYLLABLE DDWAEGG -->
+ <map code="0xb64b" name="1em"/><!-- HANGUL SYLLABLE DDWAEGS -->
+ <map code="0xb64c" name="1em"/><!-- HANGUL SYLLABLE DDWAEN -->
+ <map code="0xb64d" name="1em"/><!-- HANGUL SYLLABLE DDWAENJ -->
+ <map code="0xb64e" name="1em"/><!-- HANGUL SYLLABLE DDWAENH -->
+ <map code="0xb64f" name="1em"/><!-- HANGUL SYLLABLE DDWAED -->
+ <map code="0xb650" name="1em"/><!-- HANGUL SYLLABLE DDWAEL -->
+ <map code="0xb651" name="1em"/><!-- HANGUL SYLLABLE DDWAELG -->
+ <map code="0xb652" name="1em"/><!-- HANGUL SYLLABLE DDWAELM -->
+ <map code="0xb653" name="1em"/><!-- HANGUL SYLLABLE DDWAELB -->
+ <map code="0xb654" name="1em"/><!-- HANGUL SYLLABLE DDWAELS -->
+ <map code="0xb655" name="1em"/><!-- HANGUL SYLLABLE DDWAELT -->
+ <map code="0xb656" name="1em"/><!-- HANGUL SYLLABLE DDWAELP -->
+ <map code="0xb657" name="1em"/><!-- HANGUL SYLLABLE DDWAELH -->
+ <map code="0xb658" name="1em"/><!-- HANGUL SYLLABLE DDWAEM -->
+ <map code="0xb659" name="1em"/><!-- HANGUL SYLLABLE DDWAEB -->
+ <map code="0xb65a" name="1em"/><!-- HANGUL SYLLABLE DDWAEBS -->
+ <map code="0xb65b" name="1em"/><!-- HANGUL SYLLABLE DDWAES -->
+ <map code="0xb65c" name="1em"/><!-- HANGUL SYLLABLE DDWAESS -->
+ <map code="0xb65d" name="1em"/><!-- HANGUL SYLLABLE DDWAENG -->
+ <map code="0xb65e" name="1em"/><!-- HANGUL SYLLABLE DDWAEJ -->
+ <map code="0xb65f" name="1em"/><!-- HANGUL SYLLABLE DDWAEC -->
+ <map code="0xb660" name="1em"/><!-- HANGUL SYLLABLE DDWAEK -->
+ <map code="0xb661" name="1em"/><!-- HANGUL SYLLABLE DDWAET -->
+ <map code="0xb662" name="1em"/><!-- HANGUL SYLLABLE DDWAEP -->
+ <map code="0xb663" name="1em"/><!-- HANGUL SYLLABLE DDWAEH -->
+ <map code="0xb664" name="1em"/><!-- HANGUL SYLLABLE DDOE -->
+ <map code="0xb665" name="1em"/><!-- HANGUL SYLLABLE DDOEG -->
+ <map code="0xb666" name="1em"/><!-- HANGUL SYLLABLE DDOEGG -->
+ <map code="0xb667" name="1em"/><!-- HANGUL SYLLABLE DDOEGS -->
+ <map code="0xb668" name="1em"/><!-- HANGUL SYLLABLE DDOEN -->
+ <map code="0xb669" name="1em"/><!-- HANGUL SYLLABLE DDOENJ -->
+ <map code="0xb66a" name="1em"/><!-- HANGUL SYLLABLE DDOENH -->
+ <map code="0xb66b" name="1em"/><!-- HANGUL SYLLABLE DDOED -->
+ <map code="0xb66c" name="1em"/><!-- HANGUL SYLLABLE DDOEL -->
+ <map code="0xb66d" name="1em"/><!-- HANGUL SYLLABLE DDOELG -->
+ <map code="0xb66e" name="1em"/><!-- HANGUL SYLLABLE DDOELM -->
+ <map code="0xb66f" name="1em"/><!-- HANGUL SYLLABLE DDOELB -->
+ <map code="0xb670" name="1em"/><!-- HANGUL SYLLABLE DDOELS -->
+ <map code="0xb671" name="1em"/><!-- HANGUL SYLLABLE DDOELT -->
+ <map code="0xb672" name="1em"/><!-- HANGUL SYLLABLE DDOELP -->
+ <map code="0xb673" name="1em"/><!-- HANGUL SYLLABLE DDOELH -->
+ <map code="0xb674" name="1em"/><!-- HANGUL SYLLABLE DDOEM -->
+ <map code="0xb675" name="1em"/><!-- HANGUL SYLLABLE DDOEB -->
+ <map code="0xb676" name="1em"/><!-- HANGUL SYLLABLE DDOEBS -->
+ <map code="0xb677" name="1em"/><!-- HANGUL SYLLABLE DDOES -->
+ <map code="0xb678" name="1em"/><!-- HANGUL SYLLABLE DDOESS -->
+ <map code="0xb679" name="1em"/><!-- HANGUL SYLLABLE DDOENG -->
+ <map code="0xb67a" name="1em"/><!-- HANGUL SYLLABLE DDOEJ -->
+ <map code="0xb67b" name="1em"/><!-- HANGUL SYLLABLE DDOEC -->
+ <map code="0xb67c" name="1em"/><!-- HANGUL SYLLABLE DDOEK -->
+ <map code="0xb67d" name="1em"/><!-- HANGUL SYLLABLE DDOET -->
+ <map code="0xb67e" name="1em"/><!-- HANGUL SYLLABLE DDOEP -->
+ <map code="0xb67f" name="1em"/><!-- HANGUL SYLLABLE DDOEH -->
+ <map code="0xb680" name="1em"/><!-- HANGUL SYLLABLE DDYO -->
+ <map code="0xb681" name="1em"/><!-- HANGUL SYLLABLE DDYOG -->
+ <map code="0xb682" name="1em"/><!-- HANGUL SYLLABLE DDYOGG -->
+ <map code="0xb683" name="1em"/><!-- HANGUL SYLLABLE DDYOGS -->
+ <map code="0xb684" name="1em"/><!-- HANGUL SYLLABLE DDYON -->
+ <map code="0xb685" name="1em"/><!-- HANGUL SYLLABLE DDYONJ -->
+ <map code="0xb686" name="1em"/><!-- HANGUL SYLLABLE DDYONH -->
+ <map code="0xb687" name="1em"/><!-- HANGUL SYLLABLE DDYOD -->
+ <map code="0xb688" name="1em"/><!-- HANGUL SYLLABLE DDYOL -->
+ <map code="0xb689" name="1em"/><!-- HANGUL SYLLABLE DDYOLG -->
+ <map code="0xb68a" name="1em"/><!-- HANGUL SYLLABLE DDYOLM -->
+ <map code="0xb68b" name="1em"/><!-- HANGUL SYLLABLE DDYOLB -->
+ <map code="0xb68c" name="1em"/><!-- HANGUL SYLLABLE DDYOLS -->
+ <map code="0xb68d" name="1em"/><!-- HANGUL SYLLABLE DDYOLT -->
+ <map code="0xb68e" name="1em"/><!-- HANGUL SYLLABLE DDYOLP -->
+ <map code="0xb68f" name="1em"/><!-- HANGUL SYLLABLE DDYOLH -->
+ <map code="0xb690" name="1em"/><!-- HANGUL SYLLABLE DDYOM -->
+ <map code="0xb691" name="1em"/><!-- HANGUL SYLLABLE DDYOB -->
+ <map code="0xb692" name="1em"/><!-- HANGUL SYLLABLE DDYOBS -->
+ <map code="0xb693" name="1em"/><!-- HANGUL SYLLABLE DDYOS -->
+ <map code="0xb694" name="1em"/><!-- HANGUL SYLLABLE DDYOSS -->
+ <map code="0xb695" name="1em"/><!-- HANGUL SYLLABLE DDYONG -->
+ <map code="0xb696" name="1em"/><!-- HANGUL SYLLABLE DDYOJ -->
+ <map code="0xb697" name="1em"/><!-- HANGUL SYLLABLE DDYOC -->
+ <map code="0xb698" name="1em"/><!-- HANGUL SYLLABLE DDYOK -->
+ <map code="0xb699" name="1em"/><!-- HANGUL SYLLABLE DDYOT -->
+ <map code="0xb69a" name="1em"/><!-- HANGUL SYLLABLE DDYOP -->
+ <map code="0xb69b" name="1em"/><!-- HANGUL SYLLABLE DDYOH -->
+ <map code="0xb69c" name="1em"/><!-- HANGUL SYLLABLE DDU -->
+ <map code="0xb69d" name="1em"/><!-- HANGUL SYLLABLE DDUG -->
+ <map code="0xb69e" name="1em"/><!-- HANGUL SYLLABLE DDUGG -->
+ <map code="0xb69f" name="1em"/><!-- HANGUL SYLLABLE DDUGS -->
+ <map code="0xb6a0" name="1em"/><!-- HANGUL SYLLABLE DDUN -->
+ <map code="0xb6a1" name="1em"/><!-- HANGUL SYLLABLE DDUNJ -->
+ <map code="0xb6a2" name="1em"/><!-- HANGUL SYLLABLE DDUNH -->
+ <map code="0xb6a3" name="1em"/><!-- HANGUL SYLLABLE DDUD -->
+ <map code="0xb6a4" name="1em"/><!-- HANGUL SYLLABLE DDUL -->
+ <map code="0xb6a5" name="1em"/><!-- HANGUL SYLLABLE DDULG -->
+ <map code="0xb6a6" name="1em"/><!-- HANGUL SYLLABLE DDULM -->
+ <map code="0xb6a7" name="1em"/><!-- HANGUL SYLLABLE DDULB -->
+ <map code="0xb6a8" name="1em"/><!-- HANGUL SYLLABLE DDULS -->
+ <map code="0xb6a9" name="1em"/><!-- HANGUL SYLLABLE DDULT -->
+ <map code="0xb6aa" name="1em"/><!-- HANGUL SYLLABLE DDULP -->
+ <map code="0xb6ab" name="1em"/><!-- HANGUL SYLLABLE DDULH -->
+ <map code="0xb6ac" name="1em"/><!-- HANGUL SYLLABLE DDUM -->
+ <map code="0xb6ad" name="1em"/><!-- HANGUL SYLLABLE DDUB -->
+ <map code="0xb6ae" name="1em"/><!-- HANGUL SYLLABLE DDUBS -->
+ <map code="0xb6af" name="1em"/><!-- HANGUL SYLLABLE DDUS -->
+ <map code="0xb6b0" name="1em"/><!-- HANGUL SYLLABLE DDUSS -->
+ <map code="0xb6b1" name="1em"/><!-- HANGUL SYLLABLE DDUNG -->
+ <map code="0xb6b2" name="1em"/><!-- HANGUL SYLLABLE DDUJ -->
+ <map code="0xb6b3" name="1em"/><!-- HANGUL SYLLABLE DDUC -->
+ <map code="0xb6b4" name="1em"/><!-- HANGUL SYLLABLE DDUK -->
+ <map code="0xb6b5" name="1em"/><!-- HANGUL SYLLABLE DDUT -->
+ <map code="0xb6b6" name="1em"/><!-- HANGUL SYLLABLE DDUP -->
+ <map code="0xb6b7" name="1em"/><!-- HANGUL SYLLABLE DDUH -->
+ <map code="0xb6b8" name="1em"/><!-- HANGUL SYLLABLE DDWEO -->
+ <map code="0xb6b9" name="1em"/><!-- HANGUL SYLLABLE DDWEOG -->
+ <map code="0xb6ba" name="1em"/><!-- HANGUL SYLLABLE DDWEOGG -->
+ <map code="0xb6bb" name="1em"/><!-- HANGUL SYLLABLE DDWEOGS -->
+ <map code="0xb6bc" name="1em"/><!-- HANGUL SYLLABLE DDWEON -->
+ <map code="0xb6bd" name="1em"/><!-- HANGUL SYLLABLE DDWEONJ -->
+ <map code="0xb6be" name="1em"/><!-- HANGUL SYLLABLE DDWEONH -->
+ <map code="0xb6bf" name="1em"/><!-- HANGUL SYLLABLE DDWEOD -->
+ <map code="0xb6c0" name="1em"/><!-- HANGUL SYLLABLE DDWEOL -->
+ <map code="0xb6c1" name="1em"/><!-- HANGUL SYLLABLE DDWEOLG -->
+ <map code="0xb6c2" name="1em"/><!-- HANGUL SYLLABLE DDWEOLM -->
+ <map code="0xb6c3" name="1em"/><!-- HANGUL SYLLABLE DDWEOLB -->
+ <map code="0xb6c4" name="1em"/><!-- HANGUL SYLLABLE DDWEOLS -->
+ <map code="0xb6c5" name="1em"/><!-- HANGUL SYLLABLE DDWEOLT -->
+ <map code="0xb6c6" name="1em"/><!-- HANGUL SYLLABLE DDWEOLP -->
+ <map code="0xb6c7" name="1em"/><!-- HANGUL SYLLABLE DDWEOLH -->
+ <map code="0xb6c8" name="1em"/><!-- HANGUL SYLLABLE DDWEOM -->
+ <map code="0xb6c9" name="1em"/><!-- HANGUL SYLLABLE DDWEOB -->
+ <map code="0xb6ca" name="1em"/><!-- HANGUL SYLLABLE DDWEOBS -->
+ <map code="0xb6cb" name="1em"/><!-- HANGUL SYLLABLE DDWEOS -->
+ <map code="0xb6cc" name="1em"/><!-- HANGUL SYLLABLE DDWEOSS -->
+ <map code="0xb6cd" name="1em"/><!-- HANGUL SYLLABLE DDWEONG -->
+ <map code="0xb6ce" name="1em"/><!-- HANGUL SYLLABLE DDWEOJ -->
+ <map code="0xb6cf" name="1em"/><!-- HANGUL SYLLABLE DDWEOC -->
+ <map code="0xb6d0" name="1em"/><!-- HANGUL SYLLABLE DDWEOK -->
+ <map code="0xb6d1" name="1em"/><!-- HANGUL SYLLABLE DDWEOT -->
+ <map code="0xb6d2" name="1em"/><!-- HANGUL SYLLABLE DDWEOP -->
+ <map code="0xb6d3" name="1em"/><!-- HANGUL SYLLABLE DDWEOH -->
+ <map code="0xb6d4" name="1em"/><!-- HANGUL SYLLABLE DDWE -->
+ <map code="0xb6d5" name="1em"/><!-- HANGUL SYLLABLE DDWEG -->
+ <map code="0xb6d6" name="1em"/><!-- HANGUL SYLLABLE DDWEGG -->
+ <map code="0xb6d7" name="1em"/><!-- HANGUL SYLLABLE DDWEGS -->
+ <map code="0xb6d8" name="1em"/><!-- HANGUL SYLLABLE DDWEN -->
+ <map code="0xb6d9" name="1em"/><!-- HANGUL SYLLABLE DDWENJ -->
+ <map code="0xb6da" name="1em"/><!-- HANGUL SYLLABLE DDWENH -->
+ <map code="0xb6db" name="1em"/><!-- HANGUL SYLLABLE DDWED -->
+ <map code="0xb6dc" name="1em"/><!-- HANGUL SYLLABLE DDWEL -->
+ <map code="0xb6dd" name="1em"/><!-- HANGUL SYLLABLE DDWELG -->
+ <map code="0xb6de" name="1em"/><!-- HANGUL SYLLABLE DDWELM -->
+ <map code="0xb6df" name="1em"/><!-- HANGUL SYLLABLE DDWELB -->
+ <map code="0xb6e0" name="1em"/><!-- HANGUL SYLLABLE DDWELS -->
+ <map code="0xb6e1" name="1em"/><!-- HANGUL SYLLABLE DDWELT -->
+ <map code="0xb6e2" name="1em"/><!-- HANGUL SYLLABLE DDWELP -->
+ <map code="0xb6e3" name="1em"/><!-- HANGUL SYLLABLE DDWELH -->
+ <map code="0xb6e4" name="1em"/><!-- HANGUL SYLLABLE DDWEM -->
+ <map code="0xb6e5" name="1em"/><!-- HANGUL SYLLABLE DDWEB -->
+ <map code="0xb6e6" name="1em"/><!-- HANGUL SYLLABLE DDWEBS -->
+ <map code="0xb6e7" name="1em"/><!-- HANGUL SYLLABLE DDWES -->
+ <map code="0xb6e8" name="1em"/><!-- HANGUL SYLLABLE DDWESS -->
+ <map code="0xb6e9" name="1em"/><!-- HANGUL SYLLABLE DDWENG -->
+ <map code="0xb6ea" name="1em"/><!-- HANGUL SYLLABLE DDWEJ -->
+ <map code="0xb6eb" name="1em"/><!-- HANGUL SYLLABLE DDWEC -->
+ <map code="0xb6ec" name="1em"/><!-- HANGUL SYLLABLE DDWEK -->
+ <map code="0xb6ed" name="1em"/><!-- HANGUL SYLLABLE DDWET -->
+ <map code="0xb6ee" name="1em"/><!-- HANGUL SYLLABLE DDWEP -->
+ <map code="0xb6ef" name="1em"/><!-- HANGUL SYLLABLE DDWEH -->
+ <map code="0xb6f0" name="1em"/><!-- HANGUL SYLLABLE DDWI -->
+ <map code="0xb6f1" name="1em"/><!-- HANGUL SYLLABLE DDWIG -->
+ <map code="0xb6f2" name="1em"/><!-- HANGUL SYLLABLE DDWIGG -->
+ <map code="0xb6f3" name="1em"/><!-- HANGUL SYLLABLE DDWIGS -->
+ <map code="0xb6f4" name="1em"/><!-- HANGUL SYLLABLE DDWIN -->
+ <map code="0xb6f5" name="1em"/><!-- HANGUL SYLLABLE DDWINJ -->
+ <map code="0xb6f6" name="1em"/><!-- HANGUL SYLLABLE DDWINH -->
+ <map code="0xb6f7" name="1em"/><!-- HANGUL SYLLABLE DDWID -->
+ <map code="0xb6f8" name="1em"/><!-- HANGUL SYLLABLE DDWIL -->
+ <map code="0xb6f9" name="1em"/><!-- HANGUL SYLLABLE DDWILG -->
+ <map code="0xb6fa" name="1em"/><!-- HANGUL SYLLABLE DDWILM -->
+ <map code="0xb6fb" name="1em"/><!-- HANGUL SYLLABLE DDWILB -->
+ <map code="0xb6fc" name="1em"/><!-- HANGUL SYLLABLE DDWILS -->
+ <map code="0xb6fd" name="1em"/><!-- HANGUL SYLLABLE DDWILT -->
+ <map code="0xb6fe" name="1em"/><!-- HANGUL SYLLABLE DDWILP -->
+ <map code="0xb6ff" name="1em"/><!-- HANGUL SYLLABLE DDWILH -->
+ <map code="0xb700" name="1em"/><!-- HANGUL SYLLABLE DDWIM -->
+ <map code="0xb701" name="1em"/><!-- HANGUL SYLLABLE DDWIB -->
+ <map code="0xb702" name="1em"/><!-- HANGUL SYLLABLE DDWIBS -->
+ <map code="0xb703" name="1em"/><!-- HANGUL SYLLABLE DDWIS -->
+ <map code="0xb704" name="1em"/><!-- HANGUL SYLLABLE DDWISS -->
+ <map code="0xb705" name="1em"/><!-- HANGUL SYLLABLE DDWING -->
+ <map code="0xb706" name="1em"/><!-- HANGUL SYLLABLE DDWIJ -->
+ <map code="0xb707" name="1em"/><!-- HANGUL SYLLABLE DDWIC -->
+ <map code="0xb708" name="1em"/><!-- HANGUL SYLLABLE DDWIK -->
+ <map code="0xb709" name="1em"/><!-- HANGUL SYLLABLE DDWIT -->
+ <map code="0xb70a" name="1em"/><!-- HANGUL SYLLABLE DDWIP -->
+ <map code="0xb70b" name="1em"/><!-- HANGUL SYLLABLE DDWIH -->
+ <map code="0xb70c" name="1em"/><!-- HANGUL SYLLABLE DDYU -->
+ <map code="0xb70d" name="1em"/><!-- HANGUL SYLLABLE DDYUG -->
+ <map code="0xb70e" name="1em"/><!-- HANGUL SYLLABLE DDYUGG -->
+ <map code="0xb70f" name="1em"/><!-- HANGUL SYLLABLE DDYUGS -->
+ <map code="0xb710" name="1em"/><!-- HANGUL SYLLABLE DDYUN -->
+ <map code="0xb711" name="1em"/><!-- HANGUL SYLLABLE DDYUNJ -->
+ <map code="0xb712" name="1em"/><!-- HANGUL SYLLABLE DDYUNH -->
+ <map code="0xb713" name="1em"/><!-- HANGUL SYLLABLE DDYUD -->
+ <map code="0xb714" name="1em"/><!-- HANGUL SYLLABLE DDYUL -->
+ <map code="0xb715" name="1em"/><!-- HANGUL SYLLABLE DDYULG -->
+ <map code="0xb716" name="1em"/><!-- HANGUL SYLLABLE DDYULM -->
+ <map code="0xb717" name="1em"/><!-- HANGUL SYLLABLE DDYULB -->
+ <map code="0xb718" name="1em"/><!-- HANGUL SYLLABLE DDYULS -->
+ <map code="0xb719" name="1em"/><!-- HANGUL SYLLABLE DDYULT -->
+ <map code="0xb71a" name="1em"/><!-- HANGUL SYLLABLE DDYULP -->
+ <map code="0xb71b" name="1em"/><!-- HANGUL SYLLABLE DDYULH -->
+ <map code="0xb71c" name="1em"/><!-- HANGUL SYLLABLE DDYUM -->
+ <map code="0xb71d" name="1em"/><!-- HANGUL SYLLABLE DDYUB -->
+ <map code="0xb71e" name="1em"/><!-- HANGUL SYLLABLE DDYUBS -->
+ <map code="0xb71f" name="1em"/><!-- HANGUL SYLLABLE DDYUS -->
+ <map code="0xb720" name="1em"/><!-- HANGUL SYLLABLE DDYUSS -->
+ <map code="0xb721" name="1em"/><!-- HANGUL SYLLABLE DDYUNG -->
+ <map code="0xb722" name="1em"/><!-- HANGUL SYLLABLE DDYUJ -->
+ <map code="0xb723" name="1em"/><!-- HANGUL SYLLABLE DDYUC -->
+ <map code="0xb724" name="1em"/><!-- HANGUL SYLLABLE DDYUK -->
+ <map code="0xb725" name="1em"/><!-- HANGUL SYLLABLE DDYUT -->
+ <map code="0xb726" name="1em"/><!-- HANGUL SYLLABLE DDYUP -->
+ <map code="0xb727" name="1em"/><!-- HANGUL SYLLABLE DDYUH -->
+ <map code="0xb728" name="1em"/><!-- HANGUL SYLLABLE DDEU -->
+ <map code="0xb729" name="1em"/><!-- HANGUL SYLLABLE DDEUG -->
+ <map code="0xb72a" name="1em"/><!-- HANGUL SYLLABLE DDEUGG -->
+ <map code="0xb72b" name="1em"/><!-- HANGUL SYLLABLE DDEUGS -->
+ <map code="0xb72c" name="1em"/><!-- HANGUL SYLLABLE DDEUN -->
+ <map code="0xb72d" name="1em"/><!-- HANGUL SYLLABLE DDEUNJ -->
+ <map code="0xb72e" name="1em"/><!-- HANGUL SYLLABLE DDEUNH -->
+ <map code="0xb72f" name="1em"/><!-- HANGUL SYLLABLE DDEUD -->
+ <map code="0xb730" name="1em"/><!-- HANGUL SYLLABLE DDEUL -->
+ <map code="0xb731" name="1em"/><!-- HANGUL SYLLABLE DDEULG -->
+ <map code="0xb732" name="1em"/><!-- HANGUL SYLLABLE DDEULM -->
+ <map code="0xb733" name="1em"/><!-- HANGUL SYLLABLE DDEULB -->
+ <map code="0xb734" name="1em"/><!-- HANGUL SYLLABLE DDEULS -->
+ <map code="0xb735" name="1em"/><!-- HANGUL SYLLABLE DDEULT -->
+ <map code="0xb736" name="1em"/><!-- HANGUL SYLLABLE DDEULP -->
+ <map code="0xb737" name="1em"/><!-- HANGUL SYLLABLE DDEULH -->
+ <map code="0xb738" name="1em"/><!-- HANGUL SYLLABLE DDEUM -->
+ <map code="0xb739" name="1em"/><!-- HANGUL SYLLABLE DDEUB -->
+ <map code="0xb73a" name="1em"/><!-- HANGUL SYLLABLE DDEUBS -->
+ <map code="0xb73b" name="1em"/><!-- HANGUL SYLLABLE DDEUS -->
+ <map code="0xb73c" name="1em"/><!-- HANGUL SYLLABLE DDEUSS -->
+ <map code="0xb73d" name="1em"/><!-- HANGUL SYLLABLE DDEUNG -->
+ <map code="0xb73e" name="1em"/><!-- HANGUL SYLLABLE DDEUJ -->
+ <map code="0xb73f" name="1em"/><!-- HANGUL SYLLABLE DDEUC -->
+ <map code="0xb740" name="1em"/><!-- HANGUL SYLLABLE DDEUK -->
+ <map code="0xb741" name="1em"/><!-- HANGUL SYLLABLE DDEUT -->
+ <map code="0xb742" name="1em"/><!-- HANGUL SYLLABLE DDEUP -->
+ <map code="0xb743" name="1em"/><!-- HANGUL SYLLABLE DDEUH -->
+ <map code="0xb744" name="1em"/><!-- HANGUL SYLLABLE DDYI -->
+ <map code="0xb745" name="1em"/><!-- HANGUL SYLLABLE DDYIG -->
+ <map code="0xb746" name="1em"/><!-- HANGUL SYLLABLE DDYIGG -->
+ <map code="0xb747" name="1em"/><!-- HANGUL SYLLABLE DDYIGS -->
+ <map code="0xb748" name="1em"/><!-- HANGUL SYLLABLE DDYIN -->
+ <map code="0xb749" name="1em"/><!-- HANGUL SYLLABLE DDYINJ -->
+ <map code="0xb74a" name="1em"/><!-- HANGUL SYLLABLE DDYINH -->
+ <map code="0xb74b" name="1em"/><!-- HANGUL SYLLABLE DDYID -->
+ <map code="0xb74c" name="1em"/><!-- HANGUL SYLLABLE DDYIL -->
+ <map code="0xb74d" name="1em"/><!-- HANGUL SYLLABLE DDYILG -->
+ <map code="0xb74e" name="1em"/><!-- HANGUL SYLLABLE DDYILM -->
+ <map code="0xb74f" name="1em"/><!-- HANGUL SYLLABLE DDYILB -->
+ <map code="0xb750" name="1em"/><!-- HANGUL SYLLABLE DDYILS -->
+ <map code="0xb751" name="1em"/><!-- HANGUL SYLLABLE DDYILT -->
+ <map code="0xb752" name="1em"/><!-- HANGUL SYLLABLE DDYILP -->
+ <map code="0xb753" name="1em"/><!-- HANGUL SYLLABLE DDYILH -->
+ <map code="0xb754" name="1em"/><!-- HANGUL SYLLABLE DDYIM -->
+ <map code="0xb755" name="1em"/><!-- HANGUL SYLLABLE DDYIB -->
+ <map code="0xb756" name="1em"/><!-- HANGUL SYLLABLE DDYIBS -->
+ <map code="0xb757" name="1em"/><!-- HANGUL SYLLABLE DDYIS -->
+ <map code="0xb758" name="1em"/><!-- HANGUL SYLLABLE DDYISS -->
+ <map code="0xb759" name="1em"/><!-- HANGUL SYLLABLE DDYING -->
+ <map code="0xb75a" name="1em"/><!-- HANGUL SYLLABLE DDYIJ -->
+ <map code="0xb75b" name="1em"/><!-- HANGUL SYLLABLE DDYIC -->
+ <map code="0xb75c" name="1em"/><!-- HANGUL SYLLABLE DDYIK -->
+ <map code="0xb75d" name="1em"/><!-- HANGUL SYLLABLE DDYIT -->
+ <map code="0xb75e" name="1em"/><!-- HANGUL SYLLABLE DDYIP -->
+ <map code="0xb75f" name="1em"/><!-- HANGUL SYLLABLE DDYIH -->
+ <map code="0xb760" name="1em"/><!-- HANGUL SYLLABLE DDI -->
+ <map code="0xb761" name="1em"/><!-- HANGUL SYLLABLE DDIG -->
+ <map code="0xb762" name="1em"/><!-- HANGUL SYLLABLE DDIGG -->
+ <map code="0xb763" name="1em"/><!-- HANGUL SYLLABLE DDIGS -->
+ <map code="0xb764" name="1em"/><!-- HANGUL SYLLABLE DDIN -->
+ <map code="0xb765" name="1em"/><!-- HANGUL SYLLABLE DDINJ -->
+ <map code="0xb766" name="1em"/><!-- HANGUL SYLLABLE DDINH -->
+ <map code="0xb767" name="1em"/><!-- HANGUL SYLLABLE DDID -->
+ <map code="0xb768" name="1em"/><!-- HANGUL SYLLABLE DDIL -->
+ <map code="0xb769" name="1em"/><!-- HANGUL SYLLABLE DDILG -->
+ <map code="0xb76a" name="1em"/><!-- HANGUL SYLLABLE DDILM -->
+ <map code="0xb76b" name="1em"/><!-- HANGUL SYLLABLE DDILB -->
+ <map code="0xb76c" name="1em"/><!-- HANGUL SYLLABLE DDILS -->
+ <map code="0xb76d" name="1em"/><!-- HANGUL SYLLABLE DDILT -->
+ <map code="0xb76e" name="1em"/><!-- HANGUL SYLLABLE DDILP -->
+ <map code="0xb76f" name="1em"/><!-- HANGUL SYLLABLE DDILH -->
+ <map code="0xb770" name="1em"/><!-- HANGUL SYLLABLE DDIM -->
+ <map code="0xb771" name="1em"/><!-- HANGUL SYLLABLE DDIB -->
+ <map code="0xb772" name="1em"/><!-- HANGUL SYLLABLE DDIBS -->
+ <map code="0xb773" name="1em"/><!-- HANGUL SYLLABLE DDIS -->
+ <map code="0xb774" name="1em"/><!-- HANGUL SYLLABLE DDISS -->
+ <map code="0xb775" name="1em"/><!-- HANGUL SYLLABLE DDING -->
+ <map code="0xb776" name="1em"/><!-- HANGUL SYLLABLE DDIJ -->
+ <map code="0xb777" name="1em"/><!-- HANGUL SYLLABLE DDIC -->
+ <map code="0xb778" name="1em"/><!-- HANGUL SYLLABLE DDIK -->
+ <map code="0xb779" name="1em"/><!-- HANGUL SYLLABLE DDIT -->
+ <map code="0xb77a" name="1em"/><!-- HANGUL SYLLABLE DDIP -->
+ <map code="0xb77b" name="1em"/><!-- HANGUL SYLLABLE DDIH -->
+ <map code="0xb77c" name="1em"/><!-- HANGUL SYLLABLE RA -->
+ <map code="0xb77d" name="1em"/><!-- HANGUL SYLLABLE RAG -->
+ <map code="0xb77e" name="1em"/><!-- HANGUL SYLLABLE RAGG -->
+ <map code="0xb77f" name="1em"/><!-- HANGUL SYLLABLE RAGS -->
+ <map code="0xb780" name="1em"/><!-- HANGUL SYLLABLE RAN -->
+ <map code="0xb781" name="1em"/><!-- HANGUL SYLLABLE RANJ -->
+ <map code="0xb782" name="1em"/><!-- HANGUL SYLLABLE RANH -->
+ <map code="0xb783" name="1em"/><!-- HANGUL SYLLABLE RAD -->
+ <map code="0xb784" name="1em"/><!-- HANGUL SYLLABLE RAL -->
+ <map code="0xb785" name="1em"/><!-- HANGUL SYLLABLE RALG -->
+ <map code="0xb786" name="1em"/><!-- HANGUL SYLLABLE RALM -->
+ <map code="0xb787" name="1em"/><!-- HANGUL SYLLABLE RALB -->
+ <map code="0xb788" name="1em"/><!-- HANGUL SYLLABLE RALS -->
+ <map code="0xb789" name="1em"/><!-- HANGUL SYLLABLE RALT -->
+ <map code="0xb78a" name="1em"/><!-- HANGUL SYLLABLE RALP -->
+ <map code="0xb78b" name="1em"/><!-- HANGUL SYLLABLE RALH -->
+ <map code="0xb78c" name="1em"/><!-- HANGUL SYLLABLE RAM -->
+ <map code="0xb78d" name="1em"/><!-- HANGUL SYLLABLE RAB -->
+ <map code="0xb78e" name="1em"/><!-- HANGUL SYLLABLE RABS -->
+ <map code="0xb78f" name="1em"/><!-- HANGUL SYLLABLE RAS -->
+ <map code="0xb790" name="1em"/><!-- HANGUL SYLLABLE RASS -->
+ <map code="0xb791" name="1em"/><!-- HANGUL SYLLABLE RANG -->
+ <map code="0xb792" name="1em"/><!-- HANGUL SYLLABLE RAJ -->
+ <map code="0xb793" name="1em"/><!-- HANGUL SYLLABLE RAC -->
+ <map code="0xb794" name="1em"/><!-- HANGUL SYLLABLE RAK -->
+ <map code="0xb795" name="1em"/><!-- HANGUL SYLLABLE RAT -->
+ <map code="0xb796" name="1em"/><!-- HANGUL SYLLABLE RAP -->
+ <map code="0xb797" name="1em"/><!-- HANGUL SYLLABLE RAH -->
+ <map code="0xb798" name="1em"/><!-- HANGUL SYLLABLE RAE -->
+ <map code="0xb799" name="1em"/><!-- HANGUL SYLLABLE RAEG -->
+ <map code="0xb79a" name="1em"/><!-- HANGUL SYLLABLE RAEGG -->
+ <map code="0xb79b" name="1em"/><!-- HANGUL SYLLABLE RAEGS -->
+ <map code="0xb79c" name="1em"/><!-- HANGUL SYLLABLE RAEN -->
+ <map code="0xb79d" name="1em"/><!-- HANGUL SYLLABLE RAENJ -->
+ <map code="0xb79e" name="1em"/><!-- HANGUL SYLLABLE RAENH -->
+ <map code="0xb79f" name="1em"/><!-- HANGUL SYLLABLE RAED -->
+ <map code="0xb7a0" name="1em"/><!-- HANGUL SYLLABLE RAEL -->
+ <map code="0xb7a1" name="1em"/><!-- HANGUL SYLLABLE RAELG -->
+ <map code="0xb7a2" name="1em"/><!-- HANGUL SYLLABLE RAELM -->
+ <map code="0xb7a3" name="1em"/><!-- HANGUL SYLLABLE RAELB -->
+ <map code="0xb7a4" name="1em"/><!-- HANGUL SYLLABLE RAELS -->
+ <map code="0xb7a5" name="1em"/><!-- HANGUL SYLLABLE RAELT -->
+ <map code="0xb7a6" name="1em"/><!-- HANGUL SYLLABLE RAELP -->
+ <map code="0xb7a7" name="1em"/><!-- HANGUL SYLLABLE RAELH -->
+ <map code="0xb7a8" name="1em"/><!-- HANGUL SYLLABLE RAEM -->
+ <map code="0xb7a9" name="1em"/><!-- HANGUL SYLLABLE RAEB -->
+ <map code="0xb7aa" name="1em"/><!-- HANGUL SYLLABLE RAEBS -->
+ <map code="0xb7ab" name="1em"/><!-- HANGUL SYLLABLE RAES -->
+ <map code="0xb7ac" name="1em"/><!-- HANGUL SYLLABLE RAESS -->
+ <map code="0xb7ad" name="1em"/><!-- HANGUL SYLLABLE RAENG -->
+ <map code="0xb7ae" name="1em"/><!-- HANGUL SYLLABLE RAEJ -->
+ <map code="0xb7af" name="1em"/><!-- HANGUL SYLLABLE RAEC -->
+ <map code="0xb7b0" name="1em"/><!-- HANGUL SYLLABLE RAEK -->
+ <map code="0xb7b1" name="1em"/><!-- HANGUL SYLLABLE RAET -->
+ <map code="0xb7b2" name="1em"/><!-- HANGUL SYLLABLE RAEP -->
+ <map code="0xb7b3" name="1em"/><!-- HANGUL SYLLABLE RAEH -->
+ <map code="0xb7b4" name="1em"/><!-- HANGUL SYLLABLE RYA -->
+ <map code="0xb7b5" name="1em"/><!-- HANGUL SYLLABLE RYAG -->
+ <map code="0xb7b6" name="1em"/><!-- HANGUL SYLLABLE RYAGG -->
+ <map code="0xb7b7" name="1em"/><!-- HANGUL SYLLABLE RYAGS -->
+ <map code="0xb7b8" name="1em"/><!-- HANGUL SYLLABLE RYAN -->
+ <map code="0xb7b9" name="1em"/><!-- HANGUL SYLLABLE RYANJ -->
+ <map code="0xb7ba" name="1em"/><!-- HANGUL SYLLABLE RYANH -->
+ <map code="0xb7bb" name="1em"/><!-- HANGUL SYLLABLE RYAD -->
+ <map code="0xb7bc" name="1em"/><!-- HANGUL SYLLABLE RYAL -->
+ <map code="0xb7bd" name="1em"/><!-- HANGUL SYLLABLE RYALG -->
+ <map code="0xb7be" name="1em"/><!-- HANGUL SYLLABLE RYALM -->
+ <map code="0xb7bf" name="1em"/><!-- HANGUL SYLLABLE RYALB -->
+ <map code="0xb7c0" name="1em"/><!-- HANGUL SYLLABLE RYALS -->
+ <map code="0xb7c1" name="1em"/><!-- HANGUL SYLLABLE RYALT -->
+ <map code="0xb7c2" name="1em"/><!-- HANGUL SYLLABLE RYALP -->
+ <map code="0xb7c3" name="1em"/><!-- HANGUL SYLLABLE RYALH -->
+ <map code="0xb7c4" name="1em"/><!-- HANGUL SYLLABLE RYAM -->
+ <map code="0xb7c5" name="1em"/><!-- HANGUL SYLLABLE RYAB -->
+ <map code="0xb7c6" name="1em"/><!-- HANGUL SYLLABLE RYABS -->
+ <map code="0xb7c7" name="1em"/><!-- HANGUL SYLLABLE RYAS -->
+ <map code="0xb7c8" name="1em"/><!-- HANGUL SYLLABLE RYASS -->
+ <map code="0xb7c9" name="1em"/><!-- HANGUL SYLLABLE RYANG -->
+ <map code="0xb7ca" name="1em"/><!-- HANGUL SYLLABLE RYAJ -->
+ <map code="0xb7cb" name="1em"/><!-- HANGUL SYLLABLE RYAC -->
+ <map code="0xb7cc" name="1em"/><!-- HANGUL SYLLABLE RYAK -->
+ <map code="0xb7cd" name="1em"/><!-- HANGUL SYLLABLE RYAT -->
+ <map code="0xb7ce" name="1em"/><!-- HANGUL SYLLABLE RYAP -->
+ <map code="0xb7cf" name="1em"/><!-- HANGUL SYLLABLE RYAH -->
+ <map code="0xb7d0" name="1em"/><!-- HANGUL SYLLABLE RYAE -->
+ <map code="0xb7d1" name="1em"/><!-- HANGUL SYLLABLE RYAEG -->
+ <map code="0xb7d2" name="1em"/><!-- HANGUL SYLLABLE RYAEGG -->
+ <map code="0xb7d3" name="1em"/><!-- HANGUL SYLLABLE RYAEGS -->
+ <map code="0xb7d4" name="1em"/><!-- HANGUL SYLLABLE RYAEN -->
+ <map code="0xb7d5" name="1em"/><!-- HANGUL SYLLABLE RYAENJ -->
+ <map code="0xb7d6" name="1em"/><!-- HANGUL SYLLABLE RYAENH -->
+ <map code="0xb7d7" name="1em"/><!-- HANGUL SYLLABLE RYAED -->
+ <map code="0xb7d8" name="1em"/><!-- HANGUL SYLLABLE RYAEL -->
+ <map code="0xb7d9" name="1em"/><!-- HANGUL SYLLABLE RYAELG -->
+ <map code="0xb7da" name="1em"/><!-- HANGUL SYLLABLE RYAELM -->
+ <map code="0xb7db" name="1em"/><!-- HANGUL SYLLABLE RYAELB -->
+ <map code="0xb7dc" name="1em"/><!-- HANGUL SYLLABLE RYAELS -->
+ <map code="0xb7dd" name="1em"/><!-- HANGUL SYLLABLE RYAELT -->
+ <map code="0xb7de" name="1em"/><!-- HANGUL SYLLABLE RYAELP -->
+ <map code="0xb7df" name="1em"/><!-- HANGUL SYLLABLE RYAELH -->
+ <map code="0xb7e0" name="1em"/><!-- HANGUL SYLLABLE RYAEM -->
+ <map code="0xb7e1" name="1em"/><!-- HANGUL SYLLABLE RYAEB -->
+ <map code="0xb7e2" name="1em"/><!-- HANGUL SYLLABLE RYAEBS -->
+ <map code="0xb7e3" name="1em"/><!-- HANGUL SYLLABLE RYAES -->
+ <map code="0xb7e4" name="1em"/><!-- HANGUL SYLLABLE RYAESS -->
+ <map code="0xb7e5" name="1em"/><!-- HANGUL SYLLABLE RYAENG -->
+ <map code="0xb7e6" name="1em"/><!-- HANGUL SYLLABLE RYAEJ -->
+ <map code="0xb7e7" name="1em"/><!-- HANGUL SYLLABLE RYAEC -->
+ <map code="0xb7e8" name="1em"/><!-- HANGUL SYLLABLE RYAEK -->
+ <map code="0xb7e9" name="1em"/><!-- HANGUL SYLLABLE RYAET -->
+ <map code="0xb7ea" name="1em"/><!-- HANGUL SYLLABLE RYAEP -->
+ <map code="0xb7eb" name="1em"/><!-- HANGUL SYLLABLE RYAEH -->
+ <map code="0xb7ec" name="1em"/><!-- HANGUL SYLLABLE REO -->
+ <map code="0xb7ed" name="1em"/><!-- HANGUL SYLLABLE REOG -->
+ <map code="0xb7ee" name="1em"/><!-- HANGUL SYLLABLE REOGG -->
+ <map code="0xb7ef" name="1em"/><!-- HANGUL SYLLABLE REOGS -->
+ <map code="0xb7f0" name="1em"/><!-- HANGUL SYLLABLE REON -->
+ <map code="0xb7f1" name="1em"/><!-- HANGUL SYLLABLE REONJ -->
+ <map code="0xb7f2" name="1em"/><!-- HANGUL SYLLABLE REONH -->
+ <map code="0xb7f3" name="1em"/><!-- HANGUL SYLLABLE REOD -->
+ <map code="0xb7f4" name="1em"/><!-- HANGUL SYLLABLE REOL -->
+ <map code="0xb7f5" name="1em"/><!-- HANGUL SYLLABLE REOLG -->
+ <map code="0xb7f6" name="1em"/><!-- HANGUL SYLLABLE REOLM -->
+ <map code="0xb7f7" name="1em"/><!-- HANGUL SYLLABLE REOLB -->
+ <map code="0xb7f8" name="1em"/><!-- HANGUL SYLLABLE REOLS -->
+ <map code="0xb7f9" name="1em"/><!-- HANGUL SYLLABLE REOLT -->
+ <map code="0xb7fa" name="1em"/><!-- HANGUL SYLLABLE REOLP -->
+ <map code="0xb7fb" name="1em"/><!-- HANGUL SYLLABLE REOLH -->
+ <map code="0xb7fc" name="1em"/><!-- HANGUL SYLLABLE REOM -->
+ <map code="0xb7fd" name="1em"/><!-- HANGUL SYLLABLE REOB -->
+ <map code="0xb7fe" name="1em"/><!-- HANGUL SYLLABLE REOBS -->
+ <map code="0xb7ff" name="1em"/><!-- HANGUL SYLLABLE REOS -->
+ <map code="0xb800" name="1em"/><!-- HANGUL SYLLABLE REOSS -->
+ <map code="0xb801" name="1em"/><!-- HANGUL SYLLABLE REONG -->
+ <map code="0xb802" name="1em"/><!-- HANGUL SYLLABLE REOJ -->
+ <map code="0xb803" name="1em"/><!-- HANGUL SYLLABLE REOC -->
+ <map code="0xb804" name="1em"/><!-- HANGUL SYLLABLE REOK -->
+ <map code="0xb805" name="1em"/><!-- HANGUL SYLLABLE REOT -->
+ <map code="0xb806" name="1em"/><!-- HANGUL SYLLABLE REOP -->
+ <map code="0xb807" name="1em"/><!-- HANGUL SYLLABLE REOH -->
+ <map code="0xb808" name="1em"/><!-- HANGUL SYLLABLE RE -->
+ <map code="0xb809" name="1em"/><!-- HANGUL SYLLABLE REG -->
+ <map code="0xb80a" name="1em"/><!-- HANGUL SYLLABLE REGG -->
+ <map code="0xb80b" name="1em"/><!-- HANGUL SYLLABLE REGS -->
+ <map code="0xb80c" name="1em"/><!-- HANGUL SYLLABLE REN -->
+ <map code="0xb80d" name="1em"/><!-- HANGUL SYLLABLE RENJ -->
+ <map code="0xb80e" name="1em"/><!-- HANGUL SYLLABLE RENH -->
+ <map code="0xb80f" name="1em"/><!-- HANGUL SYLLABLE RED -->
+ <map code="0xb810" name="1em"/><!-- HANGUL SYLLABLE REL -->
+ <map code="0xb811" name="1em"/><!-- HANGUL SYLLABLE RELG -->
+ <map code="0xb812" name="1em"/><!-- HANGUL SYLLABLE RELM -->
+ <map code="0xb813" name="1em"/><!-- HANGUL SYLLABLE RELB -->
+ <map code="0xb814" name="1em"/><!-- HANGUL SYLLABLE RELS -->
+ <map code="0xb815" name="1em"/><!-- HANGUL SYLLABLE RELT -->
+ <map code="0xb816" name="1em"/><!-- HANGUL SYLLABLE RELP -->
+ <map code="0xb817" name="1em"/><!-- HANGUL SYLLABLE RELH -->
+ <map code="0xb818" name="1em"/><!-- HANGUL SYLLABLE REM -->
+ <map code="0xb819" name="1em"/><!-- HANGUL SYLLABLE REB -->
+ <map code="0xb81a" name="1em"/><!-- HANGUL SYLLABLE REBS -->
+ <map code="0xb81b" name="1em"/><!-- HANGUL SYLLABLE RES -->
+ <map code="0xb81c" name="1em"/><!-- HANGUL SYLLABLE RESS -->
+ <map code="0xb81d" name="1em"/><!-- HANGUL SYLLABLE RENG -->
+ <map code="0xb81e" name="1em"/><!-- HANGUL SYLLABLE REJ -->
+ <map code="0xb81f" name="1em"/><!-- HANGUL SYLLABLE REC -->
+ <map code="0xb820" name="1em"/><!-- HANGUL SYLLABLE REK -->
+ <map code="0xb821" name="1em"/><!-- HANGUL SYLLABLE RET -->
+ <map code="0xb822" name="1em"/><!-- HANGUL SYLLABLE REP -->
+ <map code="0xb823" name="1em"/><!-- HANGUL SYLLABLE REH -->
+ <map code="0xb824" name="1em"/><!-- HANGUL SYLLABLE RYEO -->
+ <map code="0xb825" name="1em"/><!-- HANGUL SYLLABLE RYEOG -->
+ <map code="0xb826" name="1em"/><!-- HANGUL SYLLABLE RYEOGG -->
+ <map code="0xb827" name="1em"/><!-- HANGUL SYLLABLE RYEOGS -->
+ <map code="0xb828" name="1em"/><!-- HANGUL SYLLABLE RYEON -->
+ <map code="0xb829" name="1em"/><!-- HANGUL SYLLABLE RYEONJ -->
+ <map code="0xb82a" name="1em"/><!-- HANGUL SYLLABLE RYEONH -->
+ <map code="0xb82b" name="1em"/><!-- HANGUL SYLLABLE RYEOD -->
+ <map code="0xb82c" name="1em"/><!-- HANGUL SYLLABLE RYEOL -->
+ <map code="0xb82d" name="1em"/><!-- HANGUL SYLLABLE RYEOLG -->
+ <map code="0xb82e" name="1em"/><!-- HANGUL SYLLABLE RYEOLM -->
+ <map code="0xb82f" name="1em"/><!-- HANGUL SYLLABLE RYEOLB -->
+ <map code="0xb830" name="1em"/><!-- HANGUL SYLLABLE RYEOLS -->
+ <map code="0xb831" name="1em"/><!-- HANGUL SYLLABLE RYEOLT -->
+ <map code="0xb832" name="1em"/><!-- HANGUL SYLLABLE RYEOLP -->
+ <map code="0xb833" name="1em"/><!-- HANGUL SYLLABLE RYEOLH -->
+ <map code="0xb834" name="1em"/><!-- HANGUL SYLLABLE RYEOM -->
+ <map code="0xb835" name="1em"/><!-- HANGUL SYLLABLE RYEOB -->
+ <map code="0xb836" name="1em"/><!-- HANGUL SYLLABLE RYEOBS -->
+ <map code="0xb837" name="1em"/><!-- HANGUL SYLLABLE RYEOS -->
+ <map code="0xb838" name="1em"/><!-- HANGUL SYLLABLE RYEOSS -->
+ <map code="0xb839" name="1em"/><!-- HANGUL SYLLABLE RYEONG -->
+ <map code="0xb83a" name="1em"/><!-- HANGUL SYLLABLE RYEOJ -->
+ <map code="0xb83b" name="1em"/><!-- HANGUL SYLLABLE RYEOC -->
+ <map code="0xb83c" name="1em"/><!-- HANGUL SYLLABLE RYEOK -->
+ <map code="0xb83d" name="1em"/><!-- HANGUL SYLLABLE RYEOT -->
+ <map code="0xb83e" name="1em"/><!-- HANGUL SYLLABLE RYEOP -->
+ <map code="0xb83f" name="1em"/><!-- HANGUL SYLLABLE RYEOH -->
+ <map code="0xb840" name="1em"/><!-- HANGUL SYLLABLE RYE -->
+ <map code="0xb841" name="1em"/><!-- HANGUL SYLLABLE RYEG -->
+ <map code="0xb842" name="1em"/><!-- HANGUL SYLLABLE RYEGG -->
+ <map code="0xb843" name="1em"/><!-- HANGUL SYLLABLE RYEGS -->
+ <map code="0xb844" name="1em"/><!-- HANGUL SYLLABLE RYEN -->
+ <map code="0xb845" name="1em"/><!-- HANGUL SYLLABLE RYENJ -->
+ <map code="0xb846" name="1em"/><!-- HANGUL SYLLABLE RYENH -->
+ <map code="0xb847" name="1em"/><!-- HANGUL SYLLABLE RYED -->
+ <map code="0xb848" name="1em"/><!-- HANGUL SYLLABLE RYEL -->
+ <map code="0xb849" name="1em"/><!-- HANGUL SYLLABLE RYELG -->
+ <map code="0xb84a" name="1em"/><!-- HANGUL SYLLABLE RYELM -->
+ <map code="0xb84b" name="1em"/><!-- HANGUL SYLLABLE RYELB -->
+ <map code="0xb84c" name="1em"/><!-- HANGUL SYLLABLE RYELS -->
+ <map code="0xb84d" name="1em"/><!-- HANGUL SYLLABLE RYELT -->
+ <map code="0xb84e" name="1em"/><!-- HANGUL SYLLABLE RYELP -->
+ <map code="0xb84f" name="1em"/><!-- HANGUL SYLLABLE RYELH -->
+ <map code="0xb850" name="1em"/><!-- HANGUL SYLLABLE RYEM -->
+ <map code="0xb851" name="1em"/><!-- HANGUL SYLLABLE RYEB -->
+ <map code="0xb852" name="1em"/><!-- HANGUL SYLLABLE RYEBS -->
+ <map code="0xb853" name="1em"/><!-- HANGUL SYLLABLE RYES -->
+ <map code="0xb854" name="1em"/><!-- HANGUL SYLLABLE RYESS -->
+ <map code="0xb855" name="1em"/><!-- HANGUL SYLLABLE RYENG -->
+ <map code="0xb856" name="1em"/><!-- HANGUL SYLLABLE RYEJ -->
+ <map code="0xb857" name="1em"/><!-- HANGUL SYLLABLE RYEC -->
+ <map code="0xb858" name="1em"/><!-- HANGUL SYLLABLE RYEK -->
+ <map code="0xb859" name="1em"/><!-- HANGUL SYLLABLE RYET -->
+ <map code="0xb85a" name="1em"/><!-- HANGUL SYLLABLE RYEP -->
+ <map code="0xb85b" name="1em"/><!-- HANGUL SYLLABLE RYEH -->
+ <map code="0xb85c" name="1em"/><!-- HANGUL SYLLABLE RO -->
+ <map code="0xb85d" name="1em"/><!-- HANGUL SYLLABLE ROG -->
+ <map code="0xb85e" name="1em"/><!-- HANGUL SYLLABLE ROGG -->
+ <map code="0xb85f" name="1em"/><!-- HANGUL SYLLABLE ROGS -->
+ <map code="0xb860" name="1em"/><!-- HANGUL SYLLABLE RON -->
+ <map code="0xb861" name="1em"/><!-- HANGUL SYLLABLE RONJ -->
+ <map code="0xb862" name="1em"/><!-- HANGUL SYLLABLE RONH -->
+ <map code="0xb863" name="1em"/><!-- HANGUL SYLLABLE ROD -->
+ <map code="0xb864" name="1em"/><!-- HANGUL SYLLABLE ROL -->
+ <map code="0xb865" name="1em"/><!-- HANGUL SYLLABLE ROLG -->
+ <map code="0xb866" name="1em"/><!-- HANGUL SYLLABLE ROLM -->
+ <map code="0xb867" name="1em"/><!-- HANGUL SYLLABLE ROLB -->
+ <map code="0xb868" name="1em"/><!-- HANGUL SYLLABLE ROLS -->
+ <map code="0xb869" name="1em"/><!-- HANGUL SYLLABLE ROLT -->
+ <map code="0xb86a" name="1em"/><!-- HANGUL SYLLABLE ROLP -->
+ <map code="0xb86b" name="1em"/><!-- HANGUL SYLLABLE ROLH -->
+ <map code="0xb86c" name="1em"/><!-- HANGUL SYLLABLE ROM -->
+ <map code="0xb86d" name="1em"/><!-- HANGUL SYLLABLE ROB -->
+ <map code="0xb86e" name="1em"/><!-- HANGUL SYLLABLE ROBS -->
+ <map code="0xb86f" name="1em"/><!-- HANGUL SYLLABLE ROS -->
+ <map code="0xb870" name="1em"/><!-- HANGUL SYLLABLE ROSS -->
+ <map code="0xb871" name="1em"/><!-- HANGUL SYLLABLE RONG -->
+ <map code="0xb872" name="1em"/><!-- HANGUL SYLLABLE ROJ -->
+ <map code="0xb873" name="1em"/><!-- HANGUL SYLLABLE ROC -->
+ <map code="0xb874" name="1em"/><!-- HANGUL SYLLABLE ROK -->
+ <map code="0xb875" name="1em"/><!-- HANGUL SYLLABLE ROT -->
+ <map code="0xb876" name="1em"/><!-- HANGUL SYLLABLE ROP -->
+ <map code="0xb877" name="1em"/><!-- HANGUL SYLLABLE ROH -->
+ <map code="0xb878" name="1em"/><!-- HANGUL SYLLABLE RWA -->
+ <map code="0xb879" name="1em"/><!-- HANGUL SYLLABLE RWAG -->
+ <map code="0xb87a" name="1em"/><!-- HANGUL SYLLABLE RWAGG -->
+ <map code="0xb87b" name="1em"/><!-- HANGUL SYLLABLE RWAGS -->
+ <map code="0xb87c" name="1em"/><!-- HANGUL SYLLABLE RWAN -->
+ <map code="0xb87d" name="1em"/><!-- HANGUL SYLLABLE RWANJ -->
+ <map code="0xb87e" name="1em"/><!-- HANGUL SYLLABLE RWANH -->
+ <map code="0xb87f" name="1em"/><!-- HANGUL SYLLABLE RWAD -->
+ <map code="0xb880" name="1em"/><!-- HANGUL SYLLABLE RWAL -->
+ <map code="0xb881" name="1em"/><!-- HANGUL SYLLABLE RWALG -->
+ <map code="0xb882" name="1em"/><!-- HANGUL SYLLABLE RWALM -->
+ <map code="0xb883" name="1em"/><!-- HANGUL SYLLABLE RWALB -->
+ <map code="0xb884" name="1em"/><!-- HANGUL SYLLABLE RWALS -->
+ <map code="0xb885" name="1em"/><!-- HANGUL SYLLABLE RWALT -->
+ <map code="0xb886" name="1em"/><!-- HANGUL SYLLABLE RWALP -->
+ <map code="0xb887" name="1em"/><!-- HANGUL SYLLABLE RWALH -->
+ <map code="0xb888" name="1em"/><!-- HANGUL SYLLABLE RWAM -->
+ <map code="0xb889" name="1em"/><!-- HANGUL SYLLABLE RWAB -->
+ <map code="0xb88a" name="1em"/><!-- HANGUL SYLLABLE RWABS -->
+ <map code="0xb88b" name="1em"/><!-- HANGUL SYLLABLE RWAS -->
+ <map code="0xb88c" name="1em"/><!-- HANGUL SYLLABLE RWASS -->
+ <map code="0xb88d" name="1em"/><!-- HANGUL SYLLABLE RWANG -->
+ <map code="0xb88e" name="1em"/><!-- HANGUL SYLLABLE RWAJ -->
+ <map code="0xb88f" name="1em"/><!-- HANGUL SYLLABLE RWAC -->
+ <map code="0xb890" name="1em"/><!-- HANGUL SYLLABLE RWAK -->
+ <map code="0xb891" name="1em"/><!-- HANGUL SYLLABLE RWAT -->
+ <map code="0xb892" name="1em"/><!-- HANGUL SYLLABLE RWAP -->
+ <map code="0xb893" name="1em"/><!-- HANGUL SYLLABLE RWAH -->
+ <map code="0xb894" name="1em"/><!-- HANGUL SYLLABLE RWAE -->
+ <map code="0xb895" name="1em"/><!-- HANGUL SYLLABLE RWAEG -->
+ <map code="0xb896" name="1em"/><!-- HANGUL SYLLABLE RWAEGG -->
+ <map code="0xb897" name="1em"/><!-- HANGUL SYLLABLE RWAEGS -->
+ <map code="0xb898" name="1em"/><!-- HANGUL SYLLABLE RWAEN -->
+ <map code="0xb899" name="1em"/><!-- HANGUL SYLLABLE RWAENJ -->
+ <map code="0xb89a" name="1em"/><!-- HANGUL SYLLABLE RWAENH -->
+ <map code="0xb89b" name="1em"/><!-- HANGUL SYLLABLE RWAED -->
+ <map code="0xb89c" name="1em"/><!-- HANGUL SYLLABLE RWAEL -->
+ <map code="0xb89d" name="1em"/><!-- HANGUL SYLLABLE RWAELG -->
+ <map code="0xb89e" name="1em"/><!-- HANGUL SYLLABLE RWAELM -->
+ <map code="0xb89f" name="1em"/><!-- HANGUL SYLLABLE RWAELB -->
+ <map code="0xb8a0" name="1em"/><!-- HANGUL SYLLABLE RWAELS -->
+ <map code="0xb8a1" name="1em"/><!-- HANGUL SYLLABLE RWAELT -->
+ <map code="0xb8a2" name="1em"/><!-- HANGUL SYLLABLE RWAELP -->
+ <map code="0xb8a3" name="1em"/><!-- HANGUL SYLLABLE RWAELH -->
+ <map code="0xb8a4" name="1em"/><!-- HANGUL SYLLABLE RWAEM -->
+ <map code="0xb8a5" name="1em"/><!-- HANGUL SYLLABLE RWAEB -->
+ <map code="0xb8a6" name="1em"/><!-- HANGUL SYLLABLE RWAEBS -->
+ <map code="0xb8a7" name="1em"/><!-- HANGUL SYLLABLE RWAES -->
+ <map code="0xb8a8" name="1em"/><!-- HANGUL SYLLABLE RWAESS -->
+ <map code="0xb8a9" name="1em"/><!-- HANGUL SYLLABLE RWAENG -->
+ <map code="0xb8aa" name="1em"/><!-- HANGUL SYLLABLE RWAEJ -->
+ <map code="0xb8ab" name="1em"/><!-- HANGUL SYLLABLE RWAEC -->
+ <map code="0xb8ac" name="1em"/><!-- HANGUL SYLLABLE RWAEK -->
+ <map code="0xb8ad" name="1em"/><!-- HANGUL SYLLABLE RWAET -->
+ <map code="0xb8ae" name="1em"/><!-- HANGUL SYLLABLE RWAEP -->
+ <map code="0xb8af" name="1em"/><!-- HANGUL SYLLABLE RWAEH -->
+ <map code="0xb8b0" name="1em"/><!-- HANGUL SYLLABLE ROE -->
+ <map code="0xb8b1" name="1em"/><!-- HANGUL SYLLABLE ROEG -->
+ <map code="0xb8b2" name="1em"/><!-- HANGUL SYLLABLE ROEGG -->
+ <map code="0xb8b3" name="1em"/><!-- HANGUL SYLLABLE ROEGS -->
+ <map code="0xb8b4" name="1em"/><!-- HANGUL SYLLABLE ROEN -->
+ <map code="0xb8b5" name="1em"/><!-- HANGUL SYLLABLE ROENJ -->
+ <map code="0xb8b6" name="1em"/><!-- HANGUL SYLLABLE ROENH -->
+ <map code="0xb8b7" name="1em"/><!-- HANGUL SYLLABLE ROED -->
+ <map code="0xb8b8" name="1em"/><!-- HANGUL SYLLABLE ROEL -->
+ <map code="0xb8b9" name="1em"/><!-- HANGUL SYLLABLE ROELG -->
+ <map code="0xb8ba" name="1em"/><!-- HANGUL SYLLABLE ROELM -->
+ <map code="0xb8bb" name="1em"/><!-- HANGUL SYLLABLE ROELB -->
+ <map code="0xb8bc" name="1em"/><!-- HANGUL SYLLABLE ROELS -->
+ <map code="0xb8bd" name="1em"/><!-- HANGUL SYLLABLE ROELT -->
+ <map code="0xb8be" name="1em"/><!-- HANGUL SYLLABLE ROELP -->
+ <map code="0xb8bf" name="1em"/><!-- HANGUL SYLLABLE ROELH -->
+ <map code="0xb8c0" name="1em"/><!-- HANGUL SYLLABLE ROEM -->
+ <map code="0xb8c1" name="1em"/><!-- HANGUL SYLLABLE ROEB -->
+ <map code="0xb8c2" name="1em"/><!-- HANGUL SYLLABLE ROEBS -->
+ <map code="0xb8c3" name="1em"/><!-- HANGUL SYLLABLE ROES -->
+ <map code="0xb8c4" name="1em"/><!-- HANGUL SYLLABLE ROESS -->
+ <map code="0xb8c5" name="1em"/><!-- HANGUL SYLLABLE ROENG -->
+ <map code="0xb8c6" name="1em"/><!-- HANGUL SYLLABLE ROEJ -->
+ <map code="0xb8c7" name="1em"/><!-- HANGUL SYLLABLE ROEC -->
+ <map code="0xb8c8" name="1em"/><!-- HANGUL SYLLABLE ROEK -->
+ <map code="0xb8c9" name="1em"/><!-- HANGUL SYLLABLE ROET -->
+ <map code="0xb8ca" name="1em"/><!-- HANGUL SYLLABLE ROEP -->
+ <map code="0xb8cb" name="1em"/><!-- HANGUL SYLLABLE ROEH -->
+ <map code="0xb8cc" name="1em"/><!-- HANGUL SYLLABLE RYO -->
+ <map code="0xb8cd" name="1em"/><!-- HANGUL SYLLABLE RYOG -->
+ <map code="0xb8ce" name="1em"/><!-- HANGUL SYLLABLE RYOGG -->
+ <map code="0xb8cf" name="1em"/><!-- HANGUL SYLLABLE RYOGS -->
+ <map code="0xb8d0" name="1em"/><!-- HANGUL SYLLABLE RYON -->
+ <map code="0xb8d1" name="1em"/><!-- HANGUL SYLLABLE RYONJ -->
+ <map code="0xb8d2" name="1em"/><!-- HANGUL SYLLABLE RYONH -->
+ <map code="0xb8d3" name="1em"/><!-- HANGUL SYLLABLE RYOD -->
+ <map code="0xb8d4" name="1em"/><!-- HANGUL SYLLABLE RYOL -->
+ <map code="0xb8d5" name="1em"/><!-- HANGUL SYLLABLE RYOLG -->
+ <map code="0xb8d6" name="1em"/><!-- HANGUL SYLLABLE RYOLM -->
+ <map code="0xb8d7" name="1em"/><!-- HANGUL SYLLABLE RYOLB -->
+ <map code="0xb8d8" name="1em"/><!-- HANGUL SYLLABLE RYOLS -->
+ <map code="0xb8d9" name="1em"/><!-- HANGUL SYLLABLE RYOLT -->
+ <map code="0xb8da" name="1em"/><!-- HANGUL SYLLABLE RYOLP -->
+ <map code="0xb8db" name="1em"/><!-- HANGUL SYLLABLE RYOLH -->
+ <map code="0xb8dc" name="1em"/><!-- HANGUL SYLLABLE RYOM -->
+ <map code="0xb8dd" name="1em"/><!-- HANGUL SYLLABLE RYOB -->
+ <map code="0xb8de" name="1em"/><!-- HANGUL SYLLABLE RYOBS -->
+ <map code="0xb8df" name="1em"/><!-- HANGUL SYLLABLE RYOS -->
+ <map code="0xb8e0" name="1em"/><!-- HANGUL SYLLABLE RYOSS -->
+ <map code="0xb8e1" name="1em"/><!-- HANGUL SYLLABLE RYONG -->
+ <map code="0xb8e2" name="1em"/><!-- HANGUL SYLLABLE RYOJ -->
+ <map code="0xb8e3" name="1em"/><!-- HANGUL SYLLABLE RYOC -->
+ <map code="0xb8e4" name="1em"/><!-- HANGUL SYLLABLE RYOK -->
+ <map code="0xb8e5" name="1em"/><!-- HANGUL SYLLABLE RYOT -->
+ <map code="0xb8e6" name="1em"/><!-- HANGUL SYLLABLE RYOP -->
+ <map code="0xb8e7" name="1em"/><!-- HANGUL SYLLABLE RYOH -->
+ <map code="0xb8e8" name="1em"/><!-- HANGUL SYLLABLE RU -->
+ <map code="0xb8e9" name="1em"/><!-- HANGUL SYLLABLE RUG -->
+ <map code="0xb8ea" name="1em"/><!-- HANGUL SYLLABLE RUGG -->
+ <map code="0xb8eb" name="1em"/><!-- HANGUL SYLLABLE RUGS -->
+ <map code="0xb8ec" name="1em"/><!-- HANGUL SYLLABLE RUN -->
+ <map code="0xb8ed" name="1em"/><!-- HANGUL SYLLABLE RUNJ -->
+ <map code="0xb8ee" name="1em"/><!-- HANGUL SYLLABLE RUNH -->
+ <map code="0xb8ef" name="1em"/><!-- HANGUL SYLLABLE RUD -->
+ <map code="0xb8f0" name="1em"/><!-- HANGUL SYLLABLE RUL -->
+ <map code="0xb8f1" name="1em"/><!-- HANGUL SYLLABLE RULG -->
+ <map code="0xb8f2" name="1em"/><!-- HANGUL SYLLABLE RULM -->
+ <map code="0xb8f3" name="1em"/><!-- HANGUL SYLLABLE RULB -->
+ <map code="0xb8f4" name="1em"/><!-- HANGUL SYLLABLE RULS -->
+ <map code="0xb8f5" name="1em"/><!-- HANGUL SYLLABLE RULT -->
+ <map code="0xb8f6" name="1em"/><!-- HANGUL SYLLABLE RULP -->
+ <map code="0xb8f7" name="1em"/><!-- HANGUL SYLLABLE RULH -->
+ <map code="0xb8f8" name="1em"/><!-- HANGUL SYLLABLE RUM -->
+ <map code="0xb8f9" name="1em"/><!-- HANGUL SYLLABLE RUB -->
+ <map code="0xb8fa" name="1em"/><!-- HANGUL SYLLABLE RUBS -->
+ <map code="0xb8fb" name="1em"/><!-- HANGUL SYLLABLE RUS -->
+ <map code="0xb8fc" name="1em"/><!-- HANGUL SYLLABLE RUSS -->
+ <map code="0xb8fd" name="1em"/><!-- HANGUL SYLLABLE RUNG -->
+ <map code="0xb8fe" name="1em"/><!-- HANGUL SYLLABLE RUJ -->
+ <map code="0xb8ff" name="1em"/><!-- HANGUL SYLLABLE RUC -->
+ <map code="0xb900" name="1em"/><!-- HANGUL SYLLABLE RUK -->
+ <map code="0xb901" name="1em"/><!-- HANGUL SYLLABLE RUT -->
+ <map code="0xb902" name="1em"/><!-- HANGUL SYLLABLE RUP -->
+ <map code="0xb903" name="1em"/><!-- HANGUL SYLLABLE RUH -->
+ <map code="0xb904" name="1em"/><!-- HANGUL SYLLABLE RWEO -->
+ <map code="0xb905" name="1em"/><!-- HANGUL SYLLABLE RWEOG -->
+ <map code="0xb906" name="1em"/><!-- HANGUL SYLLABLE RWEOGG -->
+ <map code="0xb907" name="1em"/><!-- HANGUL SYLLABLE RWEOGS -->
+ <map code="0xb908" name="1em"/><!-- HANGUL SYLLABLE RWEON -->
+ <map code="0xb909" name="1em"/><!-- HANGUL SYLLABLE RWEONJ -->
+ <map code="0xb90a" name="1em"/><!-- HANGUL SYLLABLE RWEONH -->
+ <map code="0xb90b" name="1em"/><!-- HANGUL SYLLABLE RWEOD -->
+ <map code="0xb90c" name="1em"/><!-- HANGUL SYLLABLE RWEOL -->
+ <map code="0xb90d" name="1em"/><!-- HANGUL SYLLABLE RWEOLG -->
+ <map code="0xb90e" name="1em"/><!-- HANGUL SYLLABLE RWEOLM -->
+ <map code="0xb90f" name="1em"/><!-- HANGUL SYLLABLE RWEOLB -->
+ <map code="0xb910" name="1em"/><!-- HANGUL SYLLABLE RWEOLS -->
+ <map code="0xb911" name="1em"/><!-- HANGUL SYLLABLE RWEOLT -->
+ <map code="0xb912" name="1em"/><!-- HANGUL SYLLABLE RWEOLP -->
+ <map code="0xb913" name="1em"/><!-- HANGUL SYLLABLE RWEOLH -->
+ <map code="0xb914" name="1em"/><!-- HANGUL SYLLABLE RWEOM -->
+ <map code="0xb915" name="1em"/><!-- HANGUL SYLLABLE RWEOB -->
+ <map code="0xb916" name="1em"/><!-- HANGUL SYLLABLE RWEOBS -->
+ <map code="0xb917" name="1em"/><!-- HANGUL SYLLABLE RWEOS -->
+ <map code="0xb918" name="1em"/><!-- HANGUL SYLLABLE RWEOSS -->
+ <map code="0xb919" name="1em"/><!-- HANGUL SYLLABLE RWEONG -->
+ <map code="0xb91a" name="1em"/><!-- HANGUL SYLLABLE RWEOJ -->
+ <map code="0xb91b" name="1em"/><!-- HANGUL SYLLABLE RWEOC -->
+ <map code="0xb91c" name="1em"/><!-- HANGUL SYLLABLE RWEOK -->
+ <map code="0xb91d" name="1em"/><!-- HANGUL SYLLABLE RWEOT -->
+ <map code="0xb91e" name="1em"/><!-- HANGUL SYLLABLE RWEOP -->
+ <map code="0xb91f" name="1em"/><!-- HANGUL SYLLABLE RWEOH -->
+ <map code="0xb920" name="1em"/><!-- HANGUL SYLLABLE RWE -->
+ <map code="0xb921" name="1em"/><!-- HANGUL SYLLABLE RWEG -->
+ <map code="0xb922" name="1em"/><!-- HANGUL SYLLABLE RWEGG -->
+ <map code="0xb923" name="1em"/><!-- HANGUL SYLLABLE RWEGS -->
+ <map code="0xb924" name="1em"/><!-- HANGUL SYLLABLE RWEN -->
+ <map code="0xb925" name="1em"/><!-- HANGUL SYLLABLE RWENJ -->
+ <map code="0xb926" name="1em"/><!-- HANGUL SYLLABLE RWENH -->
+ <map code="0xb927" name="1em"/><!-- HANGUL SYLLABLE RWED -->
+ <map code="0xb928" name="1em"/><!-- HANGUL SYLLABLE RWEL -->
+ <map code="0xb929" name="1em"/><!-- HANGUL SYLLABLE RWELG -->
+ <map code="0xb92a" name="1em"/><!-- HANGUL SYLLABLE RWELM -->
+ <map code="0xb92b" name="1em"/><!-- HANGUL SYLLABLE RWELB -->
+ <map code="0xb92c" name="1em"/><!-- HANGUL SYLLABLE RWELS -->
+ <map code="0xb92d" name="1em"/><!-- HANGUL SYLLABLE RWELT -->
+ <map code="0xb92e" name="1em"/><!-- HANGUL SYLLABLE RWELP -->
+ <map code="0xb92f" name="1em"/><!-- HANGUL SYLLABLE RWELH -->
+ <map code="0xb930" name="1em"/><!-- HANGUL SYLLABLE RWEM -->
+ <map code="0xb931" name="1em"/><!-- HANGUL SYLLABLE RWEB -->
+ <map code="0xb932" name="1em"/><!-- HANGUL SYLLABLE RWEBS -->
+ <map code="0xb933" name="1em"/><!-- HANGUL SYLLABLE RWES -->
+ <map code="0xb934" name="1em"/><!-- HANGUL SYLLABLE RWESS -->
+ <map code="0xb935" name="1em"/><!-- HANGUL SYLLABLE RWENG -->
+ <map code="0xb936" name="1em"/><!-- HANGUL SYLLABLE RWEJ -->
+ <map code="0xb937" name="1em"/><!-- HANGUL SYLLABLE RWEC -->
+ <map code="0xb938" name="1em"/><!-- HANGUL SYLLABLE RWEK -->
+ <map code="0xb939" name="1em"/><!-- HANGUL SYLLABLE RWET -->
+ <map code="0xb93a" name="1em"/><!-- HANGUL SYLLABLE RWEP -->
+ <map code="0xb93b" name="1em"/><!-- HANGUL SYLLABLE RWEH -->
+ <map code="0xb93c" name="1em"/><!-- HANGUL SYLLABLE RWI -->
+ <map code="0xb93d" name="1em"/><!-- HANGUL SYLLABLE RWIG -->
+ <map code="0xb93e" name="1em"/><!-- HANGUL SYLLABLE RWIGG -->
+ <map code="0xb93f" name="1em"/><!-- HANGUL SYLLABLE RWIGS -->
+ <map code="0xb940" name="1em"/><!-- HANGUL SYLLABLE RWIN -->
+ <map code="0xb941" name="1em"/><!-- HANGUL SYLLABLE RWINJ -->
+ <map code="0xb942" name="1em"/><!-- HANGUL SYLLABLE RWINH -->
+ <map code="0xb943" name="1em"/><!-- HANGUL SYLLABLE RWID -->
+ <map code="0xb944" name="1em"/><!-- HANGUL SYLLABLE RWIL -->
+ <map code="0xb945" name="1em"/><!-- HANGUL SYLLABLE RWILG -->
+ <map code="0xb946" name="1em"/><!-- HANGUL SYLLABLE RWILM -->
+ <map code="0xb947" name="1em"/><!-- HANGUL SYLLABLE RWILB -->
+ <map code="0xb948" name="1em"/><!-- HANGUL SYLLABLE RWILS -->
+ <map code="0xb949" name="1em"/><!-- HANGUL SYLLABLE RWILT -->
+ <map code="0xb94a" name="1em"/><!-- HANGUL SYLLABLE RWILP -->
+ <map code="0xb94b" name="1em"/><!-- HANGUL SYLLABLE RWILH -->
+ <map code="0xb94c" name="1em"/><!-- HANGUL SYLLABLE RWIM -->
+ <map code="0xb94d" name="1em"/><!-- HANGUL SYLLABLE RWIB -->
+ <map code="0xb94e" name="1em"/><!-- HANGUL SYLLABLE RWIBS -->
+ <map code="0xb94f" name="1em"/><!-- HANGUL SYLLABLE RWIS -->
+ <map code="0xb950" name="1em"/><!-- HANGUL SYLLABLE RWISS -->
+ <map code="0xb951" name="1em"/><!-- HANGUL SYLLABLE RWING -->
+ <map code="0xb952" name="1em"/><!-- HANGUL SYLLABLE RWIJ -->
+ <map code="0xb953" name="1em"/><!-- HANGUL SYLLABLE RWIC -->
+ <map code="0xb954" name="1em"/><!-- HANGUL SYLLABLE RWIK -->
+ <map code="0xb955" name="1em"/><!-- HANGUL SYLLABLE RWIT -->
+ <map code="0xb956" name="1em"/><!-- HANGUL SYLLABLE RWIP -->
+ <map code="0xb957" name="1em"/><!-- HANGUL SYLLABLE RWIH -->
+ <map code="0xb958" name="1em"/><!-- HANGUL SYLLABLE RYU -->
+ <map code="0xb959" name="1em"/><!-- HANGUL SYLLABLE RYUG -->
+ <map code="0xb95a" name="1em"/><!-- HANGUL SYLLABLE RYUGG -->
+ <map code="0xb95b" name="1em"/><!-- HANGUL SYLLABLE RYUGS -->
+ <map code="0xb95c" name="1em"/><!-- HANGUL SYLLABLE RYUN -->
+ <map code="0xb95d" name="1em"/><!-- HANGUL SYLLABLE RYUNJ -->
+ <map code="0xb95e" name="1em"/><!-- HANGUL SYLLABLE RYUNH -->
+ <map code="0xb95f" name="1em"/><!-- HANGUL SYLLABLE RYUD -->
+ <map code="0xb960" name="1em"/><!-- HANGUL SYLLABLE RYUL -->
+ <map code="0xb961" name="1em"/><!-- HANGUL SYLLABLE RYULG -->
+ <map code="0xb962" name="1em"/><!-- HANGUL SYLLABLE RYULM -->
+ <map code="0xb963" name="1em"/><!-- HANGUL SYLLABLE RYULB -->
+ <map code="0xb964" name="1em"/><!-- HANGUL SYLLABLE RYULS -->
+ <map code="0xb965" name="1em"/><!-- HANGUL SYLLABLE RYULT -->
+ <map code="0xb966" name="1em"/><!-- HANGUL SYLLABLE RYULP -->
+ <map code="0xb967" name="1em"/><!-- HANGUL SYLLABLE RYULH -->
+ <map code="0xb968" name="1em"/><!-- HANGUL SYLLABLE RYUM -->
+ <map code="0xb969" name="1em"/><!-- HANGUL SYLLABLE RYUB -->
+ <map code="0xb96a" name="1em"/><!-- HANGUL SYLLABLE RYUBS -->
+ <map code="0xb96b" name="1em"/><!-- HANGUL SYLLABLE RYUS -->
+ <map code="0xb96c" name="1em"/><!-- HANGUL SYLLABLE RYUSS -->
+ <map code="0xb96d" name="1em"/><!-- HANGUL SYLLABLE RYUNG -->
+ <map code="0xb96e" name="1em"/><!-- HANGUL SYLLABLE RYUJ -->
+ <map code="0xb96f" name="1em"/><!-- HANGUL SYLLABLE RYUC -->
+ <map code="0xb970" name="1em"/><!-- HANGUL SYLLABLE RYUK -->
+ <map code="0xb971" name="1em"/><!-- HANGUL SYLLABLE RYUT -->
+ <map code="0xb972" name="1em"/><!-- HANGUL SYLLABLE RYUP -->
+ <map code="0xb973" name="1em"/><!-- HANGUL SYLLABLE RYUH -->
+ <map code="0xb974" name="1em"/><!-- HANGUL SYLLABLE REU -->
+ <map code="0xb975" name="1em"/><!-- HANGUL SYLLABLE REUG -->
+ <map code="0xb976" name="1em"/><!-- HANGUL SYLLABLE REUGG -->
+ <map code="0xb977" name="1em"/><!-- HANGUL SYLLABLE REUGS -->
+ <map code="0xb978" name="1em"/><!-- HANGUL SYLLABLE REUN -->
+ <map code="0xb979" name="1em"/><!-- HANGUL SYLLABLE REUNJ -->
+ <map code="0xb97a" name="1em"/><!-- HANGUL SYLLABLE REUNH -->
+ <map code="0xb97b" name="1em"/><!-- HANGUL SYLLABLE REUD -->
+ <map code="0xb97c" name="1em"/><!-- HANGUL SYLLABLE REUL -->
+ <map code="0xb97d" name="1em"/><!-- HANGUL SYLLABLE REULG -->
+ <map code="0xb97e" name="1em"/><!-- HANGUL SYLLABLE REULM -->
+ <map code="0xb97f" name="1em"/><!-- HANGUL SYLLABLE REULB -->
+ <map code="0xb980" name="1em"/><!-- HANGUL SYLLABLE REULS -->
+ <map code="0xb981" name="1em"/><!-- HANGUL SYLLABLE REULT -->
+ <map code="0xb982" name="1em"/><!-- HANGUL SYLLABLE REULP -->
+ <map code="0xb983" name="1em"/><!-- HANGUL SYLLABLE REULH -->
+ <map code="0xb984" name="1em"/><!-- HANGUL SYLLABLE REUM -->
+ <map code="0xb985" name="1em"/><!-- HANGUL SYLLABLE REUB -->
+ <map code="0xb986" name="1em"/><!-- HANGUL SYLLABLE REUBS -->
+ <map code="0xb987" name="1em"/><!-- HANGUL SYLLABLE REUS -->
+ <map code="0xb988" name="1em"/><!-- HANGUL SYLLABLE REUSS -->
+ <map code="0xb989" name="1em"/><!-- HANGUL SYLLABLE REUNG -->
+ <map code="0xb98a" name="1em"/><!-- HANGUL SYLLABLE REUJ -->
+ <map code="0xb98b" name="1em"/><!-- HANGUL SYLLABLE REUC -->
+ <map code="0xb98c" name="1em"/><!-- HANGUL SYLLABLE REUK -->
+ <map code="0xb98d" name="1em"/><!-- HANGUL SYLLABLE REUT -->
+ <map code="0xb98e" name="1em"/><!-- HANGUL SYLLABLE REUP -->
+ <map code="0xb98f" name="1em"/><!-- HANGUL SYLLABLE REUH -->
+ <map code="0xb990" name="1em"/><!-- HANGUL SYLLABLE RYI -->
+ <map code="0xb991" name="1em"/><!-- HANGUL SYLLABLE RYIG -->
+ <map code="0xb992" name="1em"/><!-- HANGUL SYLLABLE RYIGG -->
+ <map code="0xb993" name="1em"/><!-- HANGUL SYLLABLE RYIGS -->
+ <map code="0xb994" name="1em"/><!-- HANGUL SYLLABLE RYIN -->
+ <map code="0xb995" name="1em"/><!-- HANGUL SYLLABLE RYINJ -->
+ <map code="0xb996" name="1em"/><!-- HANGUL SYLLABLE RYINH -->
+ <map code="0xb997" name="1em"/><!-- HANGUL SYLLABLE RYID -->
+ <map code="0xb998" name="1em"/><!-- HANGUL SYLLABLE RYIL -->
+ <map code="0xb999" name="1em"/><!-- HANGUL SYLLABLE RYILG -->
+ <map code="0xb99a" name="1em"/><!-- HANGUL SYLLABLE RYILM -->
+ <map code="0xb99b" name="1em"/><!-- HANGUL SYLLABLE RYILB -->
+ <map code="0xb99c" name="1em"/><!-- HANGUL SYLLABLE RYILS -->
+ <map code="0xb99d" name="1em"/><!-- HANGUL SYLLABLE RYILT -->
+ <map code="0xb99e" name="1em"/><!-- HANGUL SYLLABLE RYILP -->
+ <map code="0xb99f" name="1em"/><!-- HANGUL SYLLABLE RYILH -->
+ <map code="0xb9a0" name="1em"/><!-- HANGUL SYLLABLE RYIM -->
+ <map code="0xb9a1" name="1em"/><!-- HANGUL SYLLABLE RYIB -->
+ <map code="0xb9a2" name="1em"/><!-- HANGUL SYLLABLE RYIBS -->
+ <map code="0xb9a3" name="1em"/><!-- HANGUL SYLLABLE RYIS -->
+ <map code="0xb9a4" name="1em"/><!-- HANGUL SYLLABLE RYISS -->
+ <map code="0xb9a5" name="1em"/><!-- HANGUL SYLLABLE RYING -->
+ <map code="0xb9a6" name="1em"/><!-- HANGUL SYLLABLE RYIJ -->
+ <map code="0xb9a7" name="1em"/><!-- HANGUL SYLLABLE RYIC -->
+ <map code="0xb9a8" name="1em"/><!-- HANGUL SYLLABLE RYIK -->
+ <map code="0xb9a9" name="1em"/><!-- HANGUL SYLLABLE RYIT -->
+ <map code="0xb9aa" name="1em"/><!-- HANGUL SYLLABLE RYIP -->
+ <map code="0xb9ab" name="1em"/><!-- HANGUL SYLLABLE RYIH -->
+ <map code="0xb9ac" name="1em"/><!-- HANGUL SYLLABLE RI -->
+ <map code="0xb9ad" name="1em"/><!-- HANGUL SYLLABLE RIG -->
+ <map code="0xb9ae" name="1em"/><!-- HANGUL SYLLABLE RIGG -->
+ <map code="0xb9af" name="1em"/><!-- HANGUL SYLLABLE RIGS -->
+ <map code="0xb9b0" name="1em"/><!-- HANGUL SYLLABLE RIN -->
+ <map code="0xb9b1" name="1em"/><!-- HANGUL SYLLABLE RINJ -->
+ <map code="0xb9b2" name="1em"/><!-- HANGUL SYLLABLE RINH -->
+ <map code="0xb9b3" name="1em"/><!-- HANGUL SYLLABLE RID -->
+ <map code="0xb9b4" name="1em"/><!-- HANGUL SYLLABLE RIL -->
+ <map code="0xb9b5" name="1em"/><!-- HANGUL SYLLABLE RILG -->
+ <map code="0xb9b6" name="1em"/><!-- HANGUL SYLLABLE RILM -->
+ <map code="0xb9b7" name="1em"/><!-- HANGUL SYLLABLE RILB -->
+ <map code="0xb9b8" name="1em"/><!-- HANGUL SYLLABLE RILS -->
+ <map code="0xb9b9" name="1em"/><!-- HANGUL SYLLABLE RILT -->
+ <map code="0xb9ba" name="1em"/><!-- HANGUL SYLLABLE RILP -->
+ <map code="0xb9bb" name="1em"/><!-- HANGUL SYLLABLE RILH -->
+ <map code="0xb9bc" name="1em"/><!-- HANGUL SYLLABLE RIM -->
+ <map code="0xb9bd" name="1em"/><!-- HANGUL SYLLABLE RIB -->
+ <map code="0xb9be" name="1em"/><!-- HANGUL SYLLABLE RIBS -->
+ <map code="0xb9bf" name="1em"/><!-- HANGUL SYLLABLE RIS -->
+ <map code="0xb9c0" name="1em"/><!-- HANGUL SYLLABLE RISS -->
+ <map code="0xb9c1" name="1em"/><!-- HANGUL SYLLABLE RING -->
+ <map code="0xb9c2" name="1em"/><!-- HANGUL SYLLABLE RIJ -->
+ <map code="0xb9c3" name="1em"/><!-- HANGUL SYLLABLE RIC -->
+ <map code="0xb9c4" name="1em"/><!-- HANGUL SYLLABLE RIK -->
+ <map code="0xb9c5" name="1em"/><!-- HANGUL SYLLABLE RIT -->
+ <map code="0xb9c6" name="1em"/><!-- HANGUL SYLLABLE RIP -->
+ <map code="0xb9c7" name="1em"/><!-- HANGUL SYLLABLE RIH -->
+ <map code="0xb9c8" name="1em"/><!-- HANGUL SYLLABLE MA -->
+ <map code="0xb9c9" name="1em"/><!-- HANGUL SYLLABLE MAG -->
+ <map code="0xb9ca" name="1em"/><!-- HANGUL SYLLABLE MAGG -->
+ <map code="0xb9cb" name="1em"/><!-- HANGUL SYLLABLE MAGS -->
+ <map code="0xb9cc" name="1em"/><!-- HANGUL SYLLABLE MAN -->
+ <map code="0xb9cd" name="1em"/><!-- HANGUL SYLLABLE MANJ -->
+ <map code="0xb9ce" name="1em"/><!-- HANGUL SYLLABLE MANH -->
+ <map code="0xb9cf" name="1em"/><!-- HANGUL SYLLABLE MAD -->
+ <map code="0xb9d0" name="1em"/><!-- HANGUL SYLLABLE MAL -->
+ <map code="0xb9d1" name="1em"/><!-- HANGUL SYLLABLE MALG -->
+ <map code="0xb9d2" name="1em"/><!-- HANGUL SYLLABLE MALM -->
+ <map code="0xb9d3" name="1em"/><!-- HANGUL SYLLABLE MALB -->
+ <map code="0xb9d4" name="1em"/><!-- HANGUL SYLLABLE MALS -->
+ <map code="0xb9d5" name="1em"/><!-- HANGUL SYLLABLE MALT -->
+ <map code="0xb9d6" name="1em"/><!-- HANGUL SYLLABLE MALP -->
+ <map code="0xb9d7" name="1em"/><!-- HANGUL SYLLABLE MALH -->
+ <map code="0xb9d8" name="1em"/><!-- HANGUL SYLLABLE MAM -->
+ <map code="0xb9d9" name="1em"/><!-- HANGUL SYLLABLE MAB -->
+ <map code="0xb9da" name="1em"/><!-- HANGUL SYLLABLE MABS -->
+ <map code="0xb9db" name="1em"/><!-- HANGUL SYLLABLE MAS -->
+ <map code="0xb9dc" name="1em"/><!-- HANGUL SYLLABLE MASS -->
+ <map code="0xb9dd" name="1em"/><!-- HANGUL SYLLABLE MANG -->
+ <map code="0xb9de" name="1em"/><!-- HANGUL SYLLABLE MAJ -->
+ <map code="0xb9df" name="1em"/><!-- HANGUL SYLLABLE MAC -->
+ <map code="0xb9e0" name="1em"/><!-- HANGUL SYLLABLE MAK -->
+ <map code="0xb9e1" name="1em"/><!-- HANGUL SYLLABLE MAT -->
+ <map code="0xb9e2" name="1em"/><!-- HANGUL SYLLABLE MAP -->
+ <map code="0xb9e3" name="1em"/><!-- HANGUL SYLLABLE MAH -->
+ <map code="0xb9e4" name="1em"/><!-- HANGUL SYLLABLE MAE -->
+ <map code="0xb9e5" name="1em"/><!-- HANGUL SYLLABLE MAEG -->
+ <map code="0xb9e6" name="1em"/><!-- HANGUL SYLLABLE MAEGG -->
+ <map code="0xb9e7" name="1em"/><!-- HANGUL SYLLABLE MAEGS -->
+ <map code="0xb9e8" name="1em"/><!-- HANGUL SYLLABLE MAEN -->
+ <map code="0xb9e9" name="1em"/><!-- HANGUL SYLLABLE MAENJ -->
+ <map code="0xb9ea" name="1em"/><!-- HANGUL SYLLABLE MAENH -->
+ <map code="0xb9eb" name="1em"/><!-- HANGUL SYLLABLE MAED -->
+ <map code="0xb9ec" name="1em"/><!-- HANGUL SYLLABLE MAEL -->
+ <map code="0xb9ed" name="1em"/><!-- HANGUL SYLLABLE MAELG -->
+ <map code="0xb9ee" name="1em"/><!-- HANGUL SYLLABLE MAELM -->
+ <map code="0xb9ef" name="1em"/><!-- HANGUL SYLLABLE MAELB -->
+ <map code="0xb9f0" name="1em"/><!-- HANGUL SYLLABLE MAELS -->
+ <map code="0xb9f1" name="1em"/><!-- HANGUL SYLLABLE MAELT -->
+ <map code="0xb9f2" name="1em"/><!-- HANGUL SYLLABLE MAELP -->
+ <map code="0xb9f3" name="1em"/><!-- HANGUL SYLLABLE MAELH -->
+ <map code="0xb9f4" name="1em"/><!-- HANGUL SYLLABLE MAEM -->
+ <map code="0xb9f5" name="1em"/><!-- HANGUL SYLLABLE MAEB -->
+ <map code="0xb9f6" name="1em"/><!-- HANGUL SYLLABLE MAEBS -->
+ <map code="0xb9f7" name="1em"/><!-- HANGUL SYLLABLE MAES -->
+ <map code="0xb9f8" name="1em"/><!-- HANGUL SYLLABLE MAESS -->
+ <map code="0xb9f9" name="1em"/><!-- HANGUL SYLLABLE MAENG -->
+ <map code="0xb9fa" name="1em"/><!-- HANGUL SYLLABLE MAEJ -->
+ <map code="0xb9fb" name="1em"/><!-- HANGUL SYLLABLE MAEC -->
+ <map code="0xb9fc" name="1em"/><!-- HANGUL SYLLABLE MAEK -->
+ <map code="0xb9fd" name="1em"/><!-- HANGUL SYLLABLE MAET -->
+ <map code="0xb9fe" name="1em"/><!-- HANGUL SYLLABLE MAEP -->
+ <map code="0xb9ff" name="1em"/><!-- HANGUL SYLLABLE MAEH -->
+ <map code="0xba00" name="1em"/><!-- HANGUL SYLLABLE MYA -->
+ <map code="0xba01" name="1em"/><!-- HANGUL SYLLABLE MYAG -->
+ <map code="0xba02" name="1em"/><!-- HANGUL SYLLABLE MYAGG -->
+ <map code="0xba03" name="1em"/><!-- HANGUL SYLLABLE MYAGS -->
+ <map code="0xba04" name="1em"/><!-- HANGUL SYLLABLE MYAN -->
+ <map code="0xba05" name="1em"/><!-- HANGUL SYLLABLE MYANJ -->
+ <map code="0xba06" name="1em"/><!-- HANGUL SYLLABLE MYANH -->
+ <map code="0xba07" name="1em"/><!-- HANGUL SYLLABLE MYAD -->
+ <map code="0xba08" name="1em"/><!-- HANGUL SYLLABLE MYAL -->
+ <map code="0xba09" name="1em"/><!-- HANGUL SYLLABLE MYALG -->
+ <map code="0xba0a" name="1em"/><!-- HANGUL SYLLABLE MYALM -->
+ <map code="0xba0b" name="1em"/><!-- HANGUL SYLLABLE MYALB -->
+ <map code="0xba0c" name="1em"/><!-- HANGUL SYLLABLE MYALS -->
+ <map code="0xba0d" name="1em"/><!-- HANGUL SYLLABLE MYALT -->
+ <map code="0xba0e" name="1em"/><!-- HANGUL SYLLABLE MYALP -->
+ <map code="0xba0f" name="1em"/><!-- HANGUL SYLLABLE MYALH -->
+ <map code="0xba10" name="1em"/><!-- HANGUL SYLLABLE MYAM -->
+ <map code="0xba11" name="1em"/><!-- HANGUL SYLLABLE MYAB -->
+ <map code="0xba12" name="1em"/><!-- HANGUL SYLLABLE MYABS -->
+ <map code="0xba13" name="1em"/><!-- HANGUL SYLLABLE MYAS -->
+ <map code="0xba14" name="1em"/><!-- HANGUL SYLLABLE MYASS -->
+ <map code="0xba15" name="1em"/><!-- HANGUL SYLLABLE MYANG -->
+ <map code="0xba16" name="1em"/><!-- HANGUL SYLLABLE MYAJ -->
+ <map code="0xba17" name="1em"/><!-- HANGUL SYLLABLE MYAC -->
+ <map code="0xba18" name="1em"/><!-- HANGUL SYLLABLE MYAK -->
+ <map code="0xba19" name="1em"/><!-- HANGUL SYLLABLE MYAT -->
+ <map code="0xba1a" name="1em"/><!-- HANGUL SYLLABLE MYAP -->
+ <map code="0xba1b" name="1em"/><!-- HANGUL SYLLABLE MYAH -->
+ <map code="0xba1c" name="1em"/><!-- HANGUL SYLLABLE MYAE -->
+ <map code="0xba1d" name="1em"/><!-- HANGUL SYLLABLE MYAEG -->
+ <map code="0xba1e" name="1em"/><!-- HANGUL SYLLABLE MYAEGG -->
+ <map code="0xba1f" name="1em"/><!-- HANGUL SYLLABLE MYAEGS -->
+ <map code="0xba20" name="1em"/><!-- HANGUL SYLLABLE MYAEN -->
+ <map code="0xba21" name="1em"/><!-- HANGUL SYLLABLE MYAENJ -->
+ <map code="0xba22" name="1em"/><!-- HANGUL SYLLABLE MYAENH -->
+ <map code="0xba23" name="1em"/><!-- HANGUL SYLLABLE MYAED -->
+ <map code="0xba24" name="1em"/><!-- HANGUL SYLLABLE MYAEL -->
+ <map code="0xba25" name="1em"/><!-- HANGUL SYLLABLE MYAELG -->
+ <map code="0xba26" name="1em"/><!-- HANGUL SYLLABLE MYAELM -->
+ <map code="0xba27" name="1em"/><!-- HANGUL SYLLABLE MYAELB -->
+ <map code="0xba28" name="1em"/><!-- HANGUL SYLLABLE MYAELS -->
+ <map code="0xba29" name="1em"/><!-- HANGUL SYLLABLE MYAELT -->
+ <map code="0xba2a" name="1em"/><!-- HANGUL SYLLABLE MYAELP -->
+ <map code="0xba2b" name="1em"/><!-- HANGUL SYLLABLE MYAELH -->
+ <map code="0xba2c" name="1em"/><!-- HANGUL SYLLABLE MYAEM -->
+ <map code="0xba2d" name="1em"/><!-- HANGUL SYLLABLE MYAEB -->
+ <map code="0xba2e" name="1em"/><!-- HANGUL SYLLABLE MYAEBS -->
+ <map code="0xba2f" name="1em"/><!-- HANGUL SYLLABLE MYAES -->
+ <map code="0xba30" name="1em"/><!-- HANGUL SYLLABLE MYAESS -->
+ <map code="0xba31" name="1em"/><!-- HANGUL SYLLABLE MYAENG -->
+ <map code="0xba32" name="1em"/><!-- HANGUL SYLLABLE MYAEJ -->
+ <map code="0xba33" name="1em"/><!-- HANGUL SYLLABLE MYAEC -->
+ <map code="0xba34" name="1em"/><!-- HANGUL SYLLABLE MYAEK -->
+ <map code="0xba35" name="1em"/><!-- HANGUL SYLLABLE MYAET -->
+ <map code="0xba36" name="1em"/><!-- HANGUL SYLLABLE MYAEP -->
+ <map code="0xba37" name="1em"/><!-- HANGUL SYLLABLE MYAEH -->
+ <map code="0xba38" name="1em"/><!-- HANGUL SYLLABLE MEO -->
+ <map code="0xba39" name="1em"/><!-- HANGUL SYLLABLE MEOG -->
+ <map code="0xba3a" name="1em"/><!-- HANGUL SYLLABLE MEOGG -->
+ <map code="0xba3b" name="1em"/><!-- HANGUL SYLLABLE MEOGS -->
+ <map code="0xba3c" name="1em"/><!-- HANGUL SYLLABLE MEON -->
+ <map code="0xba3d" name="1em"/><!-- HANGUL SYLLABLE MEONJ -->
+ <map code="0xba3e" name="1em"/><!-- HANGUL SYLLABLE MEONH -->
+ <map code="0xba3f" name="1em"/><!-- HANGUL SYLLABLE MEOD -->
+ <map code="0xba40" name="1em"/><!-- HANGUL SYLLABLE MEOL -->
+ <map code="0xba41" name="1em"/><!-- HANGUL SYLLABLE MEOLG -->
+ <map code="0xba42" name="1em"/><!-- HANGUL SYLLABLE MEOLM -->
+ <map code="0xba43" name="1em"/><!-- HANGUL SYLLABLE MEOLB -->
+ <map code="0xba44" name="1em"/><!-- HANGUL SYLLABLE MEOLS -->
+ <map code="0xba45" name="1em"/><!-- HANGUL SYLLABLE MEOLT -->
+ <map code="0xba46" name="1em"/><!-- HANGUL SYLLABLE MEOLP -->
+ <map code="0xba47" name="1em"/><!-- HANGUL SYLLABLE MEOLH -->
+ <map code="0xba48" name="1em"/><!-- HANGUL SYLLABLE MEOM -->
+ <map code="0xba49" name="1em"/><!-- HANGUL SYLLABLE MEOB -->
+ <map code="0xba4a" name="1em"/><!-- HANGUL SYLLABLE MEOBS -->
+ <map code="0xba4b" name="1em"/><!-- HANGUL SYLLABLE MEOS -->
+ <map code="0xba4c" name="1em"/><!-- HANGUL SYLLABLE MEOSS -->
+ <map code="0xba4d" name="1em"/><!-- HANGUL SYLLABLE MEONG -->
+ <map code="0xba4e" name="1em"/><!-- HANGUL SYLLABLE MEOJ -->
+ <map code="0xba4f" name="1em"/><!-- HANGUL SYLLABLE MEOC -->
+ <map code="0xba50" name="1em"/><!-- HANGUL SYLLABLE MEOK -->
+ <map code="0xba51" name="1em"/><!-- HANGUL SYLLABLE MEOT -->
+ <map code="0xba52" name="1em"/><!-- HANGUL SYLLABLE MEOP -->
+ <map code="0xba53" name="1em"/><!-- HANGUL SYLLABLE MEOH -->
+ <map code="0xba54" name="1em"/><!-- HANGUL SYLLABLE ME -->
+ <map code="0xba55" name="1em"/><!-- HANGUL SYLLABLE MEG -->
+ <map code="0xba56" name="1em"/><!-- HANGUL SYLLABLE MEGG -->
+ <map code="0xba57" name="1em"/><!-- HANGUL SYLLABLE MEGS -->
+ <map code="0xba58" name="1em"/><!-- HANGUL SYLLABLE MEN -->
+ <map code="0xba59" name="1em"/><!-- HANGUL SYLLABLE MENJ -->
+ <map code="0xba5a" name="1em"/><!-- HANGUL SYLLABLE MENH -->
+ <map code="0xba5b" name="1em"/><!-- HANGUL SYLLABLE MED -->
+ <map code="0xba5c" name="1em"/><!-- HANGUL SYLLABLE MEL -->
+ <map code="0xba5d" name="1em"/><!-- HANGUL SYLLABLE MELG -->
+ <map code="0xba5e" name="1em"/><!-- HANGUL SYLLABLE MELM -->
+ <map code="0xba5f" name="1em"/><!-- HANGUL SYLLABLE MELB -->
+ <map code="0xba60" name="1em"/><!-- HANGUL SYLLABLE MELS -->
+ <map code="0xba61" name="1em"/><!-- HANGUL SYLLABLE MELT -->
+ <map code="0xba62" name="1em"/><!-- HANGUL SYLLABLE MELP -->
+ <map code="0xba63" name="1em"/><!-- HANGUL SYLLABLE MELH -->
+ <map code="0xba64" name="1em"/><!-- HANGUL SYLLABLE MEM -->
+ <map code="0xba65" name="1em"/><!-- HANGUL SYLLABLE MEB -->
+ <map code="0xba66" name="1em"/><!-- HANGUL SYLLABLE MEBS -->
+ <map code="0xba67" name="1em"/><!-- HANGUL SYLLABLE MES -->
+ <map code="0xba68" name="1em"/><!-- HANGUL SYLLABLE MESS -->
+ <map code="0xba69" name="1em"/><!-- HANGUL SYLLABLE MENG -->
+ <map code="0xba6a" name="1em"/><!-- HANGUL SYLLABLE MEJ -->
+ <map code="0xba6b" name="1em"/><!-- HANGUL SYLLABLE MEC -->
+ <map code="0xba6c" name="1em"/><!-- HANGUL SYLLABLE MEK -->
+ <map code="0xba6d" name="1em"/><!-- HANGUL SYLLABLE MET -->
+ <map code="0xba6e" name="1em"/><!-- HANGUL SYLLABLE MEP -->
+ <map code="0xba6f" name="1em"/><!-- HANGUL SYLLABLE MEH -->
+ <map code="0xba70" name="1em"/><!-- HANGUL SYLLABLE MYEO -->
+ <map code="0xba71" name="1em"/><!-- HANGUL SYLLABLE MYEOG -->
+ <map code="0xba72" name="1em"/><!-- HANGUL SYLLABLE MYEOGG -->
+ <map code="0xba73" name="1em"/><!-- HANGUL SYLLABLE MYEOGS -->
+ <map code="0xba74" name="1em"/><!-- HANGUL SYLLABLE MYEON -->
+ <map code="0xba75" name="1em"/><!-- HANGUL SYLLABLE MYEONJ -->
+ <map code="0xba76" name="1em"/><!-- HANGUL SYLLABLE MYEONH -->
+ <map code="0xba77" name="1em"/><!-- HANGUL SYLLABLE MYEOD -->
+ <map code="0xba78" name="1em"/><!-- HANGUL SYLLABLE MYEOL -->
+ <map code="0xba79" name="1em"/><!-- HANGUL SYLLABLE MYEOLG -->
+ <map code="0xba7a" name="1em"/><!-- HANGUL SYLLABLE MYEOLM -->
+ <map code="0xba7b" name="1em"/><!-- HANGUL SYLLABLE MYEOLB -->
+ <map code="0xba7c" name="1em"/><!-- HANGUL SYLLABLE MYEOLS -->
+ <map code="0xba7d" name="1em"/><!-- HANGUL SYLLABLE MYEOLT -->
+ <map code="0xba7e" name="1em"/><!-- HANGUL SYLLABLE MYEOLP -->
+ <map code="0xba7f" name="1em"/><!-- HANGUL SYLLABLE MYEOLH -->
+ <map code="0xba80" name="1em"/><!-- HANGUL SYLLABLE MYEOM -->
+ <map code="0xba81" name="1em"/><!-- HANGUL SYLLABLE MYEOB -->
+ <map code="0xba82" name="1em"/><!-- HANGUL SYLLABLE MYEOBS -->
+ <map code="0xba83" name="1em"/><!-- HANGUL SYLLABLE MYEOS -->
+ <map code="0xba84" name="1em"/><!-- HANGUL SYLLABLE MYEOSS -->
+ <map code="0xba85" name="1em"/><!-- HANGUL SYLLABLE MYEONG -->
+ <map code="0xba86" name="1em"/><!-- HANGUL SYLLABLE MYEOJ -->
+ <map code="0xba87" name="1em"/><!-- HANGUL SYLLABLE MYEOC -->
+ <map code="0xba88" name="1em"/><!-- HANGUL SYLLABLE MYEOK -->
+ <map code="0xba89" name="1em"/><!-- HANGUL SYLLABLE MYEOT -->
+ <map code="0xba8a" name="1em"/><!-- HANGUL SYLLABLE MYEOP -->
+ <map code="0xba8b" name="1em"/><!-- HANGUL SYLLABLE MYEOH -->
+ <map code="0xba8c" name="1em"/><!-- HANGUL SYLLABLE MYE -->
+ <map code="0xba8d" name="1em"/><!-- HANGUL SYLLABLE MYEG -->
+ <map code="0xba8e" name="1em"/><!-- HANGUL SYLLABLE MYEGG -->
+ <map code="0xba8f" name="1em"/><!-- HANGUL SYLLABLE MYEGS -->
+ <map code="0xba90" name="1em"/><!-- HANGUL SYLLABLE MYEN -->
+ <map code="0xba91" name="1em"/><!-- HANGUL SYLLABLE MYENJ -->
+ <map code="0xba92" name="1em"/><!-- HANGUL SYLLABLE MYENH -->
+ <map code="0xba93" name="1em"/><!-- HANGUL SYLLABLE MYED -->
+ <map code="0xba94" name="1em"/><!-- HANGUL SYLLABLE MYEL -->
+ <map code="0xba95" name="1em"/><!-- HANGUL SYLLABLE MYELG -->
+ <map code="0xba96" name="1em"/><!-- HANGUL SYLLABLE MYELM -->
+ <map code="0xba97" name="1em"/><!-- HANGUL SYLLABLE MYELB -->
+ <map code="0xba98" name="1em"/><!-- HANGUL SYLLABLE MYELS -->
+ <map code="0xba99" name="1em"/><!-- HANGUL SYLLABLE MYELT -->
+ <map code="0xba9a" name="1em"/><!-- HANGUL SYLLABLE MYELP -->
+ <map code="0xba9b" name="1em"/><!-- HANGUL SYLLABLE MYELH -->
+ <map code="0xba9c" name="1em"/><!-- HANGUL SYLLABLE MYEM -->
+ <map code="0xba9d" name="1em"/><!-- HANGUL SYLLABLE MYEB -->
+ <map code="0xba9e" name="1em"/><!-- HANGUL SYLLABLE MYEBS -->
+ <map code="0xba9f" name="1em"/><!-- HANGUL SYLLABLE MYES -->
+ <map code="0xbaa0" name="1em"/><!-- HANGUL SYLLABLE MYESS -->
+ <map code="0xbaa1" name="1em"/><!-- HANGUL SYLLABLE MYENG -->
+ <map code="0xbaa2" name="1em"/><!-- HANGUL SYLLABLE MYEJ -->
+ <map code="0xbaa3" name="1em"/><!-- HANGUL SYLLABLE MYEC -->
+ <map code="0xbaa4" name="1em"/><!-- HANGUL SYLLABLE MYEK -->
+ <map code="0xbaa5" name="1em"/><!-- HANGUL SYLLABLE MYET -->
+ <map code="0xbaa6" name="1em"/><!-- HANGUL SYLLABLE MYEP -->
+ <map code="0xbaa7" name="1em"/><!-- HANGUL SYLLABLE MYEH -->
+ <map code="0xbaa8" name="1em"/><!-- HANGUL SYLLABLE MO -->
+ <map code="0xbaa9" name="1em"/><!-- HANGUL SYLLABLE MOG -->
+ <map code="0xbaaa" name="1em"/><!-- HANGUL SYLLABLE MOGG -->
+ <map code="0xbaab" name="1em"/><!-- HANGUL SYLLABLE MOGS -->
+ <map code="0xbaac" name="1em"/><!-- HANGUL SYLLABLE MON -->
+ <map code="0xbaad" name="1em"/><!-- HANGUL SYLLABLE MONJ -->
+ <map code="0xbaae" name="1em"/><!-- HANGUL SYLLABLE MONH -->
+ <map code="0xbaaf" name="1em"/><!-- HANGUL SYLLABLE MOD -->
+ <map code="0xbab0" name="1em"/><!-- HANGUL SYLLABLE MOL -->
+ <map code="0xbab1" name="1em"/><!-- HANGUL SYLLABLE MOLG -->
+ <map code="0xbab2" name="1em"/><!-- HANGUL SYLLABLE MOLM -->
+ <map code="0xbab3" name="1em"/><!-- HANGUL SYLLABLE MOLB -->
+ <map code="0xbab4" name="1em"/><!-- HANGUL SYLLABLE MOLS -->
+ <map code="0xbab5" name="1em"/><!-- HANGUL SYLLABLE MOLT -->
+ <map code="0xbab6" name="1em"/><!-- HANGUL SYLLABLE MOLP -->
+ <map code="0xbab7" name="1em"/><!-- HANGUL SYLLABLE MOLH -->
+ <map code="0xbab8" name="1em"/><!-- HANGUL SYLLABLE MOM -->
+ <map code="0xbab9" name="1em"/><!-- HANGUL SYLLABLE MOB -->
+ <map code="0xbaba" name="1em"/><!-- HANGUL SYLLABLE MOBS -->
+ <map code="0xbabb" name="1em"/><!-- HANGUL SYLLABLE MOS -->
+ <map code="0xbabc" name="1em"/><!-- HANGUL SYLLABLE MOSS -->
+ <map code="0xbabd" name="1em"/><!-- HANGUL SYLLABLE MONG -->
+ <map code="0xbabe" name="1em"/><!-- HANGUL SYLLABLE MOJ -->
+ <map code="0xbabf" name="1em"/><!-- HANGUL SYLLABLE MOC -->
+ <map code="0xbac0" name="1em"/><!-- HANGUL SYLLABLE MOK -->
+ <map code="0xbac1" name="1em"/><!-- HANGUL SYLLABLE MOT -->
+ <map code="0xbac2" name="1em"/><!-- HANGUL SYLLABLE MOP -->
+ <map code="0xbac3" name="1em"/><!-- HANGUL SYLLABLE MOH -->
+ <map code="0xbac4" name="1em"/><!-- HANGUL SYLLABLE MWA -->
+ <map code="0xbac5" name="1em"/><!-- HANGUL SYLLABLE MWAG -->
+ <map code="0xbac6" name="1em"/><!-- HANGUL SYLLABLE MWAGG -->
+ <map code="0xbac7" name="1em"/><!-- HANGUL SYLLABLE MWAGS -->
+ <map code="0xbac8" name="1em"/><!-- HANGUL SYLLABLE MWAN -->
+ <map code="0xbac9" name="1em"/><!-- HANGUL SYLLABLE MWANJ -->
+ <map code="0xbaca" name="1em"/><!-- HANGUL SYLLABLE MWANH -->
+ <map code="0xbacb" name="1em"/><!-- HANGUL SYLLABLE MWAD -->
+ <map code="0xbacc" name="1em"/><!-- HANGUL SYLLABLE MWAL -->
+ <map code="0xbacd" name="1em"/><!-- HANGUL SYLLABLE MWALG -->
+ <map code="0xbace" name="1em"/><!-- HANGUL SYLLABLE MWALM -->
+ <map code="0xbacf" name="1em"/><!-- HANGUL SYLLABLE MWALB -->
+ <map code="0xbad0" name="1em"/><!-- HANGUL SYLLABLE MWALS -->
+ <map code="0xbad1" name="1em"/><!-- HANGUL SYLLABLE MWALT -->
+ <map code="0xbad2" name="1em"/><!-- HANGUL SYLLABLE MWALP -->
+ <map code="0xbad3" name="1em"/><!-- HANGUL SYLLABLE MWALH -->
+ <map code="0xbad4" name="1em"/><!-- HANGUL SYLLABLE MWAM -->
+ <map code="0xbad5" name="1em"/><!-- HANGUL SYLLABLE MWAB -->
+ <map code="0xbad6" name="1em"/><!-- HANGUL SYLLABLE MWABS -->
+ <map code="0xbad7" name="1em"/><!-- HANGUL SYLLABLE MWAS -->
+ <map code="0xbad8" name="1em"/><!-- HANGUL SYLLABLE MWASS -->
+ <map code="0xbad9" name="1em"/><!-- HANGUL SYLLABLE MWANG -->
+ <map code="0xbada" name="1em"/><!-- HANGUL SYLLABLE MWAJ -->
+ <map code="0xbadb" name="1em"/><!-- HANGUL SYLLABLE MWAC -->
+ <map code="0xbadc" name="1em"/><!-- HANGUL SYLLABLE MWAK -->
+ <map code="0xbadd" name="1em"/><!-- HANGUL SYLLABLE MWAT -->
+ <map code="0xbade" name="1em"/><!-- HANGUL SYLLABLE MWAP -->
+ <map code="0xbadf" name="1em"/><!-- HANGUL SYLLABLE MWAH -->
+ <map code="0xbae0" name="1em"/><!-- HANGUL SYLLABLE MWAE -->
+ <map code="0xbae1" name="1em"/><!-- HANGUL SYLLABLE MWAEG -->
+ <map code="0xbae2" name="1em"/><!-- HANGUL SYLLABLE MWAEGG -->
+ <map code="0xbae3" name="1em"/><!-- HANGUL SYLLABLE MWAEGS -->
+ <map code="0xbae4" name="1em"/><!-- HANGUL SYLLABLE MWAEN -->
+ <map code="0xbae5" name="1em"/><!-- HANGUL SYLLABLE MWAENJ -->
+ <map code="0xbae6" name="1em"/><!-- HANGUL SYLLABLE MWAENH -->
+ <map code="0xbae7" name="1em"/><!-- HANGUL SYLLABLE MWAED -->
+ <map code="0xbae8" name="1em"/><!-- HANGUL SYLLABLE MWAEL -->
+ <map code="0xbae9" name="1em"/><!-- HANGUL SYLLABLE MWAELG -->
+ <map code="0xbaea" name="1em"/><!-- HANGUL SYLLABLE MWAELM -->
+ <map code="0xbaeb" name="1em"/><!-- HANGUL SYLLABLE MWAELB -->
+ <map code="0xbaec" name="1em"/><!-- HANGUL SYLLABLE MWAELS -->
+ <map code="0xbaed" name="1em"/><!-- HANGUL SYLLABLE MWAELT -->
+ <map code="0xbaee" name="1em"/><!-- HANGUL SYLLABLE MWAELP -->
+ <map code="0xbaef" name="1em"/><!-- HANGUL SYLLABLE MWAELH -->
+ <map code="0xbaf0" name="1em"/><!-- HANGUL SYLLABLE MWAEM -->
+ <map code="0xbaf1" name="1em"/><!-- HANGUL SYLLABLE MWAEB -->
+ <map code="0xbaf2" name="1em"/><!-- HANGUL SYLLABLE MWAEBS -->
+ <map code="0xbaf3" name="1em"/><!-- HANGUL SYLLABLE MWAES -->
+ <map code="0xbaf4" name="1em"/><!-- HANGUL SYLLABLE MWAESS -->
+ <map code="0xbaf5" name="1em"/><!-- HANGUL SYLLABLE MWAENG -->
+ <map code="0xbaf6" name="1em"/><!-- HANGUL SYLLABLE MWAEJ -->
+ <map code="0xbaf7" name="1em"/><!-- HANGUL SYLLABLE MWAEC -->
+ <map code="0xbaf8" name="1em"/><!-- HANGUL SYLLABLE MWAEK -->
+ <map code="0xbaf9" name="1em"/><!-- HANGUL SYLLABLE MWAET -->
+ <map code="0xbafa" name="1em"/><!-- HANGUL SYLLABLE MWAEP -->
+ <map code="0xbafb" name="1em"/><!-- HANGUL SYLLABLE MWAEH -->
+ <map code="0xbafc" name="1em"/><!-- HANGUL SYLLABLE MOE -->
+ <map code="0xbafd" name="1em"/><!-- HANGUL SYLLABLE MOEG -->
+ <map code="0xbafe" name="1em"/><!-- HANGUL SYLLABLE MOEGG -->
+ <map code="0xbaff" name="1em"/><!-- HANGUL SYLLABLE MOEGS -->
+ <map code="0xbb00" name="1em"/><!-- HANGUL SYLLABLE MOEN -->
+ <map code="0xbb01" name="1em"/><!-- HANGUL SYLLABLE MOENJ -->
+ <map code="0xbb02" name="1em"/><!-- HANGUL SYLLABLE MOENH -->
+ <map code="0xbb03" name="1em"/><!-- HANGUL SYLLABLE MOED -->
+ <map code="0xbb04" name="1em"/><!-- HANGUL SYLLABLE MOEL -->
+ <map code="0xbb05" name="1em"/><!-- HANGUL SYLLABLE MOELG -->
+ <map code="0xbb06" name="1em"/><!-- HANGUL SYLLABLE MOELM -->
+ <map code="0xbb07" name="1em"/><!-- HANGUL SYLLABLE MOELB -->
+ <map code="0xbb08" name="1em"/><!-- HANGUL SYLLABLE MOELS -->
+ <map code="0xbb09" name="1em"/><!-- HANGUL SYLLABLE MOELT -->
+ <map code="0xbb0a" name="1em"/><!-- HANGUL SYLLABLE MOELP -->
+ <map code="0xbb0b" name="1em"/><!-- HANGUL SYLLABLE MOELH -->
+ <map code="0xbb0c" name="1em"/><!-- HANGUL SYLLABLE MOEM -->
+ <map code="0xbb0d" name="1em"/><!-- HANGUL SYLLABLE MOEB -->
+ <map code="0xbb0e" name="1em"/><!-- HANGUL SYLLABLE MOEBS -->
+ <map code="0xbb0f" name="1em"/><!-- HANGUL SYLLABLE MOES -->
+ <map code="0xbb10" name="1em"/><!-- HANGUL SYLLABLE MOESS -->
+ <map code="0xbb11" name="1em"/><!-- HANGUL SYLLABLE MOENG -->
+ <map code="0xbb12" name="1em"/><!-- HANGUL SYLLABLE MOEJ -->
+ <map code="0xbb13" name="1em"/><!-- HANGUL SYLLABLE MOEC -->
+ <map code="0xbb14" name="1em"/><!-- HANGUL SYLLABLE MOEK -->
+ <map code="0xbb15" name="1em"/><!-- HANGUL SYLLABLE MOET -->
+ <map code="0xbb16" name="1em"/><!-- HANGUL SYLLABLE MOEP -->
+ <map code="0xbb17" name="1em"/><!-- HANGUL SYLLABLE MOEH -->
+ <map code="0xbb18" name="1em"/><!-- HANGUL SYLLABLE MYO -->
+ <map code="0xbb19" name="1em"/><!-- HANGUL SYLLABLE MYOG -->
+ <map code="0xbb1a" name="1em"/><!-- HANGUL SYLLABLE MYOGG -->
+ <map code="0xbb1b" name="1em"/><!-- HANGUL SYLLABLE MYOGS -->
+ <map code="0xbb1c" name="1em"/><!-- HANGUL SYLLABLE MYON -->
+ <map code="0xbb1d" name="1em"/><!-- HANGUL SYLLABLE MYONJ -->
+ <map code="0xbb1e" name="1em"/><!-- HANGUL SYLLABLE MYONH -->
+ <map code="0xbb1f" name="1em"/><!-- HANGUL SYLLABLE MYOD -->
+ <map code="0xbb20" name="1em"/><!-- HANGUL SYLLABLE MYOL -->
+ <map code="0xbb21" name="1em"/><!-- HANGUL SYLLABLE MYOLG -->
+ <map code="0xbb22" name="1em"/><!-- HANGUL SYLLABLE MYOLM -->
+ <map code="0xbb23" name="1em"/><!-- HANGUL SYLLABLE MYOLB -->
+ <map code="0xbb24" name="1em"/><!-- HANGUL SYLLABLE MYOLS -->
+ <map code="0xbb25" name="1em"/><!-- HANGUL SYLLABLE MYOLT -->
+ <map code="0xbb26" name="1em"/><!-- HANGUL SYLLABLE MYOLP -->
+ <map code="0xbb27" name="1em"/><!-- HANGUL SYLLABLE MYOLH -->
+ <map code="0xbb28" name="1em"/><!-- HANGUL SYLLABLE MYOM -->
+ <map code="0xbb29" name="1em"/><!-- HANGUL SYLLABLE MYOB -->
+ <map code="0xbb2a" name="1em"/><!-- HANGUL SYLLABLE MYOBS -->
+ <map code="0xbb2b" name="1em"/><!-- HANGUL SYLLABLE MYOS -->
+ <map code="0xbb2c" name="1em"/><!-- HANGUL SYLLABLE MYOSS -->
+ <map code="0xbb2d" name="1em"/><!-- HANGUL SYLLABLE MYONG -->
+ <map code="0xbb2e" name="1em"/><!-- HANGUL SYLLABLE MYOJ -->
+ <map code="0xbb2f" name="1em"/><!-- HANGUL SYLLABLE MYOC -->
+ <map code="0xbb30" name="1em"/><!-- HANGUL SYLLABLE MYOK -->
+ <map code="0xbb31" name="1em"/><!-- HANGUL SYLLABLE MYOT -->
+ <map code="0xbb32" name="1em"/><!-- HANGUL SYLLABLE MYOP -->
+ <map code="0xbb33" name="1em"/><!-- HANGUL SYLLABLE MYOH -->
+ <map code="0xbb34" name="1em"/><!-- HANGUL SYLLABLE MU -->
+ <map code="0xbb35" name="1em"/><!-- HANGUL SYLLABLE MUG -->
+ <map code="0xbb36" name="1em"/><!-- HANGUL SYLLABLE MUGG -->
+ <map code="0xbb37" name="1em"/><!-- HANGUL SYLLABLE MUGS -->
+ <map code="0xbb38" name="1em"/><!-- HANGUL SYLLABLE MUN -->
+ <map code="0xbb39" name="1em"/><!-- HANGUL SYLLABLE MUNJ -->
+ <map code="0xbb3a" name="1em"/><!-- HANGUL SYLLABLE MUNH -->
+ <map code="0xbb3b" name="1em"/><!-- HANGUL SYLLABLE MUD -->
+ <map code="0xbb3c" name="1em"/><!-- HANGUL SYLLABLE MUL -->
+ <map code="0xbb3d" name="1em"/><!-- HANGUL SYLLABLE MULG -->
+ <map code="0xbb3e" name="1em"/><!-- HANGUL SYLLABLE MULM -->
+ <map code="0xbb3f" name="1em"/><!-- HANGUL SYLLABLE MULB -->
+ <map code="0xbb40" name="1em"/><!-- HANGUL SYLLABLE MULS -->
+ <map code="0xbb41" name="1em"/><!-- HANGUL SYLLABLE MULT -->
+ <map code="0xbb42" name="1em"/><!-- HANGUL SYLLABLE MULP -->
+ <map code="0xbb43" name="1em"/><!-- HANGUL SYLLABLE MULH -->
+ <map code="0xbb44" name="1em"/><!-- HANGUL SYLLABLE MUM -->
+ <map code="0xbb45" name="1em"/><!-- HANGUL SYLLABLE MUB -->
+ <map code="0xbb46" name="1em"/><!-- HANGUL SYLLABLE MUBS -->
+ <map code="0xbb47" name="1em"/><!-- HANGUL SYLLABLE MUS -->
+ <map code="0xbb48" name="1em"/><!-- HANGUL SYLLABLE MUSS -->
+ <map code="0xbb49" name="1em"/><!-- HANGUL SYLLABLE MUNG -->
+ <map code="0xbb4a" name="1em"/><!-- HANGUL SYLLABLE MUJ -->
+ <map code="0xbb4b" name="1em"/><!-- HANGUL SYLLABLE MUC -->
+ <map code="0xbb4c" name="1em"/><!-- HANGUL SYLLABLE MUK -->
+ <map code="0xbb4d" name="1em"/><!-- HANGUL SYLLABLE MUT -->
+ <map code="0xbb4e" name="1em"/><!-- HANGUL SYLLABLE MUP -->
+ <map code="0xbb4f" name="1em"/><!-- HANGUL SYLLABLE MUH -->
+ <map code="0xbb50" name="1em"/><!-- HANGUL SYLLABLE MWEO -->
+ <map code="0xbb51" name="1em"/><!-- HANGUL SYLLABLE MWEOG -->
+ <map code="0xbb52" name="1em"/><!-- HANGUL SYLLABLE MWEOGG -->
+ <map code="0xbb53" name="1em"/><!-- HANGUL SYLLABLE MWEOGS -->
+ <map code="0xbb54" name="1em"/><!-- HANGUL SYLLABLE MWEON -->
+ <map code="0xbb55" name="1em"/><!-- HANGUL SYLLABLE MWEONJ -->
+ <map code="0xbb56" name="1em"/><!-- HANGUL SYLLABLE MWEONH -->
+ <map code="0xbb57" name="1em"/><!-- HANGUL SYLLABLE MWEOD -->
+ <map code="0xbb58" name="1em"/><!-- HANGUL SYLLABLE MWEOL -->
+ <map code="0xbb59" name="1em"/><!-- HANGUL SYLLABLE MWEOLG -->
+ <map code="0xbb5a" name="1em"/><!-- HANGUL SYLLABLE MWEOLM -->
+ <map code="0xbb5b" name="1em"/><!-- HANGUL SYLLABLE MWEOLB -->
+ <map code="0xbb5c" name="1em"/><!-- HANGUL SYLLABLE MWEOLS -->
+ <map code="0xbb5d" name="1em"/><!-- HANGUL SYLLABLE MWEOLT -->
+ <map code="0xbb5e" name="1em"/><!-- HANGUL SYLLABLE MWEOLP -->
+ <map code="0xbb5f" name="1em"/><!-- HANGUL SYLLABLE MWEOLH -->
+ <map code="0xbb60" name="1em"/><!-- HANGUL SYLLABLE MWEOM -->
+ <map code="0xbb61" name="1em"/><!-- HANGUL SYLLABLE MWEOB -->
+ <map code="0xbb62" name="1em"/><!-- HANGUL SYLLABLE MWEOBS -->
+ <map code="0xbb63" name="1em"/><!-- HANGUL SYLLABLE MWEOS -->
+ <map code="0xbb64" name="1em"/><!-- HANGUL SYLLABLE MWEOSS -->
+ <map code="0xbb65" name="1em"/><!-- HANGUL SYLLABLE MWEONG -->
+ <map code="0xbb66" name="1em"/><!-- HANGUL SYLLABLE MWEOJ -->
+ <map code="0xbb67" name="1em"/><!-- HANGUL SYLLABLE MWEOC -->
+ <map code="0xbb68" name="1em"/><!-- HANGUL SYLLABLE MWEOK -->
+ <map code="0xbb69" name="1em"/><!-- HANGUL SYLLABLE MWEOT -->
+ <map code="0xbb6a" name="1em"/><!-- HANGUL SYLLABLE MWEOP -->
+ <map code="0xbb6b" name="1em"/><!-- HANGUL SYLLABLE MWEOH -->
+ <map code="0xbb6c" name="1em"/><!-- HANGUL SYLLABLE MWE -->
+ <map code="0xbb6d" name="1em"/><!-- HANGUL SYLLABLE MWEG -->
+ <map code="0xbb6e" name="1em"/><!-- HANGUL SYLLABLE MWEGG -->
+ <map code="0xbb6f" name="1em"/><!-- HANGUL SYLLABLE MWEGS -->
+ <map code="0xbb70" name="1em"/><!-- HANGUL SYLLABLE MWEN -->
+ <map code="0xbb71" name="1em"/><!-- HANGUL SYLLABLE MWENJ -->
+ <map code="0xbb72" name="1em"/><!-- HANGUL SYLLABLE MWENH -->
+ <map code="0xbb73" name="1em"/><!-- HANGUL SYLLABLE MWED -->
+ <map code="0xbb74" name="1em"/><!-- HANGUL SYLLABLE MWEL -->
+ <map code="0xbb75" name="1em"/><!-- HANGUL SYLLABLE MWELG -->
+ <map code="0xbb76" name="1em"/><!-- HANGUL SYLLABLE MWELM -->
+ <map code="0xbb77" name="1em"/><!-- HANGUL SYLLABLE MWELB -->
+ <map code="0xbb78" name="1em"/><!-- HANGUL SYLLABLE MWELS -->
+ <map code="0xbb79" name="1em"/><!-- HANGUL SYLLABLE MWELT -->
+ <map code="0xbb7a" name="1em"/><!-- HANGUL SYLLABLE MWELP -->
+ <map code="0xbb7b" name="1em"/><!-- HANGUL SYLLABLE MWELH -->
+ <map code="0xbb7c" name="1em"/><!-- HANGUL SYLLABLE MWEM -->
+ <map code="0xbb7d" name="1em"/><!-- HANGUL SYLLABLE MWEB -->
+ <map code="0xbb7e" name="1em"/><!-- HANGUL SYLLABLE MWEBS -->
+ <map code="0xbb7f" name="1em"/><!-- HANGUL SYLLABLE MWES -->
+ <map code="0xbb80" name="1em"/><!-- HANGUL SYLLABLE MWESS -->
+ <map code="0xbb81" name="1em"/><!-- HANGUL SYLLABLE MWENG -->
+ <map code="0xbb82" name="1em"/><!-- HANGUL SYLLABLE MWEJ -->
+ <map code="0xbb83" name="1em"/><!-- HANGUL SYLLABLE MWEC -->
+ <map code="0xbb84" name="1em"/><!-- HANGUL SYLLABLE MWEK -->
+ <map code="0xbb85" name="1em"/><!-- HANGUL SYLLABLE MWET -->
+ <map code="0xbb86" name="1em"/><!-- HANGUL SYLLABLE MWEP -->
+ <map code="0xbb87" name="1em"/><!-- HANGUL SYLLABLE MWEH -->
+ <map code="0xbb88" name="1em"/><!-- HANGUL SYLLABLE MWI -->
+ <map code="0xbb89" name="1em"/><!-- HANGUL SYLLABLE MWIG -->
+ <map code="0xbb8a" name="1em"/><!-- HANGUL SYLLABLE MWIGG -->
+ <map code="0xbb8b" name="1em"/><!-- HANGUL SYLLABLE MWIGS -->
+ <map code="0xbb8c" name="1em"/><!-- HANGUL SYLLABLE MWIN -->
+ <map code="0xbb8d" name="1em"/><!-- HANGUL SYLLABLE MWINJ -->
+ <map code="0xbb8e" name="1em"/><!-- HANGUL SYLLABLE MWINH -->
+ <map code="0xbb8f" name="1em"/><!-- HANGUL SYLLABLE MWID -->
+ <map code="0xbb90" name="1em"/><!-- HANGUL SYLLABLE MWIL -->
+ <map code="0xbb91" name="1em"/><!-- HANGUL SYLLABLE MWILG -->
+ <map code="0xbb92" name="1em"/><!-- HANGUL SYLLABLE MWILM -->
+ <map code="0xbb93" name="1em"/><!-- HANGUL SYLLABLE MWILB -->
+ <map code="0xbb94" name="1em"/><!-- HANGUL SYLLABLE MWILS -->
+ <map code="0xbb95" name="1em"/><!-- HANGUL SYLLABLE MWILT -->
+ <map code="0xbb96" name="1em"/><!-- HANGUL SYLLABLE MWILP -->
+ <map code="0xbb97" name="1em"/><!-- HANGUL SYLLABLE MWILH -->
+ <map code="0xbb98" name="1em"/><!-- HANGUL SYLLABLE MWIM -->
+ <map code="0xbb99" name="1em"/><!-- HANGUL SYLLABLE MWIB -->
+ <map code="0xbb9a" name="1em"/><!-- HANGUL SYLLABLE MWIBS -->
+ <map code="0xbb9b" name="1em"/><!-- HANGUL SYLLABLE MWIS -->
+ <map code="0xbb9c" name="1em"/><!-- HANGUL SYLLABLE MWISS -->
+ <map code="0xbb9d" name="1em"/><!-- HANGUL SYLLABLE MWING -->
+ <map code="0xbb9e" name="1em"/><!-- HANGUL SYLLABLE MWIJ -->
+ <map code="0xbb9f" name="1em"/><!-- HANGUL SYLLABLE MWIC -->
+ <map code="0xbba0" name="1em"/><!-- HANGUL SYLLABLE MWIK -->
+ <map code="0xbba1" name="1em"/><!-- HANGUL SYLLABLE MWIT -->
+ <map code="0xbba2" name="1em"/><!-- HANGUL SYLLABLE MWIP -->
+ <map code="0xbba3" name="1em"/><!-- HANGUL SYLLABLE MWIH -->
+ <map code="0xbba4" name="1em"/><!-- HANGUL SYLLABLE MYU -->
+ <map code="0xbba5" name="1em"/><!-- HANGUL SYLLABLE MYUG -->
+ <map code="0xbba6" name="1em"/><!-- HANGUL SYLLABLE MYUGG -->
+ <map code="0xbba7" name="1em"/><!-- HANGUL SYLLABLE MYUGS -->
+ <map code="0xbba8" name="1em"/><!-- HANGUL SYLLABLE MYUN -->
+ <map code="0xbba9" name="1em"/><!-- HANGUL SYLLABLE MYUNJ -->
+ <map code="0xbbaa" name="1em"/><!-- HANGUL SYLLABLE MYUNH -->
+ <map code="0xbbab" name="1em"/><!-- HANGUL SYLLABLE MYUD -->
+ <map code="0xbbac" name="1em"/><!-- HANGUL SYLLABLE MYUL -->
+ <map code="0xbbad" name="1em"/><!-- HANGUL SYLLABLE MYULG -->
+ <map code="0xbbae" name="1em"/><!-- HANGUL SYLLABLE MYULM -->
+ <map code="0xbbaf" name="1em"/><!-- HANGUL SYLLABLE MYULB -->
+ <map code="0xbbb0" name="1em"/><!-- HANGUL SYLLABLE MYULS -->
+ <map code="0xbbb1" name="1em"/><!-- HANGUL SYLLABLE MYULT -->
+ <map code="0xbbb2" name="1em"/><!-- HANGUL SYLLABLE MYULP -->
+ <map code="0xbbb3" name="1em"/><!-- HANGUL SYLLABLE MYULH -->
+ <map code="0xbbb4" name="1em"/><!-- HANGUL SYLLABLE MYUM -->
+ <map code="0xbbb5" name="1em"/><!-- HANGUL SYLLABLE MYUB -->
+ <map code="0xbbb6" name="1em"/><!-- HANGUL SYLLABLE MYUBS -->
+ <map code="0xbbb7" name="1em"/><!-- HANGUL SYLLABLE MYUS -->
+ <map code="0xbbb8" name="1em"/><!-- HANGUL SYLLABLE MYUSS -->
+ <map code="0xbbb9" name="1em"/><!-- HANGUL SYLLABLE MYUNG -->
+ <map code="0xbbba" name="1em"/><!-- HANGUL SYLLABLE MYUJ -->
+ <map code="0xbbbb" name="1em"/><!-- HANGUL SYLLABLE MYUC -->
+ <map code="0xbbbc" name="1em"/><!-- HANGUL SYLLABLE MYUK -->
+ <map code="0xbbbd" name="1em"/><!-- HANGUL SYLLABLE MYUT -->
+ <map code="0xbbbe" name="1em"/><!-- HANGUL SYLLABLE MYUP -->
+ <map code="0xbbbf" name="1em"/><!-- HANGUL SYLLABLE MYUH -->
+ <map code="0xbbc0" name="1em"/><!-- HANGUL SYLLABLE MEU -->
+ <map code="0xbbc1" name="1em"/><!-- HANGUL SYLLABLE MEUG -->
+ <map code="0xbbc2" name="1em"/><!-- HANGUL SYLLABLE MEUGG -->
+ <map code="0xbbc3" name="1em"/><!-- HANGUL SYLLABLE MEUGS -->
+ <map code="0xbbc4" name="1em"/><!-- HANGUL SYLLABLE MEUN -->
+ <map code="0xbbc5" name="1em"/><!-- HANGUL SYLLABLE MEUNJ -->
+ <map code="0xbbc6" name="1em"/><!-- HANGUL SYLLABLE MEUNH -->
+ <map code="0xbbc7" name="1em"/><!-- HANGUL SYLLABLE MEUD -->
+ <map code="0xbbc8" name="1em"/><!-- HANGUL SYLLABLE MEUL -->
+ <map code="0xbbc9" name="1em"/><!-- HANGUL SYLLABLE MEULG -->
+ <map code="0xbbca" name="1em"/><!-- HANGUL SYLLABLE MEULM -->
+ <map code="0xbbcb" name="1em"/><!-- HANGUL SYLLABLE MEULB -->
+ <map code="0xbbcc" name="1em"/><!-- HANGUL SYLLABLE MEULS -->
+ <map code="0xbbcd" name="1em"/><!-- HANGUL SYLLABLE MEULT -->
+ <map code="0xbbce" name="1em"/><!-- HANGUL SYLLABLE MEULP -->
+ <map code="0xbbcf" name="1em"/><!-- HANGUL SYLLABLE MEULH -->
+ <map code="0xbbd0" name="1em"/><!-- HANGUL SYLLABLE MEUM -->
+ <map code="0xbbd1" name="1em"/><!-- HANGUL SYLLABLE MEUB -->
+ <map code="0xbbd2" name="1em"/><!-- HANGUL SYLLABLE MEUBS -->
+ <map code="0xbbd3" name="1em"/><!-- HANGUL SYLLABLE MEUS -->
+ <map code="0xbbd4" name="1em"/><!-- HANGUL SYLLABLE MEUSS -->
+ <map code="0xbbd5" name="1em"/><!-- HANGUL SYLLABLE MEUNG -->
+ <map code="0xbbd6" name="1em"/><!-- HANGUL SYLLABLE MEUJ -->
+ <map code="0xbbd7" name="1em"/><!-- HANGUL SYLLABLE MEUC -->
+ <map code="0xbbd8" name="1em"/><!-- HANGUL SYLLABLE MEUK -->
+ <map code="0xbbd9" name="1em"/><!-- HANGUL SYLLABLE MEUT -->
+ <map code="0xbbda" name="1em"/><!-- HANGUL SYLLABLE MEUP -->
+ <map code="0xbbdb" name="1em"/><!-- HANGUL SYLLABLE MEUH -->
+ <map code="0xbbdc" name="1em"/><!-- HANGUL SYLLABLE MYI -->
+ <map code="0xbbdd" name="1em"/><!-- HANGUL SYLLABLE MYIG -->
+ <map code="0xbbde" name="1em"/><!-- HANGUL SYLLABLE MYIGG -->
+ <map code="0xbbdf" name="1em"/><!-- HANGUL SYLLABLE MYIGS -->
+ <map code="0xbbe0" name="1em"/><!-- HANGUL SYLLABLE MYIN -->
+ <map code="0xbbe1" name="1em"/><!-- HANGUL SYLLABLE MYINJ -->
+ <map code="0xbbe2" name="1em"/><!-- HANGUL SYLLABLE MYINH -->
+ <map code="0xbbe3" name="1em"/><!-- HANGUL SYLLABLE MYID -->
+ <map code="0xbbe4" name="1em"/><!-- HANGUL SYLLABLE MYIL -->
+ <map code="0xbbe5" name="1em"/><!-- HANGUL SYLLABLE MYILG -->
+ <map code="0xbbe6" name="1em"/><!-- HANGUL SYLLABLE MYILM -->
+ <map code="0xbbe7" name="1em"/><!-- HANGUL SYLLABLE MYILB -->
+ <map code="0xbbe8" name="1em"/><!-- HANGUL SYLLABLE MYILS -->
+ <map code="0xbbe9" name="1em"/><!-- HANGUL SYLLABLE MYILT -->
+ <map code="0xbbea" name="1em"/><!-- HANGUL SYLLABLE MYILP -->
+ <map code="0xbbeb" name="1em"/><!-- HANGUL SYLLABLE MYILH -->
+ <map code="0xbbec" name="1em"/><!-- HANGUL SYLLABLE MYIM -->
+ <map code="0xbbed" name="1em"/><!-- HANGUL SYLLABLE MYIB -->
+ <map code="0xbbee" name="1em"/><!-- HANGUL SYLLABLE MYIBS -->
+ <map code="0xbbef" name="1em"/><!-- HANGUL SYLLABLE MYIS -->
+ <map code="0xbbf0" name="1em"/><!-- HANGUL SYLLABLE MYISS -->
+ <map code="0xbbf1" name="1em"/><!-- HANGUL SYLLABLE MYING -->
+ <map code="0xbbf2" name="1em"/><!-- HANGUL SYLLABLE MYIJ -->
+ <map code="0xbbf3" name="1em"/><!-- HANGUL SYLLABLE MYIC -->
+ <map code="0xbbf4" name="1em"/><!-- HANGUL SYLLABLE MYIK -->
+ <map code="0xbbf5" name="1em"/><!-- HANGUL SYLLABLE MYIT -->
+ <map code="0xbbf6" name="1em"/><!-- HANGUL SYLLABLE MYIP -->
+ <map code="0xbbf7" name="1em"/><!-- HANGUL SYLLABLE MYIH -->
+ <map code="0xbbf8" name="1em"/><!-- HANGUL SYLLABLE MI -->
+ <map code="0xbbf9" name="1em"/><!-- HANGUL SYLLABLE MIG -->
+ <map code="0xbbfa" name="1em"/><!-- HANGUL SYLLABLE MIGG -->
+ <map code="0xbbfb" name="1em"/><!-- HANGUL SYLLABLE MIGS -->
+ <map code="0xbbfc" name="1em"/><!-- HANGUL SYLLABLE MIN -->
+ <map code="0xbbfd" name="1em"/><!-- HANGUL SYLLABLE MINJ -->
+ <map code="0xbbfe" name="1em"/><!-- HANGUL SYLLABLE MINH -->
+ <map code="0xbbff" name="1em"/><!-- HANGUL SYLLABLE MID -->
+ <map code="0xbc00" name="1em"/><!-- HANGUL SYLLABLE MIL -->
+ <map code="0xbc01" name="1em"/><!-- HANGUL SYLLABLE MILG -->
+ <map code="0xbc02" name="1em"/><!-- HANGUL SYLLABLE MILM -->
+ <map code="0xbc03" name="1em"/><!-- HANGUL SYLLABLE MILB -->
+ <map code="0xbc04" name="1em"/><!-- HANGUL SYLLABLE MILS -->
+ <map code="0xbc05" name="1em"/><!-- HANGUL SYLLABLE MILT -->
+ <map code="0xbc06" name="1em"/><!-- HANGUL SYLLABLE MILP -->
+ <map code="0xbc07" name="1em"/><!-- HANGUL SYLLABLE MILH -->
+ <map code="0xbc08" name="1em"/><!-- HANGUL SYLLABLE MIM -->
+ <map code="0xbc09" name="1em"/><!-- HANGUL SYLLABLE MIB -->
+ <map code="0xbc0a" name="1em"/><!-- HANGUL SYLLABLE MIBS -->
+ <map code="0xbc0b" name="1em"/><!-- HANGUL SYLLABLE MIS -->
+ <map code="0xbc0c" name="1em"/><!-- HANGUL SYLLABLE MISS -->
+ <map code="0xbc0d" name="1em"/><!-- HANGUL SYLLABLE MING -->
+ <map code="0xbc0e" name="1em"/><!-- HANGUL SYLLABLE MIJ -->
+ <map code="0xbc0f" name="1em"/><!-- HANGUL SYLLABLE MIC -->
+ <map code="0xbc10" name="1em"/><!-- HANGUL SYLLABLE MIK -->
+ <map code="0xbc11" name="1em"/><!-- HANGUL SYLLABLE MIT -->
+ <map code="0xbc12" name="1em"/><!-- HANGUL SYLLABLE MIP -->
+ <map code="0xbc13" name="1em"/><!-- HANGUL SYLLABLE MIH -->
+ <map code="0xbc14" name="1em"/><!-- HANGUL SYLLABLE BA -->
+ <map code="0xbc15" name="1em"/><!-- HANGUL SYLLABLE BAG -->
+ <map code="0xbc16" name="1em"/><!-- HANGUL SYLLABLE BAGG -->
+ <map code="0xbc17" name="1em"/><!-- HANGUL SYLLABLE BAGS -->
+ <map code="0xbc18" name="1em"/><!-- HANGUL SYLLABLE BAN -->
+ <map code="0xbc19" name="1em"/><!-- HANGUL SYLLABLE BANJ -->
+ <map code="0xbc1a" name="1em"/><!-- HANGUL SYLLABLE BANH -->
+ <map code="0xbc1b" name="1em"/><!-- HANGUL SYLLABLE BAD -->
+ <map code="0xbc1c" name="1em"/><!-- HANGUL SYLLABLE BAL -->
+ <map code="0xbc1d" name="1em"/><!-- HANGUL SYLLABLE BALG -->
+ <map code="0xbc1e" name="1em"/><!-- HANGUL SYLLABLE BALM -->
+ <map code="0xbc1f" name="1em"/><!-- HANGUL SYLLABLE BALB -->
+ <map code="0xbc20" name="1em"/><!-- HANGUL SYLLABLE BALS -->
+ <map code="0xbc21" name="1em"/><!-- HANGUL SYLLABLE BALT -->
+ <map code="0xbc22" name="1em"/><!-- HANGUL SYLLABLE BALP -->
+ <map code="0xbc23" name="1em"/><!-- HANGUL SYLLABLE BALH -->
+ <map code="0xbc24" name="1em"/><!-- HANGUL SYLLABLE BAM -->
+ <map code="0xbc25" name="1em"/><!-- HANGUL SYLLABLE BAB -->
+ <map code="0xbc26" name="1em"/><!-- HANGUL SYLLABLE BABS -->
+ <map code="0xbc27" name="1em"/><!-- HANGUL SYLLABLE BAS -->
+ <map code="0xbc28" name="1em"/><!-- HANGUL SYLLABLE BASS -->
+ <map code="0xbc29" name="1em"/><!-- HANGUL SYLLABLE BANG -->
+ <map code="0xbc2a" name="1em"/><!-- HANGUL SYLLABLE BAJ -->
+ <map code="0xbc2b" name="1em"/><!-- HANGUL SYLLABLE BAC -->
+ <map code="0xbc2c" name="1em"/><!-- HANGUL SYLLABLE BAK -->
+ <map code="0xbc2d" name="1em"/><!-- HANGUL SYLLABLE BAT -->
+ <map code="0xbc2e" name="1em"/><!-- HANGUL SYLLABLE BAP -->
+ <map code="0xbc2f" name="1em"/><!-- HANGUL SYLLABLE BAH -->
+ <map code="0xbc30" name="1em"/><!-- HANGUL SYLLABLE BAE -->
+ <map code="0xbc31" name="1em"/><!-- HANGUL SYLLABLE BAEG -->
+ <map code="0xbc32" name="1em"/><!-- HANGUL SYLLABLE BAEGG -->
+ <map code="0xbc33" name="1em"/><!-- HANGUL SYLLABLE BAEGS -->
+ <map code="0xbc34" name="1em"/><!-- HANGUL SYLLABLE BAEN -->
+ <map code="0xbc35" name="1em"/><!-- HANGUL SYLLABLE BAENJ -->
+ <map code="0xbc36" name="1em"/><!-- HANGUL SYLLABLE BAENH -->
+ <map code="0xbc37" name="1em"/><!-- HANGUL SYLLABLE BAED -->
+ <map code="0xbc38" name="1em"/><!-- HANGUL SYLLABLE BAEL -->
+ <map code="0xbc39" name="1em"/><!-- HANGUL SYLLABLE BAELG -->
+ <map code="0xbc3a" name="1em"/><!-- HANGUL SYLLABLE BAELM -->
+ <map code="0xbc3b" name="1em"/><!-- HANGUL SYLLABLE BAELB -->
+ <map code="0xbc3c" name="1em"/><!-- HANGUL SYLLABLE BAELS -->
+ <map code="0xbc3d" name="1em"/><!-- HANGUL SYLLABLE BAELT -->
+ <map code="0xbc3e" name="1em"/><!-- HANGUL SYLLABLE BAELP -->
+ <map code="0xbc3f" name="1em"/><!-- HANGUL SYLLABLE BAELH -->
+ <map code="0xbc40" name="1em"/><!-- HANGUL SYLLABLE BAEM -->
+ <map code="0xbc41" name="1em"/><!-- HANGUL SYLLABLE BAEB -->
+ <map code="0xbc42" name="1em"/><!-- HANGUL SYLLABLE BAEBS -->
+ <map code="0xbc43" name="1em"/><!-- HANGUL SYLLABLE BAES -->
+ <map code="0xbc44" name="1em"/><!-- HANGUL SYLLABLE BAESS -->
+ <map code="0xbc45" name="1em"/><!-- HANGUL SYLLABLE BAENG -->
+ <map code="0xbc46" name="1em"/><!-- HANGUL SYLLABLE BAEJ -->
+ <map code="0xbc47" name="1em"/><!-- HANGUL SYLLABLE BAEC -->
+ <map code="0xbc48" name="1em"/><!-- HANGUL SYLLABLE BAEK -->
+ <map code="0xbc49" name="1em"/><!-- HANGUL SYLLABLE BAET -->
+ <map code="0xbc4a" name="1em"/><!-- HANGUL SYLLABLE BAEP -->
+ <map code="0xbc4b" name="1em"/><!-- HANGUL SYLLABLE BAEH -->
+ <map code="0xbc4c" name="1em"/><!-- HANGUL SYLLABLE BYA -->
+ <map code="0xbc4d" name="1em"/><!-- HANGUL SYLLABLE BYAG -->
+ <map code="0xbc4e" name="1em"/><!-- HANGUL SYLLABLE BYAGG -->
+ <map code="0xbc4f" name="1em"/><!-- HANGUL SYLLABLE BYAGS -->
+ <map code="0xbc50" name="1em"/><!-- HANGUL SYLLABLE BYAN -->
+ <map code="0xbc51" name="1em"/><!-- HANGUL SYLLABLE BYANJ -->
+ <map code="0xbc52" name="1em"/><!-- HANGUL SYLLABLE BYANH -->
+ <map code="0xbc53" name="1em"/><!-- HANGUL SYLLABLE BYAD -->
+ <map code="0xbc54" name="1em"/><!-- HANGUL SYLLABLE BYAL -->
+ <map code="0xbc55" name="1em"/><!-- HANGUL SYLLABLE BYALG -->
+ <map code="0xbc56" name="1em"/><!-- HANGUL SYLLABLE BYALM -->
+ <map code="0xbc57" name="1em"/><!-- HANGUL SYLLABLE BYALB -->
+ <map code="0xbc58" name="1em"/><!-- HANGUL SYLLABLE BYALS -->
+ <map code="0xbc59" name="1em"/><!-- HANGUL SYLLABLE BYALT -->
+ <map code="0xbc5a" name="1em"/><!-- HANGUL SYLLABLE BYALP -->
+ <map code="0xbc5b" name="1em"/><!-- HANGUL SYLLABLE BYALH -->
+ <map code="0xbc5c" name="1em"/><!-- HANGUL SYLLABLE BYAM -->
+ <map code="0xbc5d" name="1em"/><!-- HANGUL SYLLABLE BYAB -->
+ <map code="0xbc5e" name="1em"/><!-- HANGUL SYLLABLE BYABS -->
+ <map code="0xbc5f" name="1em"/><!-- HANGUL SYLLABLE BYAS -->
+ <map code="0xbc60" name="1em"/><!-- HANGUL SYLLABLE BYASS -->
+ <map code="0xbc61" name="1em"/><!-- HANGUL SYLLABLE BYANG -->
+ <map code="0xbc62" name="1em"/><!-- HANGUL SYLLABLE BYAJ -->
+ <map code="0xbc63" name="1em"/><!-- HANGUL SYLLABLE BYAC -->
+ <map code="0xbc64" name="1em"/><!-- HANGUL SYLLABLE BYAK -->
+ <map code="0xbc65" name="1em"/><!-- HANGUL SYLLABLE BYAT -->
+ <map code="0xbc66" name="1em"/><!-- HANGUL SYLLABLE BYAP -->
+ <map code="0xbc67" name="1em"/><!-- HANGUL SYLLABLE BYAH -->
+ <map code="0xbc68" name="1em"/><!-- HANGUL SYLLABLE BYAE -->
+ <map code="0xbc69" name="1em"/><!-- HANGUL SYLLABLE BYAEG -->
+ <map code="0xbc6a" name="1em"/><!-- HANGUL SYLLABLE BYAEGG -->
+ <map code="0xbc6b" name="1em"/><!-- HANGUL SYLLABLE BYAEGS -->
+ <map code="0xbc6c" name="1em"/><!-- HANGUL SYLLABLE BYAEN -->
+ <map code="0xbc6d" name="1em"/><!-- HANGUL SYLLABLE BYAENJ -->
+ <map code="0xbc6e" name="1em"/><!-- HANGUL SYLLABLE BYAENH -->
+ <map code="0xbc6f" name="1em"/><!-- HANGUL SYLLABLE BYAED -->
+ <map code="0xbc70" name="1em"/><!-- HANGUL SYLLABLE BYAEL -->
+ <map code="0xbc71" name="1em"/><!-- HANGUL SYLLABLE BYAELG -->
+ <map code="0xbc72" name="1em"/><!-- HANGUL SYLLABLE BYAELM -->
+ <map code="0xbc73" name="1em"/><!-- HANGUL SYLLABLE BYAELB -->
+ <map code="0xbc74" name="1em"/><!-- HANGUL SYLLABLE BYAELS -->
+ <map code="0xbc75" name="1em"/><!-- HANGUL SYLLABLE BYAELT -->
+ <map code="0xbc76" name="1em"/><!-- HANGUL SYLLABLE BYAELP -->
+ <map code="0xbc77" name="1em"/><!-- HANGUL SYLLABLE BYAELH -->
+ <map code="0xbc78" name="1em"/><!-- HANGUL SYLLABLE BYAEM -->
+ <map code="0xbc79" name="1em"/><!-- HANGUL SYLLABLE BYAEB -->
+ <map code="0xbc7a" name="1em"/><!-- HANGUL SYLLABLE BYAEBS -->
+ <map code="0xbc7b" name="1em"/><!-- HANGUL SYLLABLE BYAES -->
+ <map code="0xbc7c" name="1em"/><!-- HANGUL SYLLABLE BYAESS -->
+ <map code="0xbc7d" name="1em"/><!-- HANGUL SYLLABLE BYAENG -->
+ <map code="0xbc7e" name="1em"/><!-- HANGUL SYLLABLE BYAEJ -->
+ <map code="0xbc7f" name="1em"/><!-- HANGUL SYLLABLE BYAEC -->
+ <map code="0xbc80" name="1em"/><!-- HANGUL SYLLABLE BYAEK -->
+ <map code="0xbc81" name="1em"/><!-- HANGUL SYLLABLE BYAET -->
+ <map code="0xbc82" name="1em"/><!-- HANGUL SYLLABLE BYAEP -->
+ <map code="0xbc83" name="1em"/><!-- HANGUL SYLLABLE BYAEH -->
+ <map code="0xbc84" name="1em"/><!-- HANGUL SYLLABLE BEO -->
+ <map code="0xbc85" name="1em"/><!-- HANGUL SYLLABLE BEOG -->
+ <map code="0xbc86" name="1em"/><!-- HANGUL SYLLABLE BEOGG -->
+ <map code="0xbc87" name="1em"/><!-- HANGUL SYLLABLE BEOGS -->
+ <map code="0xbc88" name="1em"/><!-- HANGUL SYLLABLE BEON -->
+ <map code="0xbc89" name="1em"/><!-- HANGUL SYLLABLE BEONJ -->
+ <map code="0xbc8a" name="1em"/><!-- HANGUL SYLLABLE BEONH -->
+ <map code="0xbc8b" name="1em"/><!-- HANGUL SYLLABLE BEOD -->
+ <map code="0xbc8c" name="1em"/><!-- HANGUL SYLLABLE BEOL -->
+ <map code="0xbc8d" name="1em"/><!-- HANGUL SYLLABLE BEOLG -->
+ <map code="0xbc8e" name="1em"/><!-- HANGUL SYLLABLE BEOLM -->
+ <map code="0xbc8f" name="1em"/><!-- HANGUL SYLLABLE BEOLB -->
+ <map code="0xbc90" name="1em"/><!-- HANGUL SYLLABLE BEOLS -->
+ <map code="0xbc91" name="1em"/><!-- HANGUL SYLLABLE BEOLT -->
+ <map code="0xbc92" name="1em"/><!-- HANGUL SYLLABLE BEOLP -->
+ <map code="0xbc93" name="1em"/><!-- HANGUL SYLLABLE BEOLH -->
+ <map code="0xbc94" name="1em"/><!-- HANGUL SYLLABLE BEOM -->
+ <map code="0xbc95" name="1em"/><!-- HANGUL SYLLABLE BEOB -->
+ <map code="0xbc96" name="1em"/><!-- HANGUL SYLLABLE BEOBS -->
+ <map code="0xbc97" name="1em"/><!-- HANGUL SYLLABLE BEOS -->
+ <map code="0xbc98" name="1em"/><!-- HANGUL SYLLABLE BEOSS -->
+ <map code="0xbc99" name="1em"/><!-- HANGUL SYLLABLE BEONG -->
+ <map code="0xbc9a" name="1em"/><!-- HANGUL SYLLABLE BEOJ -->
+ <map code="0xbc9b" name="1em"/><!-- HANGUL SYLLABLE BEOC -->
+ <map code="0xbc9c" name="1em"/><!-- HANGUL SYLLABLE BEOK -->
+ <map code="0xbc9d" name="1em"/><!-- HANGUL SYLLABLE BEOT -->
+ <map code="0xbc9e" name="1em"/><!-- HANGUL SYLLABLE BEOP -->
+ <map code="0xbc9f" name="1em"/><!-- HANGUL SYLLABLE BEOH -->
+ <map code="0xbca0" name="1em"/><!-- HANGUL SYLLABLE BE -->
+ <map code="0xbca1" name="1em"/><!-- HANGUL SYLLABLE BEG -->
+ <map code="0xbca2" name="1em"/><!-- HANGUL SYLLABLE BEGG -->
+ <map code="0xbca3" name="1em"/><!-- HANGUL SYLLABLE BEGS -->
+ <map code="0xbca4" name="1em"/><!-- HANGUL SYLLABLE BEN -->
+ <map code="0xbca5" name="1em"/><!-- HANGUL SYLLABLE BENJ -->
+ <map code="0xbca6" name="1em"/><!-- HANGUL SYLLABLE BENH -->
+ <map code="0xbca7" name="1em"/><!-- HANGUL SYLLABLE BED -->
+ <map code="0xbca8" name="1em"/><!-- HANGUL SYLLABLE BEL -->
+ <map code="0xbca9" name="1em"/><!-- HANGUL SYLLABLE BELG -->
+ <map code="0xbcaa" name="1em"/><!-- HANGUL SYLLABLE BELM -->
+ <map code="0xbcab" name="1em"/><!-- HANGUL SYLLABLE BELB -->
+ <map code="0xbcac" name="1em"/><!-- HANGUL SYLLABLE BELS -->
+ <map code="0xbcad" name="1em"/><!-- HANGUL SYLLABLE BELT -->
+ <map code="0xbcae" name="1em"/><!-- HANGUL SYLLABLE BELP -->
+ <map code="0xbcaf" name="1em"/><!-- HANGUL SYLLABLE BELH -->
+ <map code="0xbcb0" name="1em"/><!-- HANGUL SYLLABLE BEM -->
+ <map code="0xbcb1" name="1em"/><!-- HANGUL SYLLABLE BEB -->
+ <map code="0xbcb2" name="1em"/><!-- HANGUL SYLLABLE BEBS -->
+ <map code="0xbcb3" name="1em"/><!-- HANGUL SYLLABLE BES -->
+ <map code="0xbcb4" name="1em"/><!-- HANGUL SYLLABLE BESS -->
+ <map code="0xbcb5" name="1em"/><!-- HANGUL SYLLABLE BENG -->
+ <map code="0xbcb6" name="1em"/><!-- HANGUL SYLLABLE BEJ -->
+ <map code="0xbcb7" name="1em"/><!-- HANGUL SYLLABLE BEC -->
+ <map code="0xbcb8" name="1em"/><!-- HANGUL SYLLABLE BEK -->
+ <map code="0xbcb9" name="1em"/><!-- HANGUL SYLLABLE BET -->
+ <map code="0xbcba" name="1em"/><!-- HANGUL SYLLABLE BEP -->
+ <map code="0xbcbb" name="1em"/><!-- HANGUL SYLLABLE BEH -->
+ <map code="0xbcbc" name="1em"/><!-- HANGUL SYLLABLE BYEO -->
+ <map code="0xbcbd" name="1em"/><!-- HANGUL SYLLABLE BYEOG -->
+ <map code="0xbcbe" name="1em"/><!-- HANGUL SYLLABLE BYEOGG -->
+ <map code="0xbcbf" name="1em"/><!-- HANGUL SYLLABLE BYEOGS -->
+ <map code="0xbcc0" name="1em"/><!-- HANGUL SYLLABLE BYEON -->
+ <map code="0xbcc1" name="1em"/><!-- HANGUL SYLLABLE BYEONJ -->
+ <map code="0xbcc2" name="1em"/><!-- HANGUL SYLLABLE BYEONH -->
+ <map code="0xbcc3" name="1em"/><!-- HANGUL SYLLABLE BYEOD -->
+ <map code="0xbcc4" name="1em"/><!-- HANGUL SYLLABLE BYEOL -->
+ <map code="0xbcc5" name="1em"/><!-- HANGUL SYLLABLE BYEOLG -->
+ <map code="0xbcc6" name="1em"/><!-- HANGUL SYLLABLE BYEOLM -->
+ <map code="0xbcc7" name="1em"/><!-- HANGUL SYLLABLE BYEOLB -->
+ <map code="0xbcc8" name="1em"/><!-- HANGUL SYLLABLE BYEOLS -->
+ <map code="0xbcc9" name="1em"/><!-- HANGUL SYLLABLE BYEOLT -->
+ <map code="0xbcca" name="1em"/><!-- HANGUL SYLLABLE BYEOLP -->
+ <map code="0xbccb" name="1em"/><!-- HANGUL SYLLABLE BYEOLH -->
+ <map code="0xbccc" name="1em"/><!-- HANGUL SYLLABLE BYEOM -->
+ <map code="0xbccd" name="1em"/><!-- HANGUL SYLLABLE BYEOB -->
+ <map code="0xbcce" name="1em"/><!-- HANGUL SYLLABLE BYEOBS -->
+ <map code="0xbccf" name="1em"/><!-- HANGUL SYLLABLE BYEOS -->
+ <map code="0xbcd0" name="1em"/><!-- HANGUL SYLLABLE BYEOSS -->
+ <map code="0xbcd1" name="1em"/><!-- HANGUL SYLLABLE BYEONG -->
+ <map code="0xbcd2" name="1em"/><!-- HANGUL SYLLABLE BYEOJ -->
+ <map code="0xbcd3" name="1em"/><!-- HANGUL SYLLABLE BYEOC -->
+ <map code="0xbcd4" name="1em"/><!-- HANGUL SYLLABLE BYEOK -->
+ <map code="0xbcd5" name="1em"/><!-- HANGUL SYLLABLE BYEOT -->
+ <map code="0xbcd6" name="1em"/><!-- HANGUL SYLLABLE BYEOP -->
+ <map code="0xbcd7" name="1em"/><!-- HANGUL SYLLABLE BYEOH -->
+ <map code="0xbcd8" name="1em"/><!-- HANGUL SYLLABLE BYE -->
+ <map code="0xbcd9" name="1em"/><!-- HANGUL SYLLABLE BYEG -->
+ <map code="0xbcda" name="1em"/><!-- HANGUL SYLLABLE BYEGG -->
+ <map code="0xbcdb" name="1em"/><!-- HANGUL SYLLABLE BYEGS -->
+ <map code="0xbcdc" name="1em"/><!-- HANGUL SYLLABLE BYEN -->
+ <map code="0xbcdd" name="1em"/><!-- HANGUL SYLLABLE BYENJ -->
+ <map code="0xbcde" name="1em"/><!-- HANGUL SYLLABLE BYENH -->
+ <map code="0xbcdf" name="1em"/><!-- HANGUL SYLLABLE BYED -->
+ <map code="0xbce0" name="1em"/><!-- HANGUL SYLLABLE BYEL -->
+ <map code="0xbce1" name="1em"/><!-- HANGUL SYLLABLE BYELG -->
+ <map code="0xbce2" name="1em"/><!-- HANGUL SYLLABLE BYELM -->
+ <map code="0xbce3" name="1em"/><!-- HANGUL SYLLABLE BYELB -->
+ <map code="0xbce4" name="1em"/><!-- HANGUL SYLLABLE BYELS -->
+ <map code="0xbce5" name="1em"/><!-- HANGUL SYLLABLE BYELT -->
+ <map code="0xbce6" name="1em"/><!-- HANGUL SYLLABLE BYELP -->
+ <map code="0xbce7" name="1em"/><!-- HANGUL SYLLABLE BYELH -->
+ <map code="0xbce8" name="1em"/><!-- HANGUL SYLLABLE BYEM -->
+ <map code="0xbce9" name="1em"/><!-- HANGUL SYLLABLE BYEB -->
+ <map code="0xbcea" name="1em"/><!-- HANGUL SYLLABLE BYEBS -->
+ <map code="0xbceb" name="1em"/><!-- HANGUL SYLLABLE BYES -->
+ <map code="0xbcec" name="1em"/><!-- HANGUL SYLLABLE BYESS -->
+ <map code="0xbced" name="1em"/><!-- HANGUL SYLLABLE BYENG -->
+ <map code="0xbcee" name="1em"/><!-- HANGUL SYLLABLE BYEJ -->
+ <map code="0xbcef" name="1em"/><!-- HANGUL SYLLABLE BYEC -->
+ <map code="0xbcf0" name="1em"/><!-- HANGUL SYLLABLE BYEK -->
+ <map code="0xbcf1" name="1em"/><!-- HANGUL SYLLABLE BYET -->
+ <map code="0xbcf2" name="1em"/><!-- HANGUL SYLLABLE BYEP -->
+ <map code="0xbcf3" name="1em"/><!-- HANGUL SYLLABLE BYEH -->
+ <map code="0xbcf4" name="1em"/><!-- HANGUL SYLLABLE BO -->
+ <map code="0xbcf5" name="1em"/><!-- HANGUL SYLLABLE BOG -->
+ <map code="0xbcf6" name="1em"/><!-- HANGUL SYLLABLE BOGG -->
+ <map code="0xbcf7" name="1em"/><!-- HANGUL SYLLABLE BOGS -->
+ <map code="0xbcf8" name="1em"/><!-- HANGUL SYLLABLE BON -->
+ <map code="0xbcf9" name="1em"/><!-- HANGUL SYLLABLE BONJ -->
+ <map code="0xbcfa" name="1em"/><!-- HANGUL SYLLABLE BONH -->
+ <map code="0xbcfb" name="1em"/><!-- HANGUL SYLLABLE BOD -->
+ <map code="0xbcfc" name="1em"/><!-- HANGUL SYLLABLE BOL -->
+ <map code="0xbcfd" name="1em"/><!-- HANGUL SYLLABLE BOLG -->
+ <map code="0xbcfe" name="1em"/><!-- HANGUL SYLLABLE BOLM -->
+ <map code="0xbcff" name="1em"/><!-- HANGUL SYLLABLE BOLB -->
+ <map code="0xbd00" name="1em"/><!-- HANGUL SYLLABLE BOLS -->
+ <map code="0xbd01" name="1em"/><!-- HANGUL SYLLABLE BOLT -->
+ <map code="0xbd02" name="1em"/><!-- HANGUL SYLLABLE BOLP -->
+ <map code="0xbd03" name="1em"/><!-- HANGUL SYLLABLE BOLH -->
+ <map code="0xbd04" name="1em"/><!-- HANGUL SYLLABLE BOM -->
+ <map code="0xbd05" name="1em"/><!-- HANGUL SYLLABLE BOB -->
+ <map code="0xbd06" name="1em"/><!-- HANGUL SYLLABLE BOBS -->
+ <map code="0xbd07" name="1em"/><!-- HANGUL SYLLABLE BOS -->
+ <map code="0xbd08" name="1em"/><!-- HANGUL SYLLABLE BOSS -->
+ <map code="0xbd09" name="1em"/><!-- HANGUL SYLLABLE BONG -->
+ <map code="0xbd0a" name="1em"/><!-- HANGUL SYLLABLE BOJ -->
+ <map code="0xbd0b" name="1em"/><!-- HANGUL SYLLABLE BOC -->
+ <map code="0xbd0c" name="1em"/><!-- HANGUL SYLLABLE BOK -->
+ <map code="0xbd0d" name="1em"/><!-- HANGUL SYLLABLE BOT -->
+ <map code="0xbd0e" name="1em"/><!-- HANGUL SYLLABLE BOP -->
+ <map code="0xbd0f" name="1em"/><!-- HANGUL SYLLABLE BOH -->
+ <map code="0xbd10" name="1em"/><!-- HANGUL SYLLABLE BWA -->
+ <map code="0xbd11" name="1em"/><!-- HANGUL SYLLABLE BWAG -->
+ <map code="0xbd12" name="1em"/><!-- HANGUL SYLLABLE BWAGG -->
+ <map code="0xbd13" name="1em"/><!-- HANGUL SYLLABLE BWAGS -->
+ <map code="0xbd14" name="1em"/><!-- HANGUL SYLLABLE BWAN -->
+ <map code="0xbd15" name="1em"/><!-- HANGUL SYLLABLE BWANJ -->
+ <map code="0xbd16" name="1em"/><!-- HANGUL SYLLABLE BWANH -->
+ <map code="0xbd17" name="1em"/><!-- HANGUL SYLLABLE BWAD -->
+ <map code="0xbd18" name="1em"/><!-- HANGUL SYLLABLE BWAL -->
+ <map code="0xbd19" name="1em"/><!-- HANGUL SYLLABLE BWALG -->
+ <map code="0xbd1a" name="1em"/><!-- HANGUL SYLLABLE BWALM -->
+ <map code="0xbd1b" name="1em"/><!-- HANGUL SYLLABLE BWALB -->
+ <map code="0xbd1c" name="1em"/><!-- HANGUL SYLLABLE BWALS -->
+ <map code="0xbd1d" name="1em"/><!-- HANGUL SYLLABLE BWALT -->
+ <map code="0xbd1e" name="1em"/><!-- HANGUL SYLLABLE BWALP -->
+ <map code="0xbd1f" name="1em"/><!-- HANGUL SYLLABLE BWALH -->
+ <map code="0xbd20" name="1em"/><!-- HANGUL SYLLABLE BWAM -->
+ <map code="0xbd21" name="1em"/><!-- HANGUL SYLLABLE BWAB -->
+ <map code="0xbd22" name="1em"/><!-- HANGUL SYLLABLE BWABS -->
+ <map code="0xbd23" name="1em"/><!-- HANGUL SYLLABLE BWAS -->
+ <map code="0xbd24" name="1em"/><!-- HANGUL SYLLABLE BWASS -->
+ <map code="0xbd25" name="1em"/><!-- HANGUL SYLLABLE BWANG -->
+ <map code="0xbd26" name="1em"/><!-- HANGUL SYLLABLE BWAJ -->
+ <map code="0xbd27" name="1em"/><!-- HANGUL SYLLABLE BWAC -->
+ <map code="0xbd28" name="1em"/><!-- HANGUL SYLLABLE BWAK -->
+ <map code="0xbd29" name="1em"/><!-- HANGUL SYLLABLE BWAT -->
+ <map code="0xbd2a" name="1em"/><!-- HANGUL SYLLABLE BWAP -->
+ <map code="0xbd2b" name="1em"/><!-- HANGUL SYLLABLE BWAH -->
+ <map code="0xbd2c" name="1em"/><!-- HANGUL SYLLABLE BWAE -->
+ <map code="0xbd2d" name="1em"/><!-- HANGUL SYLLABLE BWAEG -->
+ <map code="0xbd2e" name="1em"/><!-- HANGUL SYLLABLE BWAEGG -->
+ <map code="0xbd2f" name="1em"/><!-- HANGUL SYLLABLE BWAEGS -->
+ <map code="0xbd30" name="1em"/><!-- HANGUL SYLLABLE BWAEN -->
+ <map code="0xbd31" name="1em"/><!-- HANGUL SYLLABLE BWAENJ -->
+ <map code="0xbd32" name="1em"/><!-- HANGUL SYLLABLE BWAENH -->
+ <map code="0xbd33" name="1em"/><!-- HANGUL SYLLABLE BWAED -->
+ <map code="0xbd34" name="1em"/><!-- HANGUL SYLLABLE BWAEL -->
+ <map code="0xbd35" name="1em"/><!-- HANGUL SYLLABLE BWAELG -->
+ <map code="0xbd36" name="1em"/><!-- HANGUL SYLLABLE BWAELM -->
+ <map code="0xbd37" name="1em"/><!-- HANGUL SYLLABLE BWAELB -->
+ <map code="0xbd38" name="1em"/><!-- HANGUL SYLLABLE BWAELS -->
+ <map code="0xbd39" name="1em"/><!-- HANGUL SYLLABLE BWAELT -->
+ <map code="0xbd3a" name="1em"/><!-- HANGUL SYLLABLE BWAELP -->
+ <map code="0xbd3b" name="1em"/><!-- HANGUL SYLLABLE BWAELH -->
+ <map code="0xbd3c" name="1em"/><!-- HANGUL SYLLABLE BWAEM -->
+ <map code="0xbd3d" name="1em"/><!-- HANGUL SYLLABLE BWAEB -->
+ <map code="0xbd3e" name="1em"/><!-- HANGUL SYLLABLE BWAEBS -->
+ <map code="0xbd3f" name="1em"/><!-- HANGUL SYLLABLE BWAES -->
+ <map code="0xbd40" name="1em"/><!-- HANGUL SYLLABLE BWAESS -->
+ <map code="0xbd41" name="1em"/><!-- HANGUL SYLLABLE BWAENG -->
+ <map code="0xbd42" name="1em"/><!-- HANGUL SYLLABLE BWAEJ -->
+ <map code="0xbd43" name="1em"/><!-- HANGUL SYLLABLE BWAEC -->
+ <map code="0xbd44" name="1em"/><!-- HANGUL SYLLABLE BWAEK -->
+ <map code="0xbd45" name="1em"/><!-- HANGUL SYLLABLE BWAET -->
+ <map code="0xbd46" name="1em"/><!-- HANGUL SYLLABLE BWAEP -->
+ <map code="0xbd47" name="1em"/><!-- HANGUL SYLLABLE BWAEH -->
+ <map code="0xbd48" name="1em"/><!-- HANGUL SYLLABLE BOE -->
+ <map code="0xbd49" name="1em"/><!-- HANGUL SYLLABLE BOEG -->
+ <map code="0xbd4a" name="1em"/><!-- HANGUL SYLLABLE BOEGG -->
+ <map code="0xbd4b" name="1em"/><!-- HANGUL SYLLABLE BOEGS -->
+ <map code="0xbd4c" name="1em"/><!-- HANGUL SYLLABLE BOEN -->
+ <map code="0xbd4d" name="1em"/><!-- HANGUL SYLLABLE BOENJ -->
+ <map code="0xbd4e" name="1em"/><!-- HANGUL SYLLABLE BOENH -->
+ <map code="0xbd4f" name="1em"/><!-- HANGUL SYLLABLE BOED -->
+ <map code="0xbd50" name="1em"/><!-- HANGUL SYLLABLE BOEL -->
+ <map code="0xbd51" name="1em"/><!-- HANGUL SYLLABLE BOELG -->
+ <map code="0xbd52" name="1em"/><!-- HANGUL SYLLABLE BOELM -->
+ <map code="0xbd53" name="1em"/><!-- HANGUL SYLLABLE BOELB -->
+ <map code="0xbd54" name="1em"/><!-- HANGUL SYLLABLE BOELS -->
+ <map code="0xbd55" name="1em"/><!-- HANGUL SYLLABLE BOELT -->
+ <map code="0xbd56" name="1em"/><!-- HANGUL SYLLABLE BOELP -->
+ <map code="0xbd57" name="1em"/><!-- HANGUL SYLLABLE BOELH -->
+ <map code="0xbd58" name="1em"/><!-- HANGUL SYLLABLE BOEM -->
+ <map code="0xbd59" name="1em"/><!-- HANGUL SYLLABLE BOEB -->
+ <map code="0xbd5a" name="1em"/><!-- HANGUL SYLLABLE BOEBS -->
+ <map code="0xbd5b" name="1em"/><!-- HANGUL SYLLABLE BOES -->
+ <map code="0xbd5c" name="1em"/><!-- HANGUL SYLLABLE BOESS -->
+ <map code="0xbd5d" name="1em"/><!-- HANGUL SYLLABLE BOENG -->
+ <map code="0xbd5e" name="1em"/><!-- HANGUL SYLLABLE BOEJ -->
+ <map code="0xbd5f" name="1em"/><!-- HANGUL SYLLABLE BOEC -->
+ <map code="0xbd60" name="1em"/><!-- HANGUL SYLLABLE BOEK -->
+ <map code="0xbd61" name="1em"/><!-- HANGUL SYLLABLE BOET -->
+ <map code="0xbd62" name="1em"/><!-- HANGUL SYLLABLE BOEP -->
+ <map code="0xbd63" name="1em"/><!-- HANGUL SYLLABLE BOEH -->
+ <map code="0xbd64" name="1em"/><!-- HANGUL SYLLABLE BYO -->
+ <map code="0xbd65" name="1em"/><!-- HANGUL SYLLABLE BYOG -->
+ <map code="0xbd66" name="1em"/><!-- HANGUL SYLLABLE BYOGG -->
+ <map code="0xbd67" name="1em"/><!-- HANGUL SYLLABLE BYOGS -->
+ <map code="0xbd68" name="1em"/><!-- HANGUL SYLLABLE BYON -->
+ <map code="0xbd69" name="1em"/><!-- HANGUL SYLLABLE BYONJ -->
+ <map code="0xbd6a" name="1em"/><!-- HANGUL SYLLABLE BYONH -->
+ <map code="0xbd6b" name="1em"/><!-- HANGUL SYLLABLE BYOD -->
+ <map code="0xbd6c" name="1em"/><!-- HANGUL SYLLABLE BYOL -->
+ <map code="0xbd6d" name="1em"/><!-- HANGUL SYLLABLE BYOLG -->
+ <map code="0xbd6e" name="1em"/><!-- HANGUL SYLLABLE BYOLM -->
+ <map code="0xbd6f" name="1em"/><!-- HANGUL SYLLABLE BYOLB -->
+ <map code="0xbd70" name="1em"/><!-- HANGUL SYLLABLE BYOLS -->
+ <map code="0xbd71" name="1em"/><!-- HANGUL SYLLABLE BYOLT -->
+ <map code="0xbd72" name="1em"/><!-- HANGUL SYLLABLE BYOLP -->
+ <map code="0xbd73" name="1em"/><!-- HANGUL SYLLABLE BYOLH -->
+ <map code="0xbd74" name="1em"/><!-- HANGUL SYLLABLE BYOM -->
+ <map code="0xbd75" name="1em"/><!-- HANGUL SYLLABLE BYOB -->
+ <map code="0xbd76" name="1em"/><!-- HANGUL SYLLABLE BYOBS -->
+ <map code="0xbd77" name="1em"/><!-- HANGUL SYLLABLE BYOS -->
+ <map code="0xbd78" name="1em"/><!-- HANGUL SYLLABLE BYOSS -->
+ <map code="0xbd79" name="1em"/><!-- HANGUL SYLLABLE BYONG -->
+ <map code="0xbd7a" name="1em"/><!-- HANGUL SYLLABLE BYOJ -->
+ <map code="0xbd7b" name="1em"/><!-- HANGUL SYLLABLE BYOC -->
+ <map code="0xbd7c" name="1em"/><!-- HANGUL SYLLABLE BYOK -->
+ <map code="0xbd7d" name="1em"/><!-- HANGUL SYLLABLE BYOT -->
+ <map code="0xbd7e" name="1em"/><!-- HANGUL SYLLABLE BYOP -->
+ <map code="0xbd7f" name="1em"/><!-- HANGUL SYLLABLE BYOH -->
+ <map code="0xbd80" name="1em"/><!-- HANGUL SYLLABLE BU -->
+ <map code="0xbd81" name="1em"/><!-- HANGUL SYLLABLE BUG -->
+ <map code="0xbd82" name="1em"/><!-- HANGUL SYLLABLE BUGG -->
+ <map code="0xbd83" name="1em"/><!-- HANGUL SYLLABLE BUGS -->
+ <map code="0xbd84" name="1em"/><!-- HANGUL SYLLABLE BUN -->
+ <map code="0xbd85" name="1em"/><!-- HANGUL SYLLABLE BUNJ -->
+ <map code="0xbd86" name="1em"/><!-- HANGUL SYLLABLE BUNH -->
+ <map code="0xbd87" name="1em"/><!-- HANGUL SYLLABLE BUD -->
+ <map code="0xbd88" name="1em"/><!-- HANGUL SYLLABLE BUL -->
+ <map code="0xbd89" name="1em"/><!-- HANGUL SYLLABLE BULG -->
+ <map code="0xbd8a" name="1em"/><!-- HANGUL SYLLABLE BULM -->
+ <map code="0xbd8b" name="1em"/><!-- HANGUL SYLLABLE BULB -->
+ <map code="0xbd8c" name="1em"/><!-- HANGUL SYLLABLE BULS -->
+ <map code="0xbd8d" name="1em"/><!-- HANGUL SYLLABLE BULT -->
+ <map code="0xbd8e" name="1em"/><!-- HANGUL SYLLABLE BULP -->
+ <map code="0xbd8f" name="1em"/><!-- HANGUL SYLLABLE BULH -->
+ <map code="0xbd90" name="1em"/><!-- HANGUL SYLLABLE BUM -->
+ <map code="0xbd91" name="1em"/><!-- HANGUL SYLLABLE BUB -->
+ <map code="0xbd92" name="1em"/><!-- HANGUL SYLLABLE BUBS -->
+ <map code="0xbd93" name="1em"/><!-- HANGUL SYLLABLE BUS -->
+ <map code="0xbd94" name="1em"/><!-- HANGUL SYLLABLE BUSS -->
+ <map code="0xbd95" name="1em"/><!-- HANGUL SYLLABLE BUNG -->
+ <map code="0xbd96" name="1em"/><!-- HANGUL SYLLABLE BUJ -->
+ <map code="0xbd97" name="1em"/><!-- HANGUL SYLLABLE BUC -->
+ <map code="0xbd98" name="1em"/><!-- HANGUL SYLLABLE BUK -->
+ <map code="0xbd99" name="1em"/><!-- HANGUL SYLLABLE BUT -->
+ <map code="0xbd9a" name="1em"/><!-- HANGUL SYLLABLE BUP -->
+ <map code="0xbd9b" name="1em"/><!-- HANGUL SYLLABLE BUH -->
+ <map code="0xbd9c" name="1em"/><!-- HANGUL SYLLABLE BWEO -->
+ <map code="0xbd9d" name="1em"/><!-- HANGUL SYLLABLE BWEOG -->
+ <map code="0xbd9e" name="1em"/><!-- HANGUL SYLLABLE BWEOGG -->
+ <map code="0xbd9f" name="1em"/><!-- HANGUL SYLLABLE BWEOGS -->
+ <map code="0xbda0" name="1em"/><!-- HANGUL SYLLABLE BWEON -->
+ <map code="0xbda1" name="1em"/><!-- HANGUL SYLLABLE BWEONJ -->
+ <map code="0xbda2" name="1em"/><!-- HANGUL SYLLABLE BWEONH -->
+ <map code="0xbda3" name="1em"/><!-- HANGUL SYLLABLE BWEOD -->
+ <map code="0xbda4" name="1em"/><!-- HANGUL SYLLABLE BWEOL -->
+ <map code="0xbda5" name="1em"/><!-- HANGUL SYLLABLE BWEOLG -->
+ <map code="0xbda6" name="1em"/><!-- HANGUL SYLLABLE BWEOLM -->
+ <map code="0xbda7" name="1em"/><!-- HANGUL SYLLABLE BWEOLB -->
+ <map code="0xbda8" name="1em"/><!-- HANGUL SYLLABLE BWEOLS -->
+ <map code="0xbda9" name="1em"/><!-- HANGUL SYLLABLE BWEOLT -->
+ <map code="0xbdaa" name="1em"/><!-- HANGUL SYLLABLE BWEOLP -->
+ <map code="0xbdab" name="1em"/><!-- HANGUL SYLLABLE BWEOLH -->
+ <map code="0xbdac" name="1em"/><!-- HANGUL SYLLABLE BWEOM -->
+ <map code="0xbdad" name="1em"/><!-- HANGUL SYLLABLE BWEOB -->
+ <map code="0xbdae" name="1em"/><!-- HANGUL SYLLABLE BWEOBS -->
+ <map code="0xbdaf" name="1em"/><!-- HANGUL SYLLABLE BWEOS -->
+ <map code="0xbdb0" name="1em"/><!-- HANGUL SYLLABLE BWEOSS -->
+ <map code="0xbdb1" name="1em"/><!-- HANGUL SYLLABLE BWEONG -->
+ <map code="0xbdb2" name="1em"/><!-- HANGUL SYLLABLE BWEOJ -->
+ <map code="0xbdb3" name="1em"/><!-- HANGUL SYLLABLE BWEOC -->
+ <map code="0xbdb4" name="1em"/><!-- HANGUL SYLLABLE BWEOK -->
+ <map code="0xbdb5" name="1em"/><!-- HANGUL SYLLABLE BWEOT -->
+ <map code="0xbdb6" name="1em"/><!-- HANGUL SYLLABLE BWEOP -->
+ <map code="0xbdb7" name="1em"/><!-- HANGUL SYLLABLE BWEOH -->
+ <map code="0xbdb8" name="1em"/><!-- HANGUL SYLLABLE BWE -->
+ <map code="0xbdb9" name="1em"/><!-- HANGUL SYLLABLE BWEG -->
+ <map code="0xbdba" name="1em"/><!-- HANGUL SYLLABLE BWEGG -->
+ <map code="0xbdbb" name="1em"/><!-- HANGUL SYLLABLE BWEGS -->
+ <map code="0xbdbc" name="1em"/><!-- HANGUL SYLLABLE BWEN -->
+ <map code="0xbdbd" name="1em"/><!-- HANGUL SYLLABLE BWENJ -->
+ <map code="0xbdbe" name="1em"/><!-- HANGUL SYLLABLE BWENH -->
+ <map code="0xbdbf" name="1em"/><!-- HANGUL SYLLABLE BWED -->
+ <map code="0xbdc0" name="1em"/><!-- HANGUL SYLLABLE BWEL -->
+ <map code="0xbdc1" name="1em"/><!-- HANGUL SYLLABLE BWELG -->
+ <map code="0xbdc2" name="1em"/><!-- HANGUL SYLLABLE BWELM -->
+ <map code="0xbdc3" name="1em"/><!-- HANGUL SYLLABLE BWELB -->
+ <map code="0xbdc4" name="1em"/><!-- HANGUL SYLLABLE BWELS -->
+ <map code="0xbdc5" name="1em"/><!-- HANGUL SYLLABLE BWELT -->
+ <map code="0xbdc6" name="1em"/><!-- HANGUL SYLLABLE BWELP -->
+ <map code="0xbdc7" name="1em"/><!-- HANGUL SYLLABLE BWELH -->
+ <map code="0xbdc8" name="1em"/><!-- HANGUL SYLLABLE BWEM -->
+ <map code="0xbdc9" name="1em"/><!-- HANGUL SYLLABLE BWEB -->
+ <map code="0xbdca" name="1em"/><!-- HANGUL SYLLABLE BWEBS -->
+ <map code="0xbdcb" name="1em"/><!-- HANGUL SYLLABLE BWES -->
+ <map code="0xbdcc" name="1em"/><!-- HANGUL SYLLABLE BWESS -->
+ <map code="0xbdcd" name="1em"/><!-- HANGUL SYLLABLE BWENG -->
+ <map code="0xbdce" name="1em"/><!-- HANGUL SYLLABLE BWEJ -->
+ <map code="0xbdcf" name="1em"/><!-- HANGUL SYLLABLE BWEC -->
+ <map code="0xbdd0" name="1em"/><!-- HANGUL SYLLABLE BWEK -->
+ <map code="0xbdd1" name="1em"/><!-- HANGUL SYLLABLE BWET -->
+ <map code="0xbdd2" name="1em"/><!-- HANGUL SYLLABLE BWEP -->
+ <map code="0xbdd3" name="1em"/><!-- HANGUL SYLLABLE BWEH -->
+ <map code="0xbdd4" name="1em"/><!-- HANGUL SYLLABLE BWI -->
+ <map code="0xbdd5" name="1em"/><!-- HANGUL SYLLABLE BWIG -->
+ <map code="0xbdd6" name="1em"/><!-- HANGUL SYLLABLE BWIGG -->
+ <map code="0xbdd7" name="1em"/><!-- HANGUL SYLLABLE BWIGS -->
+ <map code="0xbdd8" name="1em"/><!-- HANGUL SYLLABLE BWIN -->
+ <map code="0xbdd9" name="1em"/><!-- HANGUL SYLLABLE BWINJ -->
+ <map code="0xbdda" name="1em"/><!-- HANGUL SYLLABLE BWINH -->
+ <map code="0xbddb" name="1em"/><!-- HANGUL SYLLABLE BWID -->
+ <map code="0xbddc" name="1em"/><!-- HANGUL SYLLABLE BWIL -->
+ <map code="0xbddd" name="1em"/><!-- HANGUL SYLLABLE BWILG -->
+ <map code="0xbdde" name="1em"/><!-- HANGUL SYLLABLE BWILM -->
+ <map code="0xbddf" name="1em"/><!-- HANGUL SYLLABLE BWILB -->
+ <map code="0xbde0" name="1em"/><!-- HANGUL SYLLABLE BWILS -->
+ <map code="0xbde1" name="1em"/><!-- HANGUL SYLLABLE BWILT -->
+ <map code="0xbde2" name="1em"/><!-- HANGUL SYLLABLE BWILP -->
+ <map code="0xbde3" name="1em"/><!-- HANGUL SYLLABLE BWILH -->
+ <map code="0xbde4" name="1em"/><!-- HANGUL SYLLABLE BWIM -->
+ <map code="0xbde5" name="1em"/><!-- HANGUL SYLLABLE BWIB -->
+ <map code="0xbde6" name="1em"/><!-- HANGUL SYLLABLE BWIBS -->
+ <map code="0xbde7" name="1em"/><!-- HANGUL SYLLABLE BWIS -->
+ <map code="0xbde8" name="1em"/><!-- HANGUL SYLLABLE BWISS -->
+ <map code="0xbde9" name="1em"/><!-- HANGUL SYLLABLE BWING -->
+ <map code="0xbdea" name="1em"/><!-- HANGUL SYLLABLE BWIJ -->
+ <map code="0xbdeb" name="1em"/><!-- HANGUL SYLLABLE BWIC -->
+ <map code="0xbdec" name="1em"/><!-- HANGUL SYLLABLE BWIK -->
+ <map code="0xbded" name="1em"/><!-- HANGUL SYLLABLE BWIT -->
+ <map code="0xbdee" name="1em"/><!-- HANGUL SYLLABLE BWIP -->
+ <map code="0xbdef" name="1em"/><!-- HANGUL SYLLABLE BWIH -->
+ <map code="0xbdf0" name="1em"/><!-- HANGUL SYLLABLE BYU -->
+ <map code="0xbdf1" name="1em"/><!-- HANGUL SYLLABLE BYUG -->
+ <map code="0xbdf2" name="1em"/><!-- HANGUL SYLLABLE BYUGG -->
+ <map code="0xbdf3" name="1em"/><!-- HANGUL SYLLABLE BYUGS -->
+ <map code="0xbdf4" name="1em"/><!-- HANGUL SYLLABLE BYUN -->
+ <map code="0xbdf5" name="1em"/><!-- HANGUL SYLLABLE BYUNJ -->
+ <map code="0xbdf6" name="1em"/><!-- HANGUL SYLLABLE BYUNH -->
+ <map code="0xbdf7" name="1em"/><!-- HANGUL SYLLABLE BYUD -->
+ <map code="0xbdf8" name="1em"/><!-- HANGUL SYLLABLE BYUL -->
+ <map code="0xbdf9" name="1em"/><!-- HANGUL SYLLABLE BYULG -->
+ <map code="0xbdfa" name="1em"/><!-- HANGUL SYLLABLE BYULM -->
+ <map code="0xbdfb" name="1em"/><!-- HANGUL SYLLABLE BYULB -->
+ <map code="0xbdfc" name="1em"/><!-- HANGUL SYLLABLE BYULS -->
+ <map code="0xbdfd" name="1em"/><!-- HANGUL SYLLABLE BYULT -->
+ <map code="0xbdfe" name="1em"/><!-- HANGUL SYLLABLE BYULP -->
+ <map code="0xbdff" name="1em"/><!-- HANGUL SYLLABLE BYULH -->
+ <map code="0xbe00" name="1em"/><!-- HANGUL SYLLABLE BYUM -->
+ <map code="0xbe01" name="1em"/><!-- HANGUL SYLLABLE BYUB -->
+ <map code="0xbe02" name="1em"/><!-- HANGUL SYLLABLE BYUBS -->
+ <map code="0xbe03" name="1em"/><!-- HANGUL SYLLABLE BYUS -->
+ <map code="0xbe04" name="1em"/><!-- HANGUL SYLLABLE BYUSS -->
+ <map code="0xbe05" name="1em"/><!-- HANGUL SYLLABLE BYUNG -->
+ <map code="0xbe06" name="1em"/><!-- HANGUL SYLLABLE BYUJ -->
+ <map code="0xbe07" name="1em"/><!-- HANGUL SYLLABLE BYUC -->
+ <map code="0xbe08" name="1em"/><!-- HANGUL SYLLABLE BYUK -->
+ <map code="0xbe09" name="1em"/><!-- HANGUL SYLLABLE BYUT -->
+ <map code="0xbe0a" name="1em"/><!-- HANGUL SYLLABLE BYUP -->
+ <map code="0xbe0b" name="1em"/><!-- HANGUL SYLLABLE BYUH -->
+ <map code="0xbe0c" name="1em"/><!-- HANGUL SYLLABLE BEU -->
+ <map code="0xbe0d" name="1em"/><!-- HANGUL SYLLABLE BEUG -->
+ <map code="0xbe0e" name="1em"/><!-- HANGUL SYLLABLE BEUGG -->
+ <map code="0xbe0f" name="1em"/><!-- HANGUL SYLLABLE BEUGS -->
+ <map code="0xbe10" name="1em"/><!-- HANGUL SYLLABLE BEUN -->
+ <map code="0xbe11" name="1em"/><!-- HANGUL SYLLABLE BEUNJ -->
+ <map code="0xbe12" name="1em"/><!-- HANGUL SYLLABLE BEUNH -->
+ <map code="0xbe13" name="1em"/><!-- HANGUL SYLLABLE BEUD -->
+ <map code="0xbe14" name="1em"/><!-- HANGUL SYLLABLE BEUL -->
+ <map code="0xbe15" name="1em"/><!-- HANGUL SYLLABLE BEULG -->
+ <map code="0xbe16" name="1em"/><!-- HANGUL SYLLABLE BEULM -->
+ <map code="0xbe17" name="1em"/><!-- HANGUL SYLLABLE BEULB -->
+ <map code="0xbe18" name="1em"/><!-- HANGUL SYLLABLE BEULS -->
+ <map code="0xbe19" name="1em"/><!-- HANGUL SYLLABLE BEULT -->
+ <map code="0xbe1a" name="1em"/><!-- HANGUL SYLLABLE BEULP -->
+ <map code="0xbe1b" name="1em"/><!-- HANGUL SYLLABLE BEULH -->
+ <map code="0xbe1c" name="1em"/><!-- HANGUL SYLLABLE BEUM -->
+ <map code="0xbe1d" name="1em"/><!-- HANGUL SYLLABLE BEUB -->
+ <map code="0xbe1e" name="1em"/><!-- HANGUL SYLLABLE BEUBS -->
+ <map code="0xbe1f" name="1em"/><!-- HANGUL SYLLABLE BEUS -->
+ <map code="0xbe20" name="1em"/><!-- HANGUL SYLLABLE BEUSS -->
+ <map code="0xbe21" name="1em"/><!-- HANGUL SYLLABLE BEUNG -->
+ <map code="0xbe22" name="1em"/><!-- HANGUL SYLLABLE BEUJ -->
+ <map code="0xbe23" name="1em"/><!-- HANGUL SYLLABLE BEUC -->
+ <map code="0xbe24" name="1em"/><!-- HANGUL SYLLABLE BEUK -->
+ <map code="0xbe25" name="1em"/><!-- HANGUL SYLLABLE BEUT -->
+ <map code="0xbe26" name="1em"/><!-- HANGUL SYLLABLE BEUP -->
+ <map code="0xbe27" name="1em"/><!-- HANGUL SYLLABLE BEUH -->
+ <map code="0xbe28" name="1em"/><!-- HANGUL SYLLABLE BYI -->
+ <map code="0xbe29" name="1em"/><!-- HANGUL SYLLABLE BYIG -->
+ <map code="0xbe2a" name="1em"/><!-- HANGUL SYLLABLE BYIGG -->
+ <map code="0xbe2b" name="1em"/><!-- HANGUL SYLLABLE BYIGS -->
+ <map code="0xbe2c" name="1em"/><!-- HANGUL SYLLABLE BYIN -->
+ <map code="0xbe2d" name="1em"/><!-- HANGUL SYLLABLE BYINJ -->
+ <map code="0xbe2e" name="1em"/><!-- HANGUL SYLLABLE BYINH -->
+ <map code="0xbe2f" name="1em"/><!-- HANGUL SYLLABLE BYID -->
+ <map code="0xbe30" name="1em"/><!-- HANGUL SYLLABLE BYIL -->
+ <map code="0xbe31" name="1em"/><!-- HANGUL SYLLABLE BYILG -->
+ <map code="0xbe32" name="1em"/><!-- HANGUL SYLLABLE BYILM -->
+ <map code="0xbe33" name="1em"/><!-- HANGUL SYLLABLE BYILB -->
+ <map code="0xbe34" name="1em"/><!-- HANGUL SYLLABLE BYILS -->
+ <map code="0xbe35" name="1em"/><!-- HANGUL SYLLABLE BYILT -->
+ <map code="0xbe36" name="1em"/><!-- HANGUL SYLLABLE BYILP -->
+ <map code="0xbe37" name="1em"/><!-- HANGUL SYLLABLE BYILH -->
+ <map code="0xbe38" name="1em"/><!-- HANGUL SYLLABLE BYIM -->
+ <map code="0xbe39" name="1em"/><!-- HANGUL SYLLABLE BYIB -->
+ <map code="0xbe3a" name="1em"/><!-- HANGUL SYLLABLE BYIBS -->
+ <map code="0xbe3b" name="1em"/><!-- HANGUL SYLLABLE BYIS -->
+ <map code="0xbe3c" name="1em"/><!-- HANGUL SYLLABLE BYISS -->
+ <map code="0xbe3d" name="1em"/><!-- HANGUL SYLLABLE BYING -->
+ <map code="0xbe3e" name="1em"/><!-- HANGUL SYLLABLE BYIJ -->
+ <map code="0xbe3f" name="1em"/><!-- HANGUL SYLLABLE BYIC -->
+ <map code="0xbe40" name="1em"/><!-- HANGUL SYLLABLE BYIK -->
+ <map code="0xbe41" name="1em"/><!-- HANGUL SYLLABLE BYIT -->
+ <map code="0xbe42" name="1em"/><!-- HANGUL SYLLABLE BYIP -->
+ <map code="0xbe43" name="1em"/><!-- HANGUL SYLLABLE BYIH -->
+ <map code="0xbe44" name="1em"/><!-- HANGUL SYLLABLE BI -->
+ <map code="0xbe45" name="1em"/><!-- HANGUL SYLLABLE BIG -->
+ <map code="0xbe46" name="1em"/><!-- HANGUL SYLLABLE BIGG -->
+ <map code="0xbe47" name="1em"/><!-- HANGUL SYLLABLE BIGS -->
+ <map code="0xbe48" name="1em"/><!-- HANGUL SYLLABLE BIN -->
+ <map code="0xbe49" name="1em"/><!-- HANGUL SYLLABLE BINJ -->
+ <map code="0xbe4a" name="1em"/><!-- HANGUL SYLLABLE BINH -->
+ <map code="0xbe4b" name="1em"/><!-- HANGUL SYLLABLE BID -->
+ <map code="0xbe4c" name="1em"/><!-- HANGUL SYLLABLE BIL -->
+ <map code="0xbe4d" name="1em"/><!-- HANGUL SYLLABLE BILG -->
+ <map code="0xbe4e" name="1em"/><!-- HANGUL SYLLABLE BILM -->
+ <map code="0xbe4f" name="1em"/><!-- HANGUL SYLLABLE BILB -->
+ <map code="0xbe50" name="1em"/><!-- HANGUL SYLLABLE BILS -->
+ <map code="0xbe51" name="1em"/><!-- HANGUL SYLLABLE BILT -->
+ <map code="0xbe52" name="1em"/><!-- HANGUL SYLLABLE BILP -->
+ <map code="0xbe53" name="1em"/><!-- HANGUL SYLLABLE BILH -->
+ <map code="0xbe54" name="1em"/><!-- HANGUL SYLLABLE BIM -->
+ <map code="0xbe55" name="1em"/><!-- HANGUL SYLLABLE BIB -->
+ <map code="0xbe56" name="1em"/><!-- HANGUL SYLLABLE BIBS -->
+ <map code="0xbe57" name="1em"/><!-- HANGUL SYLLABLE BIS -->
+ <map code="0xbe58" name="1em"/><!-- HANGUL SYLLABLE BISS -->
+ <map code="0xbe59" name="1em"/><!-- HANGUL SYLLABLE BING -->
+ <map code="0xbe5a" name="1em"/><!-- HANGUL SYLLABLE BIJ -->
+ <map code="0xbe5b" name="1em"/><!-- HANGUL SYLLABLE BIC -->
+ <map code="0xbe5c" name="1em"/><!-- HANGUL SYLLABLE BIK -->
+ <map code="0xbe5d" name="1em"/><!-- HANGUL SYLLABLE BIT -->
+ <map code="0xbe5e" name="1em"/><!-- HANGUL SYLLABLE BIP -->
+ <map code="0xbe5f" name="1em"/><!-- HANGUL SYLLABLE BIH -->
+ <map code="0xbe60" name="1em"/><!-- HANGUL SYLLABLE BBA -->
+ <map code="0xbe61" name="1em"/><!-- HANGUL SYLLABLE BBAG -->
+ <map code="0xbe62" name="1em"/><!-- HANGUL SYLLABLE BBAGG -->
+ <map code="0xbe63" name="1em"/><!-- HANGUL SYLLABLE BBAGS -->
+ <map code="0xbe64" name="1em"/><!-- HANGUL SYLLABLE BBAN -->
+ <map code="0xbe65" name="1em"/><!-- HANGUL SYLLABLE BBANJ -->
+ <map code="0xbe66" name="1em"/><!-- HANGUL SYLLABLE BBANH -->
+ <map code="0xbe67" name="1em"/><!-- HANGUL SYLLABLE BBAD -->
+ <map code="0xbe68" name="1em"/><!-- HANGUL SYLLABLE BBAL -->
+ <map code="0xbe69" name="1em"/><!-- HANGUL SYLLABLE BBALG -->
+ <map code="0xbe6a" name="1em"/><!-- HANGUL SYLLABLE BBALM -->
+ <map code="0xbe6b" name="1em"/><!-- HANGUL SYLLABLE BBALB -->
+ <map code="0xbe6c" name="1em"/><!-- HANGUL SYLLABLE BBALS -->
+ <map code="0xbe6d" name="1em"/><!-- HANGUL SYLLABLE BBALT -->
+ <map code="0xbe6e" name="1em"/><!-- HANGUL SYLLABLE BBALP -->
+ <map code="0xbe6f" name="1em"/><!-- HANGUL SYLLABLE BBALH -->
+ <map code="0xbe70" name="1em"/><!-- HANGUL SYLLABLE BBAM -->
+ <map code="0xbe71" name="1em"/><!-- HANGUL SYLLABLE BBAB -->
+ <map code="0xbe72" name="1em"/><!-- HANGUL SYLLABLE BBABS -->
+ <map code="0xbe73" name="1em"/><!-- HANGUL SYLLABLE BBAS -->
+ <map code="0xbe74" name="1em"/><!-- HANGUL SYLLABLE BBASS -->
+ <map code="0xbe75" name="1em"/><!-- HANGUL SYLLABLE BBANG -->
+ <map code="0xbe76" name="1em"/><!-- HANGUL SYLLABLE BBAJ -->
+ <map code="0xbe77" name="1em"/><!-- HANGUL SYLLABLE BBAC -->
+ <map code="0xbe78" name="1em"/><!-- HANGUL SYLLABLE BBAK -->
+ <map code="0xbe79" name="1em"/><!-- HANGUL SYLLABLE BBAT -->
+ <map code="0xbe7a" name="1em"/><!-- HANGUL SYLLABLE BBAP -->
+ <map code="0xbe7b" name="1em"/><!-- HANGUL SYLLABLE BBAH -->
+ <map code="0xbe7c" name="1em"/><!-- HANGUL SYLLABLE BBAE -->
+ <map code="0xbe7d" name="1em"/><!-- HANGUL SYLLABLE BBAEG -->
+ <map code="0xbe7e" name="1em"/><!-- HANGUL SYLLABLE BBAEGG -->
+ <map code="0xbe7f" name="1em"/><!-- HANGUL SYLLABLE BBAEGS -->
+ <map code="0xbe80" name="1em"/><!-- HANGUL SYLLABLE BBAEN -->
+ <map code="0xbe81" name="1em"/><!-- HANGUL SYLLABLE BBAENJ -->
+ <map code="0xbe82" name="1em"/><!-- HANGUL SYLLABLE BBAENH -->
+ <map code="0xbe83" name="1em"/><!-- HANGUL SYLLABLE BBAED -->
+ <map code="0xbe84" name="1em"/><!-- HANGUL SYLLABLE BBAEL -->
+ <map code="0xbe85" name="1em"/><!-- HANGUL SYLLABLE BBAELG -->
+ <map code="0xbe86" name="1em"/><!-- HANGUL SYLLABLE BBAELM -->
+ <map code="0xbe87" name="1em"/><!-- HANGUL SYLLABLE BBAELB -->
+ <map code="0xbe88" name="1em"/><!-- HANGUL SYLLABLE BBAELS -->
+ <map code="0xbe89" name="1em"/><!-- HANGUL SYLLABLE BBAELT -->
+ <map code="0xbe8a" name="1em"/><!-- HANGUL SYLLABLE BBAELP -->
+ <map code="0xbe8b" name="1em"/><!-- HANGUL SYLLABLE BBAELH -->
+ <map code="0xbe8c" name="1em"/><!-- HANGUL SYLLABLE BBAEM -->
+ <map code="0xbe8d" name="1em"/><!-- HANGUL SYLLABLE BBAEB -->
+ <map code="0xbe8e" name="1em"/><!-- HANGUL SYLLABLE BBAEBS -->
+ <map code="0xbe8f" name="1em"/><!-- HANGUL SYLLABLE BBAES -->
+ <map code="0xbe90" name="1em"/><!-- HANGUL SYLLABLE BBAESS -->
+ <map code="0xbe91" name="1em"/><!-- HANGUL SYLLABLE BBAENG -->
+ <map code="0xbe92" name="1em"/><!-- HANGUL SYLLABLE BBAEJ -->
+ <map code="0xbe93" name="1em"/><!-- HANGUL SYLLABLE BBAEC -->
+ <map code="0xbe94" name="1em"/><!-- HANGUL SYLLABLE BBAEK -->
+ <map code="0xbe95" name="1em"/><!-- HANGUL SYLLABLE BBAET -->
+ <map code="0xbe96" name="1em"/><!-- HANGUL SYLLABLE BBAEP -->
+ <map code="0xbe97" name="1em"/><!-- HANGUL SYLLABLE BBAEH -->
+ <map code="0xbe98" name="1em"/><!-- HANGUL SYLLABLE BBYA -->
+ <map code="0xbe99" name="1em"/><!-- HANGUL SYLLABLE BBYAG -->
+ <map code="0xbe9a" name="1em"/><!-- HANGUL SYLLABLE BBYAGG -->
+ <map code="0xbe9b" name="1em"/><!-- HANGUL SYLLABLE BBYAGS -->
+ <map code="0xbe9c" name="1em"/><!-- HANGUL SYLLABLE BBYAN -->
+ <map code="0xbe9d" name="1em"/><!-- HANGUL SYLLABLE BBYANJ -->
+ <map code="0xbe9e" name="1em"/><!-- HANGUL SYLLABLE BBYANH -->
+ <map code="0xbe9f" name="1em"/><!-- HANGUL SYLLABLE BBYAD -->
+ <map code="0xbea0" name="1em"/><!-- HANGUL SYLLABLE BBYAL -->
+ <map code="0xbea1" name="1em"/><!-- HANGUL SYLLABLE BBYALG -->
+ <map code="0xbea2" name="1em"/><!-- HANGUL SYLLABLE BBYALM -->
+ <map code="0xbea3" name="1em"/><!-- HANGUL SYLLABLE BBYALB -->
+ <map code="0xbea4" name="1em"/><!-- HANGUL SYLLABLE BBYALS -->
+ <map code="0xbea5" name="1em"/><!-- HANGUL SYLLABLE BBYALT -->
+ <map code="0xbea6" name="1em"/><!-- HANGUL SYLLABLE BBYALP -->
+ <map code="0xbea7" name="1em"/><!-- HANGUL SYLLABLE BBYALH -->
+ <map code="0xbea8" name="1em"/><!-- HANGUL SYLLABLE BBYAM -->
+ <map code="0xbea9" name="1em"/><!-- HANGUL SYLLABLE BBYAB -->
+ <map code="0xbeaa" name="1em"/><!-- HANGUL SYLLABLE BBYABS -->
+ <map code="0xbeab" name="1em"/><!-- HANGUL SYLLABLE BBYAS -->
+ <map code="0xbeac" name="1em"/><!-- HANGUL SYLLABLE BBYASS -->
+ <map code="0xbead" name="1em"/><!-- HANGUL SYLLABLE BBYANG -->
+ <map code="0xbeae" name="1em"/><!-- HANGUL SYLLABLE BBYAJ -->
+ <map code="0xbeaf" name="1em"/><!-- HANGUL SYLLABLE BBYAC -->
+ <map code="0xbeb0" name="1em"/><!-- HANGUL SYLLABLE BBYAK -->
+ <map code="0xbeb1" name="1em"/><!-- HANGUL SYLLABLE BBYAT -->
+ <map code="0xbeb2" name="1em"/><!-- HANGUL SYLLABLE BBYAP -->
+ <map code="0xbeb3" name="1em"/><!-- HANGUL SYLLABLE BBYAH -->
+ <map code="0xbeb4" name="1em"/><!-- HANGUL SYLLABLE BBYAE -->
+ <map code="0xbeb5" name="1em"/><!-- HANGUL SYLLABLE BBYAEG -->
+ <map code="0xbeb6" name="1em"/><!-- HANGUL SYLLABLE BBYAEGG -->
+ <map code="0xbeb7" name="1em"/><!-- HANGUL SYLLABLE BBYAEGS -->
+ <map code="0xbeb8" name="1em"/><!-- HANGUL SYLLABLE BBYAEN -->
+ <map code="0xbeb9" name="1em"/><!-- HANGUL SYLLABLE BBYAENJ -->
+ <map code="0xbeba" name="1em"/><!-- HANGUL SYLLABLE BBYAENH -->
+ <map code="0xbebb" name="1em"/><!-- HANGUL SYLLABLE BBYAED -->
+ <map code="0xbebc" name="1em"/><!-- HANGUL SYLLABLE BBYAEL -->
+ <map code="0xbebd" name="1em"/><!-- HANGUL SYLLABLE BBYAELG -->
+ <map code="0xbebe" name="1em"/><!-- HANGUL SYLLABLE BBYAELM -->
+ <map code="0xbebf" name="1em"/><!-- HANGUL SYLLABLE BBYAELB -->
+ <map code="0xbec0" name="1em"/><!-- HANGUL SYLLABLE BBYAELS -->
+ <map code="0xbec1" name="1em"/><!-- HANGUL SYLLABLE BBYAELT -->
+ <map code="0xbec2" name="1em"/><!-- HANGUL SYLLABLE BBYAELP -->
+ <map code="0xbec3" name="1em"/><!-- HANGUL SYLLABLE BBYAELH -->
+ <map code="0xbec4" name="1em"/><!-- HANGUL SYLLABLE BBYAEM -->
+ <map code="0xbec5" name="1em"/><!-- HANGUL SYLLABLE BBYAEB -->
+ <map code="0xbec6" name="1em"/><!-- HANGUL SYLLABLE BBYAEBS -->
+ <map code="0xbec7" name="1em"/><!-- HANGUL SYLLABLE BBYAES -->
+ <map code="0xbec8" name="1em"/><!-- HANGUL SYLLABLE BBYAESS -->
+ <map code="0xbec9" name="1em"/><!-- HANGUL SYLLABLE BBYAENG -->
+ <map code="0xbeca" name="1em"/><!-- HANGUL SYLLABLE BBYAEJ -->
+ <map code="0xbecb" name="1em"/><!-- HANGUL SYLLABLE BBYAEC -->
+ <map code="0xbecc" name="1em"/><!-- HANGUL SYLLABLE BBYAEK -->
+ <map code="0xbecd" name="1em"/><!-- HANGUL SYLLABLE BBYAET -->
+ <map code="0xbece" name="1em"/><!-- HANGUL SYLLABLE BBYAEP -->
+ <map code="0xbecf" name="1em"/><!-- HANGUL SYLLABLE BBYAEH -->
+ <map code="0xbed0" name="1em"/><!-- HANGUL SYLLABLE BBEO -->
+ <map code="0xbed1" name="1em"/><!-- HANGUL SYLLABLE BBEOG -->
+ <map code="0xbed2" name="1em"/><!-- HANGUL SYLLABLE BBEOGG -->
+ <map code="0xbed3" name="1em"/><!-- HANGUL SYLLABLE BBEOGS -->
+ <map code="0xbed4" name="1em"/><!-- HANGUL SYLLABLE BBEON -->
+ <map code="0xbed5" name="1em"/><!-- HANGUL SYLLABLE BBEONJ -->
+ <map code="0xbed6" name="1em"/><!-- HANGUL SYLLABLE BBEONH -->
+ <map code="0xbed7" name="1em"/><!-- HANGUL SYLLABLE BBEOD -->
+ <map code="0xbed8" name="1em"/><!-- HANGUL SYLLABLE BBEOL -->
+ <map code="0xbed9" name="1em"/><!-- HANGUL SYLLABLE BBEOLG -->
+ <map code="0xbeda" name="1em"/><!-- HANGUL SYLLABLE BBEOLM -->
+ <map code="0xbedb" name="1em"/><!-- HANGUL SYLLABLE BBEOLB -->
+ <map code="0xbedc" name="1em"/><!-- HANGUL SYLLABLE BBEOLS -->
+ <map code="0xbedd" name="1em"/><!-- HANGUL SYLLABLE BBEOLT -->
+ <map code="0xbede" name="1em"/><!-- HANGUL SYLLABLE BBEOLP -->
+ <map code="0xbedf" name="1em"/><!-- HANGUL SYLLABLE BBEOLH -->
+ <map code="0xbee0" name="1em"/><!-- HANGUL SYLLABLE BBEOM -->
+ <map code="0xbee1" name="1em"/><!-- HANGUL SYLLABLE BBEOB -->
+ <map code="0xbee2" name="1em"/><!-- HANGUL SYLLABLE BBEOBS -->
+ <map code="0xbee3" name="1em"/><!-- HANGUL SYLLABLE BBEOS -->
+ <map code="0xbee4" name="1em"/><!-- HANGUL SYLLABLE BBEOSS -->
+ <map code="0xbee5" name="1em"/><!-- HANGUL SYLLABLE BBEONG -->
+ <map code="0xbee6" name="1em"/><!-- HANGUL SYLLABLE BBEOJ -->
+ <map code="0xbee7" name="1em"/><!-- HANGUL SYLLABLE BBEOC -->
+ <map code="0xbee8" name="1em"/><!-- HANGUL SYLLABLE BBEOK -->
+ <map code="0xbee9" name="1em"/><!-- HANGUL SYLLABLE BBEOT -->
+ <map code="0xbeea" name="1em"/><!-- HANGUL SYLLABLE BBEOP -->
+ <map code="0xbeeb" name="1em"/><!-- HANGUL SYLLABLE BBEOH -->
+ <map code="0xbeec" name="1em"/><!-- HANGUL SYLLABLE BBE -->
+ <map code="0xbeed" name="1em"/><!-- HANGUL SYLLABLE BBEG -->
+ <map code="0xbeee" name="1em"/><!-- HANGUL SYLLABLE BBEGG -->
+ <map code="0xbeef" name="1em"/><!-- HANGUL SYLLABLE BBEGS -->
+ <map code="0xbef0" name="1em"/><!-- HANGUL SYLLABLE BBEN -->
+ <map code="0xbef1" name="1em"/><!-- HANGUL SYLLABLE BBENJ -->
+ <map code="0xbef2" name="1em"/><!-- HANGUL SYLLABLE BBENH -->
+ <map code="0xbef3" name="1em"/><!-- HANGUL SYLLABLE BBED -->
+ <map code="0xbef4" name="1em"/><!-- HANGUL SYLLABLE BBEL -->
+ <map code="0xbef5" name="1em"/><!-- HANGUL SYLLABLE BBELG -->
+ <map code="0xbef6" name="1em"/><!-- HANGUL SYLLABLE BBELM -->
+ <map code="0xbef7" name="1em"/><!-- HANGUL SYLLABLE BBELB -->
+ <map code="0xbef8" name="1em"/><!-- HANGUL SYLLABLE BBELS -->
+ <map code="0xbef9" name="1em"/><!-- HANGUL SYLLABLE BBELT -->
+ <map code="0xbefa" name="1em"/><!-- HANGUL SYLLABLE BBELP -->
+ <map code="0xbefb" name="1em"/><!-- HANGUL SYLLABLE BBELH -->
+ <map code="0xbefc" name="1em"/><!-- HANGUL SYLLABLE BBEM -->
+ <map code="0xbefd" name="1em"/><!-- HANGUL SYLLABLE BBEB -->
+ <map code="0xbefe" name="1em"/><!-- HANGUL SYLLABLE BBEBS -->
+ <map code="0xbeff" name="1em"/><!-- HANGUL SYLLABLE BBES -->
+ <map code="0xbf00" name="1em"/><!-- HANGUL SYLLABLE BBESS -->
+ <map code="0xbf01" name="1em"/><!-- HANGUL SYLLABLE BBENG -->
+ <map code="0xbf02" name="1em"/><!-- HANGUL SYLLABLE BBEJ -->
+ <map code="0xbf03" name="1em"/><!-- HANGUL SYLLABLE BBEC -->
+ <map code="0xbf04" name="1em"/><!-- HANGUL SYLLABLE BBEK -->
+ <map code="0xbf05" name="1em"/><!-- HANGUL SYLLABLE BBET -->
+ <map code="0xbf06" name="1em"/><!-- HANGUL SYLLABLE BBEP -->
+ <map code="0xbf07" name="1em"/><!-- HANGUL SYLLABLE BBEH -->
+ <map code="0xbf08" name="1em"/><!-- HANGUL SYLLABLE BBYEO -->
+ <map code="0xbf09" name="1em"/><!-- HANGUL SYLLABLE BBYEOG -->
+ <map code="0xbf0a" name="1em"/><!-- HANGUL SYLLABLE BBYEOGG -->
+ <map code="0xbf0b" name="1em"/><!-- HANGUL SYLLABLE BBYEOGS -->
+ <map code="0xbf0c" name="1em"/><!-- HANGUL SYLLABLE BBYEON -->
+ <map code="0xbf0d" name="1em"/><!-- HANGUL SYLLABLE BBYEONJ -->
+ <map code="0xbf0e" name="1em"/><!-- HANGUL SYLLABLE BBYEONH -->
+ <map code="0xbf0f" name="1em"/><!-- HANGUL SYLLABLE BBYEOD -->
+ <map code="0xbf10" name="1em"/><!-- HANGUL SYLLABLE BBYEOL -->
+ <map code="0xbf11" name="1em"/><!-- HANGUL SYLLABLE BBYEOLG -->
+ <map code="0xbf12" name="1em"/><!-- HANGUL SYLLABLE BBYEOLM -->
+ <map code="0xbf13" name="1em"/><!-- HANGUL SYLLABLE BBYEOLB -->
+ <map code="0xbf14" name="1em"/><!-- HANGUL SYLLABLE BBYEOLS -->
+ <map code="0xbf15" name="1em"/><!-- HANGUL SYLLABLE BBYEOLT -->
+ <map code="0xbf16" name="1em"/><!-- HANGUL SYLLABLE BBYEOLP -->
+ <map code="0xbf17" name="1em"/><!-- HANGUL SYLLABLE BBYEOLH -->
+ <map code="0xbf18" name="1em"/><!-- HANGUL SYLLABLE BBYEOM -->
+ <map code="0xbf19" name="1em"/><!-- HANGUL SYLLABLE BBYEOB -->
+ <map code="0xbf1a" name="1em"/><!-- HANGUL SYLLABLE BBYEOBS -->
+ <map code="0xbf1b" name="1em"/><!-- HANGUL SYLLABLE BBYEOS -->
+ <map code="0xbf1c" name="1em"/><!-- HANGUL SYLLABLE BBYEOSS -->
+ <map code="0xbf1d" name="1em"/><!-- HANGUL SYLLABLE BBYEONG -->
+ <map code="0xbf1e" name="1em"/><!-- HANGUL SYLLABLE BBYEOJ -->
+ <map code="0xbf1f" name="1em"/><!-- HANGUL SYLLABLE BBYEOC -->
+ <map code="0xbf20" name="1em"/><!-- HANGUL SYLLABLE BBYEOK -->
+ <map code="0xbf21" name="1em"/><!-- HANGUL SYLLABLE BBYEOT -->
+ <map code="0xbf22" name="1em"/><!-- HANGUL SYLLABLE BBYEOP -->
+ <map code="0xbf23" name="1em"/><!-- HANGUL SYLLABLE BBYEOH -->
+ <map code="0xbf24" name="1em"/><!-- HANGUL SYLLABLE BBYE -->
+ <map code="0xbf25" name="1em"/><!-- HANGUL SYLLABLE BBYEG -->
+ <map code="0xbf26" name="1em"/><!-- HANGUL SYLLABLE BBYEGG -->
+ <map code="0xbf27" name="1em"/><!-- HANGUL SYLLABLE BBYEGS -->
+ <map code="0xbf28" name="1em"/><!-- HANGUL SYLLABLE BBYEN -->
+ <map code="0xbf29" name="1em"/><!-- HANGUL SYLLABLE BBYENJ -->
+ <map code="0xbf2a" name="1em"/><!-- HANGUL SYLLABLE BBYENH -->
+ <map code="0xbf2b" name="1em"/><!-- HANGUL SYLLABLE BBYED -->
+ <map code="0xbf2c" name="1em"/><!-- HANGUL SYLLABLE BBYEL -->
+ <map code="0xbf2d" name="1em"/><!-- HANGUL SYLLABLE BBYELG -->
+ <map code="0xbf2e" name="1em"/><!-- HANGUL SYLLABLE BBYELM -->
+ <map code="0xbf2f" name="1em"/><!-- HANGUL SYLLABLE BBYELB -->
+ <map code="0xbf30" name="1em"/><!-- HANGUL SYLLABLE BBYELS -->
+ <map code="0xbf31" name="1em"/><!-- HANGUL SYLLABLE BBYELT -->
+ <map code="0xbf32" name="1em"/><!-- HANGUL SYLLABLE BBYELP -->
+ <map code="0xbf33" name="1em"/><!-- HANGUL SYLLABLE BBYELH -->
+ <map code="0xbf34" name="1em"/><!-- HANGUL SYLLABLE BBYEM -->
+ <map code="0xbf35" name="1em"/><!-- HANGUL SYLLABLE BBYEB -->
+ <map code="0xbf36" name="1em"/><!-- HANGUL SYLLABLE BBYEBS -->
+ <map code="0xbf37" name="1em"/><!-- HANGUL SYLLABLE BBYES -->
+ <map code="0xbf38" name="1em"/><!-- HANGUL SYLLABLE BBYESS -->
+ <map code="0xbf39" name="1em"/><!-- HANGUL SYLLABLE BBYENG -->
+ <map code="0xbf3a" name="1em"/><!-- HANGUL SYLLABLE BBYEJ -->
+ <map code="0xbf3b" name="1em"/><!-- HANGUL SYLLABLE BBYEC -->
+ <map code="0xbf3c" name="1em"/><!-- HANGUL SYLLABLE BBYEK -->
+ <map code="0xbf3d" name="1em"/><!-- HANGUL SYLLABLE BBYET -->
+ <map code="0xbf3e" name="1em"/><!-- HANGUL SYLLABLE BBYEP -->
+ <map code="0xbf3f" name="1em"/><!-- HANGUL SYLLABLE BBYEH -->
+ <map code="0xbf40" name="1em"/><!-- HANGUL SYLLABLE BBO -->
+ <map code="0xbf41" name="1em"/><!-- HANGUL SYLLABLE BBOG -->
+ <map code="0xbf42" name="1em"/><!-- HANGUL SYLLABLE BBOGG -->
+ <map code="0xbf43" name="1em"/><!-- HANGUL SYLLABLE BBOGS -->
+ <map code="0xbf44" name="1em"/><!-- HANGUL SYLLABLE BBON -->
+ <map code="0xbf45" name="1em"/><!-- HANGUL SYLLABLE BBONJ -->
+ <map code="0xbf46" name="1em"/><!-- HANGUL SYLLABLE BBONH -->
+ <map code="0xbf47" name="1em"/><!-- HANGUL SYLLABLE BBOD -->
+ <map code="0xbf48" name="1em"/><!-- HANGUL SYLLABLE BBOL -->
+ <map code="0xbf49" name="1em"/><!-- HANGUL SYLLABLE BBOLG -->
+ <map code="0xbf4a" name="1em"/><!-- HANGUL SYLLABLE BBOLM -->
+ <map code="0xbf4b" name="1em"/><!-- HANGUL SYLLABLE BBOLB -->
+ <map code="0xbf4c" name="1em"/><!-- HANGUL SYLLABLE BBOLS -->
+ <map code="0xbf4d" name="1em"/><!-- HANGUL SYLLABLE BBOLT -->
+ <map code="0xbf4e" name="1em"/><!-- HANGUL SYLLABLE BBOLP -->
+ <map code="0xbf4f" name="1em"/><!-- HANGUL SYLLABLE BBOLH -->
+ <map code="0xbf50" name="1em"/><!-- HANGUL SYLLABLE BBOM -->
+ <map code="0xbf51" name="1em"/><!-- HANGUL SYLLABLE BBOB -->
+ <map code="0xbf52" name="1em"/><!-- HANGUL SYLLABLE BBOBS -->
+ <map code="0xbf53" name="1em"/><!-- HANGUL SYLLABLE BBOS -->
+ <map code="0xbf54" name="1em"/><!-- HANGUL SYLLABLE BBOSS -->
+ <map code="0xbf55" name="1em"/><!-- HANGUL SYLLABLE BBONG -->
+ <map code="0xbf56" name="1em"/><!-- HANGUL SYLLABLE BBOJ -->
+ <map code="0xbf57" name="1em"/><!-- HANGUL SYLLABLE BBOC -->
+ <map code="0xbf58" name="1em"/><!-- HANGUL SYLLABLE BBOK -->
+ <map code="0xbf59" name="1em"/><!-- HANGUL SYLLABLE BBOT -->
+ <map code="0xbf5a" name="1em"/><!-- HANGUL SYLLABLE BBOP -->
+ <map code="0xbf5b" name="1em"/><!-- HANGUL SYLLABLE BBOH -->
+ <map code="0xbf5c" name="1em"/><!-- HANGUL SYLLABLE BBWA -->
+ <map code="0xbf5d" name="1em"/><!-- HANGUL SYLLABLE BBWAG -->
+ <map code="0xbf5e" name="1em"/><!-- HANGUL SYLLABLE BBWAGG -->
+ <map code="0xbf5f" name="1em"/><!-- HANGUL SYLLABLE BBWAGS -->
+ <map code="0xbf60" name="1em"/><!-- HANGUL SYLLABLE BBWAN -->
+ <map code="0xbf61" name="1em"/><!-- HANGUL SYLLABLE BBWANJ -->
+ <map code="0xbf62" name="1em"/><!-- HANGUL SYLLABLE BBWANH -->
+ <map code="0xbf63" name="1em"/><!-- HANGUL SYLLABLE BBWAD -->
+ <map code="0xbf64" name="1em"/><!-- HANGUL SYLLABLE BBWAL -->
+ <map code="0xbf65" name="1em"/><!-- HANGUL SYLLABLE BBWALG -->
+ <map code="0xbf66" name="1em"/><!-- HANGUL SYLLABLE BBWALM -->
+ <map code="0xbf67" name="1em"/><!-- HANGUL SYLLABLE BBWALB -->
+ <map code="0xbf68" name="1em"/><!-- HANGUL SYLLABLE BBWALS -->
+ <map code="0xbf69" name="1em"/><!-- HANGUL SYLLABLE BBWALT -->
+ <map code="0xbf6a" name="1em"/><!-- HANGUL SYLLABLE BBWALP -->
+ <map code="0xbf6b" name="1em"/><!-- HANGUL SYLLABLE BBWALH -->
+ <map code="0xbf6c" name="1em"/><!-- HANGUL SYLLABLE BBWAM -->
+ <map code="0xbf6d" name="1em"/><!-- HANGUL SYLLABLE BBWAB -->
+ <map code="0xbf6e" name="1em"/><!-- HANGUL SYLLABLE BBWABS -->
+ <map code="0xbf6f" name="1em"/><!-- HANGUL SYLLABLE BBWAS -->
+ <map code="0xbf70" name="1em"/><!-- HANGUL SYLLABLE BBWASS -->
+ <map code="0xbf71" name="1em"/><!-- HANGUL SYLLABLE BBWANG -->
+ <map code="0xbf72" name="1em"/><!-- HANGUL SYLLABLE BBWAJ -->
+ <map code="0xbf73" name="1em"/><!-- HANGUL SYLLABLE BBWAC -->
+ <map code="0xbf74" name="1em"/><!-- HANGUL SYLLABLE BBWAK -->
+ <map code="0xbf75" name="1em"/><!-- HANGUL SYLLABLE BBWAT -->
+ <map code="0xbf76" name="1em"/><!-- HANGUL SYLLABLE BBWAP -->
+ <map code="0xbf77" name="1em"/><!-- HANGUL SYLLABLE BBWAH -->
+ <map code="0xbf78" name="1em"/><!-- HANGUL SYLLABLE BBWAE -->
+ <map code="0xbf79" name="1em"/><!-- HANGUL SYLLABLE BBWAEG -->
+ <map code="0xbf7a" name="1em"/><!-- HANGUL SYLLABLE BBWAEGG -->
+ <map code="0xbf7b" name="1em"/><!-- HANGUL SYLLABLE BBWAEGS -->
+ <map code="0xbf7c" name="1em"/><!-- HANGUL SYLLABLE BBWAEN -->
+ <map code="0xbf7d" name="1em"/><!-- HANGUL SYLLABLE BBWAENJ -->
+ <map code="0xbf7e" name="1em"/><!-- HANGUL SYLLABLE BBWAENH -->
+ <map code="0xbf7f" name="1em"/><!-- HANGUL SYLLABLE BBWAED -->
+ <map code="0xbf80" name="1em"/><!-- HANGUL SYLLABLE BBWAEL -->
+ <map code="0xbf81" name="1em"/><!-- HANGUL SYLLABLE BBWAELG -->
+ <map code="0xbf82" name="1em"/><!-- HANGUL SYLLABLE BBWAELM -->
+ <map code="0xbf83" name="1em"/><!-- HANGUL SYLLABLE BBWAELB -->
+ <map code="0xbf84" name="1em"/><!-- HANGUL SYLLABLE BBWAELS -->
+ <map code="0xbf85" name="1em"/><!-- HANGUL SYLLABLE BBWAELT -->
+ <map code="0xbf86" name="1em"/><!-- HANGUL SYLLABLE BBWAELP -->
+ <map code="0xbf87" name="1em"/><!-- HANGUL SYLLABLE BBWAELH -->
+ <map code="0xbf88" name="1em"/><!-- HANGUL SYLLABLE BBWAEM -->
+ <map code="0xbf89" name="1em"/><!-- HANGUL SYLLABLE BBWAEB -->
+ <map code="0xbf8a" name="1em"/><!-- HANGUL SYLLABLE BBWAEBS -->
+ <map code="0xbf8b" name="1em"/><!-- HANGUL SYLLABLE BBWAES -->
+ <map code="0xbf8c" name="1em"/><!-- HANGUL SYLLABLE BBWAESS -->
+ <map code="0xbf8d" name="1em"/><!-- HANGUL SYLLABLE BBWAENG -->
+ <map code="0xbf8e" name="1em"/><!-- HANGUL SYLLABLE BBWAEJ -->
+ <map code="0xbf8f" name="1em"/><!-- HANGUL SYLLABLE BBWAEC -->
+ <map code="0xbf90" name="1em"/><!-- HANGUL SYLLABLE BBWAEK -->
+ <map code="0xbf91" name="1em"/><!-- HANGUL SYLLABLE BBWAET -->
+ <map code="0xbf92" name="1em"/><!-- HANGUL SYLLABLE BBWAEP -->
+ <map code="0xbf93" name="1em"/><!-- HANGUL SYLLABLE BBWAEH -->
+ <map code="0xbf94" name="1em"/><!-- HANGUL SYLLABLE BBOE -->
+ <map code="0xbf95" name="1em"/><!-- HANGUL SYLLABLE BBOEG -->
+ <map code="0xbf96" name="1em"/><!-- HANGUL SYLLABLE BBOEGG -->
+ <map code="0xbf97" name="1em"/><!-- HANGUL SYLLABLE BBOEGS -->
+ <map code="0xbf98" name="1em"/><!-- HANGUL SYLLABLE BBOEN -->
+ <map code="0xbf99" name="1em"/><!-- HANGUL SYLLABLE BBOENJ -->
+ <map code="0xbf9a" name="1em"/><!-- HANGUL SYLLABLE BBOENH -->
+ <map code="0xbf9b" name="1em"/><!-- HANGUL SYLLABLE BBOED -->
+ <map code="0xbf9c" name="1em"/><!-- HANGUL SYLLABLE BBOEL -->
+ <map code="0xbf9d" name="1em"/><!-- HANGUL SYLLABLE BBOELG -->
+ <map code="0xbf9e" name="1em"/><!-- HANGUL SYLLABLE BBOELM -->
+ <map code="0xbf9f" name="1em"/><!-- HANGUL SYLLABLE BBOELB -->
+ <map code="0xbfa0" name="1em"/><!-- HANGUL SYLLABLE BBOELS -->
+ <map code="0xbfa1" name="1em"/><!-- HANGUL SYLLABLE BBOELT -->
+ <map code="0xbfa2" name="1em"/><!-- HANGUL SYLLABLE BBOELP -->
+ <map code="0xbfa3" name="1em"/><!-- HANGUL SYLLABLE BBOELH -->
+ <map code="0xbfa4" name="1em"/><!-- HANGUL SYLLABLE BBOEM -->
+ <map code="0xbfa5" name="1em"/><!-- HANGUL SYLLABLE BBOEB -->
+ <map code="0xbfa6" name="1em"/><!-- HANGUL SYLLABLE BBOEBS -->
+ <map code="0xbfa7" name="1em"/><!-- HANGUL SYLLABLE BBOES -->
+ <map code="0xbfa8" name="1em"/><!-- HANGUL SYLLABLE BBOESS -->
+ <map code="0xbfa9" name="1em"/><!-- HANGUL SYLLABLE BBOENG -->
+ <map code="0xbfaa" name="1em"/><!-- HANGUL SYLLABLE BBOEJ -->
+ <map code="0xbfab" name="1em"/><!-- HANGUL SYLLABLE BBOEC -->
+ <map code="0xbfac" name="1em"/><!-- HANGUL SYLLABLE BBOEK -->
+ <map code="0xbfad" name="1em"/><!-- HANGUL SYLLABLE BBOET -->
+ <map code="0xbfae" name="1em"/><!-- HANGUL SYLLABLE BBOEP -->
+ <map code="0xbfaf" name="1em"/><!-- HANGUL SYLLABLE BBOEH -->
+ <map code="0xbfb0" name="1em"/><!-- HANGUL SYLLABLE BBYO -->
+ <map code="0xbfb1" name="1em"/><!-- HANGUL SYLLABLE BBYOG -->
+ <map code="0xbfb2" name="1em"/><!-- HANGUL SYLLABLE BBYOGG -->
+ <map code="0xbfb3" name="1em"/><!-- HANGUL SYLLABLE BBYOGS -->
+ <map code="0xbfb4" name="1em"/><!-- HANGUL SYLLABLE BBYON -->
+ <map code="0xbfb5" name="1em"/><!-- HANGUL SYLLABLE BBYONJ -->
+ <map code="0xbfb6" name="1em"/><!-- HANGUL SYLLABLE BBYONH -->
+ <map code="0xbfb7" name="1em"/><!-- HANGUL SYLLABLE BBYOD -->
+ <map code="0xbfb8" name="1em"/><!-- HANGUL SYLLABLE BBYOL -->
+ <map code="0xbfb9" name="1em"/><!-- HANGUL SYLLABLE BBYOLG -->
+ <map code="0xbfba" name="1em"/><!-- HANGUL SYLLABLE BBYOLM -->
+ <map code="0xbfbb" name="1em"/><!-- HANGUL SYLLABLE BBYOLB -->
+ <map code="0xbfbc" name="1em"/><!-- HANGUL SYLLABLE BBYOLS -->
+ <map code="0xbfbd" name="1em"/><!-- HANGUL SYLLABLE BBYOLT -->
+ <map code="0xbfbe" name="1em"/><!-- HANGUL SYLLABLE BBYOLP -->
+ <map code="0xbfbf" name="1em"/><!-- HANGUL SYLLABLE BBYOLH -->
+ <map code="0xbfc0" name="1em"/><!-- HANGUL SYLLABLE BBYOM -->
+ <map code="0xbfc1" name="1em"/><!-- HANGUL SYLLABLE BBYOB -->
+ <map code="0xbfc2" name="1em"/><!-- HANGUL SYLLABLE BBYOBS -->
+ <map code="0xbfc3" name="1em"/><!-- HANGUL SYLLABLE BBYOS -->
+ <map code="0xbfc4" name="1em"/><!-- HANGUL SYLLABLE BBYOSS -->
+ <map code="0xbfc5" name="1em"/><!-- HANGUL SYLLABLE BBYONG -->
+ <map code="0xbfc6" name="1em"/><!-- HANGUL SYLLABLE BBYOJ -->
+ <map code="0xbfc7" name="1em"/><!-- HANGUL SYLLABLE BBYOC -->
+ <map code="0xbfc8" name="1em"/><!-- HANGUL SYLLABLE BBYOK -->
+ <map code="0xbfc9" name="1em"/><!-- HANGUL SYLLABLE BBYOT -->
+ <map code="0xbfca" name="1em"/><!-- HANGUL SYLLABLE BBYOP -->
+ <map code="0xbfcb" name="1em"/><!-- HANGUL SYLLABLE BBYOH -->
+ <map code="0xbfcc" name="1em"/><!-- HANGUL SYLLABLE BBU -->
+ <map code="0xbfcd" name="1em"/><!-- HANGUL SYLLABLE BBUG -->
+ <map code="0xbfce" name="1em"/><!-- HANGUL SYLLABLE BBUGG -->
+ <map code="0xbfcf" name="1em"/><!-- HANGUL SYLLABLE BBUGS -->
+ <map code="0xbfd0" name="1em"/><!-- HANGUL SYLLABLE BBUN -->
+ <map code="0xbfd1" name="1em"/><!-- HANGUL SYLLABLE BBUNJ -->
+ <map code="0xbfd2" name="1em"/><!-- HANGUL SYLLABLE BBUNH -->
+ <map code="0xbfd3" name="1em"/><!-- HANGUL SYLLABLE BBUD -->
+ <map code="0xbfd4" name="1em"/><!-- HANGUL SYLLABLE BBUL -->
+ <map code="0xbfd5" name="1em"/><!-- HANGUL SYLLABLE BBULG -->
+ <map code="0xbfd6" name="1em"/><!-- HANGUL SYLLABLE BBULM -->
+ <map code="0xbfd7" name="1em"/><!-- HANGUL SYLLABLE BBULB -->
+ <map code="0xbfd8" name="1em"/><!-- HANGUL SYLLABLE BBULS -->
+ <map code="0xbfd9" name="1em"/><!-- HANGUL SYLLABLE BBULT -->
+ <map code="0xbfda" name="1em"/><!-- HANGUL SYLLABLE BBULP -->
+ <map code="0xbfdb" name="1em"/><!-- HANGUL SYLLABLE BBULH -->
+ <map code="0xbfdc" name="1em"/><!-- HANGUL SYLLABLE BBUM -->
+ <map code="0xbfdd" name="1em"/><!-- HANGUL SYLLABLE BBUB -->
+ <map code="0xbfde" name="1em"/><!-- HANGUL SYLLABLE BBUBS -->
+ <map code="0xbfdf" name="1em"/><!-- HANGUL SYLLABLE BBUS -->
+ <map code="0xbfe0" name="1em"/><!-- HANGUL SYLLABLE BBUSS -->
+ <map code="0xbfe1" name="1em"/><!-- HANGUL SYLLABLE BBUNG -->
+ <map code="0xbfe2" name="1em"/><!-- HANGUL SYLLABLE BBUJ -->
+ <map code="0xbfe3" name="1em"/><!-- HANGUL SYLLABLE BBUC -->
+ <map code="0xbfe4" name="1em"/><!-- HANGUL SYLLABLE BBUK -->
+ <map code="0xbfe5" name="1em"/><!-- HANGUL SYLLABLE BBUT -->
+ <map code="0xbfe6" name="1em"/><!-- HANGUL SYLLABLE BBUP -->
+ <map code="0xbfe7" name="1em"/><!-- HANGUL SYLLABLE BBUH -->
+ <map code="0xbfe8" name="1em"/><!-- HANGUL SYLLABLE BBWEO -->
+ <map code="0xbfe9" name="1em"/><!-- HANGUL SYLLABLE BBWEOG -->
+ <map code="0xbfea" name="1em"/><!-- HANGUL SYLLABLE BBWEOGG -->
+ <map code="0xbfeb" name="1em"/><!-- HANGUL SYLLABLE BBWEOGS -->
+ <map code="0xbfec" name="1em"/><!-- HANGUL SYLLABLE BBWEON -->
+ <map code="0xbfed" name="1em"/><!-- HANGUL SYLLABLE BBWEONJ -->
+ <map code="0xbfee" name="1em"/><!-- HANGUL SYLLABLE BBWEONH -->
+ <map code="0xbfef" name="1em"/><!-- HANGUL SYLLABLE BBWEOD -->
+ <map code="0xbff0" name="1em"/><!-- HANGUL SYLLABLE BBWEOL -->
+ <map code="0xbff1" name="1em"/><!-- HANGUL SYLLABLE BBWEOLG -->
+ <map code="0xbff2" name="1em"/><!-- HANGUL SYLLABLE BBWEOLM -->
+ <map code="0xbff3" name="1em"/><!-- HANGUL SYLLABLE BBWEOLB -->
+ <map code="0xbff4" name="1em"/><!-- HANGUL SYLLABLE BBWEOLS -->
+ <map code="0xbff5" name="1em"/><!-- HANGUL SYLLABLE BBWEOLT -->
+ <map code="0xbff6" name="1em"/><!-- HANGUL SYLLABLE BBWEOLP -->
+ <map code="0xbff7" name="1em"/><!-- HANGUL SYLLABLE BBWEOLH -->
+ <map code="0xbff8" name="1em"/><!-- HANGUL SYLLABLE BBWEOM -->
+ <map code="0xbff9" name="1em"/><!-- HANGUL SYLLABLE BBWEOB -->
+ <map code="0xbffa" name="1em"/><!-- HANGUL SYLLABLE BBWEOBS -->
+ <map code="0xbffb" name="1em"/><!-- HANGUL SYLLABLE BBWEOS -->
+ <map code="0xbffc" name="1em"/><!-- HANGUL SYLLABLE BBWEOSS -->
+ <map code="0xbffd" name="1em"/><!-- HANGUL SYLLABLE BBWEONG -->
+ <map code="0xbffe" name="1em"/><!-- HANGUL SYLLABLE BBWEOJ -->
+ <map code="0xbfff" name="1em"/><!-- HANGUL SYLLABLE BBWEOC -->
+ <map code="0xc000" name="1em"/><!-- HANGUL SYLLABLE BBWEOK -->
+ <map code="0xc001" name="1em"/><!-- HANGUL SYLLABLE BBWEOT -->
+ <map code="0xc002" name="1em"/><!-- HANGUL SYLLABLE BBWEOP -->
+ <map code="0xc003" name="1em"/><!-- HANGUL SYLLABLE BBWEOH -->
+ <map code="0xc004" name="1em"/><!-- HANGUL SYLLABLE BBWE -->
+ <map code="0xc005" name="1em"/><!-- HANGUL SYLLABLE BBWEG -->
+ <map code="0xc006" name="1em"/><!-- HANGUL SYLLABLE BBWEGG -->
+ <map code="0xc007" name="1em"/><!-- HANGUL SYLLABLE BBWEGS -->
+ <map code="0xc008" name="1em"/><!-- HANGUL SYLLABLE BBWEN -->
+ <map code="0xc009" name="1em"/><!-- HANGUL SYLLABLE BBWENJ -->
+ <map code="0xc00a" name="1em"/><!-- HANGUL SYLLABLE BBWENH -->
+ <map code="0xc00b" name="1em"/><!-- HANGUL SYLLABLE BBWED -->
+ <map code="0xc00c" name="1em"/><!-- HANGUL SYLLABLE BBWEL -->
+ <map code="0xc00d" name="1em"/><!-- HANGUL SYLLABLE BBWELG -->
+ <map code="0xc00e" name="1em"/><!-- HANGUL SYLLABLE BBWELM -->
+ <map code="0xc00f" name="1em"/><!-- HANGUL SYLLABLE BBWELB -->
+ <map code="0xc010" name="1em"/><!-- HANGUL SYLLABLE BBWELS -->
+ <map code="0xc011" name="1em"/><!-- HANGUL SYLLABLE BBWELT -->
+ <map code="0xc012" name="1em"/><!-- HANGUL SYLLABLE BBWELP -->
+ <map code="0xc013" name="1em"/><!-- HANGUL SYLLABLE BBWELH -->
+ <map code="0xc014" name="1em"/><!-- HANGUL SYLLABLE BBWEM -->
+ <map code="0xc015" name="1em"/><!-- HANGUL SYLLABLE BBWEB -->
+ <map code="0xc016" name="1em"/><!-- HANGUL SYLLABLE BBWEBS -->
+ <map code="0xc017" name="1em"/><!-- HANGUL SYLLABLE BBWES -->
+ <map code="0xc018" name="1em"/><!-- HANGUL SYLLABLE BBWESS -->
+ <map code="0xc019" name="1em"/><!-- HANGUL SYLLABLE BBWENG -->
+ <map code="0xc01a" name="1em"/><!-- HANGUL SYLLABLE BBWEJ -->
+ <map code="0xc01b" name="1em"/><!-- HANGUL SYLLABLE BBWEC -->
+ <map code="0xc01c" name="1em"/><!-- HANGUL SYLLABLE BBWEK -->
+ <map code="0xc01d" name="1em"/><!-- HANGUL SYLLABLE BBWET -->
+ <map code="0xc01e" name="1em"/><!-- HANGUL SYLLABLE BBWEP -->
+ <map code="0xc01f" name="1em"/><!-- HANGUL SYLLABLE BBWEH -->
+ <map code="0xc020" name="1em"/><!-- HANGUL SYLLABLE BBWI -->
+ <map code="0xc021" name="1em"/><!-- HANGUL SYLLABLE BBWIG -->
+ <map code="0xc022" name="1em"/><!-- HANGUL SYLLABLE BBWIGG -->
+ <map code="0xc023" name="1em"/><!-- HANGUL SYLLABLE BBWIGS -->
+ <map code="0xc024" name="1em"/><!-- HANGUL SYLLABLE BBWIN -->
+ <map code="0xc025" name="1em"/><!-- HANGUL SYLLABLE BBWINJ -->
+ <map code="0xc026" name="1em"/><!-- HANGUL SYLLABLE BBWINH -->
+ <map code="0xc027" name="1em"/><!-- HANGUL SYLLABLE BBWID -->
+ <map code="0xc028" name="1em"/><!-- HANGUL SYLLABLE BBWIL -->
+ <map code="0xc029" name="1em"/><!-- HANGUL SYLLABLE BBWILG -->
+ <map code="0xc02a" name="1em"/><!-- HANGUL SYLLABLE BBWILM -->
+ <map code="0xc02b" name="1em"/><!-- HANGUL SYLLABLE BBWILB -->
+ <map code="0xc02c" name="1em"/><!-- HANGUL SYLLABLE BBWILS -->
+ <map code="0xc02d" name="1em"/><!-- HANGUL SYLLABLE BBWILT -->
+ <map code="0xc02e" name="1em"/><!-- HANGUL SYLLABLE BBWILP -->
+ <map code="0xc02f" name="1em"/><!-- HANGUL SYLLABLE BBWILH -->
+ <map code="0xc030" name="1em"/><!-- HANGUL SYLLABLE BBWIM -->
+ <map code="0xc031" name="1em"/><!-- HANGUL SYLLABLE BBWIB -->
+ <map code="0xc032" name="1em"/><!-- HANGUL SYLLABLE BBWIBS -->
+ <map code="0xc033" name="1em"/><!-- HANGUL SYLLABLE BBWIS -->
+ <map code="0xc034" name="1em"/><!-- HANGUL SYLLABLE BBWISS -->
+ <map code="0xc035" name="1em"/><!-- HANGUL SYLLABLE BBWING -->
+ <map code="0xc036" name="1em"/><!-- HANGUL SYLLABLE BBWIJ -->
+ <map code="0xc037" name="1em"/><!-- HANGUL SYLLABLE BBWIC -->
+ <map code="0xc038" name="1em"/><!-- HANGUL SYLLABLE BBWIK -->
+ <map code="0xc039" name="1em"/><!-- HANGUL SYLLABLE BBWIT -->
+ <map code="0xc03a" name="1em"/><!-- HANGUL SYLLABLE BBWIP -->
+ <map code="0xc03b" name="1em"/><!-- HANGUL SYLLABLE BBWIH -->
+ <map code="0xc03c" name="1em"/><!-- HANGUL SYLLABLE BBYU -->
+ <map code="0xc03d" name="1em"/><!-- HANGUL SYLLABLE BBYUG -->
+ <map code="0xc03e" name="1em"/><!-- HANGUL SYLLABLE BBYUGG -->
+ <map code="0xc03f" name="1em"/><!-- HANGUL SYLLABLE BBYUGS -->
+ <map code="0xc040" name="1em"/><!-- HANGUL SYLLABLE BBYUN -->
+ <map code="0xc041" name="1em"/><!-- HANGUL SYLLABLE BBYUNJ -->
+ <map code="0xc042" name="1em"/><!-- HANGUL SYLLABLE BBYUNH -->
+ <map code="0xc043" name="1em"/><!-- HANGUL SYLLABLE BBYUD -->
+ <map code="0xc044" name="1em"/><!-- HANGUL SYLLABLE BBYUL -->
+ <map code="0xc045" name="1em"/><!-- HANGUL SYLLABLE BBYULG -->
+ <map code="0xc046" name="1em"/><!-- HANGUL SYLLABLE BBYULM -->
+ <map code="0xc047" name="1em"/><!-- HANGUL SYLLABLE BBYULB -->
+ <map code="0xc048" name="1em"/><!-- HANGUL SYLLABLE BBYULS -->
+ <map code="0xc049" name="1em"/><!-- HANGUL SYLLABLE BBYULT -->
+ <map code="0xc04a" name="1em"/><!-- HANGUL SYLLABLE BBYULP -->
+ <map code="0xc04b" name="1em"/><!-- HANGUL SYLLABLE BBYULH -->
+ <map code="0xc04c" name="1em"/><!-- HANGUL SYLLABLE BBYUM -->
+ <map code="0xc04d" name="1em"/><!-- HANGUL SYLLABLE BBYUB -->
+ <map code="0xc04e" name="1em"/><!-- HANGUL SYLLABLE BBYUBS -->
+ <map code="0xc04f" name="1em"/><!-- HANGUL SYLLABLE BBYUS -->
+ <map code="0xc050" name="1em"/><!-- HANGUL SYLLABLE BBYUSS -->
+ <map code="0xc051" name="1em"/><!-- HANGUL SYLLABLE BBYUNG -->
+ <map code="0xc052" name="1em"/><!-- HANGUL SYLLABLE BBYUJ -->
+ <map code="0xc053" name="1em"/><!-- HANGUL SYLLABLE BBYUC -->
+ <map code="0xc054" name="1em"/><!-- HANGUL SYLLABLE BBYUK -->
+ <map code="0xc055" name="1em"/><!-- HANGUL SYLLABLE BBYUT -->
+ <map code="0xc056" name="1em"/><!-- HANGUL SYLLABLE BBYUP -->
+ <map code="0xc057" name="1em"/><!-- HANGUL SYLLABLE BBYUH -->
+ <map code="0xc058" name="1em"/><!-- HANGUL SYLLABLE BBEU -->
+ <map code="0xc059" name="1em"/><!-- HANGUL SYLLABLE BBEUG -->
+ <map code="0xc05a" name="1em"/><!-- HANGUL SYLLABLE BBEUGG -->
+ <map code="0xc05b" name="1em"/><!-- HANGUL SYLLABLE BBEUGS -->
+ <map code="0xc05c" name="1em"/><!-- HANGUL SYLLABLE BBEUN -->
+ <map code="0xc05d" name="1em"/><!-- HANGUL SYLLABLE BBEUNJ -->
+ <map code="0xc05e" name="1em"/><!-- HANGUL SYLLABLE BBEUNH -->
+ <map code="0xc05f" name="1em"/><!-- HANGUL SYLLABLE BBEUD -->
+ <map code="0xc060" name="1em"/><!-- HANGUL SYLLABLE BBEUL -->
+ <map code="0xc061" name="1em"/><!-- HANGUL SYLLABLE BBEULG -->
+ <map code="0xc062" name="1em"/><!-- HANGUL SYLLABLE BBEULM -->
+ <map code="0xc063" name="1em"/><!-- HANGUL SYLLABLE BBEULB -->
+ <map code="0xc064" name="1em"/><!-- HANGUL SYLLABLE BBEULS -->
+ <map code="0xc065" name="1em"/><!-- HANGUL SYLLABLE BBEULT -->
+ <map code="0xc066" name="1em"/><!-- HANGUL SYLLABLE BBEULP -->
+ <map code="0xc067" name="1em"/><!-- HANGUL SYLLABLE BBEULH -->
+ <map code="0xc068" name="1em"/><!-- HANGUL SYLLABLE BBEUM -->
+ <map code="0xc069" name="1em"/><!-- HANGUL SYLLABLE BBEUB -->
+ <map code="0xc06a" name="1em"/><!-- HANGUL SYLLABLE BBEUBS -->
+ <map code="0xc06b" name="1em"/><!-- HANGUL SYLLABLE BBEUS -->
+ <map code="0xc06c" name="1em"/><!-- HANGUL SYLLABLE BBEUSS -->
+ <map code="0xc06d" name="1em"/><!-- HANGUL SYLLABLE BBEUNG -->
+ <map code="0xc06e" name="1em"/><!-- HANGUL SYLLABLE BBEUJ -->
+ <map code="0xc06f" name="1em"/><!-- HANGUL SYLLABLE BBEUC -->
+ <map code="0xc070" name="1em"/><!-- HANGUL SYLLABLE BBEUK -->
+ <map code="0xc071" name="1em"/><!-- HANGUL SYLLABLE BBEUT -->
+ <map code="0xc072" name="1em"/><!-- HANGUL SYLLABLE BBEUP -->
+ <map code="0xc073" name="1em"/><!-- HANGUL SYLLABLE BBEUH -->
+ <map code="0xc074" name="1em"/><!-- HANGUL SYLLABLE BBYI -->
+ <map code="0xc075" name="1em"/><!-- HANGUL SYLLABLE BBYIG -->
+ <map code="0xc076" name="1em"/><!-- HANGUL SYLLABLE BBYIGG -->
+ <map code="0xc077" name="1em"/><!-- HANGUL SYLLABLE BBYIGS -->
+ <map code="0xc078" name="1em"/><!-- HANGUL SYLLABLE BBYIN -->
+ <map code="0xc079" name="1em"/><!-- HANGUL SYLLABLE BBYINJ -->
+ <map code="0xc07a" name="1em"/><!-- HANGUL SYLLABLE BBYINH -->
+ <map code="0xc07b" name="1em"/><!-- HANGUL SYLLABLE BBYID -->
+ <map code="0xc07c" name="1em"/><!-- HANGUL SYLLABLE BBYIL -->
+ <map code="0xc07d" name="1em"/><!-- HANGUL SYLLABLE BBYILG -->
+ <map code="0xc07e" name="1em"/><!-- HANGUL SYLLABLE BBYILM -->
+ <map code="0xc07f" name="1em"/><!-- HANGUL SYLLABLE BBYILB -->
+ <map code="0xc080" name="1em"/><!-- HANGUL SYLLABLE BBYILS -->
+ <map code="0xc081" name="1em"/><!-- HANGUL SYLLABLE BBYILT -->
+ <map code="0xc082" name="1em"/><!-- HANGUL SYLLABLE BBYILP -->
+ <map code="0xc083" name="1em"/><!-- HANGUL SYLLABLE BBYILH -->
+ <map code="0xc084" name="1em"/><!-- HANGUL SYLLABLE BBYIM -->
+ <map code="0xc085" name="1em"/><!-- HANGUL SYLLABLE BBYIB -->
+ <map code="0xc086" name="1em"/><!-- HANGUL SYLLABLE BBYIBS -->
+ <map code="0xc087" name="1em"/><!-- HANGUL SYLLABLE BBYIS -->
+ <map code="0xc088" name="1em"/><!-- HANGUL SYLLABLE BBYISS -->
+ <map code="0xc089" name="1em"/><!-- HANGUL SYLLABLE BBYING -->
+ <map code="0xc08a" name="1em"/><!-- HANGUL SYLLABLE BBYIJ -->
+ <map code="0xc08b" name="1em"/><!-- HANGUL SYLLABLE BBYIC -->
+ <map code="0xc08c" name="1em"/><!-- HANGUL SYLLABLE BBYIK -->
+ <map code="0xc08d" name="1em"/><!-- HANGUL SYLLABLE BBYIT -->
+ <map code="0xc08e" name="1em"/><!-- HANGUL SYLLABLE BBYIP -->
+ <map code="0xc08f" name="1em"/><!-- HANGUL SYLLABLE BBYIH -->
+ <map code="0xc090" name="1em"/><!-- HANGUL SYLLABLE BBI -->
+ <map code="0xc091" name="1em"/><!-- HANGUL SYLLABLE BBIG -->
+ <map code="0xc092" name="1em"/><!-- HANGUL SYLLABLE BBIGG -->
+ <map code="0xc093" name="1em"/><!-- HANGUL SYLLABLE BBIGS -->
+ <map code="0xc094" name="1em"/><!-- HANGUL SYLLABLE BBIN -->
+ <map code="0xc095" name="1em"/><!-- HANGUL SYLLABLE BBINJ -->
+ <map code="0xc096" name="1em"/><!-- HANGUL SYLLABLE BBINH -->
+ <map code="0xc097" name="1em"/><!-- HANGUL SYLLABLE BBID -->
+ <map code="0xc098" name="1em"/><!-- HANGUL SYLLABLE BBIL -->
+ <map code="0xc099" name="1em"/><!-- HANGUL SYLLABLE BBILG -->
+ <map code="0xc09a" name="1em"/><!-- HANGUL SYLLABLE BBILM -->
+ <map code="0xc09b" name="1em"/><!-- HANGUL SYLLABLE BBILB -->
+ <map code="0xc09c" name="1em"/><!-- HANGUL SYLLABLE BBILS -->
+ <map code="0xc09d" name="1em"/><!-- HANGUL SYLLABLE BBILT -->
+ <map code="0xc09e" name="1em"/><!-- HANGUL SYLLABLE BBILP -->
+ <map code="0xc09f" name="1em"/><!-- HANGUL SYLLABLE BBILH -->
+ <map code="0xc0a0" name="1em"/><!-- HANGUL SYLLABLE BBIM -->
+ <map code="0xc0a1" name="1em"/><!-- HANGUL SYLLABLE BBIB -->
+ <map code="0xc0a2" name="1em"/><!-- HANGUL SYLLABLE BBIBS -->
+ <map code="0xc0a3" name="1em"/><!-- HANGUL SYLLABLE BBIS -->
+ <map code="0xc0a4" name="1em"/><!-- HANGUL SYLLABLE BBISS -->
+ <map code="0xc0a5" name="1em"/><!-- HANGUL SYLLABLE BBING -->
+ <map code="0xc0a6" name="1em"/><!-- HANGUL SYLLABLE BBIJ -->
+ <map code="0xc0a7" name="1em"/><!-- HANGUL SYLLABLE BBIC -->
+ <map code="0xc0a8" name="1em"/><!-- HANGUL SYLLABLE BBIK -->
+ <map code="0xc0a9" name="1em"/><!-- HANGUL SYLLABLE BBIT -->
+ <map code="0xc0aa" name="1em"/><!-- HANGUL SYLLABLE BBIP -->
+ <map code="0xc0ab" name="1em"/><!-- HANGUL SYLLABLE BBIH -->
+ <map code="0xc0ac" name="1em"/><!-- HANGUL SYLLABLE SA -->
+ <map code="0xc0ad" name="1em"/><!-- HANGUL SYLLABLE SAG -->
+ <map code="0xc0ae" name="1em"/><!-- HANGUL SYLLABLE SAGG -->
+ <map code="0xc0af" name="1em"/><!-- HANGUL SYLLABLE SAGS -->
+ <map code="0xc0b0" name="1em"/><!-- HANGUL SYLLABLE SAN -->
+ <map code="0xc0b1" name="1em"/><!-- HANGUL SYLLABLE SANJ -->
+ <map code="0xc0b2" name="1em"/><!-- HANGUL SYLLABLE SANH -->
+ <map code="0xc0b3" name="1em"/><!-- HANGUL SYLLABLE SAD -->
+ <map code="0xc0b4" name="1em"/><!-- HANGUL SYLLABLE SAL -->
+ <map code="0xc0b5" name="1em"/><!-- HANGUL SYLLABLE SALG -->
+ <map code="0xc0b6" name="1em"/><!-- HANGUL SYLLABLE SALM -->
+ <map code="0xc0b7" name="1em"/><!-- HANGUL SYLLABLE SALB -->
+ <map code="0xc0b8" name="1em"/><!-- HANGUL SYLLABLE SALS -->
+ <map code="0xc0b9" name="1em"/><!-- HANGUL SYLLABLE SALT -->
+ <map code="0xc0ba" name="1em"/><!-- HANGUL SYLLABLE SALP -->
+ <map code="0xc0bb" name="1em"/><!-- HANGUL SYLLABLE SALH -->
+ <map code="0xc0bc" name="1em"/><!-- HANGUL SYLLABLE SAM -->
+ <map code="0xc0bd" name="1em"/><!-- HANGUL SYLLABLE SAB -->
+ <map code="0xc0be" name="1em"/><!-- HANGUL SYLLABLE SABS -->
+ <map code="0xc0bf" name="1em"/><!-- HANGUL SYLLABLE SAS -->
+ <map code="0xc0c0" name="1em"/><!-- HANGUL SYLLABLE SASS -->
+ <map code="0xc0c1" name="1em"/><!-- HANGUL SYLLABLE SANG -->
+ <map code="0xc0c2" name="1em"/><!-- HANGUL SYLLABLE SAJ -->
+ <map code="0xc0c3" name="1em"/><!-- HANGUL SYLLABLE SAC -->
+ <map code="0xc0c4" name="1em"/><!-- HANGUL SYLLABLE SAK -->
+ <map code="0xc0c5" name="1em"/><!-- HANGUL SYLLABLE SAT -->
+ <map code="0xc0c6" name="1em"/><!-- HANGUL SYLLABLE SAP -->
+ <map code="0xc0c7" name="1em"/><!-- HANGUL SYLLABLE SAH -->
+ <map code="0xc0c8" name="1em"/><!-- HANGUL SYLLABLE SAE -->
+ <map code="0xc0c9" name="1em"/><!-- HANGUL SYLLABLE SAEG -->
+ <map code="0xc0ca" name="1em"/><!-- HANGUL SYLLABLE SAEGG -->
+ <map code="0xc0cb" name="1em"/><!-- HANGUL SYLLABLE SAEGS -->
+ <map code="0xc0cc" name="1em"/><!-- HANGUL SYLLABLE SAEN -->
+ <map code="0xc0cd" name="1em"/><!-- HANGUL SYLLABLE SAENJ -->
+ <map code="0xc0ce" name="1em"/><!-- HANGUL SYLLABLE SAENH -->
+ <map code="0xc0cf" name="1em"/><!-- HANGUL SYLLABLE SAED -->
+ <map code="0xc0d0" name="1em"/><!-- HANGUL SYLLABLE SAEL -->
+ <map code="0xc0d1" name="1em"/><!-- HANGUL SYLLABLE SAELG -->
+ <map code="0xc0d2" name="1em"/><!-- HANGUL SYLLABLE SAELM -->
+ <map code="0xc0d3" name="1em"/><!-- HANGUL SYLLABLE SAELB -->
+ <map code="0xc0d4" name="1em"/><!-- HANGUL SYLLABLE SAELS -->
+ <map code="0xc0d5" name="1em"/><!-- HANGUL SYLLABLE SAELT -->
+ <map code="0xc0d6" name="1em"/><!-- HANGUL SYLLABLE SAELP -->
+ <map code="0xc0d7" name="1em"/><!-- HANGUL SYLLABLE SAELH -->
+ <map code="0xc0d8" name="1em"/><!-- HANGUL SYLLABLE SAEM -->
+ <map code="0xc0d9" name="1em"/><!-- HANGUL SYLLABLE SAEB -->
+ <map code="0xc0da" name="1em"/><!-- HANGUL SYLLABLE SAEBS -->
+ <map code="0xc0db" name="1em"/><!-- HANGUL SYLLABLE SAES -->
+ <map code="0xc0dc" name="1em"/><!-- HANGUL SYLLABLE SAESS -->
+ <map code="0xc0dd" name="1em"/><!-- HANGUL SYLLABLE SAENG -->
+ <map code="0xc0de" name="1em"/><!-- HANGUL SYLLABLE SAEJ -->
+ <map code="0xc0df" name="1em"/><!-- HANGUL SYLLABLE SAEC -->
+ <map code="0xc0e0" name="1em"/><!-- HANGUL SYLLABLE SAEK -->
+ <map code="0xc0e1" name="1em"/><!-- HANGUL SYLLABLE SAET -->
+ <map code="0xc0e2" name="1em"/><!-- HANGUL SYLLABLE SAEP -->
+ <map code="0xc0e3" name="1em"/><!-- HANGUL SYLLABLE SAEH -->
+ <map code="0xc0e4" name="1em"/><!-- HANGUL SYLLABLE SYA -->
+ <map code="0xc0e5" name="1em"/><!-- HANGUL SYLLABLE SYAG -->
+ <map code="0xc0e6" name="1em"/><!-- HANGUL SYLLABLE SYAGG -->
+ <map code="0xc0e7" name="1em"/><!-- HANGUL SYLLABLE SYAGS -->
+ <map code="0xc0e8" name="1em"/><!-- HANGUL SYLLABLE SYAN -->
+ <map code="0xc0e9" name="1em"/><!-- HANGUL SYLLABLE SYANJ -->
+ <map code="0xc0ea" name="1em"/><!-- HANGUL SYLLABLE SYANH -->
+ <map code="0xc0eb" name="1em"/><!-- HANGUL SYLLABLE SYAD -->
+ <map code="0xc0ec" name="1em"/><!-- HANGUL SYLLABLE SYAL -->
+ <map code="0xc0ed" name="1em"/><!-- HANGUL SYLLABLE SYALG -->
+ <map code="0xc0ee" name="1em"/><!-- HANGUL SYLLABLE SYALM -->
+ <map code="0xc0ef" name="1em"/><!-- HANGUL SYLLABLE SYALB -->
+ <map code="0xc0f0" name="1em"/><!-- HANGUL SYLLABLE SYALS -->
+ <map code="0xc0f1" name="1em"/><!-- HANGUL SYLLABLE SYALT -->
+ <map code="0xc0f2" name="1em"/><!-- HANGUL SYLLABLE SYALP -->
+ <map code="0xc0f3" name="1em"/><!-- HANGUL SYLLABLE SYALH -->
+ <map code="0xc0f4" name="1em"/><!-- HANGUL SYLLABLE SYAM -->
+ <map code="0xc0f5" name="1em"/><!-- HANGUL SYLLABLE SYAB -->
+ <map code="0xc0f6" name="1em"/><!-- HANGUL SYLLABLE SYABS -->
+ <map code="0xc0f7" name="1em"/><!-- HANGUL SYLLABLE SYAS -->
+ <map code="0xc0f8" name="1em"/><!-- HANGUL SYLLABLE SYASS -->
+ <map code="0xc0f9" name="1em"/><!-- HANGUL SYLLABLE SYANG -->
+ <map code="0xc0fa" name="1em"/><!-- HANGUL SYLLABLE SYAJ -->
+ <map code="0xc0fb" name="1em"/><!-- HANGUL SYLLABLE SYAC -->
+ <map code="0xc0fc" name="1em"/><!-- HANGUL SYLLABLE SYAK -->
+ <map code="0xc0fd" name="1em"/><!-- HANGUL SYLLABLE SYAT -->
+ <map code="0xc0fe" name="1em"/><!-- HANGUL SYLLABLE SYAP -->
+ <map code="0xc0ff" name="1em"/><!-- HANGUL SYLLABLE SYAH -->
+ <map code="0xc100" name="1em"/><!-- HANGUL SYLLABLE SYAE -->
+ <map code="0xc101" name="1em"/><!-- HANGUL SYLLABLE SYAEG -->
+ <map code="0xc102" name="1em"/><!-- HANGUL SYLLABLE SYAEGG -->
+ <map code="0xc103" name="1em"/><!-- HANGUL SYLLABLE SYAEGS -->
+ <map code="0xc104" name="1em"/><!-- HANGUL SYLLABLE SYAEN -->
+ <map code="0xc105" name="1em"/><!-- HANGUL SYLLABLE SYAENJ -->
+ <map code="0xc106" name="1em"/><!-- HANGUL SYLLABLE SYAENH -->
+ <map code="0xc107" name="1em"/><!-- HANGUL SYLLABLE SYAED -->
+ <map code="0xc108" name="1em"/><!-- HANGUL SYLLABLE SYAEL -->
+ <map code="0xc109" name="1em"/><!-- HANGUL SYLLABLE SYAELG -->
+ <map code="0xc10a" name="1em"/><!-- HANGUL SYLLABLE SYAELM -->
+ <map code="0xc10b" name="1em"/><!-- HANGUL SYLLABLE SYAELB -->
+ <map code="0xc10c" name="1em"/><!-- HANGUL SYLLABLE SYAELS -->
+ <map code="0xc10d" name="1em"/><!-- HANGUL SYLLABLE SYAELT -->
+ <map code="0xc10e" name="1em"/><!-- HANGUL SYLLABLE SYAELP -->
+ <map code="0xc10f" name="1em"/><!-- HANGUL SYLLABLE SYAELH -->
+ <map code="0xc110" name="1em"/><!-- HANGUL SYLLABLE SYAEM -->
+ <map code="0xc111" name="1em"/><!-- HANGUL SYLLABLE SYAEB -->
+ <map code="0xc112" name="1em"/><!-- HANGUL SYLLABLE SYAEBS -->
+ <map code="0xc113" name="1em"/><!-- HANGUL SYLLABLE SYAES -->
+ <map code="0xc114" name="1em"/><!-- HANGUL SYLLABLE SYAESS -->
+ <map code="0xc115" name="1em"/><!-- HANGUL SYLLABLE SYAENG -->
+ <map code="0xc116" name="1em"/><!-- HANGUL SYLLABLE SYAEJ -->
+ <map code="0xc117" name="1em"/><!-- HANGUL SYLLABLE SYAEC -->
+ <map code="0xc118" name="1em"/><!-- HANGUL SYLLABLE SYAEK -->
+ <map code="0xc119" name="1em"/><!-- HANGUL SYLLABLE SYAET -->
+ <map code="0xc11a" name="1em"/><!-- HANGUL SYLLABLE SYAEP -->
+ <map code="0xc11b" name="1em"/><!-- HANGUL SYLLABLE SYAEH -->
+ <map code="0xc11c" name="1em"/><!-- HANGUL SYLLABLE SEO -->
+ <map code="0xc11d" name="1em"/><!-- HANGUL SYLLABLE SEOG -->
+ <map code="0xc11e" name="1em"/><!-- HANGUL SYLLABLE SEOGG -->
+ <map code="0xc11f" name="1em"/><!-- HANGUL SYLLABLE SEOGS -->
+ <map code="0xc120" name="1em"/><!-- HANGUL SYLLABLE SEON -->
+ <map code="0xc121" name="1em"/><!-- HANGUL SYLLABLE SEONJ -->
+ <map code="0xc122" name="1em"/><!-- HANGUL SYLLABLE SEONH -->
+ <map code="0xc123" name="1em"/><!-- HANGUL SYLLABLE SEOD -->
+ <map code="0xc124" name="1em"/><!-- HANGUL SYLLABLE SEOL -->
+ <map code="0xc125" name="1em"/><!-- HANGUL SYLLABLE SEOLG -->
+ <map code="0xc126" name="1em"/><!-- HANGUL SYLLABLE SEOLM -->
+ <map code="0xc127" name="1em"/><!-- HANGUL SYLLABLE SEOLB -->
+ <map code="0xc128" name="1em"/><!-- HANGUL SYLLABLE SEOLS -->
+ <map code="0xc129" name="1em"/><!-- HANGUL SYLLABLE SEOLT -->
+ <map code="0xc12a" name="1em"/><!-- HANGUL SYLLABLE SEOLP -->
+ <map code="0xc12b" name="1em"/><!-- HANGUL SYLLABLE SEOLH -->
+ <map code="0xc12c" name="1em"/><!-- HANGUL SYLLABLE SEOM -->
+ <map code="0xc12d" name="1em"/><!-- HANGUL SYLLABLE SEOB -->
+ <map code="0xc12e" name="1em"/><!-- HANGUL SYLLABLE SEOBS -->
+ <map code="0xc12f" name="1em"/><!-- HANGUL SYLLABLE SEOS -->
+ <map code="0xc130" name="1em"/><!-- HANGUL SYLLABLE SEOSS -->
+ <map code="0xc131" name="1em"/><!-- HANGUL SYLLABLE SEONG -->
+ <map code="0xc132" name="1em"/><!-- HANGUL SYLLABLE SEOJ -->
+ <map code="0xc133" name="1em"/><!-- HANGUL SYLLABLE SEOC -->
+ <map code="0xc134" name="1em"/><!-- HANGUL SYLLABLE SEOK -->
+ <map code="0xc135" name="1em"/><!-- HANGUL SYLLABLE SEOT -->
+ <map code="0xc136" name="1em"/><!-- HANGUL SYLLABLE SEOP -->
+ <map code="0xc137" name="1em"/><!-- HANGUL SYLLABLE SEOH -->
+ <map code="0xc138" name="1em"/><!-- HANGUL SYLLABLE SE -->
+ <map code="0xc139" name="1em"/><!-- HANGUL SYLLABLE SEG -->
+ <map code="0xc13a" name="1em"/><!-- HANGUL SYLLABLE SEGG -->
+ <map code="0xc13b" name="1em"/><!-- HANGUL SYLLABLE SEGS -->
+ <map code="0xc13c" name="1em"/><!-- HANGUL SYLLABLE SEN -->
+ <map code="0xc13d" name="1em"/><!-- HANGUL SYLLABLE SENJ -->
+ <map code="0xc13e" name="1em"/><!-- HANGUL SYLLABLE SENH -->
+ <map code="0xc13f" name="1em"/><!-- HANGUL SYLLABLE SED -->
+ <map code="0xc140" name="1em"/><!-- HANGUL SYLLABLE SEL -->
+ <map code="0xc141" name="1em"/><!-- HANGUL SYLLABLE SELG -->
+ <map code="0xc142" name="1em"/><!-- HANGUL SYLLABLE SELM -->
+ <map code="0xc143" name="1em"/><!-- HANGUL SYLLABLE SELB -->
+ <map code="0xc144" name="1em"/><!-- HANGUL SYLLABLE SELS -->
+ <map code="0xc145" name="1em"/><!-- HANGUL SYLLABLE SELT -->
+ <map code="0xc146" name="1em"/><!-- HANGUL SYLLABLE SELP -->
+ <map code="0xc147" name="1em"/><!-- HANGUL SYLLABLE SELH -->
+ <map code="0xc148" name="1em"/><!-- HANGUL SYLLABLE SEM -->
+ <map code="0xc149" name="1em"/><!-- HANGUL SYLLABLE SEB -->
+ <map code="0xc14a" name="1em"/><!-- HANGUL SYLLABLE SEBS -->
+ <map code="0xc14b" name="1em"/><!-- HANGUL SYLLABLE SES -->
+ <map code="0xc14c" name="1em"/><!-- HANGUL SYLLABLE SESS -->
+ <map code="0xc14d" name="1em"/><!-- HANGUL SYLLABLE SENG -->
+ <map code="0xc14e" name="1em"/><!-- HANGUL SYLLABLE SEJ -->
+ <map code="0xc14f" name="1em"/><!-- HANGUL SYLLABLE SEC -->
+ <map code="0xc150" name="1em"/><!-- HANGUL SYLLABLE SEK -->
+ <map code="0xc151" name="1em"/><!-- HANGUL SYLLABLE SET -->
+ <map code="0xc152" name="1em"/><!-- HANGUL SYLLABLE SEP -->
+ <map code="0xc153" name="1em"/><!-- HANGUL SYLLABLE SEH -->
+ <map code="0xc154" name="1em"/><!-- HANGUL SYLLABLE SYEO -->
+ <map code="0xc155" name="1em"/><!-- HANGUL SYLLABLE SYEOG -->
+ <map code="0xc156" name="1em"/><!-- HANGUL SYLLABLE SYEOGG -->
+ <map code="0xc157" name="1em"/><!-- HANGUL SYLLABLE SYEOGS -->
+ <map code="0xc158" name="1em"/><!-- HANGUL SYLLABLE SYEON -->
+ <map code="0xc159" name="1em"/><!-- HANGUL SYLLABLE SYEONJ -->
+ <map code="0xc15a" name="1em"/><!-- HANGUL SYLLABLE SYEONH -->
+ <map code="0xc15b" name="1em"/><!-- HANGUL SYLLABLE SYEOD -->
+ <map code="0xc15c" name="1em"/><!-- HANGUL SYLLABLE SYEOL -->
+ <map code="0xc15d" name="1em"/><!-- HANGUL SYLLABLE SYEOLG -->
+ <map code="0xc15e" name="1em"/><!-- HANGUL SYLLABLE SYEOLM -->
+ <map code="0xc15f" name="1em"/><!-- HANGUL SYLLABLE SYEOLB -->
+ <map code="0xc160" name="1em"/><!-- HANGUL SYLLABLE SYEOLS -->
+ <map code="0xc161" name="1em"/><!-- HANGUL SYLLABLE SYEOLT -->
+ <map code="0xc162" name="1em"/><!-- HANGUL SYLLABLE SYEOLP -->
+ <map code="0xc163" name="1em"/><!-- HANGUL SYLLABLE SYEOLH -->
+ <map code="0xc164" name="1em"/><!-- HANGUL SYLLABLE SYEOM -->
+ <map code="0xc165" name="1em"/><!-- HANGUL SYLLABLE SYEOB -->
+ <map code="0xc166" name="1em"/><!-- HANGUL SYLLABLE SYEOBS -->
+ <map code="0xc167" name="1em"/><!-- HANGUL SYLLABLE SYEOS -->
+ <map code="0xc168" name="1em"/><!-- HANGUL SYLLABLE SYEOSS -->
+ <map code="0xc169" name="1em"/><!-- HANGUL SYLLABLE SYEONG -->
+ <map code="0xc16a" name="1em"/><!-- HANGUL SYLLABLE SYEOJ -->
+ <map code="0xc16b" name="1em"/><!-- HANGUL SYLLABLE SYEOC -->
+ <map code="0xc16c" name="1em"/><!-- HANGUL SYLLABLE SYEOK -->
+ <map code="0xc16d" name="1em"/><!-- HANGUL SYLLABLE SYEOT -->
+ <map code="0xc16e" name="1em"/><!-- HANGUL SYLLABLE SYEOP -->
+ <map code="0xc16f" name="1em"/><!-- HANGUL SYLLABLE SYEOH -->
+ <map code="0xc170" name="1em"/><!-- HANGUL SYLLABLE SYE -->
+ <map code="0xc171" name="1em"/><!-- HANGUL SYLLABLE SYEG -->
+ <map code="0xc172" name="1em"/><!-- HANGUL SYLLABLE SYEGG -->
+ <map code="0xc173" name="1em"/><!-- HANGUL SYLLABLE SYEGS -->
+ <map code="0xc174" name="1em"/><!-- HANGUL SYLLABLE SYEN -->
+ <map code="0xc175" name="1em"/><!-- HANGUL SYLLABLE SYENJ -->
+ <map code="0xc176" name="1em"/><!-- HANGUL SYLLABLE SYENH -->
+ <map code="0xc177" name="1em"/><!-- HANGUL SYLLABLE SYED -->
+ <map code="0xc178" name="1em"/><!-- HANGUL SYLLABLE SYEL -->
+ <map code="0xc179" name="1em"/><!-- HANGUL SYLLABLE SYELG -->
+ <map code="0xc17a" name="1em"/><!-- HANGUL SYLLABLE SYELM -->
+ <map code="0xc17b" name="1em"/><!-- HANGUL SYLLABLE SYELB -->
+ <map code="0xc17c" name="1em"/><!-- HANGUL SYLLABLE SYELS -->
+ <map code="0xc17d" name="1em"/><!-- HANGUL SYLLABLE SYELT -->
+ <map code="0xc17e" name="1em"/><!-- HANGUL SYLLABLE SYELP -->
+ <map code="0xc17f" name="1em"/><!-- HANGUL SYLLABLE SYELH -->
+ <map code="0xc180" name="1em"/><!-- HANGUL SYLLABLE SYEM -->
+ <map code="0xc181" name="1em"/><!-- HANGUL SYLLABLE SYEB -->
+ <map code="0xc182" name="1em"/><!-- HANGUL SYLLABLE SYEBS -->
+ <map code="0xc183" name="1em"/><!-- HANGUL SYLLABLE SYES -->
+ <map code="0xc184" name="1em"/><!-- HANGUL SYLLABLE SYESS -->
+ <map code="0xc185" name="1em"/><!-- HANGUL SYLLABLE SYENG -->
+ <map code="0xc186" name="1em"/><!-- HANGUL SYLLABLE SYEJ -->
+ <map code="0xc187" name="1em"/><!-- HANGUL SYLLABLE SYEC -->
+ <map code="0xc188" name="1em"/><!-- HANGUL SYLLABLE SYEK -->
+ <map code="0xc189" name="1em"/><!-- HANGUL SYLLABLE SYET -->
+ <map code="0xc18a" name="1em"/><!-- HANGUL SYLLABLE SYEP -->
+ <map code="0xc18b" name="1em"/><!-- HANGUL SYLLABLE SYEH -->
+ <map code="0xc18c" name="1em"/><!-- HANGUL SYLLABLE SO -->
+ <map code="0xc18d" name="1em"/><!-- HANGUL SYLLABLE SOG -->
+ <map code="0xc18e" name="1em"/><!-- HANGUL SYLLABLE SOGG -->
+ <map code="0xc18f" name="1em"/><!-- HANGUL SYLLABLE SOGS -->
+ <map code="0xc190" name="1em"/><!-- HANGUL SYLLABLE SON -->
+ <map code="0xc191" name="1em"/><!-- HANGUL SYLLABLE SONJ -->
+ <map code="0xc192" name="1em"/><!-- HANGUL SYLLABLE SONH -->
+ <map code="0xc193" name="1em"/><!-- HANGUL SYLLABLE SOD -->
+ <map code="0xc194" name="1em"/><!-- HANGUL SYLLABLE SOL -->
+ <map code="0xc195" name="1em"/><!-- HANGUL SYLLABLE SOLG -->
+ <map code="0xc196" name="1em"/><!-- HANGUL SYLLABLE SOLM -->
+ <map code="0xc197" name="1em"/><!-- HANGUL SYLLABLE SOLB -->
+ <map code="0xc198" name="1em"/><!-- HANGUL SYLLABLE SOLS -->
+ <map code="0xc199" name="1em"/><!-- HANGUL SYLLABLE SOLT -->
+ <map code="0xc19a" name="1em"/><!-- HANGUL SYLLABLE SOLP -->
+ <map code="0xc19b" name="1em"/><!-- HANGUL SYLLABLE SOLH -->
+ <map code="0xc19c" name="1em"/><!-- HANGUL SYLLABLE SOM -->
+ <map code="0xc19d" name="1em"/><!-- HANGUL SYLLABLE SOB -->
+ <map code="0xc19e" name="1em"/><!-- HANGUL SYLLABLE SOBS -->
+ <map code="0xc19f" name="1em"/><!-- HANGUL SYLLABLE SOS -->
+ <map code="0xc1a0" name="1em"/><!-- HANGUL SYLLABLE SOSS -->
+ <map code="0xc1a1" name="1em"/><!-- HANGUL SYLLABLE SONG -->
+ <map code="0xc1a2" name="1em"/><!-- HANGUL SYLLABLE SOJ -->
+ <map code="0xc1a3" name="1em"/><!-- HANGUL SYLLABLE SOC -->
+ <map code="0xc1a4" name="1em"/><!-- HANGUL SYLLABLE SOK -->
+ <map code="0xc1a5" name="1em"/><!-- HANGUL SYLLABLE SOT -->
+ <map code="0xc1a6" name="1em"/><!-- HANGUL SYLLABLE SOP -->
+ <map code="0xc1a7" name="1em"/><!-- HANGUL SYLLABLE SOH -->
+ <map code="0xc1a8" name="1em"/><!-- HANGUL SYLLABLE SWA -->
+ <map code="0xc1a9" name="1em"/><!-- HANGUL SYLLABLE SWAG -->
+ <map code="0xc1aa" name="1em"/><!-- HANGUL SYLLABLE SWAGG -->
+ <map code="0xc1ab" name="1em"/><!-- HANGUL SYLLABLE SWAGS -->
+ <map code="0xc1ac" name="1em"/><!-- HANGUL SYLLABLE SWAN -->
+ <map code="0xc1ad" name="1em"/><!-- HANGUL SYLLABLE SWANJ -->
+ <map code="0xc1ae" name="1em"/><!-- HANGUL SYLLABLE SWANH -->
+ <map code="0xc1af" name="1em"/><!-- HANGUL SYLLABLE SWAD -->
+ <map code="0xc1b0" name="1em"/><!-- HANGUL SYLLABLE SWAL -->
+ <map code="0xc1b1" name="1em"/><!-- HANGUL SYLLABLE SWALG -->
+ <map code="0xc1b2" name="1em"/><!-- HANGUL SYLLABLE SWALM -->
+ <map code="0xc1b3" name="1em"/><!-- HANGUL SYLLABLE SWALB -->
+ <map code="0xc1b4" name="1em"/><!-- HANGUL SYLLABLE SWALS -->
+ <map code="0xc1b5" name="1em"/><!-- HANGUL SYLLABLE SWALT -->
+ <map code="0xc1b6" name="1em"/><!-- HANGUL SYLLABLE SWALP -->
+ <map code="0xc1b7" name="1em"/><!-- HANGUL SYLLABLE SWALH -->
+ <map code="0xc1b8" name="1em"/><!-- HANGUL SYLLABLE SWAM -->
+ <map code="0xc1b9" name="1em"/><!-- HANGUL SYLLABLE SWAB -->
+ <map code="0xc1ba" name="1em"/><!-- HANGUL SYLLABLE SWABS -->
+ <map code="0xc1bb" name="1em"/><!-- HANGUL SYLLABLE SWAS -->
+ <map code="0xc1bc" name="1em"/><!-- HANGUL SYLLABLE SWASS -->
+ <map code="0xc1bd" name="1em"/><!-- HANGUL SYLLABLE SWANG -->
+ <map code="0xc1be" name="1em"/><!-- HANGUL SYLLABLE SWAJ -->
+ <map code="0xc1bf" name="1em"/><!-- HANGUL SYLLABLE SWAC -->
+ <map code="0xc1c0" name="1em"/><!-- HANGUL SYLLABLE SWAK -->
+ <map code="0xc1c1" name="1em"/><!-- HANGUL SYLLABLE SWAT -->
+ <map code="0xc1c2" name="1em"/><!-- HANGUL SYLLABLE SWAP -->
+ <map code="0xc1c3" name="1em"/><!-- HANGUL SYLLABLE SWAH -->
+ <map code="0xc1c4" name="1em"/><!-- HANGUL SYLLABLE SWAE -->
+ <map code="0xc1c5" name="1em"/><!-- HANGUL SYLLABLE SWAEG -->
+ <map code="0xc1c6" name="1em"/><!-- HANGUL SYLLABLE SWAEGG -->
+ <map code="0xc1c7" name="1em"/><!-- HANGUL SYLLABLE SWAEGS -->
+ <map code="0xc1c8" name="1em"/><!-- HANGUL SYLLABLE SWAEN -->
+ <map code="0xc1c9" name="1em"/><!-- HANGUL SYLLABLE SWAENJ -->
+ <map code="0xc1ca" name="1em"/><!-- HANGUL SYLLABLE SWAENH -->
+ <map code="0xc1cb" name="1em"/><!-- HANGUL SYLLABLE SWAED -->
+ <map code="0xc1cc" name="1em"/><!-- HANGUL SYLLABLE SWAEL -->
+ <map code="0xc1cd" name="1em"/><!-- HANGUL SYLLABLE SWAELG -->
+ <map code="0xc1ce" name="1em"/><!-- HANGUL SYLLABLE SWAELM -->
+ <map code="0xc1cf" name="1em"/><!-- HANGUL SYLLABLE SWAELB -->
+ <map code="0xc1d0" name="1em"/><!-- HANGUL SYLLABLE SWAELS -->
+ <map code="0xc1d1" name="1em"/><!-- HANGUL SYLLABLE SWAELT -->
+ <map code="0xc1d2" name="1em"/><!-- HANGUL SYLLABLE SWAELP -->
+ <map code="0xc1d3" name="1em"/><!-- HANGUL SYLLABLE SWAELH -->
+ <map code="0xc1d4" name="1em"/><!-- HANGUL SYLLABLE SWAEM -->
+ <map code="0xc1d5" name="1em"/><!-- HANGUL SYLLABLE SWAEB -->
+ <map code="0xc1d6" name="1em"/><!-- HANGUL SYLLABLE SWAEBS -->
+ <map code="0xc1d7" name="1em"/><!-- HANGUL SYLLABLE SWAES -->
+ <map code="0xc1d8" name="1em"/><!-- HANGUL SYLLABLE SWAESS -->
+ <map code="0xc1d9" name="1em"/><!-- HANGUL SYLLABLE SWAENG -->
+ <map code="0xc1da" name="1em"/><!-- HANGUL SYLLABLE SWAEJ -->
+ <map code="0xc1db" name="1em"/><!-- HANGUL SYLLABLE SWAEC -->
+ <map code="0xc1dc" name="1em"/><!-- HANGUL SYLLABLE SWAEK -->
+ <map code="0xc1dd" name="1em"/><!-- HANGUL SYLLABLE SWAET -->
+ <map code="0xc1de" name="1em"/><!-- HANGUL SYLLABLE SWAEP -->
+ <map code="0xc1df" name="1em"/><!-- HANGUL SYLLABLE SWAEH -->
+ <map code="0xc1e0" name="1em"/><!-- HANGUL SYLLABLE SOE -->
+ <map code="0xc1e1" name="1em"/><!-- HANGUL SYLLABLE SOEG -->
+ <map code="0xc1e2" name="1em"/><!-- HANGUL SYLLABLE SOEGG -->
+ <map code="0xc1e3" name="1em"/><!-- HANGUL SYLLABLE SOEGS -->
+ <map code="0xc1e4" name="1em"/><!-- HANGUL SYLLABLE SOEN -->
+ <map code="0xc1e5" name="1em"/><!-- HANGUL SYLLABLE SOENJ -->
+ <map code="0xc1e6" name="1em"/><!-- HANGUL SYLLABLE SOENH -->
+ <map code="0xc1e7" name="1em"/><!-- HANGUL SYLLABLE SOED -->
+ <map code="0xc1e8" name="1em"/><!-- HANGUL SYLLABLE SOEL -->
+ <map code="0xc1e9" name="1em"/><!-- HANGUL SYLLABLE SOELG -->
+ <map code="0xc1ea" name="1em"/><!-- HANGUL SYLLABLE SOELM -->
+ <map code="0xc1eb" name="1em"/><!-- HANGUL SYLLABLE SOELB -->
+ <map code="0xc1ec" name="1em"/><!-- HANGUL SYLLABLE SOELS -->
+ <map code="0xc1ed" name="1em"/><!-- HANGUL SYLLABLE SOELT -->
+ <map code="0xc1ee" name="1em"/><!-- HANGUL SYLLABLE SOELP -->
+ <map code="0xc1ef" name="1em"/><!-- HANGUL SYLLABLE SOELH -->
+ <map code="0xc1f0" name="1em"/><!-- HANGUL SYLLABLE SOEM -->
+ <map code="0xc1f1" name="1em"/><!-- HANGUL SYLLABLE SOEB -->
+ <map code="0xc1f2" name="1em"/><!-- HANGUL SYLLABLE SOEBS -->
+ <map code="0xc1f3" name="1em"/><!-- HANGUL SYLLABLE SOES -->
+ <map code="0xc1f4" name="1em"/><!-- HANGUL SYLLABLE SOESS -->
+ <map code="0xc1f5" name="1em"/><!-- HANGUL SYLLABLE SOENG -->
+ <map code="0xc1f6" name="1em"/><!-- HANGUL SYLLABLE SOEJ -->
+ <map code="0xc1f7" name="1em"/><!-- HANGUL SYLLABLE SOEC -->
+ <map code="0xc1f8" name="1em"/><!-- HANGUL SYLLABLE SOEK -->
+ <map code="0xc1f9" name="1em"/><!-- HANGUL SYLLABLE SOET -->
+ <map code="0xc1fa" name="1em"/><!-- HANGUL SYLLABLE SOEP -->
+ <map code="0xc1fb" name="1em"/><!-- HANGUL SYLLABLE SOEH -->
+ <map code="0xc1fc" name="1em"/><!-- HANGUL SYLLABLE SYO -->
+ <map code="0xc1fd" name="1em"/><!-- HANGUL SYLLABLE SYOG -->
+ <map code="0xc1fe" name="1em"/><!-- HANGUL SYLLABLE SYOGG -->
+ <map code="0xc1ff" name="1em"/><!-- HANGUL SYLLABLE SYOGS -->
+ <map code="0xc200" name="1em"/><!-- HANGUL SYLLABLE SYON -->
+ <map code="0xc201" name="1em"/><!-- HANGUL SYLLABLE SYONJ -->
+ <map code="0xc202" name="1em"/><!-- HANGUL SYLLABLE SYONH -->
+ <map code="0xc203" name="1em"/><!-- HANGUL SYLLABLE SYOD -->
+ <map code="0xc204" name="1em"/><!-- HANGUL SYLLABLE SYOL -->
+ <map code="0xc205" name="1em"/><!-- HANGUL SYLLABLE SYOLG -->
+ <map code="0xc206" name="1em"/><!-- HANGUL SYLLABLE SYOLM -->
+ <map code="0xc207" name="1em"/><!-- HANGUL SYLLABLE SYOLB -->
+ <map code="0xc208" name="1em"/><!-- HANGUL SYLLABLE SYOLS -->
+ <map code="0xc209" name="1em"/><!-- HANGUL SYLLABLE SYOLT -->
+ <map code="0xc20a" name="1em"/><!-- HANGUL SYLLABLE SYOLP -->
+ <map code="0xc20b" name="1em"/><!-- HANGUL SYLLABLE SYOLH -->
+ <map code="0xc20c" name="1em"/><!-- HANGUL SYLLABLE SYOM -->
+ <map code="0xc20d" name="1em"/><!-- HANGUL SYLLABLE SYOB -->
+ <map code="0xc20e" name="1em"/><!-- HANGUL SYLLABLE SYOBS -->
+ <map code="0xc20f" name="1em"/><!-- HANGUL SYLLABLE SYOS -->
+ <map code="0xc210" name="1em"/><!-- HANGUL SYLLABLE SYOSS -->
+ <map code="0xc211" name="1em"/><!-- HANGUL SYLLABLE SYONG -->
+ <map code="0xc212" name="1em"/><!-- HANGUL SYLLABLE SYOJ -->
+ <map code="0xc213" name="1em"/><!-- HANGUL SYLLABLE SYOC -->
+ <map code="0xc214" name="1em"/><!-- HANGUL SYLLABLE SYOK -->
+ <map code="0xc215" name="1em"/><!-- HANGUL SYLLABLE SYOT -->
+ <map code="0xc216" name="1em"/><!-- HANGUL SYLLABLE SYOP -->
+ <map code="0xc217" name="1em"/><!-- HANGUL SYLLABLE SYOH -->
+ <map code="0xc218" name="1em"/><!-- HANGUL SYLLABLE SU -->
+ <map code="0xc219" name="1em"/><!-- HANGUL SYLLABLE SUG -->
+ <map code="0xc21a" name="1em"/><!-- HANGUL SYLLABLE SUGG -->
+ <map code="0xc21b" name="1em"/><!-- HANGUL SYLLABLE SUGS -->
+ <map code="0xc21c" name="1em"/><!-- HANGUL SYLLABLE SUN -->
+ <map code="0xc21d" name="1em"/><!-- HANGUL SYLLABLE SUNJ -->
+ <map code="0xc21e" name="1em"/><!-- HANGUL SYLLABLE SUNH -->
+ <map code="0xc21f" name="1em"/><!-- HANGUL SYLLABLE SUD -->
+ <map code="0xc220" name="1em"/><!-- HANGUL SYLLABLE SUL -->
+ <map code="0xc221" name="1em"/><!-- HANGUL SYLLABLE SULG -->
+ <map code="0xc222" name="1em"/><!-- HANGUL SYLLABLE SULM -->
+ <map code="0xc223" name="1em"/><!-- HANGUL SYLLABLE SULB -->
+ <map code="0xc224" name="1em"/><!-- HANGUL SYLLABLE SULS -->
+ <map code="0xc225" name="1em"/><!-- HANGUL SYLLABLE SULT -->
+ <map code="0xc226" name="1em"/><!-- HANGUL SYLLABLE SULP -->
+ <map code="0xc227" name="1em"/><!-- HANGUL SYLLABLE SULH -->
+ <map code="0xc228" name="1em"/><!-- HANGUL SYLLABLE SUM -->
+ <map code="0xc229" name="1em"/><!-- HANGUL SYLLABLE SUB -->
+ <map code="0xc22a" name="1em"/><!-- HANGUL SYLLABLE SUBS -->
+ <map code="0xc22b" name="1em"/><!-- HANGUL SYLLABLE SUS -->
+ <map code="0xc22c" name="1em"/><!-- HANGUL SYLLABLE SUSS -->
+ <map code="0xc22d" name="1em"/><!-- HANGUL SYLLABLE SUNG -->
+ <map code="0xc22e" name="1em"/><!-- HANGUL SYLLABLE SUJ -->
+ <map code="0xc22f" name="1em"/><!-- HANGUL SYLLABLE SUC -->
+ <map code="0xc230" name="1em"/><!-- HANGUL SYLLABLE SUK -->
+ <map code="0xc231" name="1em"/><!-- HANGUL SYLLABLE SUT -->
+ <map code="0xc232" name="1em"/><!-- HANGUL SYLLABLE SUP -->
+ <map code="0xc233" name="1em"/><!-- HANGUL SYLLABLE SUH -->
+ <map code="0xc234" name="1em"/><!-- HANGUL SYLLABLE SWEO -->
+ <map code="0xc235" name="1em"/><!-- HANGUL SYLLABLE SWEOG -->
+ <map code="0xc236" name="1em"/><!-- HANGUL SYLLABLE SWEOGG -->
+ <map code="0xc237" name="1em"/><!-- HANGUL SYLLABLE SWEOGS -->
+ <map code="0xc238" name="1em"/><!-- HANGUL SYLLABLE SWEON -->
+ <map code="0xc239" name="1em"/><!-- HANGUL SYLLABLE SWEONJ -->
+ <map code="0xc23a" name="1em"/><!-- HANGUL SYLLABLE SWEONH -->
+ <map code="0xc23b" name="1em"/><!-- HANGUL SYLLABLE SWEOD -->
+ <map code="0xc23c" name="1em"/><!-- HANGUL SYLLABLE SWEOL -->
+ <map code="0xc23d" name="1em"/><!-- HANGUL SYLLABLE SWEOLG -->
+ <map code="0xc23e" name="1em"/><!-- HANGUL SYLLABLE SWEOLM -->
+ <map code="0xc23f" name="1em"/><!-- HANGUL SYLLABLE SWEOLB -->
+ <map code="0xc240" name="1em"/><!-- HANGUL SYLLABLE SWEOLS -->
+ <map code="0xc241" name="1em"/><!-- HANGUL SYLLABLE SWEOLT -->
+ <map code="0xc242" name="1em"/><!-- HANGUL SYLLABLE SWEOLP -->
+ <map code="0xc243" name="1em"/><!-- HANGUL SYLLABLE SWEOLH -->
+ <map code="0xc244" name="1em"/><!-- HANGUL SYLLABLE SWEOM -->
+ <map code="0xc245" name="1em"/><!-- HANGUL SYLLABLE SWEOB -->
+ <map code="0xc246" name="1em"/><!-- HANGUL SYLLABLE SWEOBS -->
+ <map code="0xc247" name="1em"/><!-- HANGUL SYLLABLE SWEOS -->
+ <map code="0xc248" name="1em"/><!-- HANGUL SYLLABLE SWEOSS -->
+ <map code="0xc249" name="1em"/><!-- HANGUL SYLLABLE SWEONG -->
+ <map code="0xc24a" name="1em"/><!-- HANGUL SYLLABLE SWEOJ -->
+ <map code="0xc24b" name="1em"/><!-- HANGUL SYLLABLE SWEOC -->
+ <map code="0xc24c" name="1em"/><!-- HANGUL SYLLABLE SWEOK -->
+ <map code="0xc24d" name="1em"/><!-- HANGUL SYLLABLE SWEOT -->
+ <map code="0xc24e" name="1em"/><!-- HANGUL SYLLABLE SWEOP -->
+ <map code="0xc24f" name="1em"/><!-- HANGUL SYLLABLE SWEOH -->
+ <map code="0xc250" name="1em"/><!-- HANGUL SYLLABLE SWE -->
+ <map code="0xc251" name="1em"/><!-- HANGUL SYLLABLE SWEG -->
+ <map code="0xc252" name="1em"/><!-- HANGUL SYLLABLE SWEGG -->
+ <map code="0xc253" name="1em"/><!-- HANGUL SYLLABLE SWEGS -->
+ <map code="0xc254" name="1em"/><!-- HANGUL SYLLABLE SWEN -->
+ <map code="0xc255" name="1em"/><!-- HANGUL SYLLABLE SWENJ -->
+ <map code="0xc256" name="1em"/><!-- HANGUL SYLLABLE SWENH -->
+ <map code="0xc257" name="1em"/><!-- HANGUL SYLLABLE SWED -->
+ <map code="0xc258" name="1em"/><!-- HANGUL SYLLABLE SWEL -->
+ <map code="0xc259" name="1em"/><!-- HANGUL SYLLABLE SWELG -->
+ <map code="0xc25a" name="1em"/><!-- HANGUL SYLLABLE SWELM -->
+ <map code="0xc25b" name="1em"/><!-- HANGUL SYLLABLE SWELB -->
+ <map code="0xc25c" name="1em"/><!-- HANGUL SYLLABLE SWELS -->
+ <map code="0xc25d" name="1em"/><!-- HANGUL SYLLABLE SWELT -->
+ <map code="0xc25e" name="1em"/><!-- HANGUL SYLLABLE SWELP -->
+ <map code="0xc25f" name="1em"/><!-- HANGUL SYLLABLE SWELH -->
+ <map code="0xc260" name="1em"/><!-- HANGUL SYLLABLE SWEM -->
+ <map code="0xc261" name="1em"/><!-- HANGUL SYLLABLE SWEB -->
+ <map code="0xc262" name="1em"/><!-- HANGUL SYLLABLE SWEBS -->
+ <map code="0xc263" name="1em"/><!-- HANGUL SYLLABLE SWES -->
+ <map code="0xc264" name="1em"/><!-- HANGUL SYLLABLE SWESS -->
+ <map code="0xc265" name="1em"/><!-- HANGUL SYLLABLE SWENG -->
+ <map code="0xc266" name="1em"/><!-- HANGUL SYLLABLE SWEJ -->
+ <map code="0xc267" name="1em"/><!-- HANGUL SYLLABLE SWEC -->
+ <map code="0xc268" name="1em"/><!-- HANGUL SYLLABLE SWEK -->
+ <map code="0xc269" name="1em"/><!-- HANGUL SYLLABLE SWET -->
+ <map code="0xc26a" name="1em"/><!-- HANGUL SYLLABLE SWEP -->
+ <map code="0xc26b" name="1em"/><!-- HANGUL SYLLABLE SWEH -->
+ <map code="0xc26c" name="1em"/><!-- HANGUL SYLLABLE SWI -->
+ <map code="0xc26d" name="1em"/><!-- HANGUL SYLLABLE SWIG -->
+ <map code="0xc26e" name="1em"/><!-- HANGUL SYLLABLE SWIGG -->
+ <map code="0xc26f" name="1em"/><!-- HANGUL SYLLABLE SWIGS -->
+ <map code="0xc270" name="1em"/><!-- HANGUL SYLLABLE SWIN -->
+ <map code="0xc271" name="1em"/><!-- HANGUL SYLLABLE SWINJ -->
+ <map code="0xc272" name="1em"/><!-- HANGUL SYLLABLE SWINH -->
+ <map code="0xc273" name="1em"/><!-- HANGUL SYLLABLE SWID -->
+ <map code="0xc274" name="1em"/><!-- HANGUL SYLLABLE SWIL -->
+ <map code="0xc275" name="1em"/><!-- HANGUL SYLLABLE SWILG -->
+ <map code="0xc276" name="1em"/><!-- HANGUL SYLLABLE SWILM -->
+ <map code="0xc277" name="1em"/><!-- HANGUL SYLLABLE SWILB -->
+ <map code="0xc278" name="1em"/><!-- HANGUL SYLLABLE SWILS -->
+ <map code="0xc279" name="1em"/><!-- HANGUL SYLLABLE SWILT -->
+ <map code="0xc27a" name="1em"/><!-- HANGUL SYLLABLE SWILP -->
+ <map code="0xc27b" name="1em"/><!-- HANGUL SYLLABLE SWILH -->
+ <map code="0xc27c" name="1em"/><!-- HANGUL SYLLABLE SWIM -->
+ <map code="0xc27d" name="1em"/><!-- HANGUL SYLLABLE SWIB -->
+ <map code="0xc27e" name="1em"/><!-- HANGUL SYLLABLE SWIBS -->
+ <map code="0xc27f" name="1em"/><!-- HANGUL SYLLABLE SWIS -->
+ <map code="0xc280" name="1em"/><!-- HANGUL SYLLABLE SWISS -->
+ <map code="0xc281" name="1em"/><!-- HANGUL SYLLABLE SWING -->
+ <map code="0xc282" name="1em"/><!-- HANGUL SYLLABLE SWIJ -->
+ <map code="0xc283" name="1em"/><!-- HANGUL SYLLABLE SWIC -->
+ <map code="0xc284" name="1em"/><!-- HANGUL SYLLABLE SWIK -->
+ <map code="0xc285" name="1em"/><!-- HANGUL SYLLABLE SWIT -->
+ <map code="0xc286" name="1em"/><!-- HANGUL SYLLABLE SWIP -->
+ <map code="0xc287" name="1em"/><!-- HANGUL SYLLABLE SWIH -->
+ <map code="0xc288" name="1em"/><!-- HANGUL SYLLABLE SYU -->
+ <map code="0xc289" name="1em"/><!-- HANGUL SYLLABLE SYUG -->
+ <map code="0xc28a" name="1em"/><!-- HANGUL SYLLABLE SYUGG -->
+ <map code="0xc28b" name="1em"/><!-- HANGUL SYLLABLE SYUGS -->
+ <map code="0xc28c" name="1em"/><!-- HANGUL SYLLABLE SYUN -->
+ <map code="0xc28d" name="1em"/><!-- HANGUL SYLLABLE SYUNJ -->
+ <map code="0xc28e" name="1em"/><!-- HANGUL SYLLABLE SYUNH -->
+ <map code="0xc28f" name="1em"/><!-- HANGUL SYLLABLE SYUD -->
+ <map code="0xc290" name="1em"/><!-- HANGUL SYLLABLE SYUL -->
+ <map code="0xc291" name="1em"/><!-- HANGUL SYLLABLE SYULG -->
+ <map code="0xc292" name="1em"/><!-- HANGUL SYLLABLE SYULM -->
+ <map code="0xc293" name="1em"/><!-- HANGUL SYLLABLE SYULB -->
+ <map code="0xc294" name="1em"/><!-- HANGUL SYLLABLE SYULS -->
+ <map code="0xc295" name="1em"/><!-- HANGUL SYLLABLE SYULT -->
+ <map code="0xc296" name="1em"/><!-- HANGUL SYLLABLE SYULP -->
+ <map code="0xc297" name="1em"/><!-- HANGUL SYLLABLE SYULH -->
+ <map code="0xc298" name="1em"/><!-- HANGUL SYLLABLE SYUM -->
+ <map code="0xc299" name="1em"/><!-- HANGUL SYLLABLE SYUB -->
+ <map code="0xc29a" name="1em"/><!-- HANGUL SYLLABLE SYUBS -->
+ <map code="0xc29b" name="1em"/><!-- HANGUL SYLLABLE SYUS -->
+ <map code="0xc29c" name="1em"/><!-- HANGUL SYLLABLE SYUSS -->
+ <map code="0xc29d" name="1em"/><!-- HANGUL SYLLABLE SYUNG -->
+ <map code="0xc29e" name="1em"/><!-- HANGUL SYLLABLE SYUJ -->
+ <map code="0xc29f" name="1em"/><!-- HANGUL SYLLABLE SYUC -->
+ <map code="0xc2a0" name="1em"/><!-- HANGUL SYLLABLE SYUK -->
+ <map code="0xc2a1" name="1em"/><!-- HANGUL SYLLABLE SYUT -->
+ <map code="0xc2a2" name="1em"/><!-- HANGUL SYLLABLE SYUP -->
+ <map code="0xc2a3" name="1em"/><!-- HANGUL SYLLABLE SYUH -->
+ <map code="0xc2a4" name="1em"/><!-- HANGUL SYLLABLE SEU -->
+ <map code="0xc2a5" name="1em"/><!-- HANGUL SYLLABLE SEUG -->
+ <map code="0xc2a6" name="1em"/><!-- HANGUL SYLLABLE SEUGG -->
+ <map code="0xc2a7" name="1em"/><!-- HANGUL SYLLABLE SEUGS -->
+ <map code="0xc2a8" name="1em"/><!-- HANGUL SYLLABLE SEUN -->
+ <map code="0xc2a9" name="1em"/><!-- HANGUL SYLLABLE SEUNJ -->
+ <map code="0xc2aa" name="1em"/><!-- HANGUL SYLLABLE SEUNH -->
+ <map code="0xc2ab" name="1em"/><!-- HANGUL SYLLABLE SEUD -->
+ <map code="0xc2ac" name="1em"/><!-- HANGUL SYLLABLE SEUL -->
+ <map code="0xc2ad" name="1em"/><!-- HANGUL SYLLABLE SEULG -->
+ <map code="0xc2ae" name="1em"/><!-- HANGUL SYLLABLE SEULM -->
+ <map code="0xc2af" name="1em"/><!-- HANGUL SYLLABLE SEULB -->
+ <map code="0xc2b0" name="1em"/><!-- HANGUL SYLLABLE SEULS -->
+ <map code="0xc2b1" name="1em"/><!-- HANGUL SYLLABLE SEULT -->
+ <map code="0xc2b2" name="1em"/><!-- HANGUL SYLLABLE SEULP -->
+ <map code="0xc2b3" name="1em"/><!-- HANGUL SYLLABLE SEULH -->
+ <map code="0xc2b4" name="1em"/><!-- HANGUL SYLLABLE SEUM -->
+ <map code="0xc2b5" name="1em"/><!-- HANGUL SYLLABLE SEUB -->
+ <map code="0xc2b6" name="1em"/><!-- HANGUL SYLLABLE SEUBS -->
+ <map code="0xc2b7" name="1em"/><!-- HANGUL SYLLABLE SEUS -->
+ <map code="0xc2b8" name="1em"/><!-- HANGUL SYLLABLE SEUSS -->
+ <map code="0xc2b9" name="1em"/><!-- HANGUL SYLLABLE SEUNG -->
+ <map code="0xc2ba" name="1em"/><!-- HANGUL SYLLABLE SEUJ -->
+ <map code="0xc2bb" name="1em"/><!-- HANGUL SYLLABLE SEUC -->
+ <map code="0xc2bc" name="1em"/><!-- HANGUL SYLLABLE SEUK -->
+ <map code="0xc2bd" name="1em"/><!-- HANGUL SYLLABLE SEUT -->
+ <map code="0xc2be" name="1em"/><!-- HANGUL SYLLABLE SEUP -->
+ <map code="0xc2bf" name="1em"/><!-- HANGUL SYLLABLE SEUH -->
+ <map code="0xc2c0" name="1em"/><!-- HANGUL SYLLABLE SYI -->
+ <map code="0xc2c1" name="1em"/><!-- HANGUL SYLLABLE SYIG -->
+ <map code="0xc2c2" name="1em"/><!-- HANGUL SYLLABLE SYIGG -->
+ <map code="0xc2c3" name="1em"/><!-- HANGUL SYLLABLE SYIGS -->
+ <map code="0xc2c4" name="1em"/><!-- HANGUL SYLLABLE SYIN -->
+ <map code="0xc2c5" name="1em"/><!-- HANGUL SYLLABLE SYINJ -->
+ <map code="0xc2c6" name="1em"/><!-- HANGUL SYLLABLE SYINH -->
+ <map code="0xc2c7" name="1em"/><!-- HANGUL SYLLABLE SYID -->
+ <map code="0xc2c8" name="1em"/><!-- HANGUL SYLLABLE SYIL -->
+ <map code="0xc2c9" name="1em"/><!-- HANGUL SYLLABLE SYILG -->
+ <map code="0xc2ca" name="1em"/><!-- HANGUL SYLLABLE SYILM -->
+ <map code="0xc2cb" name="1em"/><!-- HANGUL SYLLABLE SYILB -->
+ <map code="0xc2cc" name="1em"/><!-- HANGUL SYLLABLE SYILS -->
+ <map code="0xc2cd" name="1em"/><!-- HANGUL SYLLABLE SYILT -->
+ <map code="0xc2ce" name="1em"/><!-- HANGUL SYLLABLE SYILP -->
+ <map code="0xc2cf" name="1em"/><!-- HANGUL SYLLABLE SYILH -->
+ <map code="0xc2d0" name="1em"/><!-- HANGUL SYLLABLE SYIM -->
+ <map code="0xc2d1" name="1em"/><!-- HANGUL SYLLABLE SYIB -->
+ <map code="0xc2d2" name="1em"/><!-- HANGUL SYLLABLE SYIBS -->
+ <map code="0xc2d3" name="1em"/><!-- HANGUL SYLLABLE SYIS -->
+ <map code="0xc2d4" name="1em"/><!-- HANGUL SYLLABLE SYISS -->
+ <map code="0xc2d5" name="1em"/><!-- HANGUL SYLLABLE SYING -->
+ <map code="0xc2d6" name="1em"/><!-- HANGUL SYLLABLE SYIJ -->
+ <map code="0xc2d7" name="1em"/><!-- HANGUL SYLLABLE SYIC -->
+ <map code="0xc2d8" name="1em"/><!-- HANGUL SYLLABLE SYIK -->
+ <map code="0xc2d9" name="1em"/><!-- HANGUL SYLLABLE SYIT -->
+ <map code="0xc2da" name="1em"/><!-- HANGUL SYLLABLE SYIP -->
+ <map code="0xc2db" name="1em"/><!-- HANGUL SYLLABLE SYIH -->
+ <map code="0xc2dc" name="1em"/><!-- HANGUL SYLLABLE SI -->
+ <map code="0xc2dd" name="1em"/><!-- HANGUL SYLLABLE SIG -->
+ <map code="0xc2de" name="1em"/><!-- HANGUL SYLLABLE SIGG -->
+ <map code="0xc2df" name="1em"/><!-- HANGUL SYLLABLE SIGS -->
+ <map code="0xc2e0" name="1em"/><!-- HANGUL SYLLABLE SIN -->
+ <map code="0xc2e1" name="1em"/><!-- HANGUL SYLLABLE SINJ -->
+ <map code="0xc2e2" name="1em"/><!-- HANGUL SYLLABLE SINH -->
+ <map code="0xc2e3" name="1em"/><!-- HANGUL SYLLABLE SID -->
+ <map code="0xc2e4" name="1em"/><!-- HANGUL SYLLABLE SIL -->
+ <map code="0xc2e5" name="1em"/><!-- HANGUL SYLLABLE SILG -->
+ <map code="0xc2e6" name="1em"/><!-- HANGUL SYLLABLE SILM -->
+ <map code="0xc2e7" name="1em"/><!-- HANGUL SYLLABLE SILB -->
+ <map code="0xc2e8" name="1em"/><!-- HANGUL SYLLABLE SILS -->
+ <map code="0xc2e9" name="1em"/><!-- HANGUL SYLLABLE SILT -->
+ <map code="0xc2ea" name="1em"/><!-- HANGUL SYLLABLE SILP -->
+ <map code="0xc2eb" name="1em"/><!-- HANGUL SYLLABLE SILH -->
+ <map code="0xc2ec" name="1em"/><!-- HANGUL SYLLABLE SIM -->
+ <map code="0xc2ed" name="1em"/><!-- HANGUL SYLLABLE SIB -->
+ <map code="0xc2ee" name="1em"/><!-- HANGUL SYLLABLE SIBS -->
+ <map code="0xc2ef" name="1em"/><!-- HANGUL SYLLABLE SIS -->
+ <map code="0xc2f0" name="1em"/><!-- HANGUL SYLLABLE SISS -->
+ <map code="0xc2f1" name="1em"/><!-- HANGUL SYLLABLE SING -->
+ <map code="0xc2f2" name="1em"/><!-- HANGUL SYLLABLE SIJ -->
+ <map code="0xc2f3" name="1em"/><!-- HANGUL SYLLABLE SIC -->
+ <map code="0xc2f4" name="1em"/><!-- HANGUL SYLLABLE SIK -->
+ <map code="0xc2f5" name="1em"/><!-- HANGUL SYLLABLE SIT -->
+ <map code="0xc2f6" name="1em"/><!-- HANGUL SYLLABLE SIP -->
+ <map code="0xc2f7" name="1em"/><!-- HANGUL SYLLABLE SIH -->
+ <map code="0xc2f8" name="1em"/><!-- HANGUL SYLLABLE SSA -->
+ <map code="0xc2f9" name="1em"/><!-- HANGUL SYLLABLE SSAG -->
+ <map code="0xc2fa" name="1em"/><!-- HANGUL SYLLABLE SSAGG -->
+ <map code="0xc2fb" name="1em"/><!-- HANGUL SYLLABLE SSAGS -->
+ <map code="0xc2fc" name="1em"/><!-- HANGUL SYLLABLE SSAN -->
+ <map code="0xc2fd" name="1em"/><!-- HANGUL SYLLABLE SSANJ -->
+ <map code="0xc2fe" name="1em"/><!-- HANGUL SYLLABLE SSANH -->
+ <map code="0xc2ff" name="1em"/><!-- HANGUL SYLLABLE SSAD -->
+ <map code="0xc300" name="1em"/><!-- HANGUL SYLLABLE SSAL -->
+ <map code="0xc301" name="1em"/><!-- HANGUL SYLLABLE SSALG -->
+ <map code="0xc302" name="1em"/><!-- HANGUL SYLLABLE SSALM -->
+ <map code="0xc303" name="1em"/><!-- HANGUL SYLLABLE SSALB -->
+ <map code="0xc304" name="1em"/><!-- HANGUL SYLLABLE SSALS -->
+ <map code="0xc305" name="1em"/><!-- HANGUL SYLLABLE SSALT -->
+ <map code="0xc306" name="1em"/><!-- HANGUL SYLLABLE SSALP -->
+ <map code="0xc307" name="1em"/><!-- HANGUL SYLLABLE SSALH -->
+ <map code="0xc308" name="1em"/><!-- HANGUL SYLLABLE SSAM -->
+ <map code="0xc309" name="1em"/><!-- HANGUL SYLLABLE SSAB -->
+ <map code="0xc30a" name="1em"/><!-- HANGUL SYLLABLE SSABS -->
+ <map code="0xc30b" name="1em"/><!-- HANGUL SYLLABLE SSAS -->
+ <map code="0xc30c" name="1em"/><!-- HANGUL SYLLABLE SSASS -->
+ <map code="0xc30d" name="1em"/><!-- HANGUL SYLLABLE SSANG -->
+ <map code="0xc30e" name="1em"/><!-- HANGUL SYLLABLE SSAJ -->
+ <map code="0xc30f" name="1em"/><!-- HANGUL SYLLABLE SSAC -->
+ <map code="0xc310" name="1em"/><!-- HANGUL SYLLABLE SSAK -->
+ <map code="0xc311" name="1em"/><!-- HANGUL SYLLABLE SSAT -->
+ <map code="0xc312" name="1em"/><!-- HANGUL SYLLABLE SSAP -->
+ <map code="0xc313" name="1em"/><!-- HANGUL SYLLABLE SSAH -->
+ <map code="0xc314" name="1em"/><!-- HANGUL SYLLABLE SSAE -->
+ <map code="0xc315" name="1em"/><!-- HANGUL SYLLABLE SSAEG -->
+ <map code="0xc316" name="1em"/><!-- HANGUL SYLLABLE SSAEGG -->
+ <map code="0xc317" name="1em"/><!-- HANGUL SYLLABLE SSAEGS -->
+ <map code="0xc318" name="1em"/><!-- HANGUL SYLLABLE SSAEN -->
+ <map code="0xc319" name="1em"/><!-- HANGUL SYLLABLE SSAENJ -->
+ <map code="0xc31a" name="1em"/><!-- HANGUL SYLLABLE SSAENH -->
+ <map code="0xc31b" name="1em"/><!-- HANGUL SYLLABLE SSAED -->
+ <map code="0xc31c" name="1em"/><!-- HANGUL SYLLABLE SSAEL -->
+ <map code="0xc31d" name="1em"/><!-- HANGUL SYLLABLE SSAELG -->
+ <map code="0xc31e" name="1em"/><!-- HANGUL SYLLABLE SSAELM -->
+ <map code="0xc31f" name="1em"/><!-- HANGUL SYLLABLE SSAELB -->
+ <map code="0xc320" name="1em"/><!-- HANGUL SYLLABLE SSAELS -->
+ <map code="0xc321" name="1em"/><!-- HANGUL SYLLABLE SSAELT -->
+ <map code="0xc322" name="1em"/><!-- HANGUL SYLLABLE SSAELP -->
+ <map code="0xc323" name="1em"/><!-- HANGUL SYLLABLE SSAELH -->
+ <map code="0xc324" name="1em"/><!-- HANGUL SYLLABLE SSAEM -->
+ <map code="0xc325" name="1em"/><!-- HANGUL SYLLABLE SSAEB -->
+ <map code="0xc326" name="1em"/><!-- HANGUL SYLLABLE SSAEBS -->
+ <map code="0xc327" name="1em"/><!-- HANGUL SYLLABLE SSAES -->
+ <map code="0xc328" name="1em"/><!-- HANGUL SYLLABLE SSAESS -->
+ <map code="0xc329" name="1em"/><!-- HANGUL SYLLABLE SSAENG -->
+ <map code="0xc32a" name="1em"/><!-- HANGUL SYLLABLE SSAEJ -->
+ <map code="0xc32b" name="1em"/><!-- HANGUL SYLLABLE SSAEC -->
+ <map code="0xc32c" name="1em"/><!-- HANGUL SYLLABLE SSAEK -->
+ <map code="0xc32d" name="1em"/><!-- HANGUL SYLLABLE SSAET -->
+ <map code="0xc32e" name="1em"/><!-- HANGUL SYLLABLE SSAEP -->
+ <map code="0xc32f" name="1em"/><!-- HANGUL SYLLABLE SSAEH -->
+ <map code="0xc330" name="1em"/><!-- HANGUL SYLLABLE SSYA -->
+ <map code="0xc331" name="1em"/><!-- HANGUL SYLLABLE SSYAG -->
+ <map code="0xc332" name="1em"/><!-- HANGUL SYLLABLE SSYAGG -->
+ <map code="0xc333" name="1em"/><!-- HANGUL SYLLABLE SSYAGS -->
+ <map code="0xc334" name="1em"/><!-- HANGUL SYLLABLE SSYAN -->
+ <map code="0xc335" name="1em"/><!-- HANGUL SYLLABLE SSYANJ -->
+ <map code="0xc336" name="1em"/><!-- HANGUL SYLLABLE SSYANH -->
+ <map code="0xc337" name="1em"/><!-- HANGUL SYLLABLE SSYAD -->
+ <map code="0xc338" name="1em"/><!-- HANGUL SYLLABLE SSYAL -->
+ <map code="0xc339" name="1em"/><!-- HANGUL SYLLABLE SSYALG -->
+ <map code="0xc33a" name="1em"/><!-- HANGUL SYLLABLE SSYALM -->
+ <map code="0xc33b" name="1em"/><!-- HANGUL SYLLABLE SSYALB -->
+ <map code="0xc33c" name="1em"/><!-- HANGUL SYLLABLE SSYALS -->
+ <map code="0xc33d" name="1em"/><!-- HANGUL SYLLABLE SSYALT -->
+ <map code="0xc33e" name="1em"/><!-- HANGUL SYLLABLE SSYALP -->
+ <map code="0xc33f" name="1em"/><!-- HANGUL SYLLABLE SSYALH -->
+ <map code="0xc340" name="1em"/><!-- HANGUL SYLLABLE SSYAM -->
+ <map code="0xc341" name="1em"/><!-- HANGUL SYLLABLE SSYAB -->
+ <map code="0xc342" name="1em"/><!-- HANGUL SYLLABLE SSYABS -->
+ <map code="0xc343" name="1em"/><!-- HANGUL SYLLABLE SSYAS -->
+ <map code="0xc344" name="1em"/><!-- HANGUL SYLLABLE SSYASS -->
+ <map code="0xc345" name="1em"/><!-- HANGUL SYLLABLE SSYANG -->
+ <map code="0xc346" name="1em"/><!-- HANGUL SYLLABLE SSYAJ -->
+ <map code="0xc347" name="1em"/><!-- HANGUL SYLLABLE SSYAC -->
+ <map code="0xc348" name="1em"/><!-- HANGUL SYLLABLE SSYAK -->
+ <map code="0xc349" name="1em"/><!-- HANGUL SYLLABLE SSYAT -->
+ <map code="0xc34a" name="1em"/><!-- HANGUL SYLLABLE SSYAP -->
+ <map code="0xc34b" name="1em"/><!-- HANGUL SYLLABLE SSYAH -->
+ <map code="0xc34c" name="1em"/><!-- HANGUL SYLLABLE SSYAE -->
+ <map code="0xc34d" name="1em"/><!-- HANGUL SYLLABLE SSYAEG -->
+ <map code="0xc34e" name="1em"/><!-- HANGUL SYLLABLE SSYAEGG -->
+ <map code="0xc34f" name="1em"/><!-- HANGUL SYLLABLE SSYAEGS -->
+ <map code="0xc350" name="1em"/><!-- HANGUL SYLLABLE SSYAEN -->
+ <map code="0xc351" name="1em"/><!-- HANGUL SYLLABLE SSYAENJ -->
+ <map code="0xc352" name="1em"/><!-- HANGUL SYLLABLE SSYAENH -->
+ <map code="0xc353" name="1em"/><!-- HANGUL SYLLABLE SSYAED -->
+ <map code="0xc354" name="1em"/><!-- HANGUL SYLLABLE SSYAEL -->
+ <map code="0xc355" name="1em"/><!-- HANGUL SYLLABLE SSYAELG -->
+ <map code="0xc356" name="1em"/><!-- HANGUL SYLLABLE SSYAELM -->
+ <map code="0xc357" name="1em"/><!-- HANGUL SYLLABLE SSYAELB -->
+ <map code="0xc358" name="1em"/><!-- HANGUL SYLLABLE SSYAELS -->
+ <map code="0xc359" name="1em"/><!-- HANGUL SYLLABLE SSYAELT -->
+ <map code="0xc35a" name="1em"/><!-- HANGUL SYLLABLE SSYAELP -->
+ <map code="0xc35b" name="1em"/><!-- HANGUL SYLLABLE SSYAELH -->
+ <map code="0xc35c" name="1em"/><!-- HANGUL SYLLABLE SSYAEM -->
+ <map code="0xc35d" name="1em"/><!-- HANGUL SYLLABLE SSYAEB -->
+ <map code="0xc35e" name="1em"/><!-- HANGUL SYLLABLE SSYAEBS -->
+ <map code="0xc35f" name="1em"/><!-- HANGUL SYLLABLE SSYAES -->
+ <map code="0xc360" name="1em"/><!-- HANGUL SYLLABLE SSYAESS -->
+ <map code="0xc361" name="1em"/><!-- HANGUL SYLLABLE SSYAENG -->
+ <map code="0xc362" name="1em"/><!-- HANGUL SYLLABLE SSYAEJ -->
+ <map code="0xc363" name="1em"/><!-- HANGUL SYLLABLE SSYAEC -->
+ <map code="0xc364" name="1em"/><!-- HANGUL SYLLABLE SSYAEK -->
+ <map code="0xc365" name="1em"/><!-- HANGUL SYLLABLE SSYAET -->
+ <map code="0xc366" name="1em"/><!-- HANGUL SYLLABLE SSYAEP -->
+ <map code="0xc367" name="1em"/><!-- HANGUL SYLLABLE SSYAEH -->
+ <map code="0xc368" name="1em"/><!-- HANGUL SYLLABLE SSEO -->
+ <map code="0xc369" name="1em"/><!-- HANGUL SYLLABLE SSEOG -->
+ <map code="0xc36a" name="1em"/><!-- HANGUL SYLLABLE SSEOGG -->
+ <map code="0xc36b" name="1em"/><!-- HANGUL SYLLABLE SSEOGS -->
+ <map code="0xc36c" name="1em"/><!-- HANGUL SYLLABLE SSEON -->
+ <map code="0xc36d" name="1em"/><!-- HANGUL SYLLABLE SSEONJ -->
+ <map code="0xc36e" name="1em"/><!-- HANGUL SYLLABLE SSEONH -->
+ <map code="0xc36f" name="1em"/><!-- HANGUL SYLLABLE SSEOD -->
+ <map code="0xc370" name="1em"/><!-- HANGUL SYLLABLE SSEOL -->
+ <map code="0xc371" name="1em"/><!-- HANGUL SYLLABLE SSEOLG -->
+ <map code="0xc372" name="1em"/><!-- HANGUL SYLLABLE SSEOLM -->
+ <map code="0xc373" name="1em"/><!-- HANGUL SYLLABLE SSEOLB -->
+ <map code="0xc374" name="1em"/><!-- HANGUL SYLLABLE SSEOLS -->
+ <map code="0xc375" name="1em"/><!-- HANGUL SYLLABLE SSEOLT -->
+ <map code="0xc376" name="1em"/><!-- HANGUL SYLLABLE SSEOLP -->
+ <map code="0xc377" name="1em"/><!-- HANGUL SYLLABLE SSEOLH -->
+ <map code="0xc378" name="1em"/><!-- HANGUL SYLLABLE SSEOM -->
+ <map code="0xc379" name="1em"/><!-- HANGUL SYLLABLE SSEOB -->
+ <map code="0xc37a" name="1em"/><!-- HANGUL SYLLABLE SSEOBS -->
+ <map code="0xc37b" name="1em"/><!-- HANGUL SYLLABLE SSEOS -->
+ <map code="0xc37c" name="1em"/><!-- HANGUL SYLLABLE SSEOSS -->
+ <map code="0xc37d" name="1em"/><!-- HANGUL SYLLABLE SSEONG -->
+ <map code="0xc37e" name="1em"/><!-- HANGUL SYLLABLE SSEOJ -->
+ <map code="0xc37f" name="1em"/><!-- HANGUL SYLLABLE SSEOC -->
+ <map code="0xc380" name="1em"/><!-- HANGUL SYLLABLE SSEOK -->
+ <map code="0xc381" name="1em"/><!-- HANGUL SYLLABLE SSEOT -->
+ <map code="0xc382" name="1em"/><!-- HANGUL SYLLABLE SSEOP -->
+ <map code="0xc383" name="1em"/><!-- HANGUL SYLLABLE SSEOH -->
+ <map code="0xc384" name="1em"/><!-- HANGUL SYLLABLE SSE -->
+ <map code="0xc385" name="1em"/><!-- HANGUL SYLLABLE SSEG -->
+ <map code="0xc386" name="1em"/><!-- HANGUL SYLLABLE SSEGG -->
+ <map code="0xc387" name="1em"/><!-- HANGUL SYLLABLE SSEGS -->
+ <map code="0xc388" name="1em"/><!-- HANGUL SYLLABLE SSEN -->
+ <map code="0xc389" name="1em"/><!-- HANGUL SYLLABLE SSENJ -->
+ <map code="0xc38a" name="1em"/><!-- HANGUL SYLLABLE SSENH -->
+ <map code="0xc38b" name="1em"/><!-- HANGUL SYLLABLE SSED -->
+ <map code="0xc38c" name="1em"/><!-- HANGUL SYLLABLE SSEL -->
+ <map code="0xc38d" name="1em"/><!-- HANGUL SYLLABLE SSELG -->
+ <map code="0xc38e" name="1em"/><!-- HANGUL SYLLABLE SSELM -->
+ <map code="0xc38f" name="1em"/><!-- HANGUL SYLLABLE SSELB -->
+ <map code="0xc390" name="1em"/><!-- HANGUL SYLLABLE SSELS -->
+ <map code="0xc391" name="1em"/><!-- HANGUL SYLLABLE SSELT -->
+ <map code="0xc392" name="1em"/><!-- HANGUL SYLLABLE SSELP -->
+ <map code="0xc393" name="1em"/><!-- HANGUL SYLLABLE SSELH -->
+ <map code="0xc394" name="1em"/><!-- HANGUL SYLLABLE SSEM -->
+ <map code="0xc395" name="1em"/><!-- HANGUL SYLLABLE SSEB -->
+ <map code="0xc396" name="1em"/><!-- HANGUL SYLLABLE SSEBS -->
+ <map code="0xc397" name="1em"/><!-- HANGUL SYLLABLE SSES -->
+ <map code="0xc398" name="1em"/><!-- HANGUL SYLLABLE SSESS -->
+ <map code="0xc399" name="1em"/><!-- HANGUL SYLLABLE SSENG -->
+ <map code="0xc39a" name="1em"/><!-- HANGUL SYLLABLE SSEJ -->
+ <map code="0xc39b" name="1em"/><!-- HANGUL SYLLABLE SSEC -->
+ <map code="0xc39c" name="1em"/><!-- HANGUL SYLLABLE SSEK -->
+ <map code="0xc39d" name="1em"/><!-- HANGUL SYLLABLE SSET -->
+ <map code="0xc39e" name="1em"/><!-- HANGUL SYLLABLE SSEP -->
+ <map code="0xc39f" name="1em"/><!-- HANGUL SYLLABLE SSEH -->
+ <map code="0xc3a0" name="1em"/><!-- HANGUL SYLLABLE SSYEO -->
+ <map code="0xc3a1" name="1em"/><!-- HANGUL SYLLABLE SSYEOG -->
+ <map code="0xc3a2" name="1em"/><!-- HANGUL SYLLABLE SSYEOGG -->
+ <map code="0xc3a3" name="1em"/><!-- HANGUL SYLLABLE SSYEOGS -->
+ <map code="0xc3a4" name="1em"/><!-- HANGUL SYLLABLE SSYEON -->
+ <map code="0xc3a5" name="1em"/><!-- HANGUL SYLLABLE SSYEONJ -->
+ <map code="0xc3a6" name="1em"/><!-- HANGUL SYLLABLE SSYEONH -->
+ <map code="0xc3a7" name="1em"/><!-- HANGUL SYLLABLE SSYEOD -->
+ <map code="0xc3a8" name="1em"/><!-- HANGUL SYLLABLE SSYEOL -->
+ <map code="0xc3a9" name="1em"/><!-- HANGUL SYLLABLE SSYEOLG -->
+ <map code="0xc3aa" name="1em"/><!-- HANGUL SYLLABLE SSYEOLM -->
+ <map code="0xc3ab" name="1em"/><!-- HANGUL SYLLABLE SSYEOLB -->
+ <map code="0xc3ac" name="1em"/><!-- HANGUL SYLLABLE SSYEOLS -->
+ <map code="0xc3ad" name="1em"/><!-- HANGUL SYLLABLE SSYEOLT -->
+ <map code="0xc3ae" name="1em"/><!-- HANGUL SYLLABLE SSYEOLP -->
+ <map code="0xc3af" name="1em"/><!-- HANGUL SYLLABLE SSYEOLH -->
+ <map code="0xc3b0" name="1em"/><!-- HANGUL SYLLABLE SSYEOM -->
+ <map code="0xc3b1" name="1em"/><!-- HANGUL SYLLABLE SSYEOB -->
+ <map code="0xc3b2" name="1em"/><!-- HANGUL SYLLABLE SSYEOBS -->
+ <map code="0xc3b3" name="1em"/><!-- HANGUL SYLLABLE SSYEOS -->
+ <map code="0xc3b4" name="1em"/><!-- HANGUL SYLLABLE SSYEOSS -->
+ <map code="0xc3b5" name="1em"/><!-- HANGUL SYLLABLE SSYEONG -->
+ <map code="0xc3b6" name="1em"/><!-- HANGUL SYLLABLE SSYEOJ -->
+ <map code="0xc3b7" name="1em"/><!-- HANGUL SYLLABLE SSYEOC -->
+ <map code="0xc3b8" name="1em"/><!-- HANGUL SYLLABLE SSYEOK -->
+ <map code="0xc3b9" name="1em"/><!-- HANGUL SYLLABLE SSYEOT -->
+ <map code="0xc3ba" name="1em"/><!-- HANGUL SYLLABLE SSYEOP -->
+ <map code="0xc3bb" name="1em"/><!-- HANGUL SYLLABLE SSYEOH -->
+ <map code="0xc3bc" name="1em"/><!-- HANGUL SYLLABLE SSYE -->
+ <map code="0xc3bd" name="1em"/><!-- HANGUL SYLLABLE SSYEG -->
+ <map code="0xc3be" name="1em"/><!-- HANGUL SYLLABLE SSYEGG -->
+ <map code="0xc3bf" name="1em"/><!-- HANGUL SYLLABLE SSYEGS -->
+ <map code="0xc3c0" name="1em"/><!-- HANGUL SYLLABLE SSYEN -->
+ <map code="0xc3c1" name="1em"/><!-- HANGUL SYLLABLE SSYENJ -->
+ <map code="0xc3c2" name="1em"/><!-- HANGUL SYLLABLE SSYENH -->
+ <map code="0xc3c3" name="1em"/><!-- HANGUL SYLLABLE SSYED -->
+ <map code="0xc3c4" name="1em"/><!-- HANGUL SYLLABLE SSYEL -->
+ <map code="0xc3c5" name="1em"/><!-- HANGUL SYLLABLE SSYELG -->
+ <map code="0xc3c6" name="1em"/><!-- HANGUL SYLLABLE SSYELM -->
+ <map code="0xc3c7" name="1em"/><!-- HANGUL SYLLABLE SSYELB -->
+ <map code="0xc3c8" name="1em"/><!-- HANGUL SYLLABLE SSYELS -->
+ <map code="0xc3c9" name="1em"/><!-- HANGUL SYLLABLE SSYELT -->
+ <map code="0xc3ca" name="1em"/><!-- HANGUL SYLLABLE SSYELP -->
+ <map code="0xc3cb" name="1em"/><!-- HANGUL SYLLABLE SSYELH -->
+ <map code="0xc3cc" name="1em"/><!-- HANGUL SYLLABLE SSYEM -->
+ <map code="0xc3cd" name="1em"/><!-- HANGUL SYLLABLE SSYEB -->
+ <map code="0xc3ce" name="1em"/><!-- HANGUL SYLLABLE SSYEBS -->
+ <map code="0xc3cf" name="1em"/><!-- HANGUL SYLLABLE SSYES -->
+ <map code="0xc3d0" name="1em"/><!-- HANGUL SYLLABLE SSYESS -->
+ <map code="0xc3d1" name="1em"/><!-- HANGUL SYLLABLE SSYENG -->
+ <map code="0xc3d2" name="1em"/><!-- HANGUL SYLLABLE SSYEJ -->
+ <map code="0xc3d3" name="1em"/><!-- HANGUL SYLLABLE SSYEC -->
+ <map code="0xc3d4" name="1em"/><!-- HANGUL SYLLABLE SSYEK -->
+ <map code="0xc3d5" name="1em"/><!-- HANGUL SYLLABLE SSYET -->
+ <map code="0xc3d6" name="1em"/><!-- HANGUL SYLLABLE SSYEP -->
+ <map code="0xc3d7" name="1em"/><!-- HANGUL SYLLABLE SSYEH -->
+ <map code="0xc3d8" name="1em"/><!-- HANGUL SYLLABLE SSO -->
+ <map code="0xc3d9" name="1em"/><!-- HANGUL SYLLABLE SSOG -->
+ <map code="0xc3da" name="1em"/><!-- HANGUL SYLLABLE SSOGG -->
+ <map code="0xc3db" name="1em"/><!-- HANGUL SYLLABLE SSOGS -->
+ <map code="0xc3dc" name="1em"/><!-- HANGUL SYLLABLE SSON -->
+ <map code="0xc3dd" name="1em"/><!-- HANGUL SYLLABLE SSONJ -->
+ <map code="0xc3de" name="1em"/><!-- HANGUL SYLLABLE SSONH -->
+ <map code="0xc3df" name="1em"/><!-- HANGUL SYLLABLE SSOD -->
+ <map code="0xc3e0" name="1em"/><!-- HANGUL SYLLABLE SSOL -->
+ <map code="0xc3e1" name="1em"/><!-- HANGUL SYLLABLE SSOLG -->
+ <map code="0xc3e2" name="1em"/><!-- HANGUL SYLLABLE SSOLM -->
+ <map code="0xc3e3" name="1em"/><!-- HANGUL SYLLABLE SSOLB -->
+ <map code="0xc3e4" name="1em"/><!-- HANGUL SYLLABLE SSOLS -->
+ <map code="0xc3e5" name="1em"/><!-- HANGUL SYLLABLE SSOLT -->
+ <map code="0xc3e6" name="1em"/><!-- HANGUL SYLLABLE SSOLP -->
+ <map code="0xc3e7" name="1em"/><!-- HANGUL SYLLABLE SSOLH -->
+ <map code="0xc3e8" name="1em"/><!-- HANGUL SYLLABLE SSOM -->
+ <map code="0xc3e9" name="1em"/><!-- HANGUL SYLLABLE SSOB -->
+ <map code="0xc3ea" name="1em"/><!-- HANGUL SYLLABLE SSOBS -->
+ <map code="0xc3eb" name="1em"/><!-- HANGUL SYLLABLE SSOS -->
+ <map code="0xc3ec" name="1em"/><!-- HANGUL SYLLABLE SSOSS -->
+ <map code="0xc3ed" name="1em"/><!-- HANGUL SYLLABLE SSONG -->
+ <map code="0xc3ee" name="1em"/><!-- HANGUL SYLLABLE SSOJ -->
+ <map code="0xc3ef" name="1em"/><!-- HANGUL SYLLABLE SSOC -->
+ <map code="0xc3f0" name="1em"/><!-- HANGUL SYLLABLE SSOK -->
+ <map code="0xc3f1" name="1em"/><!-- HANGUL SYLLABLE SSOT -->
+ <map code="0xc3f2" name="1em"/><!-- HANGUL SYLLABLE SSOP -->
+ <map code="0xc3f3" name="1em"/><!-- HANGUL SYLLABLE SSOH -->
+ <map code="0xc3f4" name="1em"/><!-- HANGUL SYLLABLE SSWA -->
+ <map code="0xc3f5" name="1em"/><!-- HANGUL SYLLABLE SSWAG -->
+ <map code="0xc3f6" name="1em"/><!-- HANGUL SYLLABLE SSWAGG -->
+ <map code="0xc3f7" name="1em"/><!-- HANGUL SYLLABLE SSWAGS -->
+ <map code="0xc3f8" name="1em"/><!-- HANGUL SYLLABLE SSWAN -->
+ <map code="0xc3f9" name="1em"/><!-- HANGUL SYLLABLE SSWANJ -->
+ <map code="0xc3fa" name="1em"/><!-- HANGUL SYLLABLE SSWANH -->
+ <map code="0xc3fb" name="1em"/><!-- HANGUL SYLLABLE SSWAD -->
+ <map code="0xc3fc" name="1em"/><!-- HANGUL SYLLABLE SSWAL -->
+ <map code="0xc3fd" name="1em"/><!-- HANGUL SYLLABLE SSWALG -->
+ <map code="0xc3fe" name="1em"/><!-- HANGUL SYLLABLE SSWALM -->
+ <map code="0xc3ff" name="1em"/><!-- HANGUL SYLLABLE SSWALB -->
+ <map code="0xc400" name="1em"/><!-- HANGUL SYLLABLE SSWALS -->
+ <map code="0xc401" name="1em"/><!-- HANGUL SYLLABLE SSWALT -->
+ <map code="0xc402" name="1em"/><!-- HANGUL SYLLABLE SSWALP -->
+ <map code="0xc403" name="1em"/><!-- HANGUL SYLLABLE SSWALH -->
+ <map code="0xc404" name="1em"/><!-- HANGUL SYLLABLE SSWAM -->
+ <map code="0xc405" name="1em"/><!-- HANGUL SYLLABLE SSWAB -->
+ <map code="0xc406" name="1em"/><!-- HANGUL SYLLABLE SSWABS -->
+ <map code="0xc407" name="1em"/><!-- HANGUL SYLLABLE SSWAS -->
+ <map code="0xc408" name="1em"/><!-- HANGUL SYLLABLE SSWASS -->
+ <map code="0xc409" name="1em"/><!-- HANGUL SYLLABLE SSWANG -->
+ <map code="0xc40a" name="1em"/><!-- HANGUL SYLLABLE SSWAJ -->
+ <map code="0xc40b" name="1em"/><!-- HANGUL SYLLABLE SSWAC -->
+ <map code="0xc40c" name="1em"/><!-- HANGUL SYLLABLE SSWAK -->
+ <map code="0xc40d" name="1em"/><!-- HANGUL SYLLABLE SSWAT -->
+ <map code="0xc40e" name="1em"/><!-- HANGUL SYLLABLE SSWAP -->
+ <map code="0xc40f" name="1em"/><!-- HANGUL SYLLABLE SSWAH -->
+ <map code="0xc410" name="1em"/><!-- HANGUL SYLLABLE SSWAE -->
+ <map code="0xc411" name="1em"/><!-- HANGUL SYLLABLE SSWAEG -->
+ <map code="0xc412" name="1em"/><!-- HANGUL SYLLABLE SSWAEGG -->
+ <map code="0xc413" name="1em"/><!-- HANGUL SYLLABLE SSWAEGS -->
+ <map code="0xc414" name="1em"/><!-- HANGUL SYLLABLE SSWAEN -->
+ <map code="0xc415" name="1em"/><!-- HANGUL SYLLABLE SSWAENJ -->
+ <map code="0xc416" name="1em"/><!-- HANGUL SYLLABLE SSWAENH -->
+ <map code="0xc417" name="1em"/><!-- HANGUL SYLLABLE SSWAED -->
+ <map code="0xc418" name="1em"/><!-- HANGUL SYLLABLE SSWAEL -->
+ <map code="0xc419" name="1em"/><!-- HANGUL SYLLABLE SSWAELG -->
+ <map code="0xc41a" name="1em"/><!-- HANGUL SYLLABLE SSWAELM -->
+ <map code="0xc41b" name="1em"/><!-- HANGUL SYLLABLE SSWAELB -->
+ <map code="0xc41c" name="1em"/><!-- HANGUL SYLLABLE SSWAELS -->
+ <map code="0xc41d" name="1em"/><!-- HANGUL SYLLABLE SSWAELT -->
+ <map code="0xc41e" name="1em"/><!-- HANGUL SYLLABLE SSWAELP -->
+ <map code="0xc41f" name="1em"/><!-- HANGUL SYLLABLE SSWAELH -->
+ <map code="0xc420" name="1em"/><!-- HANGUL SYLLABLE SSWAEM -->
+ <map code="0xc421" name="1em"/><!-- HANGUL SYLLABLE SSWAEB -->
+ <map code="0xc422" name="1em"/><!-- HANGUL SYLLABLE SSWAEBS -->
+ <map code="0xc423" name="1em"/><!-- HANGUL SYLLABLE SSWAES -->
+ <map code="0xc424" name="1em"/><!-- HANGUL SYLLABLE SSWAESS -->
+ <map code="0xc425" name="1em"/><!-- HANGUL SYLLABLE SSWAENG -->
+ <map code="0xc426" name="1em"/><!-- HANGUL SYLLABLE SSWAEJ -->
+ <map code="0xc427" name="1em"/><!-- HANGUL SYLLABLE SSWAEC -->
+ <map code="0xc428" name="1em"/><!-- HANGUL SYLLABLE SSWAEK -->
+ <map code="0xc429" name="1em"/><!-- HANGUL SYLLABLE SSWAET -->
+ <map code="0xc42a" name="1em"/><!-- HANGUL SYLLABLE SSWAEP -->
+ <map code="0xc42b" name="1em"/><!-- HANGUL SYLLABLE SSWAEH -->
+ <map code="0xc42c" name="1em"/><!-- HANGUL SYLLABLE SSOE -->
+ <map code="0xc42d" name="1em"/><!-- HANGUL SYLLABLE SSOEG -->
+ <map code="0xc42e" name="1em"/><!-- HANGUL SYLLABLE SSOEGG -->
+ <map code="0xc42f" name="1em"/><!-- HANGUL SYLLABLE SSOEGS -->
+ <map code="0xc430" name="1em"/><!-- HANGUL SYLLABLE SSOEN -->
+ <map code="0xc431" name="1em"/><!-- HANGUL SYLLABLE SSOENJ -->
+ <map code="0xc432" name="1em"/><!-- HANGUL SYLLABLE SSOENH -->
+ <map code="0xc433" name="1em"/><!-- HANGUL SYLLABLE SSOED -->
+ <map code="0xc434" name="1em"/><!-- HANGUL SYLLABLE SSOEL -->
+ <map code="0xc435" name="1em"/><!-- HANGUL SYLLABLE SSOELG -->
+ <map code="0xc436" name="1em"/><!-- HANGUL SYLLABLE SSOELM -->
+ <map code="0xc437" name="1em"/><!-- HANGUL SYLLABLE SSOELB -->
+ <map code="0xc438" name="1em"/><!-- HANGUL SYLLABLE SSOELS -->
+ <map code="0xc439" name="1em"/><!-- HANGUL SYLLABLE SSOELT -->
+ <map code="0xc43a" name="1em"/><!-- HANGUL SYLLABLE SSOELP -->
+ <map code="0xc43b" name="1em"/><!-- HANGUL SYLLABLE SSOELH -->
+ <map code="0xc43c" name="1em"/><!-- HANGUL SYLLABLE SSOEM -->
+ <map code="0xc43d" name="1em"/><!-- HANGUL SYLLABLE SSOEB -->
+ <map code="0xc43e" name="1em"/><!-- HANGUL SYLLABLE SSOEBS -->
+ <map code="0xc43f" name="1em"/><!-- HANGUL SYLLABLE SSOES -->
+ <map code="0xc440" name="1em"/><!-- HANGUL SYLLABLE SSOESS -->
+ <map code="0xc441" name="1em"/><!-- HANGUL SYLLABLE SSOENG -->
+ <map code="0xc442" name="1em"/><!-- HANGUL SYLLABLE SSOEJ -->
+ <map code="0xc443" name="1em"/><!-- HANGUL SYLLABLE SSOEC -->
+ <map code="0xc444" name="1em"/><!-- HANGUL SYLLABLE SSOEK -->
+ <map code="0xc445" name="1em"/><!-- HANGUL SYLLABLE SSOET -->
+ <map code="0xc446" name="1em"/><!-- HANGUL SYLLABLE SSOEP -->
+ <map code="0xc447" name="1em"/><!-- HANGUL SYLLABLE SSOEH -->
+ <map code="0xc448" name="1em"/><!-- HANGUL SYLLABLE SSYO -->
+ <map code="0xc449" name="1em"/><!-- HANGUL SYLLABLE SSYOG -->
+ <map code="0xc44a" name="1em"/><!-- HANGUL SYLLABLE SSYOGG -->
+ <map code="0xc44b" name="1em"/><!-- HANGUL SYLLABLE SSYOGS -->
+ <map code="0xc44c" name="1em"/><!-- HANGUL SYLLABLE SSYON -->
+ <map code="0xc44d" name="1em"/><!-- HANGUL SYLLABLE SSYONJ -->
+ <map code="0xc44e" name="1em"/><!-- HANGUL SYLLABLE SSYONH -->
+ <map code="0xc44f" name="1em"/><!-- HANGUL SYLLABLE SSYOD -->
+ <map code="0xc450" name="1em"/><!-- HANGUL SYLLABLE SSYOL -->
+ <map code="0xc451" name="1em"/><!-- HANGUL SYLLABLE SSYOLG -->
+ <map code="0xc452" name="1em"/><!-- HANGUL SYLLABLE SSYOLM -->
+ <map code="0xc453" name="1em"/><!-- HANGUL SYLLABLE SSYOLB -->
+ <map code="0xc454" name="1em"/><!-- HANGUL SYLLABLE SSYOLS -->
+ <map code="0xc455" name="1em"/><!-- HANGUL SYLLABLE SSYOLT -->
+ <map code="0xc456" name="1em"/><!-- HANGUL SYLLABLE SSYOLP -->
+ <map code="0xc457" name="1em"/><!-- HANGUL SYLLABLE SSYOLH -->
+ <map code="0xc458" name="1em"/><!-- HANGUL SYLLABLE SSYOM -->
+ <map code="0xc459" name="1em"/><!-- HANGUL SYLLABLE SSYOB -->
+ <map code="0xc45a" name="1em"/><!-- HANGUL SYLLABLE SSYOBS -->
+ <map code="0xc45b" name="1em"/><!-- HANGUL SYLLABLE SSYOS -->
+ <map code="0xc45c" name="1em"/><!-- HANGUL SYLLABLE SSYOSS -->
+ <map code="0xc45d" name="1em"/><!-- HANGUL SYLLABLE SSYONG -->
+ <map code="0xc45e" name="1em"/><!-- HANGUL SYLLABLE SSYOJ -->
+ <map code="0xc45f" name="1em"/><!-- HANGUL SYLLABLE SSYOC -->
+ <map code="0xc460" name="1em"/><!-- HANGUL SYLLABLE SSYOK -->
+ <map code="0xc461" name="1em"/><!-- HANGUL SYLLABLE SSYOT -->
+ <map code="0xc462" name="1em"/><!-- HANGUL SYLLABLE SSYOP -->
+ <map code="0xc463" name="1em"/><!-- HANGUL SYLLABLE SSYOH -->
+ <map code="0xc464" name="1em"/><!-- HANGUL SYLLABLE SSU -->
+ <map code="0xc465" name="1em"/><!-- HANGUL SYLLABLE SSUG -->
+ <map code="0xc466" name="1em"/><!-- HANGUL SYLLABLE SSUGG -->
+ <map code="0xc467" name="1em"/><!-- HANGUL SYLLABLE SSUGS -->
+ <map code="0xc468" name="1em"/><!-- HANGUL SYLLABLE SSUN -->
+ <map code="0xc469" name="1em"/><!-- HANGUL SYLLABLE SSUNJ -->
+ <map code="0xc46a" name="1em"/><!-- HANGUL SYLLABLE SSUNH -->
+ <map code="0xc46b" name="1em"/><!-- HANGUL SYLLABLE SSUD -->
+ <map code="0xc46c" name="1em"/><!-- HANGUL SYLLABLE SSUL -->
+ <map code="0xc46d" name="1em"/><!-- HANGUL SYLLABLE SSULG -->
+ <map code="0xc46e" name="1em"/><!-- HANGUL SYLLABLE SSULM -->
+ <map code="0xc46f" name="1em"/><!-- HANGUL SYLLABLE SSULB -->
+ <map code="0xc470" name="1em"/><!-- HANGUL SYLLABLE SSULS -->
+ <map code="0xc471" name="1em"/><!-- HANGUL SYLLABLE SSULT -->
+ <map code="0xc472" name="1em"/><!-- HANGUL SYLLABLE SSULP -->
+ <map code="0xc473" name="1em"/><!-- HANGUL SYLLABLE SSULH -->
+ <map code="0xc474" name="1em"/><!-- HANGUL SYLLABLE SSUM -->
+ <map code="0xc475" name="1em"/><!-- HANGUL SYLLABLE SSUB -->
+ <map code="0xc476" name="1em"/><!-- HANGUL SYLLABLE SSUBS -->
+ <map code="0xc477" name="1em"/><!-- HANGUL SYLLABLE SSUS -->
+ <map code="0xc478" name="1em"/><!-- HANGUL SYLLABLE SSUSS -->
+ <map code="0xc479" name="1em"/><!-- HANGUL SYLLABLE SSUNG -->
+ <map code="0xc47a" name="1em"/><!-- HANGUL SYLLABLE SSUJ -->
+ <map code="0xc47b" name="1em"/><!-- HANGUL SYLLABLE SSUC -->
+ <map code="0xc47c" name="1em"/><!-- HANGUL SYLLABLE SSUK -->
+ <map code="0xc47d" name="1em"/><!-- HANGUL SYLLABLE SSUT -->
+ <map code="0xc47e" name="1em"/><!-- HANGUL SYLLABLE SSUP -->
+ <map code="0xc47f" name="1em"/><!-- HANGUL SYLLABLE SSUH -->
+ <map code="0xc480" name="1em"/><!-- HANGUL SYLLABLE SSWEO -->
+ <map code="0xc481" name="1em"/><!-- HANGUL SYLLABLE SSWEOG -->
+ <map code="0xc482" name="1em"/><!-- HANGUL SYLLABLE SSWEOGG -->
+ <map code="0xc483" name="1em"/><!-- HANGUL SYLLABLE SSWEOGS -->
+ <map code="0xc484" name="1em"/><!-- HANGUL SYLLABLE SSWEON -->
+ <map code="0xc485" name="1em"/><!-- HANGUL SYLLABLE SSWEONJ -->
+ <map code="0xc486" name="1em"/><!-- HANGUL SYLLABLE SSWEONH -->
+ <map code="0xc487" name="1em"/><!-- HANGUL SYLLABLE SSWEOD -->
+ <map code="0xc488" name="1em"/><!-- HANGUL SYLLABLE SSWEOL -->
+ <map code="0xc489" name="1em"/><!-- HANGUL SYLLABLE SSWEOLG -->
+ <map code="0xc48a" name="1em"/><!-- HANGUL SYLLABLE SSWEOLM -->
+ <map code="0xc48b" name="1em"/><!-- HANGUL SYLLABLE SSWEOLB -->
+ <map code="0xc48c" name="1em"/><!-- HANGUL SYLLABLE SSWEOLS -->
+ <map code="0xc48d" name="1em"/><!-- HANGUL SYLLABLE SSWEOLT -->
+ <map code="0xc48e" name="1em"/><!-- HANGUL SYLLABLE SSWEOLP -->
+ <map code="0xc48f" name="1em"/><!-- HANGUL SYLLABLE SSWEOLH -->
+ <map code="0xc490" name="1em"/><!-- HANGUL SYLLABLE SSWEOM -->
+ <map code="0xc491" name="1em"/><!-- HANGUL SYLLABLE SSWEOB -->
+ <map code="0xc492" name="1em"/><!-- HANGUL SYLLABLE SSWEOBS -->
+ <map code="0xc493" name="1em"/><!-- HANGUL SYLLABLE SSWEOS -->
+ <map code="0xc494" name="1em"/><!-- HANGUL SYLLABLE SSWEOSS -->
+ <map code="0xc495" name="1em"/><!-- HANGUL SYLLABLE SSWEONG -->
+ <map code="0xc496" name="1em"/><!-- HANGUL SYLLABLE SSWEOJ -->
+ <map code="0xc497" name="1em"/><!-- HANGUL SYLLABLE SSWEOC -->
+ <map code="0xc498" name="1em"/><!-- HANGUL SYLLABLE SSWEOK -->
+ <map code="0xc499" name="1em"/><!-- HANGUL SYLLABLE SSWEOT -->
+ <map code="0xc49a" name="1em"/><!-- HANGUL SYLLABLE SSWEOP -->
+ <map code="0xc49b" name="1em"/><!-- HANGUL SYLLABLE SSWEOH -->
+ <map code="0xc49c" name="1em"/><!-- HANGUL SYLLABLE SSWE -->
+ <map code="0xc49d" name="1em"/><!-- HANGUL SYLLABLE SSWEG -->
+ <map code="0xc49e" name="1em"/><!-- HANGUL SYLLABLE SSWEGG -->
+ <map code="0xc49f" name="1em"/><!-- HANGUL SYLLABLE SSWEGS -->
+ <map code="0xc4a0" name="1em"/><!-- HANGUL SYLLABLE SSWEN -->
+ <map code="0xc4a1" name="1em"/><!-- HANGUL SYLLABLE SSWENJ -->
+ <map code="0xc4a2" name="1em"/><!-- HANGUL SYLLABLE SSWENH -->
+ <map code="0xc4a3" name="1em"/><!-- HANGUL SYLLABLE SSWED -->
+ <map code="0xc4a4" name="1em"/><!-- HANGUL SYLLABLE SSWEL -->
+ <map code="0xc4a5" name="1em"/><!-- HANGUL SYLLABLE SSWELG -->
+ <map code="0xc4a6" name="1em"/><!-- HANGUL SYLLABLE SSWELM -->
+ <map code="0xc4a7" name="1em"/><!-- HANGUL SYLLABLE SSWELB -->
+ <map code="0xc4a8" name="1em"/><!-- HANGUL SYLLABLE SSWELS -->
+ <map code="0xc4a9" name="1em"/><!-- HANGUL SYLLABLE SSWELT -->
+ <map code="0xc4aa" name="1em"/><!-- HANGUL SYLLABLE SSWELP -->
+ <map code="0xc4ab" name="1em"/><!-- HANGUL SYLLABLE SSWELH -->
+ <map code="0xc4ac" name="1em"/><!-- HANGUL SYLLABLE SSWEM -->
+ <map code="0xc4ad" name="1em"/><!-- HANGUL SYLLABLE SSWEB -->
+ <map code="0xc4ae" name="1em"/><!-- HANGUL SYLLABLE SSWEBS -->
+ <map code="0xc4af" name="1em"/><!-- HANGUL SYLLABLE SSWES -->
+ <map code="0xc4b0" name="1em"/><!-- HANGUL SYLLABLE SSWESS -->
+ <map code="0xc4b1" name="1em"/><!-- HANGUL SYLLABLE SSWENG -->
+ <map code="0xc4b2" name="1em"/><!-- HANGUL SYLLABLE SSWEJ -->
+ <map code="0xc4b3" name="1em"/><!-- HANGUL SYLLABLE SSWEC -->
+ <map code="0xc4b4" name="1em"/><!-- HANGUL SYLLABLE SSWEK -->
+ <map code="0xc4b5" name="1em"/><!-- HANGUL SYLLABLE SSWET -->
+ <map code="0xc4b6" name="1em"/><!-- HANGUL SYLLABLE SSWEP -->
+ <map code="0xc4b7" name="1em"/><!-- HANGUL SYLLABLE SSWEH -->
+ <map code="0xc4b8" name="1em"/><!-- HANGUL SYLLABLE SSWI -->
+ <map code="0xc4b9" name="1em"/><!-- HANGUL SYLLABLE SSWIG -->
+ <map code="0xc4ba" name="1em"/><!-- HANGUL SYLLABLE SSWIGG -->
+ <map code="0xc4bb" name="1em"/><!-- HANGUL SYLLABLE SSWIGS -->
+ <map code="0xc4bc" name="1em"/><!-- HANGUL SYLLABLE SSWIN -->
+ <map code="0xc4bd" name="1em"/><!-- HANGUL SYLLABLE SSWINJ -->
+ <map code="0xc4be" name="1em"/><!-- HANGUL SYLLABLE SSWINH -->
+ <map code="0xc4bf" name="1em"/><!-- HANGUL SYLLABLE SSWID -->
+ <map code="0xc4c0" name="1em"/><!-- HANGUL SYLLABLE SSWIL -->
+ <map code="0xc4c1" name="1em"/><!-- HANGUL SYLLABLE SSWILG -->
+ <map code="0xc4c2" name="1em"/><!-- HANGUL SYLLABLE SSWILM -->
+ <map code="0xc4c3" name="1em"/><!-- HANGUL SYLLABLE SSWILB -->
+ <map code="0xc4c4" name="1em"/><!-- HANGUL SYLLABLE SSWILS -->
+ <map code="0xc4c5" name="1em"/><!-- HANGUL SYLLABLE SSWILT -->
+ <map code="0xc4c6" name="1em"/><!-- HANGUL SYLLABLE SSWILP -->
+ <map code="0xc4c7" name="1em"/><!-- HANGUL SYLLABLE SSWILH -->
+ <map code="0xc4c8" name="1em"/><!-- HANGUL SYLLABLE SSWIM -->
+ <map code="0xc4c9" name="1em"/><!-- HANGUL SYLLABLE SSWIB -->
+ <map code="0xc4ca" name="1em"/><!-- HANGUL SYLLABLE SSWIBS -->
+ <map code="0xc4cb" name="1em"/><!-- HANGUL SYLLABLE SSWIS -->
+ <map code="0xc4cc" name="1em"/><!-- HANGUL SYLLABLE SSWISS -->
+ <map code="0xc4cd" name="1em"/><!-- HANGUL SYLLABLE SSWING -->
+ <map code="0xc4ce" name="1em"/><!-- HANGUL SYLLABLE SSWIJ -->
+ <map code="0xc4cf" name="1em"/><!-- HANGUL SYLLABLE SSWIC -->
+ <map code="0xc4d0" name="1em"/><!-- HANGUL SYLLABLE SSWIK -->
+ <map code="0xc4d1" name="1em"/><!-- HANGUL SYLLABLE SSWIT -->
+ <map code="0xc4d2" name="1em"/><!-- HANGUL SYLLABLE SSWIP -->
+ <map code="0xc4d3" name="1em"/><!-- HANGUL SYLLABLE SSWIH -->
+ <map code="0xc4d4" name="1em"/><!-- HANGUL SYLLABLE SSYU -->
+ <map code="0xc4d5" name="1em"/><!-- HANGUL SYLLABLE SSYUG -->
+ <map code="0xc4d6" name="1em"/><!-- HANGUL SYLLABLE SSYUGG -->
+ <map code="0xc4d7" name="1em"/><!-- HANGUL SYLLABLE SSYUGS -->
+ <map code="0xc4d8" name="1em"/><!-- HANGUL SYLLABLE SSYUN -->
+ <map code="0xc4d9" name="1em"/><!-- HANGUL SYLLABLE SSYUNJ -->
+ <map code="0xc4da" name="1em"/><!-- HANGUL SYLLABLE SSYUNH -->
+ <map code="0xc4db" name="1em"/><!-- HANGUL SYLLABLE SSYUD -->
+ <map code="0xc4dc" name="1em"/><!-- HANGUL SYLLABLE SSYUL -->
+ <map code="0xc4dd" name="1em"/><!-- HANGUL SYLLABLE SSYULG -->
+ <map code="0xc4de" name="1em"/><!-- HANGUL SYLLABLE SSYULM -->
+ <map code="0xc4df" name="1em"/><!-- HANGUL SYLLABLE SSYULB -->
+ <map code="0xc4e0" name="1em"/><!-- HANGUL SYLLABLE SSYULS -->
+ <map code="0xc4e1" name="1em"/><!-- HANGUL SYLLABLE SSYULT -->
+ <map code="0xc4e2" name="1em"/><!-- HANGUL SYLLABLE SSYULP -->
+ <map code="0xc4e3" name="1em"/><!-- HANGUL SYLLABLE SSYULH -->
+ <map code="0xc4e4" name="1em"/><!-- HANGUL SYLLABLE SSYUM -->
+ <map code="0xc4e5" name="1em"/><!-- HANGUL SYLLABLE SSYUB -->
+ <map code="0xc4e6" name="1em"/><!-- HANGUL SYLLABLE SSYUBS -->
+ <map code="0xc4e7" name="1em"/><!-- HANGUL SYLLABLE SSYUS -->
+ <map code="0xc4e8" name="1em"/><!-- HANGUL SYLLABLE SSYUSS -->
+ <map code="0xc4e9" name="1em"/><!-- HANGUL SYLLABLE SSYUNG -->
+ <map code="0xc4ea" name="1em"/><!-- HANGUL SYLLABLE SSYUJ -->
+ <map code="0xc4eb" name="1em"/><!-- HANGUL SYLLABLE SSYUC -->
+ <map code="0xc4ec" name="1em"/><!-- HANGUL SYLLABLE SSYUK -->
+ <map code="0xc4ed" name="1em"/><!-- HANGUL SYLLABLE SSYUT -->
+ <map code="0xc4ee" name="1em"/><!-- HANGUL SYLLABLE SSYUP -->
+ <map code="0xc4ef" name="1em"/><!-- HANGUL SYLLABLE SSYUH -->
+ <map code="0xc4f0" name="1em"/><!-- HANGUL SYLLABLE SSEU -->
+ <map code="0xc4f1" name="1em"/><!-- HANGUL SYLLABLE SSEUG -->
+ <map code="0xc4f2" name="1em"/><!-- HANGUL SYLLABLE SSEUGG -->
+ <map code="0xc4f3" name="1em"/><!-- HANGUL SYLLABLE SSEUGS -->
+ <map code="0xc4f4" name="1em"/><!-- HANGUL SYLLABLE SSEUN -->
+ <map code="0xc4f5" name="1em"/><!-- HANGUL SYLLABLE SSEUNJ -->
+ <map code="0xc4f6" name="1em"/><!-- HANGUL SYLLABLE SSEUNH -->
+ <map code="0xc4f7" name="1em"/><!-- HANGUL SYLLABLE SSEUD -->
+ <map code="0xc4f8" name="1em"/><!-- HANGUL SYLLABLE SSEUL -->
+ <map code="0xc4f9" name="1em"/><!-- HANGUL SYLLABLE SSEULG -->
+ <map code="0xc4fa" name="1em"/><!-- HANGUL SYLLABLE SSEULM -->
+ <map code="0xc4fb" name="1em"/><!-- HANGUL SYLLABLE SSEULB -->
+ <map code="0xc4fc" name="1em"/><!-- HANGUL SYLLABLE SSEULS -->
+ <map code="0xc4fd" name="1em"/><!-- HANGUL SYLLABLE SSEULT -->
+ <map code="0xc4fe" name="1em"/><!-- HANGUL SYLLABLE SSEULP -->
+ <map code="0xc4ff" name="1em"/><!-- HANGUL SYLLABLE SSEULH -->
+ <map code="0xc500" name="1em"/><!-- HANGUL SYLLABLE SSEUM -->
+ <map code="0xc501" name="1em"/><!-- HANGUL SYLLABLE SSEUB -->
+ <map code="0xc502" name="1em"/><!-- HANGUL SYLLABLE SSEUBS -->
+ <map code="0xc503" name="1em"/><!-- HANGUL SYLLABLE SSEUS -->
+ <map code="0xc504" name="1em"/><!-- HANGUL SYLLABLE SSEUSS -->
+ <map code="0xc505" name="1em"/><!-- HANGUL SYLLABLE SSEUNG -->
+ <map code="0xc506" name="1em"/><!-- HANGUL SYLLABLE SSEUJ -->
+ <map code="0xc507" name="1em"/><!-- HANGUL SYLLABLE SSEUC -->
+ <map code="0xc508" name="1em"/><!-- HANGUL SYLLABLE SSEUK -->
+ <map code="0xc509" name="1em"/><!-- HANGUL SYLLABLE SSEUT -->
+ <map code="0xc50a" name="1em"/><!-- HANGUL SYLLABLE SSEUP -->
+ <map code="0xc50b" name="1em"/><!-- HANGUL SYLLABLE SSEUH -->
+ <map code="0xc50c" name="1em"/><!-- HANGUL SYLLABLE SSYI -->
+ <map code="0xc50d" name="1em"/><!-- HANGUL SYLLABLE SSYIG -->
+ <map code="0xc50e" name="1em"/><!-- HANGUL SYLLABLE SSYIGG -->
+ <map code="0xc50f" name="1em"/><!-- HANGUL SYLLABLE SSYIGS -->
+ <map code="0xc510" name="1em"/><!-- HANGUL SYLLABLE SSYIN -->
+ <map code="0xc511" name="1em"/><!-- HANGUL SYLLABLE SSYINJ -->
+ <map code="0xc512" name="1em"/><!-- HANGUL SYLLABLE SSYINH -->
+ <map code="0xc513" name="1em"/><!-- HANGUL SYLLABLE SSYID -->
+ <map code="0xc514" name="1em"/><!-- HANGUL SYLLABLE SSYIL -->
+ <map code="0xc515" name="1em"/><!-- HANGUL SYLLABLE SSYILG -->
+ <map code="0xc516" name="1em"/><!-- HANGUL SYLLABLE SSYILM -->
+ <map code="0xc517" name="1em"/><!-- HANGUL SYLLABLE SSYILB -->
+ <map code="0xc518" name="1em"/><!-- HANGUL SYLLABLE SSYILS -->
+ <map code="0xc519" name="1em"/><!-- HANGUL SYLLABLE SSYILT -->
+ <map code="0xc51a" name="1em"/><!-- HANGUL SYLLABLE SSYILP -->
+ <map code="0xc51b" name="1em"/><!-- HANGUL SYLLABLE SSYILH -->
+ <map code="0xc51c" name="1em"/><!-- HANGUL SYLLABLE SSYIM -->
+ <map code="0xc51d" name="1em"/><!-- HANGUL SYLLABLE SSYIB -->
+ <map code="0xc51e" name="1em"/><!-- HANGUL SYLLABLE SSYIBS -->
+ <map code="0xc51f" name="1em"/><!-- HANGUL SYLLABLE SSYIS -->
+ <map code="0xc520" name="1em"/><!-- HANGUL SYLLABLE SSYISS -->
+ <map code="0xc521" name="1em"/><!-- HANGUL SYLLABLE SSYING -->
+ <map code="0xc522" name="1em"/><!-- HANGUL SYLLABLE SSYIJ -->
+ <map code="0xc523" name="1em"/><!-- HANGUL SYLLABLE SSYIC -->
+ <map code="0xc524" name="1em"/><!-- HANGUL SYLLABLE SSYIK -->
+ <map code="0xc525" name="1em"/><!-- HANGUL SYLLABLE SSYIT -->
+ <map code="0xc526" name="1em"/><!-- HANGUL SYLLABLE SSYIP -->
+ <map code="0xc527" name="1em"/><!-- HANGUL SYLLABLE SSYIH -->
+ <map code="0xc528" name="1em"/><!-- HANGUL SYLLABLE SSI -->
+ <map code="0xc529" name="1em"/><!-- HANGUL SYLLABLE SSIG -->
+ <map code="0xc52a" name="1em"/><!-- HANGUL SYLLABLE SSIGG -->
+ <map code="0xc52b" name="1em"/><!-- HANGUL SYLLABLE SSIGS -->
+ <map code="0xc52c" name="1em"/><!-- HANGUL SYLLABLE SSIN -->
+ <map code="0xc52d" name="1em"/><!-- HANGUL SYLLABLE SSINJ -->
+ <map code="0xc52e" name="1em"/><!-- HANGUL SYLLABLE SSINH -->
+ <map code="0xc52f" name="1em"/><!-- HANGUL SYLLABLE SSID -->
+ <map code="0xc530" name="1em"/><!-- HANGUL SYLLABLE SSIL -->
+ <map code="0xc531" name="1em"/><!-- HANGUL SYLLABLE SSILG -->
+ <map code="0xc532" name="1em"/><!-- HANGUL SYLLABLE SSILM -->
+ <map code="0xc533" name="1em"/><!-- HANGUL SYLLABLE SSILB -->
+ <map code="0xc534" name="1em"/><!-- HANGUL SYLLABLE SSILS -->
+ <map code="0xc535" name="1em"/><!-- HANGUL SYLLABLE SSILT -->
+ <map code="0xc536" name="1em"/><!-- HANGUL SYLLABLE SSILP -->
+ <map code="0xc537" name="1em"/><!-- HANGUL SYLLABLE SSILH -->
+ <map code="0xc538" name="1em"/><!-- HANGUL SYLLABLE SSIM -->
+ <map code="0xc539" name="1em"/><!-- HANGUL SYLLABLE SSIB -->
+ <map code="0xc53a" name="1em"/><!-- HANGUL SYLLABLE SSIBS -->
+ <map code="0xc53b" name="1em"/><!-- HANGUL SYLLABLE SSIS -->
+ <map code="0xc53c" name="1em"/><!-- HANGUL SYLLABLE SSISS -->
+ <map code="0xc53d" name="1em"/><!-- HANGUL SYLLABLE SSING -->
+ <map code="0xc53e" name="1em"/><!-- HANGUL SYLLABLE SSIJ -->
+ <map code="0xc53f" name="1em"/><!-- HANGUL SYLLABLE SSIC -->
+ <map code="0xc540" name="1em"/><!-- HANGUL SYLLABLE SSIK -->
+ <map code="0xc541" name="1em"/><!-- HANGUL SYLLABLE SSIT -->
+ <map code="0xc542" name="1em"/><!-- HANGUL SYLLABLE SSIP -->
+ <map code="0xc543" name="1em"/><!-- HANGUL SYLLABLE SSIH -->
+ <map code="0xc544" name="1em"/><!-- HANGUL SYLLABLE A -->
+ <map code="0xc545" name="1em"/><!-- HANGUL SYLLABLE AG -->
+ <map code="0xc546" name="1em"/><!-- HANGUL SYLLABLE AGG -->
+ <map code="0xc547" name="1em"/><!-- HANGUL SYLLABLE AGS -->
+ <map code="0xc548" name="1em"/><!-- HANGUL SYLLABLE AN -->
+ <map code="0xc549" name="1em"/><!-- HANGUL SYLLABLE ANJ -->
+ <map code="0xc54a" name="1em"/><!-- HANGUL SYLLABLE ANH -->
+ <map code="0xc54b" name="1em"/><!-- HANGUL SYLLABLE AD -->
+ <map code="0xc54c" name="1em"/><!-- HANGUL SYLLABLE AL -->
+ <map code="0xc54d" name="1em"/><!-- HANGUL SYLLABLE ALG -->
+ <map code="0xc54e" name="1em"/><!-- HANGUL SYLLABLE ALM -->
+ <map code="0xc54f" name="1em"/><!-- HANGUL SYLLABLE ALB -->
+ <map code="0xc550" name="1em"/><!-- HANGUL SYLLABLE ALS -->
+ <map code="0xc551" name="1em"/><!-- HANGUL SYLLABLE ALT -->
+ <map code="0xc552" name="1em"/><!-- HANGUL SYLLABLE ALP -->
+ <map code="0xc553" name="1em"/><!-- HANGUL SYLLABLE ALH -->
+ <map code="0xc554" name="1em"/><!-- HANGUL SYLLABLE AM -->
+ <map code="0xc555" name="1em"/><!-- HANGUL SYLLABLE AB -->
+ <map code="0xc556" name="1em"/><!-- HANGUL SYLLABLE ABS -->
+ <map code="0xc557" name="1em"/><!-- HANGUL SYLLABLE AS -->
+ <map code="0xc558" name="1em"/><!-- HANGUL SYLLABLE ASS -->
+ <map code="0xc559" name="1em"/><!-- HANGUL SYLLABLE ANG -->
+ <map code="0xc55a" name="1em"/><!-- HANGUL SYLLABLE AJ -->
+ <map code="0xc55b" name="1em"/><!-- HANGUL SYLLABLE AC -->
+ <map code="0xc55c" name="1em"/><!-- HANGUL SYLLABLE AK -->
+ <map code="0xc55d" name="1em"/><!-- HANGUL SYLLABLE AT -->
+ <map code="0xc55e" name="1em"/><!-- HANGUL SYLLABLE AP -->
+ <map code="0xc55f" name="1em"/><!-- HANGUL SYLLABLE AH -->
+ <map code="0xc560" name="1em"/><!-- HANGUL SYLLABLE AE -->
+ <map code="0xc561" name="1em"/><!-- HANGUL SYLLABLE AEG -->
+ <map code="0xc562" name="1em"/><!-- HANGUL SYLLABLE AEGG -->
+ <map code="0xc563" name="1em"/><!-- HANGUL SYLLABLE AEGS -->
+ <map code="0xc564" name="1em"/><!-- HANGUL SYLLABLE AEN -->
+ <map code="0xc565" name="1em"/><!-- HANGUL SYLLABLE AENJ -->
+ <map code="0xc566" name="1em"/><!-- HANGUL SYLLABLE AENH -->
+ <map code="0xc567" name="1em"/><!-- HANGUL SYLLABLE AED -->
+ <map code="0xc568" name="1em"/><!-- HANGUL SYLLABLE AEL -->
+ <map code="0xc569" name="1em"/><!-- HANGUL SYLLABLE AELG -->
+ <map code="0xc56a" name="1em"/><!-- HANGUL SYLLABLE AELM -->
+ <map code="0xc56b" name="1em"/><!-- HANGUL SYLLABLE AELB -->
+ <map code="0xc56c" name="1em"/><!-- HANGUL SYLLABLE AELS -->
+ <map code="0xc56d" name="1em"/><!-- HANGUL SYLLABLE AELT -->
+ <map code="0xc56e" name="1em"/><!-- HANGUL SYLLABLE AELP -->
+ <map code="0xc56f" name="1em"/><!-- HANGUL SYLLABLE AELH -->
+ <map code="0xc570" name="1em"/><!-- HANGUL SYLLABLE AEM -->
+ <map code="0xc571" name="1em"/><!-- HANGUL SYLLABLE AEB -->
+ <map code="0xc572" name="1em"/><!-- HANGUL SYLLABLE AEBS -->
+ <map code="0xc573" name="1em"/><!-- HANGUL SYLLABLE AES -->
+ <map code="0xc574" name="1em"/><!-- HANGUL SYLLABLE AESS -->
+ <map code="0xc575" name="1em"/><!-- HANGUL SYLLABLE AENG -->
+ <map code="0xc576" name="1em"/><!-- HANGUL SYLLABLE AEJ -->
+ <map code="0xc577" name="1em"/><!-- HANGUL SYLLABLE AEC -->
+ <map code="0xc578" name="1em"/><!-- HANGUL SYLLABLE AEK -->
+ <map code="0xc579" name="1em"/><!-- HANGUL SYLLABLE AET -->
+ <map code="0xc57a" name="1em"/><!-- HANGUL SYLLABLE AEP -->
+ <map code="0xc57b" name="1em"/><!-- HANGUL SYLLABLE AEH -->
+ <map code="0xc57c" name="1em"/><!-- HANGUL SYLLABLE YA -->
+ <map code="0xc57d" name="1em"/><!-- HANGUL SYLLABLE YAG -->
+ <map code="0xc57e" name="1em"/><!-- HANGUL SYLLABLE YAGG -->
+ <map code="0xc57f" name="1em"/><!-- HANGUL SYLLABLE YAGS -->
+ <map code="0xc580" name="1em"/><!-- HANGUL SYLLABLE YAN -->
+ <map code="0xc581" name="1em"/><!-- HANGUL SYLLABLE YANJ -->
+ <map code="0xc582" name="1em"/><!-- HANGUL SYLLABLE YANH -->
+ <map code="0xc583" name="1em"/><!-- HANGUL SYLLABLE YAD -->
+ <map code="0xc584" name="1em"/><!-- HANGUL SYLLABLE YAL -->
+ <map code="0xc585" name="1em"/><!-- HANGUL SYLLABLE YALG -->
+ <map code="0xc586" name="1em"/><!-- HANGUL SYLLABLE YALM -->
+ <map code="0xc587" name="1em"/><!-- HANGUL SYLLABLE YALB -->
+ <map code="0xc588" name="1em"/><!-- HANGUL SYLLABLE YALS -->
+ <map code="0xc589" name="1em"/><!-- HANGUL SYLLABLE YALT -->
+ <map code="0xc58a" name="1em"/><!-- HANGUL SYLLABLE YALP -->
+ <map code="0xc58b" name="1em"/><!-- HANGUL SYLLABLE YALH -->
+ <map code="0xc58c" name="1em"/><!-- HANGUL SYLLABLE YAM -->
+ <map code="0xc58d" name="1em"/><!-- HANGUL SYLLABLE YAB -->
+ <map code="0xc58e" name="1em"/><!-- HANGUL SYLLABLE YABS -->
+ <map code="0xc58f" name="1em"/><!-- HANGUL SYLLABLE YAS -->
+ <map code="0xc590" name="1em"/><!-- HANGUL SYLLABLE YASS -->
+ <map code="0xc591" name="1em"/><!-- HANGUL SYLLABLE YANG -->
+ <map code="0xc592" name="1em"/><!-- HANGUL SYLLABLE YAJ -->
+ <map code="0xc593" name="1em"/><!-- HANGUL SYLLABLE YAC -->
+ <map code="0xc594" name="1em"/><!-- HANGUL SYLLABLE YAK -->
+ <map code="0xc595" name="1em"/><!-- HANGUL SYLLABLE YAT -->
+ <map code="0xc596" name="1em"/><!-- HANGUL SYLLABLE YAP -->
+ <map code="0xc597" name="1em"/><!-- HANGUL SYLLABLE YAH -->
+ <map code="0xc598" name="1em"/><!-- HANGUL SYLLABLE YAE -->
+ <map code="0xc599" name="1em"/><!-- HANGUL SYLLABLE YAEG -->
+ <map code="0xc59a" name="1em"/><!-- HANGUL SYLLABLE YAEGG -->
+ <map code="0xc59b" name="1em"/><!-- HANGUL SYLLABLE YAEGS -->
+ <map code="0xc59c" name="1em"/><!-- HANGUL SYLLABLE YAEN -->
+ <map code="0xc59d" name="1em"/><!-- HANGUL SYLLABLE YAENJ -->
+ <map code="0xc59e" name="1em"/><!-- HANGUL SYLLABLE YAENH -->
+ <map code="0xc59f" name="1em"/><!-- HANGUL SYLLABLE YAED -->
+ <map code="0xc5a0" name="1em"/><!-- HANGUL SYLLABLE YAEL -->
+ <map code="0xc5a1" name="1em"/><!-- HANGUL SYLLABLE YAELG -->
+ <map code="0xc5a2" name="1em"/><!-- HANGUL SYLLABLE YAELM -->
+ <map code="0xc5a3" name="1em"/><!-- HANGUL SYLLABLE YAELB -->
+ <map code="0xc5a4" name="1em"/><!-- HANGUL SYLLABLE YAELS -->
+ <map code="0xc5a5" name="1em"/><!-- HANGUL SYLLABLE YAELT -->
+ <map code="0xc5a6" name="1em"/><!-- HANGUL SYLLABLE YAELP -->
+ <map code="0xc5a7" name="1em"/><!-- HANGUL SYLLABLE YAELH -->
+ <map code="0xc5a8" name="1em"/><!-- HANGUL SYLLABLE YAEM -->
+ <map code="0xc5a9" name="1em"/><!-- HANGUL SYLLABLE YAEB -->
+ <map code="0xc5aa" name="1em"/><!-- HANGUL SYLLABLE YAEBS -->
+ <map code="0xc5ab" name="1em"/><!-- HANGUL SYLLABLE YAES -->
+ <map code="0xc5ac" name="1em"/><!-- HANGUL SYLLABLE YAESS -->
+ <map code="0xc5ad" name="1em"/><!-- HANGUL SYLLABLE YAENG -->
+ <map code="0xc5ae" name="1em"/><!-- HANGUL SYLLABLE YAEJ -->
+ <map code="0xc5af" name="1em"/><!-- HANGUL SYLLABLE YAEC -->
+ <map code="0xc5b0" name="1em"/><!-- HANGUL SYLLABLE YAEK -->
+ <map code="0xc5b1" name="1em"/><!-- HANGUL SYLLABLE YAET -->
+ <map code="0xc5b2" name="1em"/><!-- HANGUL SYLLABLE YAEP -->
+ <map code="0xc5b3" name="1em"/><!-- HANGUL SYLLABLE YAEH -->
+ <map code="0xc5b4" name="1em"/><!-- HANGUL SYLLABLE EO -->
+ <map code="0xc5b5" name="1em"/><!-- HANGUL SYLLABLE EOG -->
+ <map code="0xc5b6" name="1em"/><!-- HANGUL SYLLABLE EOGG -->
+ <map code="0xc5b7" name="1em"/><!-- HANGUL SYLLABLE EOGS -->
+ <map code="0xc5b8" name="1em"/><!-- HANGUL SYLLABLE EON -->
+ <map code="0xc5b9" name="1em"/><!-- HANGUL SYLLABLE EONJ -->
+ <map code="0xc5ba" name="1em"/><!-- HANGUL SYLLABLE EONH -->
+ <map code="0xc5bb" name="1em"/><!-- HANGUL SYLLABLE EOD -->
+ <map code="0xc5bc" name="1em"/><!-- HANGUL SYLLABLE EOL -->
+ <map code="0xc5bd" name="1em"/><!-- HANGUL SYLLABLE EOLG -->
+ <map code="0xc5be" name="1em"/><!-- HANGUL SYLLABLE EOLM -->
+ <map code="0xc5bf" name="1em"/><!-- HANGUL SYLLABLE EOLB -->
+ <map code="0xc5c0" name="1em"/><!-- HANGUL SYLLABLE EOLS -->
+ <map code="0xc5c1" name="1em"/><!-- HANGUL SYLLABLE EOLT -->
+ <map code="0xc5c2" name="1em"/><!-- HANGUL SYLLABLE EOLP -->
+ <map code="0xc5c3" name="1em"/><!-- HANGUL SYLLABLE EOLH -->
+ <map code="0xc5c4" name="1em"/><!-- HANGUL SYLLABLE EOM -->
+ <map code="0xc5c5" name="1em"/><!-- HANGUL SYLLABLE EOB -->
+ <map code="0xc5c6" name="1em"/><!-- HANGUL SYLLABLE EOBS -->
+ <map code="0xc5c7" name="1em"/><!-- HANGUL SYLLABLE EOS -->
+ <map code="0xc5c8" name="1em"/><!-- HANGUL SYLLABLE EOSS -->
+ <map code="0xc5c9" name="1em"/><!-- HANGUL SYLLABLE EONG -->
+ <map code="0xc5ca" name="1em"/><!-- HANGUL SYLLABLE EOJ -->
+ <map code="0xc5cb" name="1em"/><!-- HANGUL SYLLABLE EOC -->
+ <map code="0xc5cc" name="1em"/><!-- HANGUL SYLLABLE EOK -->
+ <map code="0xc5cd" name="1em"/><!-- HANGUL SYLLABLE EOT -->
+ <map code="0xc5ce" name="1em"/><!-- HANGUL SYLLABLE EOP -->
+ <map code="0xc5cf" name="1em"/><!-- HANGUL SYLLABLE EOH -->
+ <map code="0xc5d0" name="1em"/><!-- HANGUL SYLLABLE E -->
+ <map code="0xc5d1" name="1em"/><!-- HANGUL SYLLABLE EG -->
+ <map code="0xc5d2" name="1em"/><!-- HANGUL SYLLABLE EGG -->
+ <map code="0xc5d3" name="1em"/><!-- HANGUL SYLLABLE EGS -->
+ <map code="0xc5d4" name="1em"/><!-- HANGUL SYLLABLE EN -->
+ <map code="0xc5d5" name="1em"/><!-- HANGUL SYLLABLE ENJ -->
+ <map code="0xc5d6" name="1em"/><!-- HANGUL SYLLABLE ENH -->
+ <map code="0xc5d7" name="1em"/><!-- HANGUL SYLLABLE ED -->
+ <map code="0xc5d8" name="1em"/><!-- HANGUL SYLLABLE EL -->
+ <map code="0xc5d9" name="1em"/><!-- HANGUL SYLLABLE ELG -->
+ <map code="0xc5da" name="1em"/><!-- HANGUL SYLLABLE ELM -->
+ <map code="0xc5db" name="1em"/><!-- HANGUL SYLLABLE ELB -->
+ <map code="0xc5dc" name="1em"/><!-- HANGUL SYLLABLE ELS -->
+ <map code="0xc5dd" name="1em"/><!-- HANGUL SYLLABLE ELT -->
+ <map code="0xc5de" name="1em"/><!-- HANGUL SYLLABLE ELP -->
+ <map code="0xc5df" name="1em"/><!-- HANGUL SYLLABLE ELH -->
+ <map code="0xc5e0" name="1em"/><!-- HANGUL SYLLABLE EM -->
+ <map code="0xc5e1" name="1em"/><!-- HANGUL SYLLABLE EB -->
+ <map code="0xc5e2" name="1em"/><!-- HANGUL SYLLABLE EBS -->
+ <map code="0xc5e3" name="1em"/><!-- HANGUL SYLLABLE ES -->
+ <map code="0xc5e4" name="1em"/><!-- HANGUL SYLLABLE ESS -->
+ <map code="0xc5e5" name="1em"/><!-- HANGUL SYLLABLE ENG -->
+ <map code="0xc5e6" name="1em"/><!-- HANGUL SYLLABLE EJ -->
+ <map code="0xc5e7" name="1em"/><!-- HANGUL SYLLABLE EC -->
+ <map code="0xc5e8" name="1em"/><!-- HANGUL SYLLABLE EK -->
+ <map code="0xc5e9" name="1em"/><!-- HANGUL SYLLABLE ET -->
+ <map code="0xc5ea" name="1em"/><!-- HANGUL SYLLABLE EP -->
+ <map code="0xc5eb" name="1em"/><!-- HANGUL SYLLABLE EH -->
+ <map code="0xc5ec" name="1em"/><!-- HANGUL SYLLABLE YEO -->
+ <map code="0xc5ed" name="1em"/><!-- HANGUL SYLLABLE YEOG -->
+ <map code="0xc5ee" name="1em"/><!-- HANGUL SYLLABLE YEOGG -->
+ <map code="0xc5ef" name="1em"/><!-- HANGUL SYLLABLE YEOGS -->
+ <map code="0xc5f0" name="1em"/><!-- HANGUL SYLLABLE YEON -->
+ <map code="0xc5f1" name="1em"/><!-- HANGUL SYLLABLE YEONJ -->
+ <map code="0xc5f2" name="1em"/><!-- HANGUL SYLLABLE YEONH -->
+ <map code="0xc5f3" name="1em"/><!-- HANGUL SYLLABLE YEOD -->
+ <map code="0xc5f4" name="1em"/><!-- HANGUL SYLLABLE YEOL -->
+ <map code="0xc5f5" name="1em"/><!-- HANGUL SYLLABLE YEOLG -->
+ <map code="0xc5f6" name="1em"/><!-- HANGUL SYLLABLE YEOLM -->
+ <map code="0xc5f7" name="1em"/><!-- HANGUL SYLLABLE YEOLB -->
+ <map code="0xc5f8" name="1em"/><!-- HANGUL SYLLABLE YEOLS -->
+ <map code="0xc5f9" name="1em"/><!-- HANGUL SYLLABLE YEOLT -->
+ <map code="0xc5fa" name="1em"/><!-- HANGUL SYLLABLE YEOLP -->
+ <map code="0xc5fb" name="1em"/><!-- HANGUL SYLLABLE YEOLH -->
+ <map code="0xc5fc" name="1em"/><!-- HANGUL SYLLABLE YEOM -->
+ <map code="0xc5fd" name="1em"/><!-- HANGUL SYLLABLE YEOB -->
+ <map code="0xc5fe" name="1em"/><!-- HANGUL SYLLABLE YEOBS -->
+ <map code="0xc5ff" name="1em"/><!-- HANGUL SYLLABLE YEOS -->
+ <map code="0xc600" name="1em"/><!-- HANGUL SYLLABLE YEOSS -->
+ <map code="0xc601" name="1em"/><!-- HANGUL SYLLABLE YEONG -->
+ <map code="0xc602" name="1em"/><!-- HANGUL SYLLABLE YEOJ -->
+ <map code="0xc603" name="1em"/><!-- HANGUL SYLLABLE YEOC -->
+ <map code="0xc604" name="1em"/><!-- HANGUL SYLLABLE YEOK -->
+ <map code="0xc605" name="1em"/><!-- HANGUL SYLLABLE YEOT -->
+ <map code="0xc606" name="1em"/><!-- HANGUL SYLLABLE YEOP -->
+ <map code="0xc607" name="1em"/><!-- HANGUL SYLLABLE YEOH -->
+ <map code="0xc608" name="1em"/><!-- HANGUL SYLLABLE YE -->
+ <map code="0xc609" name="1em"/><!-- HANGUL SYLLABLE YEG -->
+ <map code="0xc60a" name="1em"/><!-- HANGUL SYLLABLE YEGG -->
+ <map code="0xc60b" name="1em"/><!-- HANGUL SYLLABLE YEGS -->
+ <map code="0xc60c" name="1em"/><!-- HANGUL SYLLABLE YEN -->
+ <map code="0xc60d" name="1em"/><!-- HANGUL SYLLABLE YENJ -->
+ <map code="0xc60e" name="1em"/><!-- HANGUL SYLLABLE YENH -->
+ <map code="0xc60f" name="1em"/><!-- HANGUL SYLLABLE YED -->
+ <map code="0xc610" name="1em"/><!-- HANGUL SYLLABLE YEL -->
+ <map code="0xc611" name="1em"/><!-- HANGUL SYLLABLE YELG -->
+ <map code="0xc612" name="1em"/><!-- HANGUL SYLLABLE YELM -->
+ <map code="0xc613" name="1em"/><!-- HANGUL SYLLABLE YELB -->
+ <map code="0xc614" name="1em"/><!-- HANGUL SYLLABLE YELS -->
+ <map code="0xc615" name="1em"/><!-- HANGUL SYLLABLE YELT -->
+ <map code="0xc616" name="1em"/><!-- HANGUL SYLLABLE YELP -->
+ <map code="0xc617" name="1em"/><!-- HANGUL SYLLABLE YELH -->
+ <map code="0xc618" name="1em"/><!-- HANGUL SYLLABLE YEM -->
+ <map code="0xc619" name="1em"/><!-- HANGUL SYLLABLE YEB -->
+ <map code="0xc61a" name="1em"/><!-- HANGUL SYLLABLE YEBS -->
+ <map code="0xc61b" name="1em"/><!-- HANGUL SYLLABLE YES -->
+ <map code="0xc61c" name="1em"/><!-- HANGUL SYLLABLE YESS -->
+ <map code="0xc61d" name="1em"/><!-- HANGUL SYLLABLE YENG -->
+ <map code="0xc61e" name="1em"/><!-- HANGUL SYLLABLE YEJ -->
+ <map code="0xc61f" name="1em"/><!-- HANGUL SYLLABLE YEC -->
+ <map code="0xc620" name="1em"/><!-- HANGUL SYLLABLE YEK -->
+ <map code="0xc621" name="1em"/><!-- HANGUL SYLLABLE YET -->
+ <map code="0xc622" name="1em"/><!-- HANGUL SYLLABLE YEP -->
+ <map code="0xc623" name="1em"/><!-- HANGUL SYLLABLE YEH -->
+ <map code="0xc624" name="1em"/><!-- HANGUL SYLLABLE O -->
+ <map code="0xc625" name="1em"/><!-- HANGUL SYLLABLE OG -->
+ <map code="0xc626" name="1em"/><!-- HANGUL SYLLABLE OGG -->
+ <map code="0xc627" name="1em"/><!-- HANGUL SYLLABLE OGS -->
+ <map code="0xc628" name="1em"/><!-- HANGUL SYLLABLE ON -->
+ <map code="0xc629" name="1em"/><!-- HANGUL SYLLABLE ONJ -->
+ <map code="0xc62a" name="1em"/><!-- HANGUL SYLLABLE ONH -->
+ <map code="0xc62b" name="1em"/><!-- HANGUL SYLLABLE OD -->
+ <map code="0xc62c" name="1em"/><!-- HANGUL SYLLABLE OL -->
+ <map code="0xc62d" name="1em"/><!-- HANGUL SYLLABLE OLG -->
+ <map code="0xc62e" name="1em"/><!-- HANGUL SYLLABLE OLM -->
+ <map code="0xc62f" name="1em"/><!-- HANGUL SYLLABLE OLB -->
+ <map code="0xc630" name="1em"/><!-- HANGUL SYLLABLE OLS -->
+ <map code="0xc631" name="1em"/><!-- HANGUL SYLLABLE OLT -->
+ <map code="0xc632" name="1em"/><!-- HANGUL SYLLABLE OLP -->
+ <map code="0xc633" name="1em"/><!-- HANGUL SYLLABLE OLH -->
+ <map code="0xc634" name="1em"/><!-- HANGUL SYLLABLE OM -->
+ <map code="0xc635" name="1em"/><!-- HANGUL SYLLABLE OB -->
+ <map code="0xc636" name="1em"/><!-- HANGUL SYLLABLE OBS -->
+ <map code="0xc637" name="1em"/><!-- HANGUL SYLLABLE OS -->
+ <map code="0xc638" name="1em"/><!-- HANGUL SYLLABLE OSS -->
+ <map code="0xc639" name="1em"/><!-- HANGUL SYLLABLE ONG -->
+ <map code="0xc63a" name="1em"/><!-- HANGUL SYLLABLE OJ -->
+ <map code="0xc63b" name="1em"/><!-- HANGUL SYLLABLE OC -->
+ <map code="0xc63c" name="1em"/><!-- HANGUL SYLLABLE OK -->
+ <map code="0xc63d" name="1em"/><!-- HANGUL SYLLABLE OT -->
+ <map code="0xc63e" name="1em"/><!-- HANGUL SYLLABLE OP -->
+ <map code="0xc63f" name="1em"/><!-- HANGUL SYLLABLE OH -->
+ <map code="0xc640" name="1em"/><!-- HANGUL SYLLABLE WA -->
+ <map code="0xc641" name="1em"/><!-- HANGUL SYLLABLE WAG -->
+ <map code="0xc642" name="1em"/><!-- HANGUL SYLLABLE WAGG -->
+ <map code="0xc643" name="1em"/><!-- HANGUL SYLLABLE WAGS -->
+ <map code="0xc644" name="1em"/><!-- HANGUL SYLLABLE WAN -->
+ <map code="0xc645" name="1em"/><!-- HANGUL SYLLABLE WANJ -->
+ <map code="0xc646" name="1em"/><!-- HANGUL SYLLABLE WANH -->
+ <map code="0xc647" name="1em"/><!-- HANGUL SYLLABLE WAD -->
+ <map code="0xc648" name="1em"/><!-- HANGUL SYLLABLE WAL -->
+ <map code="0xc649" name="1em"/><!-- HANGUL SYLLABLE WALG -->
+ <map code="0xc64a" name="1em"/><!-- HANGUL SYLLABLE WALM -->
+ <map code="0xc64b" name="1em"/><!-- HANGUL SYLLABLE WALB -->
+ <map code="0xc64c" name="1em"/><!-- HANGUL SYLLABLE WALS -->
+ <map code="0xc64d" name="1em"/><!-- HANGUL SYLLABLE WALT -->
+ <map code="0xc64e" name="1em"/><!-- HANGUL SYLLABLE WALP -->
+ <map code="0xc64f" name="1em"/><!-- HANGUL SYLLABLE WALH -->
+ <map code="0xc650" name="1em"/><!-- HANGUL SYLLABLE WAM -->
+ <map code="0xc651" name="1em"/><!-- HANGUL SYLLABLE WAB -->
+ <map code="0xc652" name="1em"/><!-- HANGUL SYLLABLE WABS -->
+ <map code="0xc653" name="1em"/><!-- HANGUL SYLLABLE WAS -->
+ <map code="0xc654" name="1em"/><!-- HANGUL SYLLABLE WASS -->
+ <map code="0xc655" name="1em"/><!-- HANGUL SYLLABLE WANG -->
+ <map code="0xc656" name="1em"/><!-- HANGUL SYLLABLE WAJ -->
+ <map code="0xc657" name="1em"/><!-- HANGUL SYLLABLE WAC -->
+ <map code="0xc658" name="1em"/><!-- HANGUL SYLLABLE WAK -->
+ <map code="0xc659" name="1em"/><!-- HANGUL SYLLABLE WAT -->
+ <map code="0xc65a" name="1em"/><!-- HANGUL SYLLABLE WAP -->
+ <map code="0xc65b" name="1em"/><!-- HANGUL SYLLABLE WAH -->
+ <map code="0xc65c" name="1em"/><!-- HANGUL SYLLABLE WAE -->
+ <map code="0xc65d" name="1em"/><!-- HANGUL SYLLABLE WAEG -->
+ <map code="0xc65e" name="1em"/><!-- HANGUL SYLLABLE WAEGG -->
+ <map code="0xc65f" name="1em"/><!-- HANGUL SYLLABLE WAEGS -->
+ <map code="0xc660" name="1em"/><!-- HANGUL SYLLABLE WAEN -->
+ <map code="0xc661" name="1em"/><!-- HANGUL SYLLABLE WAENJ -->
+ <map code="0xc662" name="1em"/><!-- HANGUL SYLLABLE WAENH -->
+ <map code="0xc663" name="1em"/><!-- HANGUL SYLLABLE WAED -->
+ <map code="0xc664" name="1em"/><!-- HANGUL SYLLABLE WAEL -->
+ <map code="0xc665" name="1em"/><!-- HANGUL SYLLABLE WAELG -->
+ <map code="0xc666" name="1em"/><!-- HANGUL SYLLABLE WAELM -->
+ <map code="0xc667" name="1em"/><!-- HANGUL SYLLABLE WAELB -->
+ <map code="0xc668" name="1em"/><!-- HANGUL SYLLABLE WAELS -->
+ <map code="0xc669" name="1em"/><!-- HANGUL SYLLABLE WAELT -->
+ <map code="0xc66a" name="1em"/><!-- HANGUL SYLLABLE WAELP -->
+ <map code="0xc66b" name="1em"/><!-- HANGUL SYLLABLE WAELH -->
+ <map code="0xc66c" name="1em"/><!-- HANGUL SYLLABLE WAEM -->
+ <map code="0xc66d" name="1em"/><!-- HANGUL SYLLABLE WAEB -->
+ <map code="0xc66e" name="1em"/><!-- HANGUL SYLLABLE WAEBS -->
+ <map code="0xc66f" name="1em"/><!-- HANGUL SYLLABLE WAES -->
+ <map code="0xc670" name="1em"/><!-- HANGUL SYLLABLE WAESS -->
+ <map code="0xc671" name="1em"/><!-- HANGUL SYLLABLE WAENG -->
+ <map code="0xc672" name="1em"/><!-- HANGUL SYLLABLE WAEJ -->
+ <map code="0xc673" name="1em"/><!-- HANGUL SYLLABLE WAEC -->
+ <map code="0xc674" name="1em"/><!-- HANGUL SYLLABLE WAEK -->
+ <map code="0xc675" name="1em"/><!-- HANGUL SYLLABLE WAET -->
+ <map code="0xc676" name="1em"/><!-- HANGUL SYLLABLE WAEP -->
+ <map code="0xc677" name="1em"/><!-- HANGUL SYLLABLE WAEH -->
+ <map code="0xc678" name="1em"/><!-- HANGUL SYLLABLE OE -->
+ <map code="0xc679" name="1em"/><!-- HANGUL SYLLABLE OEG -->
+ <map code="0xc67a" name="1em"/><!-- HANGUL SYLLABLE OEGG -->
+ <map code="0xc67b" name="1em"/><!-- HANGUL SYLLABLE OEGS -->
+ <map code="0xc67c" name="1em"/><!-- HANGUL SYLLABLE OEN -->
+ <map code="0xc67d" name="1em"/><!-- HANGUL SYLLABLE OENJ -->
+ <map code="0xc67e" name="1em"/><!-- HANGUL SYLLABLE OENH -->
+ <map code="0xc67f" name="1em"/><!-- HANGUL SYLLABLE OED -->
+ <map code="0xc680" name="1em"/><!-- HANGUL SYLLABLE OEL -->
+ <map code="0xc681" name="1em"/><!-- HANGUL SYLLABLE OELG -->
+ <map code="0xc682" name="1em"/><!-- HANGUL SYLLABLE OELM -->
+ <map code="0xc683" name="1em"/><!-- HANGUL SYLLABLE OELB -->
+ <map code="0xc684" name="1em"/><!-- HANGUL SYLLABLE OELS -->
+ <map code="0xc685" name="1em"/><!-- HANGUL SYLLABLE OELT -->
+ <map code="0xc686" name="1em"/><!-- HANGUL SYLLABLE OELP -->
+ <map code="0xc687" name="1em"/><!-- HANGUL SYLLABLE OELH -->
+ <map code="0xc688" name="1em"/><!-- HANGUL SYLLABLE OEM -->
+ <map code="0xc689" name="1em"/><!-- HANGUL SYLLABLE OEB -->
+ <map code="0xc68a" name="1em"/><!-- HANGUL SYLLABLE OEBS -->
+ <map code="0xc68b" name="1em"/><!-- HANGUL SYLLABLE OES -->
+ <map code="0xc68c" name="1em"/><!-- HANGUL SYLLABLE OESS -->
+ <map code="0xc68d" name="1em"/><!-- HANGUL SYLLABLE OENG -->
+ <map code="0xc68e" name="1em"/><!-- HANGUL SYLLABLE OEJ -->
+ <map code="0xc68f" name="1em"/><!-- HANGUL SYLLABLE OEC -->
+ <map code="0xc690" name="1em"/><!-- HANGUL SYLLABLE OEK -->
+ <map code="0xc691" name="1em"/><!-- HANGUL SYLLABLE OET -->
+ <map code="0xc692" name="1em"/><!-- HANGUL SYLLABLE OEP -->
+ <map code="0xc693" name="1em"/><!-- HANGUL SYLLABLE OEH -->
+ <map code="0xc694" name="1em"/><!-- HANGUL SYLLABLE YO -->
+ <map code="0xc695" name="1em"/><!-- HANGUL SYLLABLE YOG -->
+ <map code="0xc696" name="1em"/><!-- HANGUL SYLLABLE YOGG -->
+ <map code="0xc697" name="1em"/><!-- HANGUL SYLLABLE YOGS -->
+ <map code="0xc698" name="1em"/><!-- HANGUL SYLLABLE YON -->
+ <map code="0xc699" name="1em"/><!-- HANGUL SYLLABLE YONJ -->
+ <map code="0xc69a" name="1em"/><!-- HANGUL SYLLABLE YONH -->
+ <map code="0xc69b" name="1em"/><!-- HANGUL SYLLABLE YOD -->
+ <map code="0xc69c" name="1em"/><!-- HANGUL SYLLABLE YOL -->
+ <map code="0xc69d" name="1em"/><!-- HANGUL SYLLABLE YOLG -->
+ <map code="0xc69e" name="1em"/><!-- HANGUL SYLLABLE YOLM -->
+ <map code="0xc69f" name="1em"/><!-- HANGUL SYLLABLE YOLB -->
+ <map code="0xc6a0" name="1em"/><!-- HANGUL SYLLABLE YOLS -->
+ <map code="0xc6a1" name="1em"/><!-- HANGUL SYLLABLE YOLT -->
+ <map code="0xc6a2" name="1em"/><!-- HANGUL SYLLABLE YOLP -->
+ <map code="0xc6a3" name="1em"/><!-- HANGUL SYLLABLE YOLH -->
+ <map code="0xc6a4" name="1em"/><!-- HANGUL SYLLABLE YOM -->
+ <map code="0xc6a5" name="1em"/><!-- HANGUL SYLLABLE YOB -->
+ <map code="0xc6a6" name="1em"/><!-- HANGUL SYLLABLE YOBS -->
+ <map code="0xc6a7" name="1em"/><!-- HANGUL SYLLABLE YOS -->
+ <map code="0xc6a8" name="1em"/><!-- HANGUL SYLLABLE YOSS -->
+ <map code="0xc6a9" name="1em"/><!-- HANGUL SYLLABLE YONG -->
+ <map code="0xc6aa" name="1em"/><!-- HANGUL SYLLABLE YOJ -->
+ <map code="0xc6ab" name="1em"/><!-- HANGUL SYLLABLE YOC -->
+ <map code="0xc6ac" name="1em"/><!-- HANGUL SYLLABLE YOK -->
+ <map code="0xc6ad" name="1em"/><!-- HANGUL SYLLABLE YOT -->
+ <map code="0xc6ae" name="1em"/><!-- HANGUL SYLLABLE YOP -->
+ <map code="0xc6af" name="1em"/><!-- HANGUL SYLLABLE YOH -->
+ <map code="0xc6b0" name="1em"/><!-- HANGUL SYLLABLE U -->
+ <map code="0xc6b1" name="1em"/><!-- HANGUL SYLLABLE UG -->
+ <map code="0xc6b2" name="1em"/><!-- HANGUL SYLLABLE UGG -->
+ <map code="0xc6b3" name="1em"/><!-- HANGUL SYLLABLE UGS -->
+ <map code="0xc6b4" name="1em"/><!-- HANGUL SYLLABLE UN -->
+ <map code="0xc6b5" name="1em"/><!-- HANGUL SYLLABLE UNJ -->
+ <map code="0xc6b6" name="1em"/><!-- HANGUL SYLLABLE UNH -->
+ <map code="0xc6b7" name="1em"/><!-- HANGUL SYLLABLE UD -->
+ <map code="0xc6b8" name="1em"/><!-- HANGUL SYLLABLE UL -->
+ <map code="0xc6b9" name="1em"/><!-- HANGUL SYLLABLE ULG -->
+ <map code="0xc6ba" name="1em"/><!-- HANGUL SYLLABLE ULM -->
+ <map code="0xc6bb" name="1em"/><!-- HANGUL SYLLABLE ULB -->
+ <map code="0xc6bc" name="1em"/><!-- HANGUL SYLLABLE ULS -->
+ <map code="0xc6bd" name="1em"/><!-- HANGUL SYLLABLE ULT -->
+ <map code="0xc6be" name="1em"/><!-- HANGUL SYLLABLE ULP -->
+ <map code="0xc6bf" name="1em"/><!-- HANGUL SYLLABLE ULH -->
+ <map code="0xc6c0" name="1em"/><!-- HANGUL SYLLABLE UM -->
+ <map code="0xc6c1" name="1em"/><!-- HANGUL SYLLABLE UB -->
+ <map code="0xc6c2" name="1em"/><!-- HANGUL SYLLABLE UBS -->
+ <map code="0xc6c3" name="1em"/><!-- HANGUL SYLLABLE US -->
+ <map code="0xc6c4" name="1em"/><!-- HANGUL SYLLABLE USS -->
+ <map code="0xc6c5" name="1em"/><!-- HANGUL SYLLABLE UNG -->
+ <map code="0xc6c6" name="1em"/><!-- HANGUL SYLLABLE UJ -->
+ <map code="0xc6c7" name="1em"/><!-- HANGUL SYLLABLE UC -->
+ <map code="0xc6c8" name="1em"/><!-- HANGUL SYLLABLE UK -->
+ <map code="0xc6c9" name="1em"/><!-- HANGUL SYLLABLE UT -->
+ <map code="0xc6ca" name="1em"/><!-- HANGUL SYLLABLE UP -->
+ <map code="0xc6cb" name="1em"/><!-- HANGUL SYLLABLE UH -->
+ <map code="0xc6cc" name="1em"/><!-- HANGUL SYLLABLE WEO -->
+ <map code="0xc6cd" name="1em"/><!-- HANGUL SYLLABLE WEOG -->
+ <map code="0xc6ce" name="1em"/><!-- HANGUL SYLLABLE WEOGG -->
+ <map code="0xc6cf" name="1em"/><!-- HANGUL SYLLABLE WEOGS -->
+ <map code="0xc6d0" name="1em"/><!-- HANGUL SYLLABLE WEON -->
+ <map code="0xc6d1" name="1em"/><!-- HANGUL SYLLABLE WEONJ -->
+ <map code="0xc6d2" name="1em"/><!-- HANGUL SYLLABLE WEONH -->
+ <map code="0xc6d3" name="1em"/><!-- HANGUL SYLLABLE WEOD -->
+ <map code="0xc6d4" name="1em"/><!-- HANGUL SYLLABLE WEOL -->
+ <map code="0xc6d5" name="1em"/><!-- HANGUL SYLLABLE WEOLG -->
+ <map code="0xc6d6" name="1em"/><!-- HANGUL SYLLABLE WEOLM -->
+ <map code="0xc6d7" name="1em"/><!-- HANGUL SYLLABLE WEOLB -->
+ <map code="0xc6d8" name="1em"/><!-- HANGUL SYLLABLE WEOLS -->
+ <map code="0xc6d9" name="1em"/><!-- HANGUL SYLLABLE WEOLT -->
+ <map code="0xc6da" name="1em"/><!-- HANGUL SYLLABLE WEOLP -->
+ <map code="0xc6db" name="1em"/><!-- HANGUL SYLLABLE WEOLH -->
+ <map code="0xc6dc" name="1em"/><!-- HANGUL SYLLABLE WEOM -->
+ <map code="0xc6dd" name="1em"/><!-- HANGUL SYLLABLE WEOB -->
+ <map code="0xc6de" name="1em"/><!-- HANGUL SYLLABLE WEOBS -->
+ <map code="0xc6df" name="1em"/><!-- HANGUL SYLLABLE WEOS -->
+ <map code="0xc6e0" name="1em"/><!-- HANGUL SYLLABLE WEOSS -->
+ <map code="0xc6e1" name="1em"/><!-- HANGUL SYLLABLE WEONG -->
+ <map code="0xc6e2" name="1em"/><!-- HANGUL SYLLABLE WEOJ -->
+ <map code="0xc6e3" name="1em"/><!-- HANGUL SYLLABLE WEOC -->
+ <map code="0xc6e4" name="1em"/><!-- HANGUL SYLLABLE WEOK -->
+ <map code="0xc6e5" name="1em"/><!-- HANGUL SYLLABLE WEOT -->
+ <map code="0xc6e6" name="1em"/><!-- HANGUL SYLLABLE WEOP -->
+ <map code="0xc6e7" name="1em"/><!-- HANGUL SYLLABLE WEOH -->
+ <map code="0xc6e8" name="1em"/><!-- HANGUL SYLLABLE WE -->
+ <map code="0xc6e9" name="1em"/><!-- HANGUL SYLLABLE WEG -->
+ <map code="0xc6ea" name="1em"/><!-- HANGUL SYLLABLE WEGG -->
+ <map code="0xc6eb" name="1em"/><!-- HANGUL SYLLABLE WEGS -->
+ <map code="0xc6ec" name="1em"/><!-- HANGUL SYLLABLE WEN -->
+ <map code="0xc6ed" name="1em"/><!-- HANGUL SYLLABLE WENJ -->
+ <map code="0xc6ee" name="1em"/><!-- HANGUL SYLLABLE WENH -->
+ <map code="0xc6ef" name="1em"/><!-- HANGUL SYLLABLE WED -->
+ <map code="0xc6f0" name="1em"/><!-- HANGUL SYLLABLE WEL -->
+ <map code="0xc6f1" name="1em"/><!-- HANGUL SYLLABLE WELG -->
+ <map code="0xc6f2" name="1em"/><!-- HANGUL SYLLABLE WELM -->
+ <map code="0xc6f3" name="1em"/><!-- HANGUL SYLLABLE WELB -->
+ <map code="0xc6f4" name="1em"/><!-- HANGUL SYLLABLE WELS -->
+ <map code="0xc6f5" name="1em"/><!-- HANGUL SYLLABLE WELT -->
+ <map code="0xc6f6" name="1em"/><!-- HANGUL SYLLABLE WELP -->
+ <map code="0xc6f7" name="1em"/><!-- HANGUL SYLLABLE WELH -->
+ <map code="0xc6f8" name="1em"/><!-- HANGUL SYLLABLE WEM -->
+ <map code="0xc6f9" name="1em"/><!-- HANGUL SYLLABLE WEB -->
+ <map code="0xc6fa" name="1em"/><!-- HANGUL SYLLABLE WEBS -->
+ <map code="0xc6fb" name="1em"/><!-- HANGUL SYLLABLE WES -->
+ <map code="0xc6fc" name="1em"/><!-- HANGUL SYLLABLE WESS -->
+ <map code="0xc6fd" name="1em"/><!-- HANGUL SYLLABLE WENG -->
+ <map code="0xc6fe" name="1em"/><!-- HANGUL SYLLABLE WEJ -->
+ <map code="0xc6ff" name="1em"/><!-- HANGUL SYLLABLE WEC -->
+ <map code="0xc700" name="1em"/><!-- HANGUL SYLLABLE WEK -->
+ <map code="0xc701" name="1em"/><!-- HANGUL SYLLABLE WET -->
+ <map code="0xc702" name="1em"/><!-- HANGUL SYLLABLE WEP -->
+ <map code="0xc703" name="1em"/><!-- HANGUL SYLLABLE WEH -->
+ <map code="0xc704" name="1em"/><!-- HANGUL SYLLABLE WI -->
+ <map code="0xc705" name="1em"/><!-- HANGUL SYLLABLE WIG -->
+ <map code="0xc706" name="1em"/><!-- HANGUL SYLLABLE WIGG -->
+ <map code="0xc707" name="1em"/><!-- HANGUL SYLLABLE WIGS -->
+ <map code="0xc708" name="1em"/><!-- HANGUL SYLLABLE WIN -->
+ <map code="0xc709" name="1em"/><!-- HANGUL SYLLABLE WINJ -->
+ <map code="0xc70a" name="1em"/><!-- HANGUL SYLLABLE WINH -->
+ <map code="0xc70b" name="1em"/><!-- HANGUL SYLLABLE WID -->
+ <map code="0xc70c" name="1em"/><!-- HANGUL SYLLABLE WIL -->
+ <map code="0xc70d" name="1em"/><!-- HANGUL SYLLABLE WILG -->
+ <map code="0xc70e" name="1em"/><!-- HANGUL SYLLABLE WILM -->
+ <map code="0xc70f" name="1em"/><!-- HANGUL SYLLABLE WILB -->
+ <map code="0xc710" name="1em"/><!-- HANGUL SYLLABLE WILS -->
+ <map code="0xc711" name="1em"/><!-- HANGUL SYLLABLE WILT -->
+ <map code="0xc712" name="1em"/><!-- HANGUL SYLLABLE WILP -->
+ <map code="0xc713" name="1em"/><!-- HANGUL SYLLABLE WILH -->
+ <map code="0xc714" name="1em"/><!-- HANGUL SYLLABLE WIM -->
+ <map code="0xc715" name="1em"/><!-- HANGUL SYLLABLE WIB -->
+ <map code="0xc716" name="1em"/><!-- HANGUL SYLLABLE WIBS -->
+ <map code="0xc717" name="1em"/><!-- HANGUL SYLLABLE WIS -->
+ <map code="0xc718" name="1em"/><!-- HANGUL SYLLABLE WISS -->
+ <map code="0xc719" name="1em"/><!-- HANGUL SYLLABLE WING -->
+ <map code="0xc71a" name="1em"/><!-- HANGUL SYLLABLE WIJ -->
+ <map code="0xc71b" name="1em"/><!-- HANGUL SYLLABLE WIC -->
+ <map code="0xc71c" name="1em"/><!-- HANGUL SYLLABLE WIK -->
+ <map code="0xc71d" name="1em"/><!-- HANGUL SYLLABLE WIT -->
+ <map code="0xc71e" name="1em"/><!-- HANGUL SYLLABLE WIP -->
+ <map code="0xc71f" name="1em"/><!-- HANGUL SYLLABLE WIH -->
+ <map code="0xc720" name="1em"/><!-- HANGUL SYLLABLE YU -->
+ <map code="0xc721" name="1em"/><!-- HANGUL SYLLABLE YUG -->
+ <map code="0xc722" name="1em"/><!-- HANGUL SYLLABLE YUGG -->
+ <map code="0xc723" name="1em"/><!-- HANGUL SYLLABLE YUGS -->
+ <map code="0xc724" name="1em"/><!-- HANGUL SYLLABLE YUN -->
+ <map code="0xc725" name="1em"/><!-- HANGUL SYLLABLE YUNJ -->
+ <map code="0xc726" name="1em"/><!-- HANGUL SYLLABLE YUNH -->
+ <map code="0xc727" name="1em"/><!-- HANGUL SYLLABLE YUD -->
+ <map code="0xc728" name="1em"/><!-- HANGUL SYLLABLE YUL -->
+ <map code="0xc729" name="1em"/><!-- HANGUL SYLLABLE YULG -->
+ <map code="0xc72a" name="1em"/><!-- HANGUL SYLLABLE YULM -->
+ <map code="0xc72b" name="1em"/><!-- HANGUL SYLLABLE YULB -->
+ <map code="0xc72c" name="1em"/><!-- HANGUL SYLLABLE YULS -->
+ <map code="0xc72d" name="1em"/><!-- HANGUL SYLLABLE YULT -->
+ <map code="0xc72e" name="1em"/><!-- HANGUL SYLLABLE YULP -->
+ <map code="0xc72f" name="1em"/><!-- HANGUL SYLLABLE YULH -->
+ <map code="0xc730" name="1em"/><!-- HANGUL SYLLABLE YUM -->
+ <map code="0xc731" name="1em"/><!-- HANGUL SYLLABLE YUB -->
+ <map code="0xc732" name="1em"/><!-- HANGUL SYLLABLE YUBS -->
+ <map code="0xc733" name="1em"/><!-- HANGUL SYLLABLE YUS -->
+ <map code="0xc734" name="1em"/><!-- HANGUL SYLLABLE YUSS -->
+ <map code="0xc735" name="1em"/><!-- HANGUL SYLLABLE YUNG -->
+ <map code="0xc736" name="1em"/><!-- HANGUL SYLLABLE YUJ -->
+ <map code="0xc737" name="1em"/><!-- HANGUL SYLLABLE YUC -->
+ <map code="0xc738" name="1em"/><!-- HANGUL SYLLABLE YUK -->
+ <map code="0xc739" name="1em"/><!-- HANGUL SYLLABLE YUT -->
+ <map code="0xc73a" name="1em"/><!-- HANGUL SYLLABLE YUP -->
+ <map code="0xc73b" name="1em"/><!-- HANGUL SYLLABLE YUH -->
+ <map code="0xc73c" name="1em"/><!-- HANGUL SYLLABLE EU -->
+ <map code="0xc73d" name="1em"/><!-- HANGUL SYLLABLE EUG -->
+ <map code="0xc73e" name="1em"/><!-- HANGUL SYLLABLE EUGG -->
+ <map code="0xc73f" name="1em"/><!-- HANGUL SYLLABLE EUGS -->
+ <map code="0xc740" name="1em"/><!-- HANGUL SYLLABLE EUN -->
+ <map code="0xc741" name="1em"/><!-- HANGUL SYLLABLE EUNJ -->
+ <map code="0xc742" name="1em"/><!-- HANGUL SYLLABLE EUNH -->
+ <map code="0xc743" name="1em"/><!-- HANGUL SYLLABLE EUD -->
+ <map code="0xc744" name="1em"/><!-- HANGUL SYLLABLE EUL -->
+ <map code="0xc745" name="1em"/><!-- HANGUL SYLLABLE EULG -->
+ <map code="0xc746" name="1em"/><!-- HANGUL SYLLABLE EULM -->
+ <map code="0xc747" name="1em"/><!-- HANGUL SYLLABLE EULB -->
+ <map code="0xc748" name="1em"/><!-- HANGUL SYLLABLE EULS -->
+ <map code="0xc749" name="1em"/><!-- HANGUL SYLLABLE EULT -->
+ <map code="0xc74a" name="1em"/><!-- HANGUL SYLLABLE EULP -->
+ <map code="0xc74b" name="1em"/><!-- HANGUL SYLLABLE EULH -->
+ <map code="0xc74c" name="1em"/><!-- HANGUL SYLLABLE EUM -->
+ <map code="0xc74d" name="1em"/><!-- HANGUL SYLLABLE EUB -->
+ <map code="0xc74e" name="1em"/><!-- HANGUL SYLLABLE EUBS -->
+ <map code="0xc74f" name="1em"/><!-- HANGUL SYLLABLE EUS -->
+ <map code="0xc750" name="1em"/><!-- HANGUL SYLLABLE EUSS -->
+ <map code="0xc751" name="1em"/><!-- HANGUL SYLLABLE EUNG -->
+ <map code="0xc752" name="1em"/><!-- HANGUL SYLLABLE EUJ -->
+ <map code="0xc753" name="1em"/><!-- HANGUL SYLLABLE EUC -->
+ <map code="0xc754" name="1em"/><!-- HANGUL SYLLABLE EUK -->
+ <map code="0xc755" name="1em"/><!-- HANGUL SYLLABLE EUT -->
+ <map code="0xc756" name="1em"/><!-- HANGUL SYLLABLE EUP -->
+ <map code="0xc757" name="1em"/><!-- HANGUL SYLLABLE EUH -->
+ <map code="0xc758" name="1em"/><!-- HANGUL SYLLABLE YI -->
+ <map code="0xc759" name="1em"/><!-- HANGUL SYLLABLE YIG -->
+ <map code="0xc75a" name="1em"/><!-- HANGUL SYLLABLE YIGG -->
+ <map code="0xc75b" name="1em"/><!-- HANGUL SYLLABLE YIGS -->
+ <map code="0xc75c" name="1em"/><!-- HANGUL SYLLABLE YIN -->
+ <map code="0xc75d" name="1em"/><!-- HANGUL SYLLABLE YINJ -->
+ <map code="0xc75e" name="1em"/><!-- HANGUL SYLLABLE YINH -->
+ <map code="0xc75f" name="1em"/><!-- HANGUL SYLLABLE YID -->
+ <map code="0xc760" name="1em"/><!-- HANGUL SYLLABLE YIL -->
+ <map code="0xc761" name="1em"/><!-- HANGUL SYLLABLE YILG -->
+ <map code="0xc762" name="1em"/><!-- HANGUL SYLLABLE YILM -->
+ <map code="0xc763" name="1em"/><!-- HANGUL SYLLABLE YILB -->
+ <map code="0xc764" name="1em"/><!-- HANGUL SYLLABLE YILS -->
+ <map code="0xc765" name="1em"/><!-- HANGUL SYLLABLE YILT -->
+ <map code="0xc766" name="1em"/><!-- HANGUL SYLLABLE YILP -->
+ <map code="0xc767" name="1em"/><!-- HANGUL SYLLABLE YILH -->
+ <map code="0xc768" name="1em"/><!-- HANGUL SYLLABLE YIM -->
+ <map code="0xc769" name="1em"/><!-- HANGUL SYLLABLE YIB -->
+ <map code="0xc76a" name="1em"/><!-- HANGUL SYLLABLE YIBS -->
+ <map code="0xc76b" name="1em"/><!-- HANGUL SYLLABLE YIS -->
+ <map code="0xc76c" name="1em"/><!-- HANGUL SYLLABLE YISS -->
+ <map code="0xc76d" name="1em"/><!-- HANGUL SYLLABLE YING -->
+ <map code="0xc76e" name="1em"/><!-- HANGUL SYLLABLE YIJ -->
+ <map code="0xc76f" name="1em"/><!-- HANGUL SYLLABLE YIC -->
+ <map code="0xc770" name="1em"/><!-- HANGUL SYLLABLE YIK -->
+ <map code="0xc771" name="1em"/><!-- HANGUL SYLLABLE YIT -->
+ <map code="0xc772" name="1em"/><!-- HANGUL SYLLABLE YIP -->
+ <map code="0xc773" name="1em"/><!-- HANGUL SYLLABLE YIH -->
+ <map code="0xc774" name="1em"/><!-- HANGUL SYLLABLE I -->
+ <map code="0xc775" name="1em"/><!-- HANGUL SYLLABLE IG -->
+ <map code="0xc776" name="1em"/><!-- HANGUL SYLLABLE IGG -->
+ <map code="0xc777" name="1em"/><!-- HANGUL SYLLABLE IGS -->
+ <map code="0xc778" name="1em"/><!-- HANGUL SYLLABLE IN -->
+ <map code="0xc779" name="1em"/><!-- HANGUL SYLLABLE INJ -->
+ <map code="0xc77a" name="1em"/><!-- HANGUL SYLLABLE INH -->
+ <map code="0xc77b" name="1em"/><!-- HANGUL SYLLABLE ID -->
+ <map code="0xc77c" name="1em"/><!-- HANGUL SYLLABLE IL -->
+ <map code="0xc77d" name="1em"/><!-- HANGUL SYLLABLE ILG -->
+ <map code="0xc77e" name="1em"/><!-- HANGUL SYLLABLE ILM -->
+ <map code="0xc77f" name="1em"/><!-- HANGUL SYLLABLE ILB -->
+ <map code="0xc780" name="1em"/><!-- HANGUL SYLLABLE ILS -->
+ <map code="0xc781" name="1em"/><!-- HANGUL SYLLABLE ILT -->
+ <map code="0xc782" name="1em"/><!-- HANGUL SYLLABLE ILP -->
+ <map code="0xc783" name="1em"/><!-- HANGUL SYLLABLE ILH -->
+ <map code="0xc784" name="1em"/><!-- HANGUL SYLLABLE IM -->
+ <map code="0xc785" name="1em"/><!-- HANGUL SYLLABLE IB -->
+ <map code="0xc786" name="1em"/><!-- HANGUL SYLLABLE IBS -->
+ <map code="0xc787" name="1em"/><!-- HANGUL SYLLABLE IS -->
+ <map code="0xc788" name="1em"/><!-- HANGUL SYLLABLE ISS -->
+ <map code="0xc789" name="1em"/><!-- HANGUL SYLLABLE ING -->
+ <map code="0xc78a" name="1em"/><!-- HANGUL SYLLABLE IJ -->
+ <map code="0xc78b" name="1em"/><!-- HANGUL SYLLABLE IC -->
+ <map code="0xc78c" name="1em"/><!-- HANGUL SYLLABLE IK -->
+ <map code="0xc78d" name="1em"/><!-- HANGUL SYLLABLE IT -->
+ <map code="0xc78e" name="1em"/><!-- HANGUL SYLLABLE IP -->
+ <map code="0xc78f" name="1em"/><!-- HANGUL SYLLABLE IH -->
+ <map code="0xc790" name="1em"/><!-- HANGUL SYLLABLE JA -->
+ <map code="0xc791" name="1em"/><!-- HANGUL SYLLABLE JAG -->
+ <map code="0xc792" name="1em"/><!-- HANGUL SYLLABLE JAGG -->
+ <map code="0xc793" name="1em"/><!-- HANGUL SYLLABLE JAGS -->
+ <map code="0xc794" name="1em"/><!-- HANGUL SYLLABLE JAN -->
+ <map code="0xc795" name="1em"/><!-- HANGUL SYLLABLE JANJ -->
+ <map code="0xc796" name="1em"/><!-- HANGUL SYLLABLE JANH -->
+ <map code="0xc797" name="1em"/><!-- HANGUL SYLLABLE JAD -->
+ <map code="0xc798" name="1em"/><!-- HANGUL SYLLABLE JAL -->
+ <map code="0xc799" name="1em"/><!-- HANGUL SYLLABLE JALG -->
+ <map code="0xc79a" name="1em"/><!-- HANGUL SYLLABLE JALM -->
+ <map code="0xc79b" name="1em"/><!-- HANGUL SYLLABLE JALB -->
+ <map code="0xc79c" name="1em"/><!-- HANGUL SYLLABLE JALS -->
+ <map code="0xc79d" name="1em"/><!-- HANGUL SYLLABLE JALT -->
+ <map code="0xc79e" name="1em"/><!-- HANGUL SYLLABLE JALP -->
+ <map code="0xc79f" name="1em"/><!-- HANGUL SYLLABLE JALH -->
+ <map code="0xc7a0" name="1em"/><!-- HANGUL SYLLABLE JAM -->
+ <map code="0xc7a1" name="1em"/><!-- HANGUL SYLLABLE JAB -->
+ <map code="0xc7a2" name="1em"/><!-- HANGUL SYLLABLE JABS -->
+ <map code="0xc7a3" name="1em"/><!-- HANGUL SYLLABLE JAS -->
+ <map code="0xc7a4" name="1em"/><!-- HANGUL SYLLABLE JASS -->
+ <map code="0xc7a5" name="1em"/><!-- HANGUL SYLLABLE JANG -->
+ <map code="0xc7a6" name="1em"/><!-- HANGUL SYLLABLE JAJ -->
+ <map code="0xc7a7" name="1em"/><!-- HANGUL SYLLABLE JAC -->
+ <map code="0xc7a8" name="1em"/><!-- HANGUL SYLLABLE JAK -->
+ <map code="0xc7a9" name="1em"/><!-- HANGUL SYLLABLE JAT -->
+ <map code="0xc7aa" name="1em"/><!-- HANGUL SYLLABLE JAP -->
+ <map code="0xc7ab" name="1em"/><!-- HANGUL SYLLABLE JAH -->
+ <map code="0xc7ac" name="1em"/><!-- HANGUL SYLLABLE JAE -->
+ <map code="0xc7ad" name="1em"/><!-- HANGUL SYLLABLE JAEG -->
+ <map code="0xc7ae" name="1em"/><!-- HANGUL SYLLABLE JAEGG -->
+ <map code="0xc7af" name="1em"/><!-- HANGUL SYLLABLE JAEGS -->
+ <map code="0xc7b0" name="1em"/><!-- HANGUL SYLLABLE JAEN -->
+ <map code="0xc7b1" name="1em"/><!-- HANGUL SYLLABLE JAENJ -->
+ <map code="0xc7b2" name="1em"/><!-- HANGUL SYLLABLE JAENH -->
+ <map code="0xc7b3" name="1em"/><!-- HANGUL SYLLABLE JAED -->
+ <map code="0xc7b4" name="1em"/><!-- HANGUL SYLLABLE JAEL -->
+ <map code="0xc7b5" name="1em"/><!-- HANGUL SYLLABLE JAELG -->
+ <map code="0xc7b6" name="1em"/><!-- HANGUL SYLLABLE JAELM -->
+ <map code="0xc7b7" name="1em"/><!-- HANGUL SYLLABLE JAELB -->
+ <map code="0xc7b8" name="1em"/><!-- HANGUL SYLLABLE JAELS -->
+ <map code="0xc7b9" name="1em"/><!-- HANGUL SYLLABLE JAELT -->
+ <map code="0xc7ba" name="1em"/><!-- HANGUL SYLLABLE JAELP -->
+ <map code="0xc7bb" name="1em"/><!-- HANGUL SYLLABLE JAELH -->
+ <map code="0xc7bc" name="1em"/><!-- HANGUL SYLLABLE JAEM -->
+ <map code="0xc7bd" name="1em"/><!-- HANGUL SYLLABLE JAEB -->
+ <map code="0xc7be" name="1em"/><!-- HANGUL SYLLABLE JAEBS -->
+ <map code="0xc7bf" name="1em"/><!-- HANGUL SYLLABLE JAES -->
+ <map code="0xc7c0" name="1em"/><!-- HANGUL SYLLABLE JAESS -->
+ <map code="0xc7c1" name="1em"/><!-- HANGUL SYLLABLE JAENG -->
+ <map code="0xc7c2" name="1em"/><!-- HANGUL SYLLABLE JAEJ -->
+ <map code="0xc7c3" name="1em"/><!-- HANGUL SYLLABLE JAEC -->
+ <map code="0xc7c4" name="1em"/><!-- HANGUL SYLLABLE JAEK -->
+ <map code="0xc7c5" name="1em"/><!-- HANGUL SYLLABLE JAET -->
+ <map code="0xc7c6" name="1em"/><!-- HANGUL SYLLABLE JAEP -->
+ <map code="0xc7c7" name="1em"/><!-- HANGUL SYLLABLE JAEH -->
+ <map code="0xc7c8" name="1em"/><!-- HANGUL SYLLABLE JYA -->
+ <map code="0xc7c9" name="1em"/><!-- HANGUL SYLLABLE JYAG -->
+ <map code="0xc7ca" name="1em"/><!-- HANGUL SYLLABLE JYAGG -->
+ <map code="0xc7cb" name="1em"/><!-- HANGUL SYLLABLE JYAGS -->
+ <map code="0xc7cc" name="1em"/><!-- HANGUL SYLLABLE JYAN -->
+ <map code="0xc7cd" name="1em"/><!-- HANGUL SYLLABLE JYANJ -->
+ <map code="0xc7ce" name="1em"/><!-- HANGUL SYLLABLE JYANH -->
+ <map code="0xc7cf" name="1em"/><!-- HANGUL SYLLABLE JYAD -->
+ <map code="0xc7d0" name="1em"/><!-- HANGUL SYLLABLE JYAL -->
+ <map code="0xc7d1" name="1em"/><!-- HANGUL SYLLABLE JYALG -->
+ <map code="0xc7d2" name="1em"/><!-- HANGUL SYLLABLE JYALM -->
+ <map code="0xc7d3" name="1em"/><!-- HANGUL SYLLABLE JYALB -->
+ <map code="0xc7d4" name="1em"/><!-- HANGUL SYLLABLE JYALS -->
+ <map code="0xc7d5" name="1em"/><!-- HANGUL SYLLABLE JYALT -->
+ <map code="0xc7d6" name="1em"/><!-- HANGUL SYLLABLE JYALP -->
+ <map code="0xc7d7" name="1em"/><!-- HANGUL SYLLABLE JYALH -->
+ <map code="0xc7d8" name="1em"/><!-- HANGUL SYLLABLE JYAM -->
+ <map code="0xc7d9" name="1em"/><!-- HANGUL SYLLABLE JYAB -->
+ <map code="0xc7da" name="1em"/><!-- HANGUL SYLLABLE JYABS -->
+ <map code="0xc7db" name="1em"/><!-- HANGUL SYLLABLE JYAS -->
+ <map code="0xc7dc" name="1em"/><!-- HANGUL SYLLABLE JYASS -->
+ <map code="0xc7dd" name="1em"/><!-- HANGUL SYLLABLE JYANG -->
+ <map code="0xc7de" name="1em"/><!-- HANGUL SYLLABLE JYAJ -->
+ <map code="0xc7df" name="1em"/><!-- HANGUL SYLLABLE JYAC -->
+ <map code="0xc7e0" name="1em"/><!-- HANGUL SYLLABLE JYAK -->
+ <map code="0xc7e1" name="1em"/><!-- HANGUL SYLLABLE JYAT -->
+ <map code="0xc7e2" name="1em"/><!-- HANGUL SYLLABLE JYAP -->
+ <map code="0xc7e3" name="1em"/><!-- HANGUL SYLLABLE JYAH -->
+ <map code="0xc7e4" name="1em"/><!-- HANGUL SYLLABLE JYAE -->
+ <map code="0xc7e5" name="1em"/><!-- HANGUL SYLLABLE JYAEG -->
+ <map code="0xc7e6" name="1em"/><!-- HANGUL SYLLABLE JYAEGG -->
+ <map code="0xc7e7" name="1em"/><!-- HANGUL SYLLABLE JYAEGS -->
+ <map code="0xc7e8" name="1em"/><!-- HANGUL SYLLABLE JYAEN -->
+ <map code="0xc7e9" name="1em"/><!-- HANGUL SYLLABLE JYAENJ -->
+ <map code="0xc7ea" name="1em"/><!-- HANGUL SYLLABLE JYAENH -->
+ <map code="0xc7eb" name="1em"/><!-- HANGUL SYLLABLE JYAED -->
+ <map code="0xc7ec" name="1em"/><!-- HANGUL SYLLABLE JYAEL -->
+ <map code="0xc7ed" name="1em"/><!-- HANGUL SYLLABLE JYAELG -->
+ <map code="0xc7ee" name="1em"/><!-- HANGUL SYLLABLE JYAELM -->
+ <map code="0xc7ef" name="1em"/><!-- HANGUL SYLLABLE JYAELB -->
+ <map code="0xc7f0" name="1em"/><!-- HANGUL SYLLABLE JYAELS -->
+ <map code="0xc7f1" name="1em"/><!-- HANGUL SYLLABLE JYAELT -->
+ <map code="0xc7f2" name="1em"/><!-- HANGUL SYLLABLE JYAELP -->
+ <map code="0xc7f3" name="1em"/><!-- HANGUL SYLLABLE JYAELH -->
+ <map code="0xc7f4" name="1em"/><!-- HANGUL SYLLABLE JYAEM -->
+ <map code="0xc7f5" name="1em"/><!-- HANGUL SYLLABLE JYAEB -->
+ <map code="0xc7f6" name="1em"/><!-- HANGUL SYLLABLE JYAEBS -->
+ <map code="0xc7f7" name="1em"/><!-- HANGUL SYLLABLE JYAES -->
+ <map code="0xc7f8" name="1em"/><!-- HANGUL SYLLABLE JYAESS -->
+ <map code="0xc7f9" name="1em"/><!-- HANGUL SYLLABLE JYAENG -->
+ <map code="0xc7fa" name="1em"/><!-- HANGUL SYLLABLE JYAEJ -->
+ <map code="0xc7fb" name="1em"/><!-- HANGUL SYLLABLE JYAEC -->
+ <map code="0xc7fc" name="1em"/><!-- HANGUL SYLLABLE JYAEK -->
+ <map code="0xc7fd" name="1em"/><!-- HANGUL SYLLABLE JYAET -->
+ <map code="0xc7fe" name="1em"/><!-- HANGUL SYLLABLE JYAEP -->
+ <map code="0xc7ff" name="1em"/><!-- HANGUL SYLLABLE JYAEH -->
+ <map code="0xc800" name="1em"/><!-- HANGUL SYLLABLE JEO -->
+ <map code="0xc801" name="1em"/><!-- HANGUL SYLLABLE JEOG -->
+ <map code="0xc802" name="1em"/><!-- HANGUL SYLLABLE JEOGG -->
+ <map code="0xc803" name="1em"/><!-- HANGUL SYLLABLE JEOGS -->
+ <map code="0xc804" name="1em"/><!-- HANGUL SYLLABLE JEON -->
+ <map code="0xc805" name="1em"/><!-- HANGUL SYLLABLE JEONJ -->
+ <map code="0xc806" name="1em"/><!-- HANGUL SYLLABLE JEONH -->
+ <map code="0xc807" name="1em"/><!-- HANGUL SYLLABLE JEOD -->
+ <map code="0xc808" name="1em"/><!-- HANGUL SYLLABLE JEOL -->
+ <map code="0xc809" name="1em"/><!-- HANGUL SYLLABLE JEOLG -->
+ <map code="0xc80a" name="1em"/><!-- HANGUL SYLLABLE JEOLM -->
+ <map code="0xc80b" name="1em"/><!-- HANGUL SYLLABLE JEOLB -->
+ <map code="0xc80c" name="1em"/><!-- HANGUL SYLLABLE JEOLS -->
+ <map code="0xc80d" name="1em"/><!-- HANGUL SYLLABLE JEOLT -->
+ <map code="0xc80e" name="1em"/><!-- HANGUL SYLLABLE JEOLP -->
+ <map code="0xc80f" name="1em"/><!-- HANGUL SYLLABLE JEOLH -->
+ <map code="0xc810" name="1em"/><!-- HANGUL SYLLABLE JEOM -->
+ <map code="0xc811" name="1em"/><!-- HANGUL SYLLABLE JEOB -->
+ <map code="0xc812" name="1em"/><!-- HANGUL SYLLABLE JEOBS -->
+ <map code="0xc813" name="1em"/><!-- HANGUL SYLLABLE JEOS -->
+ <map code="0xc814" name="1em"/><!-- HANGUL SYLLABLE JEOSS -->
+ <map code="0xc815" name="1em"/><!-- HANGUL SYLLABLE JEONG -->
+ <map code="0xc816" name="1em"/><!-- HANGUL SYLLABLE JEOJ -->
+ <map code="0xc817" name="1em"/><!-- HANGUL SYLLABLE JEOC -->
+ <map code="0xc818" name="1em"/><!-- HANGUL SYLLABLE JEOK -->
+ <map code="0xc819" name="1em"/><!-- HANGUL SYLLABLE JEOT -->
+ <map code="0xc81a" name="1em"/><!-- HANGUL SYLLABLE JEOP -->
+ <map code="0xc81b" name="1em"/><!-- HANGUL SYLLABLE JEOH -->
+ <map code="0xc81c" name="1em"/><!-- HANGUL SYLLABLE JE -->
+ <map code="0xc81d" name="1em"/><!-- HANGUL SYLLABLE JEG -->
+ <map code="0xc81e" name="1em"/><!-- HANGUL SYLLABLE JEGG -->
+ <map code="0xc81f" name="1em"/><!-- HANGUL SYLLABLE JEGS -->
+ <map code="0xc820" name="1em"/><!-- HANGUL SYLLABLE JEN -->
+ <map code="0xc821" name="1em"/><!-- HANGUL SYLLABLE JENJ -->
+ <map code="0xc822" name="1em"/><!-- HANGUL SYLLABLE JENH -->
+ <map code="0xc823" name="1em"/><!-- HANGUL SYLLABLE JED -->
+ <map code="0xc824" name="1em"/><!-- HANGUL SYLLABLE JEL -->
+ <map code="0xc825" name="1em"/><!-- HANGUL SYLLABLE JELG -->
+ <map code="0xc826" name="1em"/><!-- HANGUL SYLLABLE JELM -->
+ <map code="0xc827" name="1em"/><!-- HANGUL SYLLABLE JELB -->
+ <map code="0xc828" name="1em"/><!-- HANGUL SYLLABLE JELS -->
+ <map code="0xc829" name="1em"/><!-- HANGUL SYLLABLE JELT -->
+ <map code="0xc82a" name="1em"/><!-- HANGUL SYLLABLE JELP -->
+ <map code="0xc82b" name="1em"/><!-- HANGUL SYLLABLE JELH -->
+ <map code="0xc82c" name="1em"/><!-- HANGUL SYLLABLE JEM -->
+ <map code="0xc82d" name="1em"/><!-- HANGUL SYLLABLE JEB -->
+ <map code="0xc82e" name="1em"/><!-- HANGUL SYLLABLE JEBS -->
+ <map code="0xc82f" name="1em"/><!-- HANGUL SYLLABLE JES -->
+ <map code="0xc830" name="1em"/><!-- HANGUL SYLLABLE JESS -->
+ <map code="0xc831" name="1em"/><!-- HANGUL SYLLABLE JENG -->
+ <map code="0xc832" name="1em"/><!-- HANGUL SYLLABLE JEJ -->
+ <map code="0xc833" name="1em"/><!-- HANGUL SYLLABLE JEC -->
+ <map code="0xc834" name="1em"/><!-- HANGUL SYLLABLE JEK -->
+ <map code="0xc835" name="1em"/><!-- HANGUL SYLLABLE JET -->
+ <map code="0xc836" name="1em"/><!-- HANGUL SYLLABLE JEP -->
+ <map code="0xc837" name="1em"/><!-- HANGUL SYLLABLE JEH -->
+ <map code="0xc838" name="1em"/><!-- HANGUL SYLLABLE JYEO -->
+ <map code="0xc839" name="1em"/><!-- HANGUL SYLLABLE JYEOG -->
+ <map code="0xc83a" name="1em"/><!-- HANGUL SYLLABLE JYEOGG -->
+ <map code="0xc83b" name="1em"/><!-- HANGUL SYLLABLE JYEOGS -->
+ <map code="0xc83c" name="1em"/><!-- HANGUL SYLLABLE JYEON -->
+ <map code="0xc83d" name="1em"/><!-- HANGUL SYLLABLE JYEONJ -->
+ <map code="0xc83e" name="1em"/><!-- HANGUL SYLLABLE JYEONH -->
+ <map code="0xc83f" name="1em"/><!-- HANGUL SYLLABLE JYEOD -->
+ <map code="0xc840" name="1em"/><!-- HANGUL SYLLABLE JYEOL -->
+ <map code="0xc841" name="1em"/><!-- HANGUL SYLLABLE JYEOLG -->
+ <map code="0xc842" name="1em"/><!-- HANGUL SYLLABLE JYEOLM -->
+ <map code="0xc843" name="1em"/><!-- HANGUL SYLLABLE JYEOLB -->
+ <map code="0xc844" name="1em"/><!-- HANGUL SYLLABLE JYEOLS -->
+ <map code="0xc845" name="1em"/><!-- HANGUL SYLLABLE JYEOLT -->
+ <map code="0xc846" name="1em"/><!-- HANGUL SYLLABLE JYEOLP -->
+ <map code="0xc847" name="1em"/><!-- HANGUL SYLLABLE JYEOLH -->
+ <map code="0xc848" name="1em"/><!-- HANGUL SYLLABLE JYEOM -->
+ <map code="0xc849" name="1em"/><!-- HANGUL SYLLABLE JYEOB -->
+ <map code="0xc84a" name="1em"/><!-- HANGUL SYLLABLE JYEOBS -->
+ <map code="0xc84b" name="1em"/><!-- HANGUL SYLLABLE JYEOS -->
+ <map code="0xc84c" name="1em"/><!-- HANGUL SYLLABLE JYEOSS -->
+ <map code="0xc84d" name="1em"/><!-- HANGUL SYLLABLE JYEONG -->
+ <map code="0xc84e" name="1em"/><!-- HANGUL SYLLABLE JYEOJ -->
+ <map code="0xc84f" name="1em"/><!-- HANGUL SYLLABLE JYEOC -->
+ <map code="0xc850" name="1em"/><!-- HANGUL SYLLABLE JYEOK -->
+ <map code="0xc851" name="1em"/><!-- HANGUL SYLLABLE JYEOT -->
+ <map code="0xc852" name="1em"/><!-- HANGUL SYLLABLE JYEOP -->
+ <map code="0xc853" name="1em"/><!-- HANGUL SYLLABLE JYEOH -->
+ <map code="0xc854" name="1em"/><!-- HANGUL SYLLABLE JYE -->
+ <map code="0xc855" name="1em"/><!-- HANGUL SYLLABLE JYEG -->
+ <map code="0xc856" name="1em"/><!-- HANGUL SYLLABLE JYEGG -->
+ <map code="0xc857" name="1em"/><!-- HANGUL SYLLABLE JYEGS -->
+ <map code="0xc858" name="1em"/><!-- HANGUL SYLLABLE JYEN -->
+ <map code="0xc859" name="1em"/><!-- HANGUL SYLLABLE JYENJ -->
+ <map code="0xc85a" name="1em"/><!-- HANGUL SYLLABLE JYENH -->
+ <map code="0xc85b" name="1em"/><!-- HANGUL SYLLABLE JYED -->
+ <map code="0xc85c" name="1em"/><!-- HANGUL SYLLABLE JYEL -->
+ <map code="0xc85d" name="1em"/><!-- HANGUL SYLLABLE JYELG -->
+ <map code="0xc85e" name="1em"/><!-- HANGUL SYLLABLE JYELM -->
+ <map code="0xc85f" name="1em"/><!-- HANGUL SYLLABLE JYELB -->
+ <map code="0xc860" name="1em"/><!-- HANGUL SYLLABLE JYELS -->
+ <map code="0xc861" name="1em"/><!-- HANGUL SYLLABLE JYELT -->
+ <map code="0xc862" name="1em"/><!-- HANGUL SYLLABLE JYELP -->
+ <map code="0xc863" name="1em"/><!-- HANGUL SYLLABLE JYELH -->
+ <map code="0xc864" name="1em"/><!-- HANGUL SYLLABLE JYEM -->
+ <map code="0xc865" name="1em"/><!-- HANGUL SYLLABLE JYEB -->
+ <map code="0xc866" name="1em"/><!-- HANGUL SYLLABLE JYEBS -->
+ <map code="0xc867" name="1em"/><!-- HANGUL SYLLABLE JYES -->
+ <map code="0xc868" name="1em"/><!-- HANGUL SYLLABLE JYESS -->
+ <map code="0xc869" name="1em"/><!-- HANGUL SYLLABLE JYENG -->
+ <map code="0xc86a" name="1em"/><!-- HANGUL SYLLABLE JYEJ -->
+ <map code="0xc86b" name="1em"/><!-- HANGUL SYLLABLE JYEC -->
+ <map code="0xc86c" name="1em"/><!-- HANGUL SYLLABLE JYEK -->
+ <map code="0xc86d" name="1em"/><!-- HANGUL SYLLABLE JYET -->
+ <map code="0xc86e" name="1em"/><!-- HANGUL SYLLABLE JYEP -->
+ <map code="0xc86f" name="1em"/><!-- HANGUL SYLLABLE JYEH -->
+ <map code="0xc870" name="1em"/><!-- HANGUL SYLLABLE JO -->
+ <map code="0xc871" name="1em"/><!-- HANGUL SYLLABLE JOG -->
+ <map code="0xc872" name="1em"/><!-- HANGUL SYLLABLE JOGG -->
+ <map code="0xc873" name="1em"/><!-- HANGUL SYLLABLE JOGS -->
+ <map code="0xc874" name="1em"/><!-- HANGUL SYLLABLE JON -->
+ <map code="0xc875" name="1em"/><!-- HANGUL SYLLABLE JONJ -->
+ <map code="0xc876" name="1em"/><!-- HANGUL SYLLABLE JONH -->
+ <map code="0xc877" name="1em"/><!-- HANGUL SYLLABLE JOD -->
+ <map code="0xc878" name="1em"/><!-- HANGUL SYLLABLE JOL -->
+ <map code="0xc879" name="1em"/><!-- HANGUL SYLLABLE JOLG -->
+ <map code="0xc87a" name="1em"/><!-- HANGUL SYLLABLE JOLM -->
+ <map code="0xc87b" name="1em"/><!-- HANGUL SYLLABLE JOLB -->
+ <map code="0xc87c" name="1em"/><!-- HANGUL SYLLABLE JOLS -->
+ <map code="0xc87d" name="1em"/><!-- HANGUL SYLLABLE JOLT -->
+ <map code="0xc87e" name="1em"/><!-- HANGUL SYLLABLE JOLP -->
+ <map code="0xc87f" name="1em"/><!-- HANGUL SYLLABLE JOLH -->
+ <map code="0xc880" name="1em"/><!-- HANGUL SYLLABLE JOM -->
+ <map code="0xc881" name="1em"/><!-- HANGUL SYLLABLE JOB -->
+ <map code="0xc882" name="1em"/><!-- HANGUL SYLLABLE JOBS -->
+ <map code="0xc883" name="1em"/><!-- HANGUL SYLLABLE JOS -->
+ <map code="0xc884" name="1em"/><!-- HANGUL SYLLABLE JOSS -->
+ <map code="0xc885" name="1em"/><!-- HANGUL SYLLABLE JONG -->
+ <map code="0xc886" name="1em"/><!-- HANGUL SYLLABLE JOJ -->
+ <map code="0xc887" name="1em"/><!-- HANGUL SYLLABLE JOC -->
+ <map code="0xc888" name="1em"/><!-- HANGUL SYLLABLE JOK -->
+ <map code="0xc889" name="1em"/><!-- HANGUL SYLLABLE JOT -->
+ <map code="0xc88a" name="1em"/><!-- HANGUL SYLLABLE JOP -->
+ <map code="0xc88b" name="1em"/><!-- HANGUL SYLLABLE JOH -->
+ <map code="0xc88c" name="1em"/><!-- HANGUL SYLLABLE JWA -->
+ <map code="0xc88d" name="1em"/><!-- HANGUL SYLLABLE JWAG -->
+ <map code="0xc88e" name="1em"/><!-- HANGUL SYLLABLE JWAGG -->
+ <map code="0xc88f" name="1em"/><!-- HANGUL SYLLABLE JWAGS -->
+ <map code="0xc890" name="1em"/><!-- HANGUL SYLLABLE JWAN -->
+ <map code="0xc891" name="1em"/><!-- HANGUL SYLLABLE JWANJ -->
+ <map code="0xc892" name="1em"/><!-- HANGUL SYLLABLE JWANH -->
+ <map code="0xc893" name="1em"/><!-- HANGUL SYLLABLE JWAD -->
+ <map code="0xc894" name="1em"/><!-- HANGUL SYLLABLE JWAL -->
+ <map code="0xc895" name="1em"/><!-- HANGUL SYLLABLE JWALG -->
+ <map code="0xc896" name="1em"/><!-- HANGUL SYLLABLE JWALM -->
+ <map code="0xc897" name="1em"/><!-- HANGUL SYLLABLE JWALB -->
+ <map code="0xc898" name="1em"/><!-- HANGUL SYLLABLE JWALS -->
+ <map code="0xc899" name="1em"/><!-- HANGUL SYLLABLE JWALT -->
+ <map code="0xc89a" name="1em"/><!-- HANGUL SYLLABLE JWALP -->
+ <map code="0xc89b" name="1em"/><!-- HANGUL SYLLABLE JWALH -->
+ <map code="0xc89c" name="1em"/><!-- HANGUL SYLLABLE JWAM -->
+ <map code="0xc89d" name="1em"/><!-- HANGUL SYLLABLE JWAB -->
+ <map code="0xc89e" name="1em"/><!-- HANGUL SYLLABLE JWABS -->
+ <map code="0xc89f" name="1em"/><!-- HANGUL SYLLABLE JWAS -->
+ <map code="0xc8a0" name="1em"/><!-- HANGUL SYLLABLE JWASS -->
+ <map code="0xc8a1" name="1em"/><!-- HANGUL SYLLABLE JWANG -->
+ <map code="0xc8a2" name="1em"/><!-- HANGUL SYLLABLE JWAJ -->
+ <map code="0xc8a3" name="1em"/><!-- HANGUL SYLLABLE JWAC -->
+ <map code="0xc8a4" name="1em"/><!-- HANGUL SYLLABLE JWAK -->
+ <map code="0xc8a5" name="1em"/><!-- HANGUL SYLLABLE JWAT -->
+ <map code="0xc8a6" name="1em"/><!-- HANGUL SYLLABLE JWAP -->
+ <map code="0xc8a7" name="1em"/><!-- HANGUL SYLLABLE JWAH -->
+ <map code="0xc8a8" name="1em"/><!-- HANGUL SYLLABLE JWAE -->
+ <map code="0xc8a9" name="1em"/><!-- HANGUL SYLLABLE JWAEG -->
+ <map code="0xc8aa" name="1em"/><!-- HANGUL SYLLABLE JWAEGG -->
+ <map code="0xc8ab" name="1em"/><!-- HANGUL SYLLABLE JWAEGS -->
+ <map code="0xc8ac" name="1em"/><!-- HANGUL SYLLABLE JWAEN -->
+ <map code="0xc8ad" name="1em"/><!-- HANGUL SYLLABLE JWAENJ -->
+ <map code="0xc8ae" name="1em"/><!-- HANGUL SYLLABLE JWAENH -->
+ <map code="0xc8af" name="1em"/><!-- HANGUL SYLLABLE JWAED -->
+ <map code="0xc8b0" name="1em"/><!-- HANGUL SYLLABLE JWAEL -->
+ <map code="0xc8b1" name="1em"/><!-- HANGUL SYLLABLE JWAELG -->
+ <map code="0xc8b2" name="1em"/><!-- HANGUL SYLLABLE JWAELM -->
+ <map code="0xc8b3" name="1em"/><!-- HANGUL SYLLABLE JWAELB -->
+ <map code="0xc8b4" name="1em"/><!-- HANGUL SYLLABLE JWAELS -->
+ <map code="0xc8b5" name="1em"/><!-- HANGUL SYLLABLE JWAELT -->
+ <map code="0xc8b6" name="1em"/><!-- HANGUL SYLLABLE JWAELP -->
+ <map code="0xc8b7" name="1em"/><!-- HANGUL SYLLABLE JWAELH -->
+ <map code="0xc8b8" name="1em"/><!-- HANGUL SYLLABLE JWAEM -->
+ <map code="0xc8b9" name="1em"/><!-- HANGUL SYLLABLE JWAEB -->
+ <map code="0xc8ba" name="1em"/><!-- HANGUL SYLLABLE JWAEBS -->
+ <map code="0xc8bb" name="1em"/><!-- HANGUL SYLLABLE JWAES -->
+ <map code="0xc8bc" name="1em"/><!-- HANGUL SYLLABLE JWAESS -->
+ <map code="0xc8bd" name="1em"/><!-- HANGUL SYLLABLE JWAENG -->
+ <map code="0xc8be" name="1em"/><!-- HANGUL SYLLABLE JWAEJ -->
+ <map code="0xc8bf" name="1em"/><!-- HANGUL SYLLABLE JWAEC -->
+ <map code="0xc8c0" name="1em"/><!-- HANGUL SYLLABLE JWAEK -->
+ <map code="0xc8c1" name="1em"/><!-- HANGUL SYLLABLE JWAET -->
+ <map code="0xc8c2" name="1em"/><!-- HANGUL SYLLABLE JWAEP -->
+ <map code="0xc8c3" name="1em"/><!-- HANGUL SYLLABLE JWAEH -->
+ <map code="0xc8c4" name="1em"/><!-- HANGUL SYLLABLE JOE -->
+ <map code="0xc8c5" name="1em"/><!-- HANGUL SYLLABLE JOEG -->
+ <map code="0xc8c6" name="1em"/><!-- HANGUL SYLLABLE JOEGG -->
+ <map code="0xc8c7" name="1em"/><!-- HANGUL SYLLABLE JOEGS -->
+ <map code="0xc8c8" name="1em"/><!-- HANGUL SYLLABLE JOEN -->
+ <map code="0xc8c9" name="1em"/><!-- HANGUL SYLLABLE JOENJ -->
+ <map code="0xc8ca" name="1em"/><!-- HANGUL SYLLABLE JOENH -->
+ <map code="0xc8cb" name="1em"/><!-- HANGUL SYLLABLE JOED -->
+ <map code="0xc8cc" name="1em"/><!-- HANGUL SYLLABLE JOEL -->
+ <map code="0xc8cd" name="1em"/><!-- HANGUL SYLLABLE JOELG -->
+ <map code="0xc8ce" name="1em"/><!-- HANGUL SYLLABLE JOELM -->
+ <map code="0xc8cf" name="1em"/><!-- HANGUL SYLLABLE JOELB -->
+ <map code="0xc8d0" name="1em"/><!-- HANGUL SYLLABLE JOELS -->
+ <map code="0xc8d1" name="1em"/><!-- HANGUL SYLLABLE JOELT -->
+ <map code="0xc8d2" name="1em"/><!-- HANGUL SYLLABLE JOELP -->
+ <map code="0xc8d3" name="1em"/><!-- HANGUL SYLLABLE JOELH -->
+ <map code="0xc8d4" name="1em"/><!-- HANGUL SYLLABLE JOEM -->
+ <map code="0xc8d5" name="1em"/><!-- HANGUL SYLLABLE JOEB -->
+ <map code="0xc8d6" name="1em"/><!-- HANGUL SYLLABLE JOEBS -->
+ <map code="0xc8d7" name="1em"/><!-- HANGUL SYLLABLE JOES -->
+ <map code="0xc8d8" name="1em"/><!-- HANGUL SYLLABLE JOESS -->
+ <map code="0xc8d9" name="1em"/><!-- HANGUL SYLLABLE JOENG -->
+ <map code="0xc8da" name="1em"/><!-- HANGUL SYLLABLE JOEJ -->
+ <map code="0xc8db" name="1em"/><!-- HANGUL SYLLABLE JOEC -->
+ <map code="0xc8dc" name="1em"/><!-- HANGUL SYLLABLE JOEK -->
+ <map code="0xc8dd" name="1em"/><!-- HANGUL SYLLABLE JOET -->
+ <map code="0xc8de" name="1em"/><!-- HANGUL SYLLABLE JOEP -->
+ <map code="0xc8df" name="1em"/><!-- HANGUL SYLLABLE JOEH -->
+ <map code="0xc8e0" name="1em"/><!-- HANGUL SYLLABLE JYO -->
+ <map code="0xc8e1" name="1em"/><!-- HANGUL SYLLABLE JYOG -->
+ <map code="0xc8e2" name="1em"/><!-- HANGUL SYLLABLE JYOGG -->
+ <map code="0xc8e3" name="1em"/><!-- HANGUL SYLLABLE JYOGS -->
+ <map code="0xc8e4" name="1em"/><!-- HANGUL SYLLABLE JYON -->
+ <map code="0xc8e5" name="1em"/><!-- HANGUL SYLLABLE JYONJ -->
+ <map code="0xc8e6" name="1em"/><!-- HANGUL SYLLABLE JYONH -->
+ <map code="0xc8e7" name="1em"/><!-- HANGUL SYLLABLE JYOD -->
+ <map code="0xc8e8" name="1em"/><!-- HANGUL SYLLABLE JYOL -->
+ <map code="0xc8e9" name="1em"/><!-- HANGUL SYLLABLE JYOLG -->
+ <map code="0xc8ea" name="1em"/><!-- HANGUL SYLLABLE JYOLM -->
+ <map code="0xc8eb" name="1em"/><!-- HANGUL SYLLABLE JYOLB -->
+ <map code="0xc8ec" name="1em"/><!-- HANGUL SYLLABLE JYOLS -->
+ <map code="0xc8ed" name="1em"/><!-- HANGUL SYLLABLE JYOLT -->
+ <map code="0xc8ee" name="1em"/><!-- HANGUL SYLLABLE JYOLP -->
+ <map code="0xc8ef" name="1em"/><!-- HANGUL SYLLABLE JYOLH -->
+ <map code="0xc8f0" name="1em"/><!-- HANGUL SYLLABLE JYOM -->
+ <map code="0xc8f1" name="1em"/><!-- HANGUL SYLLABLE JYOB -->
+ <map code="0xc8f2" name="1em"/><!-- HANGUL SYLLABLE JYOBS -->
+ <map code="0xc8f3" name="1em"/><!-- HANGUL SYLLABLE JYOS -->
+ <map code="0xc8f4" name="1em"/><!-- HANGUL SYLLABLE JYOSS -->
+ <map code="0xc8f5" name="1em"/><!-- HANGUL SYLLABLE JYONG -->
+ <map code="0xc8f6" name="1em"/><!-- HANGUL SYLLABLE JYOJ -->
+ <map code="0xc8f7" name="1em"/><!-- HANGUL SYLLABLE JYOC -->
+ <map code="0xc8f8" name="1em"/><!-- HANGUL SYLLABLE JYOK -->
+ <map code="0xc8f9" name="1em"/><!-- HANGUL SYLLABLE JYOT -->
+ <map code="0xc8fa" name="1em"/><!-- HANGUL SYLLABLE JYOP -->
+ <map code="0xc8fb" name="1em"/><!-- HANGUL SYLLABLE JYOH -->
+ <map code="0xc8fc" name="1em"/><!-- HANGUL SYLLABLE JU -->
+ <map code="0xc8fd" name="1em"/><!-- HANGUL SYLLABLE JUG -->
+ <map code="0xc8fe" name="1em"/><!-- HANGUL SYLLABLE JUGG -->
+ <map code="0xc8ff" name="1em"/><!-- HANGUL SYLLABLE JUGS -->
+ <map code="0xc900" name="1em"/><!-- HANGUL SYLLABLE JUN -->
+ <map code="0xc901" name="1em"/><!-- HANGUL SYLLABLE JUNJ -->
+ <map code="0xc902" name="1em"/><!-- HANGUL SYLLABLE JUNH -->
+ <map code="0xc903" name="1em"/><!-- HANGUL SYLLABLE JUD -->
+ <map code="0xc904" name="1em"/><!-- HANGUL SYLLABLE JUL -->
+ <map code="0xc905" name="1em"/><!-- HANGUL SYLLABLE JULG -->
+ <map code="0xc906" name="1em"/><!-- HANGUL SYLLABLE JULM -->
+ <map code="0xc907" name="1em"/><!-- HANGUL SYLLABLE JULB -->
+ <map code="0xc908" name="1em"/><!-- HANGUL SYLLABLE JULS -->
+ <map code="0xc909" name="1em"/><!-- HANGUL SYLLABLE JULT -->
+ <map code="0xc90a" name="1em"/><!-- HANGUL SYLLABLE JULP -->
+ <map code="0xc90b" name="1em"/><!-- HANGUL SYLLABLE JULH -->
+ <map code="0xc90c" name="1em"/><!-- HANGUL SYLLABLE JUM -->
+ <map code="0xc90d" name="1em"/><!-- HANGUL SYLLABLE JUB -->
+ <map code="0xc90e" name="1em"/><!-- HANGUL SYLLABLE JUBS -->
+ <map code="0xc90f" name="1em"/><!-- HANGUL SYLLABLE JUS -->
+ <map code="0xc910" name="1em"/><!-- HANGUL SYLLABLE JUSS -->
+ <map code="0xc911" name="1em"/><!-- HANGUL SYLLABLE JUNG -->
+ <map code="0xc912" name="1em"/><!-- HANGUL SYLLABLE JUJ -->
+ <map code="0xc913" name="1em"/><!-- HANGUL SYLLABLE JUC -->
+ <map code="0xc914" name="1em"/><!-- HANGUL SYLLABLE JUK -->
+ <map code="0xc915" name="1em"/><!-- HANGUL SYLLABLE JUT -->
+ <map code="0xc916" name="1em"/><!-- HANGUL SYLLABLE JUP -->
+ <map code="0xc917" name="1em"/><!-- HANGUL SYLLABLE JUH -->
+ <map code="0xc918" name="1em"/><!-- HANGUL SYLLABLE JWEO -->
+ <map code="0xc919" name="1em"/><!-- HANGUL SYLLABLE JWEOG -->
+ <map code="0xc91a" name="1em"/><!-- HANGUL SYLLABLE JWEOGG -->
+ <map code="0xc91b" name="1em"/><!-- HANGUL SYLLABLE JWEOGS -->
+ <map code="0xc91c" name="1em"/><!-- HANGUL SYLLABLE JWEON -->
+ <map code="0xc91d" name="1em"/><!-- HANGUL SYLLABLE JWEONJ -->
+ <map code="0xc91e" name="1em"/><!-- HANGUL SYLLABLE JWEONH -->
+ <map code="0xc91f" name="1em"/><!-- HANGUL SYLLABLE JWEOD -->
+ <map code="0xc920" name="1em"/><!-- HANGUL SYLLABLE JWEOL -->
+ <map code="0xc921" name="1em"/><!-- HANGUL SYLLABLE JWEOLG -->
+ <map code="0xc922" name="1em"/><!-- HANGUL SYLLABLE JWEOLM -->
+ <map code="0xc923" name="1em"/><!-- HANGUL SYLLABLE JWEOLB -->
+ <map code="0xc924" name="1em"/><!-- HANGUL SYLLABLE JWEOLS -->
+ <map code="0xc925" name="1em"/><!-- HANGUL SYLLABLE JWEOLT -->
+ <map code="0xc926" name="1em"/><!-- HANGUL SYLLABLE JWEOLP -->
+ <map code="0xc927" name="1em"/><!-- HANGUL SYLLABLE JWEOLH -->
+ <map code="0xc928" name="1em"/><!-- HANGUL SYLLABLE JWEOM -->
+ <map code="0xc929" name="1em"/><!-- HANGUL SYLLABLE JWEOB -->
+ <map code="0xc92a" name="1em"/><!-- HANGUL SYLLABLE JWEOBS -->
+ <map code="0xc92b" name="1em"/><!-- HANGUL SYLLABLE JWEOS -->
+ <map code="0xc92c" name="1em"/><!-- HANGUL SYLLABLE JWEOSS -->
+ <map code="0xc92d" name="1em"/><!-- HANGUL SYLLABLE JWEONG -->
+ <map code="0xc92e" name="1em"/><!-- HANGUL SYLLABLE JWEOJ -->
+ <map code="0xc92f" name="1em"/><!-- HANGUL SYLLABLE JWEOC -->
+ <map code="0xc930" name="1em"/><!-- HANGUL SYLLABLE JWEOK -->
+ <map code="0xc931" name="1em"/><!-- HANGUL SYLLABLE JWEOT -->
+ <map code="0xc932" name="1em"/><!-- HANGUL SYLLABLE JWEOP -->
+ <map code="0xc933" name="1em"/><!-- HANGUL SYLLABLE JWEOH -->
+ <map code="0xc934" name="1em"/><!-- HANGUL SYLLABLE JWE -->
+ <map code="0xc935" name="1em"/><!-- HANGUL SYLLABLE JWEG -->
+ <map code="0xc936" name="1em"/><!-- HANGUL SYLLABLE JWEGG -->
+ <map code="0xc937" name="1em"/><!-- HANGUL SYLLABLE JWEGS -->
+ <map code="0xc938" name="1em"/><!-- HANGUL SYLLABLE JWEN -->
+ <map code="0xc939" name="1em"/><!-- HANGUL SYLLABLE JWENJ -->
+ <map code="0xc93a" name="1em"/><!-- HANGUL SYLLABLE JWENH -->
+ <map code="0xc93b" name="1em"/><!-- HANGUL SYLLABLE JWED -->
+ <map code="0xc93c" name="1em"/><!-- HANGUL SYLLABLE JWEL -->
+ <map code="0xc93d" name="1em"/><!-- HANGUL SYLLABLE JWELG -->
+ <map code="0xc93e" name="1em"/><!-- HANGUL SYLLABLE JWELM -->
+ <map code="0xc93f" name="1em"/><!-- HANGUL SYLLABLE JWELB -->
+ <map code="0xc940" name="1em"/><!-- HANGUL SYLLABLE JWELS -->
+ <map code="0xc941" name="1em"/><!-- HANGUL SYLLABLE JWELT -->
+ <map code="0xc942" name="1em"/><!-- HANGUL SYLLABLE JWELP -->
+ <map code="0xc943" name="1em"/><!-- HANGUL SYLLABLE JWELH -->
+ <map code="0xc944" name="1em"/><!-- HANGUL SYLLABLE JWEM -->
+ <map code="0xc945" name="1em"/><!-- HANGUL SYLLABLE JWEB -->
+ <map code="0xc946" name="1em"/><!-- HANGUL SYLLABLE JWEBS -->
+ <map code="0xc947" name="1em"/><!-- HANGUL SYLLABLE JWES -->
+ <map code="0xc948" name="1em"/><!-- HANGUL SYLLABLE JWESS -->
+ <map code="0xc949" name="1em"/><!-- HANGUL SYLLABLE JWENG -->
+ <map code="0xc94a" name="1em"/><!-- HANGUL SYLLABLE JWEJ -->
+ <map code="0xc94b" name="1em"/><!-- HANGUL SYLLABLE JWEC -->
+ <map code="0xc94c" name="1em"/><!-- HANGUL SYLLABLE JWEK -->
+ <map code="0xc94d" name="1em"/><!-- HANGUL SYLLABLE JWET -->
+ <map code="0xc94e" name="1em"/><!-- HANGUL SYLLABLE JWEP -->
+ <map code="0xc94f" name="1em"/><!-- HANGUL SYLLABLE JWEH -->
+ <map code="0xc950" name="1em"/><!-- HANGUL SYLLABLE JWI -->
+ <map code="0xc951" name="1em"/><!-- HANGUL SYLLABLE JWIG -->
+ <map code="0xc952" name="1em"/><!-- HANGUL SYLLABLE JWIGG -->
+ <map code="0xc953" name="1em"/><!-- HANGUL SYLLABLE JWIGS -->
+ <map code="0xc954" name="1em"/><!-- HANGUL SYLLABLE JWIN -->
+ <map code="0xc955" name="1em"/><!-- HANGUL SYLLABLE JWINJ -->
+ <map code="0xc956" name="1em"/><!-- HANGUL SYLLABLE JWINH -->
+ <map code="0xc957" name="1em"/><!-- HANGUL SYLLABLE JWID -->
+ <map code="0xc958" name="1em"/><!-- HANGUL SYLLABLE JWIL -->
+ <map code="0xc959" name="1em"/><!-- HANGUL SYLLABLE JWILG -->
+ <map code="0xc95a" name="1em"/><!-- HANGUL SYLLABLE JWILM -->
+ <map code="0xc95b" name="1em"/><!-- HANGUL SYLLABLE JWILB -->
+ <map code="0xc95c" name="1em"/><!-- HANGUL SYLLABLE JWILS -->
+ <map code="0xc95d" name="1em"/><!-- HANGUL SYLLABLE JWILT -->
+ <map code="0xc95e" name="1em"/><!-- HANGUL SYLLABLE JWILP -->
+ <map code="0xc95f" name="1em"/><!-- HANGUL SYLLABLE JWILH -->
+ <map code="0xc960" name="1em"/><!-- HANGUL SYLLABLE JWIM -->
+ <map code="0xc961" name="1em"/><!-- HANGUL SYLLABLE JWIB -->
+ <map code="0xc962" name="1em"/><!-- HANGUL SYLLABLE JWIBS -->
+ <map code="0xc963" name="1em"/><!-- HANGUL SYLLABLE JWIS -->
+ <map code="0xc964" name="1em"/><!-- HANGUL SYLLABLE JWISS -->
+ <map code="0xc965" name="1em"/><!-- HANGUL SYLLABLE JWING -->
+ <map code="0xc966" name="1em"/><!-- HANGUL SYLLABLE JWIJ -->
+ <map code="0xc967" name="1em"/><!-- HANGUL SYLLABLE JWIC -->
+ <map code="0xc968" name="1em"/><!-- HANGUL SYLLABLE JWIK -->
+ <map code="0xc969" name="1em"/><!-- HANGUL SYLLABLE JWIT -->
+ <map code="0xc96a" name="1em"/><!-- HANGUL SYLLABLE JWIP -->
+ <map code="0xc96b" name="1em"/><!-- HANGUL SYLLABLE JWIH -->
+ <map code="0xc96c" name="1em"/><!-- HANGUL SYLLABLE JYU -->
+ <map code="0xc96d" name="1em"/><!-- HANGUL SYLLABLE JYUG -->
+ <map code="0xc96e" name="1em"/><!-- HANGUL SYLLABLE JYUGG -->
+ <map code="0xc96f" name="1em"/><!-- HANGUL SYLLABLE JYUGS -->
+ <map code="0xc970" name="1em"/><!-- HANGUL SYLLABLE JYUN -->
+ <map code="0xc971" name="1em"/><!-- HANGUL SYLLABLE JYUNJ -->
+ <map code="0xc972" name="1em"/><!-- HANGUL SYLLABLE JYUNH -->
+ <map code="0xc973" name="1em"/><!-- HANGUL SYLLABLE JYUD -->
+ <map code="0xc974" name="1em"/><!-- HANGUL SYLLABLE JYUL -->
+ <map code="0xc975" name="1em"/><!-- HANGUL SYLLABLE JYULG -->
+ <map code="0xc976" name="1em"/><!-- HANGUL SYLLABLE JYULM -->
+ <map code="0xc977" name="1em"/><!-- HANGUL SYLLABLE JYULB -->
+ <map code="0xc978" name="1em"/><!-- HANGUL SYLLABLE JYULS -->
+ <map code="0xc979" name="1em"/><!-- HANGUL SYLLABLE JYULT -->
+ <map code="0xc97a" name="1em"/><!-- HANGUL SYLLABLE JYULP -->
+ <map code="0xc97b" name="1em"/><!-- HANGUL SYLLABLE JYULH -->
+ <map code="0xc97c" name="1em"/><!-- HANGUL SYLLABLE JYUM -->
+ <map code="0xc97d" name="1em"/><!-- HANGUL SYLLABLE JYUB -->
+ <map code="0xc97e" name="1em"/><!-- HANGUL SYLLABLE JYUBS -->
+ <map code="0xc97f" name="1em"/><!-- HANGUL SYLLABLE JYUS -->
+ <map code="0xc980" name="1em"/><!-- HANGUL SYLLABLE JYUSS -->
+ <map code="0xc981" name="1em"/><!-- HANGUL SYLLABLE JYUNG -->
+ <map code="0xc982" name="1em"/><!-- HANGUL SYLLABLE JYUJ -->
+ <map code="0xc983" name="1em"/><!-- HANGUL SYLLABLE JYUC -->
+ <map code="0xc984" name="1em"/><!-- HANGUL SYLLABLE JYUK -->
+ <map code="0xc985" name="1em"/><!-- HANGUL SYLLABLE JYUT -->
+ <map code="0xc986" name="1em"/><!-- HANGUL SYLLABLE JYUP -->
+ <map code="0xc987" name="1em"/><!-- HANGUL SYLLABLE JYUH -->
+ <map code="0xc988" name="1em"/><!-- HANGUL SYLLABLE JEU -->
+ <map code="0xc989" name="1em"/><!-- HANGUL SYLLABLE JEUG -->
+ <map code="0xc98a" name="1em"/><!-- HANGUL SYLLABLE JEUGG -->
+ <map code="0xc98b" name="1em"/><!-- HANGUL SYLLABLE JEUGS -->
+ <map code="0xc98c" name="1em"/><!-- HANGUL SYLLABLE JEUN -->
+ <map code="0xc98d" name="1em"/><!-- HANGUL SYLLABLE JEUNJ -->
+ <map code="0xc98e" name="1em"/><!-- HANGUL SYLLABLE JEUNH -->
+ <map code="0xc98f" name="1em"/><!-- HANGUL SYLLABLE JEUD -->
+ <map code="0xc990" name="1em"/><!-- HANGUL SYLLABLE JEUL -->
+ <map code="0xc991" name="1em"/><!-- HANGUL SYLLABLE JEULG -->
+ <map code="0xc992" name="1em"/><!-- HANGUL SYLLABLE JEULM -->
+ <map code="0xc993" name="1em"/><!-- HANGUL SYLLABLE JEULB -->
+ <map code="0xc994" name="1em"/><!-- HANGUL SYLLABLE JEULS -->
+ <map code="0xc995" name="1em"/><!-- HANGUL SYLLABLE JEULT -->
+ <map code="0xc996" name="1em"/><!-- HANGUL SYLLABLE JEULP -->
+ <map code="0xc997" name="1em"/><!-- HANGUL SYLLABLE JEULH -->
+ <map code="0xc998" name="1em"/><!-- HANGUL SYLLABLE JEUM -->
+ <map code="0xc999" name="1em"/><!-- HANGUL SYLLABLE JEUB -->
+ <map code="0xc99a" name="1em"/><!-- HANGUL SYLLABLE JEUBS -->
+ <map code="0xc99b" name="1em"/><!-- HANGUL SYLLABLE JEUS -->
+ <map code="0xc99c" name="1em"/><!-- HANGUL SYLLABLE JEUSS -->
+ <map code="0xc99d" name="1em"/><!-- HANGUL SYLLABLE JEUNG -->
+ <map code="0xc99e" name="1em"/><!-- HANGUL SYLLABLE JEUJ -->
+ <map code="0xc99f" name="1em"/><!-- HANGUL SYLLABLE JEUC -->
+ <map code="0xc9a0" name="1em"/><!-- HANGUL SYLLABLE JEUK -->
+ <map code="0xc9a1" name="1em"/><!-- HANGUL SYLLABLE JEUT -->
+ <map code="0xc9a2" name="1em"/><!-- HANGUL SYLLABLE JEUP -->
+ <map code="0xc9a3" name="1em"/><!-- HANGUL SYLLABLE JEUH -->
+ <map code="0xc9a4" name="1em"/><!-- HANGUL SYLLABLE JYI -->
+ <map code="0xc9a5" name="1em"/><!-- HANGUL SYLLABLE JYIG -->
+ <map code="0xc9a6" name="1em"/><!-- HANGUL SYLLABLE JYIGG -->
+ <map code="0xc9a7" name="1em"/><!-- HANGUL SYLLABLE JYIGS -->
+ <map code="0xc9a8" name="1em"/><!-- HANGUL SYLLABLE JYIN -->
+ <map code="0xc9a9" name="1em"/><!-- HANGUL SYLLABLE JYINJ -->
+ <map code="0xc9aa" name="1em"/><!-- HANGUL SYLLABLE JYINH -->
+ <map code="0xc9ab" name="1em"/><!-- HANGUL SYLLABLE JYID -->
+ <map code="0xc9ac" name="1em"/><!-- HANGUL SYLLABLE JYIL -->
+ <map code="0xc9ad" name="1em"/><!-- HANGUL SYLLABLE JYILG -->
+ <map code="0xc9ae" name="1em"/><!-- HANGUL SYLLABLE JYILM -->
+ <map code="0xc9af" name="1em"/><!-- HANGUL SYLLABLE JYILB -->
+ <map code="0xc9b0" name="1em"/><!-- HANGUL SYLLABLE JYILS -->
+ <map code="0xc9b1" name="1em"/><!-- HANGUL SYLLABLE JYILT -->
+ <map code="0xc9b2" name="1em"/><!-- HANGUL SYLLABLE JYILP -->
+ <map code="0xc9b3" name="1em"/><!-- HANGUL SYLLABLE JYILH -->
+ <map code="0xc9b4" name="1em"/><!-- HANGUL SYLLABLE JYIM -->
+ <map code="0xc9b5" name="1em"/><!-- HANGUL SYLLABLE JYIB -->
+ <map code="0xc9b6" name="1em"/><!-- HANGUL SYLLABLE JYIBS -->
+ <map code="0xc9b7" name="1em"/><!-- HANGUL SYLLABLE JYIS -->
+ <map code="0xc9b8" name="1em"/><!-- HANGUL SYLLABLE JYISS -->
+ <map code="0xc9b9" name="1em"/><!-- HANGUL SYLLABLE JYING -->
+ <map code="0xc9ba" name="1em"/><!-- HANGUL SYLLABLE JYIJ -->
+ <map code="0xc9bb" name="1em"/><!-- HANGUL SYLLABLE JYIC -->
+ <map code="0xc9bc" name="1em"/><!-- HANGUL SYLLABLE JYIK -->
+ <map code="0xc9bd" name="1em"/><!-- HANGUL SYLLABLE JYIT -->
+ <map code="0xc9be" name="1em"/><!-- HANGUL SYLLABLE JYIP -->
+ <map code="0xc9bf" name="1em"/><!-- HANGUL SYLLABLE JYIH -->
+ <map code="0xc9c0" name="1em"/><!-- HANGUL SYLLABLE JI -->
+ <map code="0xc9c1" name="1em"/><!-- HANGUL SYLLABLE JIG -->
+ <map code="0xc9c2" name="1em"/><!-- HANGUL SYLLABLE JIGG -->
+ <map code="0xc9c3" name="1em"/><!-- HANGUL SYLLABLE JIGS -->
+ <map code="0xc9c4" name="1em"/><!-- HANGUL SYLLABLE JIN -->
+ <map code="0xc9c5" name="1em"/><!-- HANGUL SYLLABLE JINJ -->
+ <map code="0xc9c6" name="1em"/><!-- HANGUL SYLLABLE JINH -->
+ <map code="0xc9c7" name="1em"/><!-- HANGUL SYLLABLE JID -->
+ <map code="0xc9c8" name="1em"/><!-- HANGUL SYLLABLE JIL -->
+ <map code="0xc9c9" name="1em"/><!-- HANGUL SYLLABLE JILG -->
+ <map code="0xc9ca" name="1em"/><!-- HANGUL SYLLABLE JILM -->
+ <map code="0xc9cb" name="1em"/><!-- HANGUL SYLLABLE JILB -->
+ <map code="0xc9cc" name="1em"/><!-- HANGUL SYLLABLE JILS -->
+ <map code="0xc9cd" name="1em"/><!-- HANGUL SYLLABLE JILT -->
+ <map code="0xc9ce" name="1em"/><!-- HANGUL SYLLABLE JILP -->
+ <map code="0xc9cf" name="1em"/><!-- HANGUL SYLLABLE JILH -->
+ <map code="0xc9d0" name="1em"/><!-- HANGUL SYLLABLE JIM -->
+ <map code="0xc9d1" name="1em"/><!-- HANGUL SYLLABLE JIB -->
+ <map code="0xc9d2" name="1em"/><!-- HANGUL SYLLABLE JIBS -->
+ <map code="0xc9d3" name="1em"/><!-- HANGUL SYLLABLE JIS -->
+ <map code="0xc9d4" name="1em"/><!-- HANGUL SYLLABLE JISS -->
+ <map code="0xc9d5" name="1em"/><!-- HANGUL SYLLABLE JING -->
+ <map code="0xc9d6" name="1em"/><!-- HANGUL SYLLABLE JIJ -->
+ <map code="0xc9d7" name="1em"/><!-- HANGUL SYLLABLE JIC -->
+ <map code="0xc9d8" name="1em"/><!-- HANGUL SYLLABLE JIK -->
+ <map code="0xc9d9" name="1em"/><!-- HANGUL SYLLABLE JIT -->
+ <map code="0xc9da" name="1em"/><!-- HANGUL SYLLABLE JIP -->
+ <map code="0xc9db" name="1em"/><!-- HANGUL SYLLABLE JIH -->
+ <map code="0xc9dc" name="1em"/><!-- HANGUL SYLLABLE JJA -->
+ <map code="0xc9dd" name="1em"/><!-- HANGUL SYLLABLE JJAG -->
+ <map code="0xc9de" name="1em"/><!-- HANGUL SYLLABLE JJAGG -->
+ <map code="0xc9df" name="1em"/><!-- HANGUL SYLLABLE JJAGS -->
+ <map code="0xc9e0" name="1em"/><!-- HANGUL SYLLABLE JJAN -->
+ <map code="0xc9e1" name="1em"/><!-- HANGUL SYLLABLE JJANJ -->
+ <map code="0xc9e2" name="1em"/><!-- HANGUL SYLLABLE JJANH -->
+ <map code="0xc9e3" name="1em"/><!-- HANGUL SYLLABLE JJAD -->
+ <map code="0xc9e4" name="1em"/><!-- HANGUL SYLLABLE JJAL -->
+ <map code="0xc9e5" name="1em"/><!-- HANGUL SYLLABLE JJALG -->
+ <map code="0xc9e6" name="1em"/><!-- HANGUL SYLLABLE JJALM -->
+ <map code="0xc9e7" name="1em"/><!-- HANGUL SYLLABLE JJALB -->
+ <map code="0xc9e8" name="1em"/><!-- HANGUL SYLLABLE JJALS -->
+ <map code="0xc9e9" name="1em"/><!-- HANGUL SYLLABLE JJALT -->
+ <map code="0xc9ea" name="1em"/><!-- HANGUL SYLLABLE JJALP -->
+ <map code="0xc9eb" name="1em"/><!-- HANGUL SYLLABLE JJALH -->
+ <map code="0xc9ec" name="1em"/><!-- HANGUL SYLLABLE JJAM -->
+ <map code="0xc9ed" name="1em"/><!-- HANGUL SYLLABLE JJAB -->
+ <map code="0xc9ee" name="1em"/><!-- HANGUL SYLLABLE JJABS -->
+ <map code="0xc9ef" name="1em"/><!-- HANGUL SYLLABLE JJAS -->
+ <map code="0xc9f0" name="1em"/><!-- HANGUL SYLLABLE JJASS -->
+ <map code="0xc9f1" name="1em"/><!-- HANGUL SYLLABLE JJANG -->
+ <map code="0xc9f2" name="1em"/><!-- HANGUL SYLLABLE JJAJ -->
+ <map code="0xc9f3" name="1em"/><!-- HANGUL SYLLABLE JJAC -->
+ <map code="0xc9f4" name="1em"/><!-- HANGUL SYLLABLE JJAK -->
+ <map code="0xc9f5" name="1em"/><!-- HANGUL SYLLABLE JJAT -->
+ <map code="0xc9f6" name="1em"/><!-- HANGUL SYLLABLE JJAP -->
+ <map code="0xc9f7" name="1em"/><!-- HANGUL SYLLABLE JJAH -->
+ <map code="0xc9f8" name="1em"/><!-- HANGUL SYLLABLE JJAE -->
+ <map code="0xc9f9" name="1em"/><!-- HANGUL SYLLABLE JJAEG -->
+ <map code="0xc9fa" name="1em"/><!-- HANGUL SYLLABLE JJAEGG -->
+ <map code="0xc9fb" name="1em"/><!-- HANGUL SYLLABLE JJAEGS -->
+ <map code="0xc9fc" name="1em"/><!-- HANGUL SYLLABLE JJAEN -->
+ <map code="0xc9fd" name="1em"/><!-- HANGUL SYLLABLE JJAENJ -->
+ <map code="0xc9fe" name="1em"/><!-- HANGUL SYLLABLE JJAENH -->
+ <map code="0xc9ff" name="1em"/><!-- HANGUL SYLLABLE JJAED -->
+ <map code="0xca00" name="1em"/><!-- HANGUL SYLLABLE JJAEL -->
+ <map code="0xca01" name="1em"/><!-- HANGUL SYLLABLE JJAELG -->
+ <map code="0xca02" name="1em"/><!-- HANGUL SYLLABLE JJAELM -->
+ <map code="0xca03" name="1em"/><!-- HANGUL SYLLABLE JJAELB -->
+ <map code="0xca04" name="1em"/><!-- HANGUL SYLLABLE JJAELS -->
+ <map code="0xca05" name="1em"/><!-- HANGUL SYLLABLE JJAELT -->
+ <map code="0xca06" name="1em"/><!-- HANGUL SYLLABLE JJAELP -->
+ <map code="0xca07" name="1em"/><!-- HANGUL SYLLABLE JJAELH -->
+ <map code="0xca08" name="1em"/><!-- HANGUL SYLLABLE JJAEM -->
+ <map code="0xca09" name="1em"/><!-- HANGUL SYLLABLE JJAEB -->
+ <map code="0xca0a" name="1em"/><!-- HANGUL SYLLABLE JJAEBS -->
+ <map code="0xca0b" name="1em"/><!-- HANGUL SYLLABLE JJAES -->
+ <map code="0xca0c" name="1em"/><!-- HANGUL SYLLABLE JJAESS -->
+ <map code="0xca0d" name="1em"/><!-- HANGUL SYLLABLE JJAENG -->
+ <map code="0xca0e" name="1em"/><!-- HANGUL SYLLABLE JJAEJ -->
+ <map code="0xca0f" name="1em"/><!-- HANGUL SYLLABLE JJAEC -->
+ <map code="0xca10" name="1em"/><!-- HANGUL SYLLABLE JJAEK -->
+ <map code="0xca11" name="1em"/><!-- HANGUL SYLLABLE JJAET -->
+ <map code="0xca12" name="1em"/><!-- HANGUL SYLLABLE JJAEP -->
+ <map code="0xca13" name="1em"/><!-- HANGUL SYLLABLE JJAEH -->
+ <map code="0xca14" name="1em"/><!-- HANGUL SYLLABLE JJYA -->
+ <map code="0xca15" name="1em"/><!-- HANGUL SYLLABLE JJYAG -->
+ <map code="0xca16" name="1em"/><!-- HANGUL SYLLABLE JJYAGG -->
+ <map code="0xca17" name="1em"/><!-- HANGUL SYLLABLE JJYAGS -->
+ <map code="0xca18" name="1em"/><!-- HANGUL SYLLABLE JJYAN -->
+ <map code="0xca19" name="1em"/><!-- HANGUL SYLLABLE JJYANJ -->
+ <map code="0xca1a" name="1em"/><!-- HANGUL SYLLABLE JJYANH -->
+ <map code="0xca1b" name="1em"/><!-- HANGUL SYLLABLE JJYAD -->
+ <map code="0xca1c" name="1em"/><!-- HANGUL SYLLABLE JJYAL -->
+ <map code="0xca1d" name="1em"/><!-- HANGUL SYLLABLE JJYALG -->
+ <map code="0xca1e" name="1em"/><!-- HANGUL SYLLABLE JJYALM -->
+ <map code="0xca1f" name="1em"/><!-- HANGUL SYLLABLE JJYALB -->
+ <map code="0xca20" name="1em"/><!-- HANGUL SYLLABLE JJYALS -->
+ <map code="0xca21" name="1em"/><!-- HANGUL SYLLABLE JJYALT -->
+ <map code="0xca22" name="1em"/><!-- HANGUL SYLLABLE JJYALP -->
+ <map code="0xca23" name="1em"/><!-- HANGUL SYLLABLE JJYALH -->
+ <map code="0xca24" name="1em"/><!-- HANGUL SYLLABLE JJYAM -->
+ <map code="0xca25" name="1em"/><!-- HANGUL SYLLABLE JJYAB -->
+ <map code="0xca26" name="1em"/><!-- HANGUL SYLLABLE JJYABS -->
+ <map code="0xca27" name="1em"/><!-- HANGUL SYLLABLE JJYAS -->
+ <map code="0xca28" name="1em"/><!-- HANGUL SYLLABLE JJYASS -->
+ <map code="0xca29" name="1em"/><!-- HANGUL SYLLABLE JJYANG -->
+ <map code="0xca2a" name="1em"/><!-- HANGUL SYLLABLE JJYAJ -->
+ <map code="0xca2b" name="1em"/><!-- HANGUL SYLLABLE JJYAC -->
+ <map code="0xca2c" name="1em"/><!-- HANGUL SYLLABLE JJYAK -->
+ <map code="0xca2d" name="1em"/><!-- HANGUL SYLLABLE JJYAT -->
+ <map code="0xca2e" name="1em"/><!-- HANGUL SYLLABLE JJYAP -->
+ <map code="0xca2f" name="1em"/><!-- HANGUL SYLLABLE JJYAH -->
+ <map code="0xca30" name="1em"/><!-- HANGUL SYLLABLE JJYAE -->
+ <map code="0xca31" name="1em"/><!-- HANGUL SYLLABLE JJYAEG -->
+ <map code="0xca32" name="1em"/><!-- HANGUL SYLLABLE JJYAEGG -->
+ <map code="0xca33" name="1em"/><!-- HANGUL SYLLABLE JJYAEGS -->
+ <map code="0xca34" name="1em"/><!-- HANGUL SYLLABLE JJYAEN -->
+ <map code="0xca35" name="1em"/><!-- HANGUL SYLLABLE JJYAENJ -->
+ <map code="0xca36" name="1em"/><!-- HANGUL SYLLABLE JJYAENH -->
+ <map code="0xca37" name="1em"/><!-- HANGUL SYLLABLE JJYAED -->
+ <map code="0xca38" name="1em"/><!-- HANGUL SYLLABLE JJYAEL -->
+ <map code="0xca39" name="1em"/><!-- HANGUL SYLLABLE JJYAELG -->
+ <map code="0xca3a" name="1em"/><!-- HANGUL SYLLABLE JJYAELM -->
+ <map code="0xca3b" name="1em"/><!-- HANGUL SYLLABLE JJYAELB -->
+ <map code="0xca3c" name="1em"/><!-- HANGUL SYLLABLE JJYAELS -->
+ <map code="0xca3d" name="1em"/><!-- HANGUL SYLLABLE JJYAELT -->
+ <map code="0xca3e" name="1em"/><!-- HANGUL SYLLABLE JJYAELP -->
+ <map code="0xca3f" name="1em"/><!-- HANGUL SYLLABLE JJYAELH -->
+ <map code="0xca40" name="1em"/><!-- HANGUL SYLLABLE JJYAEM -->
+ <map code="0xca41" name="1em"/><!-- HANGUL SYLLABLE JJYAEB -->
+ <map code="0xca42" name="1em"/><!-- HANGUL SYLLABLE JJYAEBS -->
+ <map code="0xca43" name="1em"/><!-- HANGUL SYLLABLE JJYAES -->
+ <map code="0xca44" name="1em"/><!-- HANGUL SYLLABLE JJYAESS -->
+ <map code="0xca45" name="1em"/><!-- HANGUL SYLLABLE JJYAENG -->
+ <map code="0xca46" name="1em"/><!-- HANGUL SYLLABLE JJYAEJ -->
+ <map code="0xca47" name="1em"/><!-- HANGUL SYLLABLE JJYAEC -->
+ <map code="0xca48" name="1em"/><!-- HANGUL SYLLABLE JJYAEK -->
+ <map code="0xca49" name="1em"/><!-- HANGUL SYLLABLE JJYAET -->
+ <map code="0xca4a" name="1em"/><!-- HANGUL SYLLABLE JJYAEP -->
+ <map code="0xca4b" name="1em"/><!-- HANGUL SYLLABLE JJYAEH -->
+ <map code="0xca4c" name="1em"/><!-- HANGUL SYLLABLE JJEO -->
+ <map code="0xca4d" name="1em"/><!-- HANGUL SYLLABLE JJEOG -->
+ <map code="0xca4e" name="1em"/><!-- HANGUL SYLLABLE JJEOGG -->
+ <map code="0xca4f" name="1em"/><!-- HANGUL SYLLABLE JJEOGS -->
+ <map code="0xca50" name="1em"/><!-- HANGUL SYLLABLE JJEON -->
+ <map code="0xca51" name="1em"/><!-- HANGUL SYLLABLE JJEONJ -->
+ <map code="0xca52" name="1em"/><!-- HANGUL SYLLABLE JJEONH -->
+ <map code="0xca53" name="1em"/><!-- HANGUL SYLLABLE JJEOD -->
+ <map code="0xca54" name="1em"/><!-- HANGUL SYLLABLE JJEOL -->
+ <map code="0xca55" name="1em"/><!-- HANGUL SYLLABLE JJEOLG -->
+ <map code="0xca56" name="1em"/><!-- HANGUL SYLLABLE JJEOLM -->
+ <map code="0xca57" name="1em"/><!-- HANGUL SYLLABLE JJEOLB -->
+ <map code="0xca58" name="1em"/><!-- HANGUL SYLLABLE JJEOLS -->
+ <map code="0xca59" name="1em"/><!-- HANGUL SYLLABLE JJEOLT -->
+ <map code="0xca5a" name="1em"/><!-- HANGUL SYLLABLE JJEOLP -->
+ <map code="0xca5b" name="1em"/><!-- HANGUL SYLLABLE JJEOLH -->
+ <map code="0xca5c" name="1em"/><!-- HANGUL SYLLABLE JJEOM -->
+ <map code="0xca5d" name="1em"/><!-- HANGUL SYLLABLE JJEOB -->
+ <map code="0xca5e" name="1em"/><!-- HANGUL SYLLABLE JJEOBS -->
+ <map code="0xca5f" name="1em"/><!-- HANGUL SYLLABLE JJEOS -->
+ <map code="0xca60" name="1em"/><!-- HANGUL SYLLABLE JJEOSS -->
+ <map code="0xca61" name="1em"/><!-- HANGUL SYLLABLE JJEONG -->
+ <map code="0xca62" name="1em"/><!-- HANGUL SYLLABLE JJEOJ -->
+ <map code="0xca63" name="1em"/><!-- HANGUL SYLLABLE JJEOC -->
+ <map code="0xca64" name="1em"/><!-- HANGUL SYLLABLE JJEOK -->
+ <map code="0xca65" name="1em"/><!-- HANGUL SYLLABLE JJEOT -->
+ <map code="0xca66" name="1em"/><!-- HANGUL SYLLABLE JJEOP -->
+ <map code="0xca67" name="1em"/><!-- HANGUL SYLLABLE JJEOH -->
+ <map code="0xca68" name="1em"/><!-- HANGUL SYLLABLE JJE -->
+ <map code="0xca69" name="1em"/><!-- HANGUL SYLLABLE JJEG -->
+ <map code="0xca6a" name="1em"/><!-- HANGUL SYLLABLE JJEGG -->
+ <map code="0xca6b" name="1em"/><!-- HANGUL SYLLABLE JJEGS -->
+ <map code="0xca6c" name="1em"/><!-- HANGUL SYLLABLE JJEN -->
+ <map code="0xca6d" name="1em"/><!-- HANGUL SYLLABLE JJENJ -->
+ <map code="0xca6e" name="1em"/><!-- HANGUL SYLLABLE JJENH -->
+ <map code="0xca6f" name="1em"/><!-- HANGUL SYLLABLE JJED -->
+ <map code="0xca70" name="1em"/><!-- HANGUL SYLLABLE JJEL -->
+ <map code="0xca71" name="1em"/><!-- HANGUL SYLLABLE JJELG -->
+ <map code="0xca72" name="1em"/><!-- HANGUL SYLLABLE JJELM -->
+ <map code="0xca73" name="1em"/><!-- HANGUL SYLLABLE JJELB -->
+ <map code="0xca74" name="1em"/><!-- HANGUL SYLLABLE JJELS -->
+ <map code="0xca75" name="1em"/><!-- HANGUL SYLLABLE JJELT -->
+ <map code="0xca76" name="1em"/><!-- HANGUL SYLLABLE JJELP -->
+ <map code="0xca77" name="1em"/><!-- HANGUL SYLLABLE JJELH -->
+ <map code="0xca78" name="1em"/><!-- HANGUL SYLLABLE JJEM -->
+ <map code="0xca79" name="1em"/><!-- HANGUL SYLLABLE JJEB -->
+ <map code="0xca7a" name="1em"/><!-- HANGUL SYLLABLE JJEBS -->
+ <map code="0xca7b" name="1em"/><!-- HANGUL SYLLABLE JJES -->
+ <map code="0xca7c" name="1em"/><!-- HANGUL SYLLABLE JJESS -->
+ <map code="0xca7d" name="1em"/><!-- HANGUL SYLLABLE JJENG -->
+ <map code="0xca7e" name="1em"/><!-- HANGUL SYLLABLE JJEJ -->
+ <map code="0xca7f" name="1em"/><!-- HANGUL SYLLABLE JJEC -->
+ <map code="0xca80" name="1em"/><!-- HANGUL SYLLABLE JJEK -->
+ <map code="0xca81" name="1em"/><!-- HANGUL SYLLABLE JJET -->
+ <map code="0xca82" name="1em"/><!-- HANGUL SYLLABLE JJEP -->
+ <map code="0xca83" name="1em"/><!-- HANGUL SYLLABLE JJEH -->
+ <map code="0xca84" name="1em"/><!-- HANGUL SYLLABLE JJYEO -->
+ <map code="0xca85" name="1em"/><!-- HANGUL SYLLABLE JJYEOG -->
+ <map code="0xca86" name="1em"/><!-- HANGUL SYLLABLE JJYEOGG -->
+ <map code="0xca87" name="1em"/><!-- HANGUL SYLLABLE JJYEOGS -->
+ <map code="0xca88" name="1em"/><!-- HANGUL SYLLABLE JJYEON -->
+ <map code="0xca89" name="1em"/><!-- HANGUL SYLLABLE JJYEONJ -->
+ <map code="0xca8a" name="1em"/><!-- HANGUL SYLLABLE JJYEONH -->
+ <map code="0xca8b" name="1em"/><!-- HANGUL SYLLABLE JJYEOD -->
+ <map code="0xca8c" name="1em"/><!-- HANGUL SYLLABLE JJYEOL -->
+ <map code="0xca8d" name="1em"/><!-- HANGUL SYLLABLE JJYEOLG -->
+ <map code="0xca8e" name="1em"/><!-- HANGUL SYLLABLE JJYEOLM -->
+ <map code="0xca8f" name="1em"/><!-- HANGUL SYLLABLE JJYEOLB -->
+ <map code="0xca90" name="1em"/><!-- HANGUL SYLLABLE JJYEOLS -->
+ <map code="0xca91" name="1em"/><!-- HANGUL SYLLABLE JJYEOLT -->
+ <map code="0xca92" name="1em"/><!-- HANGUL SYLLABLE JJYEOLP -->
+ <map code="0xca93" name="1em"/><!-- HANGUL SYLLABLE JJYEOLH -->
+ <map code="0xca94" name="1em"/><!-- HANGUL SYLLABLE JJYEOM -->
+ <map code="0xca95" name="1em"/><!-- HANGUL SYLLABLE JJYEOB -->
+ <map code="0xca96" name="1em"/><!-- HANGUL SYLLABLE JJYEOBS -->
+ <map code="0xca97" name="1em"/><!-- HANGUL SYLLABLE JJYEOS -->
+ <map code="0xca98" name="1em"/><!-- HANGUL SYLLABLE JJYEOSS -->
+ <map code="0xca99" name="1em"/><!-- HANGUL SYLLABLE JJYEONG -->
+ <map code="0xca9a" name="1em"/><!-- HANGUL SYLLABLE JJYEOJ -->
+ <map code="0xca9b" name="1em"/><!-- HANGUL SYLLABLE JJYEOC -->
+ <map code="0xca9c" name="1em"/><!-- HANGUL SYLLABLE JJYEOK -->
+ <map code="0xca9d" name="1em"/><!-- HANGUL SYLLABLE JJYEOT -->
+ <map code="0xca9e" name="1em"/><!-- HANGUL SYLLABLE JJYEOP -->
+ <map code="0xca9f" name="1em"/><!-- HANGUL SYLLABLE JJYEOH -->
+ <map code="0xcaa0" name="1em"/><!-- HANGUL SYLLABLE JJYE -->
+ <map code="0xcaa1" name="1em"/><!-- HANGUL SYLLABLE JJYEG -->
+ <map code="0xcaa2" name="1em"/><!-- HANGUL SYLLABLE JJYEGG -->
+ <map code="0xcaa3" name="1em"/><!-- HANGUL SYLLABLE JJYEGS -->
+ <map code="0xcaa4" name="1em"/><!-- HANGUL SYLLABLE JJYEN -->
+ <map code="0xcaa5" name="1em"/><!-- HANGUL SYLLABLE JJYENJ -->
+ <map code="0xcaa6" name="1em"/><!-- HANGUL SYLLABLE JJYENH -->
+ <map code="0xcaa7" name="1em"/><!-- HANGUL SYLLABLE JJYED -->
+ <map code="0xcaa8" name="1em"/><!-- HANGUL SYLLABLE JJYEL -->
+ <map code="0xcaa9" name="1em"/><!-- HANGUL SYLLABLE JJYELG -->
+ <map code="0xcaaa" name="1em"/><!-- HANGUL SYLLABLE JJYELM -->
+ <map code="0xcaab" name="1em"/><!-- HANGUL SYLLABLE JJYELB -->
+ <map code="0xcaac" name="1em"/><!-- HANGUL SYLLABLE JJYELS -->
+ <map code="0xcaad" name="1em"/><!-- HANGUL SYLLABLE JJYELT -->
+ <map code="0xcaae" name="1em"/><!-- HANGUL SYLLABLE JJYELP -->
+ <map code="0xcaaf" name="1em"/><!-- HANGUL SYLLABLE JJYELH -->
+ <map code="0xcab0" name="1em"/><!-- HANGUL SYLLABLE JJYEM -->
+ <map code="0xcab1" name="1em"/><!-- HANGUL SYLLABLE JJYEB -->
+ <map code="0xcab2" name="1em"/><!-- HANGUL SYLLABLE JJYEBS -->
+ <map code="0xcab3" name="1em"/><!-- HANGUL SYLLABLE JJYES -->
+ <map code="0xcab4" name="1em"/><!-- HANGUL SYLLABLE JJYESS -->
+ <map code="0xcab5" name="1em"/><!-- HANGUL SYLLABLE JJYENG -->
+ <map code="0xcab6" name="1em"/><!-- HANGUL SYLLABLE JJYEJ -->
+ <map code="0xcab7" name="1em"/><!-- HANGUL SYLLABLE JJYEC -->
+ <map code="0xcab8" name="1em"/><!-- HANGUL SYLLABLE JJYEK -->
+ <map code="0xcab9" name="1em"/><!-- HANGUL SYLLABLE JJYET -->
+ <map code="0xcaba" name="1em"/><!-- HANGUL SYLLABLE JJYEP -->
+ <map code="0xcabb" name="1em"/><!-- HANGUL SYLLABLE JJYEH -->
+ <map code="0xcabc" name="1em"/><!-- HANGUL SYLLABLE JJO -->
+ <map code="0xcabd" name="1em"/><!-- HANGUL SYLLABLE JJOG -->
+ <map code="0xcabe" name="1em"/><!-- HANGUL SYLLABLE JJOGG -->
+ <map code="0xcabf" name="1em"/><!-- HANGUL SYLLABLE JJOGS -->
+ <map code="0xcac0" name="1em"/><!-- HANGUL SYLLABLE JJON -->
+ <map code="0xcac1" name="1em"/><!-- HANGUL SYLLABLE JJONJ -->
+ <map code="0xcac2" name="1em"/><!-- HANGUL SYLLABLE JJONH -->
+ <map code="0xcac3" name="1em"/><!-- HANGUL SYLLABLE JJOD -->
+ <map code="0xcac4" name="1em"/><!-- HANGUL SYLLABLE JJOL -->
+ <map code="0xcac5" name="1em"/><!-- HANGUL SYLLABLE JJOLG -->
+ <map code="0xcac6" name="1em"/><!-- HANGUL SYLLABLE JJOLM -->
+ <map code="0xcac7" name="1em"/><!-- HANGUL SYLLABLE JJOLB -->
+ <map code="0xcac8" name="1em"/><!-- HANGUL SYLLABLE JJOLS -->
+ <map code="0xcac9" name="1em"/><!-- HANGUL SYLLABLE JJOLT -->
+ <map code="0xcaca" name="1em"/><!-- HANGUL SYLLABLE JJOLP -->
+ <map code="0xcacb" name="1em"/><!-- HANGUL SYLLABLE JJOLH -->
+ <map code="0xcacc" name="1em"/><!-- HANGUL SYLLABLE JJOM -->
+ <map code="0xcacd" name="1em"/><!-- HANGUL SYLLABLE JJOB -->
+ <map code="0xcace" name="1em"/><!-- HANGUL SYLLABLE JJOBS -->
+ <map code="0xcacf" name="1em"/><!-- HANGUL SYLLABLE JJOS -->
+ <map code="0xcad0" name="1em"/><!-- HANGUL SYLLABLE JJOSS -->
+ <map code="0xcad1" name="1em"/><!-- HANGUL SYLLABLE JJONG -->
+ <map code="0xcad2" name="1em"/><!-- HANGUL SYLLABLE JJOJ -->
+ <map code="0xcad3" name="1em"/><!-- HANGUL SYLLABLE JJOC -->
+ <map code="0xcad4" name="1em"/><!-- HANGUL SYLLABLE JJOK -->
+ <map code="0xcad5" name="1em"/><!-- HANGUL SYLLABLE JJOT -->
+ <map code="0xcad6" name="1em"/><!-- HANGUL SYLLABLE JJOP -->
+ <map code="0xcad7" name="1em"/><!-- HANGUL SYLLABLE JJOH -->
+ <map code="0xcad8" name="1em"/><!-- HANGUL SYLLABLE JJWA -->
+ <map code="0xcad9" name="1em"/><!-- HANGUL SYLLABLE JJWAG -->
+ <map code="0xcada" name="1em"/><!-- HANGUL SYLLABLE JJWAGG -->
+ <map code="0xcadb" name="1em"/><!-- HANGUL SYLLABLE JJWAGS -->
+ <map code="0xcadc" name="1em"/><!-- HANGUL SYLLABLE JJWAN -->
+ <map code="0xcadd" name="1em"/><!-- HANGUL SYLLABLE JJWANJ -->
+ <map code="0xcade" name="1em"/><!-- HANGUL SYLLABLE JJWANH -->
+ <map code="0xcadf" name="1em"/><!-- HANGUL SYLLABLE JJWAD -->
+ <map code="0xcae0" name="1em"/><!-- HANGUL SYLLABLE JJWAL -->
+ <map code="0xcae1" name="1em"/><!-- HANGUL SYLLABLE JJWALG -->
+ <map code="0xcae2" name="1em"/><!-- HANGUL SYLLABLE JJWALM -->
+ <map code="0xcae3" name="1em"/><!-- HANGUL SYLLABLE JJWALB -->
+ <map code="0xcae4" name="1em"/><!-- HANGUL SYLLABLE JJWALS -->
+ <map code="0xcae5" name="1em"/><!-- HANGUL SYLLABLE JJWALT -->
+ <map code="0xcae6" name="1em"/><!-- HANGUL SYLLABLE JJWALP -->
+ <map code="0xcae7" name="1em"/><!-- HANGUL SYLLABLE JJWALH -->
+ <map code="0xcae8" name="1em"/><!-- HANGUL SYLLABLE JJWAM -->
+ <map code="0xcae9" name="1em"/><!-- HANGUL SYLLABLE JJWAB -->
+ <map code="0xcaea" name="1em"/><!-- HANGUL SYLLABLE JJWABS -->
+ <map code="0xcaeb" name="1em"/><!-- HANGUL SYLLABLE JJWAS -->
+ <map code="0xcaec" name="1em"/><!-- HANGUL SYLLABLE JJWASS -->
+ <map code="0xcaed" name="1em"/><!-- HANGUL SYLLABLE JJWANG -->
+ <map code="0xcaee" name="1em"/><!-- HANGUL SYLLABLE JJWAJ -->
+ <map code="0xcaef" name="1em"/><!-- HANGUL SYLLABLE JJWAC -->
+ <map code="0xcaf0" name="1em"/><!-- HANGUL SYLLABLE JJWAK -->
+ <map code="0xcaf1" name="1em"/><!-- HANGUL SYLLABLE JJWAT -->
+ <map code="0xcaf2" name="1em"/><!-- HANGUL SYLLABLE JJWAP -->
+ <map code="0xcaf3" name="1em"/><!-- HANGUL SYLLABLE JJWAH -->
+ <map code="0xcaf4" name="1em"/><!-- HANGUL SYLLABLE JJWAE -->
+ <map code="0xcaf5" name="1em"/><!-- HANGUL SYLLABLE JJWAEG -->
+ <map code="0xcaf6" name="1em"/><!-- HANGUL SYLLABLE JJWAEGG -->
+ <map code="0xcaf7" name="1em"/><!-- HANGUL SYLLABLE JJWAEGS -->
+ <map code="0xcaf8" name="1em"/><!-- HANGUL SYLLABLE JJWAEN -->
+ <map code="0xcaf9" name="1em"/><!-- HANGUL SYLLABLE JJWAENJ -->
+ <map code="0xcafa" name="1em"/><!-- HANGUL SYLLABLE JJWAENH -->
+ <map code="0xcafb" name="1em"/><!-- HANGUL SYLLABLE JJWAED -->
+ <map code="0xcafc" name="1em"/><!-- HANGUL SYLLABLE JJWAEL -->
+ <map code="0xcafd" name="1em"/><!-- HANGUL SYLLABLE JJWAELG -->
+ <map code="0xcafe" name="1em"/><!-- HANGUL SYLLABLE JJWAELM -->
+ <map code="0xcaff" name="1em"/><!-- HANGUL SYLLABLE JJWAELB -->
+ <map code="0xcb00" name="1em"/><!-- HANGUL SYLLABLE JJWAELS -->
+ <map code="0xcb01" name="1em"/><!-- HANGUL SYLLABLE JJWAELT -->
+ <map code="0xcb02" name="1em"/><!-- HANGUL SYLLABLE JJWAELP -->
+ <map code="0xcb03" name="1em"/><!-- HANGUL SYLLABLE JJWAELH -->
+ <map code="0xcb04" name="1em"/><!-- HANGUL SYLLABLE JJWAEM -->
+ <map code="0xcb05" name="1em"/><!-- HANGUL SYLLABLE JJWAEB -->
+ <map code="0xcb06" name="1em"/><!-- HANGUL SYLLABLE JJWAEBS -->
+ <map code="0xcb07" name="1em"/><!-- HANGUL SYLLABLE JJWAES -->
+ <map code="0xcb08" name="1em"/><!-- HANGUL SYLLABLE JJWAESS -->
+ <map code="0xcb09" name="1em"/><!-- HANGUL SYLLABLE JJWAENG -->
+ <map code="0xcb0a" name="1em"/><!-- HANGUL SYLLABLE JJWAEJ -->
+ <map code="0xcb0b" name="1em"/><!-- HANGUL SYLLABLE JJWAEC -->
+ <map code="0xcb0c" name="1em"/><!-- HANGUL SYLLABLE JJWAEK -->
+ <map code="0xcb0d" name="1em"/><!-- HANGUL SYLLABLE JJWAET -->
+ <map code="0xcb0e" name="1em"/><!-- HANGUL SYLLABLE JJWAEP -->
+ <map code="0xcb0f" name="1em"/><!-- HANGUL SYLLABLE JJWAEH -->
+ <map code="0xcb10" name="1em"/><!-- HANGUL SYLLABLE JJOE -->
+ <map code="0xcb11" name="1em"/><!-- HANGUL SYLLABLE JJOEG -->
+ <map code="0xcb12" name="1em"/><!-- HANGUL SYLLABLE JJOEGG -->
+ <map code="0xcb13" name="1em"/><!-- HANGUL SYLLABLE JJOEGS -->
+ <map code="0xcb14" name="1em"/><!-- HANGUL SYLLABLE JJOEN -->
+ <map code="0xcb15" name="1em"/><!-- HANGUL SYLLABLE JJOENJ -->
+ <map code="0xcb16" name="1em"/><!-- HANGUL SYLLABLE JJOENH -->
+ <map code="0xcb17" name="1em"/><!-- HANGUL SYLLABLE JJOED -->
+ <map code="0xcb18" name="1em"/><!-- HANGUL SYLLABLE JJOEL -->
+ <map code="0xcb19" name="1em"/><!-- HANGUL SYLLABLE JJOELG -->
+ <map code="0xcb1a" name="1em"/><!-- HANGUL SYLLABLE JJOELM -->
+ <map code="0xcb1b" name="1em"/><!-- HANGUL SYLLABLE JJOELB -->
+ <map code="0xcb1c" name="1em"/><!-- HANGUL SYLLABLE JJOELS -->
+ <map code="0xcb1d" name="1em"/><!-- HANGUL SYLLABLE JJOELT -->
+ <map code="0xcb1e" name="1em"/><!-- HANGUL SYLLABLE JJOELP -->
+ <map code="0xcb1f" name="1em"/><!-- HANGUL SYLLABLE JJOELH -->
+ <map code="0xcb20" name="1em"/><!-- HANGUL SYLLABLE JJOEM -->
+ <map code="0xcb21" name="1em"/><!-- HANGUL SYLLABLE JJOEB -->
+ <map code="0xcb22" name="1em"/><!-- HANGUL SYLLABLE JJOEBS -->
+ <map code="0xcb23" name="1em"/><!-- HANGUL SYLLABLE JJOES -->
+ <map code="0xcb24" name="1em"/><!-- HANGUL SYLLABLE JJOESS -->
+ <map code="0xcb25" name="1em"/><!-- HANGUL SYLLABLE JJOENG -->
+ <map code="0xcb26" name="1em"/><!-- HANGUL SYLLABLE JJOEJ -->
+ <map code="0xcb27" name="1em"/><!-- HANGUL SYLLABLE JJOEC -->
+ <map code="0xcb28" name="1em"/><!-- HANGUL SYLLABLE JJOEK -->
+ <map code="0xcb29" name="1em"/><!-- HANGUL SYLLABLE JJOET -->
+ <map code="0xcb2a" name="1em"/><!-- HANGUL SYLLABLE JJOEP -->
+ <map code="0xcb2b" name="1em"/><!-- HANGUL SYLLABLE JJOEH -->
+ <map code="0xcb2c" name="1em"/><!-- HANGUL SYLLABLE JJYO -->
+ <map code="0xcb2d" name="1em"/><!-- HANGUL SYLLABLE JJYOG -->
+ <map code="0xcb2e" name="1em"/><!-- HANGUL SYLLABLE JJYOGG -->
+ <map code="0xcb2f" name="1em"/><!-- HANGUL SYLLABLE JJYOGS -->
+ <map code="0xcb30" name="1em"/><!-- HANGUL SYLLABLE JJYON -->
+ <map code="0xcb31" name="1em"/><!-- HANGUL SYLLABLE JJYONJ -->
+ <map code="0xcb32" name="1em"/><!-- HANGUL SYLLABLE JJYONH -->
+ <map code="0xcb33" name="1em"/><!-- HANGUL SYLLABLE JJYOD -->
+ <map code="0xcb34" name="1em"/><!-- HANGUL SYLLABLE JJYOL -->
+ <map code="0xcb35" name="1em"/><!-- HANGUL SYLLABLE JJYOLG -->
+ <map code="0xcb36" name="1em"/><!-- HANGUL SYLLABLE JJYOLM -->
+ <map code="0xcb37" name="1em"/><!-- HANGUL SYLLABLE JJYOLB -->
+ <map code="0xcb38" name="1em"/><!-- HANGUL SYLLABLE JJYOLS -->
+ <map code="0xcb39" name="1em"/><!-- HANGUL SYLLABLE JJYOLT -->
+ <map code="0xcb3a" name="1em"/><!-- HANGUL SYLLABLE JJYOLP -->
+ <map code="0xcb3b" name="1em"/><!-- HANGUL SYLLABLE JJYOLH -->
+ <map code="0xcb3c" name="1em"/><!-- HANGUL SYLLABLE JJYOM -->
+ <map code="0xcb3d" name="1em"/><!-- HANGUL SYLLABLE JJYOB -->
+ <map code="0xcb3e" name="1em"/><!-- HANGUL SYLLABLE JJYOBS -->
+ <map code="0xcb3f" name="1em"/><!-- HANGUL SYLLABLE JJYOS -->
+ <map code="0xcb40" name="1em"/><!-- HANGUL SYLLABLE JJYOSS -->
+ <map code="0xcb41" name="1em"/><!-- HANGUL SYLLABLE JJYONG -->
+ <map code="0xcb42" name="1em"/><!-- HANGUL SYLLABLE JJYOJ -->
+ <map code="0xcb43" name="1em"/><!-- HANGUL SYLLABLE JJYOC -->
+ <map code="0xcb44" name="1em"/><!-- HANGUL SYLLABLE JJYOK -->
+ <map code="0xcb45" name="1em"/><!-- HANGUL SYLLABLE JJYOT -->
+ <map code="0xcb46" name="1em"/><!-- HANGUL SYLLABLE JJYOP -->
+ <map code="0xcb47" name="1em"/><!-- HANGUL SYLLABLE JJYOH -->
+ <map code="0xcb48" name="1em"/><!-- HANGUL SYLLABLE JJU -->
+ <map code="0xcb49" name="1em"/><!-- HANGUL SYLLABLE JJUG -->
+ <map code="0xcb4a" name="1em"/><!-- HANGUL SYLLABLE JJUGG -->
+ <map code="0xcb4b" name="1em"/><!-- HANGUL SYLLABLE JJUGS -->
+ <map code="0xcb4c" name="1em"/><!-- HANGUL SYLLABLE JJUN -->
+ <map code="0xcb4d" name="1em"/><!-- HANGUL SYLLABLE JJUNJ -->
+ <map code="0xcb4e" name="1em"/><!-- HANGUL SYLLABLE JJUNH -->
+ <map code="0xcb4f" name="1em"/><!-- HANGUL SYLLABLE JJUD -->
+ <map code="0xcb50" name="1em"/><!-- HANGUL SYLLABLE JJUL -->
+ <map code="0xcb51" name="1em"/><!-- HANGUL SYLLABLE JJULG -->
+ <map code="0xcb52" name="1em"/><!-- HANGUL SYLLABLE JJULM -->
+ <map code="0xcb53" name="1em"/><!-- HANGUL SYLLABLE JJULB -->
+ <map code="0xcb54" name="1em"/><!-- HANGUL SYLLABLE JJULS -->
+ <map code="0xcb55" name="1em"/><!-- HANGUL SYLLABLE JJULT -->
+ <map code="0xcb56" name="1em"/><!-- HANGUL SYLLABLE JJULP -->
+ <map code="0xcb57" name="1em"/><!-- HANGUL SYLLABLE JJULH -->
+ <map code="0xcb58" name="1em"/><!-- HANGUL SYLLABLE JJUM -->
+ <map code="0xcb59" name="1em"/><!-- HANGUL SYLLABLE JJUB -->
+ <map code="0xcb5a" name="1em"/><!-- HANGUL SYLLABLE JJUBS -->
+ <map code="0xcb5b" name="1em"/><!-- HANGUL SYLLABLE JJUS -->
+ <map code="0xcb5c" name="1em"/><!-- HANGUL SYLLABLE JJUSS -->
+ <map code="0xcb5d" name="1em"/><!-- HANGUL SYLLABLE JJUNG -->
+ <map code="0xcb5e" name="1em"/><!-- HANGUL SYLLABLE JJUJ -->
+ <map code="0xcb5f" name="1em"/><!-- HANGUL SYLLABLE JJUC -->
+ <map code="0xcb60" name="1em"/><!-- HANGUL SYLLABLE JJUK -->
+ <map code="0xcb61" name="1em"/><!-- HANGUL SYLLABLE JJUT -->
+ <map code="0xcb62" name="1em"/><!-- HANGUL SYLLABLE JJUP -->
+ <map code="0xcb63" name="1em"/><!-- HANGUL SYLLABLE JJUH -->
+ <map code="0xcb64" name="1em"/><!-- HANGUL SYLLABLE JJWEO -->
+ <map code="0xcb65" name="1em"/><!-- HANGUL SYLLABLE JJWEOG -->
+ <map code="0xcb66" name="1em"/><!-- HANGUL SYLLABLE JJWEOGG -->
+ <map code="0xcb67" name="1em"/><!-- HANGUL SYLLABLE JJWEOGS -->
+ <map code="0xcb68" name="1em"/><!-- HANGUL SYLLABLE JJWEON -->
+ <map code="0xcb69" name="1em"/><!-- HANGUL SYLLABLE JJWEONJ -->
+ <map code="0xcb6a" name="1em"/><!-- HANGUL SYLLABLE JJWEONH -->
+ <map code="0xcb6b" name="1em"/><!-- HANGUL SYLLABLE JJWEOD -->
+ <map code="0xcb6c" name="1em"/><!-- HANGUL SYLLABLE JJWEOL -->
+ <map code="0xcb6d" name="1em"/><!-- HANGUL SYLLABLE JJWEOLG -->
+ <map code="0xcb6e" name="1em"/><!-- HANGUL SYLLABLE JJWEOLM -->
+ <map code="0xcb6f" name="1em"/><!-- HANGUL SYLLABLE JJWEOLB -->
+ <map code="0xcb70" name="1em"/><!-- HANGUL SYLLABLE JJWEOLS -->
+ <map code="0xcb71" name="1em"/><!-- HANGUL SYLLABLE JJWEOLT -->
+ <map code="0xcb72" name="1em"/><!-- HANGUL SYLLABLE JJWEOLP -->
+ <map code="0xcb73" name="1em"/><!-- HANGUL SYLLABLE JJWEOLH -->
+ <map code="0xcb74" name="1em"/><!-- HANGUL SYLLABLE JJWEOM -->
+ <map code="0xcb75" name="1em"/><!-- HANGUL SYLLABLE JJWEOB -->
+ <map code="0xcb76" name="1em"/><!-- HANGUL SYLLABLE JJWEOBS -->
+ <map code="0xcb77" name="1em"/><!-- HANGUL SYLLABLE JJWEOS -->
+ <map code="0xcb78" name="1em"/><!-- HANGUL SYLLABLE JJWEOSS -->
+ <map code="0xcb79" name="1em"/><!-- HANGUL SYLLABLE JJWEONG -->
+ <map code="0xcb7a" name="1em"/><!-- HANGUL SYLLABLE JJWEOJ -->
+ <map code="0xcb7b" name="1em"/><!-- HANGUL SYLLABLE JJWEOC -->
+ <map code="0xcb7c" name="1em"/><!-- HANGUL SYLLABLE JJWEOK -->
+ <map code="0xcb7d" name="1em"/><!-- HANGUL SYLLABLE JJWEOT -->
+ <map code="0xcb7e" name="1em"/><!-- HANGUL SYLLABLE JJWEOP -->
+ <map code="0xcb7f" name="1em"/><!-- HANGUL SYLLABLE JJWEOH -->
+ <map code="0xcb80" name="1em"/><!-- HANGUL SYLLABLE JJWE -->
+ <map code="0xcb81" name="1em"/><!-- HANGUL SYLLABLE JJWEG -->
+ <map code="0xcb82" name="1em"/><!-- HANGUL SYLLABLE JJWEGG -->
+ <map code="0xcb83" name="1em"/><!-- HANGUL SYLLABLE JJWEGS -->
+ <map code="0xcb84" name="1em"/><!-- HANGUL SYLLABLE JJWEN -->
+ <map code="0xcb85" name="1em"/><!-- HANGUL SYLLABLE JJWENJ -->
+ <map code="0xcb86" name="1em"/><!-- HANGUL SYLLABLE JJWENH -->
+ <map code="0xcb87" name="1em"/><!-- HANGUL SYLLABLE JJWED -->
+ <map code="0xcb88" name="1em"/><!-- HANGUL SYLLABLE JJWEL -->
+ <map code="0xcb89" name="1em"/><!-- HANGUL SYLLABLE JJWELG -->
+ <map code="0xcb8a" name="1em"/><!-- HANGUL SYLLABLE JJWELM -->
+ <map code="0xcb8b" name="1em"/><!-- HANGUL SYLLABLE JJWELB -->
+ <map code="0xcb8c" name="1em"/><!-- HANGUL SYLLABLE JJWELS -->
+ <map code="0xcb8d" name="1em"/><!-- HANGUL SYLLABLE JJWELT -->
+ <map code="0xcb8e" name="1em"/><!-- HANGUL SYLLABLE JJWELP -->
+ <map code="0xcb8f" name="1em"/><!-- HANGUL SYLLABLE JJWELH -->
+ <map code="0xcb90" name="1em"/><!-- HANGUL SYLLABLE JJWEM -->
+ <map code="0xcb91" name="1em"/><!-- HANGUL SYLLABLE JJWEB -->
+ <map code="0xcb92" name="1em"/><!-- HANGUL SYLLABLE JJWEBS -->
+ <map code="0xcb93" name="1em"/><!-- HANGUL SYLLABLE JJWES -->
+ <map code="0xcb94" name="1em"/><!-- HANGUL SYLLABLE JJWESS -->
+ <map code="0xcb95" name="1em"/><!-- HANGUL SYLLABLE JJWENG -->
+ <map code="0xcb96" name="1em"/><!-- HANGUL SYLLABLE JJWEJ -->
+ <map code="0xcb97" name="1em"/><!-- HANGUL SYLLABLE JJWEC -->
+ <map code="0xcb98" name="1em"/><!-- HANGUL SYLLABLE JJWEK -->
+ <map code="0xcb99" name="1em"/><!-- HANGUL SYLLABLE JJWET -->
+ <map code="0xcb9a" name="1em"/><!-- HANGUL SYLLABLE JJWEP -->
+ <map code="0xcb9b" name="1em"/><!-- HANGUL SYLLABLE JJWEH -->
+ <map code="0xcb9c" name="1em"/><!-- HANGUL SYLLABLE JJWI -->
+ <map code="0xcb9d" name="1em"/><!-- HANGUL SYLLABLE JJWIG -->
+ <map code="0xcb9e" name="1em"/><!-- HANGUL SYLLABLE JJWIGG -->
+ <map code="0xcb9f" name="1em"/><!-- HANGUL SYLLABLE JJWIGS -->
+ <map code="0xcba0" name="1em"/><!-- HANGUL SYLLABLE JJWIN -->
+ <map code="0xcba1" name="1em"/><!-- HANGUL SYLLABLE JJWINJ -->
+ <map code="0xcba2" name="1em"/><!-- HANGUL SYLLABLE JJWINH -->
+ <map code="0xcba3" name="1em"/><!-- HANGUL SYLLABLE JJWID -->
+ <map code="0xcba4" name="1em"/><!-- HANGUL SYLLABLE JJWIL -->
+ <map code="0xcba5" name="1em"/><!-- HANGUL SYLLABLE JJWILG -->
+ <map code="0xcba6" name="1em"/><!-- HANGUL SYLLABLE JJWILM -->
+ <map code="0xcba7" name="1em"/><!-- HANGUL SYLLABLE JJWILB -->
+ <map code="0xcba8" name="1em"/><!-- HANGUL SYLLABLE JJWILS -->
+ <map code="0xcba9" name="1em"/><!-- HANGUL SYLLABLE JJWILT -->
+ <map code="0xcbaa" name="1em"/><!-- HANGUL SYLLABLE JJWILP -->
+ <map code="0xcbab" name="1em"/><!-- HANGUL SYLLABLE JJWILH -->
+ <map code="0xcbac" name="1em"/><!-- HANGUL SYLLABLE JJWIM -->
+ <map code="0xcbad" name="1em"/><!-- HANGUL SYLLABLE JJWIB -->
+ <map code="0xcbae" name="1em"/><!-- HANGUL SYLLABLE JJWIBS -->
+ <map code="0xcbaf" name="1em"/><!-- HANGUL SYLLABLE JJWIS -->
+ <map code="0xcbb0" name="1em"/><!-- HANGUL SYLLABLE JJWISS -->
+ <map code="0xcbb1" name="1em"/><!-- HANGUL SYLLABLE JJWING -->
+ <map code="0xcbb2" name="1em"/><!-- HANGUL SYLLABLE JJWIJ -->
+ <map code="0xcbb3" name="1em"/><!-- HANGUL SYLLABLE JJWIC -->
+ <map code="0xcbb4" name="1em"/><!-- HANGUL SYLLABLE JJWIK -->
+ <map code="0xcbb5" name="1em"/><!-- HANGUL SYLLABLE JJWIT -->
+ <map code="0xcbb6" name="1em"/><!-- HANGUL SYLLABLE JJWIP -->
+ <map code="0xcbb7" name="1em"/><!-- HANGUL SYLLABLE JJWIH -->
+ <map code="0xcbb8" name="1em"/><!-- HANGUL SYLLABLE JJYU -->
+ <map code="0xcbb9" name="1em"/><!-- HANGUL SYLLABLE JJYUG -->
+ <map code="0xcbba" name="1em"/><!-- HANGUL SYLLABLE JJYUGG -->
+ <map code="0xcbbb" name="1em"/><!-- HANGUL SYLLABLE JJYUGS -->
+ <map code="0xcbbc" name="1em"/><!-- HANGUL SYLLABLE JJYUN -->
+ <map code="0xcbbd" name="1em"/><!-- HANGUL SYLLABLE JJYUNJ -->
+ <map code="0xcbbe" name="1em"/><!-- HANGUL SYLLABLE JJYUNH -->
+ <map code="0xcbbf" name="1em"/><!-- HANGUL SYLLABLE JJYUD -->
+ <map code="0xcbc0" name="1em"/><!-- HANGUL SYLLABLE JJYUL -->
+ <map code="0xcbc1" name="1em"/><!-- HANGUL SYLLABLE JJYULG -->
+ <map code="0xcbc2" name="1em"/><!-- HANGUL SYLLABLE JJYULM -->
+ <map code="0xcbc3" name="1em"/><!-- HANGUL SYLLABLE JJYULB -->
+ <map code="0xcbc4" name="1em"/><!-- HANGUL SYLLABLE JJYULS -->
+ <map code="0xcbc5" name="1em"/><!-- HANGUL SYLLABLE JJYULT -->
+ <map code="0xcbc6" name="1em"/><!-- HANGUL SYLLABLE JJYULP -->
+ <map code="0xcbc7" name="1em"/><!-- HANGUL SYLLABLE JJYULH -->
+ <map code="0xcbc8" name="1em"/><!-- HANGUL SYLLABLE JJYUM -->
+ <map code="0xcbc9" name="1em"/><!-- HANGUL SYLLABLE JJYUB -->
+ <map code="0xcbca" name="1em"/><!-- HANGUL SYLLABLE JJYUBS -->
+ <map code="0xcbcb" name="1em"/><!-- HANGUL SYLLABLE JJYUS -->
+ <map code="0xcbcc" name="1em"/><!-- HANGUL SYLLABLE JJYUSS -->
+ <map code="0xcbcd" name="1em"/><!-- HANGUL SYLLABLE JJYUNG -->
+ <map code="0xcbce" name="1em"/><!-- HANGUL SYLLABLE JJYUJ -->
+ <map code="0xcbcf" name="1em"/><!-- HANGUL SYLLABLE JJYUC -->
+ <map code="0xcbd0" name="1em"/><!-- HANGUL SYLLABLE JJYUK -->
+ <map code="0xcbd1" name="1em"/><!-- HANGUL SYLLABLE JJYUT -->
+ <map code="0xcbd2" name="1em"/><!-- HANGUL SYLLABLE JJYUP -->
+ <map code="0xcbd3" name="1em"/><!-- HANGUL SYLLABLE JJYUH -->
+ <map code="0xcbd4" name="1em"/><!-- HANGUL SYLLABLE JJEU -->
+ <map code="0xcbd5" name="1em"/><!-- HANGUL SYLLABLE JJEUG -->
+ <map code="0xcbd6" name="1em"/><!-- HANGUL SYLLABLE JJEUGG -->
+ <map code="0xcbd7" name="1em"/><!-- HANGUL SYLLABLE JJEUGS -->
+ <map code="0xcbd8" name="1em"/><!-- HANGUL SYLLABLE JJEUN -->
+ <map code="0xcbd9" name="1em"/><!-- HANGUL SYLLABLE JJEUNJ -->
+ <map code="0xcbda" name="1em"/><!-- HANGUL SYLLABLE JJEUNH -->
+ <map code="0xcbdb" name="1em"/><!-- HANGUL SYLLABLE JJEUD -->
+ <map code="0xcbdc" name="1em"/><!-- HANGUL SYLLABLE JJEUL -->
+ <map code="0xcbdd" name="1em"/><!-- HANGUL SYLLABLE JJEULG -->
+ <map code="0xcbde" name="1em"/><!-- HANGUL SYLLABLE JJEULM -->
+ <map code="0xcbdf" name="1em"/><!-- HANGUL SYLLABLE JJEULB -->
+ <map code="0xcbe0" name="1em"/><!-- HANGUL SYLLABLE JJEULS -->
+ <map code="0xcbe1" name="1em"/><!-- HANGUL SYLLABLE JJEULT -->
+ <map code="0xcbe2" name="1em"/><!-- HANGUL SYLLABLE JJEULP -->
+ <map code="0xcbe3" name="1em"/><!-- HANGUL SYLLABLE JJEULH -->
+ <map code="0xcbe4" name="1em"/><!-- HANGUL SYLLABLE JJEUM -->
+ <map code="0xcbe5" name="1em"/><!-- HANGUL SYLLABLE JJEUB -->
+ <map code="0xcbe6" name="1em"/><!-- HANGUL SYLLABLE JJEUBS -->
+ <map code="0xcbe7" name="1em"/><!-- HANGUL SYLLABLE JJEUS -->
+ <map code="0xcbe8" name="1em"/><!-- HANGUL SYLLABLE JJEUSS -->
+ <map code="0xcbe9" name="1em"/><!-- HANGUL SYLLABLE JJEUNG -->
+ <map code="0xcbea" name="1em"/><!-- HANGUL SYLLABLE JJEUJ -->
+ <map code="0xcbeb" name="1em"/><!-- HANGUL SYLLABLE JJEUC -->
+ <map code="0xcbec" name="1em"/><!-- HANGUL SYLLABLE JJEUK -->
+ <map code="0xcbed" name="1em"/><!-- HANGUL SYLLABLE JJEUT -->
+ <map code="0xcbee" name="1em"/><!-- HANGUL SYLLABLE JJEUP -->
+ <map code="0xcbef" name="1em"/><!-- HANGUL SYLLABLE JJEUH -->
+ <map code="0xcbf0" name="1em"/><!-- HANGUL SYLLABLE JJYI -->
+ <map code="0xcbf1" name="1em"/><!-- HANGUL SYLLABLE JJYIG -->
+ <map code="0xcbf2" name="1em"/><!-- HANGUL SYLLABLE JJYIGG -->
+ <map code="0xcbf3" name="1em"/><!-- HANGUL SYLLABLE JJYIGS -->
+ <map code="0xcbf4" name="1em"/><!-- HANGUL SYLLABLE JJYIN -->
+ <map code="0xcbf5" name="1em"/><!-- HANGUL SYLLABLE JJYINJ -->
+ <map code="0xcbf6" name="1em"/><!-- HANGUL SYLLABLE JJYINH -->
+ <map code="0xcbf7" name="1em"/><!-- HANGUL SYLLABLE JJYID -->
+ <map code="0xcbf8" name="1em"/><!-- HANGUL SYLLABLE JJYIL -->
+ <map code="0xcbf9" name="1em"/><!-- HANGUL SYLLABLE JJYILG -->
+ <map code="0xcbfa" name="1em"/><!-- HANGUL SYLLABLE JJYILM -->
+ <map code="0xcbfb" name="1em"/><!-- HANGUL SYLLABLE JJYILB -->
+ <map code="0xcbfc" name="1em"/><!-- HANGUL SYLLABLE JJYILS -->
+ <map code="0xcbfd" name="1em"/><!-- HANGUL SYLLABLE JJYILT -->
+ <map code="0xcbfe" name="1em"/><!-- HANGUL SYLLABLE JJYILP -->
+ <map code="0xcbff" name="1em"/><!-- HANGUL SYLLABLE JJYILH -->
+ <map code="0xcc00" name="1em"/><!-- HANGUL SYLLABLE JJYIM -->
+ <map code="0xcc01" name="1em"/><!-- HANGUL SYLLABLE JJYIB -->
+ <map code="0xcc02" name="1em"/><!-- HANGUL SYLLABLE JJYIBS -->
+ <map code="0xcc03" name="1em"/><!-- HANGUL SYLLABLE JJYIS -->
+ <map code="0xcc04" name="1em"/><!-- HANGUL SYLLABLE JJYISS -->
+ <map code="0xcc05" name="1em"/><!-- HANGUL SYLLABLE JJYING -->
+ <map code="0xcc06" name="1em"/><!-- HANGUL SYLLABLE JJYIJ -->
+ <map code="0xcc07" name="1em"/><!-- HANGUL SYLLABLE JJYIC -->
+ <map code="0xcc08" name="1em"/><!-- HANGUL SYLLABLE JJYIK -->
+ <map code="0xcc09" name="1em"/><!-- HANGUL SYLLABLE JJYIT -->
+ <map code="0xcc0a" name="1em"/><!-- HANGUL SYLLABLE JJYIP -->
+ <map code="0xcc0b" name="1em"/><!-- HANGUL SYLLABLE JJYIH -->
+ <map code="0xcc0c" name="1em"/><!-- HANGUL SYLLABLE JJI -->
+ <map code="0xcc0d" name="1em"/><!-- HANGUL SYLLABLE JJIG -->
+ <map code="0xcc0e" name="1em"/><!-- HANGUL SYLLABLE JJIGG -->
+ <map code="0xcc0f" name="1em"/><!-- HANGUL SYLLABLE JJIGS -->
+ <map code="0xcc10" name="1em"/><!-- HANGUL SYLLABLE JJIN -->
+ <map code="0xcc11" name="1em"/><!-- HANGUL SYLLABLE JJINJ -->
+ <map code="0xcc12" name="1em"/><!-- HANGUL SYLLABLE JJINH -->
+ <map code="0xcc13" name="1em"/><!-- HANGUL SYLLABLE JJID -->
+ <map code="0xcc14" name="1em"/><!-- HANGUL SYLLABLE JJIL -->
+ <map code="0xcc15" name="1em"/><!-- HANGUL SYLLABLE JJILG -->
+ <map code="0xcc16" name="1em"/><!-- HANGUL SYLLABLE JJILM -->
+ <map code="0xcc17" name="1em"/><!-- HANGUL SYLLABLE JJILB -->
+ <map code="0xcc18" name="1em"/><!-- HANGUL SYLLABLE JJILS -->
+ <map code="0xcc19" name="1em"/><!-- HANGUL SYLLABLE JJILT -->
+ <map code="0xcc1a" name="1em"/><!-- HANGUL SYLLABLE JJILP -->
+ <map code="0xcc1b" name="1em"/><!-- HANGUL SYLLABLE JJILH -->
+ <map code="0xcc1c" name="1em"/><!-- HANGUL SYLLABLE JJIM -->
+ <map code="0xcc1d" name="1em"/><!-- HANGUL SYLLABLE JJIB -->
+ <map code="0xcc1e" name="1em"/><!-- HANGUL SYLLABLE JJIBS -->
+ <map code="0xcc1f" name="1em"/><!-- HANGUL SYLLABLE JJIS -->
+ <map code="0xcc20" name="1em"/><!-- HANGUL SYLLABLE JJISS -->
+ <map code="0xcc21" name="1em"/><!-- HANGUL SYLLABLE JJING -->
+ <map code="0xcc22" name="1em"/><!-- HANGUL SYLLABLE JJIJ -->
+ <map code="0xcc23" name="1em"/><!-- HANGUL SYLLABLE JJIC -->
+ <map code="0xcc24" name="1em"/><!-- HANGUL SYLLABLE JJIK -->
+ <map code="0xcc25" name="1em"/><!-- HANGUL SYLLABLE JJIT -->
+ <map code="0xcc26" name="1em"/><!-- HANGUL SYLLABLE JJIP -->
+ <map code="0xcc27" name="1em"/><!-- HANGUL SYLLABLE JJIH -->
+ <map code="0xcc28" name="1em"/><!-- HANGUL SYLLABLE CA -->
+ <map code="0xcc29" name="1em"/><!-- HANGUL SYLLABLE CAG -->
+ <map code="0xcc2a" name="1em"/><!-- HANGUL SYLLABLE CAGG -->
+ <map code="0xcc2b" name="1em"/><!-- HANGUL SYLLABLE CAGS -->
+ <map code="0xcc2c" name="1em"/><!-- HANGUL SYLLABLE CAN -->
+ <map code="0xcc2d" name="1em"/><!-- HANGUL SYLLABLE CANJ -->
+ <map code="0xcc2e" name="1em"/><!-- HANGUL SYLLABLE CANH -->
+ <map code="0xcc2f" name="1em"/><!-- HANGUL SYLLABLE CAD -->
+ <map code="0xcc30" name="1em"/><!-- HANGUL SYLLABLE CAL -->
+ <map code="0xcc31" name="1em"/><!-- HANGUL SYLLABLE CALG -->
+ <map code="0xcc32" name="1em"/><!-- HANGUL SYLLABLE CALM -->
+ <map code="0xcc33" name="1em"/><!-- HANGUL SYLLABLE CALB -->
+ <map code="0xcc34" name="1em"/><!-- HANGUL SYLLABLE CALS -->
+ <map code="0xcc35" name="1em"/><!-- HANGUL SYLLABLE CALT -->
+ <map code="0xcc36" name="1em"/><!-- HANGUL SYLLABLE CALP -->
+ <map code="0xcc37" name="1em"/><!-- HANGUL SYLLABLE CALH -->
+ <map code="0xcc38" name="1em"/><!-- HANGUL SYLLABLE CAM -->
+ <map code="0xcc39" name="1em"/><!-- HANGUL SYLLABLE CAB -->
+ <map code="0xcc3a" name="1em"/><!-- HANGUL SYLLABLE CABS -->
+ <map code="0xcc3b" name="1em"/><!-- HANGUL SYLLABLE CAS -->
+ <map code="0xcc3c" name="1em"/><!-- HANGUL SYLLABLE CASS -->
+ <map code="0xcc3d" name="1em"/><!-- HANGUL SYLLABLE CANG -->
+ <map code="0xcc3e" name="1em"/><!-- HANGUL SYLLABLE CAJ -->
+ <map code="0xcc3f" name="1em"/><!-- HANGUL SYLLABLE CAC -->
+ <map code="0xcc40" name="1em"/><!-- HANGUL SYLLABLE CAK -->
+ <map code="0xcc41" name="1em"/><!-- HANGUL SYLLABLE CAT -->
+ <map code="0xcc42" name="1em"/><!-- HANGUL SYLLABLE CAP -->
+ <map code="0xcc43" name="1em"/><!-- HANGUL SYLLABLE CAH -->
+ <map code="0xcc44" name="1em"/><!-- HANGUL SYLLABLE CAE -->
+ <map code="0xcc45" name="1em"/><!-- HANGUL SYLLABLE CAEG -->
+ <map code="0xcc46" name="1em"/><!-- HANGUL SYLLABLE CAEGG -->
+ <map code="0xcc47" name="1em"/><!-- HANGUL SYLLABLE CAEGS -->
+ <map code="0xcc48" name="1em"/><!-- HANGUL SYLLABLE CAEN -->
+ <map code="0xcc49" name="1em"/><!-- HANGUL SYLLABLE CAENJ -->
+ <map code="0xcc4a" name="1em"/><!-- HANGUL SYLLABLE CAENH -->
+ <map code="0xcc4b" name="1em"/><!-- HANGUL SYLLABLE CAED -->
+ <map code="0xcc4c" name="1em"/><!-- HANGUL SYLLABLE CAEL -->
+ <map code="0xcc4d" name="1em"/><!-- HANGUL SYLLABLE CAELG -->
+ <map code="0xcc4e" name="1em"/><!-- HANGUL SYLLABLE CAELM -->
+ <map code="0xcc4f" name="1em"/><!-- HANGUL SYLLABLE CAELB -->
+ <map code="0xcc50" name="1em"/><!-- HANGUL SYLLABLE CAELS -->
+ <map code="0xcc51" name="1em"/><!-- HANGUL SYLLABLE CAELT -->
+ <map code="0xcc52" name="1em"/><!-- HANGUL SYLLABLE CAELP -->
+ <map code="0xcc53" name="1em"/><!-- HANGUL SYLLABLE CAELH -->
+ <map code="0xcc54" name="1em"/><!-- HANGUL SYLLABLE CAEM -->
+ <map code="0xcc55" name="1em"/><!-- HANGUL SYLLABLE CAEB -->
+ <map code="0xcc56" name="1em"/><!-- HANGUL SYLLABLE CAEBS -->
+ <map code="0xcc57" name="1em"/><!-- HANGUL SYLLABLE CAES -->
+ <map code="0xcc58" name="1em"/><!-- HANGUL SYLLABLE CAESS -->
+ <map code="0xcc59" name="1em"/><!-- HANGUL SYLLABLE CAENG -->
+ <map code="0xcc5a" name="1em"/><!-- HANGUL SYLLABLE CAEJ -->
+ <map code="0xcc5b" name="1em"/><!-- HANGUL SYLLABLE CAEC -->
+ <map code="0xcc5c" name="1em"/><!-- HANGUL SYLLABLE CAEK -->
+ <map code="0xcc5d" name="1em"/><!-- HANGUL SYLLABLE CAET -->
+ <map code="0xcc5e" name="1em"/><!-- HANGUL SYLLABLE CAEP -->
+ <map code="0xcc5f" name="1em"/><!-- HANGUL SYLLABLE CAEH -->
+ <map code="0xcc60" name="1em"/><!-- HANGUL SYLLABLE CYA -->
+ <map code="0xcc61" name="1em"/><!-- HANGUL SYLLABLE CYAG -->
+ <map code="0xcc62" name="1em"/><!-- HANGUL SYLLABLE CYAGG -->
+ <map code="0xcc63" name="1em"/><!-- HANGUL SYLLABLE CYAGS -->
+ <map code="0xcc64" name="1em"/><!-- HANGUL SYLLABLE CYAN -->
+ <map code="0xcc65" name="1em"/><!-- HANGUL SYLLABLE CYANJ -->
+ <map code="0xcc66" name="1em"/><!-- HANGUL SYLLABLE CYANH -->
+ <map code="0xcc67" name="1em"/><!-- HANGUL SYLLABLE CYAD -->
+ <map code="0xcc68" name="1em"/><!-- HANGUL SYLLABLE CYAL -->
+ <map code="0xcc69" name="1em"/><!-- HANGUL SYLLABLE CYALG -->
+ <map code="0xcc6a" name="1em"/><!-- HANGUL SYLLABLE CYALM -->
+ <map code="0xcc6b" name="1em"/><!-- HANGUL SYLLABLE CYALB -->
+ <map code="0xcc6c" name="1em"/><!-- HANGUL SYLLABLE CYALS -->
+ <map code="0xcc6d" name="1em"/><!-- HANGUL SYLLABLE CYALT -->
+ <map code="0xcc6e" name="1em"/><!-- HANGUL SYLLABLE CYALP -->
+ <map code="0xcc6f" name="1em"/><!-- HANGUL SYLLABLE CYALH -->
+ <map code="0xcc70" name="1em"/><!-- HANGUL SYLLABLE CYAM -->
+ <map code="0xcc71" name="1em"/><!-- HANGUL SYLLABLE CYAB -->
+ <map code="0xcc72" name="1em"/><!-- HANGUL SYLLABLE CYABS -->
+ <map code="0xcc73" name="1em"/><!-- HANGUL SYLLABLE CYAS -->
+ <map code="0xcc74" name="1em"/><!-- HANGUL SYLLABLE CYASS -->
+ <map code="0xcc75" name="1em"/><!-- HANGUL SYLLABLE CYANG -->
+ <map code="0xcc76" name="1em"/><!-- HANGUL SYLLABLE CYAJ -->
+ <map code="0xcc77" name="1em"/><!-- HANGUL SYLLABLE CYAC -->
+ <map code="0xcc78" name="1em"/><!-- HANGUL SYLLABLE CYAK -->
+ <map code="0xcc79" name="1em"/><!-- HANGUL SYLLABLE CYAT -->
+ <map code="0xcc7a" name="1em"/><!-- HANGUL SYLLABLE CYAP -->
+ <map code="0xcc7b" name="1em"/><!-- HANGUL SYLLABLE CYAH -->
+ <map code="0xcc7c" name="1em"/><!-- HANGUL SYLLABLE CYAE -->
+ <map code="0xcc7d" name="1em"/><!-- HANGUL SYLLABLE CYAEG -->
+ <map code="0xcc7e" name="1em"/><!-- HANGUL SYLLABLE CYAEGG -->
+ <map code="0xcc7f" name="1em"/><!-- HANGUL SYLLABLE CYAEGS -->
+ <map code="0xcc80" name="1em"/><!-- HANGUL SYLLABLE CYAEN -->
+ <map code="0xcc81" name="1em"/><!-- HANGUL SYLLABLE CYAENJ -->
+ <map code="0xcc82" name="1em"/><!-- HANGUL SYLLABLE CYAENH -->
+ <map code="0xcc83" name="1em"/><!-- HANGUL SYLLABLE CYAED -->
+ <map code="0xcc84" name="1em"/><!-- HANGUL SYLLABLE CYAEL -->
+ <map code="0xcc85" name="1em"/><!-- HANGUL SYLLABLE CYAELG -->
+ <map code="0xcc86" name="1em"/><!-- HANGUL SYLLABLE CYAELM -->
+ <map code="0xcc87" name="1em"/><!-- HANGUL SYLLABLE CYAELB -->
+ <map code="0xcc88" name="1em"/><!-- HANGUL SYLLABLE CYAELS -->
+ <map code="0xcc89" name="1em"/><!-- HANGUL SYLLABLE CYAELT -->
+ <map code="0xcc8a" name="1em"/><!-- HANGUL SYLLABLE CYAELP -->
+ <map code="0xcc8b" name="1em"/><!-- HANGUL SYLLABLE CYAELH -->
+ <map code="0xcc8c" name="1em"/><!-- HANGUL SYLLABLE CYAEM -->
+ <map code="0xcc8d" name="1em"/><!-- HANGUL SYLLABLE CYAEB -->
+ <map code="0xcc8e" name="1em"/><!-- HANGUL SYLLABLE CYAEBS -->
+ <map code="0xcc8f" name="1em"/><!-- HANGUL SYLLABLE CYAES -->
+ <map code="0xcc90" name="1em"/><!-- HANGUL SYLLABLE CYAESS -->
+ <map code="0xcc91" name="1em"/><!-- HANGUL SYLLABLE CYAENG -->
+ <map code="0xcc92" name="1em"/><!-- HANGUL SYLLABLE CYAEJ -->
+ <map code="0xcc93" name="1em"/><!-- HANGUL SYLLABLE CYAEC -->
+ <map code="0xcc94" name="1em"/><!-- HANGUL SYLLABLE CYAEK -->
+ <map code="0xcc95" name="1em"/><!-- HANGUL SYLLABLE CYAET -->
+ <map code="0xcc96" name="1em"/><!-- HANGUL SYLLABLE CYAEP -->
+ <map code="0xcc97" name="1em"/><!-- HANGUL SYLLABLE CYAEH -->
+ <map code="0xcc98" name="1em"/><!-- HANGUL SYLLABLE CEO -->
+ <map code="0xcc99" name="1em"/><!-- HANGUL SYLLABLE CEOG -->
+ <map code="0xcc9a" name="1em"/><!-- HANGUL SYLLABLE CEOGG -->
+ <map code="0xcc9b" name="1em"/><!-- HANGUL SYLLABLE CEOGS -->
+ <map code="0xcc9c" name="1em"/><!-- HANGUL SYLLABLE CEON -->
+ <map code="0xcc9d" name="1em"/><!-- HANGUL SYLLABLE CEONJ -->
+ <map code="0xcc9e" name="1em"/><!-- HANGUL SYLLABLE CEONH -->
+ <map code="0xcc9f" name="1em"/><!-- HANGUL SYLLABLE CEOD -->
+ <map code="0xcca0" name="1em"/><!-- HANGUL SYLLABLE CEOL -->
+ <map code="0xcca1" name="1em"/><!-- HANGUL SYLLABLE CEOLG -->
+ <map code="0xcca2" name="1em"/><!-- HANGUL SYLLABLE CEOLM -->
+ <map code="0xcca3" name="1em"/><!-- HANGUL SYLLABLE CEOLB -->
+ <map code="0xcca4" name="1em"/><!-- HANGUL SYLLABLE CEOLS -->
+ <map code="0xcca5" name="1em"/><!-- HANGUL SYLLABLE CEOLT -->
+ <map code="0xcca6" name="1em"/><!-- HANGUL SYLLABLE CEOLP -->
+ <map code="0xcca7" name="1em"/><!-- HANGUL SYLLABLE CEOLH -->
+ <map code="0xcca8" name="1em"/><!-- HANGUL SYLLABLE CEOM -->
+ <map code="0xcca9" name="1em"/><!-- HANGUL SYLLABLE CEOB -->
+ <map code="0xccaa" name="1em"/><!-- HANGUL SYLLABLE CEOBS -->
+ <map code="0xccab" name="1em"/><!-- HANGUL SYLLABLE CEOS -->
+ <map code="0xccac" name="1em"/><!-- HANGUL SYLLABLE CEOSS -->
+ <map code="0xccad" name="1em"/><!-- HANGUL SYLLABLE CEONG -->
+ <map code="0xccae" name="1em"/><!-- HANGUL SYLLABLE CEOJ -->
+ <map code="0xccaf" name="1em"/><!-- HANGUL SYLLABLE CEOC -->
+ <map code="0xccb0" name="1em"/><!-- HANGUL SYLLABLE CEOK -->
+ <map code="0xccb1" name="1em"/><!-- HANGUL SYLLABLE CEOT -->
+ <map code="0xccb2" name="1em"/><!-- HANGUL SYLLABLE CEOP -->
+ <map code="0xccb3" name="1em"/><!-- HANGUL SYLLABLE CEOH -->
+ <map code="0xccb4" name="1em"/><!-- HANGUL SYLLABLE CE -->
+ <map code="0xccb5" name="1em"/><!-- HANGUL SYLLABLE CEG -->
+ <map code="0xccb6" name="1em"/><!-- HANGUL SYLLABLE CEGG -->
+ <map code="0xccb7" name="1em"/><!-- HANGUL SYLLABLE CEGS -->
+ <map code="0xccb8" name="1em"/><!-- HANGUL SYLLABLE CEN -->
+ <map code="0xccb9" name="1em"/><!-- HANGUL SYLLABLE CENJ -->
+ <map code="0xccba" name="1em"/><!-- HANGUL SYLLABLE CENH -->
+ <map code="0xccbb" name="1em"/><!-- HANGUL SYLLABLE CED -->
+ <map code="0xccbc" name="1em"/><!-- HANGUL SYLLABLE CEL -->
+ <map code="0xccbd" name="1em"/><!-- HANGUL SYLLABLE CELG -->
+ <map code="0xccbe" name="1em"/><!-- HANGUL SYLLABLE CELM -->
+ <map code="0xccbf" name="1em"/><!-- HANGUL SYLLABLE CELB -->
+ <map code="0xccc0" name="1em"/><!-- HANGUL SYLLABLE CELS -->
+ <map code="0xccc1" name="1em"/><!-- HANGUL SYLLABLE CELT -->
+ <map code="0xccc2" name="1em"/><!-- HANGUL SYLLABLE CELP -->
+ <map code="0xccc3" name="1em"/><!-- HANGUL SYLLABLE CELH -->
+ <map code="0xccc4" name="1em"/><!-- HANGUL SYLLABLE CEM -->
+ <map code="0xccc5" name="1em"/><!-- HANGUL SYLLABLE CEB -->
+ <map code="0xccc6" name="1em"/><!-- HANGUL SYLLABLE CEBS -->
+ <map code="0xccc7" name="1em"/><!-- HANGUL SYLLABLE CES -->
+ <map code="0xccc8" name="1em"/><!-- HANGUL SYLLABLE CESS -->
+ <map code="0xccc9" name="1em"/><!-- HANGUL SYLLABLE CENG -->
+ <map code="0xccca" name="1em"/><!-- HANGUL SYLLABLE CEJ -->
+ <map code="0xcccb" name="1em"/><!-- HANGUL SYLLABLE CEC -->
+ <map code="0xcccc" name="1em"/><!-- HANGUL SYLLABLE CEK -->
+ <map code="0xcccd" name="1em"/><!-- HANGUL SYLLABLE CET -->
+ <map code="0xccce" name="1em"/><!-- HANGUL SYLLABLE CEP -->
+ <map code="0xcccf" name="1em"/><!-- HANGUL SYLLABLE CEH -->
+ <map code="0xccd0" name="1em"/><!-- HANGUL SYLLABLE CYEO -->
+ <map code="0xccd1" name="1em"/><!-- HANGUL SYLLABLE CYEOG -->
+ <map code="0xccd2" name="1em"/><!-- HANGUL SYLLABLE CYEOGG -->
+ <map code="0xccd3" name="1em"/><!-- HANGUL SYLLABLE CYEOGS -->
+ <map code="0xccd4" name="1em"/><!-- HANGUL SYLLABLE CYEON -->
+ <map code="0xccd5" name="1em"/><!-- HANGUL SYLLABLE CYEONJ -->
+ <map code="0xccd6" name="1em"/><!-- HANGUL SYLLABLE CYEONH -->
+ <map code="0xccd7" name="1em"/><!-- HANGUL SYLLABLE CYEOD -->
+ <map code="0xccd8" name="1em"/><!-- HANGUL SYLLABLE CYEOL -->
+ <map code="0xccd9" name="1em"/><!-- HANGUL SYLLABLE CYEOLG -->
+ <map code="0xccda" name="1em"/><!-- HANGUL SYLLABLE CYEOLM -->
+ <map code="0xccdb" name="1em"/><!-- HANGUL SYLLABLE CYEOLB -->
+ <map code="0xccdc" name="1em"/><!-- HANGUL SYLLABLE CYEOLS -->
+ <map code="0xccdd" name="1em"/><!-- HANGUL SYLLABLE CYEOLT -->
+ <map code="0xccde" name="1em"/><!-- HANGUL SYLLABLE CYEOLP -->
+ <map code="0xccdf" name="1em"/><!-- HANGUL SYLLABLE CYEOLH -->
+ <map code="0xcce0" name="1em"/><!-- HANGUL SYLLABLE CYEOM -->
+ <map code="0xcce1" name="1em"/><!-- HANGUL SYLLABLE CYEOB -->
+ <map code="0xcce2" name="1em"/><!-- HANGUL SYLLABLE CYEOBS -->
+ <map code="0xcce3" name="1em"/><!-- HANGUL SYLLABLE CYEOS -->
+ <map code="0xcce4" name="1em"/><!-- HANGUL SYLLABLE CYEOSS -->
+ <map code="0xcce5" name="1em"/><!-- HANGUL SYLLABLE CYEONG -->
+ <map code="0xcce6" name="1em"/><!-- HANGUL SYLLABLE CYEOJ -->
+ <map code="0xcce7" name="1em"/><!-- HANGUL SYLLABLE CYEOC -->
+ <map code="0xcce8" name="1em"/><!-- HANGUL SYLLABLE CYEOK -->
+ <map code="0xcce9" name="1em"/><!-- HANGUL SYLLABLE CYEOT -->
+ <map code="0xccea" name="1em"/><!-- HANGUL SYLLABLE CYEOP -->
+ <map code="0xcceb" name="1em"/><!-- HANGUL SYLLABLE CYEOH -->
+ <map code="0xccec" name="1em"/><!-- HANGUL SYLLABLE CYE -->
+ <map code="0xcced" name="1em"/><!-- HANGUL SYLLABLE CYEG -->
+ <map code="0xccee" name="1em"/><!-- HANGUL SYLLABLE CYEGG -->
+ <map code="0xccef" name="1em"/><!-- HANGUL SYLLABLE CYEGS -->
+ <map code="0xccf0" name="1em"/><!-- HANGUL SYLLABLE CYEN -->
+ <map code="0xccf1" name="1em"/><!-- HANGUL SYLLABLE CYENJ -->
+ <map code="0xccf2" name="1em"/><!-- HANGUL SYLLABLE CYENH -->
+ <map code="0xccf3" name="1em"/><!-- HANGUL SYLLABLE CYED -->
+ <map code="0xccf4" name="1em"/><!-- HANGUL SYLLABLE CYEL -->
+ <map code="0xccf5" name="1em"/><!-- HANGUL SYLLABLE CYELG -->
+ <map code="0xccf6" name="1em"/><!-- HANGUL SYLLABLE CYELM -->
+ <map code="0xccf7" name="1em"/><!-- HANGUL SYLLABLE CYELB -->
+ <map code="0xccf8" name="1em"/><!-- HANGUL SYLLABLE CYELS -->
+ <map code="0xccf9" name="1em"/><!-- HANGUL SYLLABLE CYELT -->
+ <map code="0xccfa" name="1em"/><!-- HANGUL SYLLABLE CYELP -->
+ <map code="0xccfb" name="1em"/><!-- HANGUL SYLLABLE CYELH -->
+ <map code="0xccfc" name="1em"/><!-- HANGUL SYLLABLE CYEM -->
+ <map code="0xccfd" name="1em"/><!-- HANGUL SYLLABLE CYEB -->
+ <map code="0xccfe" name="1em"/><!-- HANGUL SYLLABLE CYEBS -->
+ <map code="0xccff" name="1em"/><!-- HANGUL SYLLABLE CYES -->
+ <map code="0xcd00" name="1em"/><!-- HANGUL SYLLABLE CYESS -->
+ <map code="0xcd01" name="1em"/><!-- HANGUL SYLLABLE CYENG -->
+ <map code="0xcd02" name="1em"/><!-- HANGUL SYLLABLE CYEJ -->
+ <map code="0xcd03" name="1em"/><!-- HANGUL SYLLABLE CYEC -->
+ <map code="0xcd04" name="1em"/><!-- HANGUL SYLLABLE CYEK -->
+ <map code="0xcd05" name="1em"/><!-- HANGUL SYLLABLE CYET -->
+ <map code="0xcd06" name="1em"/><!-- HANGUL SYLLABLE CYEP -->
+ <map code="0xcd07" name="1em"/><!-- HANGUL SYLLABLE CYEH -->
+ <map code="0xcd08" name="1em"/><!-- HANGUL SYLLABLE CO -->
+ <map code="0xcd09" name="1em"/><!-- HANGUL SYLLABLE COG -->
+ <map code="0xcd0a" name="1em"/><!-- HANGUL SYLLABLE COGG -->
+ <map code="0xcd0b" name="1em"/><!-- HANGUL SYLLABLE COGS -->
+ <map code="0xcd0c" name="1em"/><!-- HANGUL SYLLABLE CON -->
+ <map code="0xcd0d" name="1em"/><!-- HANGUL SYLLABLE CONJ -->
+ <map code="0xcd0e" name="1em"/><!-- HANGUL SYLLABLE CONH -->
+ <map code="0xcd0f" name="1em"/><!-- HANGUL SYLLABLE COD -->
+ <map code="0xcd10" name="1em"/><!-- HANGUL SYLLABLE COL -->
+ <map code="0xcd11" name="1em"/><!-- HANGUL SYLLABLE COLG -->
+ <map code="0xcd12" name="1em"/><!-- HANGUL SYLLABLE COLM -->
+ <map code="0xcd13" name="1em"/><!-- HANGUL SYLLABLE COLB -->
+ <map code="0xcd14" name="1em"/><!-- HANGUL SYLLABLE COLS -->
+ <map code="0xcd15" name="1em"/><!-- HANGUL SYLLABLE COLT -->
+ <map code="0xcd16" name="1em"/><!-- HANGUL SYLLABLE COLP -->
+ <map code="0xcd17" name="1em"/><!-- HANGUL SYLLABLE COLH -->
+ <map code="0xcd18" name="1em"/><!-- HANGUL SYLLABLE COM -->
+ <map code="0xcd19" name="1em"/><!-- HANGUL SYLLABLE COB -->
+ <map code="0xcd1a" name="1em"/><!-- HANGUL SYLLABLE COBS -->
+ <map code="0xcd1b" name="1em"/><!-- HANGUL SYLLABLE COS -->
+ <map code="0xcd1c" name="1em"/><!-- HANGUL SYLLABLE COSS -->
+ <map code="0xcd1d" name="1em"/><!-- HANGUL SYLLABLE CONG -->
+ <map code="0xcd1e" name="1em"/><!-- HANGUL SYLLABLE COJ -->
+ <map code="0xcd1f" name="1em"/><!-- HANGUL SYLLABLE COC -->
+ <map code="0xcd20" name="1em"/><!-- HANGUL SYLLABLE COK -->
+ <map code="0xcd21" name="1em"/><!-- HANGUL SYLLABLE COT -->
+ <map code="0xcd22" name="1em"/><!-- HANGUL SYLLABLE COP -->
+ <map code="0xcd23" name="1em"/><!-- HANGUL SYLLABLE COH -->
+ <map code="0xcd24" name="1em"/><!-- HANGUL SYLLABLE CWA -->
+ <map code="0xcd25" name="1em"/><!-- HANGUL SYLLABLE CWAG -->
+ <map code="0xcd26" name="1em"/><!-- HANGUL SYLLABLE CWAGG -->
+ <map code="0xcd27" name="1em"/><!-- HANGUL SYLLABLE CWAGS -->
+ <map code="0xcd28" name="1em"/><!-- HANGUL SYLLABLE CWAN -->
+ <map code="0xcd29" name="1em"/><!-- HANGUL SYLLABLE CWANJ -->
+ <map code="0xcd2a" name="1em"/><!-- HANGUL SYLLABLE CWANH -->
+ <map code="0xcd2b" name="1em"/><!-- HANGUL SYLLABLE CWAD -->
+ <map code="0xcd2c" name="1em"/><!-- HANGUL SYLLABLE CWAL -->
+ <map code="0xcd2d" name="1em"/><!-- HANGUL SYLLABLE CWALG -->
+ <map code="0xcd2e" name="1em"/><!-- HANGUL SYLLABLE CWALM -->
+ <map code="0xcd2f" name="1em"/><!-- HANGUL SYLLABLE CWALB -->
+ <map code="0xcd30" name="1em"/><!-- HANGUL SYLLABLE CWALS -->
+ <map code="0xcd31" name="1em"/><!-- HANGUL SYLLABLE CWALT -->
+ <map code="0xcd32" name="1em"/><!-- HANGUL SYLLABLE CWALP -->
+ <map code="0xcd33" name="1em"/><!-- HANGUL SYLLABLE CWALH -->
+ <map code="0xcd34" name="1em"/><!-- HANGUL SYLLABLE CWAM -->
+ <map code="0xcd35" name="1em"/><!-- HANGUL SYLLABLE CWAB -->
+ <map code="0xcd36" name="1em"/><!-- HANGUL SYLLABLE CWABS -->
+ <map code="0xcd37" name="1em"/><!-- HANGUL SYLLABLE CWAS -->
+ <map code="0xcd38" name="1em"/><!-- HANGUL SYLLABLE CWASS -->
+ <map code="0xcd39" name="1em"/><!-- HANGUL SYLLABLE CWANG -->
+ <map code="0xcd3a" name="1em"/><!-- HANGUL SYLLABLE CWAJ -->
+ <map code="0xcd3b" name="1em"/><!-- HANGUL SYLLABLE CWAC -->
+ <map code="0xcd3c" name="1em"/><!-- HANGUL SYLLABLE CWAK -->
+ <map code="0xcd3d" name="1em"/><!-- HANGUL SYLLABLE CWAT -->
+ <map code="0xcd3e" name="1em"/><!-- HANGUL SYLLABLE CWAP -->
+ <map code="0xcd3f" name="1em"/><!-- HANGUL SYLLABLE CWAH -->
+ <map code="0xcd40" name="1em"/><!-- HANGUL SYLLABLE CWAE -->
+ <map code="0xcd41" name="1em"/><!-- HANGUL SYLLABLE CWAEG -->
+ <map code="0xcd42" name="1em"/><!-- HANGUL SYLLABLE CWAEGG -->
+ <map code="0xcd43" name="1em"/><!-- HANGUL SYLLABLE CWAEGS -->
+ <map code="0xcd44" name="1em"/><!-- HANGUL SYLLABLE CWAEN -->
+ <map code="0xcd45" name="1em"/><!-- HANGUL SYLLABLE CWAENJ -->
+ <map code="0xcd46" name="1em"/><!-- HANGUL SYLLABLE CWAENH -->
+ <map code="0xcd47" name="1em"/><!-- HANGUL SYLLABLE CWAED -->
+ <map code="0xcd48" name="1em"/><!-- HANGUL SYLLABLE CWAEL -->
+ <map code="0xcd49" name="1em"/><!-- HANGUL SYLLABLE CWAELG -->
+ <map code="0xcd4a" name="1em"/><!-- HANGUL SYLLABLE CWAELM -->
+ <map code="0xcd4b" name="1em"/><!-- HANGUL SYLLABLE CWAELB -->
+ <map code="0xcd4c" name="1em"/><!-- HANGUL SYLLABLE CWAELS -->
+ <map code="0xcd4d" name="1em"/><!-- HANGUL SYLLABLE CWAELT -->
+ <map code="0xcd4e" name="1em"/><!-- HANGUL SYLLABLE CWAELP -->
+ <map code="0xcd4f" name="1em"/><!-- HANGUL SYLLABLE CWAELH -->
+ <map code="0xcd50" name="1em"/><!-- HANGUL SYLLABLE CWAEM -->
+ <map code="0xcd51" name="1em"/><!-- HANGUL SYLLABLE CWAEB -->
+ <map code="0xcd52" name="1em"/><!-- HANGUL SYLLABLE CWAEBS -->
+ <map code="0xcd53" name="1em"/><!-- HANGUL SYLLABLE CWAES -->
+ <map code="0xcd54" name="1em"/><!-- HANGUL SYLLABLE CWAESS -->
+ <map code="0xcd55" name="1em"/><!-- HANGUL SYLLABLE CWAENG -->
+ <map code="0xcd56" name="1em"/><!-- HANGUL SYLLABLE CWAEJ -->
+ <map code="0xcd57" name="1em"/><!-- HANGUL SYLLABLE CWAEC -->
+ <map code="0xcd58" name="1em"/><!-- HANGUL SYLLABLE CWAEK -->
+ <map code="0xcd59" name="1em"/><!-- HANGUL SYLLABLE CWAET -->
+ <map code="0xcd5a" name="1em"/><!-- HANGUL SYLLABLE CWAEP -->
+ <map code="0xcd5b" name="1em"/><!-- HANGUL SYLLABLE CWAEH -->
+ <map code="0xcd5c" name="1em"/><!-- HANGUL SYLLABLE COE -->
+ <map code="0xcd5d" name="1em"/><!-- HANGUL SYLLABLE COEG -->
+ <map code="0xcd5e" name="1em"/><!-- HANGUL SYLLABLE COEGG -->
+ <map code="0xcd5f" name="1em"/><!-- HANGUL SYLLABLE COEGS -->
+ <map code="0xcd60" name="1em"/><!-- HANGUL SYLLABLE COEN -->
+ <map code="0xcd61" name="1em"/><!-- HANGUL SYLLABLE COENJ -->
+ <map code="0xcd62" name="1em"/><!-- HANGUL SYLLABLE COENH -->
+ <map code="0xcd63" name="1em"/><!-- HANGUL SYLLABLE COED -->
+ <map code="0xcd64" name="1em"/><!-- HANGUL SYLLABLE COEL -->
+ <map code="0xcd65" name="1em"/><!-- HANGUL SYLLABLE COELG -->
+ <map code="0xcd66" name="1em"/><!-- HANGUL SYLLABLE COELM -->
+ <map code="0xcd67" name="1em"/><!-- HANGUL SYLLABLE COELB -->
+ <map code="0xcd68" name="1em"/><!-- HANGUL SYLLABLE COELS -->
+ <map code="0xcd69" name="1em"/><!-- HANGUL SYLLABLE COELT -->
+ <map code="0xcd6a" name="1em"/><!-- HANGUL SYLLABLE COELP -->
+ <map code="0xcd6b" name="1em"/><!-- HANGUL SYLLABLE COELH -->
+ <map code="0xcd6c" name="1em"/><!-- HANGUL SYLLABLE COEM -->
+ <map code="0xcd6d" name="1em"/><!-- HANGUL SYLLABLE COEB -->
+ <map code="0xcd6e" name="1em"/><!-- HANGUL SYLLABLE COEBS -->
+ <map code="0xcd6f" name="1em"/><!-- HANGUL SYLLABLE COES -->
+ <map code="0xcd70" name="1em"/><!-- HANGUL SYLLABLE COESS -->
+ <map code="0xcd71" name="1em"/><!-- HANGUL SYLLABLE COENG -->
+ <map code="0xcd72" name="1em"/><!-- HANGUL SYLLABLE COEJ -->
+ <map code="0xcd73" name="1em"/><!-- HANGUL SYLLABLE COEC -->
+ <map code="0xcd74" name="1em"/><!-- HANGUL SYLLABLE COEK -->
+ <map code="0xcd75" name="1em"/><!-- HANGUL SYLLABLE COET -->
+ <map code="0xcd76" name="1em"/><!-- HANGUL SYLLABLE COEP -->
+ <map code="0xcd77" name="1em"/><!-- HANGUL SYLLABLE COEH -->
+ <map code="0xcd78" name="1em"/><!-- HANGUL SYLLABLE CYO -->
+ <map code="0xcd79" name="1em"/><!-- HANGUL SYLLABLE CYOG -->
+ <map code="0xcd7a" name="1em"/><!-- HANGUL SYLLABLE CYOGG -->
+ <map code="0xcd7b" name="1em"/><!-- HANGUL SYLLABLE CYOGS -->
+ <map code="0xcd7c" name="1em"/><!-- HANGUL SYLLABLE CYON -->
+ <map code="0xcd7d" name="1em"/><!-- HANGUL SYLLABLE CYONJ -->
+ <map code="0xcd7e" name="1em"/><!-- HANGUL SYLLABLE CYONH -->
+ <map code="0xcd7f" name="1em"/><!-- HANGUL SYLLABLE CYOD -->
+ <map code="0xcd80" name="1em"/><!-- HANGUL SYLLABLE CYOL -->
+ <map code="0xcd81" name="1em"/><!-- HANGUL SYLLABLE CYOLG -->
+ <map code="0xcd82" name="1em"/><!-- HANGUL SYLLABLE CYOLM -->
+ <map code="0xcd83" name="1em"/><!-- HANGUL SYLLABLE CYOLB -->
+ <map code="0xcd84" name="1em"/><!-- HANGUL SYLLABLE CYOLS -->
+ <map code="0xcd85" name="1em"/><!-- HANGUL SYLLABLE CYOLT -->
+ <map code="0xcd86" name="1em"/><!-- HANGUL SYLLABLE CYOLP -->
+ <map code="0xcd87" name="1em"/><!-- HANGUL SYLLABLE CYOLH -->
+ <map code="0xcd88" name="1em"/><!-- HANGUL SYLLABLE CYOM -->
+ <map code="0xcd89" name="1em"/><!-- HANGUL SYLLABLE CYOB -->
+ <map code="0xcd8a" name="1em"/><!-- HANGUL SYLLABLE CYOBS -->
+ <map code="0xcd8b" name="1em"/><!-- HANGUL SYLLABLE CYOS -->
+ <map code="0xcd8c" name="1em"/><!-- HANGUL SYLLABLE CYOSS -->
+ <map code="0xcd8d" name="1em"/><!-- HANGUL SYLLABLE CYONG -->
+ <map code="0xcd8e" name="1em"/><!-- HANGUL SYLLABLE CYOJ -->
+ <map code="0xcd8f" name="1em"/><!-- HANGUL SYLLABLE CYOC -->
+ <map code="0xcd90" name="1em"/><!-- HANGUL SYLLABLE CYOK -->
+ <map code="0xcd91" name="1em"/><!-- HANGUL SYLLABLE CYOT -->
+ <map code="0xcd92" name="1em"/><!-- HANGUL SYLLABLE CYOP -->
+ <map code="0xcd93" name="1em"/><!-- HANGUL SYLLABLE CYOH -->
+ <map code="0xcd94" name="1em"/><!-- HANGUL SYLLABLE CU -->
+ <map code="0xcd95" name="1em"/><!-- HANGUL SYLLABLE CUG -->
+ <map code="0xcd96" name="1em"/><!-- HANGUL SYLLABLE CUGG -->
+ <map code="0xcd97" name="1em"/><!-- HANGUL SYLLABLE CUGS -->
+ <map code="0xcd98" name="1em"/><!-- HANGUL SYLLABLE CUN -->
+ <map code="0xcd99" name="1em"/><!-- HANGUL SYLLABLE CUNJ -->
+ <map code="0xcd9a" name="1em"/><!-- HANGUL SYLLABLE CUNH -->
+ <map code="0xcd9b" name="1em"/><!-- HANGUL SYLLABLE CUD -->
+ <map code="0xcd9c" name="1em"/><!-- HANGUL SYLLABLE CUL -->
+ <map code="0xcd9d" name="1em"/><!-- HANGUL SYLLABLE CULG -->
+ <map code="0xcd9e" name="1em"/><!-- HANGUL SYLLABLE CULM -->
+ <map code="0xcd9f" name="1em"/><!-- HANGUL SYLLABLE CULB -->
+ <map code="0xcda0" name="1em"/><!-- HANGUL SYLLABLE CULS -->
+ <map code="0xcda1" name="1em"/><!-- HANGUL SYLLABLE CULT -->
+ <map code="0xcda2" name="1em"/><!-- HANGUL SYLLABLE CULP -->
+ <map code="0xcda3" name="1em"/><!-- HANGUL SYLLABLE CULH -->
+ <map code="0xcda4" name="1em"/><!-- HANGUL SYLLABLE CUM -->
+ <map code="0xcda5" name="1em"/><!-- HANGUL SYLLABLE CUB -->
+ <map code="0xcda6" name="1em"/><!-- HANGUL SYLLABLE CUBS -->
+ <map code="0xcda7" name="1em"/><!-- HANGUL SYLLABLE CUS -->
+ <map code="0xcda8" name="1em"/><!-- HANGUL SYLLABLE CUSS -->
+ <map code="0xcda9" name="1em"/><!-- HANGUL SYLLABLE CUNG -->
+ <map code="0xcdaa" name="1em"/><!-- HANGUL SYLLABLE CUJ -->
+ <map code="0xcdab" name="1em"/><!-- HANGUL SYLLABLE CUC -->
+ <map code="0xcdac" name="1em"/><!-- HANGUL SYLLABLE CUK -->
+ <map code="0xcdad" name="1em"/><!-- HANGUL SYLLABLE CUT -->
+ <map code="0xcdae" name="1em"/><!-- HANGUL SYLLABLE CUP -->
+ <map code="0xcdaf" name="1em"/><!-- HANGUL SYLLABLE CUH -->
+ <map code="0xcdb0" name="1em"/><!-- HANGUL SYLLABLE CWEO -->
+ <map code="0xcdb1" name="1em"/><!-- HANGUL SYLLABLE CWEOG -->
+ <map code="0xcdb2" name="1em"/><!-- HANGUL SYLLABLE CWEOGG -->
+ <map code="0xcdb3" name="1em"/><!-- HANGUL SYLLABLE CWEOGS -->
+ <map code="0xcdb4" name="1em"/><!-- HANGUL SYLLABLE CWEON -->
+ <map code="0xcdb5" name="1em"/><!-- HANGUL SYLLABLE CWEONJ -->
+ <map code="0xcdb6" name="1em"/><!-- HANGUL SYLLABLE CWEONH -->
+ <map code="0xcdb7" name="1em"/><!-- HANGUL SYLLABLE CWEOD -->
+ <map code="0xcdb8" name="1em"/><!-- HANGUL SYLLABLE CWEOL -->
+ <map code="0xcdb9" name="1em"/><!-- HANGUL SYLLABLE CWEOLG -->
+ <map code="0xcdba" name="1em"/><!-- HANGUL SYLLABLE CWEOLM -->
+ <map code="0xcdbb" name="1em"/><!-- HANGUL SYLLABLE CWEOLB -->
+ <map code="0xcdbc" name="1em"/><!-- HANGUL SYLLABLE CWEOLS -->
+ <map code="0xcdbd" name="1em"/><!-- HANGUL SYLLABLE CWEOLT -->
+ <map code="0xcdbe" name="1em"/><!-- HANGUL SYLLABLE CWEOLP -->
+ <map code="0xcdbf" name="1em"/><!-- HANGUL SYLLABLE CWEOLH -->
+ <map code="0xcdc0" name="1em"/><!-- HANGUL SYLLABLE CWEOM -->
+ <map code="0xcdc1" name="1em"/><!-- HANGUL SYLLABLE CWEOB -->
+ <map code="0xcdc2" name="1em"/><!-- HANGUL SYLLABLE CWEOBS -->
+ <map code="0xcdc3" name="1em"/><!-- HANGUL SYLLABLE CWEOS -->
+ <map code="0xcdc4" name="1em"/><!-- HANGUL SYLLABLE CWEOSS -->
+ <map code="0xcdc5" name="1em"/><!-- HANGUL SYLLABLE CWEONG -->
+ <map code="0xcdc6" name="1em"/><!-- HANGUL SYLLABLE CWEOJ -->
+ <map code="0xcdc7" name="1em"/><!-- HANGUL SYLLABLE CWEOC -->
+ <map code="0xcdc8" name="1em"/><!-- HANGUL SYLLABLE CWEOK -->
+ <map code="0xcdc9" name="1em"/><!-- HANGUL SYLLABLE CWEOT -->
+ <map code="0xcdca" name="1em"/><!-- HANGUL SYLLABLE CWEOP -->
+ <map code="0xcdcb" name="1em"/><!-- HANGUL SYLLABLE CWEOH -->
+ <map code="0xcdcc" name="1em"/><!-- HANGUL SYLLABLE CWE -->
+ <map code="0xcdcd" name="1em"/><!-- HANGUL SYLLABLE CWEG -->
+ <map code="0xcdce" name="1em"/><!-- HANGUL SYLLABLE CWEGG -->
+ <map code="0xcdcf" name="1em"/><!-- HANGUL SYLLABLE CWEGS -->
+ <map code="0xcdd0" name="1em"/><!-- HANGUL SYLLABLE CWEN -->
+ <map code="0xcdd1" name="1em"/><!-- HANGUL SYLLABLE CWENJ -->
+ <map code="0xcdd2" name="1em"/><!-- HANGUL SYLLABLE CWENH -->
+ <map code="0xcdd3" name="1em"/><!-- HANGUL SYLLABLE CWED -->
+ <map code="0xcdd4" name="1em"/><!-- HANGUL SYLLABLE CWEL -->
+ <map code="0xcdd5" name="1em"/><!-- HANGUL SYLLABLE CWELG -->
+ <map code="0xcdd6" name="1em"/><!-- HANGUL SYLLABLE CWELM -->
+ <map code="0xcdd7" name="1em"/><!-- HANGUL SYLLABLE CWELB -->
+ <map code="0xcdd8" name="1em"/><!-- HANGUL SYLLABLE CWELS -->
+ <map code="0xcdd9" name="1em"/><!-- HANGUL SYLLABLE CWELT -->
+ <map code="0xcdda" name="1em"/><!-- HANGUL SYLLABLE CWELP -->
+ <map code="0xcddb" name="1em"/><!-- HANGUL SYLLABLE CWELH -->
+ <map code="0xcddc" name="1em"/><!-- HANGUL SYLLABLE CWEM -->
+ <map code="0xcddd" name="1em"/><!-- HANGUL SYLLABLE CWEB -->
+ <map code="0xcdde" name="1em"/><!-- HANGUL SYLLABLE CWEBS -->
+ <map code="0xcddf" name="1em"/><!-- HANGUL SYLLABLE CWES -->
+ <map code="0xcde0" name="1em"/><!-- HANGUL SYLLABLE CWESS -->
+ <map code="0xcde1" name="1em"/><!-- HANGUL SYLLABLE CWENG -->
+ <map code="0xcde2" name="1em"/><!-- HANGUL SYLLABLE CWEJ -->
+ <map code="0xcde3" name="1em"/><!-- HANGUL SYLLABLE CWEC -->
+ <map code="0xcde4" name="1em"/><!-- HANGUL SYLLABLE CWEK -->
+ <map code="0xcde5" name="1em"/><!-- HANGUL SYLLABLE CWET -->
+ <map code="0xcde6" name="1em"/><!-- HANGUL SYLLABLE CWEP -->
+ <map code="0xcde7" name="1em"/><!-- HANGUL SYLLABLE CWEH -->
+ <map code="0xcde8" name="1em"/><!-- HANGUL SYLLABLE CWI -->
+ <map code="0xcde9" name="1em"/><!-- HANGUL SYLLABLE CWIG -->
+ <map code="0xcdea" name="1em"/><!-- HANGUL SYLLABLE CWIGG -->
+ <map code="0xcdeb" name="1em"/><!-- HANGUL SYLLABLE CWIGS -->
+ <map code="0xcdec" name="1em"/><!-- HANGUL SYLLABLE CWIN -->
+ <map code="0xcded" name="1em"/><!-- HANGUL SYLLABLE CWINJ -->
+ <map code="0xcdee" name="1em"/><!-- HANGUL SYLLABLE CWINH -->
+ <map code="0xcdef" name="1em"/><!-- HANGUL SYLLABLE CWID -->
+ <map code="0xcdf0" name="1em"/><!-- HANGUL SYLLABLE CWIL -->
+ <map code="0xcdf1" name="1em"/><!-- HANGUL SYLLABLE CWILG -->
+ <map code="0xcdf2" name="1em"/><!-- HANGUL SYLLABLE CWILM -->
+ <map code="0xcdf3" name="1em"/><!-- HANGUL SYLLABLE CWILB -->
+ <map code="0xcdf4" name="1em"/><!-- HANGUL SYLLABLE CWILS -->
+ <map code="0xcdf5" name="1em"/><!-- HANGUL SYLLABLE CWILT -->
+ <map code="0xcdf6" name="1em"/><!-- HANGUL SYLLABLE CWILP -->
+ <map code="0xcdf7" name="1em"/><!-- HANGUL SYLLABLE CWILH -->
+ <map code="0xcdf8" name="1em"/><!-- HANGUL SYLLABLE CWIM -->
+ <map code="0xcdf9" name="1em"/><!-- HANGUL SYLLABLE CWIB -->
+ <map code="0xcdfa" name="1em"/><!-- HANGUL SYLLABLE CWIBS -->
+ <map code="0xcdfb" name="1em"/><!-- HANGUL SYLLABLE CWIS -->
+ <map code="0xcdfc" name="1em"/><!-- HANGUL SYLLABLE CWISS -->
+ <map code="0xcdfd" name="1em"/><!-- HANGUL SYLLABLE CWING -->
+ <map code="0xcdfe" name="1em"/><!-- HANGUL SYLLABLE CWIJ -->
+ <map code="0xcdff" name="1em"/><!-- HANGUL SYLLABLE CWIC -->
+ <map code="0xce00" name="1em"/><!-- HANGUL SYLLABLE CWIK -->
+ <map code="0xce01" name="1em"/><!-- HANGUL SYLLABLE CWIT -->
+ <map code="0xce02" name="1em"/><!-- HANGUL SYLLABLE CWIP -->
+ <map code="0xce03" name="1em"/><!-- HANGUL SYLLABLE CWIH -->
+ <map code="0xce04" name="1em"/><!-- HANGUL SYLLABLE CYU -->
+ <map code="0xce05" name="1em"/><!-- HANGUL SYLLABLE CYUG -->
+ <map code="0xce06" name="1em"/><!-- HANGUL SYLLABLE CYUGG -->
+ <map code="0xce07" name="1em"/><!-- HANGUL SYLLABLE CYUGS -->
+ <map code="0xce08" name="1em"/><!-- HANGUL SYLLABLE CYUN -->
+ <map code="0xce09" name="1em"/><!-- HANGUL SYLLABLE CYUNJ -->
+ <map code="0xce0a" name="1em"/><!-- HANGUL SYLLABLE CYUNH -->
+ <map code="0xce0b" name="1em"/><!-- HANGUL SYLLABLE CYUD -->
+ <map code="0xce0c" name="1em"/><!-- HANGUL SYLLABLE CYUL -->
+ <map code="0xce0d" name="1em"/><!-- HANGUL SYLLABLE CYULG -->
+ <map code="0xce0e" name="1em"/><!-- HANGUL SYLLABLE CYULM -->
+ <map code="0xce0f" name="1em"/><!-- HANGUL SYLLABLE CYULB -->
+ <map code="0xce10" name="1em"/><!-- HANGUL SYLLABLE CYULS -->
+ <map code="0xce11" name="1em"/><!-- HANGUL SYLLABLE CYULT -->
+ <map code="0xce12" name="1em"/><!-- HANGUL SYLLABLE CYULP -->
+ <map code="0xce13" name="1em"/><!-- HANGUL SYLLABLE CYULH -->
+ <map code="0xce14" name="1em"/><!-- HANGUL SYLLABLE CYUM -->
+ <map code="0xce15" name="1em"/><!-- HANGUL SYLLABLE CYUB -->
+ <map code="0xce16" name="1em"/><!-- HANGUL SYLLABLE CYUBS -->
+ <map code="0xce17" name="1em"/><!-- HANGUL SYLLABLE CYUS -->
+ <map code="0xce18" name="1em"/><!-- HANGUL SYLLABLE CYUSS -->
+ <map code="0xce19" name="1em"/><!-- HANGUL SYLLABLE CYUNG -->
+ <map code="0xce1a" name="1em"/><!-- HANGUL SYLLABLE CYUJ -->
+ <map code="0xce1b" name="1em"/><!-- HANGUL SYLLABLE CYUC -->
+ <map code="0xce1c" name="1em"/><!-- HANGUL SYLLABLE CYUK -->
+ <map code="0xce1d" name="1em"/><!-- HANGUL SYLLABLE CYUT -->
+ <map code="0xce1e" name="1em"/><!-- HANGUL SYLLABLE CYUP -->
+ <map code="0xce1f" name="1em"/><!-- HANGUL SYLLABLE CYUH -->
+ <map code="0xce20" name="1em"/><!-- HANGUL SYLLABLE CEU -->
+ <map code="0xce21" name="1em"/><!-- HANGUL SYLLABLE CEUG -->
+ <map code="0xce22" name="1em"/><!-- HANGUL SYLLABLE CEUGG -->
+ <map code="0xce23" name="1em"/><!-- HANGUL SYLLABLE CEUGS -->
+ <map code="0xce24" name="1em"/><!-- HANGUL SYLLABLE CEUN -->
+ <map code="0xce25" name="1em"/><!-- HANGUL SYLLABLE CEUNJ -->
+ <map code="0xce26" name="1em"/><!-- HANGUL SYLLABLE CEUNH -->
+ <map code="0xce27" name="1em"/><!-- HANGUL SYLLABLE CEUD -->
+ <map code="0xce28" name="1em"/><!-- HANGUL SYLLABLE CEUL -->
+ <map code="0xce29" name="1em"/><!-- HANGUL SYLLABLE CEULG -->
+ <map code="0xce2a" name="1em"/><!-- HANGUL SYLLABLE CEULM -->
+ <map code="0xce2b" name="1em"/><!-- HANGUL SYLLABLE CEULB -->
+ <map code="0xce2c" name="1em"/><!-- HANGUL SYLLABLE CEULS -->
+ <map code="0xce2d" name="1em"/><!-- HANGUL SYLLABLE CEULT -->
+ <map code="0xce2e" name="1em"/><!-- HANGUL SYLLABLE CEULP -->
+ <map code="0xce2f" name="1em"/><!-- HANGUL SYLLABLE CEULH -->
+ <map code="0xce30" name="1em"/><!-- HANGUL SYLLABLE CEUM -->
+ <map code="0xce31" name="1em"/><!-- HANGUL SYLLABLE CEUB -->
+ <map code="0xce32" name="1em"/><!-- HANGUL SYLLABLE CEUBS -->
+ <map code="0xce33" name="1em"/><!-- HANGUL SYLLABLE CEUS -->
+ <map code="0xce34" name="1em"/><!-- HANGUL SYLLABLE CEUSS -->
+ <map code="0xce35" name="1em"/><!-- HANGUL SYLLABLE CEUNG -->
+ <map code="0xce36" name="1em"/><!-- HANGUL SYLLABLE CEUJ -->
+ <map code="0xce37" name="1em"/><!-- HANGUL SYLLABLE CEUC -->
+ <map code="0xce38" name="1em"/><!-- HANGUL SYLLABLE CEUK -->
+ <map code="0xce39" name="1em"/><!-- HANGUL SYLLABLE CEUT -->
+ <map code="0xce3a" name="1em"/><!-- HANGUL SYLLABLE CEUP -->
+ <map code="0xce3b" name="1em"/><!-- HANGUL SYLLABLE CEUH -->
+ <map code="0xce3c" name="1em"/><!-- HANGUL SYLLABLE CYI -->
+ <map code="0xce3d" name="1em"/><!-- HANGUL SYLLABLE CYIG -->
+ <map code="0xce3e" name="1em"/><!-- HANGUL SYLLABLE CYIGG -->
+ <map code="0xce3f" name="1em"/><!-- HANGUL SYLLABLE CYIGS -->
+ <map code="0xce40" name="1em"/><!-- HANGUL SYLLABLE CYIN -->
+ <map code="0xce41" name="1em"/><!-- HANGUL SYLLABLE CYINJ -->
+ <map code="0xce42" name="1em"/><!-- HANGUL SYLLABLE CYINH -->
+ <map code="0xce43" name="1em"/><!-- HANGUL SYLLABLE CYID -->
+ <map code="0xce44" name="1em"/><!-- HANGUL SYLLABLE CYIL -->
+ <map code="0xce45" name="1em"/><!-- HANGUL SYLLABLE CYILG -->
+ <map code="0xce46" name="1em"/><!-- HANGUL SYLLABLE CYILM -->
+ <map code="0xce47" name="1em"/><!-- HANGUL SYLLABLE CYILB -->
+ <map code="0xce48" name="1em"/><!-- HANGUL SYLLABLE CYILS -->
+ <map code="0xce49" name="1em"/><!-- HANGUL SYLLABLE CYILT -->
+ <map code="0xce4a" name="1em"/><!-- HANGUL SYLLABLE CYILP -->
+ <map code="0xce4b" name="1em"/><!-- HANGUL SYLLABLE CYILH -->
+ <map code="0xce4c" name="1em"/><!-- HANGUL SYLLABLE CYIM -->
+ <map code="0xce4d" name="1em"/><!-- HANGUL SYLLABLE CYIB -->
+ <map code="0xce4e" name="1em"/><!-- HANGUL SYLLABLE CYIBS -->
+ <map code="0xce4f" name="1em"/><!-- HANGUL SYLLABLE CYIS -->
+ <map code="0xce50" name="1em"/><!-- HANGUL SYLLABLE CYISS -->
+ <map code="0xce51" name="1em"/><!-- HANGUL SYLLABLE CYING -->
+ <map code="0xce52" name="1em"/><!-- HANGUL SYLLABLE CYIJ -->
+ <map code="0xce53" name="1em"/><!-- HANGUL SYLLABLE CYIC -->
+ <map code="0xce54" name="1em"/><!-- HANGUL SYLLABLE CYIK -->
+ <map code="0xce55" name="1em"/><!-- HANGUL SYLLABLE CYIT -->
+ <map code="0xce56" name="1em"/><!-- HANGUL SYLLABLE CYIP -->
+ <map code="0xce57" name="1em"/><!-- HANGUL SYLLABLE CYIH -->
+ <map code="0xce58" name="1em"/><!-- HANGUL SYLLABLE CI -->
+ <map code="0xce59" name="1em"/><!-- HANGUL SYLLABLE CIG -->
+ <map code="0xce5a" name="1em"/><!-- HANGUL SYLLABLE CIGG -->
+ <map code="0xce5b" name="1em"/><!-- HANGUL SYLLABLE CIGS -->
+ <map code="0xce5c" name="1em"/><!-- HANGUL SYLLABLE CIN -->
+ <map code="0xce5d" name="1em"/><!-- HANGUL SYLLABLE CINJ -->
+ <map code="0xce5e" name="1em"/><!-- HANGUL SYLLABLE CINH -->
+ <map code="0xce5f" name="1em"/><!-- HANGUL SYLLABLE CID -->
+ <map code="0xce60" name="1em"/><!-- HANGUL SYLLABLE CIL -->
+ <map code="0xce61" name="1em"/><!-- HANGUL SYLLABLE CILG -->
+ <map code="0xce62" name="1em"/><!-- HANGUL SYLLABLE CILM -->
+ <map code="0xce63" name="1em"/><!-- HANGUL SYLLABLE CILB -->
+ <map code="0xce64" name="1em"/><!-- HANGUL SYLLABLE CILS -->
+ <map code="0xce65" name="1em"/><!-- HANGUL SYLLABLE CILT -->
+ <map code="0xce66" name="1em"/><!-- HANGUL SYLLABLE CILP -->
+ <map code="0xce67" name="1em"/><!-- HANGUL SYLLABLE CILH -->
+ <map code="0xce68" name="1em"/><!-- HANGUL SYLLABLE CIM -->
+ <map code="0xce69" name="1em"/><!-- HANGUL SYLLABLE CIB -->
+ <map code="0xce6a" name="1em"/><!-- HANGUL SYLLABLE CIBS -->
+ <map code="0xce6b" name="1em"/><!-- HANGUL SYLLABLE CIS -->
+ <map code="0xce6c" name="1em"/><!-- HANGUL SYLLABLE CISS -->
+ <map code="0xce6d" name="1em"/><!-- HANGUL SYLLABLE CING -->
+ <map code="0xce6e" name="1em"/><!-- HANGUL SYLLABLE CIJ -->
+ <map code="0xce6f" name="1em"/><!-- HANGUL SYLLABLE CIC -->
+ <map code="0xce70" name="1em"/><!-- HANGUL SYLLABLE CIK -->
+ <map code="0xce71" name="1em"/><!-- HANGUL SYLLABLE CIT -->
+ <map code="0xce72" name="1em"/><!-- HANGUL SYLLABLE CIP -->
+ <map code="0xce73" name="1em"/><!-- HANGUL SYLLABLE CIH -->
+ <map code="0xce74" name="1em"/><!-- HANGUL SYLLABLE KA -->
+ <map code="0xce75" name="1em"/><!-- HANGUL SYLLABLE KAG -->
+ <map code="0xce76" name="1em"/><!-- HANGUL SYLLABLE KAGG -->
+ <map code="0xce77" name="1em"/><!-- HANGUL SYLLABLE KAGS -->
+ <map code="0xce78" name="1em"/><!-- HANGUL SYLLABLE KAN -->
+ <map code="0xce79" name="1em"/><!-- HANGUL SYLLABLE KANJ -->
+ <map code="0xce7a" name="1em"/><!-- HANGUL SYLLABLE KANH -->
+ <map code="0xce7b" name="1em"/><!-- HANGUL SYLLABLE KAD -->
+ <map code="0xce7c" name="1em"/><!-- HANGUL SYLLABLE KAL -->
+ <map code="0xce7d" name="1em"/><!-- HANGUL SYLLABLE KALG -->
+ <map code="0xce7e" name="1em"/><!-- HANGUL SYLLABLE KALM -->
+ <map code="0xce7f" name="1em"/><!-- HANGUL SYLLABLE KALB -->
+ <map code="0xce80" name="1em"/><!-- HANGUL SYLLABLE KALS -->
+ <map code="0xce81" name="1em"/><!-- HANGUL SYLLABLE KALT -->
+ <map code="0xce82" name="1em"/><!-- HANGUL SYLLABLE KALP -->
+ <map code="0xce83" name="1em"/><!-- HANGUL SYLLABLE KALH -->
+ <map code="0xce84" name="1em"/><!-- HANGUL SYLLABLE KAM -->
+ <map code="0xce85" name="1em"/><!-- HANGUL SYLLABLE KAB -->
+ <map code="0xce86" name="1em"/><!-- HANGUL SYLLABLE KABS -->
+ <map code="0xce87" name="1em"/><!-- HANGUL SYLLABLE KAS -->
+ <map code="0xce88" name="1em"/><!-- HANGUL SYLLABLE KASS -->
+ <map code="0xce89" name="1em"/><!-- HANGUL SYLLABLE KANG -->
+ <map code="0xce8a" name="1em"/><!-- HANGUL SYLLABLE KAJ -->
+ <map code="0xce8b" name="1em"/><!-- HANGUL SYLLABLE KAC -->
+ <map code="0xce8c" name="1em"/><!-- HANGUL SYLLABLE KAK -->
+ <map code="0xce8d" name="1em"/><!-- HANGUL SYLLABLE KAT -->
+ <map code="0xce8e" name="1em"/><!-- HANGUL SYLLABLE KAP -->
+ <map code="0xce8f" name="1em"/><!-- HANGUL SYLLABLE KAH -->
+ <map code="0xce90" name="1em"/><!-- HANGUL SYLLABLE KAE -->
+ <map code="0xce91" name="1em"/><!-- HANGUL SYLLABLE KAEG -->
+ <map code="0xce92" name="1em"/><!-- HANGUL SYLLABLE KAEGG -->
+ <map code="0xce93" name="1em"/><!-- HANGUL SYLLABLE KAEGS -->
+ <map code="0xce94" name="1em"/><!-- HANGUL SYLLABLE KAEN -->
+ <map code="0xce95" name="1em"/><!-- HANGUL SYLLABLE KAENJ -->
+ <map code="0xce96" name="1em"/><!-- HANGUL SYLLABLE KAENH -->
+ <map code="0xce97" name="1em"/><!-- HANGUL SYLLABLE KAED -->
+ <map code="0xce98" name="1em"/><!-- HANGUL SYLLABLE KAEL -->
+ <map code="0xce99" name="1em"/><!-- HANGUL SYLLABLE KAELG -->
+ <map code="0xce9a" name="1em"/><!-- HANGUL SYLLABLE KAELM -->
+ <map code="0xce9b" name="1em"/><!-- HANGUL SYLLABLE KAELB -->
+ <map code="0xce9c" name="1em"/><!-- HANGUL SYLLABLE KAELS -->
+ <map code="0xce9d" name="1em"/><!-- HANGUL SYLLABLE KAELT -->
+ <map code="0xce9e" name="1em"/><!-- HANGUL SYLLABLE KAELP -->
+ <map code="0xce9f" name="1em"/><!-- HANGUL SYLLABLE KAELH -->
+ <map code="0xcea0" name="1em"/><!-- HANGUL SYLLABLE KAEM -->
+ <map code="0xcea1" name="1em"/><!-- HANGUL SYLLABLE KAEB -->
+ <map code="0xcea2" name="1em"/><!-- HANGUL SYLLABLE KAEBS -->
+ <map code="0xcea3" name="1em"/><!-- HANGUL SYLLABLE KAES -->
+ <map code="0xcea4" name="1em"/><!-- HANGUL SYLLABLE KAESS -->
+ <map code="0xcea5" name="1em"/><!-- HANGUL SYLLABLE KAENG -->
+ <map code="0xcea6" name="1em"/><!-- HANGUL SYLLABLE KAEJ -->
+ <map code="0xcea7" name="1em"/><!-- HANGUL SYLLABLE KAEC -->
+ <map code="0xcea8" name="1em"/><!-- HANGUL SYLLABLE KAEK -->
+ <map code="0xcea9" name="1em"/><!-- HANGUL SYLLABLE KAET -->
+ <map code="0xceaa" name="1em"/><!-- HANGUL SYLLABLE KAEP -->
+ <map code="0xceab" name="1em"/><!-- HANGUL SYLLABLE KAEH -->
+ <map code="0xceac" name="1em"/><!-- HANGUL SYLLABLE KYA -->
+ <map code="0xcead" name="1em"/><!-- HANGUL SYLLABLE KYAG -->
+ <map code="0xceae" name="1em"/><!-- HANGUL SYLLABLE KYAGG -->
+ <map code="0xceaf" name="1em"/><!-- HANGUL SYLLABLE KYAGS -->
+ <map code="0xceb0" name="1em"/><!-- HANGUL SYLLABLE KYAN -->
+ <map code="0xceb1" name="1em"/><!-- HANGUL SYLLABLE KYANJ -->
+ <map code="0xceb2" name="1em"/><!-- HANGUL SYLLABLE KYANH -->
+ <map code="0xceb3" name="1em"/><!-- HANGUL SYLLABLE KYAD -->
+ <map code="0xceb4" name="1em"/><!-- HANGUL SYLLABLE KYAL -->
+ <map code="0xceb5" name="1em"/><!-- HANGUL SYLLABLE KYALG -->
+ <map code="0xceb6" name="1em"/><!-- HANGUL SYLLABLE KYALM -->
+ <map code="0xceb7" name="1em"/><!-- HANGUL SYLLABLE KYALB -->
+ <map code="0xceb8" name="1em"/><!-- HANGUL SYLLABLE KYALS -->
+ <map code="0xceb9" name="1em"/><!-- HANGUL SYLLABLE KYALT -->
+ <map code="0xceba" name="1em"/><!-- HANGUL SYLLABLE KYALP -->
+ <map code="0xcebb" name="1em"/><!-- HANGUL SYLLABLE KYALH -->
+ <map code="0xcebc" name="1em"/><!-- HANGUL SYLLABLE KYAM -->
+ <map code="0xcebd" name="1em"/><!-- HANGUL SYLLABLE KYAB -->
+ <map code="0xcebe" name="1em"/><!-- HANGUL SYLLABLE KYABS -->
+ <map code="0xcebf" name="1em"/><!-- HANGUL SYLLABLE KYAS -->
+ <map code="0xcec0" name="1em"/><!-- HANGUL SYLLABLE KYASS -->
+ <map code="0xcec1" name="1em"/><!-- HANGUL SYLLABLE KYANG -->
+ <map code="0xcec2" name="1em"/><!-- HANGUL SYLLABLE KYAJ -->
+ <map code="0xcec3" name="1em"/><!-- HANGUL SYLLABLE KYAC -->
+ <map code="0xcec4" name="1em"/><!-- HANGUL SYLLABLE KYAK -->
+ <map code="0xcec5" name="1em"/><!-- HANGUL SYLLABLE KYAT -->
+ <map code="0xcec6" name="1em"/><!-- HANGUL SYLLABLE KYAP -->
+ <map code="0xcec7" name="1em"/><!-- HANGUL SYLLABLE KYAH -->
+ <map code="0xcec8" name="1em"/><!-- HANGUL SYLLABLE KYAE -->
+ <map code="0xcec9" name="1em"/><!-- HANGUL SYLLABLE KYAEG -->
+ <map code="0xceca" name="1em"/><!-- HANGUL SYLLABLE KYAEGG -->
+ <map code="0xcecb" name="1em"/><!-- HANGUL SYLLABLE KYAEGS -->
+ <map code="0xcecc" name="1em"/><!-- HANGUL SYLLABLE KYAEN -->
+ <map code="0xcecd" name="1em"/><!-- HANGUL SYLLABLE KYAENJ -->
+ <map code="0xcece" name="1em"/><!-- HANGUL SYLLABLE KYAENH -->
+ <map code="0xcecf" name="1em"/><!-- HANGUL SYLLABLE KYAED -->
+ <map code="0xced0" name="1em"/><!-- HANGUL SYLLABLE KYAEL -->
+ <map code="0xced1" name="1em"/><!-- HANGUL SYLLABLE KYAELG -->
+ <map code="0xced2" name="1em"/><!-- HANGUL SYLLABLE KYAELM -->
+ <map code="0xced3" name="1em"/><!-- HANGUL SYLLABLE KYAELB -->
+ <map code="0xced4" name="1em"/><!-- HANGUL SYLLABLE KYAELS -->
+ <map code="0xced5" name="1em"/><!-- HANGUL SYLLABLE KYAELT -->
+ <map code="0xced6" name="1em"/><!-- HANGUL SYLLABLE KYAELP -->
+ <map code="0xced7" name="1em"/><!-- HANGUL SYLLABLE KYAELH -->
+ <map code="0xced8" name="1em"/><!-- HANGUL SYLLABLE KYAEM -->
+ <map code="0xced9" name="1em"/><!-- HANGUL SYLLABLE KYAEB -->
+ <map code="0xceda" name="1em"/><!-- HANGUL SYLLABLE KYAEBS -->
+ <map code="0xcedb" name="1em"/><!-- HANGUL SYLLABLE KYAES -->
+ <map code="0xcedc" name="1em"/><!-- HANGUL SYLLABLE KYAESS -->
+ <map code="0xcedd" name="1em"/><!-- HANGUL SYLLABLE KYAENG -->
+ <map code="0xcede" name="1em"/><!-- HANGUL SYLLABLE KYAEJ -->
+ <map code="0xcedf" name="1em"/><!-- HANGUL SYLLABLE KYAEC -->
+ <map code="0xcee0" name="1em"/><!-- HANGUL SYLLABLE KYAEK -->
+ <map code="0xcee1" name="1em"/><!-- HANGUL SYLLABLE KYAET -->
+ <map code="0xcee2" name="1em"/><!-- HANGUL SYLLABLE KYAEP -->
+ <map code="0xcee3" name="1em"/><!-- HANGUL SYLLABLE KYAEH -->
+ <map code="0xcee4" name="1em"/><!-- HANGUL SYLLABLE KEO -->
+ <map code="0xcee5" name="1em"/><!-- HANGUL SYLLABLE KEOG -->
+ <map code="0xcee6" name="1em"/><!-- HANGUL SYLLABLE KEOGG -->
+ <map code="0xcee7" name="1em"/><!-- HANGUL SYLLABLE KEOGS -->
+ <map code="0xcee8" name="1em"/><!-- HANGUL SYLLABLE KEON -->
+ <map code="0xcee9" name="1em"/><!-- HANGUL SYLLABLE KEONJ -->
+ <map code="0xceea" name="1em"/><!-- HANGUL SYLLABLE KEONH -->
+ <map code="0xceeb" name="1em"/><!-- HANGUL SYLLABLE KEOD -->
+ <map code="0xceec" name="1em"/><!-- HANGUL SYLLABLE KEOL -->
+ <map code="0xceed" name="1em"/><!-- HANGUL SYLLABLE KEOLG -->
+ <map code="0xceee" name="1em"/><!-- HANGUL SYLLABLE KEOLM -->
+ <map code="0xceef" name="1em"/><!-- HANGUL SYLLABLE KEOLB -->
+ <map code="0xcef0" name="1em"/><!-- HANGUL SYLLABLE KEOLS -->
+ <map code="0xcef1" name="1em"/><!-- HANGUL SYLLABLE KEOLT -->
+ <map code="0xcef2" name="1em"/><!-- HANGUL SYLLABLE KEOLP -->
+ <map code="0xcef3" name="1em"/><!-- HANGUL SYLLABLE KEOLH -->
+ <map code="0xcef4" name="1em"/><!-- HANGUL SYLLABLE KEOM -->
+ <map code="0xcef5" name="1em"/><!-- HANGUL SYLLABLE KEOB -->
+ <map code="0xcef6" name="1em"/><!-- HANGUL SYLLABLE KEOBS -->
+ <map code="0xcef7" name="1em"/><!-- HANGUL SYLLABLE KEOS -->
+ <map code="0xcef8" name="1em"/><!-- HANGUL SYLLABLE KEOSS -->
+ <map code="0xcef9" name="1em"/><!-- HANGUL SYLLABLE KEONG -->
+ <map code="0xcefa" name="1em"/><!-- HANGUL SYLLABLE KEOJ -->
+ <map code="0xcefb" name="1em"/><!-- HANGUL SYLLABLE KEOC -->
+ <map code="0xcefc" name="1em"/><!-- HANGUL SYLLABLE KEOK -->
+ <map code="0xcefd" name="1em"/><!-- HANGUL SYLLABLE KEOT -->
+ <map code="0xcefe" name="1em"/><!-- HANGUL SYLLABLE KEOP -->
+ <map code="0xceff" name="1em"/><!-- HANGUL SYLLABLE KEOH -->
+ <map code="0xcf00" name="1em"/><!-- HANGUL SYLLABLE KE -->
+ <map code="0xcf01" name="1em"/><!-- HANGUL SYLLABLE KEG -->
+ <map code="0xcf02" name="1em"/><!-- HANGUL SYLLABLE KEGG -->
+ <map code="0xcf03" name="1em"/><!-- HANGUL SYLLABLE KEGS -->
+ <map code="0xcf04" name="1em"/><!-- HANGUL SYLLABLE KEN -->
+ <map code="0xcf05" name="1em"/><!-- HANGUL SYLLABLE KENJ -->
+ <map code="0xcf06" name="1em"/><!-- HANGUL SYLLABLE KENH -->
+ <map code="0xcf07" name="1em"/><!-- HANGUL SYLLABLE KED -->
+ <map code="0xcf08" name="1em"/><!-- HANGUL SYLLABLE KEL -->
+ <map code="0xcf09" name="1em"/><!-- HANGUL SYLLABLE KELG -->
+ <map code="0xcf0a" name="1em"/><!-- HANGUL SYLLABLE KELM -->
+ <map code="0xcf0b" name="1em"/><!-- HANGUL SYLLABLE KELB -->
+ <map code="0xcf0c" name="1em"/><!-- HANGUL SYLLABLE KELS -->
+ <map code="0xcf0d" name="1em"/><!-- HANGUL SYLLABLE KELT -->
+ <map code="0xcf0e" name="1em"/><!-- HANGUL SYLLABLE KELP -->
+ <map code="0xcf0f" name="1em"/><!-- HANGUL SYLLABLE KELH -->
+ <map code="0xcf10" name="1em"/><!-- HANGUL SYLLABLE KEM -->
+ <map code="0xcf11" name="1em"/><!-- HANGUL SYLLABLE KEB -->
+ <map code="0xcf12" name="1em"/><!-- HANGUL SYLLABLE KEBS -->
+ <map code="0xcf13" name="1em"/><!-- HANGUL SYLLABLE KES -->
+ <map code="0xcf14" name="1em"/><!-- HANGUL SYLLABLE KESS -->
+ <map code="0xcf15" name="1em"/><!-- HANGUL SYLLABLE KENG -->
+ <map code="0xcf16" name="1em"/><!-- HANGUL SYLLABLE KEJ -->
+ <map code="0xcf17" name="1em"/><!-- HANGUL SYLLABLE KEC -->
+ <map code="0xcf18" name="1em"/><!-- HANGUL SYLLABLE KEK -->
+ <map code="0xcf19" name="1em"/><!-- HANGUL SYLLABLE KET -->
+ <map code="0xcf1a" name="1em"/><!-- HANGUL SYLLABLE KEP -->
+ <map code="0xcf1b" name="1em"/><!-- HANGUL SYLLABLE KEH -->
+ <map code="0xcf1c" name="1em"/><!-- HANGUL SYLLABLE KYEO -->
+ <map code="0xcf1d" name="1em"/><!-- HANGUL SYLLABLE KYEOG -->
+ <map code="0xcf1e" name="1em"/><!-- HANGUL SYLLABLE KYEOGG -->
+ <map code="0xcf1f" name="1em"/><!-- HANGUL SYLLABLE KYEOGS -->
+ <map code="0xcf20" name="1em"/><!-- HANGUL SYLLABLE KYEON -->
+ <map code="0xcf21" name="1em"/><!-- HANGUL SYLLABLE KYEONJ -->
+ <map code="0xcf22" name="1em"/><!-- HANGUL SYLLABLE KYEONH -->
+ <map code="0xcf23" name="1em"/><!-- HANGUL SYLLABLE KYEOD -->
+ <map code="0xcf24" name="1em"/><!-- HANGUL SYLLABLE KYEOL -->
+ <map code="0xcf25" name="1em"/><!-- HANGUL SYLLABLE KYEOLG -->
+ <map code="0xcf26" name="1em"/><!-- HANGUL SYLLABLE KYEOLM -->
+ <map code="0xcf27" name="1em"/><!-- HANGUL SYLLABLE KYEOLB -->
+ <map code="0xcf28" name="1em"/><!-- HANGUL SYLLABLE KYEOLS -->
+ <map code="0xcf29" name="1em"/><!-- HANGUL SYLLABLE KYEOLT -->
+ <map code="0xcf2a" name="1em"/><!-- HANGUL SYLLABLE KYEOLP -->
+ <map code="0xcf2b" name="1em"/><!-- HANGUL SYLLABLE KYEOLH -->
+ <map code="0xcf2c" name="1em"/><!-- HANGUL SYLLABLE KYEOM -->
+ <map code="0xcf2d" name="1em"/><!-- HANGUL SYLLABLE KYEOB -->
+ <map code="0xcf2e" name="1em"/><!-- HANGUL SYLLABLE KYEOBS -->
+ <map code="0xcf2f" name="1em"/><!-- HANGUL SYLLABLE KYEOS -->
+ <map code="0xcf30" name="1em"/><!-- HANGUL SYLLABLE KYEOSS -->
+ <map code="0xcf31" name="1em"/><!-- HANGUL SYLLABLE KYEONG -->
+ <map code="0xcf32" name="1em"/><!-- HANGUL SYLLABLE KYEOJ -->
+ <map code="0xcf33" name="1em"/><!-- HANGUL SYLLABLE KYEOC -->
+ <map code="0xcf34" name="1em"/><!-- HANGUL SYLLABLE KYEOK -->
+ <map code="0xcf35" name="1em"/><!-- HANGUL SYLLABLE KYEOT -->
+ <map code="0xcf36" name="1em"/><!-- HANGUL SYLLABLE KYEOP -->
+ <map code="0xcf37" name="1em"/><!-- HANGUL SYLLABLE KYEOH -->
+ <map code="0xcf38" name="1em"/><!-- HANGUL SYLLABLE KYE -->
+ <map code="0xcf39" name="1em"/><!-- HANGUL SYLLABLE KYEG -->
+ <map code="0xcf3a" name="1em"/><!-- HANGUL SYLLABLE KYEGG -->
+ <map code="0xcf3b" name="1em"/><!-- HANGUL SYLLABLE KYEGS -->
+ <map code="0xcf3c" name="1em"/><!-- HANGUL SYLLABLE KYEN -->
+ <map code="0xcf3d" name="1em"/><!-- HANGUL SYLLABLE KYENJ -->
+ <map code="0xcf3e" name="1em"/><!-- HANGUL SYLLABLE KYENH -->
+ <map code="0xcf3f" name="1em"/><!-- HANGUL SYLLABLE KYED -->
+ <map code="0xcf40" name="1em"/><!-- HANGUL SYLLABLE KYEL -->
+ <map code="0xcf41" name="1em"/><!-- HANGUL SYLLABLE KYELG -->
+ <map code="0xcf42" name="1em"/><!-- HANGUL SYLLABLE KYELM -->
+ <map code="0xcf43" name="1em"/><!-- HANGUL SYLLABLE KYELB -->
+ <map code="0xcf44" name="1em"/><!-- HANGUL SYLLABLE KYELS -->
+ <map code="0xcf45" name="1em"/><!-- HANGUL SYLLABLE KYELT -->
+ <map code="0xcf46" name="1em"/><!-- HANGUL SYLLABLE KYELP -->
+ <map code="0xcf47" name="1em"/><!-- HANGUL SYLLABLE KYELH -->
+ <map code="0xcf48" name="1em"/><!-- HANGUL SYLLABLE KYEM -->
+ <map code="0xcf49" name="1em"/><!-- HANGUL SYLLABLE KYEB -->
+ <map code="0xcf4a" name="1em"/><!-- HANGUL SYLLABLE KYEBS -->
+ <map code="0xcf4b" name="1em"/><!-- HANGUL SYLLABLE KYES -->
+ <map code="0xcf4c" name="1em"/><!-- HANGUL SYLLABLE KYESS -->
+ <map code="0xcf4d" name="1em"/><!-- HANGUL SYLLABLE KYENG -->
+ <map code="0xcf4e" name="1em"/><!-- HANGUL SYLLABLE KYEJ -->
+ <map code="0xcf4f" name="1em"/><!-- HANGUL SYLLABLE KYEC -->
+ <map code="0xcf50" name="1em"/><!-- HANGUL SYLLABLE KYEK -->
+ <map code="0xcf51" name="1em"/><!-- HANGUL SYLLABLE KYET -->
+ <map code="0xcf52" name="1em"/><!-- HANGUL SYLLABLE KYEP -->
+ <map code="0xcf53" name="1em"/><!-- HANGUL SYLLABLE KYEH -->
+ <map code="0xcf54" name="1em"/><!-- HANGUL SYLLABLE KO -->
+ <map code="0xcf55" name="1em"/><!-- HANGUL SYLLABLE KOG -->
+ <map code="0xcf56" name="1em"/><!-- HANGUL SYLLABLE KOGG -->
+ <map code="0xcf57" name="1em"/><!-- HANGUL SYLLABLE KOGS -->
+ <map code="0xcf58" name="1em"/><!-- HANGUL SYLLABLE KON -->
+ <map code="0xcf59" name="1em"/><!-- HANGUL SYLLABLE KONJ -->
+ <map code="0xcf5a" name="1em"/><!-- HANGUL SYLLABLE KONH -->
+ <map code="0xcf5b" name="1em"/><!-- HANGUL SYLLABLE KOD -->
+ <map code="0xcf5c" name="1em"/><!-- HANGUL SYLLABLE KOL -->
+ <map code="0xcf5d" name="1em"/><!-- HANGUL SYLLABLE KOLG -->
+ <map code="0xcf5e" name="1em"/><!-- HANGUL SYLLABLE KOLM -->
+ <map code="0xcf5f" name="1em"/><!-- HANGUL SYLLABLE KOLB -->
+ <map code="0xcf60" name="1em"/><!-- HANGUL SYLLABLE KOLS -->
+ <map code="0xcf61" name="1em"/><!-- HANGUL SYLLABLE KOLT -->
+ <map code="0xcf62" name="1em"/><!-- HANGUL SYLLABLE KOLP -->
+ <map code="0xcf63" name="1em"/><!-- HANGUL SYLLABLE KOLH -->
+ <map code="0xcf64" name="1em"/><!-- HANGUL SYLLABLE KOM -->
+ <map code="0xcf65" name="1em"/><!-- HANGUL SYLLABLE KOB -->
+ <map code="0xcf66" name="1em"/><!-- HANGUL SYLLABLE KOBS -->
+ <map code="0xcf67" name="1em"/><!-- HANGUL SYLLABLE KOS -->
+ <map code="0xcf68" name="1em"/><!-- HANGUL SYLLABLE KOSS -->
+ <map code="0xcf69" name="1em"/><!-- HANGUL SYLLABLE KONG -->
+ <map code="0xcf6a" name="1em"/><!-- HANGUL SYLLABLE KOJ -->
+ <map code="0xcf6b" name="1em"/><!-- HANGUL SYLLABLE KOC -->
+ <map code="0xcf6c" name="1em"/><!-- HANGUL SYLLABLE KOK -->
+ <map code="0xcf6d" name="1em"/><!-- HANGUL SYLLABLE KOT -->
+ <map code="0xcf6e" name="1em"/><!-- HANGUL SYLLABLE KOP -->
+ <map code="0xcf6f" name="1em"/><!-- HANGUL SYLLABLE KOH -->
+ <map code="0xcf70" name="1em"/><!-- HANGUL SYLLABLE KWA -->
+ <map code="0xcf71" name="1em"/><!-- HANGUL SYLLABLE KWAG -->
+ <map code="0xcf72" name="1em"/><!-- HANGUL SYLLABLE KWAGG -->
+ <map code="0xcf73" name="1em"/><!-- HANGUL SYLLABLE KWAGS -->
+ <map code="0xcf74" name="1em"/><!-- HANGUL SYLLABLE KWAN -->
+ <map code="0xcf75" name="1em"/><!-- HANGUL SYLLABLE KWANJ -->
+ <map code="0xcf76" name="1em"/><!-- HANGUL SYLLABLE KWANH -->
+ <map code="0xcf77" name="1em"/><!-- HANGUL SYLLABLE KWAD -->
+ <map code="0xcf78" name="1em"/><!-- HANGUL SYLLABLE KWAL -->
+ <map code="0xcf79" name="1em"/><!-- HANGUL SYLLABLE KWALG -->
+ <map code="0xcf7a" name="1em"/><!-- HANGUL SYLLABLE KWALM -->
+ <map code="0xcf7b" name="1em"/><!-- HANGUL SYLLABLE KWALB -->
+ <map code="0xcf7c" name="1em"/><!-- HANGUL SYLLABLE KWALS -->
+ <map code="0xcf7d" name="1em"/><!-- HANGUL SYLLABLE KWALT -->
+ <map code="0xcf7e" name="1em"/><!-- HANGUL SYLLABLE KWALP -->
+ <map code="0xcf7f" name="1em"/><!-- HANGUL SYLLABLE KWALH -->
+ <map code="0xcf80" name="1em"/><!-- HANGUL SYLLABLE KWAM -->
+ <map code="0xcf81" name="1em"/><!-- HANGUL SYLLABLE KWAB -->
+ <map code="0xcf82" name="1em"/><!-- HANGUL SYLLABLE KWABS -->
+ <map code="0xcf83" name="1em"/><!-- HANGUL SYLLABLE KWAS -->
+ <map code="0xcf84" name="1em"/><!-- HANGUL SYLLABLE KWASS -->
+ <map code="0xcf85" name="1em"/><!-- HANGUL SYLLABLE KWANG -->
+ <map code="0xcf86" name="1em"/><!-- HANGUL SYLLABLE KWAJ -->
+ <map code="0xcf87" name="1em"/><!-- HANGUL SYLLABLE KWAC -->
+ <map code="0xcf88" name="1em"/><!-- HANGUL SYLLABLE KWAK -->
+ <map code="0xcf89" name="1em"/><!-- HANGUL SYLLABLE KWAT -->
+ <map code="0xcf8a" name="1em"/><!-- HANGUL SYLLABLE KWAP -->
+ <map code="0xcf8b" name="1em"/><!-- HANGUL SYLLABLE KWAH -->
+ <map code="0xcf8c" name="1em"/><!-- HANGUL SYLLABLE KWAE -->
+ <map code="0xcf8d" name="1em"/><!-- HANGUL SYLLABLE KWAEG -->
+ <map code="0xcf8e" name="1em"/><!-- HANGUL SYLLABLE KWAEGG -->
+ <map code="0xcf8f" name="1em"/><!-- HANGUL SYLLABLE KWAEGS -->
+ <map code="0xcf90" name="1em"/><!-- HANGUL SYLLABLE KWAEN -->
+ <map code="0xcf91" name="1em"/><!-- HANGUL SYLLABLE KWAENJ -->
+ <map code="0xcf92" name="1em"/><!-- HANGUL SYLLABLE KWAENH -->
+ <map code="0xcf93" name="1em"/><!-- HANGUL SYLLABLE KWAED -->
+ <map code="0xcf94" name="1em"/><!-- HANGUL SYLLABLE KWAEL -->
+ <map code="0xcf95" name="1em"/><!-- HANGUL SYLLABLE KWAELG -->
+ <map code="0xcf96" name="1em"/><!-- HANGUL SYLLABLE KWAELM -->
+ <map code="0xcf97" name="1em"/><!-- HANGUL SYLLABLE KWAELB -->
+ <map code="0xcf98" name="1em"/><!-- HANGUL SYLLABLE KWAELS -->
+ <map code="0xcf99" name="1em"/><!-- HANGUL SYLLABLE KWAELT -->
+ <map code="0xcf9a" name="1em"/><!-- HANGUL SYLLABLE KWAELP -->
+ <map code="0xcf9b" name="1em"/><!-- HANGUL SYLLABLE KWAELH -->
+ <map code="0xcf9c" name="1em"/><!-- HANGUL SYLLABLE KWAEM -->
+ <map code="0xcf9d" name="1em"/><!-- HANGUL SYLLABLE KWAEB -->
+ <map code="0xcf9e" name="1em"/><!-- HANGUL SYLLABLE KWAEBS -->
+ <map code="0xcf9f" name="1em"/><!-- HANGUL SYLLABLE KWAES -->
+ <map code="0xcfa0" name="1em"/><!-- HANGUL SYLLABLE KWAESS -->
+ <map code="0xcfa1" name="1em"/><!-- HANGUL SYLLABLE KWAENG -->
+ <map code="0xcfa2" name="1em"/><!-- HANGUL SYLLABLE KWAEJ -->
+ <map code="0xcfa3" name="1em"/><!-- HANGUL SYLLABLE KWAEC -->
+ <map code="0xcfa4" name="1em"/><!-- HANGUL SYLLABLE KWAEK -->
+ <map code="0xcfa5" name="1em"/><!-- HANGUL SYLLABLE KWAET -->
+ <map code="0xcfa6" name="1em"/><!-- HANGUL SYLLABLE KWAEP -->
+ <map code="0xcfa7" name="1em"/><!-- HANGUL SYLLABLE KWAEH -->
+ <map code="0xcfa8" name="1em"/><!-- HANGUL SYLLABLE KOE -->
+ <map code="0xcfa9" name="1em"/><!-- HANGUL SYLLABLE KOEG -->
+ <map code="0xcfaa" name="1em"/><!-- HANGUL SYLLABLE KOEGG -->
+ <map code="0xcfab" name="1em"/><!-- HANGUL SYLLABLE KOEGS -->
+ <map code="0xcfac" name="1em"/><!-- HANGUL SYLLABLE KOEN -->
+ <map code="0xcfad" name="1em"/><!-- HANGUL SYLLABLE KOENJ -->
+ <map code="0xcfae" name="1em"/><!-- HANGUL SYLLABLE KOENH -->
+ <map code="0xcfaf" name="1em"/><!-- HANGUL SYLLABLE KOED -->
+ <map code="0xcfb0" name="1em"/><!-- HANGUL SYLLABLE KOEL -->
+ <map code="0xcfb1" name="1em"/><!-- HANGUL SYLLABLE KOELG -->
+ <map code="0xcfb2" name="1em"/><!-- HANGUL SYLLABLE KOELM -->
+ <map code="0xcfb3" name="1em"/><!-- HANGUL SYLLABLE KOELB -->
+ <map code="0xcfb4" name="1em"/><!-- HANGUL SYLLABLE KOELS -->
+ <map code="0xcfb5" name="1em"/><!-- HANGUL SYLLABLE KOELT -->
+ <map code="0xcfb6" name="1em"/><!-- HANGUL SYLLABLE KOELP -->
+ <map code="0xcfb7" name="1em"/><!-- HANGUL SYLLABLE KOELH -->
+ <map code="0xcfb8" name="1em"/><!-- HANGUL SYLLABLE KOEM -->
+ <map code="0xcfb9" name="1em"/><!-- HANGUL SYLLABLE KOEB -->
+ <map code="0xcfba" name="1em"/><!-- HANGUL SYLLABLE KOEBS -->
+ <map code="0xcfbb" name="1em"/><!-- HANGUL SYLLABLE KOES -->
+ <map code="0xcfbc" name="1em"/><!-- HANGUL SYLLABLE KOESS -->
+ <map code="0xcfbd" name="1em"/><!-- HANGUL SYLLABLE KOENG -->
+ <map code="0xcfbe" name="1em"/><!-- HANGUL SYLLABLE KOEJ -->
+ <map code="0xcfbf" name="1em"/><!-- HANGUL SYLLABLE KOEC -->
+ <map code="0xcfc0" name="1em"/><!-- HANGUL SYLLABLE KOEK -->
+ <map code="0xcfc1" name="1em"/><!-- HANGUL SYLLABLE KOET -->
+ <map code="0xcfc2" name="1em"/><!-- HANGUL SYLLABLE KOEP -->
+ <map code="0xcfc3" name="1em"/><!-- HANGUL SYLLABLE KOEH -->
+ <map code="0xcfc4" name="1em"/><!-- HANGUL SYLLABLE KYO -->
+ <map code="0xcfc5" name="1em"/><!-- HANGUL SYLLABLE KYOG -->
+ <map code="0xcfc6" name="1em"/><!-- HANGUL SYLLABLE KYOGG -->
+ <map code="0xcfc7" name="1em"/><!-- HANGUL SYLLABLE KYOGS -->
+ <map code="0xcfc8" name="1em"/><!-- HANGUL SYLLABLE KYON -->
+ <map code="0xcfc9" name="1em"/><!-- HANGUL SYLLABLE KYONJ -->
+ <map code="0xcfca" name="1em"/><!-- HANGUL SYLLABLE KYONH -->
+ <map code="0xcfcb" name="1em"/><!-- HANGUL SYLLABLE KYOD -->
+ <map code="0xcfcc" name="1em"/><!-- HANGUL SYLLABLE KYOL -->
+ <map code="0xcfcd" name="1em"/><!-- HANGUL SYLLABLE KYOLG -->
+ <map code="0xcfce" name="1em"/><!-- HANGUL SYLLABLE KYOLM -->
+ <map code="0xcfcf" name="1em"/><!-- HANGUL SYLLABLE KYOLB -->
+ <map code="0xcfd0" name="1em"/><!-- HANGUL SYLLABLE KYOLS -->
+ <map code="0xcfd1" name="1em"/><!-- HANGUL SYLLABLE KYOLT -->
+ <map code="0xcfd2" name="1em"/><!-- HANGUL SYLLABLE KYOLP -->
+ <map code="0xcfd3" name="1em"/><!-- HANGUL SYLLABLE KYOLH -->
+ <map code="0xcfd4" name="1em"/><!-- HANGUL SYLLABLE KYOM -->
+ <map code="0xcfd5" name="1em"/><!-- HANGUL SYLLABLE KYOB -->
+ <map code="0xcfd6" name="1em"/><!-- HANGUL SYLLABLE KYOBS -->
+ <map code="0xcfd7" name="1em"/><!-- HANGUL SYLLABLE KYOS -->
+ <map code="0xcfd8" name="1em"/><!-- HANGUL SYLLABLE KYOSS -->
+ <map code="0xcfd9" name="1em"/><!-- HANGUL SYLLABLE KYONG -->
+ <map code="0xcfda" name="1em"/><!-- HANGUL SYLLABLE KYOJ -->
+ <map code="0xcfdb" name="1em"/><!-- HANGUL SYLLABLE KYOC -->
+ <map code="0xcfdc" name="1em"/><!-- HANGUL SYLLABLE KYOK -->
+ <map code="0xcfdd" name="1em"/><!-- HANGUL SYLLABLE KYOT -->
+ <map code="0xcfde" name="1em"/><!-- HANGUL SYLLABLE KYOP -->
+ <map code="0xcfdf" name="1em"/><!-- HANGUL SYLLABLE KYOH -->
+ <map code="0xcfe0" name="1em"/><!-- HANGUL SYLLABLE KU -->
+ <map code="0xcfe1" name="1em"/><!-- HANGUL SYLLABLE KUG -->
+ <map code="0xcfe2" name="1em"/><!-- HANGUL SYLLABLE KUGG -->
+ <map code="0xcfe3" name="1em"/><!-- HANGUL SYLLABLE KUGS -->
+ <map code="0xcfe4" name="1em"/><!-- HANGUL SYLLABLE KUN -->
+ <map code="0xcfe5" name="1em"/><!-- HANGUL SYLLABLE KUNJ -->
+ <map code="0xcfe6" name="1em"/><!-- HANGUL SYLLABLE KUNH -->
+ <map code="0xcfe7" name="1em"/><!-- HANGUL SYLLABLE KUD -->
+ <map code="0xcfe8" name="1em"/><!-- HANGUL SYLLABLE KUL -->
+ <map code="0xcfe9" name="1em"/><!-- HANGUL SYLLABLE KULG -->
+ <map code="0xcfea" name="1em"/><!-- HANGUL SYLLABLE KULM -->
+ <map code="0xcfeb" name="1em"/><!-- HANGUL SYLLABLE KULB -->
+ <map code="0xcfec" name="1em"/><!-- HANGUL SYLLABLE KULS -->
+ <map code="0xcfed" name="1em"/><!-- HANGUL SYLLABLE KULT -->
+ <map code="0xcfee" name="1em"/><!-- HANGUL SYLLABLE KULP -->
+ <map code="0xcfef" name="1em"/><!-- HANGUL SYLLABLE KULH -->
+ <map code="0xcff0" name="1em"/><!-- HANGUL SYLLABLE KUM -->
+ <map code="0xcff1" name="1em"/><!-- HANGUL SYLLABLE KUB -->
+ <map code="0xcff2" name="1em"/><!-- HANGUL SYLLABLE KUBS -->
+ <map code="0xcff3" name="1em"/><!-- HANGUL SYLLABLE KUS -->
+ <map code="0xcff4" name="1em"/><!-- HANGUL SYLLABLE KUSS -->
+ <map code="0xcff5" name="1em"/><!-- HANGUL SYLLABLE KUNG -->
+ <map code="0xcff6" name="1em"/><!-- HANGUL SYLLABLE KUJ -->
+ <map code="0xcff7" name="1em"/><!-- HANGUL SYLLABLE KUC -->
+ <map code="0xcff8" name="1em"/><!-- HANGUL SYLLABLE KUK -->
+ <map code="0xcff9" name="1em"/><!-- HANGUL SYLLABLE KUT -->
+ <map code="0xcffa" name="1em"/><!-- HANGUL SYLLABLE KUP -->
+ <map code="0xcffb" name="1em"/><!-- HANGUL SYLLABLE KUH -->
+ <map code="0xcffc" name="1em"/><!-- HANGUL SYLLABLE KWEO -->
+ <map code="0xcffd" name="1em"/><!-- HANGUL SYLLABLE KWEOG -->
+ <map code="0xcffe" name="1em"/><!-- HANGUL SYLLABLE KWEOGG -->
+ <map code="0xcfff" name="1em"/><!-- HANGUL SYLLABLE KWEOGS -->
+ <map code="0xd000" name="1em"/><!-- HANGUL SYLLABLE KWEON -->
+ <map code="0xd001" name="1em"/><!-- HANGUL SYLLABLE KWEONJ -->
+ <map code="0xd002" name="1em"/><!-- HANGUL SYLLABLE KWEONH -->
+ <map code="0xd003" name="1em"/><!-- HANGUL SYLLABLE KWEOD -->
+ <map code="0xd004" name="1em"/><!-- HANGUL SYLLABLE KWEOL -->
+ <map code="0xd005" name="1em"/><!-- HANGUL SYLLABLE KWEOLG -->
+ <map code="0xd006" name="1em"/><!-- HANGUL SYLLABLE KWEOLM -->
+ <map code="0xd007" name="1em"/><!-- HANGUL SYLLABLE KWEOLB -->
+ <map code="0xd008" name="1em"/><!-- HANGUL SYLLABLE KWEOLS -->
+ <map code="0xd009" name="1em"/><!-- HANGUL SYLLABLE KWEOLT -->
+ <map code="0xd00a" name="1em"/><!-- HANGUL SYLLABLE KWEOLP -->
+ <map code="0xd00b" name="1em"/><!-- HANGUL SYLLABLE KWEOLH -->
+ <map code="0xd00c" name="1em"/><!-- HANGUL SYLLABLE KWEOM -->
+ <map code="0xd00d" name="1em"/><!-- HANGUL SYLLABLE KWEOB -->
+ <map code="0xd00e" name="1em"/><!-- HANGUL SYLLABLE KWEOBS -->
+ <map code="0xd00f" name="1em"/><!-- HANGUL SYLLABLE KWEOS -->
+ <map code="0xd010" name="1em"/><!-- HANGUL SYLLABLE KWEOSS -->
+ <map code="0xd011" name="1em"/><!-- HANGUL SYLLABLE KWEONG -->
+ <map code="0xd012" name="1em"/><!-- HANGUL SYLLABLE KWEOJ -->
+ <map code="0xd013" name="1em"/><!-- HANGUL SYLLABLE KWEOC -->
+ <map code="0xd014" name="1em"/><!-- HANGUL SYLLABLE KWEOK -->
+ <map code="0xd015" name="1em"/><!-- HANGUL SYLLABLE KWEOT -->
+ <map code="0xd016" name="1em"/><!-- HANGUL SYLLABLE KWEOP -->
+ <map code="0xd017" name="1em"/><!-- HANGUL SYLLABLE KWEOH -->
+ <map code="0xd018" name="1em"/><!-- HANGUL SYLLABLE KWE -->
+ <map code="0xd019" name="1em"/><!-- HANGUL SYLLABLE KWEG -->
+ <map code="0xd01a" name="1em"/><!-- HANGUL SYLLABLE KWEGG -->
+ <map code="0xd01b" name="1em"/><!-- HANGUL SYLLABLE KWEGS -->
+ <map code="0xd01c" name="1em"/><!-- HANGUL SYLLABLE KWEN -->
+ <map code="0xd01d" name="1em"/><!-- HANGUL SYLLABLE KWENJ -->
+ <map code="0xd01e" name="1em"/><!-- HANGUL SYLLABLE KWENH -->
+ <map code="0xd01f" name="1em"/><!-- HANGUL SYLLABLE KWED -->
+ <map code="0xd020" name="1em"/><!-- HANGUL SYLLABLE KWEL -->
+ <map code="0xd021" name="1em"/><!-- HANGUL SYLLABLE KWELG -->
+ <map code="0xd022" name="1em"/><!-- HANGUL SYLLABLE KWELM -->
+ <map code="0xd023" name="1em"/><!-- HANGUL SYLLABLE KWELB -->
+ <map code="0xd024" name="1em"/><!-- HANGUL SYLLABLE KWELS -->
+ <map code="0xd025" name="1em"/><!-- HANGUL SYLLABLE KWELT -->
+ <map code="0xd026" name="1em"/><!-- HANGUL SYLLABLE KWELP -->
+ <map code="0xd027" name="1em"/><!-- HANGUL SYLLABLE KWELH -->
+ <map code="0xd028" name="1em"/><!-- HANGUL SYLLABLE KWEM -->
+ <map code="0xd029" name="1em"/><!-- HANGUL SYLLABLE KWEB -->
+ <map code="0xd02a" name="1em"/><!-- HANGUL SYLLABLE KWEBS -->
+ <map code="0xd02b" name="1em"/><!-- HANGUL SYLLABLE KWES -->
+ <map code="0xd02c" name="1em"/><!-- HANGUL SYLLABLE KWESS -->
+ <map code="0xd02d" name="1em"/><!-- HANGUL SYLLABLE KWENG -->
+ <map code="0xd02e" name="1em"/><!-- HANGUL SYLLABLE KWEJ -->
+ <map code="0xd02f" name="1em"/><!-- HANGUL SYLLABLE KWEC -->
+ <map code="0xd030" name="1em"/><!-- HANGUL SYLLABLE KWEK -->
+ <map code="0xd031" name="1em"/><!-- HANGUL SYLLABLE KWET -->
+ <map code="0xd032" name="1em"/><!-- HANGUL SYLLABLE KWEP -->
+ <map code="0xd033" name="1em"/><!-- HANGUL SYLLABLE KWEH -->
+ <map code="0xd034" name="1em"/><!-- HANGUL SYLLABLE KWI -->
+ <map code="0xd035" name="1em"/><!-- HANGUL SYLLABLE KWIG -->
+ <map code="0xd036" name="1em"/><!-- HANGUL SYLLABLE KWIGG -->
+ <map code="0xd037" name="1em"/><!-- HANGUL SYLLABLE KWIGS -->
+ <map code="0xd038" name="1em"/><!-- HANGUL SYLLABLE KWIN -->
+ <map code="0xd039" name="1em"/><!-- HANGUL SYLLABLE KWINJ -->
+ <map code="0xd03a" name="1em"/><!-- HANGUL SYLLABLE KWINH -->
+ <map code="0xd03b" name="1em"/><!-- HANGUL SYLLABLE KWID -->
+ <map code="0xd03c" name="1em"/><!-- HANGUL SYLLABLE KWIL -->
+ <map code="0xd03d" name="1em"/><!-- HANGUL SYLLABLE KWILG -->
+ <map code="0xd03e" name="1em"/><!-- HANGUL SYLLABLE KWILM -->
+ <map code="0xd03f" name="1em"/><!-- HANGUL SYLLABLE KWILB -->
+ <map code="0xd040" name="1em"/><!-- HANGUL SYLLABLE KWILS -->
+ <map code="0xd041" name="1em"/><!-- HANGUL SYLLABLE KWILT -->
+ <map code="0xd042" name="1em"/><!-- HANGUL SYLLABLE KWILP -->
+ <map code="0xd043" name="1em"/><!-- HANGUL SYLLABLE KWILH -->
+ <map code="0xd044" name="1em"/><!-- HANGUL SYLLABLE KWIM -->
+ <map code="0xd045" name="1em"/><!-- HANGUL SYLLABLE KWIB -->
+ <map code="0xd046" name="1em"/><!-- HANGUL SYLLABLE KWIBS -->
+ <map code="0xd047" name="1em"/><!-- HANGUL SYLLABLE KWIS -->
+ <map code="0xd048" name="1em"/><!-- HANGUL SYLLABLE KWISS -->
+ <map code="0xd049" name="1em"/><!-- HANGUL SYLLABLE KWING -->
+ <map code="0xd04a" name="1em"/><!-- HANGUL SYLLABLE KWIJ -->
+ <map code="0xd04b" name="1em"/><!-- HANGUL SYLLABLE KWIC -->
+ <map code="0xd04c" name="1em"/><!-- HANGUL SYLLABLE KWIK -->
+ <map code="0xd04d" name="1em"/><!-- HANGUL SYLLABLE KWIT -->
+ <map code="0xd04e" name="1em"/><!-- HANGUL SYLLABLE KWIP -->
+ <map code="0xd04f" name="1em"/><!-- HANGUL SYLLABLE KWIH -->
+ <map code="0xd050" name="1em"/><!-- HANGUL SYLLABLE KYU -->
+ <map code="0xd051" name="1em"/><!-- HANGUL SYLLABLE KYUG -->
+ <map code="0xd052" name="1em"/><!-- HANGUL SYLLABLE KYUGG -->
+ <map code="0xd053" name="1em"/><!-- HANGUL SYLLABLE KYUGS -->
+ <map code="0xd054" name="1em"/><!-- HANGUL SYLLABLE KYUN -->
+ <map code="0xd055" name="1em"/><!-- HANGUL SYLLABLE KYUNJ -->
+ <map code="0xd056" name="1em"/><!-- HANGUL SYLLABLE KYUNH -->
+ <map code="0xd057" name="1em"/><!-- HANGUL SYLLABLE KYUD -->
+ <map code="0xd058" name="1em"/><!-- HANGUL SYLLABLE KYUL -->
+ <map code="0xd059" name="1em"/><!-- HANGUL SYLLABLE KYULG -->
+ <map code="0xd05a" name="1em"/><!-- HANGUL SYLLABLE KYULM -->
+ <map code="0xd05b" name="1em"/><!-- HANGUL SYLLABLE KYULB -->
+ <map code="0xd05c" name="1em"/><!-- HANGUL SYLLABLE KYULS -->
+ <map code="0xd05d" name="1em"/><!-- HANGUL SYLLABLE KYULT -->
+ <map code="0xd05e" name="1em"/><!-- HANGUL SYLLABLE KYULP -->
+ <map code="0xd05f" name="1em"/><!-- HANGUL SYLLABLE KYULH -->
+ <map code="0xd060" name="1em"/><!-- HANGUL SYLLABLE KYUM -->
+ <map code="0xd061" name="1em"/><!-- HANGUL SYLLABLE KYUB -->
+ <map code="0xd062" name="1em"/><!-- HANGUL SYLLABLE KYUBS -->
+ <map code="0xd063" name="1em"/><!-- HANGUL SYLLABLE KYUS -->
+ <map code="0xd064" name="1em"/><!-- HANGUL SYLLABLE KYUSS -->
+ <map code="0xd065" name="1em"/><!-- HANGUL SYLLABLE KYUNG -->
+ <map code="0xd066" name="1em"/><!-- HANGUL SYLLABLE KYUJ -->
+ <map code="0xd067" name="1em"/><!-- HANGUL SYLLABLE KYUC -->
+ <map code="0xd068" name="1em"/><!-- HANGUL SYLLABLE KYUK -->
+ <map code="0xd069" name="1em"/><!-- HANGUL SYLLABLE KYUT -->
+ <map code="0xd06a" name="1em"/><!-- HANGUL SYLLABLE KYUP -->
+ <map code="0xd06b" name="1em"/><!-- HANGUL SYLLABLE KYUH -->
+ <map code="0xd06c" name="1em"/><!-- HANGUL SYLLABLE KEU -->
+ <map code="0xd06d" name="1em"/><!-- HANGUL SYLLABLE KEUG -->
+ <map code="0xd06e" name="1em"/><!-- HANGUL SYLLABLE KEUGG -->
+ <map code="0xd06f" name="1em"/><!-- HANGUL SYLLABLE KEUGS -->
+ <map code="0xd070" name="1em"/><!-- HANGUL SYLLABLE KEUN -->
+ <map code="0xd071" name="1em"/><!-- HANGUL SYLLABLE KEUNJ -->
+ <map code="0xd072" name="1em"/><!-- HANGUL SYLLABLE KEUNH -->
+ <map code="0xd073" name="1em"/><!-- HANGUL SYLLABLE KEUD -->
+ <map code="0xd074" name="1em"/><!-- HANGUL SYLLABLE KEUL -->
+ <map code="0xd075" name="1em"/><!-- HANGUL SYLLABLE KEULG -->
+ <map code="0xd076" name="1em"/><!-- HANGUL SYLLABLE KEULM -->
+ <map code="0xd077" name="1em"/><!-- HANGUL SYLLABLE KEULB -->
+ <map code="0xd078" name="1em"/><!-- HANGUL SYLLABLE KEULS -->
+ <map code="0xd079" name="1em"/><!-- HANGUL SYLLABLE KEULT -->
+ <map code="0xd07a" name="1em"/><!-- HANGUL SYLLABLE KEULP -->
+ <map code="0xd07b" name="1em"/><!-- HANGUL SYLLABLE KEULH -->
+ <map code="0xd07c" name="1em"/><!-- HANGUL SYLLABLE KEUM -->
+ <map code="0xd07d" name="1em"/><!-- HANGUL SYLLABLE KEUB -->
+ <map code="0xd07e" name="1em"/><!-- HANGUL SYLLABLE KEUBS -->
+ <map code="0xd07f" name="1em"/><!-- HANGUL SYLLABLE KEUS -->
+ <map code="0xd080" name="1em"/><!-- HANGUL SYLLABLE KEUSS -->
+ <map code="0xd081" name="1em"/><!-- HANGUL SYLLABLE KEUNG -->
+ <map code="0xd082" name="1em"/><!-- HANGUL SYLLABLE KEUJ -->
+ <map code="0xd083" name="1em"/><!-- HANGUL SYLLABLE KEUC -->
+ <map code="0xd084" name="1em"/><!-- HANGUL SYLLABLE KEUK -->
+ <map code="0xd085" name="1em"/><!-- HANGUL SYLLABLE KEUT -->
+ <map code="0xd086" name="1em"/><!-- HANGUL SYLLABLE KEUP -->
+ <map code="0xd087" name="1em"/><!-- HANGUL SYLLABLE KEUH -->
+ <map code="0xd088" name="1em"/><!-- HANGUL SYLLABLE KYI -->
+ <map code="0xd089" name="1em"/><!-- HANGUL SYLLABLE KYIG -->
+ <map code="0xd08a" name="1em"/><!-- HANGUL SYLLABLE KYIGG -->
+ <map code="0xd08b" name="1em"/><!-- HANGUL SYLLABLE KYIGS -->
+ <map code="0xd08c" name="1em"/><!-- HANGUL SYLLABLE KYIN -->
+ <map code="0xd08d" name="1em"/><!-- HANGUL SYLLABLE KYINJ -->
+ <map code="0xd08e" name="1em"/><!-- HANGUL SYLLABLE KYINH -->
+ <map code="0xd08f" name="1em"/><!-- HANGUL SYLLABLE KYID -->
+ <map code="0xd090" name="1em"/><!-- HANGUL SYLLABLE KYIL -->
+ <map code="0xd091" name="1em"/><!-- HANGUL SYLLABLE KYILG -->
+ <map code="0xd092" name="1em"/><!-- HANGUL SYLLABLE KYILM -->
+ <map code="0xd093" name="1em"/><!-- HANGUL SYLLABLE KYILB -->
+ <map code="0xd094" name="1em"/><!-- HANGUL SYLLABLE KYILS -->
+ <map code="0xd095" name="1em"/><!-- HANGUL SYLLABLE KYILT -->
+ <map code="0xd096" name="1em"/><!-- HANGUL SYLLABLE KYILP -->
+ <map code="0xd097" name="1em"/><!-- HANGUL SYLLABLE KYILH -->
+ <map code="0xd098" name="1em"/><!-- HANGUL SYLLABLE KYIM -->
+ <map code="0xd099" name="1em"/><!-- HANGUL SYLLABLE KYIB -->
+ <map code="0xd09a" name="1em"/><!-- HANGUL SYLLABLE KYIBS -->
+ <map code="0xd09b" name="1em"/><!-- HANGUL SYLLABLE KYIS -->
+ <map code="0xd09c" name="1em"/><!-- HANGUL SYLLABLE KYISS -->
+ <map code="0xd09d" name="1em"/><!-- HANGUL SYLLABLE KYING -->
+ <map code="0xd09e" name="1em"/><!-- HANGUL SYLLABLE KYIJ -->
+ <map code="0xd09f" name="1em"/><!-- HANGUL SYLLABLE KYIC -->
+ <map code="0xd0a0" name="1em"/><!-- HANGUL SYLLABLE KYIK -->
+ <map code="0xd0a1" name="1em"/><!-- HANGUL SYLLABLE KYIT -->
+ <map code="0xd0a2" name="1em"/><!-- HANGUL SYLLABLE KYIP -->
+ <map code="0xd0a3" name="1em"/><!-- HANGUL SYLLABLE KYIH -->
+ <map code="0xd0a4" name="1em"/><!-- HANGUL SYLLABLE KI -->
+ <map code="0xd0a5" name="1em"/><!-- HANGUL SYLLABLE KIG -->
+ <map code="0xd0a6" name="1em"/><!-- HANGUL SYLLABLE KIGG -->
+ <map code="0xd0a7" name="1em"/><!-- HANGUL SYLLABLE KIGS -->
+ <map code="0xd0a8" name="1em"/><!-- HANGUL SYLLABLE KIN -->
+ <map code="0xd0a9" name="1em"/><!-- HANGUL SYLLABLE KINJ -->
+ <map code="0xd0aa" name="1em"/><!-- HANGUL SYLLABLE KINH -->
+ <map code="0xd0ab" name="1em"/><!-- HANGUL SYLLABLE KID -->
+ <map code="0xd0ac" name="1em"/><!-- HANGUL SYLLABLE KIL -->
+ <map code="0xd0ad" name="1em"/><!-- HANGUL SYLLABLE KILG -->
+ <map code="0xd0ae" name="1em"/><!-- HANGUL SYLLABLE KILM -->
+ <map code="0xd0af" name="1em"/><!-- HANGUL SYLLABLE KILB -->
+ <map code="0xd0b0" name="1em"/><!-- HANGUL SYLLABLE KILS -->
+ <map code="0xd0b1" name="1em"/><!-- HANGUL SYLLABLE KILT -->
+ <map code="0xd0b2" name="1em"/><!-- HANGUL SYLLABLE KILP -->
+ <map code="0xd0b3" name="1em"/><!-- HANGUL SYLLABLE KILH -->
+ <map code="0xd0b4" name="1em"/><!-- HANGUL SYLLABLE KIM -->
+ <map code="0xd0b5" name="1em"/><!-- HANGUL SYLLABLE KIB -->
+ <map code="0xd0b6" name="1em"/><!-- HANGUL SYLLABLE KIBS -->
+ <map code="0xd0b7" name="1em"/><!-- HANGUL SYLLABLE KIS -->
+ <map code="0xd0b8" name="1em"/><!-- HANGUL SYLLABLE KISS -->
+ <map code="0xd0b9" name="1em"/><!-- HANGUL SYLLABLE KING -->
+ <map code="0xd0ba" name="1em"/><!-- HANGUL SYLLABLE KIJ -->
+ <map code="0xd0bb" name="1em"/><!-- HANGUL SYLLABLE KIC -->
+ <map code="0xd0bc" name="1em"/><!-- HANGUL SYLLABLE KIK -->
+ <map code="0xd0bd" name="1em"/><!-- HANGUL SYLLABLE KIT -->
+ <map code="0xd0be" name="1em"/><!-- HANGUL SYLLABLE KIP -->
+ <map code="0xd0bf" name="1em"/><!-- HANGUL SYLLABLE KIH -->
+ <map code="0xd0c0" name="1em"/><!-- HANGUL SYLLABLE TA -->
+ <map code="0xd0c1" name="1em"/><!-- HANGUL SYLLABLE TAG -->
+ <map code="0xd0c2" name="1em"/><!-- HANGUL SYLLABLE TAGG -->
+ <map code="0xd0c3" name="1em"/><!-- HANGUL SYLLABLE TAGS -->
+ <map code="0xd0c4" name="1em"/><!-- HANGUL SYLLABLE TAN -->
+ <map code="0xd0c5" name="1em"/><!-- HANGUL SYLLABLE TANJ -->
+ <map code="0xd0c6" name="1em"/><!-- HANGUL SYLLABLE TANH -->
+ <map code="0xd0c7" name="1em"/><!-- HANGUL SYLLABLE TAD -->
+ <map code="0xd0c8" name="1em"/><!-- HANGUL SYLLABLE TAL -->
+ <map code="0xd0c9" name="1em"/><!-- HANGUL SYLLABLE TALG -->
+ <map code="0xd0ca" name="1em"/><!-- HANGUL SYLLABLE TALM -->
+ <map code="0xd0cb" name="1em"/><!-- HANGUL SYLLABLE TALB -->
+ <map code="0xd0cc" name="1em"/><!-- HANGUL SYLLABLE TALS -->
+ <map code="0xd0cd" name="1em"/><!-- HANGUL SYLLABLE TALT -->
+ <map code="0xd0ce" name="1em"/><!-- HANGUL SYLLABLE TALP -->
+ <map code="0xd0cf" name="1em"/><!-- HANGUL SYLLABLE TALH -->
+ <map code="0xd0d0" name="1em"/><!-- HANGUL SYLLABLE TAM -->
+ <map code="0xd0d1" name="1em"/><!-- HANGUL SYLLABLE TAB -->
+ <map code="0xd0d2" name="1em"/><!-- HANGUL SYLLABLE TABS -->
+ <map code="0xd0d3" name="1em"/><!-- HANGUL SYLLABLE TAS -->
+ <map code="0xd0d4" name="1em"/><!-- HANGUL SYLLABLE TASS -->
+ <map code="0xd0d5" name="1em"/><!-- HANGUL SYLLABLE TANG -->
+ <map code="0xd0d6" name="1em"/><!-- HANGUL SYLLABLE TAJ -->
+ <map code="0xd0d7" name="1em"/><!-- HANGUL SYLLABLE TAC -->
+ <map code="0xd0d8" name="1em"/><!-- HANGUL SYLLABLE TAK -->
+ <map code="0xd0d9" name="1em"/><!-- HANGUL SYLLABLE TAT -->
+ <map code="0xd0da" name="1em"/><!-- HANGUL SYLLABLE TAP -->
+ <map code="0xd0db" name="1em"/><!-- HANGUL SYLLABLE TAH -->
+ <map code="0xd0dc" name="1em"/><!-- HANGUL SYLLABLE TAE -->
+ <map code="0xd0dd" name="1em"/><!-- HANGUL SYLLABLE TAEG -->
+ <map code="0xd0de" name="1em"/><!-- HANGUL SYLLABLE TAEGG -->
+ <map code="0xd0df" name="1em"/><!-- HANGUL SYLLABLE TAEGS -->
+ <map code="0xd0e0" name="1em"/><!-- HANGUL SYLLABLE TAEN -->
+ <map code="0xd0e1" name="1em"/><!-- HANGUL SYLLABLE TAENJ -->
+ <map code="0xd0e2" name="1em"/><!-- HANGUL SYLLABLE TAENH -->
+ <map code="0xd0e3" name="1em"/><!-- HANGUL SYLLABLE TAED -->
+ <map code="0xd0e4" name="1em"/><!-- HANGUL SYLLABLE TAEL -->
+ <map code="0xd0e5" name="1em"/><!-- HANGUL SYLLABLE TAELG -->
+ <map code="0xd0e6" name="1em"/><!-- HANGUL SYLLABLE TAELM -->
+ <map code="0xd0e7" name="1em"/><!-- HANGUL SYLLABLE TAELB -->
+ <map code="0xd0e8" name="1em"/><!-- HANGUL SYLLABLE TAELS -->
+ <map code="0xd0e9" name="1em"/><!-- HANGUL SYLLABLE TAELT -->
+ <map code="0xd0ea" name="1em"/><!-- HANGUL SYLLABLE TAELP -->
+ <map code="0xd0eb" name="1em"/><!-- HANGUL SYLLABLE TAELH -->
+ <map code="0xd0ec" name="1em"/><!-- HANGUL SYLLABLE TAEM -->
+ <map code="0xd0ed" name="1em"/><!-- HANGUL SYLLABLE TAEB -->
+ <map code="0xd0ee" name="1em"/><!-- HANGUL SYLLABLE TAEBS -->
+ <map code="0xd0ef" name="1em"/><!-- HANGUL SYLLABLE TAES -->
+ <map code="0xd0f0" name="1em"/><!-- HANGUL SYLLABLE TAESS -->
+ <map code="0xd0f1" name="1em"/><!-- HANGUL SYLLABLE TAENG -->
+ <map code="0xd0f2" name="1em"/><!-- HANGUL SYLLABLE TAEJ -->
+ <map code="0xd0f3" name="1em"/><!-- HANGUL SYLLABLE TAEC -->
+ <map code="0xd0f4" name="1em"/><!-- HANGUL SYLLABLE TAEK -->
+ <map code="0xd0f5" name="1em"/><!-- HANGUL SYLLABLE TAET -->
+ <map code="0xd0f6" name="1em"/><!-- HANGUL SYLLABLE TAEP -->
+ <map code="0xd0f7" name="1em"/><!-- HANGUL SYLLABLE TAEH -->
+ <map code="0xd0f8" name="1em"/><!-- HANGUL SYLLABLE TYA -->
+ <map code="0xd0f9" name="1em"/><!-- HANGUL SYLLABLE TYAG -->
+ <map code="0xd0fa" name="1em"/><!-- HANGUL SYLLABLE TYAGG -->
+ <map code="0xd0fb" name="1em"/><!-- HANGUL SYLLABLE TYAGS -->
+ <map code="0xd0fc" name="1em"/><!-- HANGUL SYLLABLE TYAN -->
+ <map code="0xd0fd" name="1em"/><!-- HANGUL SYLLABLE TYANJ -->
+ <map code="0xd0fe" name="1em"/><!-- HANGUL SYLLABLE TYANH -->
+ <map code="0xd0ff" name="1em"/><!-- HANGUL SYLLABLE TYAD -->
+ <map code="0xd100" name="1em"/><!-- HANGUL SYLLABLE TYAL -->
+ <map code="0xd101" name="1em"/><!-- HANGUL SYLLABLE TYALG -->
+ <map code="0xd102" name="1em"/><!-- HANGUL SYLLABLE TYALM -->
+ <map code="0xd103" name="1em"/><!-- HANGUL SYLLABLE TYALB -->
+ <map code="0xd104" name="1em"/><!-- HANGUL SYLLABLE TYALS -->
+ <map code="0xd105" name="1em"/><!-- HANGUL SYLLABLE TYALT -->
+ <map code="0xd106" name="1em"/><!-- HANGUL SYLLABLE TYALP -->
+ <map code="0xd107" name="1em"/><!-- HANGUL SYLLABLE TYALH -->
+ <map code="0xd108" name="1em"/><!-- HANGUL SYLLABLE TYAM -->
+ <map code="0xd109" name="1em"/><!-- HANGUL SYLLABLE TYAB -->
+ <map code="0xd10a" name="1em"/><!-- HANGUL SYLLABLE TYABS -->
+ <map code="0xd10b" name="1em"/><!-- HANGUL SYLLABLE TYAS -->
+ <map code="0xd10c" name="1em"/><!-- HANGUL SYLLABLE TYASS -->
+ <map code="0xd10d" name="1em"/><!-- HANGUL SYLLABLE TYANG -->
+ <map code="0xd10e" name="1em"/><!-- HANGUL SYLLABLE TYAJ -->
+ <map code="0xd10f" name="1em"/><!-- HANGUL SYLLABLE TYAC -->
+ <map code="0xd110" name="1em"/><!-- HANGUL SYLLABLE TYAK -->
+ <map code="0xd111" name="1em"/><!-- HANGUL SYLLABLE TYAT -->
+ <map code="0xd112" name="1em"/><!-- HANGUL SYLLABLE TYAP -->
+ <map code="0xd113" name="1em"/><!-- HANGUL SYLLABLE TYAH -->
+ <map code="0xd114" name="1em"/><!-- HANGUL SYLLABLE TYAE -->
+ <map code="0xd115" name="1em"/><!-- HANGUL SYLLABLE TYAEG -->
+ <map code="0xd116" name="1em"/><!-- HANGUL SYLLABLE TYAEGG -->
+ <map code="0xd117" name="1em"/><!-- HANGUL SYLLABLE TYAEGS -->
+ <map code="0xd118" name="1em"/><!-- HANGUL SYLLABLE TYAEN -->
+ <map code="0xd119" name="1em"/><!-- HANGUL SYLLABLE TYAENJ -->
+ <map code="0xd11a" name="1em"/><!-- HANGUL SYLLABLE TYAENH -->
+ <map code="0xd11b" name="1em"/><!-- HANGUL SYLLABLE TYAED -->
+ <map code="0xd11c" name="1em"/><!-- HANGUL SYLLABLE TYAEL -->
+ <map code="0xd11d" name="1em"/><!-- HANGUL SYLLABLE TYAELG -->
+ <map code="0xd11e" name="1em"/><!-- HANGUL SYLLABLE TYAELM -->
+ <map code="0xd11f" name="1em"/><!-- HANGUL SYLLABLE TYAELB -->
+ <map code="0xd120" name="1em"/><!-- HANGUL SYLLABLE TYAELS -->
+ <map code="0xd121" name="1em"/><!-- HANGUL SYLLABLE TYAELT -->
+ <map code="0xd122" name="1em"/><!-- HANGUL SYLLABLE TYAELP -->
+ <map code="0xd123" name="1em"/><!-- HANGUL SYLLABLE TYAELH -->
+ <map code="0xd124" name="1em"/><!-- HANGUL SYLLABLE TYAEM -->
+ <map code="0xd125" name="1em"/><!-- HANGUL SYLLABLE TYAEB -->
+ <map code="0xd126" name="1em"/><!-- HANGUL SYLLABLE TYAEBS -->
+ <map code="0xd127" name="1em"/><!-- HANGUL SYLLABLE TYAES -->
+ <map code="0xd128" name="1em"/><!-- HANGUL SYLLABLE TYAESS -->
+ <map code="0xd129" name="1em"/><!-- HANGUL SYLLABLE TYAENG -->
+ <map code="0xd12a" name="1em"/><!-- HANGUL SYLLABLE TYAEJ -->
+ <map code="0xd12b" name="1em"/><!-- HANGUL SYLLABLE TYAEC -->
+ <map code="0xd12c" name="1em"/><!-- HANGUL SYLLABLE TYAEK -->
+ <map code="0xd12d" name="1em"/><!-- HANGUL SYLLABLE TYAET -->
+ <map code="0xd12e" name="1em"/><!-- HANGUL SYLLABLE TYAEP -->
+ <map code="0xd12f" name="1em"/><!-- HANGUL SYLLABLE TYAEH -->
+ <map code="0xd130" name="1em"/><!-- HANGUL SYLLABLE TEO -->
+ <map code="0xd131" name="1em"/><!-- HANGUL SYLLABLE TEOG -->
+ <map code="0xd132" name="1em"/><!-- HANGUL SYLLABLE TEOGG -->
+ <map code="0xd133" name="1em"/><!-- HANGUL SYLLABLE TEOGS -->
+ <map code="0xd134" name="1em"/><!-- HANGUL SYLLABLE TEON -->
+ <map code="0xd135" name="1em"/><!-- HANGUL SYLLABLE TEONJ -->
+ <map code="0xd136" name="1em"/><!-- HANGUL SYLLABLE TEONH -->
+ <map code="0xd137" name="1em"/><!-- HANGUL SYLLABLE TEOD -->
+ <map code="0xd138" name="1em"/><!-- HANGUL SYLLABLE TEOL -->
+ <map code="0xd139" name="1em"/><!-- HANGUL SYLLABLE TEOLG -->
+ <map code="0xd13a" name="1em"/><!-- HANGUL SYLLABLE TEOLM -->
+ <map code="0xd13b" name="1em"/><!-- HANGUL SYLLABLE TEOLB -->
+ <map code="0xd13c" name="1em"/><!-- HANGUL SYLLABLE TEOLS -->
+ <map code="0xd13d" name="1em"/><!-- HANGUL SYLLABLE TEOLT -->
+ <map code="0xd13e" name="1em"/><!-- HANGUL SYLLABLE TEOLP -->
+ <map code="0xd13f" name="1em"/><!-- HANGUL SYLLABLE TEOLH -->
+ <map code="0xd140" name="1em"/><!-- HANGUL SYLLABLE TEOM -->
+ <map code="0xd141" name="1em"/><!-- HANGUL SYLLABLE TEOB -->
+ <map code="0xd142" name="1em"/><!-- HANGUL SYLLABLE TEOBS -->
+ <map code="0xd143" name="1em"/><!-- HANGUL SYLLABLE TEOS -->
+ <map code="0xd144" name="1em"/><!-- HANGUL SYLLABLE TEOSS -->
+ <map code="0xd145" name="1em"/><!-- HANGUL SYLLABLE TEONG -->
+ <map code="0xd146" name="1em"/><!-- HANGUL SYLLABLE TEOJ -->
+ <map code="0xd147" name="1em"/><!-- HANGUL SYLLABLE TEOC -->
+ <map code="0xd148" name="1em"/><!-- HANGUL SYLLABLE TEOK -->
+ <map code="0xd149" name="1em"/><!-- HANGUL SYLLABLE TEOT -->
+ <map code="0xd14a" name="1em"/><!-- HANGUL SYLLABLE TEOP -->
+ <map code="0xd14b" name="1em"/><!-- HANGUL SYLLABLE TEOH -->
+ <map code="0xd14c" name="1em"/><!-- HANGUL SYLLABLE TE -->
+ <map code="0xd14d" name="1em"/><!-- HANGUL SYLLABLE TEG -->
+ <map code="0xd14e" name="1em"/><!-- HANGUL SYLLABLE TEGG -->
+ <map code="0xd14f" name="1em"/><!-- HANGUL SYLLABLE TEGS -->
+ <map code="0xd150" name="1em"/><!-- HANGUL SYLLABLE TEN -->
+ <map code="0xd151" name="1em"/><!-- HANGUL SYLLABLE TENJ -->
+ <map code="0xd152" name="1em"/><!-- HANGUL SYLLABLE TENH -->
+ <map code="0xd153" name="1em"/><!-- HANGUL SYLLABLE TED -->
+ <map code="0xd154" name="1em"/><!-- HANGUL SYLLABLE TEL -->
+ <map code="0xd155" name="1em"/><!-- HANGUL SYLLABLE TELG -->
+ <map code="0xd156" name="1em"/><!-- HANGUL SYLLABLE TELM -->
+ <map code="0xd157" name="1em"/><!-- HANGUL SYLLABLE TELB -->
+ <map code="0xd158" name="1em"/><!-- HANGUL SYLLABLE TELS -->
+ <map code="0xd159" name="1em"/><!-- HANGUL SYLLABLE TELT -->
+ <map code="0xd15a" name="1em"/><!-- HANGUL SYLLABLE TELP -->
+ <map code="0xd15b" name="1em"/><!-- HANGUL SYLLABLE TELH -->
+ <map code="0xd15c" name="1em"/><!-- HANGUL SYLLABLE TEM -->
+ <map code="0xd15d" name="1em"/><!-- HANGUL SYLLABLE TEB -->
+ <map code="0xd15e" name="1em"/><!-- HANGUL SYLLABLE TEBS -->
+ <map code="0xd15f" name="1em"/><!-- HANGUL SYLLABLE TES -->
+ <map code="0xd160" name="1em"/><!-- HANGUL SYLLABLE TESS -->
+ <map code="0xd161" name="1em"/><!-- HANGUL SYLLABLE TENG -->
+ <map code="0xd162" name="1em"/><!-- HANGUL SYLLABLE TEJ -->
+ <map code="0xd163" name="1em"/><!-- HANGUL SYLLABLE TEC -->
+ <map code="0xd164" name="1em"/><!-- HANGUL SYLLABLE TEK -->
+ <map code="0xd165" name="1em"/><!-- HANGUL SYLLABLE TET -->
+ <map code="0xd166" name="1em"/><!-- HANGUL SYLLABLE TEP -->
+ <map code="0xd167" name="1em"/><!-- HANGUL SYLLABLE TEH -->
+ <map code="0xd168" name="1em"/><!-- HANGUL SYLLABLE TYEO -->
+ <map code="0xd169" name="1em"/><!-- HANGUL SYLLABLE TYEOG -->
+ <map code="0xd16a" name="1em"/><!-- HANGUL SYLLABLE TYEOGG -->
+ <map code="0xd16b" name="1em"/><!-- HANGUL SYLLABLE TYEOGS -->
+ <map code="0xd16c" name="1em"/><!-- HANGUL SYLLABLE TYEON -->
+ <map code="0xd16d" name="1em"/><!-- HANGUL SYLLABLE TYEONJ -->
+ <map code="0xd16e" name="1em"/><!-- HANGUL SYLLABLE TYEONH -->
+ <map code="0xd16f" name="1em"/><!-- HANGUL SYLLABLE TYEOD -->
+ <map code="0xd170" name="1em"/><!-- HANGUL SYLLABLE TYEOL -->
+ <map code="0xd171" name="1em"/><!-- HANGUL SYLLABLE TYEOLG -->
+ <map code="0xd172" name="1em"/><!-- HANGUL SYLLABLE TYEOLM -->
+ <map code="0xd173" name="1em"/><!-- HANGUL SYLLABLE TYEOLB -->
+ <map code="0xd174" name="1em"/><!-- HANGUL SYLLABLE TYEOLS -->
+ <map code="0xd175" name="1em"/><!-- HANGUL SYLLABLE TYEOLT -->
+ <map code="0xd176" name="1em"/><!-- HANGUL SYLLABLE TYEOLP -->
+ <map code="0xd177" name="1em"/><!-- HANGUL SYLLABLE TYEOLH -->
+ <map code="0xd178" name="1em"/><!-- HANGUL SYLLABLE TYEOM -->
+ <map code="0xd179" name="1em"/><!-- HANGUL SYLLABLE TYEOB -->
+ <map code="0xd17a" name="1em"/><!-- HANGUL SYLLABLE TYEOBS -->
+ <map code="0xd17b" name="1em"/><!-- HANGUL SYLLABLE TYEOS -->
+ <map code="0xd17c" name="1em"/><!-- HANGUL SYLLABLE TYEOSS -->
+ <map code="0xd17d" name="1em"/><!-- HANGUL SYLLABLE TYEONG -->
+ <map code="0xd17e" name="1em"/><!-- HANGUL SYLLABLE TYEOJ -->
+ <map code="0xd17f" name="1em"/><!-- HANGUL SYLLABLE TYEOC -->
+ <map code="0xd180" name="1em"/><!-- HANGUL SYLLABLE TYEOK -->
+ <map code="0xd181" name="1em"/><!-- HANGUL SYLLABLE TYEOT -->
+ <map code="0xd182" name="1em"/><!-- HANGUL SYLLABLE TYEOP -->
+ <map code="0xd183" name="1em"/><!-- HANGUL SYLLABLE TYEOH -->
+ <map code="0xd184" name="1em"/><!-- HANGUL SYLLABLE TYE -->
+ <map code="0xd185" name="1em"/><!-- HANGUL SYLLABLE TYEG -->
+ <map code="0xd186" name="1em"/><!-- HANGUL SYLLABLE TYEGG -->
+ <map code="0xd187" name="1em"/><!-- HANGUL SYLLABLE TYEGS -->
+ <map code="0xd188" name="1em"/><!-- HANGUL SYLLABLE TYEN -->
+ <map code="0xd189" name="1em"/><!-- HANGUL SYLLABLE TYENJ -->
+ <map code="0xd18a" name="1em"/><!-- HANGUL SYLLABLE TYENH -->
+ <map code="0xd18b" name="1em"/><!-- HANGUL SYLLABLE TYED -->
+ <map code="0xd18c" name="1em"/><!-- HANGUL SYLLABLE TYEL -->
+ <map code="0xd18d" name="1em"/><!-- HANGUL SYLLABLE TYELG -->
+ <map code="0xd18e" name="1em"/><!-- HANGUL SYLLABLE TYELM -->
+ <map code="0xd18f" name="1em"/><!-- HANGUL SYLLABLE TYELB -->
+ <map code="0xd190" name="1em"/><!-- HANGUL SYLLABLE TYELS -->
+ <map code="0xd191" name="1em"/><!-- HANGUL SYLLABLE TYELT -->
+ <map code="0xd192" name="1em"/><!-- HANGUL SYLLABLE TYELP -->
+ <map code="0xd193" name="1em"/><!-- HANGUL SYLLABLE TYELH -->
+ <map code="0xd194" name="1em"/><!-- HANGUL SYLLABLE TYEM -->
+ <map code="0xd195" name="1em"/><!-- HANGUL SYLLABLE TYEB -->
+ <map code="0xd196" name="1em"/><!-- HANGUL SYLLABLE TYEBS -->
+ <map code="0xd197" name="1em"/><!-- HANGUL SYLLABLE TYES -->
+ <map code="0xd198" name="1em"/><!-- HANGUL SYLLABLE TYESS -->
+ <map code="0xd199" name="1em"/><!-- HANGUL SYLLABLE TYENG -->
+ <map code="0xd19a" name="1em"/><!-- HANGUL SYLLABLE TYEJ -->
+ <map code="0xd19b" name="1em"/><!-- HANGUL SYLLABLE TYEC -->
+ <map code="0xd19c" name="1em"/><!-- HANGUL SYLLABLE TYEK -->
+ <map code="0xd19d" name="1em"/><!-- HANGUL SYLLABLE TYET -->
+ <map code="0xd19e" name="1em"/><!-- HANGUL SYLLABLE TYEP -->
+ <map code="0xd19f" name="1em"/><!-- HANGUL SYLLABLE TYEH -->
+ <map code="0xd1a0" name="1em"/><!-- HANGUL SYLLABLE TO -->
+ <map code="0xd1a1" name="1em"/><!-- HANGUL SYLLABLE TOG -->
+ <map code="0xd1a2" name="1em"/><!-- HANGUL SYLLABLE TOGG -->
+ <map code="0xd1a3" name="1em"/><!-- HANGUL SYLLABLE TOGS -->
+ <map code="0xd1a4" name="1em"/><!-- HANGUL SYLLABLE TON -->
+ <map code="0xd1a5" name="1em"/><!-- HANGUL SYLLABLE TONJ -->
+ <map code="0xd1a6" name="1em"/><!-- HANGUL SYLLABLE TONH -->
+ <map code="0xd1a7" name="1em"/><!-- HANGUL SYLLABLE TOD -->
+ <map code="0xd1a8" name="1em"/><!-- HANGUL SYLLABLE TOL -->
+ <map code="0xd1a9" name="1em"/><!-- HANGUL SYLLABLE TOLG -->
+ <map code="0xd1aa" name="1em"/><!-- HANGUL SYLLABLE TOLM -->
+ <map code="0xd1ab" name="1em"/><!-- HANGUL SYLLABLE TOLB -->
+ <map code="0xd1ac" name="1em"/><!-- HANGUL SYLLABLE TOLS -->
+ <map code="0xd1ad" name="1em"/><!-- HANGUL SYLLABLE TOLT -->
+ <map code="0xd1ae" name="1em"/><!-- HANGUL SYLLABLE TOLP -->
+ <map code="0xd1af" name="1em"/><!-- HANGUL SYLLABLE TOLH -->
+ <map code="0xd1b0" name="1em"/><!-- HANGUL SYLLABLE TOM -->
+ <map code="0xd1b1" name="1em"/><!-- HANGUL SYLLABLE TOB -->
+ <map code="0xd1b2" name="1em"/><!-- HANGUL SYLLABLE TOBS -->
+ <map code="0xd1b3" name="1em"/><!-- HANGUL SYLLABLE TOS -->
+ <map code="0xd1b4" name="1em"/><!-- HANGUL SYLLABLE TOSS -->
+ <map code="0xd1b5" name="1em"/><!-- HANGUL SYLLABLE TONG -->
+ <map code="0xd1b6" name="1em"/><!-- HANGUL SYLLABLE TOJ -->
+ <map code="0xd1b7" name="1em"/><!-- HANGUL SYLLABLE TOC -->
+ <map code="0xd1b8" name="1em"/><!-- HANGUL SYLLABLE TOK -->
+ <map code="0xd1b9" name="1em"/><!-- HANGUL SYLLABLE TOT -->
+ <map code="0xd1ba" name="1em"/><!-- HANGUL SYLLABLE TOP -->
+ <map code="0xd1bb" name="1em"/><!-- HANGUL SYLLABLE TOH -->
+ <map code="0xd1bc" name="1em"/><!-- HANGUL SYLLABLE TWA -->
+ <map code="0xd1bd" name="1em"/><!-- HANGUL SYLLABLE TWAG -->
+ <map code="0xd1be" name="1em"/><!-- HANGUL SYLLABLE TWAGG -->
+ <map code="0xd1bf" name="1em"/><!-- HANGUL SYLLABLE TWAGS -->
+ <map code="0xd1c0" name="1em"/><!-- HANGUL SYLLABLE TWAN -->
+ <map code="0xd1c1" name="1em"/><!-- HANGUL SYLLABLE TWANJ -->
+ <map code="0xd1c2" name="1em"/><!-- HANGUL SYLLABLE TWANH -->
+ <map code="0xd1c3" name="1em"/><!-- HANGUL SYLLABLE TWAD -->
+ <map code="0xd1c4" name="1em"/><!-- HANGUL SYLLABLE TWAL -->
+ <map code="0xd1c5" name="1em"/><!-- HANGUL SYLLABLE TWALG -->
+ <map code="0xd1c6" name="1em"/><!-- HANGUL SYLLABLE TWALM -->
+ <map code="0xd1c7" name="1em"/><!-- HANGUL SYLLABLE TWALB -->
+ <map code="0xd1c8" name="1em"/><!-- HANGUL SYLLABLE TWALS -->
+ <map code="0xd1c9" name="1em"/><!-- HANGUL SYLLABLE TWALT -->
+ <map code="0xd1ca" name="1em"/><!-- HANGUL SYLLABLE TWALP -->
+ <map code="0xd1cb" name="1em"/><!-- HANGUL SYLLABLE TWALH -->
+ <map code="0xd1cc" name="1em"/><!-- HANGUL SYLLABLE TWAM -->
+ <map code="0xd1cd" name="1em"/><!-- HANGUL SYLLABLE TWAB -->
+ <map code="0xd1ce" name="1em"/><!-- HANGUL SYLLABLE TWABS -->
+ <map code="0xd1cf" name="1em"/><!-- HANGUL SYLLABLE TWAS -->
+ <map code="0xd1d0" name="1em"/><!-- HANGUL SYLLABLE TWASS -->
+ <map code="0xd1d1" name="1em"/><!-- HANGUL SYLLABLE TWANG -->
+ <map code="0xd1d2" name="1em"/><!-- HANGUL SYLLABLE TWAJ -->
+ <map code="0xd1d3" name="1em"/><!-- HANGUL SYLLABLE TWAC -->
+ <map code="0xd1d4" name="1em"/><!-- HANGUL SYLLABLE TWAK -->
+ <map code="0xd1d5" name="1em"/><!-- HANGUL SYLLABLE TWAT -->
+ <map code="0xd1d6" name="1em"/><!-- HANGUL SYLLABLE TWAP -->
+ <map code="0xd1d7" name="1em"/><!-- HANGUL SYLLABLE TWAH -->
+ <map code="0xd1d8" name="1em"/><!-- HANGUL SYLLABLE TWAE -->
+ <map code="0xd1d9" name="1em"/><!-- HANGUL SYLLABLE TWAEG -->
+ <map code="0xd1da" name="1em"/><!-- HANGUL SYLLABLE TWAEGG -->
+ <map code="0xd1db" name="1em"/><!-- HANGUL SYLLABLE TWAEGS -->
+ <map code="0xd1dc" name="1em"/><!-- HANGUL SYLLABLE TWAEN -->
+ <map code="0xd1dd" name="1em"/><!-- HANGUL SYLLABLE TWAENJ -->
+ <map code="0xd1de" name="1em"/><!-- HANGUL SYLLABLE TWAENH -->
+ <map code="0xd1df" name="1em"/><!-- HANGUL SYLLABLE TWAED -->
+ <map code="0xd1e0" name="1em"/><!-- HANGUL SYLLABLE TWAEL -->
+ <map code="0xd1e1" name="1em"/><!-- HANGUL SYLLABLE TWAELG -->
+ <map code="0xd1e2" name="1em"/><!-- HANGUL SYLLABLE TWAELM -->
+ <map code="0xd1e3" name="1em"/><!-- HANGUL SYLLABLE TWAELB -->
+ <map code="0xd1e4" name="1em"/><!-- HANGUL SYLLABLE TWAELS -->
+ <map code="0xd1e5" name="1em"/><!-- HANGUL SYLLABLE TWAELT -->
+ <map code="0xd1e6" name="1em"/><!-- HANGUL SYLLABLE TWAELP -->
+ <map code="0xd1e7" name="1em"/><!-- HANGUL SYLLABLE TWAELH -->
+ <map code="0xd1e8" name="1em"/><!-- HANGUL SYLLABLE TWAEM -->
+ <map code="0xd1e9" name="1em"/><!-- HANGUL SYLLABLE TWAEB -->
+ <map code="0xd1ea" name="1em"/><!-- HANGUL SYLLABLE TWAEBS -->
+ <map code="0xd1eb" name="1em"/><!-- HANGUL SYLLABLE TWAES -->
+ <map code="0xd1ec" name="1em"/><!-- HANGUL SYLLABLE TWAESS -->
+ <map code="0xd1ed" name="1em"/><!-- HANGUL SYLLABLE TWAENG -->
+ <map code="0xd1ee" name="1em"/><!-- HANGUL SYLLABLE TWAEJ -->
+ <map code="0xd1ef" name="1em"/><!-- HANGUL SYLLABLE TWAEC -->
+ <map code="0xd1f0" name="1em"/><!-- HANGUL SYLLABLE TWAEK -->
+ <map code="0xd1f1" name="1em"/><!-- HANGUL SYLLABLE TWAET -->
+ <map code="0xd1f2" name="1em"/><!-- HANGUL SYLLABLE TWAEP -->
+ <map code="0xd1f3" name="1em"/><!-- HANGUL SYLLABLE TWAEH -->
+ <map code="0xd1f4" name="1em"/><!-- HANGUL SYLLABLE TOE -->
+ <map code="0xd1f5" name="1em"/><!-- HANGUL SYLLABLE TOEG -->
+ <map code="0xd1f6" name="1em"/><!-- HANGUL SYLLABLE TOEGG -->
+ <map code="0xd1f7" name="1em"/><!-- HANGUL SYLLABLE TOEGS -->
+ <map code="0xd1f8" name="1em"/><!-- HANGUL SYLLABLE TOEN -->
+ <map code="0xd1f9" name="1em"/><!-- HANGUL SYLLABLE TOENJ -->
+ <map code="0xd1fa" name="1em"/><!-- HANGUL SYLLABLE TOENH -->
+ <map code="0xd1fb" name="1em"/><!-- HANGUL SYLLABLE TOED -->
+ <map code="0xd1fc" name="1em"/><!-- HANGUL SYLLABLE TOEL -->
+ <map code="0xd1fd" name="1em"/><!-- HANGUL SYLLABLE TOELG -->
+ <map code="0xd1fe" name="1em"/><!-- HANGUL SYLLABLE TOELM -->
+ <map code="0xd1ff" name="1em"/><!-- HANGUL SYLLABLE TOELB -->
+ <map code="0xd200" name="1em"/><!-- HANGUL SYLLABLE TOELS -->
+ <map code="0xd201" name="1em"/><!-- HANGUL SYLLABLE TOELT -->
+ <map code="0xd202" name="1em"/><!-- HANGUL SYLLABLE TOELP -->
+ <map code="0xd203" name="1em"/><!-- HANGUL SYLLABLE TOELH -->
+ <map code="0xd204" name="1em"/><!-- HANGUL SYLLABLE TOEM -->
+ <map code="0xd205" name="1em"/><!-- HANGUL SYLLABLE TOEB -->
+ <map code="0xd206" name="1em"/><!-- HANGUL SYLLABLE TOEBS -->
+ <map code="0xd207" name="1em"/><!-- HANGUL SYLLABLE TOES -->
+ <map code="0xd208" name="1em"/><!-- HANGUL SYLLABLE TOESS -->
+ <map code="0xd209" name="1em"/><!-- HANGUL SYLLABLE TOENG -->
+ <map code="0xd20a" name="1em"/><!-- HANGUL SYLLABLE TOEJ -->
+ <map code="0xd20b" name="1em"/><!-- HANGUL SYLLABLE TOEC -->
+ <map code="0xd20c" name="1em"/><!-- HANGUL SYLLABLE TOEK -->
+ <map code="0xd20d" name="1em"/><!-- HANGUL SYLLABLE TOET -->
+ <map code="0xd20e" name="1em"/><!-- HANGUL SYLLABLE TOEP -->
+ <map code="0xd20f" name="1em"/><!-- HANGUL SYLLABLE TOEH -->
+ <map code="0xd210" name="1em"/><!-- HANGUL SYLLABLE TYO -->
+ <map code="0xd211" name="1em"/><!-- HANGUL SYLLABLE TYOG -->
+ <map code="0xd212" name="1em"/><!-- HANGUL SYLLABLE TYOGG -->
+ <map code="0xd213" name="1em"/><!-- HANGUL SYLLABLE TYOGS -->
+ <map code="0xd214" name="1em"/><!-- HANGUL SYLLABLE TYON -->
+ <map code="0xd215" name="1em"/><!-- HANGUL SYLLABLE TYONJ -->
+ <map code="0xd216" name="1em"/><!-- HANGUL SYLLABLE TYONH -->
+ <map code="0xd217" name="1em"/><!-- HANGUL SYLLABLE TYOD -->
+ <map code="0xd218" name="1em"/><!-- HANGUL SYLLABLE TYOL -->
+ <map code="0xd219" name="1em"/><!-- HANGUL SYLLABLE TYOLG -->
+ <map code="0xd21a" name="1em"/><!-- HANGUL SYLLABLE TYOLM -->
+ <map code="0xd21b" name="1em"/><!-- HANGUL SYLLABLE TYOLB -->
+ <map code="0xd21c" name="1em"/><!-- HANGUL SYLLABLE TYOLS -->
+ <map code="0xd21d" name="1em"/><!-- HANGUL SYLLABLE TYOLT -->
+ <map code="0xd21e" name="1em"/><!-- HANGUL SYLLABLE TYOLP -->
+ <map code="0xd21f" name="1em"/><!-- HANGUL SYLLABLE TYOLH -->
+ <map code="0xd220" name="1em"/><!-- HANGUL SYLLABLE TYOM -->
+ <map code="0xd221" name="1em"/><!-- HANGUL SYLLABLE TYOB -->
+ <map code="0xd222" name="1em"/><!-- HANGUL SYLLABLE TYOBS -->
+ <map code="0xd223" name="1em"/><!-- HANGUL SYLLABLE TYOS -->
+ <map code="0xd224" name="1em"/><!-- HANGUL SYLLABLE TYOSS -->
+ <map code="0xd225" name="1em"/><!-- HANGUL SYLLABLE TYONG -->
+ <map code="0xd226" name="1em"/><!-- HANGUL SYLLABLE TYOJ -->
+ <map code="0xd227" name="1em"/><!-- HANGUL SYLLABLE TYOC -->
+ <map code="0xd228" name="1em"/><!-- HANGUL SYLLABLE TYOK -->
+ <map code="0xd229" name="1em"/><!-- HANGUL SYLLABLE TYOT -->
+ <map code="0xd22a" name="1em"/><!-- HANGUL SYLLABLE TYOP -->
+ <map code="0xd22b" name="1em"/><!-- HANGUL SYLLABLE TYOH -->
+ <map code="0xd22c" name="1em"/><!-- HANGUL SYLLABLE TU -->
+ <map code="0xd22d" name="1em"/><!-- HANGUL SYLLABLE TUG -->
+ <map code="0xd22e" name="1em"/><!-- HANGUL SYLLABLE TUGG -->
+ <map code="0xd22f" name="1em"/><!-- HANGUL SYLLABLE TUGS -->
+ <map code="0xd230" name="1em"/><!-- HANGUL SYLLABLE TUN -->
+ <map code="0xd231" name="1em"/><!-- HANGUL SYLLABLE TUNJ -->
+ <map code="0xd232" name="1em"/><!-- HANGUL SYLLABLE TUNH -->
+ <map code="0xd233" name="1em"/><!-- HANGUL SYLLABLE TUD -->
+ <map code="0xd234" name="1em"/><!-- HANGUL SYLLABLE TUL -->
+ <map code="0xd235" name="1em"/><!-- HANGUL SYLLABLE TULG -->
+ <map code="0xd236" name="1em"/><!-- HANGUL SYLLABLE TULM -->
+ <map code="0xd237" name="1em"/><!-- HANGUL SYLLABLE TULB -->
+ <map code="0xd238" name="1em"/><!-- HANGUL SYLLABLE TULS -->
+ <map code="0xd239" name="1em"/><!-- HANGUL SYLLABLE TULT -->
+ <map code="0xd23a" name="1em"/><!-- HANGUL SYLLABLE TULP -->
+ <map code="0xd23b" name="1em"/><!-- HANGUL SYLLABLE TULH -->
+ <map code="0xd23c" name="1em"/><!-- HANGUL SYLLABLE TUM -->
+ <map code="0xd23d" name="1em"/><!-- HANGUL SYLLABLE TUB -->
+ <map code="0xd23e" name="1em"/><!-- HANGUL SYLLABLE TUBS -->
+ <map code="0xd23f" name="1em"/><!-- HANGUL SYLLABLE TUS -->
+ <map code="0xd240" name="1em"/><!-- HANGUL SYLLABLE TUSS -->
+ <map code="0xd241" name="1em"/><!-- HANGUL SYLLABLE TUNG -->
+ <map code="0xd242" name="1em"/><!-- HANGUL SYLLABLE TUJ -->
+ <map code="0xd243" name="1em"/><!-- HANGUL SYLLABLE TUC -->
+ <map code="0xd244" name="1em"/><!-- HANGUL SYLLABLE TUK -->
+ <map code="0xd245" name="1em"/><!-- HANGUL SYLLABLE TUT -->
+ <map code="0xd246" name="1em"/><!-- HANGUL SYLLABLE TUP -->
+ <map code="0xd247" name="1em"/><!-- HANGUL SYLLABLE TUH -->
+ <map code="0xd248" name="1em"/><!-- HANGUL SYLLABLE TWEO -->
+ <map code="0xd249" name="1em"/><!-- HANGUL SYLLABLE TWEOG -->
+ <map code="0xd24a" name="1em"/><!-- HANGUL SYLLABLE TWEOGG -->
+ <map code="0xd24b" name="1em"/><!-- HANGUL SYLLABLE TWEOGS -->
+ <map code="0xd24c" name="1em"/><!-- HANGUL SYLLABLE TWEON -->
+ <map code="0xd24d" name="1em"/><!-- HANGUL SYLLABLE TWEONJ -->
+ <map code="0xd24e" name="1em"/><!-- HANGUL SYLLABLE TWEONH -->
+ <map code="0xd24f" name="1em"/><!-- HANGUL SYLLABLE TWEOD -->
+ <map code="0xd250" name="1em"/><!-- HANGUL SYLLABLE TWEOL -->
+ <map code="0xd251" name="1em"/><!-- HANGUL SYLLABLE TWEOLG -->
+ <map code="0xd252" name="1em"/><!-- HANGUL SYLLABLE TWEOLM -->
+ <map code="0xd253" name="1em"/><!-- HANGUL SYLLABLE TWEOLB -->
+ <map code="0xd254" name="1em"/><!-- HANGUL SYLLABLE TWEOLS -->
+ <map code="0xd255" name="1em"/><!-- HANGUL SYLLABLE TWEOLT -->
+ <map code="0xd256" name="1em"/><!-- HANGUL SYLLABLE TWEOLP -->
+ <map code="0xd257" name="1em"/><!-- HANGUL SYLLABLE TWEOLH -->
+ <map code="0xd258" name="1em"/><!-- HANGUL SYLLABLE TWEOM -->
+ <map code="0xd259" name="1em"/><!-- HANGUL SYLLABLE TWEOB -->
+ <map code="0xd25a" name="1em"/><!-- HANGUL SYLLABLE TWEOBS -->
+ <map code="0xd25b" name="1em"/><!-- HANGUL SYLLABLE TWEOS -->
+ <map code="0xd25c" name="1em"/><!-- HANGUL SYLLABLE TWEOSS -->
+ <map code="0xd25d" name="1em"/><!-- HANGUL SYLLABLE TWEONG -->
+ <map code="0xd25e" name="1em"/><!-- HANGUL SYLLABLE TWEOJ -->
+ <map code="0xd25f" name="1em"/><!-- HANGUL SYLLABLE TWEOC -->
+ <map code="0xd260" name="1em"/><!-- HANGUL SYLLABLE TWEOK -->
+ <map code="0xd261" name="1em"/><!-- HANGUL SYLLABLE TWEOT -->
+ <map code="0xd262" name="1em"/><!-- HANGUL SYLLABLE TWEOP -->
+ <map code="0xd263" name="1em"/><!-- HANGUL SYLLABLE TWEOH -->
+ <map code="0xd264" name="1em"/><!-- HANGUL SYLLABLE TWE -->
+ <map code="0xd265" name="1em"/><!-- HANGUL SYLLABLE TWEG -->
+ <map code="0xd266" name="1em"/><!-- HANGUL SYLLABLE TWEGG -->
+ <map code="0xd267" name="1em"/><!-- HANGUL SYLLABLE TWEGS -->
+ <map code="0xd268" name="1em"/><!-- HANGUL SYLLABLE TWEN -->
+ <map code="0xd269" name="1em"/><!-- HANGUL SYLLABLE TWENJ -->
+ <map code="0xd26a" name="1em"/><!-- HANGUL SYLLABLE TWENH -->
+ <map code="0xd26b" name="1em"/><!-- HANGUL SYLLABLE TWED -->
+ <map code="0xd26c" name="1em"/><!-- HANGUL SYLLABLE TWEL -->
+ <map code="0xd26d" name="1em"/><!-- HANGUL SYLLABLE TWELG -->
+ <map code="0xd26e" name="1em"/><!-- HANGUL SYLLABLE TWELM -->
+ <map code="0xd26f" name="1em"/><!-- HANGUL SYLLABLE TWELB -->
+ <map code="0xd270" name="1em"/><!-- HANGUL SYLLABLE TWELS -->
+ <map code="0xd271" name="1em"/><!-- HANGUL SYLLABLE TWELT -->
+ <map code="0xd272" name="1em"/><!-- HANGUL SYLLABLE TWELP -->
+ <map code="0xd273" name="1em"/><!-- HANGUL SYLLABLE TWELH -->
+ <map code="0xd274" name="1em"/><!-- HANGUL SYLLABLE TWEM -->
+ <map code="0xd275" name="1em"/><!-- HANGUL SYLLABLE TWEB -->
+ <map code="0xd276" name="1em"/><!-- HANGUL SYLLABLE TWEBS -->
+ <map code="0xd277" name="1em"/><!-- HANGUL SYLLABLE TWES -->
+ <map code="0xd278" name="1em"/><!-- HANGUL SYLLABLE TWESS -->
+ <map code="0xd279" name="1em"/><!-- HANGUL SYLLABLE TWENG -->
+ <map code="0xd27a" name="1em"/><!-- HANGUL SYLLABLE TWEJ -->
+ <map code="0xd27b" name="1em"/><!-- HANGUL SYLLABLE TWEC -->
+ <map code="0xd27c" name="1em"/><!-- HANGUL SYLLABLE TWEK -->
+ <map code="0xd27d" name="1em"/><!-- HANGUL SYLLABLE TWET -->
+ <map code="0xd27e" name="1em"/><!-- HANGUL SYLLABLE TWEP -->
+ <map code="0xd27f" name="1em"/><!-- HANGUL SYLLABLE TWEH -->
+ <map code="0xd280" name="1em"/><!-- HANGUL SYLLABLE TWI -->
+ <map code="0xd281" name="1em"/><!-- HANGUL SYLLABLE TWIG -->
+ <map code="0xd282" name="1em"/><!-- HANGUL SYLLABLE TWIGG -->
+ <map code="0xd283" name="1em"/><!-- HANGUL SYLLABLE TWIGS -->
+ <map code="0xd284" name="1em"/><!-- HANGUL SYLLABLE TWIN -->
+ <map code="0xd285" name="1em"/><!-- HANGUL SYLLABLE TWINJ -->
+ <map code="0xd286" name="1em"/><!-- HANGUL SYLLABLE TWINH -->
+ <map code="0xd287" name="1em"/><!-- HANGUL SYLLABLE TWID -->
+ <map code="0xd288" name="1em"/><!-- HANGUL SYLLABLE TWIL -->
+ <map code="0xd289" name="1em"/><!-- HANGUL SYLLABLE TWILG -->
+ <map code="0xd28a" name="1em"/><!-- HANGUL SYLLABLE TWILM -->
+ <map code="0xd28b" name="1em"/><!-- HANGUL SYLLABLE TWILB -->
+ <map code="0xd28c" name="1em"/><!-- HANGUL SYLLABLE TWILS -->
+ <map code="0xd28d" name="1em"/><!-- HANGUL SYLLABLE TWILT -->
+ <map code="0xd28e" name="1em"/><!-- HANGUL SYLLABLE TWILP -->
+ <map code="0xd28f" name="1em"/><!-- HANGUL SYLLABLE TWILH -->
+ <map code="0xd290" name="1em"/><!-- HANGUL SYLLABLE TWIM -->
+ <map code="0xd291" name="1em"/><!-- HANGUL SYLLABLE TWIB -->
+ <map code="0xd292" name="1em"/><!-- HANGUL SYLLABLE TWIBS -->
+ <map code="0xd293" name="1em"/><!-- HANGUL SYLLABLE TWIS -->
+ <map code="0xd294" name="1em"/><!-- HANGUL SYLLABLE TWISS -->
+ <map code="0xd295" name="1em"/><!-- HANGUL SYLLABLE TWING -->
+ <map code="0xd296" name="1em"/><!-- HANGUL SYLLABLE TWIJ -->
+ <map code="0xd297" name="1em"/><!-- HANGUL SYLLABLE TWIC -->
+ <map code="0xd298" name="1em"/><!-- HANGUL SYLLABLE TWIK -->
+ <map code="0xd299" name="1em"/><!-- HANGUL SYLLABLE TWIT -->
+ <map code="0xd29a" name="1em"/><!-- HANGUL SYLLABLE TWIP -->
+ <map code="0xd29b" name="1em"/><!-- HANGUL SYLLABLE TWIH -->
+ <map code="0xd29c" name="1em"/><!-- HANGUL SYLLABLE TYU -->
+ <map code="0xd29d" name="1em"/><!-- HANGUL SYLLABLE TYUG -->
+ <map code="0xd29e" name="1em"/><!-- HANGUL SYLLABLE TYUGG -->
+ <map code="0xd29f" name="1em"/><!-- HANGUL SYLLABLE TYUGS -->
+ <map code="0xd2a0" name="1em"/><!-- HANGUL SYLLABLE TYUN -->
+ <map code="0xd2a1" name="1em"/><!-- HANGUL SYLLABLE TYUNJ -->
+ <map code="0xd2a2" name="1em"/><!-- HANGUL SYLLABLE TYUNH -->
+ <map code="0xd2a3" name="1em"/><!-- HANGUL SYLLABLE TYUD -->
+ <map code="0xd2a4" name="1em"/><!-- HANGUL SYLLABLE TYUL -->
+ <map code="0xd2a5" name="1em"/><!-- HANGUL SYLLABLE TYULG -->
+ <map code="0xd2a6" name="1em"/><!-- HANGUL SYLLABLE TYULM -->
+ <map code="0xd2a7" name="1em"/><!-- HANGUL SYLLABLE TYULB -->
+ <map code="0xd2a8" name="1em"/><!-- HANGUL SYLLABLE TYULS -->
+ <map code="0xd2a9" name="1em"/><!-- HANGUL SYLLABLE TYULT -->
+ <map code="0xd2aa" name="1em"/><!-- HANGUL SYLLABLE TYULP -->
+ <map code="0xd2ab" name="1em"/><!-- HANGUL SYLLABLE TYULH -->
+ <map code="0xd2ac" name="1em"/><!-- HANGUL SYLLABLE TYUM -->
+ <map code="0xd2ad" name="1em"/><!-- HANGUL SYLLABLE TYUB -->
+ <map code="0xd2ae" name="1em"/><!-- HANGUL SYLLABLE TYUBS -->
+ <map code="0xd2af" name="1em"/><!-- HANGUL SYLLABLE TYUS -->
+ <map code="0xd2b0" name="1em"/><!-- HANGUL SYLLABLE TYUSS -->
+ <map code="0xd2b1" name="1em"/><!-- HANGUL SYLLABLE TYUNG -->
+ <map code="0xd2b2" name="1em"/><!-- HANGUL SYLLABLE TYUJ -->
+ <map code="0xd2b3" name="1em"/><!-- HANGUL SYLLABLE TYUC -->
+ <map code="0xd2b4" name="1em"/><!-- HANGUL SYLLABLE TYUK -->
+ <map code="0xd2b5" name="1em"/><!-- HANGUL SYLLABLE TYUT -->
+ <map code="0xd2b6" name="1em"/><!-- HANGUL SYLLABLE TYUP -->
+ <map code="0xd2b7" name="1em"/><!-- HANGUL SYLLABLE TYUH -->
+ <map code="0xd2b8" name="1em"/><!-- HANGUL SYLLABLE TEU -->
+ <map code="0xd2b9" name="1em"/><!-- HANGUL SYLLABLE TEUG -->
+ <map code="0xd2ba" name="1em"/><!-- HANGUL SYLLABLE TEUGG -->
+ <map code="0xd2bb" name="1em"/><!-- HANGUL SYLLABLE TEUGS -->
+ <map code="0xd2bc" name="1em"/><!-- HANGUL SYLLABLE TEUN -->
+ <map code="0xd2bd" name="1em"/><!-- HANGUL SYLLABLE TEUNJ -->
+ <map code="0xd2be" name="1em"/><!-- HANGUL SYLLABLE TEUNH -->
+ <map code="0xd2bf" name="1em"/><!-- HANGUL SYLLABLE TEUD -->
+ <map code="0xd2c0" name="1em"/><!-- HANGUL SYLLABLE TEUL -->
+ <map code="0xd2c1" name="1em"/><!-- HANGUL SYLLABLE TEULG -->
+ <map code="0xd2c2" name="1em"/><!-- HANGUL SYLLABLE TEULM -->
+ <map code="0xd2c3" name="1em"/><!-- HANGUL SYLLABLE TEULB -->
+ <map code="0xd2c4" name="1em"/><!-- HANGUL SYLLABLE TEULS -->
+ <map code="0xd2c5" name="1em"/><!-- HANGUL SYLLABLE TEULT -->
+ <map code="0xd2c6" name="1em"/><!-- HANGUL SYLLABLE TEULP -->
+ <map code="0xd2c7" name="1em"/><!-- HANGUL SYLLABLE TEULH -->
+ <map code="0xd2c8" name="1em"/><!-- HANGUL SYLLABLE TEUM -->
+ <map code="0xd2c9" name="1em"/><!-- HANGUL SYLLABLE TEUB -->
+ <map code="0xd2ca" name="1em"/><!-- HANGUL SYLLABLE TEUBS -->
+ <map code="0xd2cb" name="1em"/><!-- HANGUL SYLLABLE TEUS -->
+ <map code="0xd2cc" name="1em"/><!-- HANGUL SYLLABLE TEUSS -->
+ <map code="0xd2cd" name="1em"/><!-- HANGUL SYLLABLE TEUNG -->
+ <map code="0xd2ce" name="1em"/><!-- HANGUL SYLLABLE TEUJ -->
+ <map code="0xd2cf" name="1em"/><!-- HANGUL SYLLABLE TEUC -->
+ <map code="0xd2d0" name="1em"/><!-- HANGUL SYLLABLE TEUK -->
+ <map code="0xd2d1" name="1em"/><!-- HANGUL SYLLABLE TEUT -->
+ <map code="0xd2d2" name="1em"/><!-- HANGUL SYLLABLE TEUP -->
+ <map code="0xd2d3" name="1em"/><!-- HANGUL SYLLABLE TEUH -->
+ <map code="0xd2d4" name="1em"/><!-- HANGUL SYLLABLE TYI -->
+ <map code="0xd2d5" name="1em"/><!-- HANGUL SYLLABLE TYIG -->
+ <map code="0xd2d6" name="1em"/><!-- HANGUL SYLLABLE TYIGG -->
+ <map code="0xd2d7" name="1em"/><!-- HANGUL SYLLABLE TYIGS -->
+ <map code="0xd2d8" name="1em"/><!-- HANGUL SYLLABLE TYIN -->
+ <map code="0xd2d9" name="1em"/><!-- HANGUL SYLLABLE TYINJ -->
+ <map code="0xd2da" name="1em"/><!-- HANGUL SYLLABLE TYINH -->
+ <map code="0xd2db" name="1em"/><!-- HANGUL SYLLABLE TYID -->
+ <map code="0xd2dc" name="1em"/><!-- HANGUL SYLLABLE TYIL -->
+ <map code="0xd2dd" name="1em"/><!-- HANGUL SYLLABLE TYILG -->
+ <map code="0xd2de" name="1em"/><!-- HANGUL SYLLABLE TYILM -->
+ <map code="0xd2df" name="1em"/><!-- HANGUL SYLLABLE TYILB -->
+ <map code="0xd2e0" name="1em"/><!-- HANGUL SYLLABLE TYILS -->
+ <map code="0xd2e1" name="1em"/><!-- HANGUL SYLLABLE TYILT -->
+ <map code="0xd2e2" name="1em"/><!-- HANGUL SYLLABLE TYILP -->
+ <map code="0xd2e3" name="1em"/><!-- HANGUL SYLLABLE TYILH -->
+ <map code="0xd2e4" name="1em"/><!-- HANGUL SYLLABLE TYIM -->
+ <map code="0xd2e5" name="1em"/><!-- HANGUL SYLLABLE TYIB -->
+ <map code="0xd2e6" name="1em"/><!-- HANGUL SYLLABLE TYIBS -->
+ <map code="0xd2e7" name="1em"/><!-- HANGUL SYLLABLE TYIS -->
+ <map code="0xd2e8" name="1em"/><!-- HANGUL SYLLABLE TYISS -->
+ <map code="0xd2e9" name="1em"/><!-- HANGUL SYLLABLE TYING -->
+ <map code="0xd2ea" name="1em"/><!-- HANGUL SYLLABLE TYIJ -->
+ <map code="0xd2eb" name="1em"/><!-- HANGUL SYLLABLE TYIC -->
+ <map code="0xd2ec" name="1em"/><!-- HANGUL SYLLABLE TYIK -->
+ <map code="0xd2ed" name="1em"/><!-- HANGUL SYLLABLE TYIT -->
+ <map code="0xd2ee" name="1em"/><!-- HANGUL SYLLABLE TYIP -->
+ <map code="0xd2ef" name="1em"/><!-- HANGUL SYLLABLE TYIH -->
+ <map code="0xd2f0" name="1em"/><!-- HANGUL SYLLABLE TI -->
+ <map code="0xd2f1" name="1em"/><!-- HANGUL SYLLABLE TIG -->
+ <map code="0xd2f2" name="1em"/><!-- HANGUL SYLLABLE TIGG -->
+ <map code="0xd2f3" name="1em"/><!-- HANGUL SYLLABLE TIGS -->
+ <map code="0xd2f4" name="1em"/><!-- HANGUL SYLLABLE TIN -->
+ <map code="0xd2f5" name="1em"/><!-- HANGUL SYLLABLE TINJ -->
+ <map code="0xd2f6" name="1em"/><!-- HANGUL SYLLABLE TINH -->
+ <map code="0xd2f7" name="1em"/><!-- HANGUL SYLLABLE TID -->
+ <map code="0xd2f8" name="1em"/><!-- HANGUL SYLLABLE TIL -->
+ <map code="0xd2f9" name="1em"/><!-- HANGUL SYLLABLE TILG -->
+ <map code="0xd2fa" name="1em"/><!-- HANGUL SYLLABLE TILM -->
+ <map code="0xd2fb" name="1em"/><!-- HANGUL SYLLABLE TILB -->
+ <map code="0xd2fc" name="1em"/><!-- HANGUL SYLLABLE TILS -->
+ <map code="0xd2fd" name="1em"/><!-- HANGUL SYLLABLE TILT -->
+ <map code="0xd2fe" name="1em"/><!-- HANGUL SYLLABLE TILP -->
+ <map code="0xd2ff" name="1em"/><!-- HANGUL SYLLABLE TILH -->
+ <map code="0xd300" name="1em"/><!-- HANGUL SYLLABLE TIM -->
+ <map code="0xd301" name="1em"/><!-- HANGUL SYLLABLE TIB -->
+ <map code="0xd302" name="1em"/><!-- HANGUL SYLLABLE TIBS -->
+ <map code="0xd303" name="1em"/><!-- HANGUL SYLLABLE TIS -->
+ <map code="0xd304" name="1em"/><!-- HANGUL SYLLABLE TISS -->
+ <map code="0xd305" name="1em"/><!-- HANGUL SYLLABLE TING -->
+ <map code="0xd306" name="1em"/><!-- HANGUL SYLLABLE TIJ -->
+ <map code="0xd307" name="1em"/><!-- HANGUL SYLLABLE TIC -->
+ <map code="0xd308" name="1em"/><!-- HANGUL SYLLABLE TIK -->
+ <map code="0xd309" name="1em"/><!-- HANGUL SYLLABLE TIT -->
+ <map code="0xd30a" name="1em"/><!-- HANGUL SYLLABLE TIP -->
+ <map code="0xd30b" name="1em"/><!-- HANGUL SYLLABLE TIH -->
+ <map code="0xd30c" name="1em"/><!-- HANGUL SYLLABLE PA -->
+ <map code="0xd30d" name="1em"/><!-- HANGUL SYLLABLE PAG -->
+ <map code="0xd30e" name="1em"/><!-- HANGUL SYLLABLE PAGG -->
+ <map code="0xd30f" name="1em"/><!-- HANGUL SYLLABLE PAGS -->
+ <map code="0xd310" name="1em"/><!-- HANGUL SYLLABLE PAN -->
+ <map code="0xd311" name="1em"/><!-- HANGUL SYLLABLE PANJ -->
+ <map code="0xd312" name="1em"/><!-- HANGUL SYLLABLE PANH -->
+ <map code="0xd313" name="1em"/><!-- HANGUL SYLLABLE PAD -->
+ <map code="0xd314" name="1em"/><!-- HANGUL SYLLABLE PAL -->
+ <map code="0xd315" name="1em"/><!-- HANGUL SYLLABLE PALG -->
+ <map code="0xd316" name="1em"/><!-- HANGUL SYLLABLE PALM -->
+ <map code="0xd317" name="1em"/><!-- HANGUL SYLLABLE PALB -->
+ <map code="0xd318" name="1em"/><!-- HANGUL SYLLABLE PALS -->
+ <map code="0xd319" name="1em"/><!-- HANGUL SYLLABLE PALT -->
+ <map code="0xd31a" name="1em"/><!-- HANGUL SYLLABLE PALP -->
+ <map code="0xd31b" name="1em"/><!-- HANGUL SYLLABLE PALH -->
+ <map code="0xd31c" name="1em"/><!-- HANGUL SYLLABLE PAM -->
+ <map code="0xd31d" name="1em"/><!-- HANGUL SYLLABLE PAB -->
+ <map code="0xd31e" name="1em"/><!-- HANGUL SYLLABLE PABS -->
+ <map code="0xd31f" name="1em"/><!-- HANGUL SYLLABLE PAS -->
+ <map code="0xd320" name="1em"/><!-- HANGUL SYLLABLE PASS -->
+ <map code="0xd321" name="1em"/><!-- HANGUL SYLLABLE PANG -->
+ <map code="0xd322" name="1em"/><!-- HANGUL SYLLABLE PAJ -->
+ <map code="0xd323" name="1em"/><!-- HANGUL SYLLABLE PAC -->
+ <map code="0xd324" name="1em"/><!-- HANGUL SYLLABLE PAK -->
+ <map code="0xd325" name="1em"/><!-- HANGUL SYLLABLE PAT -->
+ <map code="0xd326" name="1em"/><!-- HANGUL SYLLABLE PAP -->
+ <map code="0xd327" name="1em"/><!-- HANGUL SYLLABLE PAH -->
+ <map code="0xd328" name="1em"/><!-- HANGUL SYLLABLE PAE -->
+ <map code="0xd329" name="1em"/><!-- HANGUL SYLLABLE PAEG -->
+ <map code="0xd32a" name="1em"/><!-- HANGUL SYLLABLE PAEGG -->
+ <map code="0xd32b" name="1em"/><!-- HANGUL SYLLABLE PAEGS -->
+ <map code="0xd32c" name="1em"/><!-- HANGUL SYLLABLE PAEN -->
+ <map code="0xd32d" name="1em"/><!-- HANGUL SYLLABLE PAENJ -->
+ <map code="0xd32e" name="1em"/><!-- HANGUL SYLLABLE PAENH -->
+ <map code="0xd32f" name="1em"/><!-- HANGUL SYLLABLE PAED -->
+ <map code="0xd330" name="1em"/><!-- HANGUL SYLLABLE PAEL -->
+ <map code="0xd331" name="1em"/><!-- HANGUL SYLLABLE PAELG -->
+ <map code="0xd332" name="1em"/><!-- HANGUL SYLLABLE PAELM -->
+ <map code="0xd333" name="1em"/><!-- HANGUL SYLLABLE PAELB -->
+ <map code="0xd334" name="1em"/><!-- HANGUL SYLLABLE PAELS -->
+ <map code="0xd335" name="1em"/><!-- HANGUL SYLLABLE PAELT -->
+ <map code="0xd336" name="1em"/><!-- HANGUL SYLLABLE PAELP -->
+ <map code="0xd337" name="1em"/><!-- HANGUL SYLLABLE PAELH -->
+ <map code="0xd338" name="1em"/><!-- HANGUL SYLLABLE PAEM -->
+ <map code="0xd339" name="1em"/><!-- HANGUL SYLLABLE PAEB -->
+ <map code="0xd33a" name="1em"/><!-- HANGUL SYLLABLE PAEBS -->
+ <map code="0xd33b" name="1em"/><!-- HANGUL SYLLABLE PAES -->
+ <map code="0xd33c" name="1em"/><!-- HANGUL SYLLABLE PAESS -->
+ <map code="0xd33d" name="1em"/><!-- HANGUL SYLLABLE PAENG -->
+ <map code="0xd33e" name="1em"/><!-- HANGUL SYLLABLE PAEJ -->
+ <map code="0xd33f" name="1em"/><!-- HANGUL SYLLABLE PAEC -->
+ <map code="0xd340" name="1em"/><!-- HANGUL SYLLABLE PAEK -->
+ <map code="0xd341" name="1em"/><!-- HANGUL SYLLABLE PAET -->
+ <map code="0xd342" name="1em"/><!-- HANGUL SYLLABLE PAEP -->
+ <map code="0xd343" name="1em"/><!-- HANGUL SYLLABLE PAEH -->
+ <map code="0xd344" name="1em"/><!-- HANGUL SYLLABLE PYA -->
+ <map code="0xd345" name="1em"/><!-- HANGUL SYLLABLE PYAG -->
+ <map code="0xd346" name="1em"/><!-- HANGUL SYLLABLE PYAGG -->
+ <map code="0xd347" name="1em"/><!-- HANGUL SYLLABLE PYAGS -->
+ <map code="0xd348" name="1em"/><!-- HANGUL SYLLABLE PYAN -->
+ <map code="0xd349" name="1em"/><!-- HANGUL SYLLABLE PYANJ -->
+ <map code="0xd34a" name="1em"/><!-- HANGUL SYLLABLE PYANH -->
+ <map code="0xd34b" name="1em"/><!-- HANGUL SYLLABLE PYAD -->
+ <map code="0xd34c" name="1em"/><!-- HANGUL SYLLABLE PYAL -->
+ <map code="0xd34d" name="1em"/><!-- HANGUL SYLLABLE PYALG -->
+ <map code="0xd34e" name="1em"/><!-- HANGUL SYLLABLE PYALM -->
+ <map code="0xd34f" name="1em"/><!-- HANGUL SYLLABLE PYALB -->
+ <map code="0xd350" name="1em"/><!-- HANGUL SYLLABLE PYALS -->
+ <map code="0xd351" name="1em"/><!-- HANGUL SYLLABLE PYALT -->
+ <map code="0xd352" name="1em"/><!-- HANGUL SYLLABLE PYALP -->
+ <map code="0xd353" name="1em"/><!-- HANGUL SYLLABLE PYALH -->
+ <map code="0xd354" name="1em"/><!-- HANGUL SYLLABLE PYAM -->
+ <map code="0xd355" name="1em"/><!-- HANGUL SYLLABLE PYAB -->
+ <map code="0xd356" name="1em"/><!-- HANGUL SYLLABLE PYABS -->
+ <map code="0xd357" name="1em"/><!-- HANGUL SYLLABLE PYAS -->
+ <map code="0xd358" name="1em"/><!-- HANGUL SYLLABLE PYASS -->
+ <map code="0xd359" name="1em"/><!-- HANGUL SYLLABLE PYANG -->
+ <map code="0xd35a" name="1em"/><!-- HANGUL SYLLABLE PYAJ -->
+ <map code="0xd35b" name="1em"/><!-- HANGUL SYLLABLE PYAC -->
+ <map code="0xd35c" name="1em"/><!-- HANGUL SYLLABLE PYAK -->
+ <map code="0xd35d" name="1em"/><!-- HANGUL SYLLABLE PYAT -->
+ <map code="0xd35e" name="1em"/><!-- HANGUL SYLLABLE PYAP -->
+ <map code="0xd35f" name="1em"/><!-- HANGUL SYLLABLE PYAH -->
+ <map code="0xd360" name="1em"/><!-- HANGUL SYLLABLE PYAE -->
+ <map code="0xd361" name="1em"/><!-- HANGUL SYLLABLE PYAEG -->
+ <map code="0xd362" name="1em"/><!-- HANGUL SYLLABLE PYAEGG -->
+ <map code="0xd363" name="1em"/><!-- HANGUL SYLLABLE PYAEGS -->
+ <map code="0xd364" name="1em"/><!-- HANGUL SYLLABLE PYAEN -->
+ <map code="0xd365" name="1em"/><!-- HANGUL SYLLABLE PYAENJ -->
+ <map code="0xd366" name="1em"/><!-- HANGUL SYLLABLE PYAENH -->
+ <map code="0xd367" name="1em"/><!-- HANGUL SYLLABLE PYAED -->
+ <map code="0xd368" name="1em"/><!-- HANGUL SYLLABLE PYAEL -->
+ <map code="0xd369" name="1em"/><!-- HANGUL SYLLABLE PYAELG -->
+ <map code="0xd36a" name="1em"/><!-- HANGUL SYLLABLE PYAELM -->
+ <map code="0xd36b" name="1em"/><!-- HANGUL SYLLABLE PYAELB -->
+ <map code="0xd36c" name="1em"/><!-- HANGUL SYLLABLE PYAELS -->
+ <map code="0xd36d" name="1em"/><!-- HANGUL SYLLABLE PYAELT -->
+ <map code="0xd36e" name="1em"/><!-- HANGUL SYLLABLE PYAELP -->
+ <map code="0xd36f" name="1em"/><!-- HANGUL SYLLABLE PYAELH -->
+ <map code="0xd370" name="1em"/><!-- HANGUL SYLLABLE PYAEM -->
+ <map code="0xd371" name="1em"/><!-- HANGUL SYLLABLE PYAEB -->
+ <map code="0xd372" name="1em"/><!-- HANGUL SYLLABLE PYAEBS -->
+ <map code="0xd373" name="1em"/><!-- HANGUL SYLLABLE PYAES -->
+ <map code="0xd374" name="1em"/><!-- HANGUL SYLLABLE PYAESS -->
+ <map code="0xd375" name="1em"/><!-- HANGUL SYLLABLE PYAENG -->
+ <map code="0xd376" name="1em"/><!-- HANGUL SYLLABLE PYAEJ -->
+ <map code="0xd377" name="1em"/><!-- HANGUL SYLLABLE PYAEC -->
+ <map code="0xd378" name="1em"/><!-- HANGUL SYLLABLE PYAEK -->
+ <map code="0xd379" name="1em"/><!-- HANGUL SYLLABLE PYAET -->
+ <map code="0xd37a" name="1em"/><!-- HANGUL SYLLABLE PYAEP -->
+ <map code="0xd37b" name="1em"/><!-- HANGUL SYLLABLE PYAEH -->
+ <map code="0xd37c" name="1em"/><!-- HANGUL SYLLABLE PEO -->
+ <map code="0xd37d" name="1em"/><!-- HANGUL SYLLABLE PEOG -->
+ <map code="0xd37e" name="1em"/><!-- HANGUL SYLLABLE PEOGG -->
+ <map code="0xd37f" name="1em"/><!-- HANGUL SYLLABLE PEOGS -->
+ <map code="0xd380" name="1em"/><!-- HANGUL SYLLABLE PEON -->
+ <map code="0xd381" name="1em"/><!-- HANGUL SYLLABLE PEONJ -->
+ <map code="0xd382" name="1em"/><!-- HANGUL SYLLABLE PEONH -->
+ <map code="0xd383" name="1em"/><!-- HANGUL SYLLABLE PEOD -->
+ <map code="0xd384" name="1em"/><!-- HANGUL SYLLABLE PEOL -->
+ <map code="0xd385" name="1em"/><!-- HANGUL SYLLABLE PEOLG -->
+ <map code="0xd386" name="1em"/><!-- HANGUL SYLLABLE PEOLM -->
+ <map code="0xd387" name="1em"/><!-- HANGUL SYLLABLE PEOLB -->
+ <map code="0xd388" name="1em"/><!-- HANGUL SYLLABLE PEOLS -->
+ <map code="0xd389" name="1em"/><!-- HANGUL SYLLABLE PEOLT -->
+ <map code="0xd38a" name="1em"/><!-- HANGUL SYLLABLE PEOLP -->
+ <map code="0xd38b" name="1em"/><!-- HANGUL SYLLABLE PEOLH -->
+ <map code="0xd38c" name="1em"/><!-- HANGUL SYLLABLE PEOM -->
+ <map code="0xd38d" name="1em"/><!-- HANGUL SYLLABLE PEOB -->
+ <map code="0xd38e" name="1em"/><!-- HANGUL SYLLABLE PEOBS -->
+ <map code="0xd38f" name="1em"/><!-- HANGUL SYLLABLE PEOS -->
+ <map code="0xd390" name="1em"/><!-- HANGUL SYLLABLE PEOSS -->
+ <map code="0xd391" name="1em"/><!-- HANGUL SYLLABLE PEONG -->
+ <map code="0xd392" name="1em"/><!-- HANGUL SYLLABLE PEOJ -->
+ <map code="0xd393" name="1em"/><!-- HANGUL SYLLABLE PEOC -->
+ <map code="0xd394" name="1em"/><!-- HANGUL SYLLABLE PEOK -->
+ <map code="0xd395" name="1em"/><!-- HANGUL SYLLABLE PEOT -->
+ <map code="0xd396" name="1em"/><!-- HANGUL SYLLABLE PEOP -->
+ <map code="0xd397" name="1em"/><!-- HANGUL SYLLABLE PEOH -->
+ <map code="0xd398" name="1em"/><!-- HANGUL SYLLABLE PE -->
+ <map code="0xd399" name="1em"/><!-- HANGUL SYLLABLE PEG -->
+ <map code="0xd39a" name="1em"/><!-- HANGUL SYLLABLE PEGG -->
+ <map code="0xd39b" name="1em"/><!-- HANGUL SYLLABLE PEGS -->
+ <map code="0xd39c" name="1em"/><!-- HANGUL SYLLABLE PEN -->
+ <map code="0xd39d" name="1em"/><!-- HANGUL SYLLABLE PENJ -->
+ <map code="0xd39e" name="1em"/><!-- HANGUL SYLLABLE PENH -->
+ <map code="0xd39f" name="1em"/><!-- HANGUL SYLLABLE PED -->
+ <map code="0xd3a0" name="1em"/><!-- HANGUL SYLLABLE PEL -->
+ <map code="0xd3a1" name="1em"/><!-- HANGUL SYLLABLE PELG -->
+ <map code="0xd3a2" name="1em"/><!-- HANGUL SYLLABLE PELM -->
+ <map code="0xd3a3" name="1em"/><!-- HANGUL SYLLABLE PELB -->
+ <map code="0xd3a4" name="1em"/><!-- HANGUL SYLLABLE PELS -->
+ <map code="0xd3a5" name="1em"/><!-- HANGUL SYLLABLE PELT -->
+ <map code="0xd3a6" name="1em"/><!-- HANGUL SYLLABLE PELP -->
+ <map code="0xd3a7" name="1em"/><!-- HANGUL SYLLABLE PELH -->
+ <map code="0xd3a8" name="1em"/><!-- HANGUL SYLLABLE PEM -->
+ <map code="0xd3a9" name="1em"/><!-- HANGUL SYLLABLE PEB -->
+ <map code="0xd3aa" name="1em"/><!-- HANGUL SYLLABLE PEBS -->
+ <map code="0xd3ab" name="1em"/><!-- HANGUL SYLLABLE PES -->
+ <map code="0xd3ac" name="1em"/><!-- HANGUL SYLLABLE PESS -->
+ <map code="0xd3ad" name="1em"/><!-- HANGUL SYLLABLE PENG -->
+ <map code="0xd3ae" name="1em"/><!-- HANGUL SYLLABLE PEJ -->
+ <map code="0xd3af" name="1em"/><!-- HANGUL SYLLABLE PEC -->
+ <map code="0xd3b0" name="1em"/><!-- HANGUL SYLLABLE PEK -->
+ <map code="0xd3b1" name="1em"/><!-- HANGUL SYLLABLE PET -->
+ <map code="0xd3b2" name="1em"/><!-- HANGUL SYLLABLE PEP -->
+ <map code="0xd3b3" name="1em"/><!-- HANGUL SYLLABLE PEH -->
+ <map code="0xd3b4" name="1em"/><!-- HANGUL SYLLABLE PYEO -->
+ <map code="0xd3b5" name="1em"/><!-- HANGUL SYLLABLE PYEOG -->
+ <map code="0xd3b6" name="1em"/><!-- HANGUL SYLLABLE PYEOGG -->
+ <map code="0xd3b7" name="1em"/><!-- HANGUL SYLLABLE PYEOGS -->
+ <map code="0xd3b8" name="1em"/><!-- HANGUL SYLLABLE PYEON -->
+ <map code="0xd3b9" name="1em"/><!-- HANGUL SYLLABLE PYEONJ -->
+ <map code="0xd3ba" name="1em"/><!-- HANGUL SYLLABLE PYEONH -->
+ <map code="0xd3bb" name="1em"/><!-- HANGUL SYLLABLE PYEOD -->
+ <map code="0xd3bc" name="1em"/><!-- HANGUL SYLLABLE PYEOL -->
+ <map code="0xd3bd" name="1em"/><!-- HANGUL SYLLABLE PYEOLG -->
+ <map code="0xd3be" name="1em"/><!-- HANGUL SYLLABLE PYEOLM -->
+ <map code="0xd3bf" name="1em"/><!-- HANGUL SYLLABLE PYEOLB -->
+ <map code="0xd3c0" name="1em"/><!-- HANGUL SYLLABLE PYEOLS -->
+ <map code="0xd3c1" name="1em"/><!-- HANGUL SYLLABLE PYEOLT -->
+ <map code="0xd3c2" name="1em"/><!-- HANGUL SYLLABLE PYEOLP -->
+ <map code="0xd3c3" name="1em"/><!-- HANGUL SYLLABLE PYEOLH -->
+ <map code="0xd3c4" name="1em"/><!-- HANGUL SYLLABLE PYEOM -->
+ <map code="0xd3c5" name="1em"/><!-- HANGUL SYLLABLE PYEOB -->
+ <map code="0xd3c6" name="1em"/><!-- HANGUL SYLLABLE PYEOBS -->
+ <map code="0xd3c7" name="1em"/><!-- HANGUL SYLLABLE PYEOS -->
+ <map code="0xd3c8" name="1em"/><!-- HANGUL SYLLABLE PYEOSS -->
+ <map code="0xd3c9" name="1em"/><!-- HANGUL SYLLABLE PYEONG -->
+ <map code="0xd3ca" name="1em"/><!-- HANGUL SYLLABLE PYEOJ -->
+ <map code="0xd3cb" name="1em"/><!-- HANGUL SYLLABLE PYEOC -->
+ <map code="0xd3cc" name="1em"/><!-- HANGUL SYLLABLE PYEOK -->
+ <map code="0xd3cd" name="1em"/><!-- HANGUL SYLLABLE PYEOT -->
+ <map code="0xd3ce" name="1em"/><!-- HANGUL SYLLABLE PYEOP -->
+ <map code="0xd3cf" name="1em"/><!-- HANGUL SYLLABLE PYEOH -->
+ <map code="0xd3d0" name="1em"/><!-- HANGUL SYLLABLE PYE -->
+ <map code="0xd3d1" name="1em"/><!-- HANGUL SYLLABLE PYEG -->
+ <map code="0xd3d2" name="1em"/><!-- HANGUL SYLLABLE PYEGG -->
+ <map code="0xd3d3" name="1em"/><!-- HANGUL SYLLABLE PYEGS -->
+ <map code="0xd3d4" name="1em"/><!-- HANGUL SYLLABLE PYEN -->
+ <map code="0xd3d5" name="1em"/><!-- HANGUL SYLLABLE PYENJ -->
+ <map code="0xd3d6" name="1em"/><!-- HANGUL SYLLABLE PYENH -->
+ <map code="0xd3d7" name="1em"/><!-- HANGUL SYLLABLE PYED -->
+ <map code="0xd3d8" name="1em"/><!-- HANGUL SYLLABLE PYEL -->
+ <map code="0xd3d9" name="1em"/><!-- HANGUL SYLLABLE PYELG -->
+ <map code="0xd3da" name="1em"/><!-- HANGUL SYLLABLE PYELM -->
+ <map code="0xd3db" name="1em"/><!-- HANGUL SYLLABLE PYELB -->
+ <map code="0xd3dc" name="1em"/><!-- HANGUL SYLLABLE PYELS -->
+ <map code="0xd3dd" name="1em"/><!-- HANGUL SYLLABLE PYELT -->
+ <map code="0xd3de" name="1em"/><!-- HANGUL SYLLABLE PYELP -->
+ <map code="0xd3df" name="1em"/><!-- HANGUL SYLLABLE PYELH -->
+ <map code="0xd3e0" name="1em"/><!-- HANGUL SYLLABLE PYEM -->
+ <map code="0xd3e1" name="1em"/><!-- HANGUL SYLLABLE PYEB -->
+ <map code="0xd3e2" name="1em"/><!-- HANGUL SYLLABLE PYEBS -->
+ <map code="0xd3e3" name="1em"/><!-- HANGUL SYLLABLE PYES -->
+ <map code="0xd3e4" name="1em"/><!-- HANGUL SYLLABLE PYESS -->
+ <map code="0xd3e5" name="1em"/><!-- HANGUL SYLLABLE PYENG -->
+ <map code="0xd3e6" name="1em"/><!-- HANGUL SYLLABLE PYEJ -->
+ <map code="0xd3e7" name="1em"/><!-- HANGUL SYLLABLE PYEC -->
+ <map code="0xd3e8" name="1em"/><!-- HANGUL SYLLABLE PYEK -->
+ <map code="0xd3e9" name="1em"/><!-- HANGUL SYLLABLE PYET -->
+ <map code="0xd3ea" name="1em"/><!-- HANGUL SYLLABLE PYEP -->
+ <map code="0xd3eb" name="1em"/><!-- HANGUL SYLLABLE PYEH -->
+ <map code="0xd3ec" name="1em"/><!-- HANGUL SYLLABLE PO -->
+ <map code="0xd3ed" name="1em"/><!-- HANGUL SYLLABLE POG -->
+ <map code="0xd3ee" name="1em"/><!-- HANGUL SYLLABLE POGG -->
+ <map code="0xd3ef" name="1em"/><!-- HANGUL SYLLABLE POGS -->
+ <map code="0xd3f0" name="1em"/><!-- HANGUL SYLLABLE PON -->
+ <map code="0xd3f1" name="1em"/><!-- HANGUL SYLLABLE PONJ -->
+ <map code="0xd3f2" name="1em"/><!-- HANGUL SYLLABLE PONH -->
+ <map code="0xd3f3" name="1em"/><!-- HANGUL SYLLABLE POD -->
+ <map code="0xd3f4" name="1em"/><!-- HANGUL SYLLABLE POL -->
+ <map code="0xd3f5" name="1em"/><!-- HANGUL SYLLABLE POLG -->
+ <map code="0xd3f6" name="1em"/><!-- HANGUL SYLLABLE POLM -->
+ <map code="0xd3f7" name="1em"/><!-- HANGUL SYLLABLE POLB -->
+ <map code="0xd3f8" name="1em"/><!-- HANGUL SYLLABLE POLS -->
+ <map code="0xd3f9" name="1em"/><!-- HANGUL SYLLABLE POLT -->
+ <map code="0xd3fa" name="1em"/><!-- HANGUL SYLLABLE POLP -->
+ <map code="0xd3fb" name="1em"/><!-- HANGUL SYLLABLE POLH -->
+ <map code="0xd3fc" name="1em"/><!-- HANGUL SYLLABLE POM -->
+ <map code="0xd3fd" name="1em"/><!-- HANGUL SYLLABLE POB -->
+ <map code="0xd3fe" name="1em"/><!-- HANGUL SYLLABLE POBS -->
+ <map code="0xd3ff" name="1em"/><!-- HANGUL SYLLABLE POS -->
+ <map code="0xd400" name="1em"/><!-- HANGUL SYLLABLE POSS -->
+ <map code="0xd401" name="1em"/><!-- HANGUL SYLLABLE PONG -->
+ <map code="0xd402" name="1em"/><!-- HANGUL SYLLABLE POJ -->
+ <map code="0xd403" name="1em"/><!-- HANGUL SYLLABLE POC -->
+ <map code="0xd404" name="1em"/><!-- HANGUL SYLLABLE POK -->
+ <map code="0xd405" name="1em"/><!-- HANGUL SYLLABLE POT -->
+ <map code="0xd406" name="1em"/><!-- HANGUL SYLLABLE POP -->
+ <map code="0xd407" name="1em"/><!-- HANGUL SYLLABLE POH -->
+ <map code="0xd408" name="1em"/><!-- HANGUL SYLLABLE PWA -->
+ <map code="0xd409" name="1em"/><!-- HANGUL SYLLABLE PWAG -->
+ <map code="0xd40a" name="1em"/><!-- HANGUL SYLLABLE PWAGG -->
+ <map code="0xd40b" name="1em"/><!-- HANGUL SYLLABLE PWAGS -->
+ <map code="0xd40c" name="1em"/><!-- HANGUL SYLLABLE PWAN -->
+ <map code="0xd40d" name="1em"/><!-- HANGUL SYLLABLE PWANJ -->
+ <map code="0xd40e" name="1em"/><!-- HANGUL SYLLABLE PWANH -->
+ <map code="0xd40f" name="1em"/><!-- HANGUL SYLLABLE PWAD -->
+ <map code="0xd410" name="1em"/><!-- HANGUL SYLLABLE PWAL -->
+ <map code="0xd411" name="1em"/><!-- HANGUL SYLLABLE PWALG -->
+ <map code="0xd412" name="1em"/><!-- HANGUL SYLLABLE PWALM -->
+ <map code="0xd413" name="1em"/><!-- HANGUL SYLLABLE PWALB -->
+ <map code="0xd414" name="1em"/><!-- HANGUL SYLLABLE PWALS -->
+ <map code="0xd415" name="1em"/><!-- HANGUL SYLLABLE PWALT -->
+ <map code="0xd416" name="1em"/><!-- HANGUL SYLLABLE PWALP -->
+ <map code="0xd417" name="1em"/><!-- HANGUL SYLLABLE PWALH -->
+ <map code="0xd418" name="1em"/><!-- HANGUL SYLLABLE PWAM -->
+ <map code="0xd419" name="1em"/><!-- HANGUL SYLLABLE PWAB -->
+ <map code="0xd41a" name="1em"/><!-- HANGUL SYLLABLE PWABS -->
+ <map code="0xd41b" name="1em"/><!-- HANGUL SYLLABLE PWAS -->
+ <map code="0xd41c" name="1em"/><!-- HANGUL SYLLABLE PWASS -->
+ <map code="0xd41d" name="1em"/><!-- HANGUL SYLLABLE PWANG -->
+ <map code="0xd41e" name="1em"/><!-- HANGUL SYLLABLE PWAJ -->
+ <map code="0xd41f" name="1em"/><!-- HANGUL SYLLABLE PWAC -->
+ <map code="0xd420" name="1em"/><!-- HANGUL SYLLABLE PWAK -->
+ <map code="0xd421" name="1em"/><!-- HANGUL SYLLABLE PWAT -->
+ <map code="0xd422" name="1em"/><!-- HANGUL SYLLABLE PWAP -->
+ <map code="0xd423" name="1em"/><!-- HANGUL SYLLABLE PWAH -->
+ <map code="0xd424" name="1em"/><!-- HANGUL SYLLABLE PWAE -->
+ <map code="0xd425" name="1em"/><!-- HANGUL SYLLABLE PWAEG -->
+ <map code="0xd426" name="1em"/><!-- HANGUL SYLLABLE PWAEGG -->
+ <map code="0xd427" name="1em"/><!-- HANGUL SYLLABLE PWAEGS -->
+ <map code="0xd428" name="1em"/><!-- HANGUL SYLLABLE PWAEN -->
+ <map code="0xd429" name="1em"/><!-- HANGUL SYLLABLE PWAENJ -->
+ <map code="0xd42a" name="1em"/><!-- HANGUL SYLLABLE PWAENH -->
+ <map code="0xd42b" name="1em"/><!-- HANGUL SYLLABLE PWAED -->
+ <map code="0xd42c" name="1em"/><!-- HANGUL SYLLABLE PWAEL -->
+ <map code="0xd42d" name="1em"/><!-- HANGUL SYLLABLE PWAELG -->
+ <map code="0xd42e" name="1em"/><!-- HANGUL SYLLABLE PWAELM -->
+ <map code="0xd42f" name="1em"/><!-- HANGUL SYLLABLE PWAELB -->
+ <map code="0xd430" name="1em"/><!-- HANGUL SYLLABLE PWAELS -->
+ <map code="0xd431" name="1em"/><!-- HANGUL SYLLABLE PWAELT -->
+ <map code="0xd432" name="1em"/><!-- HANGUL SYLLABLE PWAELP -->
+ <map code="0xd433" name="1em"/><!-- HANGUL SYLLABLE PWAELH -->
+ <map code="0xd434" name="1em"/><!-- HANGUL SYLLABLE PWAEM -->
+ <map code="0xd435" name="1em"/><!-- HANGUL SYLLABLE PWAEB -->
+ <map code="0xd436" name="1em"/><!-- HANGUL SYLLABLE PWAEBS -->
+ <map code="0xd437" name="1em"/><!-- HANGUL SYLLABLE PWAES -->
+ <map code="0xd438" name="1em"/><!-- HANGUL SYLLABLE PWAESS -->
+ <map code="0xd439" name="1em"/><!-- HANGUL SYLLABLE PWAENG -->
+ <map code="0xd43a" name="1em"/><!-- HANGUL SYLLABLE PWAEJ -->
+ <map code="0xd43b" name="1em"/><!-- HANGUL SYLLABLE PWAEC -->
+ <map code="0xd43c" name="1em"/><!-- HANGUL SYLLABLE PWAEK -->
+ <map code="0xd43d" name="1em"/><!-- HANGUL SYLLABLE PWAET -->
+ <map code="0xd43e" name="1em"/><!-- HANGUL SYLLABLE PWAEP -->
+ <map code="0xd43f" name="1em"/><!-- HANGUL SYLLABLE PWAEH -->
+ <map code="0xd440" name="1em"/><!-- HANGUL SYLLABLE POE -->
+ <map code="0xd441" name="1em"/><!-- HANGUL SYLLABLE POEG -->
+ <map code="0xd442" name="1em"/><!-- HANGUL SYLLABLE POEGG -->
+ <map code="0xd443" name="1em"/><!-- HANGUL SYLLABLE POEGS -->
+ <map code="0xd444" name="1em"/><!-- HANGUL SYLLABLE POEN -->
+ <map code="0xd445" name="1em"/><!-- HANGUL SYLLABLE POENJ -->
+ <map code="0xd446" name="1em"/><!-- HANGUL SYLLABLE POENH -->
+ <map code="0xd447" name="1em"/><!-- HANGUL SYLLABLE POED -->
+ <map code="0xd448" name="1em"/><!-- HANGUL SYLLABLE POEL -->
+ <map code="0xd449" name="1em"/><!-- HANGUL SYLLABLE POELG -->
+ <map code="0xd44a" name="1em"/><!-- HANGUL SYLLABLE POELM -->
+ <map code="0xd44b" name="1em"/><!-- HANGUL SYLLABLE POELB -->
+ <map code="0xd44c" name="1em"/><!-- HANGUL SYLLABLE POELS -->
+ <map code="0xd44d" name="1em"/><!-- HANGUL SYLLABLE POELT -->
+ <map code="0xd44e" name="1em"/><!-- HANGUL SYLLABLE POELP -->
+ <map code="0xd44f" name="1em"/><!-- HANGUL SYLLABLE POELH -->
+ <map code="0xd450" name="1em"/><!-- HANGUL SYLLABLE POEM -->
+ <map code="0xd451" name="1em"/><!-- HANGUL SYLLABLE POEB -->
+ <map code="0xd452" name="1em"/><!-- HANGUL SYLLABLE POEBS -->
+ <map code="0xd453" name="1em"/><!-- HANGUL SYLLABLE POES -->
+ <map code="0xd454" name="1em"/><!-- HANGUL SYLLABLE POESS -->
+ <map code="0xd455" name="1em"/><!-- HANGUL SYLLABLE POENG -->
+ <map code="0xd456" name="1em"/><!-- HANGUL SYLLABLE POEJ -->
+ <map code="0xd457" name="1em"/><!-- HANGUL SYLLABLE POEC -->
+ <map code="0xd458" name="1em"/><!-- HANGUL SYLLABLE POEK -->
+ <map code="0xd459" name="1em"/><!-- HANGUL SYLLABLE POET -->
+ <map code="0xd45a" name="1em"/><!-- HANGUL SYLLABLE POEP -->
+ <map code="0xd45b" name="1em"/><!-- HANGUL SYLLABLE POEH -->
+ <map code="0xd45c" name="1em"/><!-- HANGUL SYLLABLE PYO -->
+ <map code="0xd45d" name="1em"/><!-- HANGUL SYLLABLE PYOG -->
+ <map code="0xd45e" name="1em"/><!-- HANGUL SYLLABLE PYOGG -->
+ <map code="0xd45f" name="1em"/><!-- HANGUL SYLLABLE PYOGS -->
+ <map code="0xd460" name="1em"/><!-- HANGUL SYLLABLE PYON -->
+ <map code="0xd461" name="1em"/><!-- HANGUL SYLLABLE PYONJ -->
+ <map code="0xd462" name="1em"/><!-- HANGUL SYLLABLE PYONH -->
+ <map code="0xd463" name="1em"/><!-- HANGUL SYLLABLE PYOD -->
+ <map code="0xd464" name="1em"/><!-- HANGUL SYLLABLE PYOL -->
+ <map code="0xd465" name="1em"/><!-- HANGUL SYLLABLE PYOLG -->
+ <map code="0xd466" name="1em"/><!-- HANGUL SYLLABLE PYOLM -->
+ <map code="0xd467" name="1em"/><!-- HANGUL SYLLABLE PYOLB -->
+ <map code="0xd468" name="1em"/><!-- HANGUL SYLLABLE PYOLS -->
+ <map code="0xd469" name="1em"/><!-- HANGUL SYLLABLE PYOLT -->
+ <map code="0xd46a" name="1em"/><!-- HANGUL SYLLABLE PYOLP -->
+ <map code="0xd46b" name="1em"/><!-- HANGUL SYLLABLE PYOLH -->
+ <map code="0xd46c" name="1em"/><!-- HANGUL SYLLABLE PYOM -->
+ <map code="0xd46d" name="1em"/><!-- HANGUL SYLLABLE PYOB -->
+ <map code="0xd46e" name="1em"/><!-- HANGUL SYLLABLE PYOBS -->
+ <map code="0xd46f" name="1em"/><!-- HANGUL SYLLABLE PYOS -->
+ <map code="0xd470" name="1em"/><!-- HANGUL SYLLABLE PYOSS -->
+ <map code="0xd471" name="1em"/><!-- HANGUL SYLLABLE PYONG -->
+ <map code="0xd472" name="1em"/><!-- HANGUL SYLLABLE PYOJ -->
+ <map code="0xd473" name="1em"/><!-- HANGUL SYLLABLE PYOC -->
+ <map code="0xd474" name="1em"/><!-- HANGUL SYLLABLE PYOK -->
+ <map code="0xd475" name="1em"/><!-- HANGUL SYLLABLE PYOT -->
+ <map code="0xd476" name="1em"/><!-- HANGUL SYLLABLE PYOP -->
+ <map code="0xd477" name="1em"/><!-- HANGUL SYLLABLE PYOH -->
+ <map code="0xd478" name="1em"/><!-- HANGUL SYLLABLE PU -->
+ <map code="0xd479" name="1em"/><!-- HANGUL SYLLABLE PUG -->
+ <map code="0xd47a" name="1em"/><!-- HANGUL SYLLABLE PUGG -->
+ <map code="0xd47b" name="1em"/><!-- HANGUL SYLLABLE PUGS -->
+ <map code="0xd47c" name="1em"/><!-- HANGUL SYLLABLE PUN -->
+ <map code="0xd47d" name="1em"/><!-- HANGUL SYLLABLE PUNJ -->
+ <map code="0xd47e" name="1em"/><!-- HANGUL SYLLABLE PUNH -->
+ <map code="0xd47f" name="1em"/><!-- HANGUL SYLLABLE PUD -->
+ <map code="0xd480" name="1em"/><!-- HANGUL SYLLABLE PUL -->
+ <map code="0xd481" name="1em"/><!-- HANGUL SYLLABLE PULG -->
+ <map code="0xd482" name="1em"/><!-- HANGUL SYLLABLE PULM -->
+ <map code="0xd483" name="1em"/><!-- HANGUL SYLLABLE PULB -->
+ <map code="0xd484" name="1em"/><!-- HANGUL SYLLABLE PULS -->
+ <map code="0xd485" name="1em"/><!-- HANGUL SYLLABLE PULT -->
+ <map code="0xd486" name="1em"/><!-- HANGUL SYLLABLE PULP -->
+ <map code="0xd487" name="1em"/><!-- HANGUL SYLLABLE PULH -->
+ <map code="0xd488" name="1em"/><!-- HANGUL SYLLABLE PUM -->
+ <map code="0xd489" name="1em"/><!-- HANGUL SYLLABLE PUB -->
+ <map code="0xd48a" name="1em"/><!-- HANGUL SYLLABLE PUBS -->
+ <map code="0xd48b" name="1em"/><!-- HANGUL SYLLABLE PUS -->
+ <map code="0xd48c" name="1em"/><!-- HANGUL SYLLABLE PUSS -->
+ <map code="0xd48d" name="1em"/><!-- HANGUL SYLLABLE PUNG -->
+ <map code="0xd48e" name="1em"/><!-- HANGUL SYLLABLE PUJ -->
+ <map code="0xd48f" name="1em"/><!-- HANGUL SYLLABLE PUC -->
+ <map code="0xd490" name="1em"/><!-- HANGUL SYLLABLE PUK -->
+ <map code="0xd491" name="1em"/><!-- HANGUL SYLLABLE PUT -->
+ <map code="0xd492" name="1em"/><!-- HANGUL SYLLABLE PUP -->
+ <map code="0xd493" name="1em"/><!-- HANGUL SYLLABLE PUH -->
+ <map code="0xd494" name="1em"/><!-- HANGUL SYLLABLE PWEO -->
+ <map code="0xd495" name="1em"/><!-- HANGUL SYLLABLE PWEOG -->
+ <map code="0xd496" name="1em"/><!-- HANGUL SYLLABLE PWEOGG -->
+ <map code="0xd497" name="1em"/><!-- HANGUL SYLLABLE PWEOGS -->
+ <map code="0xd498" name="1em"/><!-- HANGUL SYLLABLE PWEON -->
+ <map code="0xd499" name="1em"/><!-- HANGUL SYLLABLE PWEONJ -->
+ <map code="0xd49a" name="1em"/><!-- HANGUL SYLLABLE PWEONH -->
+ <map code="0xd49b" name="1em"/><!-- HANGUL SYLLABLE PWEOD -->
+ <map code="0xd49c" name="1em"/><!-- HANGUL SYLLABLE PWEOL -->
+ <map code="0xd49d" name="1em"/><!-- HANGUL SYLLABLE PWEOLG -->
+ <map code="0xd49e" name="1em"/><!-- HANGUL SYLLABLE PWEOLM -->
+ <map code="0xd49f" name="1em"/><!-- HANGUL SYLLABLE PWEOLB -->
+ <map code="0xd4a0" name="1em"/><!-- HANGUL SYLLABLE PWEOLS -->
+ <map code="0xd4a1" name="1em"/><!-- HANGUL SYLLABLE PWEOLT -->
+ <map code="0xd4a2" name="1em"/><!-- HANGUL SYLLABLE PWEOLP -->
+ <map code="0xd4a3" name="1em"/><!-- HANGUL SYLLABLE PWEOLH -->
+ <map code="0xd4a4" name="1em"/><!-- HANGUL SYLLABLE PWEOM -->
+ <map code="0xd4a5" name="1em"/><!-- HANGUL SYLLABLE PWEOB -->
+ <map code="0xd4a6" name="1em"/><!-- HANGUL SYLLABLE PWEOBS -->
+ <map code="0xd4a7" name="1em"/><!-- HANGUL SYLLABLE PWEOS -->
+ <map code="0xd4a8" name="1em"/><!-- HANGUL SYLLABLE PWEOSS -->
+ <map code="0xd4a9" name="1em"/><!-- HANGUL SYLLABLE PWEONG -->
+ <map code="0xd4aa" name="1em"/><!-- HANGUL SYLLABLE PWEOJ -->
+ <map code="0xd4ab" name="1em"/><!-- HANGUL SYLLABLE PWEOC -->
+ <map code="0xd4ac" name="1em"/><!-- HANGUL SYLLABLE PWEOK -->
+ <map code="0xd4ad" name="1em"/><!-- HANGUL SYLLABLE PWEOT -->
+ <map code="0xd4ae" name="1em"/><!-- HANGUL SYLLABLE PWEOP -->
+ <map code="0xd4af" name="1em"/><!-- HANGUL SYLLABLE PWEOH -->
+ <map code="0xd4b0" name="1em"/><!-- HANGUL SYLLABLE PWE -->
+ <map code="0xd4b1" name="1em"/><!-- HANGUL SYLLABLE PWEG -->
+ <map code="0xd4b2" name="1em"/><!-- HANGUL SYLLABLE PWEGG -->
+ <map code="0xd4b3" name="1em"/><!-- HANGUL SYLLABLE PWEGS -->
+ <map code="0xd4b4" name="1em"/><!-- HANGUL SYLLABLE PWEN -->
+ <map code="0xd4b5" name="1em"/><!-- HANGUL SYLLABLE PWENJ -->
+ <map code="0xd4b6" name="1em"/><!-- HANGUL SYLLABLE PWENH -->
+ <map code="0xd4b7" name="1em"/><!-- HANGUL SYLLABLE PWED -->
+ <map code="0xd4b8" name="1em"/><!-- HANGUL SYLLABLE PWEL -->
+ <map code="0xd4b9" name="1em"/><!-- HANGUL SYLLABLE PWELG -->
+ <map code="0xd4ba" name="1em"/><!-- HANGUL SYLLABLE PWELM -->
+ <map code="0xd4bb" name="1em"/><!-- HANGUL SYLLABLE PWELB -->
+ <map code="0xd4bc" name="1em"/><!-- HANGUL SYLLABLE PWELS -->
+ <map code="0xd4bd" name="1em"/><!-- HANGUL SYLLABLE PWELT -->
+ <map code="0xd4be" name="1em"/><!-- HANGUL SYLLABLE PWELP -->
+ <map code="0xd4bf" name="1em"/><!-- HANGUL SYLLABLE PWELH -->
+ <map code="0xd4c0" name="1em"/><!-- HANGUL SYLLABLE PWEM -->
+ <map code="0xd4c1" name="1em"/><!-- HANGUL SYLLABLE PWEB -->
+ <map code="0xd4c2" name="1em"/><!-- HANGUL SYLLABLE PWEBS -->
+ <map code="0xd4c3" name="1em"/><!-- HANGUL SYLLABLE PWES -->
+ <map code="0xd4c4" name="1em"/><!-- HANGUL SYLLABLE PWESS -->
+ <map code="0xd4c5" name="1em"/><!-- HANGUL SYLLABLE PWENG -->
+ <map code="0xd4c6" name="1em"/><!-- HANGUL SYLLABLE PWEJ -->
+ <map code="0xd4c7" name="1em"/><!-- HANGUL SYLLABLE PWEC -->
+ <map code="0xd4c8" name="1em"/><!-- HANGUL SYLLABLE PWEK -->
+ <map code="0xd4c9" name="1em"/><!-- HANGUL SYLLABLE PWET -->
+ <map code="0xd4ca" name="1em"/><!-- HANGUL SYLLABLE PWEP -->
+ <map code="0xd4cb" name="1em"/><!-- HANGUL SYLLABLE PWEH -->
+ <map code="0xd4cc" name="1em"/><!-- HANGUL SYLLABLE PWI -->
+ <map code="0xd4cd" name="1em"/><!-- HANGUL SYLLABLE PWIG -->
+ <map code="0xd4ce" name="1em"/><!-- HANGUL SYLLABLE PWIGG -->
+ <map code="0xd4cf" name="1em"/><!-- HANGUL SYLLABLE PWIGS -->
+ <map code="0xd4d0" name="1em"/><!-- HANGUL SYLLABLE PWIN -->
+ <map code="0xd4d1" name="1em"/><!-- HANGUL SYLLABLE PWINJ -->
+ <map code="0xd4d2" name="1em"/><!-- HANGUL SYLLABLE PWINH -->
+ <map code="0xd4d3" name="1em"/><!-- HANGUL SYLLABLE PWID -->
+ <map code="0xd4d4" name="1em"/><!-- HANGUL SYLLABLE PWIL -->
+ <map code="0xd4d5" name="1em"/><!-- HANGUL SYLLABLE PWILG -->
+ <map code="0xd4d6" name="1em"/><!-- HANGUL SYLLABLE PWILM -->
+ <map code="0xd4d7" name="1em"/><!-- HANGUL SYLLABLE PWILB -->
+ <map code="0xd4d8" name="1em"/><!-- HANGUL SYLLABLE PWILS -->
+ <map code="0xd4d9" name="1em"/><!-- HANGUL SYLLABLE PWILT -->
+ <map code="0xd4da" name="1em"/><!-- HANGUL SYLLABLE PWILP -->
+ <map code="0xd4db" name="1em"/><!-- HANGUL SYLLABLE PWILH -->
+ <map code="0xd4dc" name="1em"/><!-- HANGUL SYLLABLE PWIM -->
+ <map code="0xd4dd" name="1em"/><!-- HANGUL SYLLABLE PWIB -->
+ <map code="0xd4de" name="1em"/><!-- HANGUL SYLLABLE PWIBS -->
+ <map code="0xd4df" name="1em"/><!-- HANGUL SYLLABLE PWIS -->
+ <map code="0xd4e0" name="1em"/><!-- HANGUL SYLLABLE PWISS -->
+ <map code="0xd4e1" name="1em"/><!-- HANGUL SYLLABLE PWING -->
+ <map code="0xd4e2" name="1em"/><!-- HANGUL SYLLABLE PWIJ -->
+ <map code="0xd4e3" name="1em"/><!-- HANGUL SYLLABLE PWIC -->
+ <map code="0xd4e4" name="1em"/><!-- HANGUL SYLLABLE PWIK -->
+ <map code="0xd4e5" name="1em"/><!-- HANGUL SYLLABLE PWIT -->
+ <map code="0xd4e6" name="1em"/><!-- HANGUL SYLLABLE PWIP -->
+ <map code="0xd4e7" name="1em"/><!-- HANGUL SYLLABLE PWIH -->
+ <map code="0xd4e8" name="1em"/><!-- HANGUL SYLLABLE PYU -->
+ <map code="0xd4e9" name="1em"/><!-- HANGUL SYLLABLE PYUG -->
+ <map code="0xd4ea" name="1em"/><!-- HANGUL SYLLABLE PYUGG -->
+ <map code="0xd4eb" name="1em"/><!-- HANGUL SYLLABLE PYUGS -->
+ <map code="0xd4ec" name="1em"/><!-- HANGUL SYLLABLE PYUN -->
+ <map code="0xd4ed" name="1em"/><!-- HANGUL SYLLABLE PYUNJ -->
+ <map code="0xd4ee" name="1em"/><!-- HANGUL SYLLABLE PYUNH -->
+ <map code="0xd4ef" name="1em"/><!-- HANGUL SYLLABLE PYUD -->
+ <map code="0xd4f0" name="1em"/><!-- HANGUL SYLLABLE PYUL -->
+ <map code="0xd4f1" name="1em"/><!-- HANGUL SYLLABLE PYULG -->
+ <map code="0xd4f2" name="1em"/><!-- HANGUL SYLLABLE PYULM -->
+ <map code="0xd4f3" name="1em"/><!-- HANGUL SYLLABLE PYULB -->
+ <map code="0xd4f4" name="1em"/><!-- HANGUL SYLLABLE PYULS -->
+ <map code="0xd4f5" name="1em"/><!-- HANGUL SYLLABLE PYULT -->
+ <map code="0xd4f6" name="1em"/><!-- HANGUL SYLLABLE PYULP -->
+ <map code="0xd4f7" name="1em"/><!-- HANGUL SYLLABLE PYULH -->
+ <map code="0xd4f8" name="1em"/><!-- HANGUL SYLLABLE PYUM -->
+ <map code="0xd4f9" name="1em"/><!-- HANGUL SYLLABLE PYUB -->
+ <map code="0xd4fa" name="1em"/><!-- HANGUL SYLLABLE PYUBS -->
+ <map code="0xd4fb" name="1em"/><!-- HANGUL SYLLABLE PYUS -->
+ <map code="0xd4fc" name="1em"/><!-- HANGUL SYLLABLE PYUSS -->
+ <map code="0xd4fd" name="1em"/><!-- HANGUL SYLLABLE PYUNG -->
+ <map code="0xd4fe" name="1em"/><!-- HANGUL SYLLABLE PYUJ -->
+ <map code="0xd4ff" name="1em"/><!-- HANGUL SYLLABLE PYUC -->
+ <map code="0xd500" name="1em"/><!-- HANGUL SYLLABLE PYUK -->
+ <map code="0xd501" name="1em"/><!-- HANGUL SYLLABLE PYUT -->
+ <map code="0xd502" name="1em"/><!-- HANGUL SYLLABLE PYUP -->
+ <map code="0xd503" name="1em"/><!-- HANGUL SYLLABLE PYUH -->
+ <map code="0xd504" name="1em"/><!-- HANGUL SYLLABLE PEU -->
+ <map code="0xd505" name="1em"/><!-- HANGUL SYLLABLE PEUG -->
+ <map code="0xd506" name="1em"/><!-- HANGUL SYLLABLE PEUGG -->
+ <map code="0xd507" name="1em"/><!-- HANGUL SYLLABLE PEUGS -->
+ <map code="0xd508" name="1em"/><!-- HANGUL SYLLABLE PEUN -->
+ <map code="0xd509" name="1em"/><!-- HANGUL SYLLABLE PEUNJ -->
+ <map code="0xd50a" name="1em"/><!-- HANGUL SYLLABLE PEUNH -->
+ <map code="0xd50b" name="1em"/><!-- HANGUL SYLLABLE PEUD -->
+ <map code="0xd50c" name="1em"/><!-- HANGUL SYLLABLE PEUL -->
+ <map code="0xd50d" name="1em"/><!-- HANGUL SYLLABLE PEULG -->
+ <map code="0xd50e" name="1em"/><!-- HANGUL SYLLABLE PEULM -->
+ <map code="0xd50f" name="1em"/><!-- HANGUL SYLLABLE PEULB -->
+ <map code="0xd510" name="1em"/><!-- HANGUL SYLLABLE PEULS -->
+ <map code="0xd511" name="1em"/><!-- HANGUL SYLLABLE PEULT -->
+ <map code="0xd512" name="1em"/><!-- HANGUL SYLLABLE PEULP -->
+ <map code="0xd513" name="1em"/><!-- HANGUL SYLLABLE PEULH -->
+ <map code="0xd514" name="1em"/><!-- HANGUL SYLLABLE PEUM -->
+ <map code="0xd515" name="1em"/><!-- HANGUL SYLLABLE PEUB -->
+ <map code="0xd516" name="1em"/><!-- HANGUL SYLLABLE PEUBS -->
+ <map code="0xd517" name="1em"/><!-- HANGUL SYLLABLE PEUS -->
+ <map code="0xd518" name="1em"/><!-- HANGUL SYLLABLE PEUSS -->
+ <map code="0xd519" name="1em"/><!-- HANGUL SYLLABLE PEUNG -->
+ <map code="0xd51a" name="1em"/><!-- HANGUL SYLLABLE PEUJ -->
+ <map code="0xd51b" name="1em"/><!-- HANGUL SYLLABLE PEUC -->
+ <map code="0xd51c" name="1em"/><!-- HANGUL SYLLABLE PEUK -->
+ <map code="0xd51d" name="1em"/><!-- HANGUL SYLLABLE PEUT -->
+ <map code="0xd51e" name="1em"/><!-- HANGUL SYLLABLE PEUP -->
+ <map code="0xd51f" name="1em"/><!-- HANGUL SYLLABLE PEUH -->
+ <map code="0xd520" name="1em"/><!-- HANGUL SYLLABLE PYI -->
+ <map code="0xd521" name="1em"/><!-- HANGUL SYLLABLE PYIG -->
+ <map code="0xd522" name="1em"/><!-- HANGUL SYLLABLE PYIGG -->
+ <map code="0xd523" name="1em"/><!-- HANGUL SYLLABLE PYIGS -->
+ <map code="0xd524" name="1em"/><!-- HANGUL SYLLABLE PYIN -->
+ <map code="0xd525" name="1em"/><!-- HANGUL SYLLABLE PYINJ -->
+ <map code="0xd526" name="1em"/><!-- HANGUL SYLLABLE PYINH -->
+ <map code="0xd527" name="1em"/><!-- HANGUL SYLLABLE PYID -->
+ <map code="0xd528" name="1em"/><!-- HANGUL SYLLABLE PYIL -->
+ <map code="0xd529" name="1em"/><!-- HANGUL SYLLABLE PYILG -->
+ <map code="0xd52a" name="1em"/><!-- HANGUL SYLLABLE PYILM -->
+ <map code="0xd52b" name="1em"/><!-- HANGUL SYLLABLE PYILB -->
+ <map code="0xd52c" name="1em"/><!-- HANGUL SYLLABLE PYILS -->
+ <map code="0xd52d" name="1em"/><!-- HANGUL SYLLABLE PYILT -->
+ <map code="0xd52e" name="1em"/><!-- HANGUL SYLLABLE PYILP -->
+ <map code="0xd52f" name="1em"/><!-- HANGUL SYLLABLE PYILH -->
+ <map code="0xd530" name="1em"/><!-- HANGUL SYLLABLE PYIM -->
+ <map code="0xd531" name="1em"/><!-- HANGUL SYLLABLE PYIB -->
+ <map code="0xd532" name="1em"/><!-- HANGUL SYLLABLE PYIBS -->
+ <map code="0xd533" name="1em"/><!-- HANGUL SYLLABLE PYIS -->
+ <map code="0xd534" name="1em"/><!-- HANGUL SYLLABLE PYISS -->
+ <map code="0xd535" name="1em"/><!-- HANGUL SYLLABLE PYING -->
+ <map code="0xd536" name="1em"/><!-- HANGUL SYLLABLE PYIJ -->
+ <map code="0xd537" name="1em"/><!-- HANGUL SYLLABLE PYIC -->
+ <map code="0xd538" name="1em"/><!-- HANGUL SYLLABLE PYIK -->
+ <map code="0xd539" name="1em"/><!-- HANGUL SYLLABLE PYIT -->
+ <map code="0xd53a" name="1em"/><!-- HANGUL SYLLABLE PYIP -->
+ <map code="0xd53b" name="1em"/><!-- HANGUL SYLLABLE PYIH -->
+ <map code="0xd53c" name="1em"/><!-- HANGUL SYLLABLE PI -->
+ <map code="0xd53d" name="1em"/><!-- HANGUL SYLLABLE PIG -->
+ <map code="0xd53e" name="1em"/><!-- HANGUL SYLLABLE PIGG -->
+ <map code="0xd53f" name="1em"/><!-- HANGUL SYLLABLE PIGS -->
+ <map code="0xd540" name="1em"/><!-- HANGUL SYLLABLE PIN -->
+ <map code="0xd541" name="1em"/><!-- HANGUL SYLLABLE PINJ -->
+ <map code="0xd542" name="1em"/><!-- HANGUL SYLLABLE PINH -->
+ <map code="0xd543" name="1em"/><!-- HANGUL SYLLABLE PID -->
+ <map code="0xd544" name="1em"/><!-- HANGUL SYLLABLE PIL -->
+ <map code="0xd545" name="1em"/><!-- HANGUL SYLLABLE PILG -->
+ <map code="0xd546" name="1em"/><!-- HANGUL SYLLABLE PILM -->
+ <map code="0xd547" name="1em"/><!-- HANGUL SYLLABLE PILB -->
+ <map code="0xd548" name="1em"/><!-- HANGUL SYLLABLE PILS -->
+ <map code="0xd549" name="1em"/><!-- HANGUL SYLLABLE PILT -->
+ <map code="0xd54a" name="1em"/><!-- HANGUL SYLLABLE PILP -->
+ <map code="0xd54b" name="1em"/><!-- HANGUL SYLLABLE PILH -->
+ <map code="0xd54c" name="1em"/><!-- HANGUL SYLLABLE PIM -->
+ <map code="0xd54d" name="1em"/><!-- HANGUL SYLLABLE PIB -->
+ <map code="0xd54e" name="1em"/><!-- HANGUL SYLLABLE PIBS -->
+ <map code="0xd54f" name="1em"/><!-- HANGUL SYLLABLE PIS -->
+ <map code="0xd550" name="1em"/><!-- HANGUL SYLLABLE PISS -->
+ <map code="0xd551" name="1em"/><!-- HANGUL SYLLABLE PING -->
+ <map code="0xd552" name="1em"/><!-- HANGUL SYLLABLE PIJ -->
+ <map code="0xd553" name="1em"/><!-- HANGUL SYLLABLE PIC -->
+ <map code="0xd554" name="1em"/><!-- HANGUL SYLLABLE PIK -->
+ <map code="0xd555" name="1em"/><!-- HANGUL SYLLABLE PIT -->
+ <map code="0xd556" name="1em"/><!-- HANGUL SYLLABLE PIP -->
+ <map code="0xd557" name="1em"/><!-- HANGUL SYLLABLE PIH -->
+ <map code="0xd558" name="1em"/><!-- HANGUL SYLLABLE HA -->
+ <map code="0xd559" name="1em"/><!-- HANGUL SYLLABLE HAG -->
+ <map code="0xd55a" name="1em"/><!-- HANGUL SYLLABLE HAGG -->
+ <map code="0xd55b" name="1em"/><!-- HANGUL SYLLABLE HAGS -->
+ <map code="0xd55c" name="1em"/><!-- HANGUL SYLLABLE HAN -->
+ <map code="0xd55d" name="1em"/><!-- HANGUL SYLLABLE HANJ -->
+ <map code="0xd55e" name="1em"/><!-- HANGUL SYLLABLE HANH -->
+ <map code="0xd55f" name="1em"/><!-- HANGUL SYLLABLE HAD -->
+ <map code="0xd560" name="1em"/><!-- HANGUL SYLLABLE HAL -->
+ <map code="0xd561" name="1em"/><!-- HANGUL SYLLABLE HALG -->
+ <map code="0xd562" name="1em"/><!-- HANGUL SYLLABLE HALM -->
+ <map code="0xd563" name="1em"/><!-- HANGUL SYLLABLE HALB -->
+ <map code="0xd564" name="1em"/><!-- HANGUL SYLLABLE HALS -->
+ <map code="0xd565" name="1em"/><!-- HANGUL SYLLABLE HALT -->
+ <map code="0xd566" name="1em"/><!-- HANGUL SYLLABLE HALP -->
+ <map code="0xd567" name="1em"/><!-- HANGUL SYLLABLE HALH -->
+ <map code="0xd568" name="1em"/><!-- HANGUL SYLLABLE HAM -->
+ <map code="0xd569" name="1em"/><!-- HANGUL SYLLABLE HAB -->
+ <map code="0xd56a" name="1em"/><!-- HANGUL SYLLABLE HABS -->
+ <map code="0xd56b" name="1em"/><!-- HANGUL SYLLABLE HAS -->
+ <map code="0xd56c" name="1em"/><!-- HANGUL SYLLABLE HASS -->
+ <map code="0xd56d" name="1em"/><!-- HANGUL SYLLABLE HANG -->
+ <map code="0xd56e" name="1em"/><!-- HANGUL SYLLABLE HAJ -->
+ <map code="0xd56f" name="1em"/><!-- HANGUL SYLLABLE HAC -->
+ <map code="0xd570" name="1em"/><!-- HANGUL SYLLABLE HAK -->
+ <map code="0xd571" name="1em"/><!-- HANGUL SYLLABLE HAT -->
+ <map code="0xd572" name="1em"/><!-- HANGUL SYLLABLE HAP -->
+ <map code="0xd573" name="1em"/><!-- HANGUL SYLLABLE HAH -->
+ <map code="0xd574" name="1em"/><!-- HANGUL SYLLABLE HAE -->
+ <map code="0xd575" name="1em"/><!-- HANGUL SYLLABLE HAEG -->
+ <map code="0xd576" name="1em"/><!-- HANGUL SYLLABLE HAEGG -->
+ <map code="0xd577" name="1em"/><!-- HANGUL SYLLABLE HAEGS -->
+ <map code="0xd578" name="1em"/><!-- HANGUL SYLLABLE HAEN -->
+ <map code="0xd579" name="1em"/><!-- HANGUL SYLLABLE HAENJ -->
+ <map code="0xd57a" name="1em"/><!-- HANGUL SYLLABLE HAENH -->
+ <map code="0xd57b" name="1em"/><!-- HANGUL SYLLABLE HAED -->
+ <map code="0xd57c" name="1em"/><!-- HANGUL SYLLABLE HAEL -->
+ <map code="0xd57d" name="1em"/><!-- HANGUL SYLLABLE HAELG -->
+ <map code="0xd57e" name="1em"/><!-- HANGUL SYLLABLE HAELM -->
+ <map code="0xd57f" name="1em"/><!-- HANGUL SYLLABLE HAELB -->
+ <map code="0xd580" name="1em"/><!-- HANGUL SYLLABLE HAELS -->
+ <map code="0xd581" name="1em"/><!-- HANGUL SYLLABLE HAELT -->
+ <map code="0xd582" name="1em"/><!-- HANGUL SYLLABLE HAELP -->
+ <map code="0xd583" name="1em"/><!-- HANGUL SYLLABLE HAELH -->
+ <map code="0xd584" name="1em"/><!-- HANGUL SYLLABLE HAEM -->
+ <map code="0xd585" name="1em"/><!-- HANGUL SYLLABLE HAEB -->
+ <map code="0xd586" name="1em"/><!-- HANGUL SYLLABLE HAEBS -->
+ <map code="0xd587" name="1em"/><!-- HANGUL SYLLABLE HAES -->
+ <map code="0xd588" name="1em"/><!-- HANGUL SYLLABLE HAESS -->
+ <map code="0xd589" name="1em"/><!-- HANGUL SYLLABLE HAENG -->
+ <map code="0xd58a" name="1em"/><!-- HANGUL SYLLABLE HAEJ -->
+ <map code="0xd58b" name="1em"/><!-- HANGUL SYLLABLE HAEC -->
+ <map code="0xd58c" name="1em"/><!-- HANGUL SYLLABLE HAEK -->
+ <map code="0xd58d" name="1em"/><!-- HANGUL SYLLABLE HAET -->
+ <map code="0xd58e" name="1em"/><!-- HANGUL SYLLABLE HAEP -->
+ <map code="0xd58f" name="1em"/><!-- HANGUL SYLLABLE HAEH -->
+ <map code="0xd590" name="1em"/><!-- HANGUL SYLLABLE HYA -->
+ <map code="0xd591" name="1em"/><!-- HANGUL SYLLABLE HYAG -->
+ <map code="0xd592" name="1em"/><!-- HANGUL SYLLABLE HYAGG -->
+ <map code="0xd593" name="1em"/><!-- HANGUL SYLLABLE HYAGS -->
+ <map code="0xd594" name="1em"/><!-- HANGUL SYLLABLE HYAN -->
+ <map code="0xd595" name="1em"/><!-- HANGUL SYLLABLE HYANJ -->
+ <map code="0xd596" name="1em"/><!-- HANGUL SYLLABLE HYANH -->
+ <map code="0xd597" name="1em"/><!-- HANGUL SYLLABLE HYAD -->
+ <map code="0xd598" name="1em"/><!-- HANGUL SYLLABLE HYAL -->
+ <map code="0xd599" name="1em"/><!-- HANGUL SYLLABLE HYALG -->
+ <map code="0xd59a" name="1em"/><!-- HANGUL SYLLABLE HYALM -->
+ <map code="0xd59b" name="1em"/><!-- HANGUL SYLLABLE HYALB -->
+ <map code="0xd59c" name="1em"/><!-- HANGUL SYLLABLE HYALS -->
+ <map code="0xd59d" name="1em"/><!-- HANGUL SYLLABLE HYALT -->
+ <map code="0xd59e" name="1em"/><!-- HANGUL SYLLABLE HYALP -->
+ <map code="0xd59f" name="1em"/><!-- HANGUL SYLLABLE HYALH -->
+ <map code="0xd5a0" name="1em"/><!-- HANGUL SYLLABLE HYAM -->
+ <map code="0xd5a1" name="1em"/><!-- HANGUL SYLLABLE HYAB -->
+ <map code="0xd5a2" name="1em"/><!-- HANGUL SYLLABLE HYABS -->
+ <map code="0xd5a3" name="1em"/><!-- HANGUL SYLLABLE HYAS -->
+ <map code="0xd5a4" name="1em"/><!-- HANGUL SYLLABLE HYASS -->
+ <map code="0xd5a5" name="1em"/><!-- HANGUL SYLLABLE HYANG -->
+ <map code="0xd5a6" name="1em"/><!-- HANGUL SYLLABLE HYAJ -->
+ <map code="0xd5a7" name="1em"/><!-- HANGUL SYLLABLE HYAC -->
+ <map code="0xd5a8" name="1em"/><!-- HANGUL SYLLABLE HYAK -->
+ <map code="0xd5a9" name="1em"/><!-- HANGUL SYLLABLE HYAT -->
+ <map code="0xd5aa" name="1em"/><!-- HANGUL SYLLABLE HYAP -->
+ <map code="0xd5ab" name="1em"/><!-- HANGUL SYLLABLE HYAH -->
+ <map code="0xd5ac" name="1em"/><!-- HANGUL SYLLABLE HYAE -->
+ <map code="0xd5ad" name="1em"/><!-- HANGUL SYLLABLE HYAEG -->
+ <map code="0xd5ae" name="1em"/><!-- HANGUL SYLLABLE HYAEGG -->
+ <map code="0xd5af" name="1em"/><!-- HANGUL SYLLABLE HYAEGS -->
+ <map code="0xd5b0" name="1em"/><!-- HANGUL SYLLABLE HYAEN -->
+ <map code="0xd5b1" name="1em"/><!-- HANGUL SYLLABLE HYAENJ -->
+ <map code="0xd5b2" name="1em"/><!-- HANGUL SYLLABLE HYAENH -->
+ <map code="0xd5b3" name="1em"/><!-- HANGUL SYLLABLE HYAED -->
+ <map code="0xd5b4" name="1em"/><!-- HANGUL SYLLABLE HYAEL -->
+ <map code="0xd5b5" name="1em"/><!-- HANGUL SYLLABLE HYAELG -->
+ <map code="0xd5b6" name="1em"/><!-- HANGUL SYLLABLE HYAELM -->
+ <map code="0xd5b7" name="1em"/><!-- HANGUL SYLLABLE HYAELB -->
+ <map code="0xd5b8" name="1em"/><!-- HANGUL SYLLABLE HYAELS -->
+ <map code="0xd5b9" name="1em"/><!-- HANGUL SYLLABLE HYAELT -->
+ <map code="0xd5ba" name="1em"/><!-- HANGUL SYLLABLE HYAELP -->
+ <map code="0xd5bb" name="1em"/><!-- HANGUL SYLLABLE HYAELH -->
+ <map code="0xd5bc" name="1em"/><!-- HANGUL SYLLABLE HYAEM -->
+ <map code="0xd5bd" name="1em"/><!-- HANGUL SYLLABLE HYAEB -->
+ <map code="0xd5be" name="1em"/><!-- HANGUL SYLLABLE HYAEBS -->
+ <map code="0xd5bf" name="1em"/><!-- HANGUL SYLLABLE HYAES -->
+ <map code="0xd5c0" name="1em"/><!-- HANGUL SYLLABLE HYAESS -->
+ <map code="0xd5c1" name="1em"/><!-- HANGUL SYLLABLE HYAENG -->
+ <map code="0xd5c2" name="1em"/><!-- HANGUL SYLLABLE HYAEJ -->
+ <map code="0xd5c3" name="1em"/><!-- HANGUL SYLLABLE HYAEC -->
+ <map code="0xd5c4" name="1em"/><!-- HANGUL SYLLABLE HYAEK -->
+ <map code="0xd5c5" name="1em"/><!-- HANGUL SYLLABLE HYAET -->
+ <map code="0xd5c6" name="1em"/><!-- HANGUL SYLLABLE HYAEP -->
+ <map code="0xd5c7" name="1em"/><!-- HANGUL SYLLABLE HYAEH -->
+ <map code="0xd5c8" name="1em"/><!-- HANGUL SYLLABLE HEO -->
+ <map code="0xd5c9" name="1em"/><!-- HANGUL SYLLABLE HEOG -->
+ <map code="0xd5ca" name="1em"/><!-- HANGUL SYLLABLE HEOGG -->
+ <map code="0xd5cb" name="1em"/><!-- HANGUL SYLLABLE HEOGS -->
+ <map code="0xd5cc" name="1em"/><!-- HANGUL SYLLABLE HEON -->
+ <map code="0xd5cd" name="1em"/><!-- HANGUL SYLLABLE HEONJ -->
+ <map code="0xd5ce" name="1em"/><!-- HANGUL SYLLABLE HEONH -->
+ <map code="0xd5cf" name="1em"/><!-- HANGUL SYLLABLE HEOD -->
+ <map code="0xd5d0" name="1em"/><!-- HANGUL SYLLABLE HEOL -->
+ <map code="0xd5d1" name="1em"/><!-- HANGUL SYLLABLE HEOLG -->
+ <map code="0xd5d2" name="1em"/><!-- HANGUL SYLLABLE HEOLM -->
+ <map code="0xd5d3" name="1em"/><!-- HANGUL SYLLABLE HEOLB -->
+ <map code="0xd5d4" name="1em"/><!-- HANGUL SYLLABLE HEOLS -->
+ <map code="0xd5d5" name="1em"/><!-- HANGUL SYLLABLE HEOLT -->
+ <map code="0xd5d6" name="1em"/><!-- HANGUL SYLLABLE HEOLP -->
+ <map code="0xd5d7" name="1em"/><!-- HANGUL SYLLABLE HEOLH -->
+ <map code="0xd5d8" name="1em"/><!-- HANGUL SYLLABLE HEOM -->
+ <map code="0xd5d9" name="1em"/><!-- HANGUL SYLLABLE HEOB -->
+ <map code="0xd5da" name="1em"/><!-- HANGUL SYLLABLE HEOBS -->
+ <map code="0xd5db" name="1em"/><!-- HANGUL SYLLABLE HEOS -->
+ <map code="0xd5dc" name="1em"/><!-- HANGUL SYLLABLE HEOSS -->
+ <map code="0xd5dd" name="1em"/><!-- HANGUL SYLLABLE HEONG -->
+ <map code="0xd5de" name="1em"/><!-- HANGUL SYLLABLE HEOJ -->
+ <map code="0xd5df" name="1em"/><!-- HANGUL SYLLABLE HEOC -->
+ <map code="0xd5e0" name="1em"/><!-- HANGUL SYLLABLE HEOK -->
+ <map code="0xd5e1" name="1em"/><!-- HANGUL SYLLABLE HEOT -->
+ <map code="0xd5e2" name="1em"/><!-- HANGUL SYLLABLE HEOP -->
+ <map code="0xd5e3" name="1em"/><!-- HANGUL SYLLABLE HEOH -->
+ <map code="0xd5e4" name="1em"/><!-- HANGUL SYLLABLE HE -->
+ <map code="0xd5e5" name="1em"/><!-- HANGUL SYLLABLE HEG -->
+ <map code="0xd5e6" name="1em"/><!-- HANGUL SYLLABLE HEGG -->
+ <map code="0xd5e7" name="1em"/><!-- HANGUL SYLLABLE HEGS -->
+ <map code="0xd5e8" name="1em"/><!-- HANGUL SYLLABLE HEN -->
+ <map code="0xd5e9" name="1em"/><!-- HANGUL SYLLABLE HENJ -->
+ <map code="0xd5ea" name="1em"/><!-- HANGUL SYLLABLE HENH -->
+ <map code="0xd5eb" name="1em"/><!-- HANGUL SYLLABLE HED -->
+ <map code="0xd5ec" name="1em"/><!-- HANGUL SYLLABLE HEL -->
+ <map code="0xd5ed" name="1em"/><!-- HANGUL SYLLABLE HELG -->
+ <map code="0xd5ee" name="1em"/><!-- HANGUL SYLLABLE HELM -->
+ <map code="0xd5ef" name="1em"/><!-- HANGUL SYLLABLE HELB -->
+ <map code="0xd5f0" name="1em"/><!-- HANGUL SYLLABLE HELS -->
+ <map code="0xd5f1" name="1em"/><!-- HANGUL SYLLABLE HELT -->
+ <map code="0xd5f2" name="1em"/><!-- HANGUL SYLLABLE HELP -->
+ <map code="0xd5f3" name="1em"/><!-- HANGUL SYLLABLE HELH -->
+ <map code="0xd5f4" name="1em"/><!-- HANGUL SYLLABLE HEM -->
+ <map code="0xd5f5" name="1em"/><!-- HANGUL SYLLABLE HEB -->
+ <map code="0xd5f6" name="1em"/><!-- HANGUL SYLLABLE HEBS -->
+ <map code="0xd5f7" name="1em"/><!-- HANGUL SYLLABLE HES -->
+ <map code="0xd5f8" name="1em"/><!-- HANGUL SYLLABLE HESS -->
+ <map code="0xd5f9" name="1em"/><!-- HANGUL SYLLABLE HENG -->
+ <map code="0xd5fa" name="1em"/><!-- HANGUL SYLLABLE HEJ -->
+ <map code="0xd5fb" name="1em"/><!-- HANGUL SYLLABLE HEC -->
+ <map code="0xd5fc" name="1em"/><!-- HANGUL SYLLABLE HEK -->
+ <map code="0xd5fd" name="1em"/><!-- HANGUL SYLLABLE HET -->
+ <map code="0xd5fe" name="1em"/><!-- HANGUL SYLLABLE HEP -->
+ <map code="0xd5ff" name="1em"/><!-- HANGUL SYLLABLE HEH -->
+ <map code="0xd600" name="1em"/><!-- HANGUL SYLLABLE HYEO -->
+ <map code="0xd601" name="1em"/><!-- HANGUL SYLLABLE HYEOG -->
+ <map code="0xd602" name="1em"/><!-- HANGUL SYLLABLE HYEOGG -->
+ <map code="0xd603" name="1em"/><!-- HANGUL SYLLABLE HYEOGS -->
+ <map code="0xd604" name="1em"/><!-- HANGUL SYLLABLE HYEON -->
+ <map code="0xd605" name="1em"/><!-- HANGUL SYLLABLE HYEONJ -->
+ <map code="0xd606" name="1em"/><!-- HANGUL SYLLABLE HYEONH -->
+ <map code="0xd607" name="1em"/><!-- HANGUL SYLLABLE HYEOD -->
+ <map code="0xd608" name="1em"/><!-- HANGUL SYLLABLE HYEOL -->
+ <map code="0xd609" name="1em"/><!-- HANGUL SYLLABLE HYEOLG -->
+ <map code="0xd60a" name="1em"/><!-- HANGUL SYLLABLE HYEOLM -->
+ <map code="0xd60b" name="1em"/><!-- HANGUL SYLLABLE HYEOLB -->
+ <map code="0xd60c" name="1em"/><!-- HANGUL SYLLABLE HYEOLS -->
+ <map code="0xd60d" name="1em"/><!-- HANGUL SYLLABLE HYEOLT -->
+ <map code="0xd60e" name="1em"/><!-- HANGUL SYLLABLE HYEOLP -->
+ <map code="0xd60f" name="1em"/><!-- HANGUL SYLLABLE HYEOLH -->
+ <map code="0xd610" name="1em"/><!-- HANGUL SYLLABLE HYEOM -->
+ <map code="0xd611" name="1em"/><!-- HANGUL SYLLABLE HYEOB -->
+ <map code="0xd612" name="1em"/><!-- HANGUL SYLLABLE HYEOBS -->
+ <map code="0xd613" name="1em"/><!-- HANGUL SYLLABLE HYEOS -->
+ <map code="0xd614" name="1em"/><!-- HANGUL SYLLABLE HYEOSS -->
+ <map code="0xd615" name="1em"/><!-- HANGUL SYLLABLE HYEONG -->
+ <map code="0xd616" name="1em"/><!-- HANGUL SYLLABLE HYEOJ -->
+ <map code="0xd617" name="1em"/><!-- HANGUL SYLLABLE HYEOC -->
+ <map code="0xd618" name="1em"/><!-- HANGUL SYLLABLE HYEOK -->
+ <map code="0xd619" name="1em"/><!-- HANGUL SYLLABLE HYEOT -->
+ <map code="0xd61a" name="1em"/><!-- HANGUL SYLLABLE HYEOP -->
+ <map code="0xd61b" name="1em"/><!-- HANGUL SYLLABLE HYEOH -->
+ <map code="0xd61c" name="1em"/><!-- HANGUL SYLLABLE HYE -->
+ <map code="0xd61d" name="1em"/><!-- HANGUL SYLLABLE HYEG -->
+ <map code="0xd61e" name="1em"/><!-- HANGUL SYLLABLE HYEGG -->
+ <map code="0xd61f" name="1em"/><!-- HANGUL SYLLABLE HYEGS -->
+ <map code="0xd620" name="1em"/><!-- HANGUL SYLLABLE HYEN -->
+ <map code="0xd621" name="1em"/><!-- HANGUL SYLLABLE HYENJ -->
+ <map code="0xd622" name="1em"/><!-- HANGUL SYLLABLE HYENH -->
+ <map code="0xd623" name="1em"/><!-- HANGUL SYLLABLE HYED -->
+ <map code="0xd624" name="1em"/><!-- HANGUL SYLLABLE HYEL -->
+ <map code="0xd625" name="1em"/><!-- HANGUL SYLLABLE HYELG -->
+ <map code="0xd626" name="1em"/><!-- HANGUL SYLLABLE HYELM -->
+ <map code="0xd627" name="1em"/><!-- HANGUL SYLLABLE HYELB -->
+ <map code="0xd628" name="1em"/><!-- HANGUL SYLLABLE HYELS -->
+ <map code="0xd629" name="1em"/><!-- HANGUL SYLLABLE HYELT -->
+ <map code="0xd62a" name="1em"/><!-- HANGUL SYLLABLE HYELP -->
+ <map code="0xd62b" name="1em"/><!-- HANGUL SYLLABLE HYELH -->
+ <map code="0xd62c" name="1em"/><!-- HANGUL SYLLABLE HYEM -->
+ <map code="0xd62d" name="1em"/><!-- HANGUL SYLLABLE HYEB -->
+ <map code="0xd62e" name="1em"/><!-- HANGUL SYLLABLE HYEBS -->
+ <map code="0xd62f" name="1em"/><!-- HANGUL SYLLABLE HYES -->
+ <map code="0xd630" name="1em"/><!-- HANGUL SYLLABLE HYESS -->
+ <map code="0xd631" name="1em"/><!-- HANGUL SYLLABLE HYENG -->
+ <map code="0xd632" name="1em"/><!-- HANGUL SYLLABLE HYEJ -->
+ <map code="0xd633" name="1em"/><!-- HANGUL SYLLABLE HYEC -->
+ <map code="0xd634" name="1em"/><!-- HANGUL SYLLABLE HYEK -->
+ <map code="0xd635" name="1em"/><!-- HANGUL SYLLABLE HYET -->
+ <map code="0xd636" name="1em"/><!-- HANGUL SYLLABLE HYEP -->
+ <map code="0xd637" name="1em"/><!-- HANGUL SYLLABLE HYEH -->
+ <map code="0xd638" name="1em"/><!-- HANGUL SYLLABLE HO -->
+ <map code="0xd639" name="1em"/><!-- HANGUL SYLLABLE HOG -->
+ <map code="0xd63a" name="1em"/><!-- HANGUL SYLLABLE HOGG -->
+ <map code="0xd63b" name="1em"/><!-- HANGUL SYLLABLE HOGS -->
+ <map code="0xd63c" name="1em"/><!-- HANGUL SYLLABLE HON -->
+ <map code="0xd63d" name="1em"/><!-- HANGUL SYLLABLE HONJ -->
+ <map code="0xd63e" name="1em"/><!-- HANGUL SYLLABLE HONH -->
+ <map code="0xd63f" name="1em"/><!-- HANGUL SYLLABLE HOD -->
+ <map code="0xd640" name="1em"/><!-- HANGUL SYLLABLE HOL -->
+ <map code="0xd641" name="1em"/><!-- HANGUL SYLLABLE HOLG -->
+ <map code="0xd642" name="1em"/><!-- HANGUL SYLLABLE HOLM -->
+ <map code="0xd643" name="1em"/><!-- HANGUL SYLLABLE HOLB -->
+ <map code="0xd644" name="1em"/><!-- HANGUL SYLLABLE HOLS -->
+ <map code="0xd645" name="1em"/><!-- HANGUL SYLLABLE HOLT -->
+ <map code="0xd646" name="1em"/><!-- HANGUL SYLLABLE HOLP -->
+ <map code="0xd647" name="1em"/><!-- HANGUL SYLLABLE HOLH -->
+ <map code="0xd648" name="1em"/><!-- HANGUL SYLLABLE HOM -->
+ <map code="0xd649" name="1em"/><!-- HANGUL SYLLABLE HOB -->
+ <map code="0xd64a" name="1em"/><!-- HANGUL SYLLABLE HOBS -->
+ <map code="0xd64b" name="1em"/><!-- HANGUL SYLLABLE HOS -->
+ <map code="0xd64c" name="1em"/><!-- HANGUL SYLLABLE HOSS -->
+ <map code="0xd64d" name="1em"/><!-- HANGUL SYLLABLE HONG -->
+ <map code="0xd64e" name="1em"/><!-- HANGUL SYLLABLE HOJ -->
+ <map code="0xd64f" name="1em"/><!-- HANGUL SYLLABLE HOC -->
+ <map code="0xd650" name="1em"/><!-- HANGUL SYLLABLE HOK -->
+ <map code="0xd651" name="1em"/><!-- HANGUL SYLLABLE HOT -->
+ <map code="0xd652" name="1em"/><!-- HANGUL SYLLABLE HOP -->
+ <map code="0xd653" name="1em"/><!-- HANGUL SYLLABLE HOH -->
+ <map code="0xd654" name="1em"/><!-- HANGUL SYLLABLE HWA -->
+ <map code="0xd655" name="1em"/><!-- HANGUL SYLLABLE HWAG -->
+ <map code="0xd656" name="1em"/><!-- HANGUL SYLLABLE HWAGG -->
+ <map code="0xd657" name="1em"/><!-- HANGUL SYLLABLE HWAGS -->
+ <map code="0xd658" name="1em"/><!-- HANGUL SYLLABLE HWAN -->
+ <map code="0xd659" name="1em"/><!-- HANGUL SYLLABLE HWANJ -->
+ <map code="0xd65a" name="1em"/><!-- HANGUL SYLLABLE HWANH -->
+ <map code="0xd65b" name="1em"/><!-- HANGUL SYLLABLE HWAD -->
+ <map code="0xd65c" name="1em"/><!-- HANGUL SYLLABLE HWAL -->
+ <map code="0xd65d" name="1em"/><!-- HANGUL SYLLABLE HWALG -->
+ <map code="0xd65e" name="1em"/><!-- HANGUL SYLLABLE HWALM -->
+ <map code="0xd65f" name="1em"/><!-- HANGUL SYLLABLE HWALB -->
+ <map code="0xd660" name="1em"/><!-- HANGUL SYLLABLE HWALS -->
+ <map code="0xd661" name="1em"/><!-- HANGUL SYLLABLE HWALT -->
+ <map code="0xd662" name="1em"/><!-- HANGUL SYLLABLE HWALP -->
+ <map code="0xd663" name="1em"/><!-- HANGUL SYLLABLE HWALH -->
+ <map code="0xd664" name="1em"/><!-- HANGUL SYLLABLE HWAM -->
+ <map code="0xd665" name="1em"/><!-- HANGUL SYLLABLE HWAB -->
+ <map code="0xd666" name="1em"/><!-- HANGUL SYLLABLE HWABS -->
+ <map code="0xd667" name="1em"/><!-- HANGUL SYLLABLE HWAS -->
+ <map code="0xd668" name="1em"/><!-- HANGUL SYLLABLE HWASS -->
+ <map code="0xd669" name="1em"/><!-- HANGUL SYLLABLE HWANG -->
+ <map code="0xd66a" name="1em"/><!-- HANGUL SYLLABLE HWAJ -->
+ <map code="0xd66b" name="1em"/><!-- HANGUL SYLLABLE HWAC -->
+ <map code="0xd66c" name="1em"/><!-- HANGUL SYLLABLE HWAK -->
+ <map code="0xd66d" name="1em"/><!-- HANGUL SYLLABLE HWAT -->
+ <map code="0xd66e" name="1em"/><!-- HANGUL SYLLABLE HWAP -->
+ <map code="0xd66f" name="1em"/><!-- HANGUL SYLLABLE HWAH -->
+ <map code="0xd670" name="1em"/><!-- HANGUL SYLLABLE HWAE -->
+ <map code="0xd671" name="1em"/><!-- HANGUL SYLLABLE HWAEG -->
+ <map code="0xd672" name="1em"/><!-- HANGUL SYLLABLE HWAEGG -->
+ <map code="0xd673" name="1em"/><!-- HANGUL SYLLABLE HWAEGS -->
+ <map code="0xd674" name="1em"/><!-- HANGUL SYLLABLE HWAEN -->
+ <map code="0xd675" name="1em"/><!-- HANGUL SYLLABLE HWAENJ -->
+ <map code="0xd676" name="1em"/><!-- HANGUL SYLLABLE HWAENH -->
+ <map code="0xd677" name="1em"/><!-- HANGUL SYLLABLE HWAED -->
+ <map code="0xd678" name="1em"/><!-- HANGUL SYLLABLE HWAEL -->
+ <map code="0xd679" name="1em"/><!-- HANGUL SYLLABLE HWAELG -->
+ <map code="0xd67a" name="1em"/><!-- HANGUL SYLLABLE HWAELM -->
+ <map code="0xd67b" name="1em"/><!-- HANGUL SYLLABLE HWAELB -->
+ <map code="0xd67c" name="1em"/><!-- HANGUL SYLLABLE HWAELS -->
+ <map code="0xd67d" name="1em"/><!-- HANGUL SYLLABLE HWAELT -->
+ <map code="0xd67e" name="1em"/><!-- HANGUL SYLLABLE HWAELP -->
+ <map code="0xd67f" name="1em"/><!-- HANGUL SYLLABLE HWAELH -->
+ <map code="0xd680" name="1em"/><!-- HANGUL SYLLABLE HWAEM -->
+ <map code="0xd681" name="1em"/><!-- HANGUL SYLLABLE HWAEB -->
+ <map code="0xd682" name="1em"/><!-- HANGUL SYLLABLE HWAEBS -->
+ <map code="0xd683" name="1em"/><!-- HANGUL SYLLABLE HWAES -->
+ <map code="0xd684" name="1em"/><!-- HANGUL SYLLABLE HWAESS -->
+ <map code="0xd685" name="1em"/><!-- HANGUL SYLLABLE HWAENG -->
+ <map code="0xd686" name="1em"/><!-- HANGUL SYLLABLE HWAEJ -->
+ <map code="0xd687" name="1em"/><!-- HANGUL SYLLABLE HWAEC -->
+ <map code="0xd688" name="1em"/><!-- HANGUL SYLLABLE HWAEK -->
+ <map code="0xd689" name="1em"/><!-- HANGUL SYLLABLE HWAET -->
+ <map code="0xd68a" name="1em"/><!-- HANGUL SYLLABLE HWAEP -->
+ <map code="0xd68b" name="1em"/><!-- HANGUL SYLLABLE HWAEH -->
+ <map code="0xd68c" name="1em"/><!-- HANGUL SYLLABLE HOE -->
+ <map code="0xd68d" name="1em"/><!-- HANGUL SYLLABLE HOEG -->
+ <map code="0xd68e" name="1em"/><!-- HANGUL SYLLABLE HOEGG -->
+ <map code="0xd68f" name="1em"/><!-- HANGUL SYLLABLE HOEGS -->
+ <map code="0xd690" name="1em"/><!-- HANGUL SYLLABLE HOEN -->
+ <map code="0xd691" name="1em"/><!-- HANGUL SYLLABLE HOENJ -->
+ <map code="0xd692" name="1em"/><!-- HANGUL SYLLABLE HOENH -->
+ <map code="0xd693" name="1em"/><!-- HANGUL SYLLABLE HOED -->
+ <map code="0xd694" name="1em"/><!-- HANGUL SYLLABLE HOEL -->
+ <map code="0xd695" name="1em"/><!-- HANGUL SYLLABLE HOELG -->
+ <map code="0xd696" name="1em"/><!-- HANGUL SYLLABLE HOELM -->
+ <map code="0xd697" name="1em"/><!-- HANGUL SYLLABLE HOELB -->
+ <map code="0xd698" name="1em"/><!-- HANGUL SYLLABLE HOELS -->
+ <map code="0xd699" name="1em"/><!-- HANGUL SYLLABLE HOELT -->
+ <map code="0xd69a" name="1em"/><!-- HANGUL SYLLABLE HOELP -->
+ <map code="0xd69b" name="1em"/><!-- HANGUL SYLLABLE HOELH -->
+ <map code="0xd69c" name="1em"/><!-- HANGUL SYLLABLE HOEM -->
+ <map code="0xd69d" name="1em"/><!-- HANGUL SYLLABLE HOEB -->
+ <map code="0xd69e" name="1em"/><!-- HANGUL SYLLABLE HOEBS -->
+ <map code="0xd69f" name="1em"/><!-- HANGUL SYLLABLE HOES -->
+ <map code="0xd6a0" name="1em"/><!-- HANGUL SYLLABLE HOESS -->
+ <map code="0xd6a1" name="1em"/><!-- HANGUL SYLLABLE HOENG -->
+ <map code="0xd6a2" name="1em"/><!-- HANGUL SYLLABLE HOEJ -->
+ <map code="0xd6a3" name="1em"/><!-- HANGUL SYLLABLE HOEC -->
+ <map code="0xd6a4" name="1em"/><!-- HANGUL SYLLABLE HOEK -->
+ <map code="0xd6a5" name="1em"/><!-- HANGUL SYLLABLE HOET -->
+ <map code="0xd6a6" name="1em"/><!-- HANGUL SYLLABLE HOEP -->
+ <map code="0xd6a7" name="1em"/><!-- HANGUL SYLLABLE HOEH -->
+ <map code="0xd6a8" name="1em"/><!-- HANGUL SYLLABLE HYO -->
+ <map code="0xd6a9" name="1em"/><!-- HANGUL SYLLABLE HYOG -->
+ <map code="0xd6aa" name="1em"/><!-- HANGUL SYLLABLE HYOGG -->
+ <map code="0xd6ab" name="1em"/><!-- HANGUL SYLLABLE HYOGS -->
+ <map code="0xd6ac" name="1em"/><!-- HANGUL SYLLABLE HYON -->
+ <map code="0xd6ad" name="1em"/><!-- HANGUL SYLLABLE HYONJ -->
+ <map code="0xd6ae" name="1em"/><!-- HANGUL SYLLABLE HYONH -->
+ <map code="0xd6af" name="1em"/><!-- HANGUL SYLLABLE HYOD -->
+ <map code="0xd6b0" name="1em"/><!-- HANGUL SYLLABLE HYOL -->
+ <map code="0xd6b1" name="1em"/><!-- HANGUL SYLLABLE HYOLG -->
+ <map code="0xd6b2" name="1em"/><!-- HANGUL SYLLABLE HYOLM -->
+ <map code="0xd6b3" name="1em"/><!-- HANGUL SYLLABLE HYOLB -->
+ <map code="0xd6b4" name="1em"/><!-- HANGUL SYLLABLE HYOLS -->
+ <map code="0xd6b5" name="1em"/><!-- HANGUL SYLLABLE HYOLT -->
+ <map code="0xd6b6" name="1em"/><!-- HANGUL SYLLABLE HYOLP -->
+ <map code="0xd6b7" name="1em"/><!-- HANGUL SYLLABLE HYOLH -->
+ <map code="0xd6b8" name="1em"/><!-- HANGUL SYLLABLE HYOM -->
+ <map code="0xd6b9" name="1em"/><!-- HANGUL SYLLABLE HYOB -->
+ <map code="0xd6ba" name="1em"/><!-- HANGUL SYLLABLE HYOBS -->
+ <map code="0xd6bb" name="1em"/><!-- HANGUL SYLLABLE HYOS -->
+ <map code="0xd6bc" name="1em"/><!-- HANGUL SYLLABLE HYOSS -->
+ <map code="0xd6bd" name="1em"/><!-- HANGUL SYLLABLE HYONG -->
+ <map code="0xd6be" name="1em"/><!-- HANGUL SYLLABLE HYOJ -->
+ <map code="0xd6bf" name="1em"/><!-- HANGUL SYLLABLE HYOC -->
+ <map code="0xd6c0" name="1em"/><!-- HANGUL SYLLABLE HYOK -->
+ <map code="0xd6c1" name="1em"/><!-- HANGUL SYLLABLE HYOT -->
+ <map code="0xd6c2" name="1em"/><!-- HANGUL SYLLABLE HYOP -->
+ <map code="0xd6c3" name="1em"/><!-- HANGUL SYLLABLE HYOH -->
+ <map code="0xd6c4" name="1em"/><!-- HANGUL SYLLABLE HU -->
+ <map code="0xd6c5" name="1em"/><!-- HANGUL SYLLABLE HUG -->
+ <map code="0xd6c6" name="1em"/><!-- HANGUL SYLLABLE HUGG -->
+ <map code="0xd6c7" name="1em"/><!-- HANGUL SYLLABLE HUGS -->
+ <map code="0xd6c8" name="1em"/><!-- HANGUL SYLLABLE HUN -->
+ <map code="0xd6c9" name="1em"/><!-- HANGUL SYLLABLE HUNJ -->
+ <map code="0xd6ca" name="1em"/><!-- HANGUL SYLLABLE HUNH -->
+ <map code="0xd6cb" name="1em"/><!-- HANGUL SYLLABLE HUD -->
+ <map code="0xd6cc" name="1em"/><!-- HANGUL SYLLABLE HUL -->
+ <map code="0xd6cd" name="1em"/><!-- HANGUL SYLLABLE HULG -->
+ <map code="0xd6ce" name="1em"/><!-- HANGUL SYLLABLE HULM -->
+ <map code="0xd6cf" name="1em"/><!-- HANGUL SYLLABLE HULB -->
+ <map code="0xd6d0" name="1em"/><!-- HANGUL SYLLABLE HULS -->
+ <map code="0xd6d1" name="1em"/><!-- HANGUL SYLLABLE HULT -->
+ <map code="0xd6d2" name="1em"/><!-- HANGUL SYLLABLE HULP -->
+ <map code="0xd6d3" name="1em"/><!-- HANGUL SYLLABLE HULH -->
+ <map code="0xd6d4" name="1em"/><!-- HANGUL SYLLABLE HUM -->
+ <map code="0xd6d5" name="1em"/><!-- HANGUL SYLLABLE HUB -->
+ <map code="0xd6d6" name="1em"/><!-- HANGUL SYLLABLE HUBS -->
+ <map code="0xd6d7" name="1em"/><!-- HANGUL SYLLABLE HUS -->
+ <map code="0xd6d8" name="1em"/><!-- HANGUL SYLLABLE HUSS -->
+ <map code="0xd6d9" name="1em"/><!-- HANGUL SYLLABLE HUNG -->
+ <map code="0xd6da" name="1em"/><!-- HANGUL SYLLABLE HUJ -->
+ <map code="0xd6db" name="1em"/><!-- HANGUL SYLLABLE HUC -->
+ <map code="0xd6dc" name="1em"/><!-- HANGUL SYLLABLE HUK -->
+ <map code="0xd6dd" name="1em"/><!-- HANGUL SYLLABLE HUT -->
+ <map code="0xd6de" name="1em"/><!-- HANGUL SYLLABLE HUP -->
+ <map code="0xd6df" name="1em"/><!-- HANGUL SYLLABLE HUH -->
+ <map code="0xd6e0" name="1em"/><!-- HANGUL SYLLABLE HWEO -->
+ <map code="0xd6e1" name="1em"/><!-- HANGUL SYLLABLE HWEOG -->
+ <map code="0xd6e2" name="1em"/><!-- HANGUL SYLLABLE HWEOGG -->
+ <map code="0xd6e3" name="1em"/><!-- HANGUL SYLLABLE HWEOGS -->
+ <map code="0xd6e4" name="1em"/><!-- HANGUL SYLLABLE HWEON -->
+ <map code="0xd6e5" name="1em"/><!-- HANGUL SYLLABLE HWEONJ -->
+ <map code="0xd6e6" name="1em"/><!-- HANGUL SYLLABLE HWEONH -->
+ <map code="0xd6e7" name="1em"/><!-- HANGUL SYLLABLE HWEOD -->
+ <map code="0xd6e8" name="1em"/><!-- HANGUL SYLLABLE HWEOL -->
+ <map code="0xd6e9" name="1em"/><!-- HANGUL SYLLABLE HWEOLG -->
+ <map code="0xd6ea" name="1em"/><!-- HANGUL SYLLABLE HWEOLM -->
+ <map code="0xd6eb" name="1em"/><!-- HANGUL SYLLABLE HWEOLB -->
+ <map code="0xd6ec" name="1em"/><!-- HANGUL SYLLABLE HWEOLS -->
+ <map code="0xd6ed" name="1em"/><!-- HANGUL SYLLABLE HWEOLT -->
+ <map code="0xd6ee" name="1em"/><!-- HANGUL SYLLABLE HWEOLP -->
+ <map code="0xd6ef" name="1em"/><!-- HANGUL SYLLABLE HWEOLH -->
+ <map code="0xd6f0" name="1em"/><!-- HANGUL SYLLABLE HWEOM -->
+ <map code="0xd6f1" name="1em"/><!-- HANGUL SYLLABLE HWEOB -->
+ <map code="0xd6f2" name="1em"/><!-- HANGUL SYLLABLE HWEOBS -->
+ <map code="0xd6f3" name="1em"/><!-- HANGUL SYLLABLE HWEOS -->
+ <map code="0xd6f4" name="1em"/><!-- HANGUL SYLLABLE HWEOSS -->
+ <map code="0xd6f5" name="1em"/><!-- HANGUL SYLLABLE HWEONG -->
+ <map code="0xd6f6" name="1em"/><!-- HANGUL SYLLABLE HWEOJ -->
+ <map code="0xd6f7" name="1em"/><!-- HANGUL SYLLABLE HWEOC -->
+ <map code="0xd6f8" name="1em"/><!-- HANGUL SYLLABLE HWEOK -->
+ <map code="0xd6f9" name="1em"/><!-- HANGUL SYLLABLE HWEOT -->
+ <map code="0xd6fa" name="1em"/><!-- HANGUL SYLLABLE HWEOP -->
+ <map code="0xd6fb" name="1em"/><!-- HANGUL SYLLABLE HWEOH -->
+ <map code="0xd6fc" name="1em"/><!-- HANGUL SYLLABLE HWE -->
+ <map code="0xd6fd" name="1em"/><!-- HANGUL SYLLABLE HWEG -->
+ <map code="0xd6fe" name="1em"/><!-- HANGUL SYLLABLE HWEGG -->
+ <map code="0xd6ff" name="1em"/><!-- HANGUL SYLLABLE HWEGS -->
+ <map code="0xd700" name="1em"/><!-- HANGUL SYLLABLE HWEN -->
+ <map code="0xd701" name="1em"/><!-- HANGUL SYLLABLE HWENJ -->
+ <map code="0xd702" name="1em"/><!-- HANGUL SYLLABLE HWENH -->
+ <map code="0xd703" name="1em"/><!-- HANGUL SYLLABLE HWED -->
+ <map code="0xd704" name="1em"/><!-- HANGUL SYLLABLE HWEL -->
+ <map code="0xd705" name="1em"/><!-- HANGUL SYLLABLE HWELG -->
+ <map code="0xd706" name="1em"/><!-- HANGUL SYLLABLE HWELM -->
+ <map code="0xd707" name="1em"/><!-- HANGUL SYLLABLE HWELB -->
+ <map code="0xd708" name="1em"/><!-- HANGUL SYLLABLE HWELS -->
+ <map code="0xd709" name="1em"/><!-- HANGUL SYLLABLE HWELT -->
+ <map code="0xd70a" name="1em"/><!-- HANGUL SYLLABLE HWELP -->
+ <map code="0xd70b" name="1em"/><!-- HANGUL SYLLABLE HWELH -->
+ <map code="0xd70c" name="1em"/><!-- HANGUL SYLLABLE HWEM -->
+ <map code="0xd70d" name="1em"/><!-- HANGUL SYLLABLE HWEB -->
+ <map code="0xd70e" name="1em"/><!-- HANGUL SYLLABLE HWEBS -->
+ <map code="0xd70f" name="1em"/><!-- HANGUL SYLLABLE HWES -->
+ <map code="0xd710" name="1em"/><!-- HANGUL SYLLABLE HWESS -->
+ <map code="0xd711" name="1em"/><!-- HANGUL SYLLABLE HWENG -->
+ <map code="0xd712" name="1em"/><!-- HANGUL SYLLABLE HWEJ -->
+ <map code="0xd713" name="1em"/><!-- HANGUL SYLLABLE HWEC -->
+ <map code="0xd714" name="1em"/><!-- HANGUL SYLLABLE HWEK -->
+ <map code="0xd715" name="1em"/><!-- HANGUL SYLLABLE HWET -->
+ <map code="0xd716" name="1em"/><!-- HANGUL SYLLABLE HWEP -->
+ <map code="0xd717" name="1em"/><!-- HANGUL SYLLABLE HWEH -->
+ <map code="0xd718" name="1em"/><!-- HANGUL SYLLABLE HWI -->
+ <map code="0xd719" name="1em"/><!-- HANGUL SYLLABLE HWIG -->
+ <map code="0xd71a" name="1em"/><!-- HANGUL SYLLABLE HWIGG -->
+ <map code="0xd71b" name="1em"/><!-- HANGUL SYLLABLE HWIGS -->
+ <map code="0xd71c" name="1em"/><!-- HANGUL SYLLABLE HWIN -->
+ <map code="0xd71d" name="1em"/><!-- HANGUL SYLLABLE HWINJ -->
+ <map code="0xd71e" name="1em"/><!-- HANGUL SYLLABLE HWINH -->
+ <map code="0xd71f" name="1em"/><!-- HANGUL SYLLABLE HWID -->
+ <map code="0xd720" name="1em"/><!-- HANGUL SYLLABLE HWIL -->
+ <map code="0xd721" name="1em"/><!-- HANGUL SYLLABLE HWILG -->
+ <map code="0xd722" name="1em"/><!-- HANGUL SYLLABLE HWILM -->
+ <map code="0xd723" name="1em"/><!-- HANGUL SYLLABLE HWILB -->
+ <map code="0xd724" name="1em"/><!-- HANGUL SYLLABLE HWILS -->
+ <map code="0xd725" name="1em"/><!-- HANGUL SYLLABLE HWILT -->
+ <map code="0xd726" name="1em"/><!-- HANGUL SYLLABLE HWILP -->
+ <map code="0xd727" name="1em"/><!-- HANGUL SYLLABLE HWILH -->
+ <map code="0xd728" name="1em"/><!-- HANGUL SYLLABLE HWIM -->
+ <map code="0xd729" name="1em"/><!-- HANGUL SYLLABLE HWIB -->
+ <map code="0xd72a" name="1em"/><!-- HANGUL SYLLABLE HWIBS -->
+ <map code="0xd72b" name="1em"/><!-- HANGUL SYLLABLE HWIS -->
+ <map code="0xd72c" name="1em"/><!-- HANGUL SYLLABLE HWISS -->
+ <map code="0xd72d" name="1em"/><!-- HANGUL SYLLABLE HWING -->
+ <map code="0xd72e" name="1em"/><!-- HANGUL SYLLABLE HWIJ -->
+ <map code="0xd72f" name="1em"/><!-- HANGUL SYLLABLE HWIC -->
+ <map code="0xd730" name="1em"/><!-- HANGUL SYLLABLE HWIK -->
+ <map code="0xd731" name="1em"/><!-- HANGUL SYLLABLE HWIT -->
+ <map code="0xd732" name="1em"/><!-- HANGUL SYLLABLE HWIP -->
+ <map code="0xd733" name="1em"/><!-- HANGUL SYLLABLE HWIH -->
+ <map code="0xd734" name="1em"/><!-- HANGUL SYLLABLE HYU -->
+ <map code="0xd735" name="1em"/><!-- HANGUL SYLLABLE HYUG -->
+ <map code="0xd736" name="1em"/><!-- HANGUL SYLLABLE HYUGG -->
+ <map code="0xd737" name="1em"/><!-- HANGUL SYLLABLE HYUGS -->
+ <map code="0xd738" name="1em"/><!-- HANGUL SYLLABLE HYUN -->
+ <map code="0xd739" name="1em"/><!-- HANGUL SYLLABLE HYUNJ -->
+ <map code="0xd73a" name="1em"/><!-- HANGUL SYLLABLE HYUNH -->
+ <map code="0xd73b" name="1em"/><!-- HANGUL SYLLABLE HYUD -->
+ <map code="0xd73c" name="1em"/><!-- HANGUL SYLLABLE HYUL -->
+ <map code="0xd73d" name="1em"/><!-- HANGUL SYLLABLE HYULG -->
+ <map code="0xd73e" name="1em"/><!-- HANGUL SYLLABLE HYULM -->
+ <map code="0xd73f" name="1em"/><!-- HANGUL SYLLABLE HYULB -->
+ <map code="0xd740" name="1em"/><!-- HANGUL SYLLABLE HYULS -->
+ <map code="0xd741" name="1em"/><!-- HANGUL SYLLABLE HYULT -->
+ <map code="0xd742" name="1em"/><!-- HANGUL SYLLABLE HYULP -->
+ <map code="0xd743" name="1em"/><!-- HANGUL SYLLABLE HYULH -->
+ <map code="0xd744" name="1em"/><!-- HANGUL SYLLABLE HYUM -->
+ <map code="0xd745" name="1em"/><!-- HANGUL SYLLABLE HYUB -->
+ <map code="0xd746" name="1em"/><!-- HANGUL SYLLABLE HYUBS -->
+ <map code="0xd747" name="1em"/><!-- HANGUL SYLLABLE HYUS -->
+ <map code="0xd748" name="1em"/><!-- HANGUL SYLLABLE HYUSS -->
+ <map code="0xd749" name="1em"/><!-- HANGUL SYLLABLE HYUNG -->
+ <map code="0xd74a" name="1em"/><!-- HANGUL SYLLABLE HYUJ -->
+ <map code="0xd74b" name="1em"/><!-- HANGUL SYLLABLE HYUC -->
+ <map code="0xd74c" name="1em"/><!-- HANGUL SYLLABLE HYUK -->
+ <map code="0xd74d" name="1em"/><!-- HANGUL SYLLABLE HYUT -->
+ <map code="0xd74e" name="1em"/><!-- HANGUL SYLLABLE HYUP -->
+ <map code="0xd74f" name="1em"/><!-- HANGUL SYLLABLE HYUH -->
+ <map code="0xd750" name="1em"/><!-- HANGUL SYLLABLE HEU -->
+ <map code="0xd751" name="1em"/><!-- HANGUL SYLLABLE HEUG -->
+ <map code="0xd752" name="1em"/><!-- HANGUL SYLLABLE HEUGG -->
+ <map code="0xd753" name="1em"/><!-- HANGUL SYLLABLE HEUGS -->
+ <map code="0xd754" name="1em"/><!-- HANGUL SYLLABLE HEUN -->
+ <map code="0xd755" name="1em"/><!-- HANGUL SYLLABLE HEUNJ -->
+ <map code="0xd756" name="1em"/><!-- HANGUL SYLLABLE HEUNH -->
+ <map code="0xd757" name="1em"/><!-- HANGUL SYLLABLE HEUD -->
+ <map code="0xd758" name="1em"/><!-- HANGUL SYLLABLE HEUL -->
+ <map code="0xd759" name="1em"/><!-- HANGUL SYLLABLE HEULG -->
+ <map code="0xd75a" name="1em"/><!-- HANGUL SYLLABLE HEULM -->
+ <map code="0xd75b" name="1em"/><!-- HANGUL SYLLABLE HEULB -->
+ <map code="0xd75c" name="1em"/><!-- HANGUL SYLLABLE HEULS -->
+ <map code="0xd75d" name="1em"/><!-- HANGUL SYLLABLE HEULT -->
+ <map code="0xd75e" name="1em"/><!-- HANGUL SYLLABLE HEULP -->
+ <map code="0xd75f" name="1em"/><!-- HANGUL SYLLABLE HEULH -->
+ <map code="0xd760" name="1em"/><!-- HANGUL SYLLABLE HEUM -->
+ <map code="0xd761" name="1em"/><!-- HANGUL SYLLABLE HEUB -->
+ <map code="0xd762" name="1em"/><!-- HANGUL SYLLABLE HEUBS -->
+ <map code="0xd763" name="1em"/><!-- HANGUL SYLLABLE HEUS -->
+ <map code="0xd764" name="1em"/><!-- HANGUL SYLLABLE HEUSS -->
+ <map code="0xd765" name="1em"/><!-- HANGUL SYLLABLE HEUNG -->
+ <map code="0xd766" name="1em"/><!-- HANGUL SYLLABLE HEUJ -->
+ <map code="0xd767" name="1em"/><!-- HANGUL SYLLABLE HEUC -->
+ <map code="0xd768" name="1em"/><!-- HANGUL SYLLABLE HEUK -->
+ <map code="0xd769" name="1em"/><!-- HANGUL SYLLABLE HEUT -->
+ <map code="0xd76a" name="1em"/><!-- HANGUL SYLLABLE HEUP -->
+ <map code="0xd76b" name="1em"/><!-- HANGUL SYLLABLE HEUH -->
+ <map code="0xd76c" name="1em"/><!-- HANGUL SYLLABLE HYI -->
+ <map code="0xd76d" name="1em"/><!-- HANGUL SYLLABLE HYIG -->
+ <map code="0xd76e" name="1em"/><!-- HANGUL SYLLABLE HYIGG -->
+ <map code="0xd76f" name="1em"/><!-- HANGUL SYLLABLE HYIGS -->
+ <map code="0xd770" name="1em"/><!-- HANGUL SYLLABLE HYIN -->
+ <map code="0xd771" name="1em"/><!-- HANGUL SYLLABLE HYINJ -->
+ <map code="0xd772" name="1em"/><!-- HANGUL SYLLABLE HYINH -->
+ <map code="0xd773" name="1em"/><!-- HANGUL SYLLABLE HYID -->
+ <map code="0xd774" name="1em"/><!-- HANGUL SYLLABLE HYIL -->
+ <map code="0xd775" name="1em"/><!-- HANGUL SYLLABLE HYILG -->
+ <map code="0xd776" name="1em"/><!-- HANGUL SYLLABLE HYILM -->
+ <map code="0xd777" name="1em"/><!-- HANGUL SYLLABLE HYILB -->
+ <map code="0xd778" name="1em"/><!-- HANGUL SYLLABLE HYILS -->
+ <map code="0xd779" name="1em"/><!-- HANGUL SYLLABLE HYILT -->
+ <map code="0xd77a" name="1em"/><!-- HANGUL SYLLABLE HYILP -->
+ <map code="0xd77b" name="1em"/><!-- HANGUL SYLLABLE HYILH -->
+ <map code="0xd77c" name="1em"/><!-- HANGUL SYLLABLE HYIM -->
+ <map code="0xd77d" name="1em"/><!-- HANGUL SYLLABLE HYIB -->
+ <map code="0xd77e" name="1em"/><!-- HANGUL SYLLABLE HYIBS -->
+ <map code="0xd77f" name="1em"/><!-- HANGUL SYLLABLE HYIS -->
+ <map code="0xd780" name="1em"/><!-- HANGUL SYLLABLE HYISS -->
+ <map code="0xd781" name="1em"/><!-- HANGUL SYLLABLE HYING -->
+ <map code="0xd782" name="1em"/><!-- HANGUL SYLLABLE HYIJ -->
+ <map code="0xd783" name="1em"/><!-- HANGUL SYLLABLE HYIC -->
+ <map code="0xd784" name="1em"/><!-- HANGUL SYLLABLE HYIK -->
+ <map code="0xd785" name="1em"/><!-- HANGUL SYLLABLE HYIT -->
+ <map code="0xd786" name="1em"/><!-- HANGUL SYLLABLE HYIP -->
+ <map code="0xd787" name="1em"/><!-- HANGUL SYLLABLE HYIH -->
+ <map code="0xd788" name="1em"/><!-- HANGUL SYLLABLE HI -->
+ <map code="0xd789" name="1em"/><!-- HANGUL SYLLABLE HIG -->
+ <map code="0xd78a" name="1em"/><!-- HANGUL SYLLABLE HIGG -->
+ <map code="0xd78b" name="1em"/><!-- HANGUL SYLLABLE HIGS -->
+ <map code="0xd78c" name="1em"/><!-- HANGUL SYLLABLE HIN -->
+ <map code="0xd78d" name="1em"/><!-- HANGUL SYLLABLE HINJ -->
+ <map code="0xd78e" name="1em"/><!-- HANGUL SYLLABLE HINH -->
+ <map code="0xd78f" name="1em"/><!-- HANGUL SYLLABLE HID -->
+ <map code="0xd790" name="1em"/><!-- HANGUL SYLLABLE HIL -->
+ <map code="0xd791" name="1em"/><!-- HANGUL SYLLABLE HILG -->
+ <map code="0xd792" name="1em"/><!-- HANGUL SYLLABLE HILM -->
+ <map code="0xd793" name="1em"/><!-- HANGUL SYLLABLE HILB -->
+ <map code="0xd794" name="1em"/><!-- HANGUL SYLLABLE HILS -->
+ <map code="0xd795" name="1em"/><!-- HANGUL SYLLABLE HILT -->
+ <map code="0xd796" name="1em"/><!-- HANGUL SYLLABLE HILP -->
+ <map code="0xd797" name="1em"/><!-- HANGUL SYLLABLE HILH -->
+ <map code="0xd798" name="1em"/><!-- HANGUL SYLLABLE HIM -->
+ <map code="0xd799" name="1em"/><!-- HANGUL SYLLABLE HIB -->
+ <map code="0xd79a" name="1em"/><!-- HANGUL SYLLABLE HIBS -->
+ <map code="0xd79b" name="1em"/><!-- HANGUL SYLLABLE HIS -->
+ <map code="0xd79c" name="1em"/><!-- HANGUL SYLLABLE HISS -->
+ <map code="0xd79d" name="1em"/><!-- HANGUL SYLLABLE HING -->
+ <map code="0xd79e" name="1em"/><!-- HANGUL SYLLABLE HIJ -->
+ <map code="0xd79f" name="1em"/><!-- HANGUL SYLLABLE HIC -->
+ <map code="0xd7a0" name="1em"/><!-- HANGUL SYLLABLE HIK -->
+ <map code="0xd7a1" name="1em"/><!-- HANGUL SYLLABLE HIT -->
+ <map code="0xd7a2" name="1em"/><!-- HANGUL SYLLABLE HIP -->
+ <map code="0xd7a3" name="1em"/><!-- HANGUL SYLLABLE HIH -->
+ <map code="0xd7b0" name="1em"/><!-- HANGUL JUNGSEONG O-YEO -->
+ <map code="0xd7b1" name="1em"/><!-- HANGUL JUNGSEONG O-O-I -->
+ <map code="0xd7b2" name="1em"/><!-- HANGUL JUNGSEONG YO-A -->
+ <map code="0xd7b3" name="1em"/><!-- HANGUL JUNGSEONG YO-AE -->
+ <map code="0xd7b4" name="1em"/><!-- HANGUL JUNGSEONG YO-EO -->
+ <map code="0xd7b5" name="1em"/><!-- HANGUL JUNGSEONG U-YEO -->
+ <map code="0xd7b6" name="1em"/><!-- HANGUL JUNGSEONG U-I-I -->
+ <map code="0xd7b7" name="1em"/><!-- HANGUL JUNGSEONG YU-AE -->
+ <map code="0xd7b8" name="1em"/><!-- HANGUL JUNGSEONG YU-O -->
+ <map code="0xd7b9" name="1em"/><!-- HANGUL JUNGSEONG EU-A -->
+ <map code="0xd7ba" name="1em"/><!-- HANGUL JUNGSEONG EU-EO -->
+ <map code="0xd7bb" name="1em"/><!-- HANGUL JUNGSEONG EU-E -->
+ <map code="0xd7bc" name="1em"/><!-- HANGUL JUNGSEONG EU-O -->
+ <map code="0xd7bd" name="1em"/><!-- HANGUL JUNGSEONG I-YA-O -->
+ <map code="0xd7be" name="1em"/><!-- HANGUL JUNGSEONG I-YAE -->
+ <map code="0xd7bf" name="1em"/><!-- HANGUL JUNGSEONG I-YEO -->
+ <map code="0xd7c0" name="1em"/><!-- HANGUL JUNGSEONG I-YE -->
+ <map code="0xd7c1" name="1em"/><!-- HANGUL JUNGSEONG I-O-I -->
+ <map code="0xd7c2" name="1em"/><!-- HANGUL JUNGSEONG I-YO -->
+ <map code="0xd7c3" name="1em"/><!-- HANGUL JUNGSEONG I-YU -->
+ <map code="0xd7c4" name="1em"/><!-- HANGUL JUNGSEONG I-I -->
+ <map code="0xd7c5" name="1em"/><!-- HANGUL JUNGSEONG ARAEA-A -->
+ <map code="0xd7c6" name="1em"/><!-- HANGUL JUNGSEONG ARAEA-E -->
+ <map code="0xd7cb" name="1em"/><!-- HANGUL JONGSEONG NIEUN-RIEUL -->
+ <map code="0xd7cc" name="1em"/><!-- HANGUL JONGSEONG NIEUN-CHIEUCH -->
+ <map code="0xd7cd" name="1em"/><!-- HANGUL JONGSEONG SSANGTIKEUT -->
+ <map code="0xd7ce" name="1em"/><!-- HANGUL JONGSEONG SSANGTIKEUT-PIEUP -->
+ <map code="0xd7cf" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-PIEUP -->
+ <map code="0xd7d0" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-SIOS -->
+ <map code="0xd7d1" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK -->
+ <map code="0xd7d2" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-CIEUC -->
+ <map code="0xd7d3" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-CHIEUCH -->
+ <map code="0xd7d4" name="1em"/><!-- HANGUL JONGSEONG TIKEUT-THIEUTH -->
+ <map code="0xd7d5" name="1em"/><!-- HANGUL JONGSEONG RIEUL-SSANGKIYEOK -->
+ <map code="0xd7d6" name="1em"/><!-- HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH -->
+ <map code="0xd7d7" name="1em"/><!-- HANGUL JONGSEONG SSANGRIEUL-KHIEUKH -->
+ <map code="0xd7d8" name="1em"/><!-- HANGUL JONGSEONG RIEUL-MIEUM-HIEUH -->
+ <map code="0xd7d9" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT -->
+ <map code="0xd7da" name="1em"/><!-- HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH -->
+ <map code="0xd7db" name="1em"/><!-- HANGUL JONGSEONG RIEUL-YESIEUNG -->
+ <map code="0xd7dc" name="1em"/><!-- HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH -->
+ <map code="0xd7dd" name="1em"/><!-- HANGUL JONGSEONG KAPYEOUNRIEUL -->
+ <map code="0xd7de" name="1em"/><!-- HANGUL JONGSEONG MIEUM-NIEUN -->
+ <map code="0xd7df" name="1em"/><!-- HANGUL JONGSEONG MIEUM-SSANGNIEUN -->
+ <map code="0xd7e0" name="1em"/><!-- HANGUL JONGSEONG SSANGMIEUM -->
+ <map code="0xd7e1" name="1em"/><!-- HANGUL JONGSEONG MIEUM-PIEUP-SIOS -->
+ <map code="0xd7e2" name="1em"/><!-- HANGUL JONGSEONG MIEUM-CIEUC -->
+ <map code="0xd7e3" name="1em"/><!-- HANGUL JONGSEONG PIEUP-TIKEUT -->
+ <map code="0xd7e4" name="1em"/><!-- HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH -->
+ <map code="0xd7e5" name="1em"/><!-- HANGUL JONGSEONG PIEUP-MIEUM -->
+ <map code="0xd7e6" name="1em"/><!-- HANGUL JONGSEONG SSANGPIEUP -->
+ <map code="0xd7e7" name="1em"/><!-- HANGUL JONGSEONG PIEUP-SIOS-TIKEUT -->
+ <map code="0xd7e8" name="1em"/><!-- HANGUL JONGSEONG PIEUP-CIEUC -->
+ <map code="0xd7e9" name="1em"/><!-- HANGUL JONGSEONG PIEUP-CHIEUCH -->
+ <map code="0xd7ea" name="1em"/><!-- HANGUL JONGSEONG SIOS-MIEUM -->
+ <map code="0xd7eb" name="1em"/><!-- HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP -->
+ <map code="0xd7ec" name="1em"/><!-- HANGUL JONGSEONG SSANGSIOS-KIYEOK -->
+ <map code="0xd7ed" name="1em"/><!-- HANGUL JONGSEONG SSANGSIOS-TIKEUT -->
+ <map code="0xd7ee" name="1em"/><!-- HANGUL JONGSEONG SIOS-PANSIOS -->
+ <map code="0xd7ef" name="1em"/><!-- HANGUL JONGSEONG SIOS-CIEUC -->
+ <map code="0xd7f0" name="1em"/><!-- HANGUL JONGSEONG SIOS-CHIEUCH -->
+ <map code="0xd7f1" name="1em"/><!-- HANGUL JONGSEONG SIOS-THIEUTH -->
+ <map code="0xd7f2" name="1em"/><!-- HANGUL JONGSEONG SIOS-HIEUH -->
+ <map code="0xd7f3" name="1em"/><!-- HANGUL JONGSEONG PANSIOS-PIEUP -->
+ <map code="0xd7f4" name="1em"/><!-- HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP -->
+ <map code="0xd7f5" name="1em"/><!-- HANGUL JONGSEONG YESIEUNG-MIEUM -->
+ <map code="0xd7f6" name="1em"/><!-- HANGUL JONGSEONG YESIEUNG-HIEUH -->
+ <map code="0xd7f7" name="1em"/><!-- HANGUL JONGSEONG CIEUC-PIEUP -->
+ <map code="0xd7f8" name="1em"/><!-- HANGUL JONGSEONG CIEUC-SSANGPIEUP -->
+ <map code="0xd7f9" name="1em"/><!-- HANGUL JONGSEONG SSANGCIEUC -->
+ <map code="0xd7fa" name="1em"/><!-- HANGUL JONGSEONG PHIEUPH-SIOS -->
+ <map code="0xd7fb" name="1em"/><!-- HANGUL JONGSEONG PHIEUPH-THIEUTH -->
+
+ </cmap_format_12>
+ </cmap>
+
+ <loca>
+ <!-- The 'loca' table will be calculated by the compiler -->
+ </loca>
+
+ <glyf>
+ <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0" />
+ <TTGlyph name="1em" xMin="0" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="100" y="0" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="0" y="100" on="1" />
+ </contour>
+ <instructions><assembly></assembly></instructions>
+ </TTGlyph>
+ </glyf>
+
+ <name>
+ <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Hiragana
+ </namerecord>
+ <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Hiragana
+ </namerecord>
+ <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ SampleFont-Regular
+ </namerecord>
+ <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+ SampleFont-Regular
+ </namerecord>
+ </name>
+
+ <post>
+ <formatType value="3.0"/>
+ <italicAngle value="0.0"/>
+ <underlinePosition value="-75"/>
+ <underlineThickness value="50"/>
+ <isFixedPitch value="0"/>
+ <minMemType42 value="0"/>
+ <maxMemType42 value="0"/>
+ <minMemType1 value="0"/>
+ <maxMemType1 value="0"/>
+ </post>
+
+</ttFont>
diff --git a/tests/data/Japanese.ttf b/tests/data/Japanese.ttf
new file mode 100644
index 0000000..5fb9de0
--- /dev/null
+++ b/tests/data/Japanese.ttf
Binary files differ
diff --git a/tests/data/Japanese.ttx b/tests/data/Japanese.ttx
new file mode 100644
index 0000000..c7c5416
--- /dev/null
+++ b/tests/data/Japanese.ttx
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
+
+ <GlyphOrder>
+ <GlyphID id="0" name=".notdef"/>
+ <GlyphID id="1" name="1em"/>
+ </GlyphOrder>
+
+ <head>
+ <tableVersion value="1.0"/>
+ <fontRevision value="1.0"/>
+ <checkSumAdjustment value="0x640cdb2f"/>
+ <magicNumber value="0x5f0f3cf5"/>
+ <flags value="00000000 00000011"/>
+ <unitsPerEm value="100"/>
+ <created value="Fri Mar 17 07:26:00 2017"/>
+ <macStyle value="00000000 00000000"/>
+ <lowestRecPPEM value="7"/>
+ <fontDirectionHint value="2"/>
+ <glyphDataFormat value="0"/>
+ </head>
+
+ <hhea>
+ <tableVersion value="0x00010000"/>
+ <ascent value="0"/>
+ <descent value="0"/>
+ <lineGap value="0"/>
+ <caretSlopeRise value="1"/>
+ <caretSlopeRun value="0"/>
+ <caretOffset value="0"/>
+ <reserved0 value="0"/>
+ <reserved1 value="0"/>
+ <reserved2 value="0"/>
+ <reserved3 value="0"/>
+ <metricDataFormat value="0"/>
+ </hhea>
+
+ <maxp>
+ <tableVersion value="0x10000"/>
+ <maxZones value="0"/>
+ <maxTwilightPoints value="0"/>
+ <maxStorage value="0"/>
+ <maxFunctionDefs value="0"/>
+ <maxInstructionDefs value="0"/>
+ <maxStackElements value="0"/>
+ <maxSizeOfInstructions value="0"/>
+ <maxComponentElements value="0"/>
+ </maxp>
+
+ <OS_2>
+ <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
+ will be recalculated by the compiler -->
+ <version value="3"/>
+ <xAvgCharWidth value="594"/>
+ <usWeightClass value="400"/>
+ <usWidthClass value="5"/>
+ <fsType value="00000000 00001000"/>
+ <ySubscriptXSize value="650"/>
+ <ySubscriptYSize value="600"/>
+ <ySubscriptXOffset value="0"/>
+ <ySubscriptYOffset value="75"/>
+ <ySuperscriptXSize value="650"/>
+ <ySuperscriptYSize value="600"/>
+ <ySuperscriptXOffset value="0"/>
+ <ySuperscriptYOffset value="350"/>
+ <yStrikeoutSize value="50"/>
+ <yStrikeoutPosition value="300"/>
+ <sFamilyClass value="0"/>
+ <panose>
+ <bFamilyType value="0"/>
+ <bSerifStyle value="0"/>
+ <bWeight value="5"/>
+ <bProportion value="0"/>
+ <bContrast value="0"/>
+ <bStrokeVariation value="0"/>
+ <bArmStyle value="0"/>
+ <bLetterForm value="0"/>
+ <bMidline value="0"/>
+ <bXHeight value="0"/>
+ </panose>
+ <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+ <achVendID value="UKWN"/>
+ <fsSelection value="00000000 01000000"/>
+ <usFirstCharIndex value="32"/>
+ <usLastCharIndex value="122"/>
+ <sTypoAscender value="800"/>
+ <sTypoDescender value="-200"/>
+ <sTypoLineGap value="200"/>
+ <usWinAscent value="1000"/>
+ <usWinDescent value="200"/>
+ <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+ <sxHeight value="500"/>
+ <sCapHeight value="700"/>
+ <usDefaultChar value="0"/>
+ <usBreakChar value="32"/>
+ <usMaxContext value="0"/>
+ </OS_2>
+
+ <hmtx>
+ <mtx name=".notdef" width="50" lsb="0"/>
+ <mtx name="1em" width="100" lsb="0"/>
+ </hmtx>
+
+ <cmap>
+ <tableVersion version="0"/>
+ <cmap_format_12 format="12" reserved="0" length="6" nGroups="1" platformID="3" platEncID="10" language="0">
+ <!-- CJK Symbols -->
+ <map code="0x3000" name="1em" /> <!-- IDEOGRAPHIC SPACE -->
+ <map code="0x3001" name="1em" /> <!-- IDEOGRAPHIC COMMA -->
+ <map code="0x3002" name="1em" /> <!-- IDEOGRAPHIC FULL STOP -->
+
+ <!-- All Hiragana Ltters -->
+ <map code="0x3041" name="1em" /> <!-- HIRAGANA LETTER SMALL A -->
+ <map code="0x3042" name="1em" /> <!-- HIRAGANA LETTER A -->
+ <map code="0x3043" name="1em" /> <!-- HIRAGANA LETTER SMALL I -->
+ <map code="0x3044" name="1em" /> <!-- HIRAGANA LETTER I -->
+ <map code="0x3045" name="1em" /> <!-- HIRAGANA LETTER SMALL U -->
+ <map code="0x3046" name="1em" /> <!-- HIRAGANA LETTER U -->
+ <map code="0x3047" name="1em" /> <!-- HIRAGANA LETTER SMALL E -->
+ <map code="0x3048" name="1em" /> <!-- HIRAGANA LETTER E -->
+ <map code="0x3049" name="1em" /> <!-- HIRAGANA LETTER SMALL O -->
+ <map code="0x304A" name="1em" /> <!-- HIRAGANA LETTER O -->
+ <map code="0x304B" name="1em" /> <!-- HIRAGANA LETTER KA -->
+ <map code="0x304C" name="1em" /> <!-- HIRAGANA LETTER GA -->
+ <map code="0x304D" name="1em" /> <!-- HIRAGANA LETTER KI -->
+ <map code="0x304E" name="1em" /> <!-- HIRAGANA LETTER GI -->
+ <map code="0x304F" name="1em" /> <!-- HIRAGANA LETTER KU -->
+ <map code="0x3050" name="1em" /> <!-- HIRAGANA LETTER GU -->
+ <map code="0x3051" name="1em" /> <!-- HIRAGANA LETTER KE -->
+ <map code="0x3052" name="1em" /> <!-- HIRAGANA LETTER GE -->
+ <map code="0x3053" name="1em" /> <!-- HIRAGANA LETTER KO -->
+ <map code="0x3054" name="1em" /> <!-- HIRAGANA LETTER GO -->
+ <map code="0x3055" name="1em" /> <!-- HIRAGANA LETTER SA -->
+ <map code="0x3056" name="1em" /> <!-- HIRAGANA LETTER ZA -->
+ <map code="0x3057" name="1em" /> <!-- HIRAGANA LETTER SI -->
+ <map code="0x3058" name="1em" /> <!-- HIRAGANA LETTER ZI -->
+ <map code="0x3059" name="1em" /> <!-- HIRAGANA LETTER SU -->
+ <map code="0x305A" name="1em" /> <!-- HIRAGANA LETTER ZU -->
+ <map code="0x305B" name="1em" /> <!-- HIRAGANA LETTER SE -->
+ <map code="0x305C" name="1em" /> <!-- HIRAGANA LETTER ZE -->
+ <map code="0x305D" name="1em" /> <!-- HIRAGANA LETTER SO -->
+ <map code="0x305E" name="1em" /> <!-- HIRAGANA LETTER ZO -->
+ <map code="0x305F" name="1em" /> <!-- HIRAGANA LETTER TA -->
+ <map code="0x3060" name="1em" /> <!-- HIRAGANA LETTER DA -->
+ <map code="0x3061" name="1em" /> <!-- HIRAGANA LETTER TI -->
+ <map code="0x3062" name="1em" /> <!-- HIRAGANA LETTER DI -->
+ <map code="0x3063" name="1em" /> <!-- HIRAGANA LETTER SMALL TU -->
+ <map code="0x3064" name="1em" /> <!-- HIRAGANA LETTER TU -->
+ <map code="0x3065" name="1em" /> <!-- HIRAGANA LETTER DU -->
+ <map code="0x3066" name="1em" /> <!-- HIRAGANA LETTER TE -->
+ <map code="0x3067" name="1em" /> <!-- HIRAGANA LETTER DE -->
+ <map code="0x3068" name="1em" /> <!-- HIRAGANA LETTER TO -->
+ <map code="0x3069" name="1em" /> <!-- HIRAGANA LETTER DO -->
+ <map code="0x306A" name="1em" /> <!-- HIRAGANA LETTER NA -->
+ <map code="0x306B" name="1em" /> <!-- HIRAGANA LETTER NI -->
+ <map code="0x306C" name="1em" /> <!-- HIRAGANA LETTER NU -->
+ <map code="0x306D" name="1em" /> <!-- HIRAGANA LETTER NE -->
+ <map code="0x306E" name="1em" /> <!-- HIRAGANA LETTER NO -->
+ <map code="0x306F" name="1em" /> <!-- HIRAGANA LETTER HA -->
+ <map code="0x3070" name="1em" /> <!-- HIRAGANA LETTER BA -->
+ <map code="0x3071" name="1em" /> <!-- HIRAGANA LETTER PA -->
+ <map code="0x3072" name="1em" /> <!-- HIRAGANA LETTER HI -->
+ <map code="0x3073" name="1em" /> <!-- HIRAGANA LETTER BI -->
+ <map code="0x3074" name="1em" /> <!-- HIRAGANA LETTER PI -->
+ <map code="0x3075" name="1em" /> <!-- HIRAGANA LETTER HU -->
+ <map code="0x3076" name="1em" /> <!-- HIRAGANA LETTER BU -->
+ <map code="0x3077" name="1em" /> <!-- HIRAGANA LETTER PU -->
+ <map code="0x3078" name="1em" /> <!-- HIRAGANA LETTER HE -->
+ <map code="0x3079" name="1em" /> <!-- HIRAGANA LETTER BE -->
+ <map code="0x307A" name="1em" /> <!-- HIRAGANA LETTER PE -->
+ <map code="0x307B" name="1em" /> <!-- HIRAGANA LETTER HO -->
+ <map code="0x307C" name="1em" /> <!-- HIRAGANA LETTER BO -->
+ <map code="0x307D" name="1em" /> <!-- HIRAGANA LETTER PO -->
+ <map code="0x307E" name="1em" /> <!-- HIRAGANA LETTER MA -->
+ <map code="0x307F" name="1em" /> <!-- HIRAGANA LETTER MI -->
+ <map code="0x3080" name="1em" /> <!-- HIRAGANA LETTER MU -->
+ <map code="0x3081" name="1em" /> <!-- HIRAGANA LETTER ME -->
+ <map code="0x3082" name="1em" /> <!-- HIRAGANA LETTER MO -->
+ <map code="0x3083" name="1em" /> <!-- HIRAGANA LETTER SMALL YA -->
+ <map code="0x3084" name="1em" /> <!-- HIRAGANA LETTER YA -->
+ <map code="0x3085" name="1em" /> <!-- HIRAGANA LETTER SMALL YU -->
+ <map code="0x3086" name="1em" /> <!-- HIRAGANA LETTER YU -->
+ <map code="0x3087" name="1em" /> <!-- HIRAGANA LETTER SMALL YO -->
+ <map code="0x3088" name="1em" /> <!-- HIRAGANA LETTER YO -->
+ <map code="0x3089" name="1em" /> <!-- HIRAGANA LETTER RA -->
+ <map code="0x308A" name="1em" /> <!-- HIRAGANA LETTER RI -->
+ <map code="0x308B" name="1em" /> <!-- HIRAGANA LETTER RU -->
+ <map code="0x308C" name="1em" /> <!-- HIRAGANA LETTER RE -->
+ <map code="0x308D" name="1em" /> <!-- HIRAGANA LETTER RO -->
+ <map code="0x308E" name="1em" /> <!-- HIRAGANA LETTER SMALL WA -->
+ <map code="0x308F" name="1em" /> <!-- HIRAGANA LETTER WA -->
+ <map code="0x3090" name="1em" /> <!-- HIRAGANA LETTER WI -->
+ <map code="0x3091" name="1em" /> <!-- HIRAGANA LETTER WE -->
+ <map code="0x3092" name="1em" /> <!-- HIRAGANA LETTER WO -->
+ <map code="0x3093" name="1em" /> <!-- HIRAGANA LETTER N -->
+ <map code="0x3094" name="1em" /> <!-- HIRAGANA LETTER VU -->
+ <map code="0x3095" name="1em" /> <!-- HIRAGANA LETTER SMALL KA -->
+ <map code="0x3096" name="1em" /> <!-- HIRAGANA LETTER SMALL KE -->
+ <map code="0x3099" name="1em" /> <!-- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK -->
+ <map code="0x309A" name="1em" /> <!-- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -->
+ <map code="0x309B" name="1em" /> <!-- KATAKANA-HIRAGANA VOICED SOUND MARK -->
+ <map code="0x309C" name="1em" /> <!-- KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -->
+ <map code="0x309D" name="1em" /> <!-- HIRAGANA ITERATION MARK -->
+ <map code="0x309E" name="1em" /> <!-- HIRAGANA VOICED ITERATION MARK -->
+ <map code="0x309F" name="1em" /> <!-- HIRAGANA DIGRAPH YORI -->
+
+ <!-- All Hiragana Ltters -->
+ <map code="0x30A0" name="1em" /> <!-- KATAKANA-HIRAGANA DOUBLE HYPHEN -->
+ <map code="0x30A1" name="1em" /> <!-- KATAKANA LETTER SMALL A -->
+ <map code="0x30A2" name="1em" /> <!-- KATAKANA LETTER A -->
+ <map code="0x30A3" name="1em" /> <!-- KATAKANA LETTER SMALL I -->
+ <map code="0x30A4" name="1em" /> <!-- KATAKANA LETTER I -->
+ <map code="0x30A5" name="1em" /> <!-- KATAKANA LETTER SMALL U -->
+ <map code="0x30A6" name="1em" /> <!-- KATAKANA LETTER U -->
+ <map code="0x30A7" name="1em" /> <!-- KATAKANA LETTER SMALL E -->
+ <map code="0x30A8" name="1em" /> <!-- KATAKANA LETTER E -->
+ <map code="0x30A9" name="1em" /> <!-- KATAKANA LETTER SMALL O -->
+ <map code="0x30AA" name="1em" /> <!-- KATAKANA LETTER O -->
+ <map code="0x30AB" name="1em" /> <!-- KATAKANA LETTER KA -->
+ <map code="0x30AC" name="1em" /> <!-- KATAKANA LETTER GA -->
+ <map code="0x30AD" name="1em" /> <!-- KATAKANA LETTER KI -->
+ <map code="0x30AE" name="1em" /> <!-- KATAKANA LETTER GI -->
+ <map code="0x30AF" name="1em" /> <!-- KATAKANA LETTER KU -->
+ <map code="0x30B0" name="1em" /> <!-- KATAKANA LETTER GU -->
+ <map code="0x30B1" name="1em" /> <!-- KATAKANA LETTER KE -->
+ <map code="0x30B2" name="1em" /> <!-- KATAKANA LETTER GE -->
+ <map code="0x30B3" name="1em" /> <!-- KATAKANA LETTER KO -->
+ <map code="0x30B4" name="1em" /> <!-- KATAKANA LETTER GO -->
+ <map code="0x30B5" name="1em" /> <!-- KATAKANA LETTER SA -->
+ <map code="0x30B6" name="1em" /> <!-- KATAKANA LETTER ZA -->
+ <map code="0x30B7" name="1em" /> <!-- KATAKANA LETTER SI -->
+ <map code="0x30B8" name="1em" /> <!-- KATAKANA LETTER ZI -->
+ <map code="0x30B9" name="1em" /> <!-- KATAKANA LETTER SU -->
+ <map code="0x30BA" name="1em" /> <!-- KATAKANA LETTER ZU -->
+ <map code="0x30BB" name="1em" /> <!-- KATAKANA LETTER SE -->
+ <map code="0x30BC" name="1em" /> <!-- KATAKANA LETTER ZE -->
+ <map code="0x30BD" name="1em" /> <!-- KATAKANA LETTER SO -->
+ <map code="0x30BE" name="1em" /> <!-- KATAKANA LETTER ZO -->
+ <map code="0x30BF" name="1em" /> <!-- KATAKANA LETTER TA -->
+ <map code="0x30C0" name="1em" /> <!-- KATAKANA LETTER DA -->
+ <map code="0x30C1" name="1em" /> <!-- KATAKANA LETTER TI -->
+ <map code="0x30C2" name="1em" /> <!-- KATAKANA LETTER DI -->
+ <map code="0x30C3" name="1em" /> <!-- KATAKANA LETTER SMALL TU -->
+ <map code="0x30C4" name="1em" /> <!-- KATAKANA LETTER TU -->
+ <map code="0x30C5" name="1em" /> <!-- KATAKANA LETTER DU -->
+ <map code="0x30C6" name="1em" /> <!-- KATAKANA LETTER TE -->
+ <map code="0x30C7" name="1em" /> <!-- KATAKANA LETTER DE -->
+ <map code="0x30C8" name="1em" /> <!-- KATAKANA LETTER TO -->
+ <map code="0x30C9" name="1em" /> <!-- KATAKANA LETTER DO -->
+ <map code="0x30CA" name="1em" /> <!-- KATAKANA LETTER NA -->
+ <map code="0x30CB" name="1em" /> <!-- KATAKANA LETTER NI -->
+ <map code="0x30CC" name="1em" /> <!-- KATAKANA LETTER NU -->
+ <map code="0x30CD" name="1em" /> <!-- KATAKANA LETTER NE -->
+ <map code="0x30CE" name="1em" /> <!-- KATAKANA LETTER NO -->
+ <map code="0x30CF" name="1em" /> <!-- KATAKANA LETTER HA -->
+ <map code="0x30D0" name="1em" /> <!-- KATAKANA LETTER BA -->
+ <map code="0x30D1" name="1em" /> <!-- KATAKANA LETTER PA -->
+ <map code="0x30D2" name="1em" /> <!-- KATAKANA LETTER HI -->
+ <map code="0x30D3" name="1em" /> <!-- KATAKANA LETTER BI -->
+ <map code="0x30D4" name="1em" /> <!-- KATAKANA LETTER PI -->
+ <map code="0x30D5" name="1em" /> <!-- KATAKANA LETTER HU -->
+ <map code="0x30D6" name="1em" /> <!-- KATAKANA LETTER BU -->
+ <map code="0x30D7" name="1em" /> <!-- KATAKANA LETTER PU -->
+ <map code="0x30D8" name="1em" /> <!-- KATAKANA LETTER HE -->
+ <map code="0x30D9" name="1em" /> <!-- KATAKANA LETTER BE -->
+ <map code="0x30DA" name="1em" /> <!-- KATAKANA LETTER PE -->
+ <map code="0x30DB" name="1em" /> <!-- KATAKANA LETTER HO -->
+ <map code="0x30DC" name="1em" /> <!-- KATAKANA LETTER BO -->
+ <map code="0x30DD" name="1em" /> <!-- KATAKANA LETTER PO -->
+ <map code="0x30DE" name="1em" /> <!-- KATAKANA LETTER MA -->
+ <map code="0x30DF" name="1em" /> <!-- KATAKANA LETTER MI -->
+ <map code="0x30E0" name="1em" /> <!-- KATAKANA LETTER MU -->
+ <map code="0x30E1" name="1em" /> <!-- KATAKANA LETTER ME -->
+ <map code="0x30E2" name="1em" /> <!-- KATAKANA LETTER MO -->
+ <map code="0x30E3" name="1em" /> <!-- KATAKANA LETTER SMALL YA -->
+ <map code="0x30E4" name="1em" /> <!-- KATAKANA LETTER YA -->
+ <map code="0x30E5" name="1em" /> <!-- KATAKANA LETTER SMALL YU -->
+ <map code="0x30E6" name="1em" /> <!-- KATAKANA LETTER YU -->
+ <map code="0x30E7" name="1em" /> <!-- KATAKANA LETTER SMALL YO -->
+ <map code="0x30E8" name="1em" /> <!-- KATAKANA LETTER YO -->
+ <map code="0x30E9" name="1em" /> <!-- KATAKANA LETTER RA -->
+ <map code="0x30EA" name="1em" /> <!-- KATAKANA LETTER RI -->
+ <map code="0x30EB" name="1em" /> <!-- KATAKANA LETTER RU -->
+ <map code="0x30EC" name="1em" /> <!-- KATAKANA LETTER RE -->
+ <map code="0x30ED" name="1em" /> <!-- KATAKANA LETTER RO -->
+ <map code="0x30EE" name="1em" /> <!-- KATAKANA LETTER SMALL WA -->
+ <map code="0x30EF" name="1em" /> <!-- KATAKANA LETTER WA -->
+ <map code="0x30F0" name="1em" /> <!-- KATAKANA LETTER WI -->
+ <map code="0x30F1" name="1em" /> <!-- KATAKANA LETTER WE -->
+ <map code="0x30F2" name="1em" /> <!-- KATAKANA LETTER WO -->
+ <map code="0x30F3" name="1em" /> <!-- KATAKANA LETTER N -->
+ <map code="0x30F4" name="1em" /> <!-- KATAKANA LETTER VU -->
+ <map code="0x30F5" name="1em" /> <!-- KATAKANA LETTER SMALL KA -->
+ <map code="0x30F6" name="1em" /> <!-- KATAKANA LETTER SMALL KE -->
+ <map code="0x30F7" name="1em" /> <!-- KATAKANA LETTER VA -->
+ <map code="0x30F8" name="1em" /> <!-- KATAKANA LETTER VI -->
+ <map code="0x30F9" name="1em" /> <!-- KATAKANA LETTER VE -->
+ <map code="0x30FA" name="1em" /> <!-- KATAKANA LETTER VO -->
+ <map code="0x30FB" name="1em" /> <!-- KATAKANA MIDDLE DOT -->
+ <map code="0x30FC" name="1em" /> <!-- KATAKANA-HIRAGANA PROLONGED SOUND MARK -->
+ <map code="0x30FD" name="1em" /> <!-- KATAKANA ITERATION MARK -->
+ <map code="0x30FE" name="1em" /> <!-- KATAKANA VOICED ITERATION MARK -->
+ <map code="0x30FF" name="1em" /> <!-- KATAKANA DIGRAPH KOTO -->
+
+ <!-- Random Han characters used for testing -->
+ <map code="0x5929" name="1em" /> <!-- 天 -->
+ <map code="0x65E5" name="1em" /> <!-- æ—¥ -->
+ <map code="0x6674" name="1em" /> <!-- æ™´ -->
+ <map code="0x672C" name="1em" /> <!-- 本 -->
+
+ </cmap_format_12>
+ </cmap>
+
+ <loca>
+ <!-- The 'loca' table will be calculated by the compiler -->
+ </loca>
+
+ <glyf>
+ <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0" />
+ <TTGlyph name="1em" xMin="0" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="100" y="0" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="0" y="100" on="1" />
+ </contour>
+ <instructions><assembly></assembly></instructions>
+ </TTGlyph>
+ </glyf>
+
+ <name>
+ <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Hiragana
+ </namerecord>
+ <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Hiragana
+ </namerecord>
+ <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ SampleFont-Regular
+ </namerecord>
+ <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+ SampleFont-Regular
+ </namerecord>
+ </name>
+
+ <post>
+ <formatType value="3.0"/>
+ <italicAngle value="0.0"/>
+ <underlinePosition value="-75"/>
+ <underlineThickness value="50"/>
+ <isFixedPitch value="0"/>
+ <minMemType42 value="0"/>
+ <maxMemType42 value="0"/>
+ <minMemType1 value="0"/>
+ <maxMemType1 value="0"/>
+ </post>
+
+</ttFont>
diff --git a/tests/data/OvershootTest.ttf b/tests/data/OvershootTest.ttf
new file mode 100644
index 0000000..fb113c3
--- /dev/null
+++ b/tests/data/OvershootTest.ttf
Binary files differ
diff --git a/tests/data/OvershootTest.ttx b/tests/data/OvershootTest.ttx
new file mode 100644
index 0000000..8f6c88c
--- /dev/null
+++ b/tests/data/OvershootTest.ttx
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
+
+ <GlyphOrder>
+ <GlyphID id="0" name=".notdef"/>
+ <GlyphID id="1" name="1em"/>
+ <GlyphID id="2" name="1em_right_0.5em"/>
+ <GlyphID id="3" name="1em_right_1em"/>
+ <GlyphID id="4" name="1em_right_1.5em"/>
+ <GlyphID id="5" name="1em_left_0.5em"/>
+ <GlyphID id="6" name="1em_left_1em"/>
+ <GlyphID id="7" name="1em_left_1.5em"/>
+ </GlyphOrder>
+
+ <head>
+ <tableVersion value="1.0"/>
+ <fontRevision value="1.0"/>
+ <checkSumAdjustment value="0x640cdb2f"/>
+ <magicNumber value="0x5f0f3cf5"/>
+ <flags value="00000000 00000011"/>
+ <unitsPerEm value="100"/>
+ <created value="Fri Mar 17 07:26:00 2017"/>
+ <macStyle value="00000000 00000000"/>
+ <lowestRecPPEM value="7"/>
+ <fontDirectionHint value="2"/>
+ <glyphDataFormat value="0"/>
+ </head>
+
+ <hhea>
+ <tableVersion value="0x00010000"/>
+ <ascent value="800"/>
+ <descent value="-200"/>
+ <lineGap value="0"/>
+ <caretSlopeRise value="1"/>
+ <caretSlopeRun value="0"/>
+ <caretOffset value="0"/>
+ <reserved0 value="0"/>
+ <reserved1 value="0"/>
+ <reserved2 value="0"/>
+ <reserved3 value="0"/>
+ <metricDataFormat value="0"/>
+ </hhea>
+
+ <maxp>
+ <tableVersion value="0x10000"/>
+ <maxZones value="0"/>
+ <maxTwilightPoints value="0"/>
+ <maxStorage value="0"/>
+ <maxFunctionDefs value="0"/>
+ <maxInstructionDefs value="0"/>
+ <maxStackElements value="0"/>
+ <maxSizeOfInstructions value="0"/>
+ <maxComponentElements value="0"/>
+ </maxp>
+
+ <OS_2>
+ <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
+ will be recalculated by the compiler -->
+ <version value="3"/>
+ <xAvgCharWidth value="594"/>
+ <usWeightClass value="400"/>
+ <usWidthClass value="5"/>
+ <fsType value="00000000 00001000"/>
+ <ySubscriptXSize value="650"/>
+ <ySubscriptYSize value="600"/>
+ <ySubscriptXOffset value="0"/>
+ <ySubscriptYOffset value="75"/>
+ <ySuperscriptXSize value="650"/>
+ <ySuperscriptYSize value="600"/>
+ <ySuperscriptXOffset value="0"/>
+ <ySuperscriptYOffset value="350"/>
+ <yStrikeoutSize value="50"/>
+ <yStrikeoutPosition value="300"/>
+ <sFamilyClass value="0"/>
+ <panose>
+ <bFamilyType value="0"/>
+ <bSerifStyle value="0"/>
+ <bWeight value="5"/>
+ <bProportion value="0"/>
+ <bContrast value="0"/>
+ <bStrokeVariation value="0"/>
+ <bArmStyle value="0"/>
+ <bLetterForm value="0"/>
+ <bMidline value="0"/>
+ <bXHeight value="0"/>
+ </panose>
+ <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+ <achVendID value="UKWN"/>
+ <fsSelection value="00000000 01000000"/>
+ <usFirstCharIndex value="32"/>
+ <usLastCharIndex value="122"/>
+ <sTypoAscender value="800"/>
+ <sTypoDescender value="-200"/>
+ <sTypoLineGap value="200"/>
+ <usWinAscent value="1000"/>
+ <usWinDescent value="200"/>
+ <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+ <sxHeight value="500"/>
+ <sCapHeight value="700"/>
+ <usDefaultChar value="0"/>
+ <usBreakChar value="32"/>
+ <usMaxContext value="0"/>
+ </OS_2>
+
+ <hmtx>
+ <mtx name=".notdef" width="50" lsb="0"/>
+ <mtx name="1em" width="100" lsb="0"/>
+ <mtx name="1em_right_0.5em" width="100" lsb="0"/>
+ <mtx name="1em_right_1em" width="100" lsb="0"/>
+ <mtx name="1em_right_1.5em" width="100" lsb="0"/>
+ <mtx name="1em_left_0.5em" width="100" lsb="-50"/>
+ <mtx name="1em_left_1em" width="100" lsb="-100"/>
+ <mtx name="1em_left_1.5em" width="100" lsb="-150"/>
+ </hmtx>
+
+ <cmap>
+ <tableVersion version="0"/>
+ <cmap_format_12 format="12" reserved="0" length="6" nGroups="1" platformID="3" platEncID="10" language="0">
+ <map code="0x0061" name="1em" /> <!-- a -->
+ <map code="0x0062" name="1em_right_0.5em" /> <!-- b -->
+ <map code="0x0063" name="1em_right_1em" /> <!-- c -->
+ <map code="0x0064" name="1em_right_1.5em" /> <!-- d -->
+ <map code="0x0065" name="1em_left_0.5em" /> <!-- e -->
+ <map code="0x0066" name="1em_left_1em" /> <!-- f -->
+ <map code="0x0067" name="1em_left_1.5em" /> <!-- g -->
+ </cmap_format_12>
+ </cmap>
+
+ <loca>
+ <!-- The 'loca' table will be calculated by the compiler -->
+ </loca>
+
+ <glyf>
+ <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0" />
+ <TTGlyph name="1em" xMin="0" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="0" y="100" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="100" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_right_0.5em" xMin="0" yMin="0" xMax="150" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="0" y="100" on="1" />
+ <pt x="150" y="100" on="1" />
+ <pt x="150" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_right_1em" xMin="0" yMin="0" xMax="200" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="0" y="100" on="1" />
+ <pt x="200" y="100" on="1" />
+ <pt x="200" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_right_1.5em" xMin="0" yMin="0" xMax="250" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1" />
+ <pt x="0" y="100" on="1" />
+ <pt x="250" y="100" on="1" />
+ <pt x="250" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_left_0.5em" xMin="-50" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="-50" y="0" on="1" />
+ <pt x="-50" y="100" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="100" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_left_1em" xMin="-100" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="-100" y="0" on="1" />
+ <pt x="-100" y="100" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="100" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ <TTGlyph name="1em_left_1.5em" xMin="-150" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="-150" y="0" on="1" />
+ <pt x="-150" y="100" on="1" />
+ <pt x="100" y="100" on="1" />
+ <pt x="100" y="0" on="1" />
+ </contour>
+ <instructions />
+ </TTGlyph>
+ </glyf>
+
+ <name>
+ <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Overshoot
+ </namerecord>
+ <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ Font for Overshoot
+ </namerecord>
+ <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
+ SampleFont-Regular
+ </namerecord>
+ <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+ SampleFont-Regular
+ </namerecord>
+ </name>
+
+ <post>
+ <formatType value="3.0"/>
+ <italicAngle value="0.0"/>
+ <underlinePosition value="-75"/>
+ <underlineThickness value="50"/>
+ <isFixedPitch value="0"/>
+ <minMemType42 value="0"/>
+ <maxMemType42 value="0"/>
+ <minMemType1 value="0"/>
+ <maxMemType1 value="0"/>
+ </post>
+
+</ttFont>
diff --git a/tests/data/WeightEqualsEmVariableFont.ttf b/tests/data/WeightEqualsEmVariableFont.ttf
new file mode 100644
index 0000000..bbbf02e
--- /dev/null
+++ b/tests/data/WeightEqualsEmVariableFont.ttf
Binary files differ
diff --git a/tests/data/WeightEqualsEmVariableFont.ttx b/tests/data/WeightEqualsEmVariableFont.ttx
new file mode 100644
index 0000000..86d7477
--- /dev/null
+++ b/tests/data/WeightEqualsEmVariableFont.ttx
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
+
+ <GlyphOrder>
+ <GlyphID id="0" name=".notdef"/>
+ <GlyphID id="1" name="1em"/>
+ </GlyphOrder>
+
+ <head>
+ <tableVersion value="1.0"/>
+ <fontRevision value="1.0"/>
+ <checkSumAdjustment value="0x640cdb2f"/>
+ <magicNumber value="0x5f0f3cf5"/>
+ <flags value="00000000 00000011"/>
+ <unitsPerEm value="100"/>
+ <created value="Thu Feb 22 10:04:28 2018"/>
+ <macStyle value="00000000 00000000"/>
+ <lowestRecPPEM value="7"/>
+ <fontDirectionHint value="2"/>
+ <glyphDataFormat value="0"/>
+ </head>
+
+ <hhea>
+ <tableVersion value="0x00010000"/>
+ <ascent value="100"/>
+ <descent value="0"/>
+ <lineGap value="0"/>
+ <caretSlopeRise value="1"/>
+ <caretSlopeRun value="0"/>
+ <caretOffset value="0"/>
+ <reserved0 value="0"/>
+ <reserved1 value="0"/>
+ <reserved2 value="0"/>
+ <reserved3 value="0"/>
+ <metricDataFormat value="0"/>
+ </hhea>
+
+ <maxp>
+ <tableVersion value="0x10000"/>
+ <maxZones value="0"/>
+ <maxTwilightPoints value="0"/>
+ <maxStorage value="0"/>
+ <maxFunctionDefs value="0"/>
+ <maxInstructionDefs value="0"/>
+ <maxStackElements value="0"/>
+ <maxSizeOfInstructions value="0"/>
+ <maxComponentElements value="0"/>
+ </maxp>
+
+ <OS_2>
+ <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
+ will be recalculated by the compiler -->
+ <version value="3"/>
+ <xAvgCharWidth value="594"/>
+ <usWeightClass value="100"/>
+ <usWidthClass value="5"/>
+ <fsType value="00000000 00001000"/>
+ <ySubscriptXSize value="650"/>
+ <ySubscriptYSize value="600"/>
+ <ySubscriptXOffset value="0"/>
+ <ySubscriptYOffset value="75"/>
+ <ySuperscriptXSize value="650"/>
+ <ySuperscriptYSize value="600"/>
+ <ySuperscriptXOffset value="0"/>
+ <ySuperscriptYOffset value="350"/>
+ <yStrikeoutSize value="50"/>
+ <yStrikeoutPosition value="300"/>
+ <sFamilyClass value="0"/>
+ <panose>
+ <bFamilyType value="0"/>
+ <bSerifStyle value="0"/>
+ <bWeight value="5"/>
+ <bProportion value="0"/>
+ <bContrast value="0"/>
+ <bStrokeVariation value="0"/>
+ <bArmStyle value="0"/>
+ <bLetterForm value="0"/>
+ <bMidline value="0"/>
+ <bXHeight value="0"/>
+ </panose>
+ <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+ <achVendID value="UKWN"/>
+ <fsSelection value="00000000 01000000"/>
+ <usFirstCharIndex value="32"/>
+ <usLastCharIndex value="122"/>
+ <sTypoAscender value="800"/>
+ <sTypoDescender value="-200"/>
+ <sTypoLineGap value="200"/>
+ <usWinAscent value="1000"/>
+ <usWinDescent value="200"/>
+ <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+ <sxHeight value="500"/>
+ <sCapHeight value="700"/>
+ <usDefaultChar value="0"/>
+ <usBreakChar value="32"/>
+ <usMaxContext value="0"/>
+ </OS_2>
+
+ <hmtx>
+ <mtx name=".notdef" width="50" lsb="93"/>
+ <mtx name="1em" width="0" lsb="0"/>
+ </hmtx>
+
+ <cmap>
+ <tableVersion version="0"/>
+ <cmap_format_4 platformID="0" platEncID="3" language="0">
+ <map code="0x0061" name="1em" /> <!-- a -->
+ <map code="0x0062" name="1em" /> <!-- b -->
+ <map code="0x0063" name="1em" /> <!-- c -->
+ <map code="0x0064" name="1em" /> <!-- d -->
+ <map code="0x0065" name="1em" /> <!-- e -->
+ <map code="0x0066" name="1em" /> <!-- f -->
+ <map code="0x0067" name="1em" /> <!-- g -->
+ <map code="0x0068" name="1em" /> <!-- h -->
+ <map code="0x0069" name="1em" /> <!-- i -->
+ <map code="0x006A" name="1em" /> <!-- j -->
+ <map code="0x006B" name="1em" /> <!-- k -->
+ <map code="0x006C" name="1em" /> <!-- l -->
+ <map code="0x006D" name="1em" /> <!-- m -->
+ <map code="0x006E" name="1em" /> <!-- n -->
+ <map code="0x006F" name="1em" /> <!-- o -->
+ <map code="0x0070" name="1em" /> <!-- p -->
+ <map code="0x0071" name="1em" /> <!-- q -->
+ <map code="0x0072" name="1em" /> <!-- r -->
+ <map code="0x0073" name="1em" /> <!-- s -->
+ <map code="0x0074" name="1em" /> <!-- t -->
+ <map code="0x0075" name="1em" /> <!-- u -->
+ <map code="0x0076" name="1em" /> <!-- v -->
+ <map code="0x0077" name="1em" /> <!-- w -->
+ <map code="0x0078" name="1em" /> <!-- x -->
+ <map code="0x0079" name="1em" /> <!-- y -->
+ <map code="0x007A" name="1em" /> <!-- z -->
+ </cmap_format_4>
+ </cmap>
+
+ <loca>
+ <!-- The 'loca' table will be calculated by the compiler -->
+ </loca>
+
+ <glyf>
+ <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0" />
+ <TTGlyph name="1em" xMin="0" yMin="0" xMax="100" yMax="100">
+ <contour>
+ <pt x="0" y="0" on="1"/>
+ <pt x="0" y="50" on="1"/>
+ <pt x="0" y="100" on="1"/>
+ </contour>
+ <instructions />
+ </TTGlyph>
+ </glyf>
+
+ <HVAR>
+ <Version value="0x00010000"/>
+ <VarStore Format="1">
+ <Format value="1" />
+ <VarRegionList>
+ <Region index="0">
+ <VarRegionAxis index="0">
+ <StartCoord value="0" />
+ <PeakCoord value="1.0" />
+ <EndCoord value="1.0" />
+ </VarRegionAxis>
+ <VarRegionAxis index="1">
+ <StartCoord value="0" />
+ <PeakCoord value="1.0" />
+ <EndCoord value="1.0" />
+ </VarRegionAxis>
+ </Region>
+ </VarRegionList>
+ <VarData index="0">
+ <NumShorts value="0" />
+ <VarRegionIndex index="0" value="0" />
+ <Item index="0" value="[100]" />
+ </VarData>
+ </VarStore>
+ <AdvWidthMap>
+ <Map glyph=".notdef" outer="0" inner="0" />
+ <Map glyph="1em" outer="0" inner="0" />
+ </AdvWidthMap>
+ </HVAR>
+
+ <fvar>
+ <Axis>
+ <AxisTag>wght</AxisTag>
+ <Flags>0x0</Flags>
+ <MinValue>0.0</MinValue>
+ <DefaultValue>400.0</DefaultValue>
+ <MaxValue>1000.0</MaxValue>
+ <AxisNameID>256</AxisNameID>
+ </Axis>
+ <Axis>
+ <AxisTag>ital</AxisTag>
+ <Flags>0x0</Flags>
+ <MinValue>0.0</MinValue>
+ <DefaultValue>0.0</DefaultValue>
+ <MaxValue>1.0</MaxValue>
+ <AxisNameID>256</AxisNameID>
+ </Axis>
+ </fvar>
+
+ <gvar>
+ <version value="1" />
+ <reserved value="0" />
+ <glyphVariations glyph="1em">
+ <tuple>
+ <coord axis="wght" value="1.0" />
+ <delta pt="0" x="0" y="0" />
+ <delta pt="1" x="100" y="0" />
+ <delta pt="2" x="0" y="0" />
+ <!-- deltas for phantom points -->
+ <delta pt="3" x="0" y="0" /> <!-- (left, 0) -->
+ <delta pt="4" x="100" y="0" /> <!-- (right, 0) -->
+ <delta pt="5" x="0" y="0" /> <!-- (0, top) -->
+ <delta pt="6" x="0" y="0" /> <!-- (0, bottom) -->
+ </tuple>
+ </glyphVariations>
+ </gvar>
+
+ <name>
+ <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
+ Copyright (C) 2018 The Android Open Source Project
+ </namerecord>
+ <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+ Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+ Sample Font
+ </namerecord>
+ <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+ SampleFont-Regular
+ </namerecord>
+ <namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ </namerecord>
+ <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
+ http://www.apache.org/licenses/LICENSE-2.0
+ </namerecord>
+ <namerecord nameID="256" platformID="3" platEncID="1" langID="0x409">
+ Weight
+ </namerecord>
+ </name>
+
+ <post>
+ <formatType value="3.0"/>
+ <italicAngle value="0.0"/>
+ <underlinePosition value="-75"/>
+ <underlineThickness value="50"/>
+ <isFixedPitch value="0"/>
+ <minMemType42 value="0"/>
+ <maxMemType42 value="0"/>
+ <minMemType1 value="0"/>
+ <maxMemType1 value="0"/>
+ </post>
+
+</ttFont>
diff --git a/tests/perftests/Android.bp b/tests/perftests/Android.bp
index dcf5b98..c4260b3 100644
--- a/tests/perftests/Android.bp
+++ b/tests/perftests/Android.bp
@@ -37,6 +37,7 @@ cc_benchmark {
"libminikin-tests-util",
"libminikin",
"libxml2",
+ "aconfig_text_flags_c_lib",
],
shared_libs: [
@@ -44,6 +45,8 @@ cc_benchmark {
"libharfbuzz_ng",
"libicu",
"liblog",
-
+ "libcutils",
+ "aconfig_text_flags_c_lib",
+ "server_configurable_flags",
],
}
diff --git a/tests/stresstest/Android.bp b/tests/stresstest/Android.bp
index d963a09..420a4b1 100644
--- a/tests/stresstest/Android.bp
+++ b/tests/stresstest/Android.bp
@@ -28,6 +28,7 @@ cc_test {
"libminikin-tests-util",
"libminikin",
"libxml2",
+ "aconfig_text_flags_c_lib",
],
// Shared libraries which are dependencies of minikin; these are not automatically
@@ -40,6 +41,9 @@ cc_test {
"liblog",
"libutils",
"libz",
+ "libcutils",
+ "aconfig_text_flags_c_lib",
+ "server_configurable_flags",
],
srcs: [
diff --git a/tests/unittest/Android.bp b/tests/unittest/Android.bp
index 9800416..5a822cd 100644
--- a/tests/unittest/Android.bp
+++ b/tests/unittest/Android.bp
@@ -29,6 +29,8 @@ cc_test {
"libminikin-tests-util",
"libminikin",
"libxml2",
+ "libflagtest",
+ "libbase_ndk",
],
// Shared libraries which are dependencies of minikin; these are not automatically
@@ -40,13 +42,15 @@ cc_test {
"liblog",
"libutils",
"libz",
+ "libcutils",
+ "aconfig_text_flags_c_lib",
+ "server_configurable_flags",
],
srcs: [
"AndroidLineBreakerHelperTest.cpp",
"BidiUtilsTest.cpp",
"BufferTest.cpp",
- "BoundsCacheTest.cpp",
"CmapCoverageTest.cpp",
"EmojiTest.cpp",
"FontTest.cpp",
@@ -71,6 +75,7 @@ cc_test {
"MeasuredTextTest.cpp",
"MeasurementTests.cpp",
"OptimalLineBreakerTest.cpp",
+ "ScriptUtilsTest.cpp",
"SparseBitSetTest.cpp",
"StringPieceTest.cpp",
"SystemFontsTest.cpp",
diff --git a/tests/unittest/BoundsCacheTest.cpp b/tests/unittest/BoundsCacheTest.cpp
deleted file mode 100644
index 8c727f9..0000000
--- a/tests/unittest/BoundsCacheTest.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <gtest/gtest.h>
-
-#include "minikin/BoundsCache.h"
-
-#include "FontTestUtils.h"
-#include "LocaleListCache.h"
-#include "UnicodeUtils.h"
-
-namespace minikin {
-
-class TestableBoundsCache : public BoundsCache {
-public:
- TestableBoundsCache(uint32_t maxEntries) : BoundsCache(maxEntries) {}
-};
-
-class BoundsCapture {
-public:
- BoundsCapture() {}
-
- void operator()(const MinikinRect& rect, float advance) {
- mRect = rect;
- mAdvance = advance;
- }
-
- const MinikinRect& rect() const { return mRect; }
- float advance() const { return mAdvance; }
-
-private:
- MinikinRect mRect;
- float mAdvance;
-};
-
-TEST(BoundsCacheTest, cacheHitTest) {
- auto text = utf8ToUtf16("android");
- Range range(0, text.size());
- MinikinPaint paint(buildFontCollection("Ascii.ttf"));
-
- TestableBoundsCache boundsCache(10);
-
- BoundsCapture bounds1;
- boundsCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, bounds1);
-
- BoundsCapture bounds2;
- boundsCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, bounds2);
-
- EXPECT_EQ(bounds1.rect(), bounds2.rect());
- EXPECT_EQ(bounds1.advance(), bounds2.advance());
-}
-
-TEST(BoundsCacheTest, cacheMissTest) {
- auto text1 = utf8ToUtf16("android");
- auto text2 = utf8ToUtf16("αβγδζ");
- MinikinPaint paint(buildFontCollection("Ascii.ttf"));
-
- TestableBoundsCache boundsCache(10);
-
- BoundsCapture bounds1;
- BoundsCapture bounds2;
-
- {
- SCOPED_TRACE("Different text");
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds1);
- boundsCache.getOrCreate(text2, Range(0, text2.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- EXPECT_NE(bounds1.rect(), bounds2.rect());
- EXPECT_NE(bounds1.advance(), bounds2.advance());
- }
- {
- SCOPED_TRACE("Different range");
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds1);
- boundsCache.getOrCreate(text1, Range(1, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- EXPECT_NE(bounds1.rect(), bounds2.rect());
- EXPECT_NE(bounds1.advance(), bounds2.advance());
- }
- {
- SCOPED_TRACE("Different collection");
- MinikinPaint paint1(buildFontCollection("Ascii.ttf"));
- paint1.size = 10.0f;
- paint1.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds1);
- MinikinPaint paint2(buildFontCollection("Emoji.ttf"));
- paint2.size = 10.0f;
- paint2.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- EXPECT_NE(bounds1.rect(), bounds2.rect());
- EXPECT_NE(bounds1.advance(), bounds2.advance());
- }
- {
- SCOPED_TRACE("Different size");
- auto collection = buildFontCollection("Ascii.ttf");
- MinikinPaint paint1(collection);
- paint1.size = 10.0f;
- paint1.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds1);
- MinikinPaint paint2(collection);
- paint2.size = 20.0f;
- paint2.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- EXPECT_NE(bounds1.rect(), bounds2.rect());
- EXPECT_NE(bounds1.advance(), bounds2.advance());
- }
- {
- SCOPED_TRACE("Different letter spacing");
- auto collection = buildFontCollection("Ascii.ttf");
- MinikinPaint paint1(collection);
- paint1.letterSpacing = 0.0f;
- paint1.size = 10.0f;
- paint1.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds1);
- MinikinPaint paint2(collection);
- paint2.letterSpacing = 1.0f;
- paint2.size = 10.0f;
- paint2.scaleX = 1.0f;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- EXPECT_NE(bounds1.rect(), bounds2.rect());
- EXPECT_NE(bounds1.advance(), bounds2.advance());
- }
-}
-
-TEST(BoundsCacheTest, cacheOverflowTest) {
- auto text = utf8ToUtf16("android");
- Range range(0, text.size());
- MinikinPaint paint(buildFontCollection("Ascii.ttf"));
-
- TestableBoundsCache boundsCache(5);
-
- BoundsCapture bounds1;
- boundsCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, bounds1);
-
- for (char c = 'a'; c <= 'z'; c++) {
- auto text1 = utf8ToUtf16(std::string(10, c));
- BoundsCapture bounds2;
- boundsCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, bounds2);
- }
-
- BoundsCapture bounds3;
- boundsCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, bounds3);
- EXPECT_EQ(bounds1.rect(), bounds3.rect());
- EXPECT_EQ(bounds1.advance(), bounds3.advance());
-}
-
-} // namespace minikin
diff --git a/tests/unittest/FontCollectionItemizeTest.cpp b/tests/unittest/FontCollectionItemizeTest.cpp
index 1723519..46f319d 100644
--- a/tests/unittest/FontCollectionItemizeTest.cpp
+++ b/tests/unittest/FontCollectionItemizeTest.cpp
@@ -113,7 +113,7 @@ std::vector<Run> itemize(const std::shared_ptr<FontCollection>& collection, cons
// Utility function to obtain font path associated with run.
std::string getFontName(const Run& run) {
EXPECT_NE(nullptr, run.fakedFont.font.get());
- return getBasename(run.fakedFont.font.get()->typeface()->GetFontPath());
+ return getBasename(run.fakedFont.typeface()->GetFontPath());
}
// Utility function to obtain LocaleList from string.
@@ -937,9 +937,10 @@ TEST(FontCollectionItemizeTest, itemize_LocaleScore) {
std::make_shared<FreeTypeMinikinFontForTest>(getTestFontPath(kNoGlyphFont));
std::vector<std::shared_ptr<Font>> fonts;
fonts.push_back(Font::Builder(firstFamilyMinikinFont).build());
- auto firstFamily = FontFamily::create(registerLocaleList("und"), FamilyVariant::DEFAULT,
- std::move(fonts), false /* isCustomFallback */,
- false /* isDefaultFallback */);
+ auto firstFamily =
+ FontFamily::create(registerLocaleList("und"), FamilyVariant::DEFAULT,
+ std::move(fonts), false /* isCustomFallback */,
+ false /* isDefaultFallback */, VariationFamilyType::None);
families.push_back(firstFamily);
// Prepare font families
@@ -954,7 +955,8 @@ TEST(FontCollectionItemizeTest, itemize_LocaleScore) {
fonts.push_back(Font::Builder(minikinFont).build());
auto family = FontFamily::create(
registerLocaleList(testCase.fontLocales[i]), FamilyVariant::DEFAULT,
- std::move(fonts), false /* isCustomFallback */, false /* isDefaultFallback */);
+ std::move(fonts), false /* isCustomFallback */, false /* isDefaultFallback */,
+ VariationFamilyType::None);
families.push_back(family);
fontLocaleIdxMap.insert(std::make_pair(minikinFont.get(), i));
}
@@ -966,11 +968,10 @@ TEST(FontCollectionItemizeTest, itemize_LocaleScore) {
// First family doesn't support U+9AA8 and others support it, so the first font should not
// be selected.
- EXPECT_NE(firstFamilyMinikinFont.get(), runs[0].fakedFont.font.get()->typeface().get());
+ EXPECT_NE(firstFamilyMinikinFont.get(), runs[0].fakedFont.typeface().get());
// Lookup used font family by MinikinFont*.
- const int usedLocaleIndex =
- fontLocaleIdxMap[runs[0].fakedFont.font.get()->typeface().get()];
+ const int usedLocaleIndex = fontLocaleIdxMap[runs[0].fakedFont.typeface().get()];
EXPECT_EQ(testCase.selectedFontIndex, usedLocaleIndex);
}
}
@@ -1648,7 +1649,7 @@ std::vector<ItemizeResult> itemizeEmojiAndFontPostScriptNames(const std::string&
std::vector<ItemizeResult> out;
for (const auto& run : runs) {
- auto psName = FontFileParser(run.fakedFont.font->baseFont()).getPostScriptName().value();
+ auto psName = FontFileParser(run.fakedFont.hbFont()).getPostScriptName().value();
out.push_back({run.start, run.end, psName});
}
return out;
diff --git a/tests/unittest/FontCollectionTest.cpp b/tests/unittest/FontCollectionTest.cpp
index b4933ab..28e6094 100644
--- a/tests/unittest/FontCollectionTest.cpp
+++ b/tests/unittest/FontCollectionTest.cpp
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-#include "minikin/FontCollection.h"
-
#include <gtest/gtest.h>
#include "FontTestUtils.h"
#include "FreeTypeMinikinFontForTest.h"
#include "MinikinInternal.h"
+#include "minikin/Constants.h"
+#include "minikin/FontCollection.h"
namespace minikin {
@@ -139,7 +139,7 @@ TEST(FontCollectionTest, createWithVariations) {
}
{
// New instance should be used for supported variation.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f}};
std::shared_ptr<FontCollection> newFc(
multiAxisFc->createCollectionWithVariation(variations));
EXPECT_NE(nullptr, newFc.get());
@@ -149,8 +149,8 @@ TEST(FontCollectionTest, createWithVariations) {
}
{
// New instance should be used for supported variation (multiple variations case).
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f},
- {MinikinFont::MakeTag('w', 'g', 'h', 't'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f},
+ {MakeTag('w', 'g', 'h', 't'), 1.0f}};
std::shared_ptr<FontCollection> newFc(
multiAxisFc->createCollectionWithVariation(variations));
EXPECT_NE(nullptr, newFc.get());
@@ -160,14 +160,14 @@ TEST(FontCollectionTest, createWithVariations) {
}
{
// Do not ceate new instance if none of variations are supported.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
EXPECT_EQ(nullptr, multiAxisFc->createCollectionWithVariation(variations));
EXPECT_EQ(nullptr, noAxisFc->createCollectionWithVariation(variations));
}
{
// At least one axis is supported, should create new instance.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f},
- {MinikinFont::MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f},
+ {MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
std::shared_ptr<FontCollection> newFc(
multiAxisFc->createCollectionWithVariation(variations));
EXPECT_NE(nullptr, newFc.get());
@@ -242,8 +242,8 @@ TEST(FontCollectionTest, bufferTest) {
EXPECT_EQ(1u, copied.size());
ASSERT_EQ(2u, copied[0]->getSupportedAxesCount());
// mSupportedAxes must be sorted.
- EXPECT_EQ(MinikinFont::MakeTag('w', 'd', 't', 'h'), copied[0]->getSupportedAxisAt(0));
- EXPECT_EQ(MinikinFont::MakeTag('w', 'g', 'h', 't'), copied[0]->getSupportedAxisAt(1));
+ EXPECT_EQ(MakeTag('w', 'd', 't', 'h'), copied[0]->getSupportedAxisAt(0));
+ EXPECT_EQ(MakeTag('w', 'g', 'h', 't'), copied[0]->getSupportedAxisAt(1));
std::vector<uint8_t> newBuffer = writeToBuffer(copied);
EXPECT_EQ(buffer, newBuffer);
}
diff --git a/tests/unittest/FontFamilyTest.cpp b/tests/unittest/FontFamilyTest.cpp
index 3230c27..b487c87 100644
--- a/tests/unittest/FontFamilyTest.cpp
+++ b/tests/unittest/FontFamilyTest.cpp
@@ -22,6 +22,7 @@
#include "FreeTypeMinikinFontForTest.h"
#include "LocaleListCache.h"
#include "MinikinInternal.h"
+#include "minikin/Constants.h"
#include "minikin/FontFamily.h"
#include "minikin/LocaleList.h"
@@ -647,7 +648,7 @@ TEST_F(FontFamilyTest, createFamilyWithVariationTest) {
}
{
// New instance should be used for supported variation.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f}};
std::shared_ptr<FontFamily> newFamily(
multiAxisFamily->createFamilyWithVariation(variations));
EXPECT_NE(nullptr, newFamily.get());
@@ -656,8 +657,8 @@ TEST_F(FontFamilyTest, createFamilyWithVariationTest) {
}
{
// New instance should be used for supported variation. (multiple variations case)
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f},
- {MinikinFont::MakeTag('w', 'g', 'h', 't'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f},
+ {MakeTag('w', 'g', 'h', 't'), 1.0f}};
std::shared_ptr<FontFamily> newFamily(
multiAxisFamily->createFamilyWithVariation(variations));
EXPECT_NE(nullptr, newFamily.get());
@@ -666,14 +667,14 @@ TEST_F(FontFamilyTest, createFamilyWithVariationTest) {
}
{
// Do not ceate new instance if none of variations are supported.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
EXPECT_EQ(nullptr, multiAxisFamily->createFamilyWithVariation(variations));
EXPECT_EQ(nullptr, noAxisFamily->createFamilyWithVariation(variations));
}
{
// At least one axis is supported, should create new instance.
- std::vector<FontVariation> variations = {{MinikinFont::MakeTag('w', 'd', 't', 'h'), 1.0f},
- {MinikinFont::MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
+ std::vector<FontVariation> variations = {{MakeTag('w', 'd', 't', 'h'), 1.0f},
+ {MakeTag('Z', 'Z', 'Z', 'Z'), 1.0f}};
std::shared_ptr<FontFamily> newFamily(
multiAxisFamily->createFamilyWithVariation(variations));
EXPECT_NE(nullptr, newFamily.get());
@@ -805,7 +806,7 @@ TEST_F(FontFamilyTest, closestMatch) {
size_t idx = dummyFonts.size();
for (size_t i = 0; i < dummyFonts.size(); i++) {
- if (dummyFonts[i].get() == closest.font->typeface().get()) {
+ if (dummyFonts[i].get() == closest.font->baseTypeface().get()) {
idx = i;
break;
}
diff --git a/tests/unittest/FontFeatureTest.cpp b/tests/unittest/FontFeatureTest.cpp
index 7f9cdf4..6f01842 100644
--- a/tests/unittest/FontFeatureTest.cpp
+++ b/tests/unittest/FontFeatureTest.cpp
@@ -14,10 +14,12 @@
* limitations under the License.
*/
+#include <com_android_text_flags.h>
+#include <flag_macros.h>
#include <gtest/gtest.h>
-#include "FontFeatureUtils.h"
#include "FontTestUtils.h"
+#include "minikin/FontFeature.h"
#include "minikin/MinikinPaint.h"
namespace minikin {
@@ -53,7 +55,7 @@ TEST_F(DefaultFontFeatureTest, default) {
TEST_F(DefaultFontFeatureTest, disable) {
auto paint = MinikinPaint(font);
- paint.fontFeatureSettings = "\"chws\" off";
+ paint.fontFeatureSettings = FontFeature::parse("\"chws\" off");
auto f = cleanAndAddDefaultFontFeatures(paint);
std::sort(f.begin(), f.end(), compareFeatureTag);
@@ -65,7 +67,7 @@ TEST_F(DefaultFontFeatureTest, disable) {
TEST_F(DefaultFontFeatureTest, preserve) {
auto paint = MinikinPaint(font);
- paint.fontFeatureSettings = "\"ruby\" on";
+ paint.fontFeatureSettings = FontFeature::parse("\"ruby\" on");
auto f = cleanAndAddDefaultFontFeatures(paint);
std::sort(f.begin(), f.end(), compareFeatureTag);
@@ -95,7 +97,7 @@ TEST_F(DefaultFontFeatureTest, large_letter_spacing) {
TEST_F(DefaultFontFeatureTest, halt_disable_chws) {
auto paint = MinikinPaint(font);
- paint.fontFeatureSettings = "\"halt\" on";
+ paint.fontFeatureSettings = FontFeature::parse("\"halt\" on");
auto f = cleanAndAddDefaultFontFeatures(paint);
EXPECT_EQ(1u, f.size());
@@ -105,7 +107,7 @@ TEST_F(DefaultFontFeatureTest, halt_disable_chws) {
TEST_F(DefaultFontFeatureTest, palt_disable_chws) {
auto paint = MinikinPaint(font);
- paint.fontFeatureSettings = "\"palt\" on";
+ paint.fontFeatureSettings = FontFeature::parse("\"palt\" on");
auto f = cleanAndAddDefaultFontFeatures(paint);
EXPECT_EQ(1u, f.size());
@@ -116,7 +118,7 @@ TEST_F(DefaultFontFeatureTest, palt_disable_chws) {
TEST_F(DefaultFontFeatureTest, halt_disable_chws_large_letter_spacing) {
auto paint = MinikinPaint(font);
paint.letterSpacing = 1.0; // em
- paint.fontFeatureSettings = "\"halt\" on";
+ paint.fontFeatureSettings = FontFeature::parse("\"halt\" on");
auto f = cleanAndAddDefaultFontFeatures(paint);
std::sort(f.begin(), f.end(), compareFeatureTag);
@@ -133,7 +135,7 @@ TEST_F(DefaultFontFeatureTest, halt_disable_chws_large_letter_spacing) {
TEST_F(DefaultFontFeatureTest, palt_disable_chws_large_letter_spacing) {
auto paint = MinikinPaint(font);
paint.letterSpacing = 1.0; // em
- paint.fontFeatureSettings = "\"palt\" on";
+ paint.fontFeatureSettings = FontFeature::parse("\"palt\" on");
auto f = cleanAndAddDefaultFontFeatures(paint);
std::sort(f.begin(), f.end(), compareFeatureTag);
@@ -147,4 +149,27 @@ TEST_F(DefaultFontFeatureTest, palt_disable_chws_large_letter_spacing) {
EXPECT_TRUE(f[2].value);
}
+class FontFeatureTest : public testing::Test {
+protected:
+ std::shared_ptr<FontCollection> font;
+
+ virtual void SetUp() override { font = buildFontCollection("Ascii.ttf"); }
+};
+
+TEST_F_WITH_FLAGS(FontFeatureTest, do_not_skip_cache_if_flagEnabled,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ inter_character_justification))) {
+ auto paint = MinikinPaint(font);
+ paint.fontFeatureSettings = FontFeature::parse("\"palt\" on");
+ EXPECT_FALSE(paint.skipCache());
+}
+
+TEST_F_WITH_FLAGS(FontFeatureTest, do_not_skip_cache_if_flagDisabled,
+ REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(com::android::text::flags,
+ inter_character_justification))) {
+ auto paint = MinikinPaint(font);
+ paint.fontFeatureSettings = FontFeature::parse("\"palt\" on");
+ EXPECT_TRUE(paint.skipCache());
+}
+
} // namespace minikin
diff --git a/tests/unittest/FontTest.cpp b/tests/unittest/FontTest.cpp
index b50ac90..7db2310 100644
--- a/tests/unittest/FontTest.cpp
+++ b/tests/unittest/FontTest.cpp
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-#include "minikin/Font.h"
-
#include <gtest/gtest.h>
+#include <minikin/Constants.h>
#include "BufferUtils.h"
#include "FontTestUtils.h"
#include "FreeTypeMinikinFontForTest.h"
+#include "minikin/Font.h"
namespace minikin {
@@ -41,17 +41,17 @@ TEST(FontTest, BufferTest) {
BufferReader reader(buffer.data());
Font font(&reader);
- EXPECT_EQ(minikinFont->GetFontPath(), font.typeface()->GetFontPath());
+ EXPECT_EQ(minikinFont->GetFontPath(), font.baseTypeface()->GetFontPath());
EXPECT_EQ(original->style(), font.style());
EXPECT_EQ(original->getLocaleListId(), font.getLocaleListId());
// baseFont() should return the same non-null instance when called twice.
const auto& baseFont = font.baseFont();
EXPECT_NE(nullptr, baseFont);
EXPECT_EQ(baseFont, font.baseFont());
- // typeface() should return the same non-null instance when called twice.
- const auto& typeface = font.typeface();
+ // baseTypeface() should return the same non-null instance when called twice.
+ const auto& typeface = font.baseTypeface();
EXPECT_NE(nullptr, typeface);
- EXPECT_EQ(typeface, font.typeface());
+ EXPECT_EQ(typeface, font.baseTypeface());
std::vector<uint8_t> newBuffer = writeToBuffer<Font>(font);
EXPECT_EQ(buffer, newBuffer);
}
@@ -75,10 +75,10 @@ TEST(FontTest, MoveConstructorTest) {
{
BufferReader reader(buffer.data());
Font moveFrom(&reader);
- std::shared_ptr<MinikinFont> typeface = moveFrom.typeface();
+ std::shared_ptr<MinikinFont> typeface = moveFrom.baseTypeface();
Font moveTo(std::move(moveFrom));
EXPECT_EQ(nullptr, moveFrom.mExternalRefsHolder.load());
- EXPECT_EQ(typeface, moveTo.typeface());
+ EXPECT_EQ(typeface, moveTo.baseTypeface());
}
EXPECT_EQ(baseHeapSize, getHeapSize());
}
@@ -106,12 +106,12 @@ TEST(FontTest, MoveAssignmentTest) {
// mExternalRefsHolder: non-null -> null
BufferReader reader(buffer.data());
Font moveFrom(&reader);
- std::shared_ptr<MinikinFont> typeface = moveFrom.typeface();
+ std::shared_ptr<MinikinFont> typeface = moveFrom.baseTypeface();
BufferReader reader2(buffer.data());
Font moveTo(&reader2);
moveTo = std::move(moveFrom);
EXPECT_EQ(nullptr, moveFrom.mExternalRefsHolder.load());
- EXPECT_EQ(typeface, moveTo.typeface());
+ EXPECT_EQ(typeface, moveTo.baseTypeface());
}
EXPECT_EQ(baseHeapSize, getHeapSize());
{
@@ -120,7 +120,7 @@ TEST(FontTest, MoveAssignmentTest) {
Font moveFrom(&reader);
BufferReader reader2(buffer.data());
Font moveTo(&reader2);
- moveTo.typeface();
+ moveTo.baseTypeface();
moveTo = std::move(moveFrom);
EXPECT_EQ(nullptr, moveFrom.mExternalRefsHolder.load());
EXPECT_EQ(nullptr, moveTo.mExternalRefsHolder.load());
@@ -130,15 +130,169 @@ TEST(FontTest, MoveAssignmentTest) {
// mExternalRefsHolder: non-null -> non-null
BufferReader reader(buffer.data());
Font moveFrom(&reader);
- std::shared_ptr<MinikinFont> typeface = moveFrom.typeface();
+ std::shared_ptr<MinikinFont> typeface = moveFrom.baseTypeface();
BufferReader reader2(buffer.data());
Font moveTo(&reader2);
- moveTo.typeface();
+ moveTo.baseTypeface();
moveTo = std::move(moveFrom);
EXPECT_EQ(nullptr, moveFrom.mExternalRefsHolder.load());
- EXPECT_EQ(typeface, moveTo.typeface());
+ EXPECT_EQ(typeface, moveTo.baseTypeface());
}
EXPECT_EQ(baseHeapSize, getHeapSize());
}
+TEST(FontTest, getAdjustedFontTest) {
+ FreeTypeMinikinFontForTestFactory::init();
+ auto minikinFont = std::make_shared<FreeTypeMinikinFontForTest>(
+ getTestFontPath("WeightEqualsEmVariableFont.ttf"));
+ std::shared_ptr<Font> font = Font::Builder(minikinFont).build();
+
+ {
+ auto hbFont = font->getAdjustedFont(-1, -1);
+ EXPECT_EQ(hbFont.get(), font->baseFont().get());
+ }
+ {
+ // Set correct wight axis value.
+ auto hbFont = font->getAdjustedFont(400, -1);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), font->baseFont().get());
+ EXPECT_NE(hbFont.get(), font->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(400, coords[0]);
+ EXPECT_EQ(0, coords[1]);
+ }
+ {
+ // Override existing wght axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(700, -1)).build();
+ auto hbFont = newFont->getAdjustedFont(500, -1);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), newFont->baseFont().get());
+ EXPECT_NE(hbFont.get(), newFont->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(500, coords[0]);
+ EXPECT_EQ(0, coords[1]);
+ }
+ {
+ // Set correct wight axis value.
+ auto hbFont = font->getAdjustedFont(-1, 1);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), font->baseFont().get());
+ EXPECT_NE(hbFont.get(), font->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(400, coords[0]); // 400 is a default value of `wght` axis
+ EXPECT_EQ(1, coords[1]);
+ }
+ {
+ // Override existing wght axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(-1, 0)).build();
+ auto hbFont = newFont->getAdjustedFont(-1, 1);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), newFont->baseFont().get());
+ EXPECT_NE(hbFont.get(), newFont->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(400, coords[0]); // 400 is a default value of `wght` axis
+ EXPECT_EQ(1, coords[1]);
+ }
+ {
+ // Set correct wight axis value.
+ auto hbFont = font->getAdjustedFont(500, 1);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), font->baseFont().get());
+ EXPECT_NE(hbFont.get(), font->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(500, coords[0]);
+ EXPECT_EQ(1, coords[1]);
+ }
+ {
+ // Override existing wght axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(500, 1)).build();
+ auto hbFont = newFont->getAdjustedFont(700, 0);
+ EXPECT_EQ(hb_font_get_parent(hbFont.get()), newFont->baseFont().get());
+ EXPECT_NE(hbFont.get(), newFont->baseFont().get());
+ unsigned int length;
+ const float* coords = hb_font_get_var_coords_design(hbFont.get(), &length);
+ ASSERT_EQ(2u, length); // The test font has 'wght', 'ital' axes in this order
+ EXPECT_EQ(700, coords[0]);
+ EXPECT_EQ(0, coords[1]);
+ }
+}
+
+TEST(FontTest, getAdjustedTypefaceTest) {
+ FreeTypeMinikinFontForTestFactory::init();
+ auto minikinFont = std::make_shared<FreeTypeMinikinFontForTest>(
+ getTestFontPath("WeightEqualsEmVariableFont.ttf"));
+ std::shared_ptr<Font> font = Font::Builder(minikinFont).build();
+
+ {
+ auto minikinFontBase = font->getAdjustedTypeface(-1, -1);
+ EXPECT_EQ(minikinFontBase.get(), font->baseTypeface().get());
+ }
+ {
+ // Set correct wght axis value.
+ auto minikinFontBase = font->getAdjustedTypeface(400, -1);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(1u, axes.size());
+ EXPECT_EQ(TAG_wght, axes[0].axisTag);
+ EXPECT_EQ(400, axes[0].value);
+ }
+ {
+ // Override existing wght axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(700, -1)).build();
+ auto minikinFontBase = newFont->getAdjustedTypeface(500, -1);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(1u, axes.size());
+ EXPECT_EQ(TAG_wght, axes[0].axisTag);
+ EXPECT_EQ(500, axes[0].value);
+ }
+ {
+ // Set correct wght axis value.
+ auto minikinFontBase = font->getAdjustedTypeface(-1, 1);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(1u, axes.size());
+ EXPECT_EQ(TAG_ital, axes[0].axisTag);
+ EXPECT_EQ(1, axes[0].value);
+ }
+ {
+ // Override existing wght axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(-1, 1)).build();
+ auto minikinFontBase = newFont->getAdjustedTypeface(-1, 0);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(1u, axes.size());
+ EXPECT_EQ(TAG_ital, axes[0].axisTag);
+ EXPECT_EQ(0, axes[0].value);
+ }
+ {
+ // Set correct ital axis value.
+ auto minikinFontBase = font->getAdjustedTypeface(400, 1);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(2u, axes.size());
+ EXPECT_EQ(TAG_wght, axes[0].axisTag);
+ EXPECT_EQ(TAG_ital, axes[1].axisTag);
+ EXPECT_EQ(400, axes[0].value);
+ EXPECT_EQ(1, axes[1].value);
+ }
+ {
+ // Override existing ital axis.
+ std::shared_ptr<Font> newFont = Font::Builder(font->getAdjustedTypeface(500, 0)).build();
+ auto minikinFontBase = newFont->getAdjustedTypeface(700, 1);
+ EXPECT_NE(minikinFontBase.get(), font->baseTypeface().get());
+ auto axes = minikinFontBase->GetAxes();
+ ASSERT_EQ(2u, axes.size());
+ EXPECT_EQ(TAG_wght, axes[0].axisTag);
+ EXPECT_EQ(TAG_ital, axes[1].axisTag);
+ EXPECT_EQ(700, axes[0].value);
+ EXPECT_EQ(1, axes[1].value);
+ }
+}
+
} // namespace minikin
diff --git a/tests/unittest/GreedyLineBreakerTest.cpp b/tests/unittest/GreedyLineBreakerTest.cpp
index e51ff83..4e1f146 100644
--- a/tests/unittest/GreedyLineBreakerTest.cpp
+++ b/tests/unittest/GreedyLineBreakerTest.cpp
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-#include <memory>
-
+#include <com_android_text_flags.h>
+#include <flag_macros.h>
#include <gtest/gtest.h>
-#include "minikin/Hyphenator.h"
+#include <memory>
#include "FileUtils.h"
#include "FontTestUtils.h"
@@ -29,6 +29,7 @@
#include "MinikinInternal.h"
#include "UnicodeUtils.h"
#include "WordBreaker.h"
+#include "minikin/Hyphenator.h"
namespace minikin {
namespace {
@@ -47,6 +48,17 @@ constexpr float DESCENT = 20.0f;
constexpr float CUSTOM_ASCENT = -160.0f;
constexpr float CUSTOM_DESCENT = 40.0f;
+// A test string for Japanese. The meaning is that "Today is a sunny day."
+// The expected line break of phrase and non-phrase cases are:
+// Phrase: | \u672C\u65E5\u306F | \u6674\u5929\u306A\u308A\u3002 |
+// Non-Phrase: | \u672C | \u65E5 | \u306F | \u6674 | \u5929 | \u306A | \u308A\u3002 |
+const char* JP_TEXT = "\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002";
+
+// A test string for Korean. The meaning is that "I want to eat breakfast."
+// The phrase based line break breaks at spaces, non-phrase based line break breaks at grapheme.
+const char* KO_TEXT =
+ "\uC544\uCE68\uBC25\uC744\u0020\uBA39\uACE0\u0020\uC2F6\uC2B5\uB2C8\uB2E4\u002E";
+
class GreedyLineBreakerTest : public testing::Test {
public:
GreedyLineBreakerTest() {}
@@ -69,6 +81,48 @@ protected:
return doLineBreak(textBuffer, doHyphenation, "en-US", lineWidth);
}
+ LineBreakResult doLineBreakForJapanese(const U16StringPiece& textBuffer,
+ LineBreakWordStyle lbwStyle, const std::string& lang,
+ float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family = buildFontFamily("Japanese.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family};
+ auto fc = FontCollection::create(families);
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId(lang);
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), (int)LineBreakStyle::None,
+ (int)lbwStyle, true, false);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, false /* compute hyphenation */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ RectangleLineWidth rectangleLineWidth(lineWidth);
+ TabStops tabStops(nullptr, 0, 10);
+ return breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops, false,
+ false);
+ }
+
+ LineBreakResult doLineBreakForKorean(const U16StringPiece& textBuffer,
+ LineBreakWordStyle lbwStyle, const std::string& lang,
+ float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family = buildFontFamily("Hangul.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family};
+ auto fc = FontCollection::create(families);
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId(lang);
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), (int)LineBreakStyle::None,
+ (int)lbwStyle, true, false);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, false /* compute hyphenation */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ RectangleLineWidth rectangleLineWidth(lineWidth);
+ TabStops tabStops(nullptr, 0, 10);
+ return breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops, false,
+ false);
+ }
+
LineBreakResult doLineBreak(const U16StringPiece& textBuffer, bool doHyphenation,
const std::string& lang, float lineWidth) {
MeasuredTextBuilder builder;
@@ -80,14 +134,74 @@ protected:
paint.size = 10.0f; // Make 1em=10px
paint.localeListId = LocaleListCache::getId(lang);
builder.addStyleRun(0, textBuffer.size(), std::move(paint), (int)LineBreakStyle::None,
- (int)LineBreakWordStyle::None, false);
+ (int)LineBreakWordStyle::None, true, false);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, false /* compute hyphenation */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ RectangleLineWidth rectangleLineWidth(lineWidth);
+ TabStops tabStops(nullptr, 0, 10);
+ return breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops,
+ doHyphenation, false);
+ }
+
+ LineBreakResult doLineBreakWithNoHyphenSpan(const U16StringPiece& textBuffer,
+ const Range& noHyphenRange, float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family1 = buildFontFamily("Ascii.ttf");
+ auto family2 = buildFontFamily("CustomExtent.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family1, family2};
+ auto fc = FontCollection::create(families);
+ if (noHyphenRange.getStart() != 0) {
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(0, noHyphenRange.getStart(), std::move(paint),
+ (int)LineBreakStyle::None, (int)LineBreakWordStyle::None,
+ true /* hyphenation */, false);
+ }
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(noHyphenRange.getStart(), noHyphenRange.getEnd(), std::move(paint),
+ (int)LineBreakStyle::None, (int)LineBreakWordStyle::None,
+ false /* hyphenation */, false);
+ if (noHyphenRange.getEnd() != textBuffer.size()) {
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(noHyphenRange.getEnd(), textBuffer.size(), std::move(paint),
+ (int)LineBreakStyle::None, (int)LineBreakWordStyle::None,
+ true /* hyphenation */, false);
+ }
+
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuffer, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(lineWidth);
TabStops tabStops(nullptr, 0, 10);
return breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops,
- doHyphenation);
+ true /* doHyphenation */, false);
+ }
+
+ LineBreakResult doLineBreakForBounds(const U16StringPiece& textBuffer, bool doHyphenation,
+ float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family1 = buildFontFamily("OvershootTest.ttf");
+ auto family2 = buildFontFamily("Ascii.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family1, family2};
+ auto fc = FontCollection::create(families);
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), (int)LineBreakStyle::None,
+ (int)LineBreakWordStyle::None, true, false);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, false /* compute hyphenation */, false /* compute full layout */,
+ true /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ RectangleLineWidth rectangleLineWidth(lineWidth);
+ TabStops tabStops(nullptr, 0, 10);
+ return breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops,
+ doHyphenation, true);
}
private:
@@ -106,18 +220,19 @@ TEST_F(GreedyLineBreakerTest, roundingError) {
paint.localeListId = LocaleListCache::getId("en-US");
const std::vector<uint16_t> textBuffer = utf8ToUtf16("8888888888888888888");
- float measured = Layout::measureText(textBuffer, Range(0, textBuffer.size()), Bidi::LTR, paint,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, nullptr);
+ float measured =
+ Layout::measureText(textBuffer, Range(0, textBuffer.size()), Bidi::LTR, paint,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, nullptr, nullptr);
builder.addStyleRun(0, textBuffer.size(), std::move(paint), (int)LineBreakStyle::None,
- (int)LineBreakWordStyle::None, false);
+ (int)LineBreakWordStyle::None, true, false);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuffer, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(measured);
TabStops tabStops(nullptr, 0, 10);
LineBreakResult r = breakLineGreedy(textBuffer, *measuredText, rectangleLineWidth, tabStops,
- false /* do hyphenation */);
+ false /* do hyphenation */, false /* useBoundsForWidth */);
EXPECT_EQ(1u, r.breakPoints.size());
}
@@ -707,11 +822,11 @@ TEST_F(GreedyLineBreakerTest, testZeroWidthCharacter) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 10);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -727,11 +842,11 @@ TEST_F(GreedyLineBreakerTest, testZeroWidthCharacter) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 10);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -758,12 +873,12 @@ TEST_F(GreedyLineBreakerTest, testLocaleSwitchTest) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 0);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -779,12 +894,12 @@ TEST_F(GreedyLineBreakerTest, testLocaleSwitchTest) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 0);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -843,12 +958,12 @@ TEST_F(GreedyLineBreakerTest, testLocaleSwitch_InEmailOrUrl) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 0);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -866,12 +981,12 @@ TEST_F(GreedyLineBreakerTest, testLocaleSwitch_InEmailOrUrl) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, 0);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -897,12 +1012,12 @@ TEST_F(GreedyLineBreakerTest, CrashFix_Space_Tab) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(LINE_WIDTH);
TabStops tabStops(nullptr, 0, CHAR_WIDTH);
- const auto actual =
- breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ const auto actual = breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops,
+ DO_HYPHEN, false /* useBoundsForWidth */);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
<< " vs " << std::endl
<< toString(textBuf, actual);
@@ -1066,10 +1181,11 @@ TEST_F(GreedyLineBreakerTest, testReplacementSpanNotBreakTest_SingleChar) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
- return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN,
+ false /* useBoundsForWidth */);
};
{
@@ -1161,10 +1277,11 @@ TEST_F(GreedyLineBreakerTest, testReplacementSpanNotBreakTest_MultipleChars) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
- return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN,
+ false /* useBoundsForWidth */);
};
{
@@ -1249,10 +1366,11 @@ TEST_F(GreedyLineBreakerTest, testReplacementSpanNotBreakTest_CJK) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
- return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN,
+ false /* useBoundsForWidth */);
};
{
@@ -1400,10 +1518,11 @@ TEST_F(GreedyLineBreakerTest, testReplacementSpanNotBreakTest_with_punctuation)
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
- return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN);
+ return breakLineGreedy(textBuf, *measuredText, rectangleLineWidth, tabStops, DO_HYPHEN,
+ false /* useBoundsForWidth */);
};
{
@@ -1589,5 +1708,600 @@ TEST_F(GreedyLineBreakerTest, testControllCharAfterSpace) {
<< toString(textBuf, actual);
}
}
+
+TEST_F(GreedyLineBreakerTest, testBreakWithoutBounds_trail) {
+ // The OvershootTest.ttf has following coverage, extent, width and bbox.
+ // U+0061(a): 1em, ( 0, 0) - (1, 1)
+ // U+0062(b): 1em, ( 0, 0) - (1.5, 1)
+ // U+0063(c): 1em, ( 0, 0) - (2, 1)
+ // U+0064(d): 1em, ( 0, 0) - (2.5, 1)
+ // U+0065(e): 1em, (-0.5, 0) - (1, 1)
+ // U+0066(f): 1em, (-1.0, 0) - (1, 1)
+ // U+0067(g): 1em, (-1.5, 0) - (1, 1)
+ constexpr bool NO_HYPHEN = false; // No hyphenation in this test case.
+
+ const std::vector<uint16_t> textBuf = utf8ToUtf16("dddd dddd dddd dddd");
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 1000;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd dddd dddd dddd", 190, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 205, 0), actual.bounds[0]);
+ }
+ {
+ constexpr float LINE_WIDTH = 110;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd dddd ", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd dddd", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 105, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(0, 10, 105, 0), actual.bounds[1]);
+ }
+ {
+ constexpr float LINE_WIDTH = 100;
+ // Even if the total advance of "dddd dddd" is 90, the width of bounding box of "dddd dddd"
+ // is
+ // Rect(0em, 1em, 10.5em, 0em). So "dddd dddd" is broken into two lines.
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[1]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[2]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[3]);
+ }
+}
+
+TEST_F(GreedyLineBreakerTest, testBreakWithoutBounds_preceding) {
+ // The OvershootTest.ttf has following coverage, extent, width and bbox.
+ // U+0061(a): 1em, ( 0, 0) - (1, 1)
+ // U+0062(b): 1em, ( 0, 0) - (1.5, 1)
+ // U+0063(c): 1em, ( 0, 0) - (2, 1)
+ // U+0064(d): 1em, ( 0, 0) - (2.5, 1)
+ // U+0065(e): 1em, (-0.5, 0) - (1, 1)
+ // U+0066(f): 1em, (-1.0, 0) - (1, 1)
+ // U+0067(g): 1em, (-1.5, 0) - (1, 1)
+ constexpr bool NO_HYPHEN = false; // No hyphenation in this test case.
+
+ const std::vector<uint16_t> textBuf = utf8ToUtf16("gggg gggg gggg gggg");
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 1000;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg gggg gggg gggg", 190, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 190, 0), actual.bounds[0]);
+ }
+ {
+ constexpr float LINE_WIDTH = 110;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg gggg ", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg gggg" , 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 90, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(-15, 10, 90, 0), actual.bounds[1]);
+ }
+ {
+ constexpr float LINE_WIDTH = 100;
+ // Even if the total advance of "dddd dddd" is 90, the width of bounding box of "dddd dddd"
+ // is
+ // Rect(0em, 1em, 10.5em, 0em). So "dddd dddd" is broken into two lines.
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg" , 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, NO_HYPHEN, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[1]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[2]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[3]);
+ }
+}
+
+TEST_F(GreedyLineBreakerTest, testBreakWithHyphenation_NoHyphenationSpan) {
+ // "hyphenation" is hyphnated to "hy-phen-a-tion".
+ const std::vector<uint16_t> textBuf = utf8ToUtf16("This is Android. Here is hyphenation.");
+ const Range noHyphenRange(25, 37); // the range of the word "hyphenation".
+
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit END_HYPHEN = EndHyphenEdit::INSERT_HYPHEN;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ { "This is " , 70, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "Android. " , 80, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "Here is " , 70, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "hyphena-" , 80, NO_START_HYPHEN, END_HYPHEN, ASCENT, DESCENT },
+ { "tion." , 50, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ };
+ // clang-format on
+
+ const auto actual = doLineBreak(textBuf, true /* do hyphenation */, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ { "This is " , 70, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "Android. " , 80, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "Here is " , 70, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ // Prevent hyphenation of "hyphenation". Fallback to desperate break.
+ { "hyphenatio" ,100, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "n." , 20, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakWithNoHyphenSpan(textBuf, noHyphenRange, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(GreedyLineBreakerTest, testPhraseBreakNone,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002" , 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5" , 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002" , 60),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002", 40),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002" , 20),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(GreedyLineBreakerTest, testPhraseBreakPhrase,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(GreedyLineBreakerTest, testPhraseBreakAuto,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ // When the line becomes more or equal to 5, the phrase based line break is disabled.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002" , 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(GreedyLineBreakerTest, testPhraseBreak_Korean,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ SCOPED_TRACE("LineBreakWOrdStyle::None should break with grapheme bounds");
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(KO_TEXT);
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\uC544\uCE68\uBC25\uC744\u0020\uBA39\uACE0\u0020\uC2F6\uC2B5", 100),
+ line("\uB2C8\uB2E4\u002E", 30),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForKorean(textBuf, LineBreakWordStyle::None, "ko-KR", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ SCOPED_TRACE("LineBreakWOrdStyle::Phrase should break with spaces");
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(KO_TEXT);
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\uC544\uCE68\uBC25\uC744\u0020\uBA39\uACE0\u0020", 70),
+ line("\uC2F6\uC2B5\uB2C8\uB2E4\u002E", 50),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForKorean(textBuf, LineBreakWordStyle::Phrase, "ko-KR", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ SCOPED_TRACE("LineBreakWOrdStyle::Auto should perform as phrase based line break.");
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(KO_TEXT);
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\uC544\uCE68\uBC25\uC744\u0020\uBA39\uACE0\u0020", 70),
+ line("\uC2F6\uC2B5\uB2C8\uB2E4\u002E", 50),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForKorean(textBuf, LineBreakWordStyle::Auto, "ko-KR", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
} // namespace
} // namespace minikin
diff --git a/tests/unittest/LayoutCacheTest.cpp b/tests/unittest/LayoutCacheTest.cpp
index e0dd5f3..5d20456 100644
--- a/tests/unittest/LayoutCacheTest.cpp
+++ b/tests/unittest/LayoutCacheTest.cpp
@@ -36,12 +36,18 @@ class LayoutCapture {
public:
LayoutCapture() {}
- void operator()(const LayoutPiece& layout, const MinikinPaint& /* dir */) { mLayout = &layout; }
+ void operator()(const LayoutPiece& layout, const MinikinPaint& /* dir */,
+ const MinikinRect& bounds) {
+ mLayout = &layout;
+ mBounds = bounds;
+ }
const LayoutPiece* get() const { return mLayout; }
+ const MinikinRect& bounds() const { return mBounds; }
private:
const LayoutPiece* mLayout;
+ MinikinRect mBounds;
};
TEST(LayoutCacheTest, cacheHitTest) {
@@ -53,11 +59,11 @@ TEST(LayoutCacheTest, cacheHitTest) {
LayoutCapture layout1;
layoutCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, layout1);
+ EndHyphenEdit::NO_EDIT, false, layout1);
LayoutCapture layout2;
layoutCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, layout2);
+ EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_EQ(layout1.get(), layout2.get());
}
@@ -75,59 +81,61 @@ TEST(LayoutCacheTest, cacheMissTest) {
{
SCOPED_TRACE("Different text");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text2, Range(0, text2.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different range");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text1, Range(1, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different text");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text2, Range(0, text2.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different direction");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, true /* RTL */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different start hyphenation");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::INSERT_HYPHEN, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::INSERT_HYPHEN, EndHyphenEdit::NO_EDIT, false,
+ layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different end hyphen");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::INSERT_HYPHEN, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::INSERT_HYPHEN, false,
+ layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different collection");
MinikinPaint paint1(buildFontCollection("Ascii.ttf"));
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(buildFontCollection("Emoji.ttf"));
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -136,11 +144,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.size = 10.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.size = 20.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -149,11 +157,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.scaleX = 1.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.scaleX = 2.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -162,11 +170,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.skewX = 1.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.skewX = 2.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -175,11 +183,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.letterSpacing = 0.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.letterSpacing = 1.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -188,11 +196,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.wordSpacing = 0.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.wordSpacing = 1.0f;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -201,11 +209,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.fontFlags = 0;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.fontFlags = LinearMetrics_Flag;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -214,11 +222,11 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.localeListId = LocaleListCache::getId("en-US");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.localeListId = LocaleListCache::getId("ja-JP");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
@@ -227,24 +235,24 @@ TEST(LayoutCacheTest, cacheMissTest) {
MinikinPaint paint1(collection);
paint1.familyVariant = FamilyVariant::DEFAULT;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
paint2.familyVariant = FamilyVariant::COMPACT;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
{
SCOPED_TRACE("Different font feature settings");
auto collection = buildFontCollection("Ascii.ttf");
MinikinPaint paint1(collection);
- paint1.fontFeatureSettings = "";
+ paint1.fontFeatureSettings = FontFeature::parse("");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint1, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout1);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout1);
MinikinPaint paint2(collection);
- paint2.fontFeatureSettings = "'liga' on";
+ paint2.fontFeatureSettings = FontFeature::parse("'liga' on");
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint2, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
EXPECT_NE(layout1.get(), layout2.get());
}
}
@@ -258,18 +266,18 @@ TEST(LayoutCacheTest, cacheOverflowTest) {
LayoutCapture layout1;
layoutCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, layout1);
+ EndHyphenEdit::NO_EDIT, false, layout1);
for (char c = 'a'; c <= 'z'; c++) {
auto text1 = utf8ToUtf16(std::string(10, c));
LayoutCapture layout2;
layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, layout2);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, false, layout2);
}
LayoutCapture layout3;
layoutCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, layout3);
+ EndHyphenEdit::NO_EDIT, false, layout3);
EXPECT_NE(layout1.get(), layout3.get());
}
@@ -282,9 +290,45 @@ TEST(LayoutCacheTest, cacheLengthLimitTest) {
LayoutCapture layout;
layoutCache.getOrCreate(text, range, paint, false /* LTR */, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, layout);
+ EndHyphenEdit::NO_EDIT, false, layout);
EXPECT_EQ(layoutCache.getCacheSize(), 0u);
}
+TEST(LayoutCacheTest, boundsCalculation) {
+ auto text1 = utf8ToUtf16("android");
+ MinikinPaint paint(buildFontCollection("Ascii.ttf"));
+
+ TestableLayoutCache layoutCache(10);
+
+ LayoutCapture layout1;
+ LayoutCapture layout2;
+
+ {
+ SCOPED_TRACE("Bounds calculation should be treated different layout cache entry");
+ layoutCache.clear();
+ layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
+ false /* calculateBounds */, layout1);
+ layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
+ true /* calculateBounds */, layout2);
+ EXPECT_NE(layout1.get(), layout2.get());
+ EXPECT_FALSE(layout1.bounds().isValid());
+ EXPECT_TRUE(layout2.bounds().isValid());
+ }
+ {
+ SCOPED_TRACE("Bounds calculated entry can be used for the non-bounds request.");
+ layoutCache.clear();
+ layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
+ true /* calculateBounds */, layout1);
+ layoutCache.getOrCreate(text1, Range(0, text1.size()), paint, false /* LTR */,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT,
+ false /* calculateBounds */, layout2);
+ EXPECT_EQ(layout1.get(), layout2.get());
+ EXPECT_TRUE(layout1.bounds().isValid());
+ }
+}
+
} // namespace minikin
diff --git a/tests/unittest/LayoutCoreTest.cpp b/tests/unittest/LayoutCoreTest.cpp
index 4edc556..264454a 100644
--- a/tests/unittest/LayoutCoreTest.cpp
+++ b/tests/unittest/LayoutCoreTest.cpp
@@ -39,11 +39,22 @@ static LayoutPiece buildLayout(const std::string& text, std::shared_ptr<FontColl
return buildLayout(text, paint);
}
+static std::pair<LayoutPiece, MinikinRect> buildLayoutAndBounds(
+ const std::string& text, std::shared_ptr<FontCollection> fc) {
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // make 1em = 10px
+ auto utf16 = utf8ToUtf16(text);
+ LayoutPiece lp = LayoutPiece(utf16, Range(0, utf16.size()), false /* rtl */, paint,
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT);
+ MinikinRect rect = LayoutPiece::calculateBounds(lp, paint);
+ return std::make_pair(lp, rect);
+}
+
static LayoutPiece buildLayout(const std::string& text, std::shared_ptr<FontCollection> fc,
const std::string fontFeaturesSettings) {
MinikinPaint paint(fc);
paint.size = 10.0f; // make 1em = 10px
- paint.fontFeatureSettings = fontFeaturesSettings;
+ paint.fontFeatureSettings = FontFeature::parse(fontFeaturesSettings);
return buildLayout(text, paint);
}
@@ -250,5 +261,68 @@ TEST(LayoutPieceTest, doLayoutTest_Ligature) {
}
}
+TEST(LayoutPieceTest, doLayoutTest_Overshoot) {
+ // See doLayoutTest for the details of OvershootTest.ttf
+ // The OvershootTest.ttf has following coverage, extent, width and bbox.
+ // U+0061: 1em, ( 0, 0) - (1, 1)
+ // U+0062: 1em, ( 0, 0) - (1.5, 1)
+ // U+0063: 1em, ( 0, 0) - (2, 1)
+ // U+0064: 1em, ( 0, 0) - (2.5, 1)
+ // U+0065: 1em, (-0.5, 0) - (1, 1)
+ // U+0066: 1em, (-1.0, 0) - (1, 1)
+ // U+0067: 1em, (-1.5, 0) - (1, 1)
+ auto fc = makeFontCollection({"OvershootTest.ttf"});
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("a", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(0, 10, 10, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("b", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(0, 10, 15, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("c", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(0, 10, 20, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("d", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(0, 10, 25, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("e", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-5, 10, 10, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("f", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-10, 10, 10, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("g", fc);
+ EXPECT_EQ(1u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-15, 10, 10, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("ag", fc);
+ EXPECT_EQ(2u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-5, 10, 20, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("ga", fc);
+ EXPECT_EQ(2u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-15, 10, 20, 0), bounds);
+ }
+ {
+ auto [layout, bounds] = buildLayoutAndBounds("dg", fc);
+ EXPECT_EQ(2u, layout.glyphCount());
+ EXPECT_EQ(MinikinRect(-5, 10, 25, 0), bounds);
+ }
+}
+
} // namespace
} // namespace minikin
diff --git a/tests/unittest/LayoutTest.cpp b/tests/unittest/LayoutTest.cpp
index 7771051..4f292b6 100644
--- a/tests/unittest/LayoutTest.cpp
+++ b/tests/unittest/LayoutTest.cpp
@@ -449,7 +449,7 @@ TEST_F(LayoutTest, measuredTextTest) {
std::vector<float> advances(text.size());
Range range(0, text.size());
EXPECT_EQ(1.0f, Layout::measureText(text, range, Bidi::LTR, paint, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, advances.data()));
+ EndHyphenEdit::NO_EDIT, advances.data(), nullptr));
ASSERT_EQ(1u, advances.size());
EXPECT_EQ(1.0f, advances[0]);
}
@@ -459,7 +459,7 @@ TEST_F(LayoutTest, measuredTextTest) {
std::vector<float> advances(text.size());
Range range(0, text.size());
EXPECT_EQ(6.0f, Layout::measureText(text, range, Bidi::LTR, paint, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, advances.data()));
+ EndHyphenEdit::NO_EDIT, advances.data(), nullptr));
ASSERT_EQ(2u, advances.size());
EXPECT_EQ(1.0f, advances[0]);
EXPECT_EQ(5.0f, advances[1]);
@@ -471,7 +471,7 @@ TEST_F(LayoutTest, measuredTextTest) {
Range range(0, text.size());
EXPECT_EQ(16.0f,
Layout::measureText(text, range, Bidi::LTR, paint, StartHyphenEdit::NO_EDIT,
- EndHyphenEdit::NO_EDIT, advances.data()));
+ EndHyphenEdit::NO_EDIT, advances.data(), nullptr));
ASSERT_EQ(3u, advances.size());
EXPECT_EQ(1.0f, advances[0]);
EXPECT_EQ(5.0f, advances[1]);
diff --git a/tests/unittest/LineBreakerTestHelper.h b/tests/unittest/LineBreakerTestHelper.h
index 5a86175..cb1d161 100644
--- a/tests/unittest/LineBreakerTestHelper.h
+++ b/tests/unittest/LineBreakerTestHelper.h
@@ -53,10 +53,12 @@ public:
virtual bool isRtl() const override { return false; }
virtual bool canBreak() const override { return true; }
+ virtual bool canHyphenate() const override { return true; }
virtual uint32_t getLocaleListId() const { return mLocaleListId; }
- virtual void getMetrics(const U16StringPiece&, std::vector<float>* advances, LayoutPieces*,
- LayoutPieces*) const {
+ virtual void getMetrics(const U16StringPiece&, std::vector<float>* advances,
+ std::vector<uint8_t>* /*flags*/, LayoutPieces*,
+ bool /*boundsCalculation*/, LayoutPieces*) const {
std::fill(advances->begin() + mRange.getStart(), advances->begin() + mRange.getEnd(),
mWidth);
}
@@ -72,6 +74,12 @@ public:
return {mAscent, mDescent};
}
+ virtual LineMetrics getLineMetrics(const U16StringPiece& text, const Range& range,
+ const LayoutPieces& pieces) const {
+ auto [adv, rect] = getBounds(text, range, pieces);
+ return LineMetrics(getExtent(text, range, pieces), rect, adv);
+ }
+
virtual const MinikinPaint* getPaint() const { return &mPaint; }
virtual float measureHyphenPiece(const U16StringPiece&, const Range& range,
@@ -198,11 +206,13 @@ static std::string toString(const U16StringPiece& textBuf, const LineBreakResult
if (isInsertion(endEdit)) {
hyphenatedStr.push_back('-');
}
- char lineMsg[128] = {};
+ char lineMsg[256] = {};
snprintf(lineMsg, sizeof(lineMsg),
- "Line %2d, Width: %5.1f, Hyphen(%hhu, %hhu), Extent(%5.1f, %5.1f), Text: \"%s\"\n",
+ "Line %2d, Width: %5.1f, Hyphen(%hhu, %hhu), Extent(%5.1f, %5.1f), Bounds(%f, %f, "
+ "%f, %f), Text: \"%s\"\n",
i, lines.widths[i], startEdit, endEdit, lines.ascents[i], lines.descents[i],
- hyphenatedStr.c_str());
+ lines.bounds[i].mLeft, lines.bounds[i].mTop, lines.bounds[i].mRight,
+ lines.bounds[i].mBottom, hyphenatedStr.c_str());
out += lineMsg;
}
return out;
diff --git a/tests/unittest/MeasuredTextTest.cpp b/tests/unittest/MeasuredTextTest.cpp
index 845b5f1..b07ccf5 100644
--- a/tests/unittest/MeasuredTextTest.cpp
+++ b/tests/unittest/MeasuredTextTest.cpp
@@ -39,17 +39,19 @@ TEST(MeasuredTextTest, RunTests) {
MinikinPaint paint1(font);
paint1.size = 10.0f; // make 1em = 10px
- builder.addStyleRun(0, 2, std::move(paint1), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, 2, std::move(paint1), lbStyle, lbWordStyle, true /* can hyphenate */,
+ false /* is RTL */);
builder.addReplacementRun(2, 4, REPLACEMENT_WIDTH, 0 /* locale list id */);
MinikinPaint paint2(font);
paint2.size = 10.0f; // make 1em = 10px
- builder.addStyleRun(4, 6, std::move(paint2), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(4, 6, std::move(paint2), lbStyle, lbWordStyle, true /* can hyphenate */,
+ false /* is RTL */);
std::vector<uint16_t> text(CHAR_COUNT, 'a');
- std::unique_ptr<MeasuredText> measuredText =
- builder.build(text, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ text, true /* compute hyphenation */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
ASSERT_TRUE(measuredText);
@@ -69,9 +71,11 @@ TEST(MeasuredTextTest, getBoundsTest) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinRect(0.0f, 0.0f, 0.0f, 0.0f), mt->getBounds(text, Range(0, 0)));
EXPECT_EQ(MinikinRect(0.0f, 10.0f, 10.0f, 0.0f), mt->getBounds(text, Range(0, 1)));
@@ -89,9 +93,11 @@ TEST(MeasuredTextTest, getBoundsTest_LTR) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinRect(0.0f, 10.0f, 10.0f, 0.0f), mt->getBounds(text, Range(0, 1)));
}
@@ -105,9 +111,11 @@ TEST(MeasuredTextTest, getBoundsTest_RTL) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, true /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, true /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinRect(0.0f, 30.0f, 30.0f, 0.0f), mt->getBounds(text, Range(0, 2)));
}
@@ -122,13 +130,15 @@ TEST(MeasuredTextTest, getBoundsTest_multiStyle) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
MinikinPaint paint2(font);
paint2.size = 20.0f;
builder.addStyleRun(helloLength, text.size(), std::move(paint2), lbStyle, lbWordStyle,
- false /* is RTL */);
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinRect(0.0f, 0.0f, 0.0f, 0.0f), mt->getBounds(text, Range(0, 0)));
EXPECT_EQ(MinikinRect(0.0f, 10.0f, 10.0f, 0.0f), mt->getBounds(text, Range(0, 1)));
@@ -149,9 +159,11 @@ TEST(MeasuredTextTest, getExtentTest) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kernign */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kernign */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinExtent(0.0f, 0.0f), mt->getExtent(text, Range(0, 0)));
EXPECT_EQ(MinikinExtent(-80.0f, 20.0f), mt->getExtent(text, Range(0, 1)));
@@ -170,13 +182,16 @@ TEST(MeasuredTextTest, getExtentTest_multiStyle) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
MinikinPaint paint2(font);
paint2.size = 20.0f;
builder.addStyleRun(helloLength, text.size(), std::move(paint2), 0 /* no line break */,
- 0 /* no line break word style */, false /* is RTL */);
+ 0 /* no line break word style */, true /* can hyphenate */,
+ false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ(MinikinExtent(0.0f, 0.0f), mt->getExtent(text, Range(0, 0)));
EXPECT_EQ(MinikinExtent(-80.0f, 20.0f), mt->getExtent(text, Range(0, 1)));
@@ -198,9 +213,11 @@ TEST(MeasuredTextTest, buildLayoutTest) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
MinikinRect rect;
MinikinPaint samePaint(font);
@@ -280,13 +297,15 @@ TEST(MeasuredTextTest, buildLayoutTest_multiStyle) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
MinikinPaint paint2(font);
paint2.size = 20.0f;
builder.addStyleRun(helloLength, text.size(), std::move(paint2), lbStyle, lbWordStyle,
- false /* is RTL */);
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
MinikinRect rect;
MinikinPaint samePaint(font);
@@ -368,9 +387,11 @@ TEST(MeasuredTextTest, buildLayoutTest_differentPaint) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
MinikinRect rect;
MinikinPaint differentPaint(font);
@@ -450,13 +471,15 @@ TEST(MeasuredTextTest, buildLayoutTest_multiStyle_differentPaint) {
MeasuredTextBuilder builder;
MinikinPaint paint(font);
paint.size = 10.0f;
- builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle, false /* is RTL */);
+ builder.addStyleRun(0, helloLength, std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false /* is RTL */);
MinikinPaint paint2(font);
paint2.size = 20.0f;
builder.addStyleRun(helloLength, text.size(), std::move(paint2), lbStyle, lbWordStyle,
- false /* is RTL */);
+ true /* can hyphenate */, false /* is RTL */);
auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
MinikinRect rect;
MinikinPaint differentPaint(font);
@@ -566,9 +589,11 @@ TEST(MeasuredTextTest, testLineBreakStyle_from_builder) {
MeasuredTextBuilder looseStyleBuilder;
MinikinPaint paint(font);
- looseStyleBuilder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle, false);
+ looseStyleBuilder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* can hyphenate */, false);
auto mt = looseStyleBuilder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ((size_t)1, mt->runs.size());
EXPECT_EQ(LineBreakStyle::Loose, mt->runs[0]->lineBreakStyle());
@@ -578,9 +603,10 @@ TEST(MeasuredTextTest, testLineBreakStyle_from_builder) {
MeasuredTextBuilder normalStyleBuilder;
MinikinPaint normalStylePaint(font);
normalStyleBuilder.addStyleRun(0, text.size(), std::move(normalStylePaint), lbStyle,
- lbWordStyle, false);
+ lbWordStyle, true /* can hyphenate */, false);
mt = normalStyleBuilder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ((size_t)1, mt->runs.size());
EXPECT_EQ(LineBreakStyle::Normal, mt->runs[0]->lineBreakStyle());
@@ -591,9 +617,10 @@ TEST(MeasuredTextTest, testLineBreakStyle_from_builder) {
MeasuredTextBuilder strictStyleBuilder;
MinikinPaint strictStylePaint(font);
strictStyleBuilder.addStyleRun(0, text.size(), std::move(strictStylePaint), lbStyle,
- lbWordStyle, false);
+ lbWordStyle, true /* can hyphenate */, false);
mt = strictStyleBuilder.build(text, true /* hyphenation */, true /* full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
EXPECT_EQ((size_t)1, mt->runs.size());
EXPECT_EQ(LineBreakStyle::Strict, mt->runs[0]->lineBreakStyle());
@@ -608,7 +635,8 @@ TEST(MeasuredTextTest, testLineBreakStyle_from_run) {
Range range(0, text.size());
MinikinPaint paint(font);
- StyleRun styleRun(range, std::move(paint), lbStyle, lbWordStyle, false /* isRtl */);
+ StyleRun styleRun(range, std::move(paint), lbStyle, lbWordStyle, true /* can hyphenate */,
+ false /* isRtl */);
EXPECT_EQ(LineBreakStyle::Strict, styleRun.lineBreakStyle());
EXPECT_EQ(LineBreakWordStyle::Phrase, styleRun.lineBreakWordStyle());
@@ -617,4 +645,38 @@ TEST(MeasuredTextTest, testLineBreakStyle_from_run) {
EXPECT_EQ(LineBreakWordStyle::None, replacementRun.lineBreakWordStyle());
}
+TEST(MeasuredTextTest, hasOverhang_false) {
+ auto text = utf8ToUtf16("Hello, World!");
+ auto font = buildFontCollection("Ascii.ttf");
+ int lbStyle = (int)LineBreakStyle::None;
+ int lbWordStyle = (int)LineBreakWordStyle::None;
+
+ MeasuredTextBuilder builder;
+ MinikinPaint paint(font);
+ paint.size = 10.0f;
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* hyphenation */, false /* is RTL */);
+ auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
+ true /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
+ EXPECT_FALSE(mt->hasOverhang(Range(0, text.size())));
+}
+
+TEST(MeasuredTextTest, hasOverhang_true) {
+ auto text = utf8ToUtf16("b");
+ auto font = buildFontCollection("OvershootTest.ttf");
+ int lbStyle = (int)LineBreakStyle::None;
+ int lbWordStyle = (int)LineBreakWordStyle::None;
+
+ MeasuredTextBuilder builder;
+ MinikinPaint paint(font);
+ paint.size = 10.0f;
+ builder.addStyleRun(0, text.size(), std::move(paint), lbStyle, lbWordStyle,
+ true /* hyphenation */, false /* is RTL */);
+ auto mt = builder.build(text, true /* hyphenation */, true /* full layout */,
+ true /* computeBounds */, false /* ignore kerning */,
+ nullptr /* no hint */);
+ EXPECT_TRUE(mt->hasOverhang(Range(0, text.size())));
+}
+
} // namespace minikin
diff --git a/tests/unittest/OptimalLineBreakerTest.cpp b/tests/unittest/OptimalLineBreakerTest.cpp
index 18619e3..003db71 100644
--- a/tests/unittest/OptimalLineBreakerTest.cpp
+++ b/tests/unittest/OptimalLineBreakerTest.cpp
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-#include <memory>
-
+#include <com_android_text_flags.h>
+#include <flag_macros.h>
#include <gtest/gtest.h>
-#include "minikin/Hyphenator.h"
+#include <memory>
#include "FileUtils.h"
#include "FontTestUtils.h"
@@ -29,6 +29,7 @@
#include "OptimalLineBreaker.h"
#include "UnicodeUtils.h"
#include "WordBreaker.h"
+#include "minikin/Hyphenator.h"
namespace minikin {
namespace {
@@ -47,6 +48,12 @@ constexpr float DESCENT = 20.0f;
constexpr float CUSTOM_ASCENT = -160.0f;
constexpr float CUSTOM_DESCENT = 40.0f;
+// A test string for Japanese. The meaning is that "Today is a sunny day."
+// The expected line break of phrase and non-phrase cases are:
+// Phrase: | \u672C\u65E5\u306F | \u6674\u5929\u306A\u308A\u3002 |
+// Non-Phrase: | \u672C | \u65E5 | \u306F | \u6674 | \u5929 | \u306A | \u308A\u3002 |
+const char* JP_TEXT = "\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002";
+
class OptimalLineBreakerTest : public testing::Test {
public:
OptimalLineBreakerTest() {}
@@ -75,20 +82,90 @@ protected:
MinikinPaint paint(fc);
paint.size = 10.0f; // Make 1em=10px
paint.localeListId = LocaleListCache::getId(lang);
- builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, 0, false);
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, 0, true, false);
bool computeHyphen = frequency != HyphenationFrequency::None;
std::unique_ptr<MeasuredText> measuredText =
builder.build(textBuffer, computeHyphen, false /* compute full layout */,
- ignoreKerning, nullptr /* no hint */);
+ false /* computeBounds */, ignoreKerning, nullptr /* no hint */);
return doLineBreak(textBuffer, *measuredText, strategy, frequency, lineWidth);
}
+ LineBreakResult doLineBreakForJapanese(const U16StringPiece& textBuffer,
+ LineBreakWordStyle lbwStyle, const std::string& lang,
+ float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family1 = buildFontFamily("Japanese.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family1};
+ auto fc = FontCollection::create(families);
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId(lang);
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, (int)lbwStyle, true, false);
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, false /* computeHyphen */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignoreKerning */, nullptr /* no hint */);
+ return doLineBreak(textBuffer, *measuredText, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, lineWidth);
+ }
+ LineBreakResult doLineBreakWithNoHyphenSpan(const U16StringPiece& textBuffer,
+ const Range& noHyphenRange, float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family1 = buildFontFamily("Ascii.ttf");
+ auto family2 = buildFontFamily("CustomExtent.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family1, family2};
+ auto fc = FontCollection::create(families);
+ if (noHyphenRange.getStart() != 0) {
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(0, noHyphenRange.getStart(), std::move(paint), 0, 0,
+ true /* hyphenation */, false);
+ }
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(noHyphenRange.getStart(), noHyphenRange.getEnd(), std::move(paint), 0,
+ 0, false /* no hyphenation */, false);
+ if (noHyphenRange.getEnd() != textBuffer.size()) {
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(noHyphenRange.getEnd(), textBuffer.size(), std::move(paint), 0, 0,
+ true /* hyphenation */, false);
+ }
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, true /* computeHyphen */, false /* compute full layout */,
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ return doLineBreak(textBuffer, *measuredText, BreakStrategy::HighQuality,
+ HyphenationFrequency::Normal, lineWidth);
+ }
+
+ LineBreakResult doLineBreakForBounds(const U16StringPiece& textBuffer, BreakStrategy strategy,
+ HyphenationFrequency frequency, float lineWidth) {
+ MeasuredTextBuilder builder;
+ auto family1 = buildFontFamily("OvershootTest.ttf");
+ auto family2 = buildFontFamily("Ascii.ttf");
+ std::vector<std::shared_ptr<FontFamily>> families = {family1, family2};
+ auto fc = FontCollection::create(families);
+ MinikinPaint paint(fc);
+ paint.size = 10.0f; // Make 1em=10px
+ paint.localeListId = LocaleListCache::getId("en-US");
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, 0, true, false);
+ bool computeHyphen = frequency != HyphenationFrequency::None;
+ std::unique_ptr<MeasuredText> measuredText = builder.build(
+ textBuffer, computeHyphen, false /* compute full layout */,
+ true /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
+ RectangleLineWidth rectangleLineWidth(lineWidth);
+ return breakLineOptimal(textBuffer, *measuredText, rectangleLineWidth, strategy, frequency,
+ false /* justified */, true /* useBoundsForWidth */);
+ }
+
LineBreakResult doLineBreak(const U16StringPiece& textBuffer, const MeasuredText& measuredText,
BreakStrategy strategy, HyphenationFrequency frequency,
float lineWidth) {
RectangleLineWidth rectangleLineWidth(lineWidth);
return breakLineOptimal(textBuffer, measuredText, rectangleLineWidth, strategy, frequency,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
}
void expectBreak(const std::vector<LineBreakExpectation>& expect,
@@ -759,7 +836,7 @@ TEST_F(OptimalLineBreakerTest, testZeroWidthCharacter) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
const auto actual =
doLineBreak(textBuf, *measuredText, HIGH_QUALITY, NORMAL_HYPHENATION, LINE_WIDTH);
@@ -778,7 +855,7 @@ TEST_F(OptimalLineBreakerTest, testZeroWidthCharacter) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
const auto actual =
doLineBreak(textBuf, *measuredText, HIGH_QUALITY, NORMAL_HYPHENATION, LINE_WIDTH);
@@ -809,7 +886,7 @@ TEST_F(OptimalLineBreakerTest, testLocaleSwitchTest) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
const auto actual =
doLineBreak(textBuf, *measuredText, HIGH_QUALITY, NORMAL_HYPHENATION, LINE_WIDTH);
@@ -828,7 +905,7 @@ TEST_F(OptimalLineBreakerTest, testLocaleSwitchTest) {
DESCENT);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
const auto actual =
doLineBreak(textBuf, *measuredText, HIGH_QUALITY, NORMAL_HYPHENATION, LINE_WIDTH);
EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
@@ -903,7 +980,7 @@ TEST_F(OptimalLineBreakerTest, testLocaleSwitch_InEmailOrUrl) {
DESCENT);
std::unique_ptr<MeasuredText> measured = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
// clang-format off
std::vector<LineBreakExpectation> expect = {
@@ -946,7 +1023,7 @@ TEST_F(OptimalLineBreakerTest, testLocaleSwitch_InEmailOrUrl) {
DESCENT);
std::unique_ptr<MeasuredText> measured = builder.build(
textBuf, true /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
// clang-format off
std::vector<LineBreakExpectation> expect = {
@@ -1101,12 +1178,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpanNotBreakTest_SingleChar) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::None,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1194,12 +1271,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpanNotBreakTest_MultipleChars) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::None,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1282,12 +1359,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpanNotBreakTest_continuedReplacem
builder.addReplacementRun(19, 24, 5 * CHAR_WIDTH, LocaleListCache::getId("en-US"));
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::None,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1358,12 +1435,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpanNotBreakTest_CJK) {
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore krening */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore krening */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::None,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1515,12 +1592,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpan_GraphemeLineBreakWithMultiple
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::None,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1650,12 +1727,12 @@ TEST_F(OptimalLineBreakerTest, testReplacementSpanNotBreakTest_with_punctuation)
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuf, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(width);
TabStops tabStops(nullptr, 0, 0);
return breakLineOptimal(textBuf, *measuredText, rectangleLineWidth,
BreakStrategy::HighQuality, HyphenationFrequency::Normal,
- false /* justified */);
+ false /* justified */, false /* useBoundsForWidth */);
};
{
@@ -1856,12 +1933,13 @@ TEST_F(OptimalLineBreakerTest, roundingError) {
const std::vector<uint16_t> textBuffer = utf8ToUtf16("8888888888888888888");
float measured = Layout::measureText(textBuffer, Range(0, textBuffer.size()), Bidi::LTR, paint,
- StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, nullptr);
+ StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, nullptr,
+ nullptr /* bounds */);
- builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, 0, false);
+ builder.addStyleRun(0, textBuffer.size(), std::move(paint), 0, 0, true, false);
std::unique_ptr<MeasuredText> measuredText = builder.build(
textBuffer, false /* compute hyphenation */, false /* compute full layout */,
- false /* ignore kerning */, nullptr /* no hint */);
+ false /* computeBounds */, false /* ignore kerning */, nullptr /* no hint */);
RectangleLineWidth rectangleLineWidth(measured);
TabStops tabStops(nullptr, 0, 10);
LineBreakResult r = doLineBreak(textBuffer, *measuredText, BreakStrategy::Balanced,
@@ -1870,5 +1948,533 @@ TEST_F(OptimalLineBreakerTest, roundingError) {
EXPECT_EQ(1u, r.breakPoints.size());
}
+TEST_F(OptimalLineBreakerTest, testBreakWithoutBounds_trailing) {
+ // The OvershootTest.ttf has following coverage, extent, width and bbox.
+ // U+0061(a): 1em, ( 0, 0) - (1, 1)
+ // U+0062(b): 1em, ( 0, 0) - (1.5, 1)
+ // U+0063(c): 1em, ( 0, 0) - (2, 1)
+ // U+0064(d): 1em, ( 0, 0) - (2.5, 1)
+ // U+0065(e): 1em, (-0.5, 0) - (1, 1)
+ // U+0066(f): 1em, (-1.0, 0) - (1, 1)
+ // U+0067(g): 1em, (-1.5, 0) - (1, 1)
+ const std::vector<uint16_t> textBuf = utf8ToUtf16("dddd dddd dddd dddd");
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 1000;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd dddd dddd dddd", 190, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 205, 0), actual.bounds[0]);
+ }
+ {
+ constexpr float LINE_WIDTH = 110;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd dddd ", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd dddd", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 105, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(0, 10, 105, 0), actual.bounds[1]);
+ }
+ {
+ constexpr float LINE_WIDTH = 100;
+ // Even if the total advance of "dddd dddd" is 90, the width of bounding box of "dddd dddd"
+ // is
+ // Rect(0em, 1em, 10.5em, 0em). So "dddd dddd" is broken into two lines.
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"dddd", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[1]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[2]);
+ EXPECT_EQ(MinikinRect(0, 10, 55, 0), actual.bounds[3]);
+ }
+}
+
+TEST_F(OptimalLineBreakerTest, testBreakWithoutBounds_preceding) {
+ // The OvershootTest.ttf has following coverage, extent, width and bbox.
+ // U+0061(a): 1em, ( 0, 0) - (1, 1)
+ // U+0062(b): 1em, ( 0, 0) - (1.5, 1)
+ // U+0063(c): 1em, ( 0, 0) - (2, 1)
+ // U+0064(d): 1em, ( 0, 0) - (2.5, 1)
+ // U+0065(e): 1em, (-0.5, 0) - (1, 1)
+ // U+0066(f): 1em, (-1.0, 0) - (1, 1)
+ // U+0067(g): 1em, (-1.5, 0) - (1, 1)
+ const std::vector<uint16_t> textBuf = utf8ToUtf16("gggg gggg gggg gggg");
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 1000;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg gggg gggg gggg", 190, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 190, 0), actual.bounds[0]);
+ }
+ {
+ constexpr float LINE_WIDTH = 110;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg gggg ", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg gggg", 90, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 90, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(-15, 10, 90, 0), actual.bounds[1]);
+ }
+ {
+ constexpr float LINE_WIDTH = 100;
+ // Even if the total advance of "gggg gggg" is 90, the width of bounding box of "gggg gggg"
+ // is
+ // Rect(0em, 1em, 10.5em, 0em). So "gggg gggg" is broken into two lines.
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg ", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ {"gggg", 40, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT},
+ };
+ // clang-format on
+
+ const auto actual = doLineBreakForBounds(textBuf, BreakStrategy::HighQuality,
+ HyphenationFrequency::None, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[0]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[1]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[2]);
+ EXPECT_EQ(MinikinRect(-15, 10, 40, 0), actual.bounds[3]);
+ }
+}
+
+TEST_F(OptimalLineBreakerTest, testBreakWithHyphenation_NoHyphenSpan) {
+ const std::vector<uint16_t> textBuffer = utf8ToUtf16("This is Android. Here is hyphenation.");
+ const Range noHyphenRange(25, 37); // the range of the word "hyphenation".
+
+ constexpr StartHyphenEdit NO_START_HYPHEN = StartHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit NO_END_HYPHEN = EndHyphenEdit::NO_EDIT;
+ constexpr EndHyphenEdit END_HYPHEN = EndHyphenEdit::INSERT_HYPHEN;
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ constexpr float LINE_WIDTH = 170;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ { "This is Android. " , 160, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "Here is hyphena-" , 160, NO_START_HYPHEN, END_HYPHEN, ASCENT, DESCENT },
+ { "tion." , 50, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ };
+ // clang-format on
+
+ auto actual =
+ doLineBreak(textBuffer, BreakStrategy::HighQuality, HyphenationFrequency::Normal,
+ "en-US", LINE_WIDTH, false /* ignore kerning */);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuffer, actual);
+ }
+ {
+ constexpr float LINE_WIDTH = 170;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ { "This is An-" , 110, NO_START_HYPHEN, END_HYPHEN, ASCENT, DESCENT },
+ { "droid. Here is ", 140, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ { "hyphenation." , 120, NO_START_HYPHEN, NO_END_HYPHEN, ASCENT, DESCENT },
+ };
+ // clang-format on
+
+ auto actual = doLineBreakWithNoHyphenSpan(textBuffer, noHyphenRange, LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuffer, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(OptimalLineBreakerTest, testPhraseBreakNone,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002" , 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5" , 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002" , 60),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002", 40),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002" , 20),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::None, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(OptimalLineBreakerTest, testPhraseBreakPhrase,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Phrase, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
+
+TEST_F_WITH_FLAGS(OptimalLineBreakerTest, testPhraseBreakAuto,
+ REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(com::android::text::flags,
+ word_style_auto))) {
+ // For short hand of writing expectation for lines.
+ auto line = [](std::string t, float w) -> LineBreakExpectation {
+ return {t, w, StartHyphenEdit::NO_EDIT, EndHyphenEdit::NO_EDIT, ASCENT, DESCENT};
+ };
+
+ // Note that disable clang-format everywhere since aligned expectation is more readable.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 1));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 2));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 3));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 4));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ // When the line becomes more or equal to 5, the phrase based line break is disabled.
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 5));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+ {
+ const std::vector<uint16_t> textBuf = utf8ToUtf16(repeat(JP_TEXT, 6));
+ constexpr float LINE_WIDTH = 100;
+ // clang-format off
+ std::vector<LineBreakExpectation> expect = {
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5", 100),
+ line("\u306F\u6674\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674", 100),
+ line("\u5929\u306A\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A", 100),
+ line("\u308A\u3002\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002", 100),
+ line("\u672C\u65E5\u306F\u6674\u5929\u306A\u308A\u3002" , 80),
+ };
+ // clang-format on
+
+ const auto actual =
+ doLineBreakForJapanese(textBuf, LineBreakWordStyle::Auto, "ja-JP", LINE_WIDTH);
+ EXPECT_TRUE(sameLineBreak(expect, actual)) << toString(expect) << std::endl
+ << " vs " << std::endl
+ << toString(textBuf, actual);
+ }
+}
} // namespace
} // namespace minikin
diff --git a/tests/unittest/ScriptUtilsTest.cpp b/tests/unittest/ScriptUtilsTest.cpp
new file mode 100644
index 0000000..cbd9a56
--- /dev/null
+++ b/tests/unittest/ScriptUtilsTest.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include "ScriptUtils.h"
+#include "UnicodeUtils.h"
+
+namespace minikin {
+namespace {
+
+struct Result {
+ Result(int start, int end, hb_script_t script) : start(start), end(end), script(script) {}
+ int start;
+ int end;
+ hb_script_t script;
+};
+
+bool operator==(const Result& l, const Result& r) {
+ return l.start == r.start && l.end == r.end && l.script == r.script;
+}
+
+std::ostream& operator<<(std::ostream& os, const Result& r) {
+ char buf[5] = {};
+ buf[0] = static_cast<char>((r.script >> 24) & 0xFF);
+ buf[1] = static_cast<char>((r.script >> 16) & 0xFF);
+ buf[2] = static_cast<char>((r.script >> 8) & 0xFF);
+ buf[3] = static_cast<char>((r.script) & 0xFF);
+ return os << "(" << r.start << "," << r.end << "): " << buf;
+}
+
+std::vector<Result> splitByScript(const std::vector<uint16_t>& text, uint32_t start, uint32_t end) {
+ std::vector<Result> result;
+ for (const auto [range, script] : ScriptText(text, start, end)) {
+ result.emplace_back(range.getStart(), range.getEnd(), script);
+ }
+ return result;
+}
+
+std::vector<Result> splitByScript(const std::string& text, uint32_t start, uint32_t end) {
+ std::vector<uint16_t> utf16 = utf8ToUtf16(text);
+ return splitByScript(utf16, start, end);
+}
+
+TEST(ScriptUtilsTest, Latin) {
+ auto result = splitByScript("abcde", 0, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 5, HB_SCRIPT_LATIN), result[0]);
+
+ result = splitByScript("abcde", 0, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 3, HB_SCRIPT_LATIN), result[0]);
+
+ result = splitByScript("abcde", 2, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 5, HB_SCRIPT_LATIN), result[0]);
+
+ result = splitByScript("abcde", 2, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 3, HB_SCRIPT_LATIN), result[0]);
+}
+
+TEST(ScriptUtilsTest, Arabic) {
+ auto result = splitByScript("\u0645\u0631\u062D\u0628\u064B\u0627", 0, 6);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 6, HB_SCRIPT_ARABIC), result[0]);
+
+ result = splitByScript("\u0645\u0631\u062D\u0628\u064B\u0627", 0, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 3, HB_SCRIPT_ARABIC), result[0]);
+
+ result = splitByScript("\u0645\u0631\u062D\u0628\u064B\u0627", 2, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 5, HB_SCRIPT_ARABIC), result[0]);
+
+ result = splitByScript("\u0645\u0631\u062D\u0628\u064B\u0627", 2, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 3, HB_SCRIPT_ARABIC), result[0]);
+}
+
+TEST(ScriptUtilsTest, Common) {
+ auto result = splitByScript(" ", 0, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 5, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(" ", 0, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 3, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(" ", 2, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 5, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(" ", 2, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(2, 3, HB_SCRIPT_COMMON), result[0]);
+}
+
+TEST(ScriptUtilsTest, InheritOrCommon) {
+ // Parens are inherit which is inherit from the previous script. If there is no character
+ // before, use the next non-inherit type of script.
+ auto result = splitByScript("(abc)", 0, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 5, HB_SCRIPT_LATIN), result[0]);
+
+ result = splitByScript("[(b)]", 0, 5);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 5, HB_SCRIPT_LATIN), result[0]);
+
+ result = splitByScript("[(b)]", 0, 2);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 2, HB_SCRIPT_COMMON), result[0]);
+}
+
+TEST(ScriptUtilsTest, MultiScript_InheritOrCommon) {
+ auto result = splitByScript("a(\u0645)e", 0, 5);
+ EXPECT_EQ(Result(0, 2, HB_SCRIPT_LATIN), result[0]);
+ EXPECT_EQ(Result(2, 4, HB_SCRIPT_ARABIC), result[1]);
+ EXPECT_EQ(Result(4, 5, HB_SCRIPT_LATIN), result[2]);
+}
+
+TEST(ScriptUtilsTest, MultiScript_NoInheritOrCommon) {
+ auto result = splitByScript("a\u0645b\u0631c", 0, 5);
+ EXPECT_EQ(Result(0, 1, HB_SCRIPT_LATIN), result[0]);
+ EXPECT_EQ(Result(1, 2, HB_SCRIPT_ARABIC), result[1]);
+ EXPECT_EQ(Result(2, 3, HB_SCRIPT_LATIN), result[2]);
+ EXPECT_EQ(Result(3, 4, HB_SCRIPT_ARABIC), result[3]);
+ EXPECT_EQ(Result(4, 5, HB_SCRIPT_LATIN), result[4]);
+}
+
+TEST(ScriptUtilsTest, SurrogatePair) {
+ auto result = splitByScript(std::vector<uint16_t>({0xD83C, 0xDFF3, 0xD83C, 0xDFF3}), 0, 4);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 4, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(std::vector<uint16_t>({0xD83C, 0xDFF3, 0xD83C, 0xDFF3}), 0, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(0, 3, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(std::vector<uint16_t>({0xD83C, 0xDFF3, 0xD83C, 0xDFF3}), 1, 4);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(1, 4, HB_SCRIPT_COMMON), result[0]);
+
+ result = splitByScript(std::vector<uint16_t>({0xD83C, 0xDFF3, 0xD83C, 0xDFF3}), 1, 3);
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(Result(1, 3, HB_SCRIPT_COMMON), result[0]);
+}
+} // namespace
+} // namespace minikin
diff --git a/tests/unittest/SystemFontsTest.cpp b/tests/unittest/SystemFontsTest.cpp
index 1bff31f..50fcc3e 100644
--- a/tests/unittest/SystemFontsTest.cpp
+++ b/tests/unittest/SystemFontsTest.cpp
@@ -105,7 +105,7 @@ TEST(SystemFontTest, getAvailableFont_dedupFonts) {
EXPECT_EQ(3u, fonts.size()); // Ascii, Bold and BoldItalic
std::unordered_set<std::string> fontPaths;
for (const auto& font : fonts) {
- fontPaths.insert(getBasename(font->typeface()->GetFontPath()));
+ fontPaths.insert(getBasename(font->baseTypeface()->GetFontPath()));
}
EXPECT_TRUE(fontPaths.find("Ascii.ttf") != fontPaths.end());
diff --git a/tests/unittest/WordBreakerTests.cpp b/tests/unittest/WordBreakerTests.cpp
index 0c20a80..fe7f953 100644
--- a/tests/unittest/WordBreakerTests.cpp
+++ b/tests/unittest/WordBreakerTests.cpp
@@ -672,7 +672,7 @@ TEST(WordBreakerTest, LineBreakerPool_acquire_with_release) {
pool.acquire(enUS, LineBreakStyle::Loose, LineBreakWordStyle::None);
uint64_t enUSBreakerLocaleId = enUSBreaker.localeId;
- UBreakIterator* enUSBreakerPtr = enUSBreaker.breaker.get();
+ auto* enUSBreakerPtr = enUSBreaker.breaker.get();
pool.release(std::move(enUSBreaker));
EXPECT_EQ(nullptr, enUSBreaker.breaker.get());
diff --git a/tests/util/FontTestUtils.cpp b/tests/util/FontTestUtils.cpp
index 5308e0c..0d563b8 100644
--- a/tests/util/FontTestUtils.cpp
+++ b/tests/util/FontTestUtils.cpp
@@ -109,9 +109,9 @@ std::vector<std::shared_ptr<FontFamily>> getFontFamilies(const std::string& font
family = FontFamily::create(variant, std::move(fonts));
} else {
uint32_t langId = registerLocaleList(std::string((const char*)lang, xmlStrlen(lang)));
- family =
- FontFamily::create(langId, variant, std::move(fonts),
- false /* isCustomFallback */, false /* isdefaultFallback */);
+ family = FontFamily::create(langId, variant, std::move(fonts),
+ false /* isCustomFallback */, false /* isdefaultFallback */,
+ VariationFamilyType::None);
}
families.push_back(family);
}
@@ -136,7 +136,8 @@ std::shared_ptr<FontFamily> buildFontFamily(const std::string& filePath, const s
std::vector<std::shared_ptr<Font>> fonts;
fonts.push_back(Font::Builder(font).build());
return FontFamily::create(LocaleListCache::getId(lang), FamilyVariant::DEFAULT,
- std::move(fonts), isCustomFallback, false /* isDefaultFallback */);
+ std::move(fonts), isCustomFallback, false /* isDefaultFallback */,
+ VariationFamilyType::None);
}
} // namespace minikin
diff --git a/tests/util/FreeTypeMinikinFontForTest.cpp b/tests/util/FreeTypeMinikinFontForTest.cpp
index ce36ec0..146eb6b 100644
--- a/tests/util/FreeTypeMinikinFontForTest.cpp
+++ b/tests/util/FreeTypeMinikinFontForTest.cpp
@@ -59,8 +59,9 @@ void loadGlyphOrDie(uint32_t glyphId, float size, FT_Face face) {
} // namespace
-FreeTypeMinikinFontForTest::FreeTypeMinikinFontForTest(const std::string& font_path, int index)
- : mFontPath(font_path), mFontIndex(index) {
+FreeTypeMinikinFontForTest::FreeTypeMinikinFontForTest(const std::string& font_path, int index,
+ const std::vector<FontVariation>& axes)
+ : mFontPath(font_path), mFontIndex(index), mAxes(axes) {
int fd = open(font_path.c_str(), O_RDONLY);
LOG_ALWAYS_FATAL_IF(fd == -1, "Open failed: %s", font_path.c_str());
struct stat st = {};
@@ -135,4 +136,9 @@ void FreeTypeMinikinFontForTestFactory::skip(BufferReader* reader) const {
reader->skipString(); // fontPath
}
+std::shared_ptr<MinikinFont> FreeTypeMinikinFontForTest::createFontWithVariation(
+ const std::vector<FontVariation>& axes) const {
+ return std::make_shared<FreeTypeMinikinFontForTest>(mFontPath, mFontIndex, axes);
+}
+
} // namespace minikin
diff --git a/tests/util/FreeTypeMinikinFontForTest.h b/tests/util/FreeTypeMinikinFontForTest.h
index 6903deb..f684ec6 100644
--- a/tests/util/FreeTypeMinikinFontForTest.h
+++ b/tests/util/FreeTypeMinikinFontForTest.h
@@ -33,9 +33,12 @@ namespace minikin {
class FreeTypeMinikinFontForTest : public MinikinFont {
public:
- FreeTypeMinikinFontForTest(const std::string& font_path, int index);
+ FreeTypeMinikinFontForTest(const std::string& font_path, int index,
+ const std::vector<FontVariation>& axes);
+ FreeTypeMinikinFontForTest(const std::string& font_path, int index)
+ : FreeTypeMinikinFontForTest(font_path, index, std::vector<FontVariation>()) {}
FreeTypeMinikinFontForTest(const std::string& font_path)
- : FreeTypeMinikinFontForTest(font_path, 0) {}
+ : FreeTypeMinikinFontForTest(font_path, 0, std::vector<FontVariation>()) {}
virtual ~FreeTypeMinikinFontForTest();
// MinikinFont overrides.
@@ -51,6 +54,7 @@ public:
size_t GetFontSize() const { return mFontSize; }
int GetFontIndex() const { return mFontIndex; }
const std::vector<minikin::FontVariation>& GetAxes() const { return mAxes; }
+ std::shared_ptr<MinikinFont> createFontWithVariation(const std::vector<FontVariation>&) const;
private:
const std::string mFontPath;
diff --git a/tests/util/UnicodeUtils.cpp b/tests/util/UnicodeUtils.cpp
index 25716a7..1809dd1 100644
--- a/tests/util/UnicodeUtils.cpp
+++ b/tests/util/UnicodeUtils.cpp
@@ -14,14 +14,15 @@
* limitations under the License.
*/
-#include <cstdlib>
-#include <string>
-#include <vector>
-
#include <cutils/log.h>
#include <unicode/utf.h>
#include <unicode/utf8.h>
+#include <cstdlib>
+#include <sstream>
+#include <string>
+#include <vector>
+
#include "minikin/U16StringPiece.h"
namespace minikin {
@@ -138,4 +139,12 @@ std::string utf16ToUtf8(const U16StringPiece& u16String) {
return out;
}
+std::string repeat(const std::string& text, int count) {
+ std::stringstream ss;
+ for (int i = 0; i < count; ++i) {
+ ss << text;
+ }
+ return ss.str();
+}
+
} // namespace minikin
diff --git a/tests/util/UnicodeUtils.h b/tests/util/UnicodeUtils.h
index af9d056..be11f61 100644
--- a/tests/util/UnicodeUtils.h
+++ b/tests/util/UnicodeUtils.h
@@ -32,4 +32,6 @@ std::vector<uint16_t> parseUnicodeString(const std::string& in);
std::vector<uint16_t> utf8ToUtf16(const std::string& text);
std::string utf16ToUtf8(const U16StringPiece& u16String);
+std::string repeat(const std::string& text, int count);
+
} // namespace minikin