diff --git a/Telegram/Resources/art/emoji.webp b/Telegram/Resources/art/emoji.webp
index 52c672556..c3dec7d41 100644
Binary files a/Telegram/Resources/art/emoji.webp and b/Telegram/Resources/art/emoji.webp differ
diff --git a/Telegram/Resources/art/emoji_125x.webp b/Telegram/Resources/art/emoji_125x.webp
index ae52f655c..133f91dbb 100644
Binary files a/Telegram/Resources/art/emoji_125x.webp and b/Telegram/Resources/art/emoji_125x.webp differ
diff --git a/Telegram/Resources/art/emoji_150x.webp b/Telegram/Resources/art/emoji_150x.webp
index e15d52dd7..cf04fb6de 100644
Binary files a/Telegram/Resources/art/emoji_150x.webp and b/Telegram/Resources/art/emoji_150x.webp differ
diff --git a/Telegram/Resources/art/emoji_200x.webp b/Telegram/Resources/art/emoji_200x.webp
index 6149cc081..ad423569a 100644
Binary files a/Telegram/Resources/art/emoji_200x.webp and b/Telegram/Resources/art/emoji_200x.webp differ
diff --git a/Telegram/Resources/art/emoji_250x.webp b/Telegram/Resources/art/emoji_250x.webp
index 9e1d62cae..634db1194 100644
Binary files a/Telegram/Resources/art/emoji_250x.webp and b/Telegram/Resources/art/emoji_250x.webp differ
diff --git a/Telegram/SourceFiles/_other/genemoji.cpp b/Telegram/SourceFiles/_other/genemoji.cpp
deleted file mode 100644
index e08ab5de1..000000000
--- a/Telegram/SourceFiles/_other/genemoji.cpp
+++ /dev/null
@@ -1,2338 +0,0 @@
-/*
-This file is part of Telegram Desktop,
-the official desktop version of Telegram messaging app, see https://telegram.org
-
-Telegram Desktop is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-It is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-In addition, as a special exception, the copyright holders give permission
-to link the code of portions of this program with the OpenSSL library.
-
-Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
-Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
-*/
-#include "genemoji.h"
-
-#include <QtCore/QtPlugin>
-#include <QtGui/QFontDatabase>
-
-#ifdef Q_OS_WIN
-Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
-#endif
-
-#ifdef Q_OS_MAC
-Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)
-Q_IMPORT_PLUGIN(QDDSPlugin)
-Q_IMPORT_PLUGIN(QICNSPlugin)
-Q_IMPORT_PLUGIN(QICOPlugin)
-Q_IMPORT_PLUGIN(QTgaPlugin)
-Q_IMPORT_PLUGIN(QTiffPlugin)
-Q_IMPORT_PLUGIN(QWbmpPlugin)
-Q_IMPORT_PLUGIN(QWebpPlugin)
-#else
-#error Only Mac OS X is supported
-#endif
-
-typedef quint32 uint32;
-typedef quint64 uint64;
-
-struct EmojiData {
-	uint32 code, code2;
-	int x, y;
-	int category, index;
-	uint32 color;
-};
-
-// copied from emojibox.cpp
-struct EmojiReplace {
-	uint32 code;
-	const char *replace;
-};
-
-EmojiReplace replaces[] = {
-	{ 0xD83DDE0AU, ":-)" },
-	{ 0xD83DDE0DU, "8-)" },
-	{ 0x2764U, "<3" },
-	{ 0xD83DDC8BU, ":kiss:" },
-	{ 0xD83DDE01U, ":grin:" },
-	{ 0xD83DDE02U, ":joy:" },
-	{ 0xD83DDE1AU, ":-*" },
-	{ 0xD83DDE06U, "xD" },
-	{ 0xD83DDC4DU, ":like:" },
-	{ 0xD83DDC4EU, ":dislike:" },
-	{ 0x261DU, ":up:" },
-	{ 0x270CU, ":v:" },
-	{ 0xD83DDC4CU, ":ok:" },
-	{ 0xD83DDE0EU, "B-)" },
-	{ 0xD83DDE03U, ":-D" },
-	{ 0xD83DDE09U, ";-)" },
-	{ 0xD83DDE1CU, ";-P" },
-	{ 0xD83DDE0BU, ":-p" },
-	{ 0xD83DDE14U, "3(" },
-	{ 0xD83DDE1EU, ":-(" },
-	{ 0xD83DDE0FU, ":]" },
-	{ 0xD83DDE22U, ":'(" },
-	{ 0xD83DDE2DU, ":_(" },
-	{ 0xD83DDE29U, ":((" },
-	{ 0xD83DDE28U, ":o" },
-	{ 0xD83DDE10U, ":|" },
-	{ 0xD83DDE0CU, "3-)" },
-	{ 0xD83DDE20U, ">(" },
-	{ 0xD83DDE21U, ">((" },
-	{ 0xD83DDE07U, "O:)" },
-	{ 0xD83DDE30U, ";o" },
-	{ 0xD83DDE33U, "8|" },
-	{ 0xD83DDE32U, "8o" },
-	{ 0xD83DDE37U, ":X" },
-	{ 0xD83DDE08U, "}:)" },
-};
-const uint32 replacesCount = sizeof(replaces) / sizeof(EmojiReplace);
-typedef QMap<QString, uint32> ReplaceMap;
-ReplaceMap replaceMap;
-
-static const int variantsCount = 5, inRow = 40, imSizes[] = { 18, 22, 27, 36, 45, 180 }, badSizes[] = { 1, 1, 0, 0, 0 };
-static const int emojiFontSizes[] = { 14, 20, 27, 36, 45, 180 };
-static const int emojiDeltas[] = { 15, 20, 25, 34, 42, 167 };
-static const char *variantPostfix[] = { "", "_125x", "_150x", "_200x", "_250x" };
-static const char *variantNames[] = { "dbisOne", "dbisOneAndQuarter", "dbisOneAndHalf", "dbisTwo" };
-
-uint64 emojiColors[] = {
-	0xD83CDFFBLLU,
-	0xD83CDFFCLLU,
-	0xD83CDFFDLLU,
-	0xD83CDFFELLU,
-	0xD83CDFFFLLU,
-};
-uint64 emojiColored[] = {
-	0xD83DDE4CLLU,
-	0xD83DDC4FLLU,
-	0xD83DDC4BLLU,
-	0xD83DDC4DLLU,
-	0xD83DDC4ELLU,
-	0xD83DDC4ALLU,
-	0x270ALLU,
-	0x270CLLU,
-	0xD83DDC4CLLU,
-	0x270BLLU,
-	0xD83DDC50LLU,
-	0xD83DDCAALLU,
-	0xD83DDE4FLLU,
-	0x261DLLU,
-	0xD83DDC46LLU,
-	0xD83DDC47LLU,
-	0xD83DDC48LLU,
-	0xD83DDC49LLU,
-	0xD83DDD95LLU,
-	0xD83DDD90LLU,
-	0xD83EDD18LLU,
-	0xD83DDD96LLU,
-	0x270DLLU,
-	0xD83DDC85LLU,
-	0xD83DDC42LLU,
-	0xD83DDC43LLU,
-	0xD83DDC76LLU,
-	0xD83DDC66LLU,
-	0xD83DDC67LLU,
-	0xD83DDC68LLU,
-	0xD83DDC69LLU,
-	0xD83DDC71LLU,
-	0xD83DDC74LLU,
-	0xD83DDC75LLU,
-	0xD83DDC72LLU,
-	0xD83DDC73LLU,
-	0xD83DDC6ELLU,
-	0xD83DDC77LLU,
-	0xD83DDC82LLU,
-	0xD83CDF85LLU,
-	0xD83DDC7CLLU,
-	0xD83DDC78LLU,
-	0xD83DDC70LLU,
-	0xD83DDEB6LLU,
-	0xD83CDFC3LLU,
-	0xD83DDC83LLU,
-	0xD83DDE47LLU,
-	0xD83DDC81LLU,
-	0xD83DDE45LLU,
-	0xD83DDE46LLU,
-	0xD83DDE4BLLU,
-	0xD83DDE4ELLU,
-	0xD83DDE4DLLU,
-	0xD83DDC87LLU,
-	0xD83DDC86LLU,
-	0xD83DDEA3LLU,
-	0xD83CDFCALLU,
-	0xD83CDFC4LLU,
-	0xD83DDEC0LLU,
-	0x26F9LLU,
-	0xD83CDFCBLLU,
-	0xD83DDEB4LLU,
-	0xD83DDEB5LLU,
-	0xD83CDFC7LLU,
-};
-const char *emojiSequences[] = { // getter of sequence emojis is done manually
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7",
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7",
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7",
-
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa9",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa8",
-
-	"\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa9",
-	"\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa8",
-
-	"\xf0\x9f\x91\x81\xe2\x80\x8d\xf0\x9f\x97\xa8",
-};
-
-typedef QMap<uint64, EmojiData> EmojisData;
-EmojisData emojisData;
-
-uint64 emojiCategory1[] = {
-	0xD83DDE00LLU,
-	0xD83DDE2CLLU,
-	0xD83DDE01LLU,
-	0xD83DDE02LLU,
-	0xD83DDE03LLU,
-	0xD83DDE04LLU,
-	0xD83DDE05LLU,
-	0xD83DDE06LLU,
-	0xD83DDE07LLU,
-	0xD83DDE09LLU,
-	0xD83DDE0ALLU,
-	0xD83DDE42LLU,
-	0xD83DDE43LLU,
-	0x263ALLU,
-	0xD83DDE0BLLU,
-	0xD83DDE0CLLU,
-	0xD83DDE0DLLU,
-	0xD83DDE18LLU,
-	0xD83DDE17LLU,
-	0xD83DDE19LLU,
-	0xD83DDE1ALLU,
-	0xD83DDE1CLLU,
-	0xD83DDE1DLLU,
-	0xD83DDE1BLLU,
-	0xD83EDD11LLU,
-	0xD83EDD13LLU,
-	0xD83DDE0ELLU,
-	0xD83EDD17LLU,
-	0xD83DDE0FLLU,
-	0xD83DDE36LLU,
-	0xD83DDE10LLU,
-	0xD83DDE11LLU,
-	0xD83DDE12LLU,
-	0xD83DDE44LLU,
-	0xD83EDD14LLU,
-	0xD83DDE33LLU,
-	0xD83DDE1ELLU,
-	0xD83DDE1FLLU,
-	0xD83DDE20LLU,
-	0xD83DDE21LLU,
-	0xD83DDE14LLU,
-	0xD83DDE15LLU,
-	0xD83DDE41LLU,
-	0x2639LLU,
-	0xD83DDE23LLU,
-	0xD83DDE16LLU,
-	0xD83DDE2BLLU,
-	0xD83DDE29LLU,
-	0xD83DDE24LLU,
-	0xD83DDE2ELLU,
-	0xD83DDE31LLU,
-	0xD83DDE28LLU,
-	0xD83DDE30LLU,
-	0xD83DDE2FLLU,
-	0xD83DDE26LLU,
-	0xD83DDE27LLU,
-	0xD83DDE22LLU,
-	0xD83DDE25LLU,
-	0xD83DDE2ALLU,
-	0xD83DDE13LLU,
-	0xD83DDE2DLLU,
-	0xD83DDE35LLU,
-	0xD83DDE32LLU,
-	0xD83EDD10LLU,
-	0xD83DDE37LLU,
-	0xD83EDD12LLU,
-	0xD83EDD15LLU,
-	0xD83DDE34LLU,
-	0xD83DDCA4LLU,
-	0xD83DDCA9LLU,
-	0xD83DDE08LLU,
-	0xD83DDC7FLLU,
-	0xD83DDC79LLU,
-	0xD83DDC7ALLU,
-	0xD83DDC80LLU,
-	0xD83DDC7BLLU,
-	0xD83DDC7DLLU,
-	0xD83EDD16LLU,
-	0xD83DDE3ALLU,
-	0xD83DDE38LLU,
-	0xD83DDE39LLU,
-	0xD83DDE3BLLU,
-	0xD83DDE3CLLU,
-	0xD83DDE3DLLU,
-	0xD83DDE40LLU,
-	0xD83DDE3FLLU,
-	0xD83DDE3ELLU,
-	0xD83DDE4CLLU,
-	0xD83DDC4FLLU,
-	0xD83DDC4BLLU,
-	0xD83DDC4DLLU,
-	0xD83DDC4ELLU,
-	0xD83DDC4ALLU,
-	0x270ALLU,
-	0x270CLLU,
-	0xD83DDC4CLLU,
-	0x270BLLU,
-	0xD83DDC50LLU,
-	0xD83DDCAALLU,
-	0xD83DDE4FLLU,
-	0x261DLLU,
-	0xD83DDC46LLU,
-	0xD83DDC47LLU,
-	0xD83DDC48LLU,
-	0xD83DDC49LLU,
-	0xD83DDD95LLU,
-	0xD83DDD90LLU,
-	0xD83EDD18LLU,
-	0xD83DDD96LLU,
-	0x270DLLU,
-	0xD83DDC85LLU,
-	0xD83DDC44LLU,
-	0xD83DDC45LLU,
-	0xD83DDC42LLU,
-	0xD83DDC43LLU,
-	0xD83DDC41LLU,
-	0xD83DDC40LLU,
-	0xD83DDC64LLU,
-	0xD83DDC65LLU,
-	0xD83DDDE3LLU,
-	0xD83DDC76LLU,
-	0xD83DDC66LLU,
-	0xD83DDC67LLU,
-	0xD83DDC68LLU,
-	0xD83DDC69LLU,
-	0xD83DDC71LLU,
-	0xD83DDC74LLU,
-	0xD83DDC75LLU,
-	0xD83DDC72LLU,
-	0xD83DDC73LLU,
-	0xD83DDC6ELLU,
-	0xD83DDC77LLU,
-	0xD83DDC82LLU,
-	0xD83DDD75LLU,
-	0xD83CDF85LLU,
-	0xD83DDC7CLLU,
-	0xD83DDC78LLU,
-	0xD83DDC70LLU,
-	0xD83DDEB6LLU,
-	0xD83CDFC3LLU,
-	0xD83DDC83LLU,
-	0xD83DDC6FLLU,
-	0xD83DDC6BLLU,
-	0xD83DDC6CLLU,
-	0xD83DDC6DLLU,
-	0xD83DDE47LLU,
-	0xD83DDC81LLU,
-	0xD83DDE45LLU,
-	0xD83DDE46LLU,
-	0xD83DDE4BLLU,
-	0xD83DDE4ELLU,
-	0xD83DDE4DLLU,
-	0xD83DDC87LLU,
-	0xD83DDC86LLU,
-	0xD83DDC91LLU,
-	0xFFFF000ELLU,//0xD83DDC69LLU,0x200DLLU,0x2764LLU,0xFE0FLLU,0x200DLLU,0xD83DDC69LLU,
-	0xFFFF000FLLU,//0xD83DDC68LLU,0x200DLLU,0x2764LLU,0xFE0FLLU,0x200DLLU,0xD83DDC68LLU,
-	0xD83DDC8FLLU,
-	0xFFFF0010LLU,//0xD83DDC69LLU,0x200DLLU,0x2764LLU,0xFE0FLLU,0x200DLLU,0xD83DDC8BLLU,0x200DLLU,0xD83DDC69LLU,
-	0xFFFF0011LLU,//0xD83DDC68LLU,0x200DLLU,0x2764LLU,0xFE0FLLU,0x200DLLU,0xD83DDC8BLLU,0x200DLLU,0xD83DDC68LLU,
-	0xD83DDC6ALLU,
-	0xFFFF0000LLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,
-	0xFFFF0001LLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF0002LLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC66LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF0003LLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC67LLU,
-	0xFFFF0004LLU,//0xD83DDC69LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF0005LLU,//0xD83DDC69LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,
-	0xFFFF0006LLU,//0xD83DDC69LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF0007LLU,//0xD83DDC69LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC66LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF0008LLU,//0xD83DDC69LLU,0x200DLLU,0xD83DDC69LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC67LLU,
-	0xFFFF0009LLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC68LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF000ALLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC68LLU,0x200DLLU,0xD83DDC67LLU,
-	0xFFFF000BLLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC68LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF000CLLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC68LLU,0x200DLLU,0xD83DDC66LLU,0x200DLLU,0xD83DDC66LLU,
-	0xFFFF000DLLU,//0xD83DDC68LLU,0x200DLLU,0xD83DDC68LLU,0x200DLLU,0xD83DDC67LLU,0x200DLLU,0xD83DDC67LLU,
-	0xD83DDC5ALLU,
-	0xD83DDC55LLU,
-	0xD83DDC56LLU,
-	0xD83DDC54LLU,
-	0xD83DDC57LLU,
-	0xD83DDC59LLU,
-	0xD83DDC58LLU,
-	0xD83DDC84LLU,
-	0xD83DDC8BLLU,
-	0xD83DDC63LLU,
-	0xD83DDC60LLU,
-	0xD83DDC61LLU,
-	0xD83DDC62LLU,
-	0xD83DDC5ELLU,
-	0xD83DDC5FLLU,
-	0xD83DDC52LLU,
-	0xD83CDFA9LLU,
-	0xD83CDF93LLU,
-	0xD83DDC51LLU,
-	0x26D1LLU,
-	0xD83CDF92LLU,
-	0xD83DDC5DLLU,
-	0xD83DDC5BLLU,
-	0xD83DDC5CLLU,
-	0xD83DDCBCLLU,
-	0xD83DDC53LLU,
-	0xD83DDD76LLU,
-	0xD83DDC8DLLU,
-	0xD83CDF02LLU,
-};
-
-uint64 emojiCategory2[] = {
-	0xD83DDC36LLU,
-	0xD83DDC31LLU,
-	0xD83DDC2DLLU,
-	0xD83DDC39LLU,
-	0xD83DDC30LLU,
-	0xD83DDC3BLLU,
-	0xD83DDC3CLLU,
-	0xD83DDC28LLU,
-	0xD83DDC2FLLU,
-	0xD83EDD81LLU,
-	0xD83DDC2ELLU,
-	0xD83DDC37LLU,
-	0xD83DDC3DLLU,
-	0xD83DDC38LLU,
-	0xD83DDC19LLU,
-	0xD83DDC35LLU,
-	0xD83DDE48LLU,
-	0xD83DDE49LLU,
-	0xD83DDE4ALLU,
-	0xD83DDC12LLU,
-	0xD83DDC14LLU,
-	0xD83DDC27LLU,
-	0xD83DDC26LLU,
-	0xD83DDC24LLU,
-	0xD83DDC23LLU,
-	0xD83DDC25LLU,
-	0xD83DDC3ALLU,
-	0xD83DDC17LLU,
-	0xD83DDC34LLU,
-	0xD83EDD84LLU,
-	0xD83DDC1DLLU,
-	0xD83DDC1BLLU,
-	0xD83DDC0CLLU,
-	0xD83DDC1ELLU,
-	0xD83DDC1CLLU,
-	0xD83DDD77LLU,
-	0xD83EDD82LLU,
-	0xD83EDD80LLU,
-	0xD83DDC0DLLU,
-	0xD83DDC22LLU,
-	0xD83DDC20LLU,
-	0xD83DDC1FLLU,
-	0xD83DDC21LLU,
-	0xD83DDC2CLLU,
-	0xD83DDC33LLU,
-	0xD83DDC0BLLU,
-	0xD83DDC0ALLU,
-	0xD83DDC06LLU,
-	0xD83DDC05LLU,
-	0xD83DDC03LLU,
-	0xD83DDC02LLU,
-	0xD83DDC04LLU,
-	0xD83DDC2ALLU,
-	0xD83DDC2BLLU,
-	0xD83DDC18LLU,
-	0xD83DDC10LLU,
-	0xD83DDC0FLLU,
-	0xD83DDC11LLU,
-	0xD83DDC0ELLU,
-	0xD83DDC16LLU,
-	0xD83DDC00LLU,
-	0xD83DDC01LLU,
-	0xD83DDC13LLU,
-	0xD83EDD83LLU,
-	0xD83DDD4ALLU,
-	0xD83DDC15LLU,
-	0xD83DDC29LLU,
-	0xD83DDC08LLU,
-	0xD83DDC07LLU,
-	0xD83DDC3FLLU,
-	0xD83DDC3ELLU,
-	0xD83DDC09LLU,
-	0xD83DDC32LLU,
-	0xD83CDF35LLU,
-	0xD83CDF84LLU,
-	0xD83CDF32LLU,
-	0xD83CDF33LLU,
-	0xD83CDF34LLU,
-	0xD83CDF31LLU,
-	0xD83CDF3FLLU,
-	0x2618LLU,
-	0xD83CDF40LLU,
-	0xD83CDF8DLLU,
-	0xD83CDF8BLLU,
-	0xD83CDF43LLU,
-	0xD83CDF42LLU,
-	0xD83CDF41LLU,
-	0xD83CDF3ELLU,
-	0xD83CDF3ALLU,
-	0xD83CDF3BLLU,
-	0xD83CDF39LLU,
-	0xD83CDF37LLU,
-	0xD83CDF3CLLU,
-	0xD83CDF38LLU,
-	0xD83DDC90LLU,
-	0xD83CDF44LLU,
-	0xD83CDF30LLU,
-	0xD83CDF83LLU,
-	0xD83DDC1ALLU,
-	0xD83DDD78LLU,
-	0xD83CDF0ELLU,
-	0xD83CDF0DLLU,
-	0xD83CDF0FLLU,
-	0xD83CDF15LLU,
-	0xD83CDF16LLU,
-	0xD83CDF17LLU,
-	0xD83CDF18LLU,
-	0xD83CDF11LLU,
-	0xD83CDF12LLU,
-	0xD83CDF13LLU,
-	0xD83CDF14LLU,
-	0xD83CDF1ALLU,
-	0xD83CDF1DLLU,
-	0xD83CDF1BLLU,
-	0xD83CDF1CLLU,
-	0xD83CDF1ELLU,
-	0xD83CDF19LLU,
-	0x2B50LLU,
-	0xD83CDF1FLLU,
-	0xD83DDCABLLU,
-	0x2728LLU,
-	0x2604LLU,
-	0x2600LLU,
-	0xD83CDF24LLU,
-	0x26C5LLU,
-	0xD83CDF25LLU,
-	0xD83CDF26LLU,
-	0x2601LLU,
-	0xD83CDF27LLU,
-	0x26C8LLU,
-	0xD83CDF29LLU,
-	0x26A1LLU,
-	0xD83DDD25LLU,
-	0xD83DDCA5LLU,
-	0x2744LLU,
-	0xD83CDF28LLU,
-	0x2603LLU,
-	0x26C4LLU,
-	0xD83CDF2CLLU,
-	0xD83DDCA8LLU,
-	0xD83CDF2ALLU,
-	0xD83CDF2BLLU,
-	0x2602LLU,
-	0x2614LLU,
-	0xD83DDCA7LLU,
-	0xD83DDCA6LLU,
-	0xD83CDF0ALLU,
-};
-
-uint64 emojiCategory3[] = {
-	0xD83CDF4FLLU,
-	0xD83CDF4ELLU,
-	0xD83CDF50LLU,
-	0xD83CDF4ALLU,
-	0xD83CDF4BLLU,
-	0xD83CDF4CLLU,
-	0xD83CDF49LLU,
-	0xD83CDF47LLU,
-	0xD83CDF53LLU,
-	0xD83CDF48LLU,
-	0xD83CDF52LLU,
-	0xD83CDF51LLU,
-	0xD83CDF4DLLU,
-	0xD83CDF45LLU,
-	0xD83CDF46LLU,
-	0xD83CDF36LLU,
-	0xD83CDF3DLLU,
-	0xD83CDF60LLU,
-	0xD83CDF6FLLU,
-	0xD83CDF5ELLU,
-	0xD83EDDC0LLU,
-	0xD83CDF57LLU,
-	0xD83CDF56LLU,
-	0xD83CDF64LLU,
-	0xD83CDF73LLU,
-	0xD83CDF54LLU,
-	0xD83CDF5FLLU,
-	0xD83CDF2DLLU,
-	0xD83CDF55LLU,
-	0xD83CDF5DLLU,
-	0xD83CDF2ELLU,
-	0xD83CDF2FLLU,
-	0xD83CDF5CLLU,
-	0xD83CDF72LLU,
-	0xD83CDF65LLU,
-	0xD83CDF63LLU,
-	0xD83CDF71LLU,
-	0xD83CDF5BLLU,
-	0xD83CDF59LLU,
-	0xD83CDF5ALLU,
-	0xD83CDF58LLU,
-	0xD83CDF62LLU,
-	0xD83CDF61LLU,
-	0xD83CDF67LLU,
-	0xD83CDF68LLU,
-	0xD83CDF66LLU,
-	0xD83CDF70LLU,
-	0xD83CDF82LLU,
-	0xD83CDF6ELLU,
-	0xD83CDF6CLLU,
-	0xD83CDF6DLLU,
-	0xD83CDF6BLLU,
-	0xD83CDF7FLLU,
-	0xD83CDF69LLU,
-	0xD83CDF6ALLU,
-	0xD83CDF7ALLU,
-	0xD83CDF7BLLU,
-	0xD83CDF77LLU,
-	0xD83CDF78LLU,
-	0xD83CDF79LLU,
-	0xD83CDF7ELLU,
-	0xD83CDF76LLU,
-	0xD83CDF75LLU,
-	0x2615LLU,
-	0xD83CDF7CLLU,
-	0xD83CDF74LLU,
-	0xD83CDF7DLLU,
-};
-
-uint64 emojiCategory4[] = {
-	0x26BDLLU,
-	0xD83CDFC0LLU,
-	0xD83CDFC8LLU,
-	0x26BELLU,
-	0xD83CDFBELLU,
-	0xD83CDFD0LLU,
-	0xD83CDFC9LLU,
-	0xD83CDFB1LLU,
-	0x26F3LLU,
-	0xD83CDFCCLLU,
-	0xD83CDFD3LLU,
-	0xD83CDFF8LLU,
-	0xD83CDFD2LLU,
-	0xD83CDFD1LLU,
-	0xD83CDFCFLLU,
-	0xD83CDFBFLLU,
-	0x26F7LLU,
-	0xD83CDFC2LLU,
-	0x26F8LLU,
-	0xD83CDFF9LLU,
-	0xD83CDFA3LLU,
-	0xD83DDEA3LLU,
-	0xD83CDFCALLU,
-	0xD83CDFC4LLU,
-	0xD83DDEC0LLU,
-	0x26F9LLU,
-	0xD83CDFCBLLU,
-	0xD83DDEB4LLU,
-	0xD83DDEB5LLU,
-	0xD83CDFC7LLU,
-	0xD83DDD74LLU,
-	0xD83CDFC6LLU,
-	0xD83CDFBDLLU,
-	0xD83CDFC5LLU,
-	0xD83CDF96LLU,
-	0xD83CDF97LLU,
-	0xD83CDFF5LLU,
-	0xD83CDFABLLU,
-	0xD83CDF9FLLU,
-	0xD83CDFADLLU,
-	0xD83CDFA8LLU,
-	0xD83CDFAALLU,
-	0xD83CDFA4LLU,
-	0xD83CDFA7LLU,
-	0xD83CDFBCLLU,
-	0xD83CDFB9LLU,
-	0xD83CDFB7LLU,
-	0xD83CDFBALLU,
-	0xD83CDFB8LLU,
-	0xD83CDFBBLLU,
-	0xD83CDFACLLU,
-	0xD83CDFAELLU,
-	0xD83DDC7ELLU,
-	0xD83CDFAFLLU,
-	0xD83CDFB2LLU,
-	0xD83CDFB0LLU,
-	0xD83CDFB3LLU,
-};
-
-uint64 emojiCategory5[] = {
-	0xD83DDE97LLU,
-	0xD83DDE95LLU,
-	0xD83DDE99LLU,
-	0xD83DDE8CLLU,
-	0xD83DDE8ELLU,
-	0xD83CDFCELLU,
-	0xD83DDE93LLU,
-	0xD83DDE91LLU,
-	0xD83DDE92LLU,
-	0xD83DDE90LLU,
-	0xD83DDE9ALLU,
-	0xD83DDE9BLLU,
-	0xD83DDE9CLLU,
-	0xD83CDFCDLLU,
-	0xD83DDEB2LLU,
-	0xD83DDEA8LLU,
-	0xD83DDE94LLU,
-	0xD83DDE8DLLU,
-	0xD83DDE98LLU,
-	0xD83DDE96LLU,
-	0xD83DDEA1LLU,
-	0xD83DDEA0LLU,
-	0xD83DDE9FLLU,
-	0xD83DDE83LLU,
-	0xD83DDE8BLLU,
-	0xD83DDE9DLLU,
-	0xD83DDE84LLU,
-	0xD83DDE85LLU,
-	0xD83DDE88LLU,
-	0xD83DDE9ELLU,
-	0xD83DDE82LLU,
-	0xD83DDE86LLU,
-	0xD83DDE87LLU,
-	0xD83DDE8ALLU,
-	0xD83DDE89LLU,
-	0xD83DDE81LLU,
-	0xD83DDEE9LLU,
-	0x2708LLU,
-	0xD83DDEEBLLU,
-	0xD83DDEECLLU,
-	0x26F5LLU,
-	0xD83DDEE5LLU,
-	0xD83DDEA4LLU,
-	0x26F4LLU,
-	0xD83DDEF3LLU,
-	0xD83DDE80LLU,
-	0xD83DDEF0LLU,
-	0xD83DDCBALLU,
-	0x2693LLU,
-	0xD83DDEA7LLU,
-	0x26FDLLU,
-	0xD83DDE8FLLU,
-	0xD83DDEA6LLU,
-	0xD83DDEA5LLU,
-	0xD83CDFC1LLU,
-	0xD83DDEA2LLU,
-	0xD83CDFA1LLU,
-	0xD83CDFA2LLU,
-	0xD83CDFA0LLU,
-	0xD83CDFD7LLU,
-	0xD83CDF01LLU,
-	0xD83DDDFCLLU,
-	0xD83CDFEDLLU,
-	0x26F2LLU,
-	0xD83CDF91LLU,
-	0x26F0LLU,
-	0xD83CDFD4LLU,
-	0xD83DDDFBLLU,
-	0xD83CDF0BLLU,
-	0xD83DDDFELLU,
-	0xD83CDFD5LLU,
-	0x26FALLU,
-	0xD83CDFDELLU,
-	0xD83DDEE3LLU,
-	0xD83DDEE4LLU,
-	0xD83CDF05LLU,
-	0xD83CDF04LLU,
-	0xD83CDFDCLLU,
-	0xD83CDFD6LLU,
-	0xD83CDFDDLLU,
-	0xD83CDF07LLU,
-	0xD83CDF06LLU,
-	0xD83CDFD9LLU,
-	0xD83CDF03LLU,
-	0xD83CDF09LLU,
-	0xD83CDF0CLLU,
-	0xD83CDF20LLU,
-	0xD83CDF87LLU,
-	0xD83CDF86LLU,
-	0xD83CDF08LLU,
-	0xD83CDFD8LLU,
-	0xD83CDFF0LLU,
-	0xD83CDFEFLLU,
-	0xD83CDFDFLLU,
-	0xD83DDDFDLLU,
-	0xD83CDFE0LLU,
-	0xD83CDFE1LLU,
-	0xD83CDFDALLU,
-	0xD83CDFE2LLU,
-	0xD83CDFECLLU,
-	0xD83CDFE3LLU,
-	0xD83CDFE4LLU,
-	0xD83CDFE5LLU,
-	0xD83CDFE6LLU,
-	0xD83CDFE8LLU,
-	0xD83CDFEALLU,
-	0xD83CDFEBLLU,
-	0xD83CDFE9LLU,
-	0xD83DDC92LLU,
-	0xD83CDFDBLLU,
-	0x26EALLU,
-	0xD83DDD4CLLU,
-	0xD83DDD4DLLU,
-	0xD83DDD4BLLU,
-	0x26E9LLU,
-};
-
-uint64 emojiCategory6[] = {
-	0x231ALLU,
-	0xD83DDCF1LLU,
-	0xD83DDCF2LLU,
-	0xD83DDCBBLLU,
-	0x2328LLU,
-	0xD83DDDA5LLU,
-	0xD83DDDA8LLU,
-	0xD83DDDB1LLU,
-	0xD83DDDB2LLU,
-	0xD83DDD79LLU,
-	0xD83DDDDCLLU,
-	0xD83DDCBDLLU,
-	0xD83DDCBELLU,
-	0xD83DDCBFLLU,
-	0xD83DDCC0LLU,
-	0xD83DDCFCLLU,
-	0xD83DDCF7LLU,
-	0xD83DDCF8LLU,
-	0xD83DDCF9LLU,
-	0xD83CDFA5LLU,
-	0xD83DDCFDLLU,
-	0xD83CDF9ELLU,
-	0xD83DDCDELLU,
-	0x260ELLU,
-	0xD83DDCDFLLU,
-	0xD83DDCE0LLU,
-	0xD83DDCFALLU,
-	0xD83DDCFBLLU,
-	0xD83CDF99LLU,
-	0xD83CDF9ALLU,
-	0xD83CDF9BLLU,
-	0x23F1LLU,
-	0x23F2LLU,
-	0x23F0LLU,
-	0xD83DDD70LLU,
-	0x23F3LLU,
-	0x231BLLU,
-	0xD83DDCE1LLU,
-	0xD83DDD0BLLU,
-	0xD83DDD0CLLU,
-	0xD83DDCA1LLU,
-	0xD83DDD26LLU,
-	0xD83DDD6FLLU,
-	0xD83DDDD1LLU,
-	0xD83DDEE2LLU,
-	0xD83DDCB8LLU,
-	0xD83DDCB5LLU,
-	0xD83DDCB4LLU,
-	0xD83DDCB6LLU,
-	0xD83DDCB7LLU,
-	0xD83DDCB0LLU,
-	0xD83DDCB3LLU,
-	0xD83DDC8ELLU,
-	0x2696LLU,
-	0xD83DDD27LLU,
-	0xD83DDD28LLU,
-	0x2692LLU,
-	0xD83DDEE0LLU,
-	0x26CFLLU,
-	0xD83DDD29LLU,
-	0x2699LLU,
-	0x26D3LLU,
-	0xD83DDD2BLLU,
-	0xD83DDCA3LLU,
-	0xD83DDD2ALLU,
-	0xD83DDDE1LLU,
-	0x2694LLU,
-	0xD83DDEE1LLU,
-	0xD83DDEACLLU,
-	0x2620LLU,
-	0x26B0LLU,
-	0x26B1LLU,
-	0xD83CDFFALLU,
-	0xD83DDD2ELLU,
-	0xD83DDCFFLLU,
-	0xD83DDC88LLU,
-	0x2697LLU,
-	0xD83DDD2DLLU,
-	0xD83DDD2CLLU,
-	0xD83DDD73LLU,
-	0xD83DDC8ALLU,
-	0xD83DDC89LLU,
-	0xD83CDF21LLU,
-	0xD83CDFF7LLU,
-	0xD83DDD16LLU,
-	0xD83DDEBDLLU,
-	0xD83DDEBFLLU,
-	0xD83DDEC1LLU,
-	0xD83DDD11LLU,
-	0xD83DDDDDLLU,
-	0xD83DDECBLLU,
-	0xD83DDECCLLU,
-	0xD83DDECFLLU,
-	0xD83DDEAALLU,
-	0xD83DDECELLU,
-	0xD83DDDBCLLU,
-	0xD83DDDFALLU,
-	0x26F1LLU,
-	0xD83DDDFFLLU,
-	0xD83DDECDLLU,
-	0xD83CDF88LLU,
-	0xD83CDF8FLLU,
-	0xD83CDF80LLU,
-	0xD83CDF81LLU,
-	0xD83CDF8ALLU,
-	0xD83CDF89LLU,
-	0xD83CDF8ELLU,
-	0xD83CDF90LLU,
-	0xD83CDF8CLLU,
-	0xD83CDFEELLU,
-	0x2709LLU,
-	0xD83DDCE9LLU,
-	0xD83DDCE8LLU,
-	0xD83DDCE7LLU,
-	0xD83DDC8CLLU,
-	0xD83DDCEELLU,
-	0xD83DDCEALLU,
-	0xD83DDCEBLLU,
-	0xD83DDCECLLU,
-	0xD83DDCEDLLU,
-	0xD83DDCE6LLU,
-	0xD83DDCEFLLU,
-	0xD83DDCE5LLU,
-	0xD83DDCE4LLU,
-	0xD83DDCDCLLU,
-	0xD83DDCC3LLU,
-	0xD83DDCD1LLU,
-	0xD83DDCCALLU,
-	0xD83DDCC8LLU,
-	0xD83DDCC9LLU,
-	0xD83DDCC4LLU,
-	0xD83DDCC5LLU,
-	0xD83DDCC6LLU,
-	0xD83DDDD3LLU,
-	0xD83DDCC7LLU,
-	0xD83DDDC3LLU,
-	0xD83DDDF3LLU,
-	0xD83DDDC4LLU,
-	0xD83DDCCBLLU,
-	0xD83DDDD2LLU,
-	0xD83DDCC1LLU,
-	0xD83DDCC2LLU,
-	0xD83DDDC2LLU,
-	0xD83DDDDELLU,
-	0xD83DDCF0LLU,
-	0xD83DDCD3LLU,
-	0xD83DDCD5LLU,
-	0xD83DDCD7LLU,
-	0xD83DDCD8LLU,
-	0xD83DDCD9LLU,
-	0xD83DDCD4LLU,
-	0xD83DDCD2LLU,
-	0xD83DDCDALLU,
-	0xD83DDCD6LLU,
-	0xD83DDD17LLU,
-	0xD83DDCCELLU,
-	0xD83DDD87LLU,
-	0x2702LLU,
-	0xD83DDCD0LLU,
-	0xD83DDCCFLLU,
-	0xD83DDCCCLLU,
-	0xD83DDCCDLLU,
-	0xD83DDEA9LLU,
-	0xD83CDFF3LLU,
-	0xD83CDFF4LLU,
-	0xD83DDD10LLU,
-	0xD83DDD12LLU,
-	0xD83DDD13LLU,
-	0xD83DDD0FLLU,
-	0xD83DDD8ALLU,
-	0xD83DDD8BLLU,
-	0x2712LLU,
-	0xD83DDCDDLLU,
-	0x270FLLU,
-	0xD83DDD8DLLU,
-	0xD83DDD8CLLU,
-	0xD83DDD0DLLU,
-	0xD83DDD0ELLU,
-};
-
-uint64 emojiCategory7[] = {
-	0x2764LLU,
-	0xD83DDC9BLLU,
-	0xD83DDC9ALLU,
-	0xD83DDC99LLU,
-	0xD83DDC9CLLU,
-	0xD83DDC94LLU,
-	0x2763LLU,
-	0xD83DDC95LLU,
-	0xD83DDC9ELLU,
-	0xD83DDC93LLU,
-	0xD83DDC97LLU,
-	0xD83DDC96LLU,
-	0xD83DDC98LLU,
-	0xD83DDC9DLLU,
-	0xD83DDC9FLLU,
-	0x262ELLU,
-	0x271DLLU,
-	0x262ALLU,
-	0xD83DDD49LLU,
-	0x2638LLU,
-	0x2721LLU,
-	0xD83DDD2FLLU,
-	0xD83DDD4ELLU,
-	0x262FLLU,
-	0x2626LLU,
-	0xD83DDED0LLU,
-	0x26CELLU,
-	0x2648LLU,
-	0x2649LLU,
-	0x264ALLU,
-	0x264BLLU,
-	0x264CLLU,
-	0x264DLLU,
-	0x264ELLU,
-	0x264FLLU,
-	0x2650LLU,
-	0x2651LLU,
-	0x2652LLU,
-	0x2653LLU,
-	0xD83CDD94LLU,
-	0x269BLLU,
-	0xD83CDE33LLU,
-	0xD83CDE39LLU,
-	0x2622LLU,
-	0x2623LLU,
-	0xD83DDCF4LLU,
-	0xD83DDCF3LLU,
-	0xD83CDE36LLU,
-	0xD83CDE1ALLU,
-	0xD83CDE38LLU,
-	0xD83CDE3ALLU,
-	0xD83CDE37LLU,
-	0x2734LLU,
-	0xD83CDD9ALLU,
-	0xD83CDE51LLU,
-	0xD83DDCAELLU,
-	0xD83CDE50LLU,
-	0x3299LLU,
-	0x3297LLU,
-	0xD83CDE34LLU,
-	0xD83CDE35LLU,
-	0xD83CDE32LLU,
-	0xD83CDD70LLU,
-	0xD83CDD71LLU,
-	0xD83CDD8ELLU,
-	0xD83CDD91LLU,
-	0xD83CDD7ELLU,
-	0xD83CDD98LLU,
-	0x26D4LLU,
-	0xD83DDCDBLLU,
-	0xD83DDEABLLU,
-	0x274CLLU,
-	0x2B55LLU,
-	0xD83DDCA2LLU,
-	0x2668LLU,
-	0xD83DDEB7LLU,
-	0xD83DDEAFLLU,
-	0xD83DDEB3LLU,
-	0xD83DDEB1LLU,
-	0xD83DDD1ELLU,
-	0xD83DDCF5LLU,
-	0x2757LLU,
-	0x2755LLU,
-	0x2753LLU,
-	0x2754LLU,
-	0x203CLLU,
-	0x2049LLU,
-	0xD83DDCAFLLU,
-	0xD83DDD05LLU,
-	0xD83DDD06LLU,
-	0xD83DDD31LLU,
-	0x269CLLU,
-	0x303DLLU,
-	0x26A0LLU,
-	0xD83DDEB8LLU,
-	0xD83DDD30LLU,
-	0x267BLLU,
-	0xD83CDE2FLLU,
-	0xD83DDCB9LLU,
-	0x2747LLU,
-	0x2733LLU,
-	0x274ELLU,
-	0x2705LLU,
-	0xD83DDCA0LLU,
-	0xD83CDF00LLU,
-	0x27BFLLU,
-	0xD83CDF10LLU,
-	0x24C2LLU,
-	0xD83CDFE7LLU,
-	0xD83CDE02LLU,
-	0xD83DDEC2LLU,
-	0xD83DDEC3LLU,
-	0xD83DDEC4LLU,
-	0xD83DDEC5LLU,
-	0x267FLLU,
-	0xD83DDEADLLU,
-	0xD83DDEBELLU,
-	0xD83CDD7FLLU,
-	0xD83DDEB0LLU,
-	0xD83DDEB9LLU,
-	0xD83DDEBALLU,
-	0xD83DDEBCLLU,
-	0xD83DDEBBLLU,
-	0xD83DDEAELLU,
-	0xD83CDFA6LLU,
-	0xD83DDCF6LLU,
-	0xD83CDE01LLU,
-	0xD83CDD96LLU,
-	0xD83CDD97LLU,
-	0xD83CDD99LLU,
-	0xD83CDD92LLU,
-	0xD83CDD95LLU,
-	0xD83CDD93LLU,
-	0x3020E3LLU, // divided by 0xFE0FLLU
-	0x3120E3LLU, // divided by 0xFE0FLLU
-	0x3220E3LLU, // divided by 0xFE0FLLU
-	0x3320E3LLU, // divided by 0xFE0FLLU
-	0x3420E3LLU, // divided by 0xFE0FLLU
-	0x3520E3LLU, // divided by 0xFE0FLLU
-	0x3620E3LLU, // divided by 0xFE0FLLU
-	0x3720E3LLU, // divided by 0xFE0FLLU
-	0x3820E3LLU, // divided by 0xFE0FLLU
-	0x3920E3LLU, // divided by 0xFE0FLLU
-	0xD83DDD1FLLU,
-	0xD83DDD22LLU,
-	0x25B6LLU,
-	0x23F8LLU,
-	0x23EFLLU,
-	0x23F9LLU,
-	0x23FALLU,
-	0x23EDLLU,
-	0x23EELLU,
-	0x23E9LLU,
-	0x23EALLU,
-	0xD83DDD00LLU,
-	0xD83DDD01LLU,
-	0xD83DDD02LLU,
-	0x25C0LLU,
-	0xD83DDD3CLLU,
-	0xD83DDD3DLLU,
-	0x23EBLLU,
-	0x23ECLLU,
-	0x27A1LLU,
-	0x2B05LLU,
-	0x2B06LLU,
-	0x2B07LLU,
-	0x2197LLU,
-	0x2198LLU,
-	0x2199LLU,
-	0x2196LLU,
-	0x2195LLU,
-	0x2194LLU,
-	0xD83DDD04LLU,
-	0x21AALLU,
-	0x21A9LLU,
-	0x2934LLU,
-	0x2935LLU,
-	0x2320E3LLU, // divided by 0xFE0FLLU
-	0x2A20E3LLU, // divided by 0xFE0FLLU
-	0x2139LLU,
-	0xD83DDD24LLU,
-	0xD83DDD21LLU,
-	0xD83DDD20LLU,
-	0xD83DDD23LLU,
-	0xD83CDFB5LLU,
-	0xD83CDFB6LLU,
-	0x3030LLU,
-	0x27B0LLU,
-	0x2714LLU,
-	0xD83DDD03LLU,
-	0x2795LLU,
-	0x2796LLU,
-	0x2797LLU,
-	0x2716LLU,
-	0xD83DDCB2LLU,
-	0xD83DDCB1LLU,
-	0xA9LLU,
-	0xAELLU,
-	0x2122LLU,
-	0xD83DDD1ALLU,
-	0xD83DDD19LLU,
-	0xD83DDD1BLLU,
-	0xD83DDD1DLLU,
-	0xD83DDD1CLLU,
-	0x2611LLU,
-	0xD83DDD18LLU,
-	0x26AALLU,
-	0x26ABLLU,
-	0xD83DDD34LLU,
-	0xD83DDD35LLU,
-	0xD83DDD38LLU,
-	0xD83DDD39LLU,
-	0xD83DDD36LLU,
-	0xD83DDD37LLU,
-	0xD83DDD3ALLU,
-	0x25AALLU,
-	0x25ABLLU,
-	0x2B1BLLU,
-	0x2B1CLLU,
-	0xD83DDD3BLLU,
-	0x25FCLLU,
-	0x25FBLLU,
-	0x25FELLU,
-	0x25FDLLU,
-	0xD83DDD32LLU,
-	0xD83DDD33LLU,
-	0xD83DDD08LLU,
-	0xD83DDD09LLU,
-	0xD83DDD0ALLU,
-	0xD83DDD07LLU,
-	0xD83DDCE3LLU,
-	0xD83DDCE2LLU,
-	0xD83DDD14LLU,
-	0xD83DDD15LLU,
-	0xD83CDCCFLLU,
-	0xD83CDC04LLU,
-	0x2660LLU,
-	0x2663LLU,
-	0x2665LLU,
-	0x2666LLU,
-	0xD83CDFB4LLU,
-	0xFFFF0012LLU,//0xD83DDC41LLU,0x200DLLU,0xD83DDDE8LLU,
-	0xD83DDCADLLU,
-	0xD83DDDEFLLU,
-	0xD83DDCACLLU,
-	0xD83DDD50LLU,
-	0xD83DDD51LLU,
-	0xD83DDD52LLU,
-	0xD83DDD53LLU,
-	0xD83DDD54LLU,
-	0xD83DDD55LLU,
-	0xD83DDD56LLU,
-	0xD83DDD57LLU,
-	0xD83DDD58LLU,
-	0xD83DDD59LLU,
-	0xD83DDD5ALLU,
-	0xD83DDD5BLLU,
-	0xD83DDD5CLLU,
-	0xD83DDD5DLLU,
-	0xD83DDD5ELLU,
-	0xD83DDD5FLLU,
-	0xD83DDD60LLU,
-	0xD83DDD61LLU,
-	0xD83DDD62LLU,
-	0xD83DDD63LLU,
-	0xD83DDD64LLU,
-	0xD83DDD65LLU,
-	0xD83DDD66LLU,
-	0xD83DDD67LLU,
-//};
-//
-//uint64 emojiCategory8[] = {
-	0xD83CDDE6D83CDDEBLLU,
-	0xD83CDDE6D83CDDFDLLU,
-	0xD83CDDE6D83CDDF1LLU,
-	0xD83CDDE9D83CDDFFLLU,
-	0xD83CDDE6D83CDDF8LLU,
-	0xD83CDDE6D83CDDE9LLU,
-	0xD83CDDE6D83CDDF4LLU,
-	0xD83CDDE6D83CDDEELLU,
-	0xD83CDDE6D83CDDF6LLU,
-	0xD83CDDE6D83CDDECLLU,
-	0xD83CDDE6D83CDDF7LLU,
-	0xD83CDDE6D83CDDF2LLU,
-	0xD83CDDE6D83CDDFCLLU,
-	0xD83CDDE6D83CDDFALLU,
-	0xD83CDDE6D83CDDF9LLU,
-	0xD83CDDE6D83CDDFFLLU,
-	0xD83CDDE7D83CDDF8LLU,
-	0xD83CDDE7D83CDDEDLLU,
-	0xD83CDDE7D83CDDE9LLU,
-	0xD83CDDE7D83CDDE7LLU,
-	0xD83CDDE7D83CDDFELLU,
-	0xD83CDDE7D83CDDEALLU,
-	0xD83CDDE7D83CDDFFLLU,
-	0xD83CDDE7D83CDDEFLLU,
-	0xD83CDDE7D83CDDF2LLU,
-	0xD83CDDE7D83CDDF9LLU,
-	0xD83CDDE7D83CDDF4LLU,
-	0xD83CDDE7D83CDDE6LLU,
-	0xD83CDDE7D83CDDFCLLU,
-	0xD83CDDE7D83CDDF7LLU,
-	0xD83CDDEED83CDDF4LLU,
-	0xD83CDDFBD83CDDECLLU,
-	0xD83CDDE7D83CDDF3LLU,
-	0xD83CDDE7D83CDDECLLU,
-	0xD83CDDE7D83CDDEBLLU,
-	0xD83CDDE7D83CDDEELLU,
-	0xD83CDDF0D83CDDEDLLU,
-	0xD83CDDE8D83CDDF2LLU,
-	0xD83CDDE8D83CDDE6LLU,
-	0xD83CDDEED83CDDE8LLU,
-	0xD83CDDE8D83CDDFBLLU,
-	0xD83CDDE7D83CDDF6LLU,
-	0xD83CDDF0D83CDDFELLU,
-	0xD83CDDE8D83CDDEBLLU,
-	0xD83CDDF9D83CDDE9LLU,
-	0xD83CDDE8D83CDDF1LLU,
-	0xD83CDDE8D83CDDF3LLU,
-	0xD83CDDE8D83CDDFDLLU,
-	0xD83CDDE8D83CDDE8LLU,
-	0xD83CDDE8D83CDDF4LLU,
-	0xD83CDDF0D83CDDF2LLU,
-	0xD83CDDE8D83CDDECLLU,
-	0xD83CDDE8D83CDDE9LLU,
-	0xD83CDDE8D83CDDF0LLU,
-	0xD83CDDE8D83CDDF7LLU,
-	0xD83CDDE8D83CDDEELLU,
-	0xD83CDDEDD83CDDF7LLU,
-	0xD83CDDE8D83CDDFALLU,
-	0xD83CDDE8D83CDDFCLLU,
-	0xD83CDDE8D83CDDFELLU,
-	0xD83CDDE8D83CDDFFLLU,
-	0xD83CDDE9D83CDDF0LLU,
-	0xD83CDDE9D83CDDEFLLU,
-	0xD83CDDE9D83CDDF2LLU,
-	0xD83CDDE9D83CDDF4LLU,
-	0xD83CDDEAD83CDDE8LLU,
-	0xD83CDDEAD83CDDECLLU,
-	0xD83CDDF8D83CDDFBLLU,
-	0xD83CDDECD83CDDF6LLU,
-	0xD83CDDEAD83CDDF7LLU,
-	0xD83CDDEAD83CDDEALLU,
-	0xD83CDDEAD83CDDF9LLU,
-	0xD83CDDEAD83CDDFALLU,
-	0xD83CDDEBD83CDDF0LLU,
-	0xD83CDDEBD83CDDF4LLU,
-	0xD83CDDEBD83CDDEFLLU,
-	0xD83CDDEBD83CDDEELLU,
-	0xD83CDDEBD83CDDF7LLU,
-	0xD83CDDECD83CDDEBLLU,
-	0xD83CDDF5D83CDDEBLLU,
-	0xD83CDDF9D83CDDEBLLU,
-	0xD83CDDECD83CDDE6LLU,
-	0xD83CDDECD83CDDF2LLU,
-	0xD83CDDECD83CDDEALLU,
-	0xD83CDDE9D83CDDEALLU,
-	0xD83CDDECD83CDDEDLLU,
-	0xD83CDDECD83CDDEELLU,
-	0xD83CDDECD83CDDF7LLU,
-	0xD83CDDECD83CDDF1LLU,
-	0xD83CDDECD83CDDE9LLU,
-	0xD83CDDECD83CDDF5LLU,
-	0xD83CDDECD83CDDFALLU,
-	0xD83CDDECD83CDDF9LLU,
-	0xD83CDDECD83CDDECLLU,
-	0xD83CDDECD83CDDF3LLU,
-	0xD83CDDECD83CDDFCLLU,
-	0xD83CDDECD83CDDFELLU,
-	0xD83CDDEDD83CDDF9LLU,
-	0xD83CDDEDD83CDDF3LLU,
-	0xD83CDDEDD83CDDF0LLU,
-	0xD83CDDEDD83CDDFALLU,
-	0xD83CDDEED83CDDF8LLU,
-	0xD83CDDEED83CDDF3LLU,
-	0xD83CDDEED83CDDE9LLU,
-	0xD83CDDEED83CDDF7LLU,
-	0xD83CDDEED83CDDF6LLU,
-	0xD83CDDEED83CDDEALLU,
-	0xD83CDDEED83CDDF2LLU,
-	0xD83CDDEED83CDDF1LLU,
-	0xD83CDDEED83CDDF9LLU,
-	0xD83CDDEFD83CDDF2LLU,
-	0xD83CDDEFD83CDDF5LLU,
-	0xD83CDDEFD83CDDEALLU,
-	0xD83CDDEFD83CDDF4LLU,
-	0xD83CDDF0D83CDDFFLLU,
-	0xD83CDDF0D83CDDEALLU,
-	0xD83CDDF0D83CDDEELLU,
-	0xD83CDDFDD83CDDF0LLU,
-	0xD83CDDF0D83CDDFCLLU,
-	0xD83CDDF0D83CDDECLLU,
-	0xD83CDDF1D83CDDE6LLU,
-	0xD83CDDF1D83CDDFBLLU,
-	0xD83CDDF1D83CDDE7LLU,
-	0xD83CDDF1D83CDDF8LLU,
-	0xD83CDDF1D83CDDF7LLU,
-	0xD83CDDF1D83CDDFELLU,
-	0xD83CDDF1D83CDDEELLU,
-	0xD83CDDF1D83CDDF9LLU,
-	0xD83CDDF1D83CDDFALLU,
-	0xD83CDDF2D83CDDF4LLU,
-	0xD83CDDF2D83CDDF0LLU,
-	0xD83CDDF2D83CDDECLLU,
-	0xD83CDDF2D83CDDFCLLU,
-	0xD83CDDF2D83CDDFELLU,
-	0xD83CDDF2D83CDDFBLLU,
-	0xD83CDDF2D83CDDF1LLU,
-	0xD83CDDF2D83CDDF9LLU,
-	0xD83CDDF2D83CDDEDLLU,
-	0xD83CDDF2D83CDDF6LLU,
-	0xD83CDDF2D83CDDF7LLU,
-	0xD83CDDF2D83CDDFALLU,
-	0xD83CDDFED83CDDF9LLU,
-	0xD83CDDF2D83CDDFDLLU,
-	0xD83CDDEBD83CDDF2LLU,
-	0xD83CDDF2D83CDDE9LLU,
-	0xD83CDDF2D83CDDE8LLU,
-	0xD83CDDF2D83CDDF3LLU,
-	0xD83CDDF2D83CDDEALLU,
-	0xD83CDDF2D83CDDF8LLU,
-	0xD83CDDF2D83CDDE6LLU,
-	0xD83CDDF2D83CDDFFLLU,
-	0xD83CDDF2D83CDDF2LLU,
-	0xD83CDDF3D83CDDE6LLU,
-	0xD83CDDF3D83CDDF7LLU,
-	0xD83CDDF3D83CDDF5LLU,
-	0xD83CDDF3D83CDDF1LLU,
-	0xD83CDDF3D83CDDE8LLU,
-	0xD83CDDF3D83CDDFFLLU,
-	0xD83CDDF3D83CDDEELLU,
-	0xD83CDDF3D83CDDEALLU,
-	0xD83CDDF3D83CDDECLLU,
-	0xD83CDDF3D83CDDFALLU,
-	0xD83CDDF3D83CDDEBLLU,
-	0xD83CDDF0D83CDDF5LLU,
-	0xD83CDDF2D83CDDF5LLU,
-	0xD83CDDF3D83CDDF4LLU,
-	0xD83CDDF4D83CDDF2LLU,
-	0xD83CDDF5D83CDDF0LLU,
-	0xD83CDDF5D83CDDFCLLU,
-	0xD83CDDF5D83CDDF8LLU,
-	0xD83CDDF5D83CDDE6LLU,
-	0xD83CDDF5D83CDDECLLU,
-	0xD83CDDF5D83CDDFELLU,
-	0xD83CDDF5D83CDDEALLU,
-	0xD83CDDF5D83CDDEDLLU,
-	0xD83CDDF5D83CDDF3LLU,
-	0xD83CDDF5D83CDDF1LLU,
-	0xD83CDDF5D83CDDF9LLU,
-	0xD83CDDF5D83CDDF7LLU,
-	0xD83CDDF6D83CDDE6LLU,
-	0xD83CDDF7D83CDDEALLU,
-	0xD83CDDF7D83CDDF4LLU,
-	0xD83CDDF7D83CDDFALLU,
-	0xD83CDDF7D83CDDFCLLU,
-	0xD83CDDFCD83CDDF8LLU,
-	0xD83CDDF8D83CDDF2LLU,
-	0xD83CDDF8D83CDDF9LLU,
-	0xD83CDDF8D83CDDE6LLU,
-	0xD83CDDF8D83CDDF3LLU,
-	0xD83CDDF7D83CDDF8LLU,
-	0xD83CDDF8D83CDDE8LLU,
-	0xD83CDDF8D83CDDF1LLU,
-	0xD83CDDF8D83CDDECLLU,
-	0xD83CDDF8D83CDDFDLLU,
-	0xD83CDDF8D83CDDF0LLU,
-	0xD83CDDF8D83CDDEELLU,
-	0xD83CDDECD83CDDF8LLU,
-	0xD83CDDF8D83CDDE7LLU,
-	0xD83CDDF8D83CDDF4LLU,
-	0xD83CDDFFD83CDDE6LLU,
-	0xD83CDDF0D83CDDF7LLU,
-	0xD83CDDF8D83CDDF8LLU,
-	0xD83CDDEAD83CDDF8LLU,
-	0xD83CDDF1D83CDDF0LLU,
-	0xD83CDDE7D83CDDF1LLU,
-	0xD83CDDF8D83CDDEDLLU,
-	0xD83CDDF0D83CDDF3LLU,
-	0xD83CDDF1D83CDDE8LLU,
-	0xD83CDDF5D83CDDF2LLU,
-	0xD83CDDFBD83CDDE8LLU,
-	0xD83CDDF8D83CDDE9LLU,
-	0xD83CDDF8D83CDDF7LLU,
-	0xD83CDDF8D83CDDFFLLU,
-	0xD83CDDF8D83CDDEALLU,
-	0xD83CDDE8D83CDDEDLLU,
-	0xD83CDDF8D83CDDFELLU,
-	0xD83CDDF9D83CDDFCLLU,
-	0xD83CDDF9D83CDDEFLLU,
-	0xD83CDDF9D83CDDFFLLU,
-	0xD83CDDF9D83CDDEDLLU,
-	0xD83CDDF9D83CDDF1LLU,
-	0xD83CDDF9D83CDDECLLU,
-	0xD83CDDF9D83CDDF0LLU,
-	0xD83CDDF9D83CDDF4LLU,
-	0xD83CDDF9D83CDDF9LLU,
-	0xD83CDDF9D83CDDF3LLU,
-	0xD83CDDF9D83CDDF7LLU,
-	0xD83CDDF9D83CDDF2LLU,
-	0xD83CDDF9D83CDDE8LLU,
-	0xD83CDDF9D83CDDFBLLU,
-	0xD83CDDFBD83CDDEELLU,
-	0xD83CDDFAD83CDDECLLU,
-	0xD83CDDFAD83CDDE6LLU,
-	0xD83CDDE6D83CDDEALLU,
-	0xD83CDDECD83CDDE7LLU,
-	0xD83CDDFAD83CDDF8LLU,
-	0xD83CDDFAD83CDDFELLU,
-	0xD83CDDFAD83CDDFFLLU,
-	0xD83CDDFBD83CDDFALLU,
-	0xD83CDDFBD83CDDE6LLU,
-	0xD83CDDFBD83CDDEALLU,
-	0xD83CDDFBD83CDDF3LLU,
-	0xD83CDDFCD83CDDEBLLU,
-	0xD83CDDEAD83CDDEDLLU,
-	0xD83CDDFED83CDDEALLU,
-	0xD83CDDFFD83CDDF2LLU,
-	0xD83CDDFFD83CDDFCLLU,
-};
-
-uint64 emojiPostfixed[] = {
-	// category 1
-	0x263ALLU,
-	0x2639LLU,
-	0x261DLLU,
-
-	// category 2
-	0x2B50LLU,
-	0x2600LLU,
-	0x26C5LLU,
-	0x2601LLU,
-	0x26A1LLU,
-	0x2744LLU,
-	0x26C4LLU,
-	0x2614LLU,
-
-	// category 3
-	0x2615LLU,
-
-	// category 4
-	0x26BDLLU,
-	0x26BELLU,
-	0x26F3LLU,
-
-	// category 5
-	0x2708LLU,
-	0x26F5LLU,
-	0x2693LLU,
-	0x26FDLLU,
-	0x26F2LLU,
-	0x26FALLU,
-	0x26EALLU,
-
-	// category 6
-	0x231ALLU,
-	0x260ELLU,
-	0x231BLLU,
-	0x2709LLU,
-	0x2702LLU,
-	0x2712LLU,
-	0x270FLLU,
-
-	// category 7
-	0x2764LLU,
-	0x2648LLU,
-	0x2649LLU,
-	0x264ALLU,
-	0x264BLLU,
-	0x264CLLU,
-	0x264DLLU,
-	0x264ELLU,
-	0x264FLLU,
-	0x2650LLU,
-	0x2651LLU,
-	0x2652LLU,
-	0x2653LLU,
-	0xD83CDE1ALLU,
-	0x2734LLU,
-	0x3299LLU,
-	0x3297LLU,
-	0x26D4LLU,
-	0x2B55LLU,
-	0x2668LLU,
-	0x2757LLU,
-	0x203CLLU,
-	0x2049LLU,
-	0x303DLLU,
-	0x26A0LLU,
-	0x267BLLU,
-	0xD83CDE2FLLU,
-	0x2747LLU,
-	0x2733LLU,
-	0x24C2LLU,
-	0x267FLLU,
-	0xD83CDD7FLLU,
-	0x25B6LLU,
-	0x25C0LLU,
-	0x27A1LLU,
-	0x2B05LLU,
-	0x2B06LLU,
-	0x2B07LLU,
-	0x2197LLU,
-	0x2198LLU,
-	0x2199LLU,
-	0x2196LLU,
-	0x2195LLU,
-	0x2194LLU,
-	0x21AALLU,
-	0x21A9LLU,
-	0x2934LLU,
-	0x2935LLU,
-	0x2139LLU,
-	0x2714LLU,
-	0x2716LLU,
-	0x2611LLU,
-	0x26AALLU,
-	0x26ABLLU,
-	0x25AALLU,
-	0x25ABLLU,
-	0x2B1BLLU,
-	0x2B1CLLU,
-	0x25FCLLU,
-	0x25FBLLU,
-	0x25FELLU,
-	0x25FDLLU,
-	0xD83CDC04LLU,
-	0x2660LLU,
-	0x2663LLU,
-	0x2665LLU,
-	0x2666LLU,
-};
-QMap<uint64, bool> emojiWithPostfixes, emojiWithColors;
-
-uint32 firstCode(uint64 fullCode) {
-	return (fullCode > 0xFFFFFFFFLLU) ? uint32(fullCode >> 32) : (fullCode & 0xFFFFFFFFU);
-}
-
-uint32 secondCode(uint64 fullCode) {
-	return (fullCode > 0xFFFFFFFFLLU) ? (fullCode & 0xFFFFFFFFU) : 0;
-}
-
-void writeEmojiCategory(QTextStream &tcpp, uint64 *emojiCategory, uint32 size, const char *name) {
-	tcpp << "\tcase dbiet" << name << ": {\n";
-	tcpp << "\t\tstatic QVector<EmojiPtr> v" << name << ";\n";
-	tcpp << "\t\tif (v" << name << ".isEmpty()) {\n";
-	tcpp << "\t\t\tv" << name << ".resize(" << size << ");\n";
-	for (uint32 i = 0; i < size; ++i) {
-		int index = 0;
-		for (EmojisData::const_iterator j = emojisData.cbegin(), e = emojisData.cend(); j != e; ++j) {
-			if (emojiCategory[i] == (j->code2 ? ((uint64(j->code) << 32) | j->code2) : j->code)) {
-				break;
-			}
-			++index;
-		}
-		if (index == emojisData.size()) {
-			throw Exception(QString("Could not find emoji from category '%1' with index %2, code %3").arg(name).arg(i).arg(emojiCategory[i], 0, 16).toUtf8().constData());
-		}
-		tcpp << "\t\t\tv" << name << "[" << i << "] = &emojis[" << index << "];\n";
-	}
-	tcpp << "\t\t}\n";
-	tcpp << "\t\treturn v" << name << ";\n";
-	tcpp << "\t} break;\n\n";
-}
-
-QString textEmojiString(const EmojiData *emoji) {
-	QString result;
-	if ((emoji->code & 0xFFFF0000U) == 0xFFFF0000U) { // sequence
-		return QString::fromUtf8(emojiSequences[(emoji->code & 0xFFFF)]);
-	}
-	int len = emoji->code2 ? 4 : ((emoji->code >> 16) ? 2 : 1);
-	bool withPostfix = emojiWithPostfixes.constFind(emoji->code) != emojiWithPostfixes.constEnd();
-	result.reserve(len + (withPostfix ? 1 : 0));
-	switch (len) {
-		case 1: result.append(QChar(emoji->code & 0xFFFF)); break;
-		case 2:
-			result.append(QChar((emoji->code >> 16) & 0xFFFF));
-			result.append(QChar(emoji->code & 0xFFFF));
-			break;
-		case 4:
-			result.append(QChar((emoji->code >> 16) & 0xFFFF));
-			result.append(QChar(emoji->code & 0xFFFF));
-			result.append(QChar((emoji->code2 >> 16) & 0xFFFF));
-			result.append(QChar(emoji->code2 & 0xFFFF));
-			break;
-	}
-	if (withPostfix) result.append(QChar(0xFE0F));
-	if (emoji->color && ((emoji->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-		result.append(QChar((emoji->color >> 16) & 0xFFFF));
-		result.append(QChar(emoji->color & 0xFFFF));
-	}
-	return result;
-}
-
-bool genEmoji(QString, const QString &emoji_out, const QString &emoji_png) {
-	int currentRow = 0, currentColumn = 0;
-	uint32 min1 = 0xFFFFFFFFU, max1 = 0, min2 = 0xFFFFFFFFU, max2 = 0;
-
-	for (int i = 0, l = sizeof(emojiPostfixed) / sizeof(emojiPostfixed[0]); i < l; ++i) {
-		emojiWithPostfixes.insert(emojiPostfixed[i], true);
-	}
-	for (int i = 0, l = sizeof(emojiColored) / sizeof(emojiColored[0]); i < l; ++i) {
-		emojiWithColors.insert(emojiColored[i], true);
-	}
-
-	for (int i = 1; i < 8; ++i) {
-		uint64 *k;
-		int cnt = 0;
-		switch (i) {
-		case 1: k = emojiCategory1; cnt = sizeof(emojiCategory1) / sizeof(emojiCategory1[0]); break;
-		case 2: k = emojiCategory2; cnt = sizeof(emojiCategory2) / sizeof(emojiCategory2[0]); break;
-		case 3: k = emojiCategory3; cnt = sizeof(emojiCategory3) / sizeof(emojiCategory3[0]); break;
-		case 4: k = emojiCategory4; cnt = sizeof(emojiCategory4) / sizeof(emojiCategory4[0]); break;
-		case 5: k = emojiCategory5; cnt = sizeof(emojiCategory5) / sizeof(emojiCategory5[0]); break;
-		case 6: k = emojiCategory6; cnt = sizeof(emojiCategory6) / sizeof(emojiCategory6[0]); break;
-		case 7: k = emojiCategory7; cnt = sizeof(emojiCategory7) / sizeof(emojiCategory7[0]); break;
-//		case 8: k = emojiCategory8; cnt = sizeof(emojiCategory8) / sizeof(emojiCategory8[0]); break;
-		}
-		for (int j = 0; j < cnt; ++j) {
-			EmojiData data;
-			uint64 fullCode = k[j];
-			data.code = firstCode(fullCode);
-			data.code2 = secondCode(fullCode);
-			data.category = i;
-			data.index = j;
-			data.x = currentColumn;
-			data.y = currentRow;
-			data.color = 0;
-
-			++currentColumn;
-			if (currentColumn == inRow) {
-				++currentRow;
-				currentColumn = 0;
-			}
-
-			uint32 high = data.code >> 16;
-			if (high == 0xFFFF) { // sequences
-
-			} else if (!high) { // small codes
-				if (data.code == 169 || data.code == 174) { // two small
-				} else {
-					if (data.code < min1) min1 = data.code;
-					if (data.code > max1) max1 = data.code;
-				}
-			} else if (high == 0x23 || high == 0x2A || (high >= 0x30 && high < 0x3A)) { // digits
-			} else {
-				if (data.code < min2) min2 = data.code;
-				if (data.code > max2) max2 = data.code;
-			}
-			EmojisData::const_iterator key = emojisData.constFind(fullCode);
-			if (key != emojisData.cend()) {
-				cout << QString("Bad emoji code (duplicate) %1 %2 and %3 %4").arg(data.code).arg(data.code2).arg(key->code).arg(key->code2).toUtf8().constData() << "\n";
-				continue;
-			}
-			emojisData.insert(fullCode, data);
-			if (emojiWithColors.constFind(fullCode) != emojiWithColors.cend()) {
-				if (fullCode > 0xFFFFFFFFLLU) {
-					cout << QString("Bad colored emoji: %1 %2").arg(data.code).arg(data.code2).toUtf8().constData() << "\n";
-					continue;
-				}
-				for (uint32 l = 0; l < sizeof(emojiColors) / sizeof(emojiColors[0]); ++l) {
-					uint32 color = emojiColors[l];
-					EmojiData colored = data;
-					colored.x = currentColumn;
-					colored.y = currentRow;
-					colored.color = color;
-
-					++currentColumn;
-					if (currentColumn == inRow) {
-						++currentRow;
-						currentColumn = 0;
-					}
-
-					fullCode = (uint64(k[j]) << 32) | uint64(color);
-					EmojisData::const_iterator key = emojisData.constFind(fullCode);
-					if (key != emojisData.cend()) {
-						cout << QString("Bad emoji code (duplicate) %1 %2 and %3 %4").arg(data.code).arg(data.code2).arg(key->code).arg(key->code2).toUtf8().constData() << "\n";
-						continue;
-					}
-					emojisData.insert(fullCode, colored);
-				}
-			}
-		}
-	}
-
-	if (currentColumn) ++currentRow;
-	if (!currentRow) {
-		cout << "No emojis written..\n";
-		return true;
-	}
-
-	QStringList str = QFontDatabase::applicationFontFamilies(QFontDatabase::addApplicationFont(QStringLiteral("/System/Library/Fonts/Apple Color Emoji.ttf")));
-
-	for (int variantIndex = 0; variantIndex < variantsCount; variantIndex++) {
-		int imSize = imSizes[variantIndex], bad = badSizes[variantIndex], badSize = (bad ? imSizes[5] : imSize);
-
-		QFont f(QGuiApplication::font());
-		f.setFamily(QStringLiteral("Apple Color Emoji"));
-		f.setPixelSize(emojiFontSizes[bad ? 5 : variantIndex]);
-
-		int s = 4 + badSize;
-		QImage badImg(inRow * badSize, currentRow * badSize, QImage::Format_ARGB32);
-		QImage emojisImg(inRow * imSize, currentRow * imSize, QImage::Format_ARGB32), emojiImg(s, s, QImage::Format_ARGB32);
-		{
-			QPainter p(&emojisImg), q(&badImg);
-			QPainter::CompositionMode m = p.compositionMode();
-			p.setCompositionMode(QPainter::CompositionMode_Source);
-			p.fillRect(0, 0, emojisImg.width(), emojisImg.height(), Qt::transparent);
-			p.setCompositionMode(m);
-			p.setRenderHint(QPainter::SmoothPixmapTransform);
-			if (bad) {
-				QPainter::CompositionMode m = q.compositionMode();
-				q.setCompositionMode(QPainter::CompositionMode_Source);
-				q.fillRect(0, 0, emojisImg.width(), emojisImg.height(), Qt::transparent);
-				q.setCompositionMode(m);
-				q.setRenderHint(QPainter::SmoothPixmapTransform);
-			}
-			for (EmojisData::const_iterator it = emojisData.cbegin(), e = emojisData.cend(); it != e; ++it) {
-				QRect drawFrom(2, 2, badSize, badSize);
-				QString es = textEmojiString(&it.value());
-				{
-					QPainter q(&emojiImg);
-					q.setPen(QColor(0, 0, 0, 255));
-					q.setFont(f);
-					QPainter::CompositionMode m = q.compositionMode();
-					q.setCompositionMode(QPainter::CompositionMode_Source);
-					q.fillRect(0, 0, emojiImg.width(), emojiImg.height(), Qt::transparent);
-					q.setCompositionMode(m);
-					q.drawText(2, 2 + emojiDeltas[bad ? 5 : variantIndex], es);
-				}
-				int top = 1, bottom = 1, left = 1, right = 1;
-				QRgb *b = (QRgb*)emojiImg.bits();
-				for (int i = 0; i < s; ++i) {
-					if (b[i] > 0 || b[(s - 1) * s + i] > 0 || b[i * s] > 0 || b[i * s + (s - 1)] > 0) {
-						cout << "Bad border!\n";
-						return false;
-					}
-					if (b[1 * s + i] > 0) top = -1;
-					else if (top > 0 && b[2 * s + i] > 0) top = 0;
-					if (b[(s - 2) * s + i] > 0) bottom = -1;
-					else if (bottom > 0 && b[(s - 3) * s + i] > 0) bottom = 0;
-					if (b[i * s + 1] > 0) left = -1;
-					else if (left > 0 && b[i * s + 2] > 0) left = 0;
-					if (b[i * s + (s - 2)] > 0) right = -1;
-					else if (right > 0 && b[i * s + (s - 3)] > 0) right = 0;
-				}
-				if (top < 0) {
-					if (bottom <= 0) {
-						cout << "Bad vertical :(\n";
-						return false;
-					} else {
-						drawFrom.setY(drawFrom.y() + 1);
-					}
-				} else if (bottom < 0) {
-					if (top <= 0) {
-						cout << "Bad vertical :(\n";
-						return false;
-					} else {
-						drawFrom.setY(drawFrom.y() - 1);
-					}
-				}
-				if (left < 0) {
-					if (right <= 0) {
-						cout << "Bad horizontal :(\n";
-						return false;
-					} else {
-						drawFrom.setX(drawFrom.x() + 1);
-					}
-				} else if (right < 0) {
-					if (left <= 0) {
-						cout << "Bad horizontal :(\n";
-						return false;
-					} else {
-						drawFrom.setX(drawFrom.x() - 1);
-					}
-				}
-				if (bad) {
-					p.drawImage(QRect(it->x * imSize, it->y * imSize, imSize, imSize), emojiImg.copy(2, 2, badSize, badSize).scaled(imSize, imSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
-					q.drawImage(QRect(it->x * badSize, it->y * badSize, badSize, badSize), emojiImg, QRect(2, 2, badSize, badSize));
-				} else {
-					p.drawImage(QRect(it->x * imSize, it->y * imSize, imSize, imSize), emojiImg, drawFrom);
-				}
-			}
-		}
-		QString postfix = variantPostfix[variantIndex], emojif = emoji_png + postfix + ".webp";
-//		emojisImg.save(emoji_png + postfix + ".png");
-//		if (bad) badImg.save(emoji_png + "_bad.png");
-		QByteArray emojib;
-		{
-			QBuffer ebuf(&emojib);
-			if (!emojisImg.save(&ebuf, "WEBP", (variantIndex < 3) ? 100 : 99)) {
-				cout << "Could not save 'emoji" << postfix.toUtf8().constData() << ".webp'!\n";
-				return false;
-			}
-		}
-		bool needResave = !QFileInfo(emojif).exists();
-		if (!needResave) {
-			QFile ef(emojif);
-			if (!ef.open(QIODevice::ReadOnly)) {
-				needResave = true;
-			} else {
-				QByteArray already(ef.readAll());
-				if (already.size() != emojib.size() || memcmp(already.constData(), emojib.constData(), already.size())) {
-					needResave = true;
-				}
-			}
-		}
-        if (needResave) {
-			QFile ef(emojif);
-			if (!ef.open(QIODevice::WriteOnly)) {
-				cout << "Could not save 'emoji" << postfix.toUtf8().constData() << ".png'!\n";
-				return false;
-			} else {
-				if (ef.write(emojib) != emojib.size()) {
-					cout << "Could not save 'emoji" << postfix.toUtf8().constData() << ".png'!\n";
-					return false;
-				}
-			}
-		}
-	}
-
-	try {
-
-		QByteArray cppText;
-		{
-			QTextStream tcpp(&cppText);
-			tcpp << "\
-/*\n\
-Created from emoji config by \'/MetaEmoji\' project\n\
-\n\
-WARNING! All changes made in this file will be lost!\n\
-\n\
-This file is part of Telegram Desktop, \n\
-the official desktop version of Telegram messaging app, see https://telegram.org\n\
-\n\
-Telegram Desktop is free software: you can redistribute it and/or modify\n\
-it under the terms of the GNU General Public License as published by\n\
-the Free Software Foundation, either version 3 of the License, or\n\
-(at your option) any later version.\n\
-\n\
-It is distributed in the hope that it will be useful,\n\
-but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
-GNU General Public License for more details.\n\
-\n\
-In addition, as a special exception, the copyright holders give permission\n\
-to link the code of portions of this program with the OpenSSL library.\n\
-\n\
-Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\
-Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org\n\
-*/\n";
-			tcpp << "#include \"stdafx.h\"\n#include \"ui/emoji_config.h\"\n\n";
-
-			tcpp << "namespace {\n"; // namespace with data
-			tcpp << "\tEmojiData *emojis = 0;\n";
-			tcpp << "\tchar emojisData[sizeof(EmojiData) * " << emojisData.size() << "];\n";
-			tcpp << "}\n\n";
-			tcpp << "int EmojiSizes[] = { ";
-			for (int variantIndex = 0; variantIndex < variantsCount; ++variantIndex) {
-				int imSize = imSizes[variantIndex];
-				tcpp << imSize;
-				if (variantIndex + 1 < variantsCount) tcpp << ", ";
-			}
-			tcpp << " }, EIndex = -1, ESize = 0;\n";
-			tcpp << "const char *EmojiNames[] = { ";
-			for (int variantIndex = 0; variantIndex < variantsCount; ++variantIndex) {
-				tcpp << "\":/gui/art/emoji" << variantPostfix[variantIndex] << ".webp\"";
-				if (variantIndex + 1 < variantsCount) tcpp << ", ";
-			}
-			tcpp << " }, *EName = 0;\n";
-
-			int ind = 0;
-			for (EmojisData::const_iterator i = emojisData.cbegin(), e = emojisData.cend(); i != e; ++i) {
-				if (i->color && ((i->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-					uint32 fullCode = uint32(i.key() >> 32);
-					EmojisData::iterator it = emojisData.find(fullCode);
-					if (it == e) {
-						cout << "Could not find original emoji 0x" << QString("%1").arg(fullCode, 0, 16).toUpper().toUtf8().constData() << "\n";
-						++ind;
-						continue;
-					}
-					if (!it->color) {
-						it->color = 0xFFFF0000U | uint32(ind);
-					}
-				}
-				++ind;
-			}
-
-			tcpp << "void emojiInit() {\n";
-			tcpp << "\tDBIScale emojiForScale = cRetina() ? dbisTwo : cScale();\n\n";
-            tcpp << "\tswitch (emojiForScale) {\n";
-            for (int variantIndex = 0; variantIndex < variantsCount - 1; ++variantIndex) {
-                tcpp << "\t\tcase " << variantNames[variantIndex] << ": EIndex = " << variantIndex << "; break;\n";
-            }
-            tcpp << "\t};\n\tESize = EmojiSizes[EIndex];\n\tEName = EmojiNames[EIndex];\n\n";
-			tcpp << "\tEmojiData *toFill = emojis = (EmojiData*)emojisData;\n\n";
-			uint32 index = 0;
-			int sequenceOffset = 0;
-			for (EmojisData::const_iterator i = emojisData.cbegin(), e = emojisData.cend(); i != e; ++i) {
-				int len = 1;
-				if (i->code2) {
-					len = 4;
-				} else if (i->code >> 16) {
-					if ((i->code >> 16) == 0xFFFF) { // sequence
-						len = textEmojiString(&i.value()).size();
-						if (!sequenceOffset) sequenceOffset = index;
-					} else {
-						len = 2;
-					}
-				}
-				if (i->color && ((i->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-					len += 2;
-				}
-				bool withPostfix = emojiWithPostfixes.constFind(i->code) != emojiWithPostfixes.cend();
-				tcpp << "\tnew (toFill++) EmojiData(" << i->x << ", " << i->y << ", 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U, 0" << (i->code2 ? ('x' + QString("%1U").arg(i->code2, 0, 16).toUpper()).toUtf8().constData() : "") << ", " << len << (withPostfix ? ", 0xFE0F, 0" : ", 0, 0") << (i->color ? ('x' + QString("%1U").arg(i->color, 0, 16).toUpper()).toUtf8().constData() : "") << ");\n";
-				++index;
-			}
-			tcpp << "};\n\n";
-
-			// getter of one symbol emojis
-			tcpp << "EmojiPtr emojiGet(uint32 code) {\n";
-			tcpp << "\tif (!emojis) return 0;\n\n";
-			tcpp << "\tuint32 highCode = code >> 16;\n";
-
-			EmojisData::const_iterator i = emojisData.cbegin(), e = emojisData.cend();
-
-			tcpp << "\tif (!highCode) {\n"; // small codes
-			tcpp << "\t\tswitch (code) {\n";
-			for (index = 0; i != e; ++i) { // two small
-				if (i->code2) break;
-				if (i->code != 169 && i->code != 174) break;
-
-                tcpp << "\t\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: return &emojis[" << (index++) << "];\n";
-			}
-			tcpp << "\t\t}\n\n";
-            tcpp << "\t\tif (code < 0x" << QString("%1").arg(min1, 0, 16).toUpper().toUtf8().constData() << "U || code > 0x" << QString("%1").arg(max1, 0, 16).toUpper().toUtf8().constData() << "U) return 0;\n\n";
-			tcpp << "\t\tswitch (code) {\n";
-			for (; i != e; ++i) {
-				if (i->code2 || (i->code >> 16)) break;
-                tcpp << "\t\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: return &emojis[" << (index++) << "];\n";
-			}
-			tcpp << "\t\t}\n\n";
-			tcpp << "\t\treturn 0;\n";
-			tcpp << "\t}\n\n";
-
-			tcpp << "\tif (highCode == 0x23 || highCode == 0x2A || (highCode >= 0x30 && highCode < 0x3A)) {\n"; // digits
-            tcpp << "\t\tif ((code & 0xFFFFU) != 0x20E3U) return 0;\n\n";
-			tcpp << "\t\tswitch (code) {\n";
-			for (; i != e; ++i) {
-				if (i->code2) break;
-				uint32 high = i->code >> 16;
-				if (high != 0x23 && high != 0x2A && (high < 0x30 || high >= 0x3A)) break;
-
-                tcpp << "\t\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: return &emojis[" << (index++) << "];\n";
-			}
-			tcpp << "\t\t}\n\n";
-			tcpp << "\t\treturn 0;\n";
-			tcpp << "\t}\n\n";
-
-			tcpp << "\tif (highCode == 0xFFFFU) {\n"; // sequences
-			tcpp << "\t\tstatic const int sequenceOffset = " << sequenceOffset << ";\n\n";
-			tcpp << "\t\tuint32 index = (code & 0xFFFFU);\n";
-			tcpp << "\t\treturn (index < " << (sizeof(emojiSequences) / sizeof(emojiSequences[0])) << ") ? &emojis[sequenceOffset + index] : 0;\n";
-			tcpp << "\t}\n\n";
-
-            tcpp << "\tif (code < 0x" << QString("%1").arg(min2, 0, 16).toUpper().toUtf8().constData() << "U || code > 0x" << QString("%1").arg(max2, 0, 16).toUpper().toUtf8().constData() << "U) return 0;\n\n";
-			tcpp << "\tswitch (code) {\n";
-			uint32 minTwoSymbol = 0, maxTwoSymbol = 0;
-			for (; i != e; ++i) {
-				if (i->code2) {
-					if (!minTwoSymbol) minTwoSymbol = i->code;
-					if (i->code > maxTwoSymbol) {
-						tcpp << "\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: return TwoSymbolEmoji;\n";
-						maxTwoSymbol = i->code;
-					}
-					index++;
-					continue;
-				}
-				if ((i->code & 16) == 0xFFFF) { // sequence
-					index++;
-					continue;
-				}
-				if (i->color && ((i->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-					index++;
-					continue;
-				}
-                tcpp << "\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: return &emojis[" << (index++) << "];\n";
-			}
-			tcpp << "\t}\n\n";
-
-			tcpp << "\treturn 0;\n";
-			tcpp << "}\n\n";
-
-			// getter of two symbol emojis
-			tcpp << "EmojiPtr emojiGet(uint32 code, uint32 code2) {\n";
-			tcpp << "\tif (code < 0x" << QString("%1").arg(minTwoSymbol, 0, 16).toUpper().toUtf8().constData() << "U || code > 0x" << QString("%1").arg(maxTwoSymbol, 0, 16).toUpper().toUtf8().constData() << "U) return 0;\n\n";
-			tcpp << "\tswitch (code) {\n";
-			maxTwoSymbol = 0;
-			index = 0;
-			for (i = emojisData.cbegin(); i != e; ++i) {
-				if (i->code2) {
-					if (i->code > maxTwoSymbol) {
-						if (maxTwoSymbol) {
-							tcpp << "\t\t\tdefault: return 0;\n";
-							tcpp << "\t\t} break;\n";
-						}
-						tcpp << "\t\tcase 0x" << QString("%1").arg(i->code, 0, 16).toUpper().toUtf8().constData() << "U: switch (code2) {\n";
-						maxTwoSymbol = i->code;
-					}
-					tcpp << "\t\t\tcase 0x" << QString("%1").arg(i->code2, 0, 16).toUpper().toUtf8().constData() << "U: return &emojis[" << index << "];\n";
-				}
-				index++;
-			}
-			if (maxTwoSymbol) {
-				tcpp << "\t\t\tdefault: return 0;\n";
-				tcpp << "\t\t} break;\n";
-			}
-			tcpp << "\t}\n\n";
-			tcpp << "\treturn 0;\n";
-			tcpp << "}\n\n";
-
-			// getter of colored emojis
-			tcpp << "EmojiPtr emojiGet(EmojiPtr emoji, uint32 color) {\n";
-			tcpp << "\tif (!emoji || ((emoji->color & 0xFFFF0000U) != 0xFFFF0000U)) return emoji;\n\n";
-			tcpp << "\tint index = 0;\n";
-			tcpp << "\tswitch (color) {\n";
-			for (int j = 0, l = sizeof(emojiColors) / sizeof(emojiColors[0]); j < l; ++j) {
-				tcpp << "\t\tcase 0x" << QString("%1").arg(emojiColors[j], 0, 16).toUpper().toUtf8().constData() << ": index = " << j << "; break;\n";
-			}
-			tcpp << "\t\tdefault: return emoji;\n";
-			tcpp << "\t}\n\n";
-			tcpp << "\treturn &emojis[(emoji->color & 0xFFFFU) + index];\n";
-			tcpp << "}\n\n";
-
-			// getter of sequence emojis
-			QString seqs[sizeof(emojiSequences) / sizeof(emojiSequences[0])];
-			for (int j = 0, l = sizeof(emojiSequences) / sizeof(emojiSequences[0]); j < l; ++j) {
-				seqs[j] = QString::fromUtf8(emojiSequences[j]);
-			}
-			tcpp << "EmojiPtr emojiGet(const QChar *from, const QChar *end) {\n";
-			tcpp << "\tstatic const int sequenceOffset = " << sequenceOffset << ";\n\n";
-			tcpp << "\tif (from + 4 < end && (from + 2)->unicode() == 0x200D) {\n";
-			tcpp << "\t\tuint32 one = (uint32(from->unicode()) << 16) | uint32((from + 1)->unicode()), two = (uint32((from + 3)->unicode()) << 16) | uint32((from + 4)->unicode());\n";
-			tcpp << "\t\tif (one == 0xD83DDC41 && two == 0xD83DDDE8) {\n";
-			tcpp << "\t\t\treturn &emojis[sequenceOffset + 18];\n";
-			tcpp << "\t\t}\n";
-			tcpp << "\t}\n\n";
-			tcpp << "\tif (end < from + 8 || (from + 2)->unicode() != 0x200D || (from + 5)->unicode() != 0x200D) return 0;\n\n";
-			tcpp << "\tstatic const uint32 ";
-			tcpp << "man = 0x" << QString("%1").arg((uint32(seqs[0].at(0).unicode()) << 16) | uint32(seqs[0].at(1).unicode()), 0, 16).toUpper().toUtf8().constData() << ", ";
-			tcpp << "woman = 0x" << QString("%1").arg((uint32(seqs[0].at(3).unicode()) << 16) | uint32(seqs[0].at(4).unicode()), 0, 16).toUpper().toUtf8().constData() << ", ";
-			tcpp << "boy = 0x" << QString("%1").arg((uint32(seqs[4].at(6).unicode()) << 16) | uint32(seqs[4].at(7).unicode()), 0, 16).toUpper().toUtf8().constData() << ", ";
-			tcpp << "girl = 0x" << QString("%1").arg((uint32(seqs[0].at(6).unicode()) << 16) | uint32(seqs[0].at(7).unicode()), 0, 16).toUpper().toUtf8().constData() << ", ";
-			tcpp << "heart = 0x" << QString("%1").arg((uint32(seqs[16].at(3).unicode()) << 16) | uint32(seqs[16].at(4).unicode()), 0, 16).toUpper().toUtf8().constData() << ", ";
-			tcpp << "kiss = 0x" << QString("%1").arg((uint32(seqs[16].at(6).unicode()) << 16) | uint32(seqs[16].at(7).unicode()), 0, 16).toUpper().toUtf8().constData() << ";\n";
-			tcpp << "\tuint32 one = (uint32(from->unicode()) << 16) | uint32((from + 1)->unicode()), two = (uint32((from + 3)->unicode()) << 16) | uint32((from + 4)->unicode()), three = (uint32((from + 6)->unicode()) << 16) | uint32((from + 7)->unicode());\n\n";
-			tcpp << "\tif (one != man && one != woman) return 0;\n\n";
-			tcpp << "\tif (end > from + 10 && (from + 8)->unicode() == 0x200D) {\n";
-			tcpp << "\t\tuint32 four = (uint32((from + 9)->unicode()) << 16) | uint32((from + 10)->unicode());\n\n";
-			tcpp << "\t\tif (one == man) {\n";
-			tcpp << "\t\t\tif (two == man) {\n";
-
-			tcpp << "\t\t\t\tif (three == girl) {\n";
-			tcpp << "\t\t\t\t\tif (four == girl) return &emojis[sequenceOffset + 13];\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 11];\n";
-			tcpp << "\t\t\t\t} else if (three == boy) {\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 12];\n";
-			tcpp << "\t\t\t\t}\n";
-
-			tcpp << "\t\t\t} else if (two == woman) {\n";
-
-			tcpp << "\t\t\t\tif (three == girl) {\n";
-			tcpp << "\t\t\t\t\tif (four == girl) return &emojis[sequenceOffset + 3];\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 1];\n";
-			tcpp << "\t\t\t\t} else if (three == boy) {\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 2];\n";
-			tcpp << "\t\t\t\t}\n";
-
-			tcpp << "\t\t\t} else if (two == heart) {\n";
-			tcpp << "\t\t\t\tif (three == kiss && four == man) return &emojis[sequenceOffset + 17];\n";
-			tcpp << "\t\t\t}\n";
-			tcpp << "\t\t} else {\n"; // one == woman
-			tcpp << "\t\t\tif (two == woman) {\n";
-
-			tcpp << "\t\t\t\tif (three == girl) {\n";
-			tcpp << "\t\t\t\t\tif (four == girl) return &emojis[sequenceOffset + 8];\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 6];\n";
-			tcpp << "\t\t\t\t} else if (three == boy) {\n";
-			tcpp << "\t\t\t\t\tif (four == boy) return &emojis[sequenceOffset + 7];\n";
-			tcpp << "\t\t\t\t}\n";
-
-			tcpp << "\t\t\t} else if (two == heart) {\n";
-			tcpp << "\t\t\t\tif (three == kiss && four == woman) return &emojis[sequenceOffset + 16];\n";
-			tcpp << "\t\t\t}\n";
-			tcpp << "\t\t}\n";
-			tcpp << "\t}\n";
-
-			tcpp << "\tif (one == man) {\n";
-			tcpp << "\t\tif (two == man) {\n";
-
-			tcpp << "\t\t\tif (three == girl) return &emojis[sequenceOffset + 10];\n";
-			tcpp << "\t\t\tif (three == boy) return &emojis[sequenceOffset + 9];\n";
-
-			tcpp << "\t\t} else if (two == woman) {\n";
-			tcpp << "\t\t\tif (three == girl) return &emojis[sequenceOffset + 0];\n";
-			tcpp << "\t\t} else if (two == heart) {\n";
-			tcpp << "\t\t\tif (three == man) return &emojis[sequenceOffset + 15];\n";
-			tcpp << "\t\t}\n";
-			tcpp << "\t} else {\n"; // one == woman
-			tcpp << "\t\tif (two == woman) {\n";
-
-			tcpp << "\t\t\tif (three == girl) return &emojis[sequenceOffset + 5];\n";
-			tcpp << "\t\t\tif (three == boy) return &emojis[sequenceOffset + 4];\n";
-
-			tcpp << "\t\t} else if (two == heart) {\n";
-			tcpp << "\t\t\tif (three == woman) return &emojis[sequenceOffset + 14];\n";
-			tcpp << "\t\t}\n";
-			tcpp << "\t}\n";
-
-			tcpp << "\treturn 0;\n";
-			tcpp << "}\n\n";
-
-			tcpp << "QString emojiGetSequence(int index) {\n";
-			tcpp << "\tstatic QVector<QString> sequences;\n";
-			tcpp << "\tif (sequences.isEmpty()) {\n";
-			tcpp << "\t\tsequences.reserve(" << (sizeof(seqs) / sizeof(seqs[0])) << ");\n\n";
-			for (uint32 j = 0; j < (sizeof(emojiSequences) / sizeof(emojiSequences[0])); ++j) {
-				uint32 len = QByteArray(emojiSequences[j]).size();
-				QString str;
-				str.reserve(4 * len);
-				for (uint32 k = 0; k < len; ++k) {
-					str.append(QString("\\x%1").arg(uint32((unsigned char)(emojiSequences[j][k])), 2, 16, QChar('0')));
-				}
-				tcpp << "\t\tsequences.push_back(QString::fromUtf8(\"" << str.toUtf8().constData() << "\"));\n";
-			}
-			tcpp << "\t}\n\n";
-			tcpp << "\treturn (index >= 0 && index < sequences.size()) ? sequences.at(index) : QString();\n";
-			tcpp << "}\n\n";
-
-			// emoji autoreplace
-			tcpp << "void emojiFind(const QChar *ch, const QChar *e, const QChar *&newEmojiEnd, uint32 &emojiCode) {\n";
-			tcpp << "\tswitch (ch->unicode()) {\n";
-
-			QString tab("\t");
-			for (uint32 i = 0; i < replacesCount; ++i) {
-				QString key = QString::fromUtf8(replaces[i].replace);
-				replaceMap[key] = replaces[i].code;
-			}
-			QString chars;
-			for (ReplaceMap::const_iterator i = replaceMap.cend(), e = replaceMap.cbegin(); i != e;) {
-				--i;
-				QString key = i.key();
-				if (key == chars) {
-					tcpp << tab.repeated(1 + chars.size()) << "}\n";
-				}
-				bool needSwitch = chars.size();
-				while (chars.size() && key.midRef(0, chars.size()) != chars) {
-					needSwitch = false;
-					chars.resize(chars.size() - 1);
-					tcpp << tab.repeated(1 + chars.size()) << "break;\n";
-					if (chars.size() && (key.midRef(0, chars.size()) != chars || key == chars)) {
-						tcpp << tab.repeated(1 + chars.size()) << "}\n";
-					}
-				}
-				for (int j = chars.size(); j < key.size(); ++j) {
-					if (needSwitch) {
-						tcpp << tab.repeated(1 + chars.size()) << "if (ch + " << chars.size() << " != e) switch ((ch + " << chars.size() << ")->unicode()) {\n";
-					}
-					tcpp << tab.repeated(1 + chars.size()) << "case '" << ((key.at(j) == '\\' || key.at(j) == '\'') ? "\\" : "") << key.at(j) << "':\n";
-					chars.push_back(key.at(j));
-					needSwitch = true;
-				}
-				tcpp << tab.repeated(1 + chars.size()) << "newEmojiEnd = ch + " << chars.size() << ";\n";
-				tcpp << tab.repeated(1 + chars.size()) << "if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {\n";
-                tcpp << tab.repeated(1 + chars.size()) << "\temojiCode = 0x" << QString("%1").arg(i.value(), 0, 16).toUpper().toUtf8().constData() << "U;\n";
-				tcpp << tab.repeated(1 + chars.size()) << "\treturn;\n";
-				tcpp << tab.repeated(1 + chars.size()) << "}\n";
-			}
-			while (chars.size()) {
-				chars.resize(chars.size() - 1);
-				tcpp << tab.repeated(1 + chars.size()) << "break;\n";
-				if (chars.size()) {
-					tcpp << tab.repeated(1 + chars.size()) << "}\n";
-				}
-			}
-					
-			tcpp << "\t}\n";
-			tcpp << "}\n\n";
-
-			tcpp << "int emojiPackCount(DBIEmojiTab tab) {\n";
-			tcpp << "\tswitch (tab) {\n";
-			tcpp << "\t\tcase dbietRecent  : return cGetRecentEmojis().size();\n";
-			tcpp << "\t\tcase dbietPeople  : return " << sizeof(emojiCategory1) / sizeof(emojiCategory1[0]) << ";\n";
-			tcpp << "\t\tcase dbietNature  : return " << sizeof(emojiCategory2) / sizeof(emojiCategory2[0]) << ";\n";
-			tcpp << "\t\tcase dbietFood    : return " << sizeof(emojiCategory3) / sizeof(emojiCategory3[0]) << ";\n";
-			tcpp << "\t\tcase dbietActivity: return " << sizeof(emojiCategory4) / sizeof(emojiCategory4[0]) << ";\n";
-			tcpp << "\t\tcase dbietTravel  : return " << sizeof(emojiCategory5) / sizeof(emojiCategory5[0]) << ";\n";
-			tcpp << "\t\tcase dbietObjects : return " << sizeof(emojiCategory6) / sizeof(emojiCategory6[0]) << ";\n";
-			tcpp << "\t\tcase dbietSymbols : return " << sizeof(emojiCategory7) / sizeof(emojiCategory7[0]) << ";\n";
-//			tcpp << "\t\tcase dbietFlags   : return " << sizeof(emojiCategory8) / sizeof(emojiCategory8[0]) << ";\n";
-			tcpp << "\t};\n";
-			tcpp << "\treturn 0;\n";
-			tcpp << "}\n\n";
-			tcpp << "EmojiPack emojiPack(DBIEmojiTab tab) {\n";
-			tcpp << "\tswitch (tab) {\n\n";
-			writeEmojiCategory(tcpp, emojiCategory1, sizeof(emojiCategory1) / sizeof(emojiCategory1[0]), "People");
-			writeEmojiCategory(tcpp, emojiCategory2, sizeof(emojiCategory2) / sizeof(emojiCategory2[0]), "Nature");
-			writeEmojiCategory(tcpp, emojiCategory3, sizeof(emojiCategory3) / sizeof(emojiCategory3[0]), "Food");
-			writeEmojiCategory(tcpp, emojiCategory4, sizeof(emojiCategory4) / sizeof(emojiCategory4[0]), "Activity");
-			writeEmojiCategory(tcpp, emojiCategory5, sizeof(emojiCategory5) / sizeof(emojiCategory5[0]), "Travel");
-			writeEmojiCategory(tcpp, emojiCategory6, sizeof(emojiCategory6) / sizeof(emojiCategory6[0]), "Objects");
-			writeEmojiCategory(tcpp, emojiCategory7, sizeof(emojiCategory7) / sizeof(emojiCategory7[0]), "Symbols");
-//			writeEmojiCategory(tcpp, emojiCategory8, sizeof(emojiCategory8) / sizeof(emojiCategory8[0]), "Flags");
-			tcpp << "\t};\n\n";
-			tcpp << "\tEmojiPack result;\n";
-			tcpp << "\tresult.reserve(cGetRecentEmojis().size());\n";
-			tcpp << "\tfor (RecentEmojiPack::const_iterator i = cGetRecentEmojis().cbegin(), e = cGetRecentEmojis().cend(); i != e; ++i) {\n";
-			tcpp << "\t\tresult.push_back(i->first);\n";
-			tcpp << "\t}\n";
-			tcpp << "\treturn result;\n";
-			tcpp << "}\n\n";
-		}
-		QFile cpp(emoji_out);
-		bool write_cpp = true;
-		if (cpp.open(QIODevice::ReadOnly)) {
-			QByteArray wasCpp = cpp.readAll();
-			if (wasCpp.size() == cppText.size()) {
-				if (!memcmp(wasCpp.constData(), cppText.constData(), cppText.size())) {
-					write_cpp = false;
-				}
-			}
-			cpp.close();
-		}
-		if (write_cpp) {
-			cout << "Emoji updated, writing " << currentRow << " rows, full count " << emojisData.size() << " emojis.\n";
-			if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!");
-			if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!");
-		}/**/
-	} catch (exception &e) {
-		cout << e.what() << "\n";
-		QCoreApplication::exit(1);
-		return false;
-	}
-	return true;
-}
diff --git a/Telegram/SourceFiles/_other/genemoji.h b/Telegram/SourceFiles/_other/genemoji.h
deleted file mode 100644
index 67da4c3da..000000000
--- a/Telegram/SourceFiles/_other/genemoji.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-This file is part of Telegram Desktop,
-the official desktop version of Telegram messaging app, see https://telegram.org
-
-Telegram Desktop is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-It is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-In addition, as a special exception, the copyright holders give permission
-to link the code of portions of this program with the OpenSSL library.
-
-Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
-Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
-*/
-#include <QtCore/QMap>
-#include <QtCore/QVector>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QBuffer>
-#include <QtCore/QDir>
-#include <QtCore/QRegularExpression>
-#include <QtGui/QImage>
-#include <QtGui/QPainter>
-#include <iostream>
-#include <exception>
-#include <QtCore/QTextStream>
-#include <QtCore/QString>
-#include <QtCore/QCoreApplication>
-#include <QtGui/QGuiApplication>
-
-using std::string;
-using std::cout;
-using std::cerr;
-using std::exception;
-
-class Exception : public exception {
-public:
-
-    Exception(const QString &msg) : _msg(msg.toUtf8()) {
-	}
-
-    virtual const char *what() const throw() {
-        return _msg.constData();
-    }
-    virtual ~Exception() throw() {
-    }
-
-private:
-	QByteArray _msg;
-};
-
-bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png);
-
-class GenEmoji : public QObject {
-	Q_OBJECT
-
-public:
-	GenEmoji(const QString &emoji_in, const QString &emoji_out, const QString &emoji_png) : QObject(0),
-		_emoji_in(emoji_in), _emoji_out(emoji_out), _emoji_png(emoji_png) {
-	}
-
-	public slots :
-		void run()  {
-			if (genEmoji(_emoji_in, _emoji_out, _emoji_png)) {
-				emit finished();
-			}
-		}
-
-signals:
-	void finished();
-
-private:
-
-	QString _emoji_in, _emoji_out, _emoji_png;
-};
diff --git a/Telegram/SourceFiles/_other/memain.cpp b/Telegram/SourceFiles/_other/memain.cpp
deleted file mode 100644
index 1230f814c..000000000
--- a/Telegram/SourceFiles/_other/memain.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-This file is part of Telegram Desktop,
-the official desktop version of Telegram messaging app, see https://telegram.org
-
-Telegram Desktop is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-It is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-In addition, as a special exception, the copyright holders give permission
-to link the code of portions of this program with the OpenSSL library.
-
-Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
-Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
-*/
-#include "memain.h"
-
-int main(int argc, char *argv[]) {
-	QString emoji_in("./Resources/art/emojisprite_"), emoji_out("./SourceFiles/gui/emoji_config.cpp"), emoji_png("./Resources/art/emoji");
-	for (int i = 0; i < argc; ++i) {
-		if (string("-emoji_in") == argv[i]) {
-			if (++i < argc) emoji_in = argv[i];
-		} else if (string("-emoji_out") == argv[i]) {
-			if (++i < argc) emoji_out = argv[i];
-		} else if (string("-emoji_png") == argv[i]) {
-			if (++i < argc) emoji_png = argv[i];
-		}
-	}
-#ifdef Q_OS_MAC
-    if (QDir(QString()).absolutePath() == "/") {
-        QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString();
-        if (!first.isEmpty()) {
-            QFileInfo info(first);
-            if (info.exists()) {
-                QDir result(info.absolutePath() + "/../../..");
-                QString basePath = result.absolutePath() + '/';
-                emoji_in = basePath + emoji_in;
-                emoji_out = basePath + emoji_out;
-				emoji_png = basePath + emoji_png;
-            }
-        }
-    }
-#endif
-	QObject *taskImpl = new GenEmoji(emoji_in, emoji_out, emoji_png);
-
-	QGuiApplication a(argc, argv);
-
-	QObject::connect(taskImpl, SIGNAL(finished()), &a, SLOT(quit()));
-	QTimer::singleShot(0, taskImpl, SLOT(run()));
-
-	return a.exec();
-}
diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp
index cf291c359..b4152187d 100644
--- a/Telegram/SourceFiles/apiwrap.cpp
+++ b/Telegram/SourceFiles/apiwrap.cpp
@@ -1089,22 +1089,24 @@ void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result)
 	} else {
 		it->stickers = pack;
 		it->emoji.clear();
-		const auto &v(d.vpacks.c_vector().v);
-		for (int32 i = 0, l = v.size(); i < l; ++i) {
-			if (v.at(i).type() != mtpc_stickerPack) continue;
+		auto &v = d.vpacks.c_vector().v;
+		for (auto i = 0, l = v.size(); i != l; ++i) {
+			if (v[i].type() != mtpc_stickerPack) continue;
 
-			const auto &pack(v.at(i).c_stickerPack());
-			if (EmojiPtr e = emojiGetNoColor(emojiFromText(qs(pack.vemoticon)))) {
-				const auto &stickers(pack.vdocuments.c_vector().v);
+			auto &pack = v[i].c_stickerPack();
+			if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) {
+				emoji = emoji->original();
+				auto &stickers = pack.vdocuments.c_vector().v;
+				
 				StickerPack p;
 				p.reserve(stickers.size());
-				for (int32 j = 0, c = stickers.size(); j < c; ++j) {
-					DocumentData *doc = App::document(stickers.at(j).v);
+				for (auto j = 0, c = stickers.size(); j != c; ++j) {
+					auto doc = App::document(stickers[j].v);
 					if (!doc || !doc->sticker()) continue;
 
 					p.push_back(doc);
 				}
-				it->emoji.insert(e, p);
+				it->emoji.insert(emoji, p);
 			}
 		}
 	}
diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp
index b88a506f0..1e30b38aa 100644
--- a/Telegram/SourceFiles/app.cpp
+++ b/Telegram/SourceFiles/app.cpp
@@ -119,9 +119,9 @@ namespace {
 	CornersMap cornersMap;
 	QImage *cornersMaskLarge[4] = { nullptr }, *cornersMaskSmall[4] = { nullptr };
 
-	using EmojiMap = QMap<uint64, QPixmap>;
-	EmojiMap mainEmojiMap;
-	QMap<int32, EmojiMap> otherEmojiMap;
+	using EmojiImagesMap = QMap<int, QPixmap>;
+	EmojiImagesMap MainEmojiMap;
+	QMap<int, EmojiImagesMap> OtherEmojiMap;
 
 	int32 serviceImageCacheSize = 0;
 
@@ -2278,13 +2278,13 @@ namespace {
 			if (family.isEmpty()) family = QFontDatabase::systemFont(QFontDatabase::FixedFont).family();
 			::monofont = style::font(st::normalFont->f.pixelSize(), 0, family);
 		}
-		emojiInit();
+		Ui::Emoji::Init();
 		if (!::emoji) {
-			::emoji = new QPixmap(QLatin1String(EName));
+			::emoji = new QPixmap(Ui::Emoji::Filename(Ui::Emoji::Index()));
             if (cRetina()) ::emoji->setDevicePixelRatio(cRetinaFactor());
 		}
 		if (!::emojiLarge) {
-			::emojiLarge = new QPixmap(QLatin1String(EmojiNames[EIndex + 1]));
+			::emojiLarge = new QPixmap(Ui::Emoji::Filename(Ui::Emoji::Index() + 1));
 			if (cRetina()) ::emojiLarge->setDevicePixelRatio(cRetinaFactor());
 		}
 
@@ -2336,8 +2336,8 @@ namespace {
 
 		clearCorners();
 
-		mainEmojiMap.clear();
-		otherEmojiMap.clear();
+		MainEmojiMap.clear();
+		OtherEmojiMap.clear();
 
 		Data::clearGlobalStructures();
 
@@ -2414,20 +2414,17 @@ namespace {
 	}
 
 	const QPixmap &emojiSingle(EmojiPtr emoji, int32 fontHeight) {
-		EmojiMap *map = &(fontHeight == st::msgFont->height ? mainEmojiMap : otherEmojiMap[fontHeight]);
-		EmojiMap::const_iterator i = map->constFind(emojiKey(emoji));
-		if (i == map->cend()) {
-			QImage img(ESize + st::emojiPadding * cIntRetinaFactor() * 2, fontHeight * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
-            if (cRetina()) img.setDevicePixelRatio(cRetinaFactor());
+		auto &map = (fontHeight == st::msgFont->height) ? MainEmojiMap : OtherEmojiMap[fontHeight];
+		auto i = map.constFind(emoji->index());
+		if (i == map.cend()) {
+			auto image = QImage(Ui::Emoji::Size() + st::emojiPadding * cIntRetinaFactor() * 2, fontHeight * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
+            if (cRetina()) image.setDevicePixelRatio(cRetinaFactor());
+			image.fill(Qt::transparent);
 			{
-				QPainter p(&img);
-				QPainter::CompositionMode m = p.compositionMode();
-				p.setCompositionMode(QPainter::CompositionMode_Source);
-				p.fillRect(0, 0, img.width(), img.height(), Qt::transparent);
-				p.setCompositionMode(m);
-				emojiDraw(p, emoji, st::emojiPadding * cIntRetinaFactor(), (fontHeight * cIntRetinaFactor() - ESize) / 2);
+				QPainter p(&image);
+				emojiDraw(p, emoji, st::emojiPadding * cIntRetinaFactor(), (fontHeight * cIntRetinaFactor() - Ui::Emoji::Size()) / 2);
 			}
-			i = map->insert(emojiKey(emoji), App::pixmapFromImageInPlace(std_::move(img)));
+			i = map.insert(emoji->index(), App::pixmapFromImageInPlace(std_::move(image)));
 		}
 		return i.value();
 	}
diff --git a/Telegram/SourceFiles/boxes/emojibox.cpp b/Telegram/SourceFiles/boxes/emojibox.cpp
index 5adcbc27d..a925e9007 100644
--- a/Telegram/SourceFiles/boxes/emojibox.cpp
+++ b/Telegram/SourceFiles/boxes/emojibox.cpp
@@ -26,52 +26,57 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 #include "mainwindow.h"
 
 namespace {
-	// copied from genemoji.cpp
-	struct EmojiReplace {
-		uint32 code;
-		const char *replace;
-	};
-	EmojiReplace replaces[] = {
-		{ 0xD83DDE0AU, ":-)" },
-		{ 0xD83DDE0DU, "8-)" },
-		{ 0x2764U, "<3" },
-		{ 0xD83DDC8BU, ":kiss:" },
-		{ 0xD83DDE01U, ":grin:" },
-		{ 0xD83DDE02U, ":joy:" },
-		{ 0xD83DDE1AU, ":-*" },
-		{ 0xD83DDE06U, "xD" },
-		{ 0xD83DDC4DU, ":like:" },
-		{ 0xD83DDC4EU, ":dislike:" },
-		{ 0x261DU, ":up:" },
-		{ 0x270CU, ":v:" },
-		{ 0xD83DDC4CU, ":ok:" },
-		{ 0xD83DDE0EU, "B-)" },
-		{ 0xD83DDE03U, ":-D" },
-		{ 0xD83DDE09U, ";-)" },
-		{ 0xD83DDE1CU, ";-P" },
-		{ 0xD83DDE0BU, ":-p" },
-		{ 0xD83DDE14U, "3(" },
-		{ 0xD83DDE1EU, ":-(" },
-		{ 0xD83DDE0FU, ":]" },
-		{ 0xD83DDE22U, ":'(" },
-		{ 0xD83DDE2DU, ":_(" },
-		{ 0xD83DDE29U, ":((" },
-		{ 0xD83DDE28U, ":o" },
-		{ 0xD83DDE10U, ":|" },
-		{ 0xD83DDE0CU, "3-)" },
-		{ 0xD83DDE20U, ">(" },
-		{ 0xD83DDE21U, ">((" },
-		{ 0xD83DDE07U, "O:)" },
-		{ 0xD83DDE30U, ";o" },
-		{ 0xD83DDE33U, "8|" },
-		{ 0xD83DDE32U, "8o" },
-		{ 0xD83DDE37U, ":X" },
-		{ 0xD83DDE08U, "}:)" },
-	};
-	const uint32 replacesCount = sizeof(replaces) / sizeof(EmojiReplace), replacesInRow = 7;
-}
 
-EmojiBox::EmojiBox(QWidget*) : _esize(EmojiSizes[EIndex + 1]) {
+struct EmojiReplace {
+	uint32 code;
+	const char *replace;
+};
+
+// copied from codegen_emoji
+EmojiReplace Replaces[] = {
+	{ 0xD83DDE0AU, ":-)" },
+	{ 0xD83DDE0DU, "8-)" },
+	{ 0x2764U, "<3" },
+	{ 0xD83DDC8BU, ":kiss:" },
+	{ 0xD83DDE01U, ":grin:" },
+	{ 0xD83DDE02U, ":joy:" },
+	{ 0xD83DDE1AU, ":-*" },
+	{ 0xD83DDE06U, "xD" },
+	{ 0xD83DDC4DU, ":like:" },
+	{ 0xD83DDC4EU, ":dislike:" },
+	{ 0x261DU, ":up:" },
+	{ 0x270CU, ":v:" },
+	{ 0xD83DDC4CU, ":ok:" },
+	{ 0xD83DDE0EU, "B-)" },
+	{ 0xD83DDE03U, ":-D" },
+	{ 0xD83DDE09U, ";-)" },
+	{ 0xD83DDE1CU, ";-P" },
+	{ 0xD83DDE0BU, ":-p" },
+	{ 0xD83DDE14U, "3(" },
+	{ 0xD83DDE1EU, ":-(" },
+	{ 0xD83DDE0FU, ":]" },
+	{ 0xD83DDE22U, ":'(" },
+	{ 0xD83DDE2DU, ":_(" },
+	{ 0xD83DDE29U, ":((" },
+	{ 0xD83DDE28U, ":o" },
+	{ 0xD83DDE10U, ":|" },
+	{ 0xD83DDE0CU, "3-)" },
+	{ 0xD83DDE20U, ">(" },
+	{ 0xD83DDE21U, ">((" },
+	{ 0xD83DDE07U, "O:)" },
+	{ 0xD83DDE30U, ";o" },
+	{ 0xD83DDE33U, "8|" },
+	{ 0xD83DDE32U, "8o" },
+	{ 0xD83DDE37U, ":X" },
+	{ 0xD83DDE08U, "}:)" },
+};
+
+constexpr auto kReplacesCount = base::array_size(Replaces);
+constexpr auto kReplacesInRow = 7;
+
+} // namespace
+
+EmojiBox::EmojiBox(QWidget*) : _esize(Ui::Emoji::Size(Ui::Emoji::Index() + 1)) {
 }
 
 void EmojiBox::prepare() {
@@ -87,25 +92,21 @@ void EmojiBox::prepare() {
 
 void EmojiBox::fillBlocks() {
 	BlockRow currentRow;
-	currentRow.reserve(replacesInRow);
-	for (uint32 i = 0; i < replacesCount; ++i) {
-		EmojiPtr emoji = emojiGet(replaces[i].code);
-		if (!emoji || emoji == TwoSymbolEmoji) continue;
-		if (emoji->color) {
-			EmojiColorVariants::const_iterator it = cEmojiVariants().constFind(emoji->code);
+	currentRow.reserve(kReplacesInRow);
+	for (uint32 i = 0; i < kReplacesCount; ++i) {
+		auto emoji = Ui::Emoji::FromOldKey(Replaces[i].code);
+		if (!emoji) continue;
+
+		if (emoji->hasVariants()) {
+			auto it = cEmojiVariants().constFind(emoji->nonColoredId());
 			if (it != cEmojiVariants().cend()) {
-				EmojiPtr replace = emojiFromKey(it.value());
-				if (replace) {
-					if (replace != TwoSymbolEmoji && replace->code == emoji->code && replace->code2 == emoji->code2) {
-						emoji = replace;
-					}
-				}
+				emoji = emoji->variant(it.value());
 			}
 		}
 
-		Block block(emoji, QString::fromUtf8(replaces[i].replace));
+		Block block(emoji, QString::fromUtf8(Replaces[i].replace));
 		currentRow.push_back(block);
-        if (uint32(currentRow.size()) == replacesInRow) {
+        if (uint32(currentRow.size()) == kReplacesInRow) {
 			_blocks.push_back(currentRow);
 			currentRow.resize(0);
 		}
@@ -135,7 +136,7 @@ void EmojiBox::paintEvent(QPaintEvent *e) {
 		int32 rowSize = i->size(), left = (width() - rowSize * st::emojiReplaceWidth) / 2;
 		for (BlockRow::const_iterator j = i->cbegin(), en = i->cend(); j != en; ++j) {
 			if (j->emoji) {
-				p.drawPixmap(QPoint(left + (st::emojiReplaceWidth - (_esize / cIntRetinaFactor())) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2), App::emojiLarge(), QRect(j->emoji->x * _esize, j->emoji->y * _esize, _esize, _esize));
+				p.drawPixmap(QPoint(left + (st::emojiReplaceWidth - (_esize / cIntRetinaFactor())) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2), App::emojiLarge(), QRect(j->emoji->x() * _esize, j->emoji->y() * _esize, _esize, _esize));
 			}
 			QRect trect(left, top + (st::emojiReplaceHeight + _blockHeight) / 2 - st::emojiTextFont->height, st::emojiReplaceWidth, st::emojiTextFont->height);
 			p.drawText(trect, j->text, QTextOption(Qt::AlignHCenter | Qt::AlignTop));
diff --git a/Telegram/SourceFiles/boxes/emojibox.h b/Telegram/SourceFiles/boxes/emojibox.h
index 4186930cc..e3385ff0b 100644
--- a/Telegram/SourceFiles/boxes/emojibox.h
+++ b/Telegram/SourceFiles/boxes/emojibox.h
@@ -39,9 +39,9 @@ private:
 
 	int32 _blockHeight;
 	struct Block {
-		Block(const EmojiData *emoji = 0, const QString &text = QString()) : emoji(emoji), text(text) {
+		Block(EmojiPtr emoji = nullptr, const QString &text = QString()) : emoji(emoji), text(text) {
 		}
-		const EmojiData *emoji;
+		EmojiPtr emoji;
 		QString text;
 	};
 	typedef QVector<Block> BlockRow;
diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp
index 1b357a6d6..33c48450c 100644
--- a/Telegram/SourceFiles/boxes/stickersetbox.cpp
+++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp
@@ -136,21 +136,23 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) {
 			_pack.push_back(doc);
 			_packOvers.push_back(Animation());
 		}
-		auto &packs(d.vpacks.c_vector().v);
-		for (int i = 0, l = packs.size(); i < l; ++i) {
+		auto &packs = d.vpacks.c_vector().v;
+		for (auto i = 0, l = packs.size(); i != l; ++i) {
 			if (packs.at(i).type() != mtpc_stickerPack) continue;
-			auto &pack(packs.at(i).c_stickerPack());
-			if (auto e = emojiGetNoColor(emojiFromText(qs(pack.vemoticon)))) {
-				auto &stickers(pack.vdocuments.c_vector().v);
+			auto &pack = packs.at(i).c_stickerPack();
+			if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) {
+				emoji = emoji->original();
+				auto &stickers = pack.vdocuments.c_vector().v;
+
 				StickerPack p;
 				p.reserve(stickers.size());
-				for (int32 j = 0, c = stickers.size(); j < c; ++j) {
-					DocumentData *doc = App::document(stickers.at(j).v);
+				for (auto j = 0, c = stickers.size(); j != c; ++j) {
+					auto doc = App::document(stickers[j].v);
 					if (!doc || !doc->sticker()) continue;
 
 					p.push_back(doc);
 				}
-				_emoji.insert(e, p);
+				_emoji.insert(emoji, p);
 			}
 		}
 		if (d.vset.type() == mtpc_stickerSet) {
diff --git a/Telegram/SourceFiles/codegen/emoji/data.cpp b/Telegram/SourceFiles/codegen/emoji/data.cpp
new file mode 100644
index 000000000..f3dd7bafa
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/data.cpp
@@ -0,0 +1,1856 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#include "codegen/emoji/data.h"
+
+namespace codegen {
+namespace emoji {
+namespace {
+
+using uint16 = quint16;
+using uint32 = quint32;
+using uint64 = quint64;
+
+using std::vector;
+using std::map;
+using std::find;
+using std::make_pair;
+using std::move;
+using std::begin;
+using std::end;
+
+using InputId = vector<uint32>;
+using InputCategory = vector<InputId>;
+
+// copied from emojibox.cpp
+struct Replace {
+	InputId code;
+	const char *replace;
+};
+
+Replace Replaces[] = {
+	{ { 0xD83DDE0AU }, ":-)" },
+	{ { 0xD83DDE0DU }, "8-)" },
+	{ { 0x2764U }, "<3" },
+	{ { 0xD83DDC8BU }, ":kiss:" },
+	{ { 0xD83DDE01U }, ":grin:" },
+	{ { 0xD83DDE02U }, ":joy:" },
+	{ { 0xD83DDE1AU }, ":-*" },
+	{ { 0xD83DDE06U }, "xD" },
+	{ { 0xD83DDC4DU }, ":like:" },
+	{ { 0xD83DDC4EU }, ":dislike:" },
+	{ { 0x261DU }, ":up:" },
+	{ { 0x270CU }, ":v:" },
+	{ { 0xD83DDC4CU }, ":ok:" },
+	{ { 0xD83DDE0EU }, "B-)" },
+	{ { 0xD83DDE03U }, ":-D" },
+	{ { 0xD83DDE09U }, ";-)" },
+	{ { 0xD83DDE1CU }, ";-P" },
+	{ { 0xD83DDE0BU }, ":-p" },
+	{ { 0xD83DDE14U }, "3(" },
+	{ { 0xD83DDE1EU }, ":-(" },
+	{ { 0xD83DDE0FU }, ":]" },
+	{ { 0xD83DDE22U }, ":'(" },
+	{ { 0xD83DDE2DU }, ":_(" },
+	{ { 0xD83DDE29U }, ":((" },
+	{ { 0xD83DDE28U }, ":o" },
+	{ { 0xD83DDE10U }, ":|" },
+	{ { 0xD83DDE0CU }, "3-)" },
+	{ { 0xD83DDE20U }, ">(" },
+	{ { 0xD83DDE21U }, ">((" },
+	{ { 0xD83DDE07U }, "O:)" },
+	{ { 0xD83DDE30U }, ";o" },
+	{ { 0xD83DDE33U }, "8|" },
+	{ { 0xD83DDE32U }, "8o" },
+	{ { 0xD83DDE37U }, ":X" },
+	{ { 0xD83DDE08U }, "}:)" },
+};
+
+using ColorId = uint32;
+ColorId Colors[] = {
+	0xD83CDFFBU,
+	0xD83CDFFCU,
+	0xD83CDFFDU,
+	0xD83CDFFEU,
+	0xD83CDFFFU,
+};
+
+constexpr auto ColorMask = 0xD83CDFFBU;
+InputCategory ColoredEmoji = {
+ { 0xD83DDC50U, 0xD83CDFFBU, },
+ { 0xD83DDE4CU, 0xD83CDFFBU, },
+ { 0xD83DDC4FU, 0xD83CDFFBU, },
+ { 0xD83DDE4FU, 0xD83CDFFBU, },
+ { 0xD83DDC4DU, 0xD83CDFFBU, },
+ { 0xD83DDC4EU, 0xD83CDFFBU, },
+ { 0xD83DDC4AU, 0xD83CDFFBU, },
+ { 0x270AU, 0xD83CDFFBU, },
+ { 0xD83EDD1BU, 0xD83CDFFBU, },
+ { 0xD83EDD1CU, 0xD83CDFFBU, },
+ { 0xD83EDD1EU, 0xD83CDFFBU, },
+ { 0x270CU, 0xD83CDFFBU, },
+ { 0xD83EDD18U, 0xD83CDFFBU, },
+ { 0xD83DDC4CU, 0xD83CDFFBU, },
+ { 0xD83DDC48U, 0xD83CDFFBU, },
+ { 0xD83DDC49U, 0xD83CDFFBU, },
+ { 0xD83DDC46U, 0xD83CDFFBU, },
+ { 0xD83DDC47U, 0xD83CDFFBU, },
+ { 0x261DU, 0xD83CDFFBU, },
+ { 0x270BU, 0xD83CDFFBU, },
+ { 0xD83EDD1AU, 0xD83CDFFBU, },
+ { 0xD83DDD90U, 0xD83CDFFBU, },
+ { 0xD83DDD96U, 0xD83CDFFBU, },
+ { 0xD83DDC4BU, 0xD83CDFFBU, },
+ { 0xD83EDD19U, 0xD83CDFFBU, },
+ { 0xD83DDCAAU, 0xD83CDFFBU, },
+ { 0xD83DDD95U, 0xD83CDFFBU, },
+ { 0x270DU, 0xD83CDFFBU, },
+ { 0xD83EDD33U, 0xD83CDFFBU, },
+ { 0xD83DDC85U, 0xD83CDFFBU, },
+ { 0xD83DDC42U, 0xD83CDFFBU, },
+ { 0xD83DDC43U, 0xD83CDFFBU, },
+ { 0xD83DDC76U, 0xD83CDFFBU, },
+ { 0xD83DDC66U, 0xD83CDFFBU, },
+ { 0xD83DDC67U, 0xD83CDFFBU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, },
+ { 0xD83DDC71U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC71U, 0xD83CDFFBU, },
+ { 0xD83DDC74U, 0xD83CDFFBU, },
+ { 0xD83DDC75U, 0xD83CDFFBU, },
+ { 0xD83DDC72U, 0xD83CDFFBU, },
+ { 0xD83DDC73U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC73U, 0xD83CDFFBU, },
+ { 0xD83DDC6EU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC6EU, 0xD83CDFFBU, },
+ { 0xD83DDC77U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC77U, 0xD83CDFFBU, },
+ { 0xD83DDC82U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC82U, 0xD83CDFFBU, },
+ { 0xD83DDD75U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDD75U, 0xD83CDFFBU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2695U, 0xFE0FU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2695U, 0xFE0FU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF3EU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF3EU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF73U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF73U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDF93U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDF93U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA4U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA4U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEBU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEBU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEDU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFEDU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBBU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBBU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBCU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDCBCU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDD27U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDD27U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDD2CU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDD2CU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA8U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83CDFA8U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDE92U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDE92U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2708U, 0xFE0FU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2708U, 0xFE0FU, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0xD83DDE80U, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0xD83DDE80U, },
+ { 0xD83DDC69U, 0xD83CDFFBU, 0x200DU, 0x2696U, 0xFE0FU, },
+ { 0xD83DDC68U, 0xD83CDFFBU, 0x200DU, 0x2696U, 0xFE0FU, },
+ { 0xD83EDD36U, 0xD83CDFFBU, },
+ { 0xD83CDF85U, 0xD83CDFFBU, },
+ { 0xD83DDC78U, 0xD83CDFFBU, },
+ { 0xD83EDD34U, 0xD83CDFFBU, },
+ { 0xD83DDC70U, 0xD83CDFFBU, },
+ { 0xD83EDD35U, 0xD83CDFFBU, },
+ { 0xD83DDC7CU, 0xD83CDFFBU, },
+ { 0xD83EDD30U, 0xD83CDFFBU, },
+ { 0xD83DDE47U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDE47U, 0xD83CDFFBU, },
+ { 0xD83DDC81U, 0xD83CDFFBU, },
+ { 0xD83DDC81U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE45U, 0xD83CDFFBU, },
+ { 0xD83DDE45U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE46U, 0xD83CDFFBU, },
+ { 0xD83DDE46U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4BU, 0xD83CDFFBU, },
+ { 0xD83DDE4BU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83EDD26U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD26U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83EDD37U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD37U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4EU, 0xD83CDFFBU, },
+ { 0xD83DDE4EU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4DU, 0xD83CDFFBU, },
+ { 0xD83DDE4DU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDC87U, 0xD83CDFFBU, },
+ { 0xD83DDC87U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDC86U, 0xD83CDFFBU, },
+ { 0xD83DDC86U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDD74U, 0xD83CDFFBU, },
+ { 0xD83DDC83U, 0xD83CDFFBU, },
+ { 0xD83DDD7AU, 0xD83CDFFBU, },
+ { 0xD83DDEB6U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB6U, 0xD83CDFFBU, },
+ { 0xD83CDFC3U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFC3U, 0xD83CDFFBU, },
+ { 0xD83CDFCBU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCBU, 0xD83CDFFBU, },
+ { 0xD83EDD38U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD38U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0x26F9U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0x26F9U, 0xD83CDFFBU, },
+ { 0xD83EDD3EU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD3EU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83CDFCCU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCCU, 0xD83CDFFBU, },
+ { 0xD83CDFC4U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFC4U, 0xD83CDFFBU, },
+ { 0xD83CDFCAU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCAU, 0xD83CDFFBU, },
+ { 0xD83EDD3DU, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD3DU, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDEA3U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEA3U, 0xD83CDFFBU, },
+ { 0xD83CDFC7U, 0xD83CDFFBU, },
+ { 0xD83DDEB4U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB4U, 0xD83CDFFBU, },
+ { 0xD83DDEB5U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB5U, 0xD83CDFFBU, },
+ { 0xD83EDD39U, 0xD83CDFFBU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD39U, 0xD83CDFFBU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDEC0U, 0xD83CDFFBU, },
+};
+
+InputCategory Category1 = {
+ { 0xD83DDE00U, },
+ { 0xD83DDE03U, },
+ { 0xD83DDE04U, },
+ { 0xD83DDE01U, },
+ { 0xD83DDE06U, },
+ { 0xD83DDE05U, },
+ { 0xD83DDE02U, },
+ { 0xD83EDD23U, },
+ { 0x263AU, 0xFE0FU, },
+ { 0xD83DDE0AU, },
+ { 0xD83DDE07U, },
+ { 0xD83DDE42U, },
+ { 0xD83DDE43U, },
+ { 0xD83DDE09U, },
+ { 0xD83DDE0CU, },
+ { 0xD83DDE0DU, },
+ { 0xD83DDE18U, },
+ { 0xD83DDE17U, },
+ { 0xD83DDE19U, },
+ { 0xD83DDE1AU, },
+ { 0xD83DDE0BU, },
+ { 0xD83DDE1CU, },
+ { 0xD83DDE1DU, },
+ { 0xD83DDE1BU, },
+ { 0xD83EDD11U, },
+ { 0xD83EDD17U, },
+ { 0xD83EDD13U, },
+ { 0xD83DDE0EU, },
+ { 0xD83EDD21U, },
+ { 0xD83EDD20U, },
+ { 0xD83DDE0FU, },
+ { 0xD83DDE12U, },
+ { 0xD83DDE1EU, },
+ { 0xD83DDE14U, },
+ { 0xD83DDE1FU, },
+ { 0xD83DDE15U, },
+ { 0xD83DDE41U, },
+ { 0x2639U, 0xFE0FU, },
+ { 0xD83DDE23U, },
+ { 0xD83DDE16U, },
+ { 0xD83DDE2BU, },
+ { 0xD83DDE29U, },
+ { 0xD83DDE24U, },
+ { 0xD83DDE20U, },
+ { 0xD83DDE21U, },
+ { 0xD83DDE36U, },
+ { 0xD83DDE10U, },
+ { 0xD83DDE11U, },
+ { 0xD83DDE2FU, },
+ { 0xD83DDE26U, },
+ { 0xD83DDE27U, },
+ { 0xD83DDE2EU, },
+ { 0xD83DDE32U, },
+ { 0xD83DDE35U, },
+ { 0xD83DDE33U, },
+ { 0xD83DDE31U, },
+ { 0xD83DDE28U, },
+ { 0xD83DDE30U, },
+ { 0xD83DDE22U, },
+ { 0xD83DDE25U, },
+ { 0xD83EDD24U, },
+ { 0xD83DDE2DU, },
+ { 0xD83DDE13U, },
+ { 0xD83DDE2AU, },
+ { 0xD83DDE34U, },
+ { 0xD83DDE44U, },
+ { 0xD83EDD14U, },
+ { 0xD83EDD25U, },
+ { 0xD83DDE2CU, },
+ { 0xD83EDD10U, },
+ { 0xD83EDD22U, },
+ { 0xD83EDD27U, },
+ { 0xD83DDE37U, },
+ { 0xD83EDD12U, },
+ { 0xD83EDD15U, },
+ { 0xD83DDE08U, },
+ { 0xD83DDC7FU, },
+ { 0xD83DDC79U, },
+ { 0xD83DDC7AU, },
+ { 0xD83DDCA9U, },
+ { 0xD83DDC7BU, },
+ { 0xD83DDC80U, },
+ { 0x2620U, 0xFE0FU, },
+ { 0xD83DDC7DU, },
+ { 0xD83DDC7EU, },
+ { 0xD83EDD16U, },
+ { 0xD83CDF83U, },
+ { 0xD83DDE3AU, },
+ { 0xD83DDE38U, },
+ { 0xD83DDE39U, },
+ { 0xD83DDE3BU, },
+ { 0xD83DDE3CU, },
+ { 0xD83DDE3DU, },
+ { 0xD83DDE40U, },
+ { 0xD83DDE3FU, },
+ { 0xD83DDE3EU, },
+ { 0xD83DDC50U, },
+ { 0xD83DDE4CU, },
+ { 0xD83DDC4FU, },
+ { 0xD83DDE4FU, },
+ { 0xD83EDD1DU, },
+ { 0xD83DDC4DU, },
+ { 0xD83DDC4EU, },
+ { 0xD83DDC4AU, },
+ { 0x270AU, 0xFE0FU, },
+ { 0xD83EDD1BU, },
+ { 0xD83EDD1CU, },
+ { 0xD83EDD1EU, },
+ { 0x270CU, 0xFE0FU, },
+ { 0xD83EDD18U, },
+ { 0xD83DDC4CU, },
+ { 0xD83DDC48U, },
+ { 0xD83DDC49U, },
+ { 0xD83DDC46U, },
+ { 0xD83DDC47U, },
+ { 0x261DU, 0xFE0FU, },
+ { 0x270BU, 0xFE0FU, },
+ { 0xD83EDD1AU, },
+ { 0xD83DDD90U, },
+ { 0xD83DDD96U, },
+ { 0xD83DDC4BU, },
+ { 0xD83EDD19U, },
+ { 0xD83DDCAAU, },
+ { 0xD83DDD95U, },
+ { 0x270DU, 0xFE0FU, },
+ { 0xD83EDD33U, },
+ { 0xD83DDC85U, },
+ { 0xD83DDC8DU, },
+ { 0xD83DDC84U, },
+ { 0xD83DDC8BU, },
+ { 0xD83DDC44U, },
+ { 0xD83DDC45U, },
+ { 0xD83DDC42U, },
+ { 0xD83DDC43U, },
+ { 0xD83DDC63U, },
+ { 0xD83DDC41U, },
+ { 0xD83DDC40U, },
+ { 0xD83DDDE3U, },
+ { 0xD83DDC64U, },
+ { 0xD83DDC65U, },
+ { 0xD83DDC76U, },
+ { 0xD83DDC66U, },
+ { 0xD83DDC67U, },
+ { 0xD83DDC68U, },
+ { 0xD83DDC69U, },
+ { 0xD83DDC71U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC71U, },
+ { 0xD83DDC74U, },
+ { 0xD83DDC75U, },
+ { 0xD83DDC72U, },
+ { 0xD83DDC73U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC73U, },
+ { 0xD83DDC6EU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC6EU, },
+ { 0xD83DDC77U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC77U, },
+ { 0xD83DDC82U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDC82U, },
+ { 0xD83DDD75U, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDD75U, 0xFE0FU, },
+ { 0xD83DDC69U, 0x200DU, 0x2695U, 0xFE0FU, },
+ { 0xD83DDC68U, 0x200DU, 0x2695U, 0xFE0FU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDF3EU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDF3EU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDF73U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDF73U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDF93U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDF93U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDFA4U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDFA4U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDFEBU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDFEBU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDFEDU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDFEDU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDCBBU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDCBBU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDCBCU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDCBCU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDD27U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDD27U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDD2CU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDD2CU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83CDFA8U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83CDFA8U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDE92U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDE92U, },
+ { 0xD83DDC69U, 0x200DU, 0x2708U, 0xFE0FU, },
+ { 0xD83DDC68U, 0x200DU, 0x2708U, 0xFE0FU, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDE80U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDE80U, },
+ { 0xD83DDC69U, 0x200DU, 0x2696U, 0xFE0FU, },
+ { 0xD83DDC68U, 0x200DU, 0x2696U, 0xFE0FU, },
+ { 0xD83EDD36U, },
+ { 0xD83CDF85U, },
+ { 0xD83DDC78U, },
+ { 0xD83EDD34U, },
+ { 0xD83DDC70U, },
+ { 0xD83EDD35U, },
+ { 0xD83DDC7CU, },
+ { 0xD83EDD30U, },
+ { 0xD83DDE47U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDE47U, },
+ { 0xD83DDC81U, },
+ { 0xD83DDC81U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE45U, },
+ { 0xD83DDE45U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE46U, },
+ { 0xD83DDE46U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4BU, },
+ { 0xD83DDE4BU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83EDD26U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD26U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83EDD37U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD37U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4EU, },
+ { 0xD83DDE4EU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDE4DU, },
+ { 0xD83DDE4DU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDC87U, },
+ { 0xD83DDC87U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDC86U, },
+ { 0xD83DDC86U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDD74U, },
+ { 0xD83DDC83U, },
+ { 0xD83DDD7AU, },
+ { 0xD83DDC6FU, },
+ { 0xD83DDC6FU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDEB6U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB6U, },
+ { 0xD83CDFC3U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFC3U, },
+ { 0xD83DDC6BU, },
+ { 0xD83DDC6DU, },
+ { 0xD83DDC6CU, },
+ { 0xD83DDC91U, },
+ { 0xD83DDC69U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC69U, },
+ { 0xD83DDC68U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC68U, },
+ { 0xD83DDC8FU, },
+ { 0xD83DDC69U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC8BU, 0x200DU, 0xD83DDC69U, },
+ { 0xD83DDC68U, 0x200DU, 0x2764U, 0xFE0FU, 0x200DU, 0xD83DDC8BU, 0x200DU, 0xD83DDC68U, },
+ { 0xD83DDC6AU, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC69U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC66U, 0x200DU, 0xD83DDC66U, },
+ { 0xD83DDC68U, 0x200DU, 0xD83DDC67U, 0x200DU, 0xD83DDC67U, },
+ { 0xD83DDC5AU, },
+ { 0xD83DDC55U, },
+ { 0xD83DDC56U, },
+ { 0xD83DDC54U, },
+ { 0xD83DDC57U, },
+ { 0xD83DDC59U, },
+ { 0xD83DDC58U, },
+ { 0xD83DDC60U, },
+ { 0xD83DDC61U, },
+ { 0xD83DDC62U, },
+ { 0xD83DDC5EU, },
+ { 0xD83DDC5FU, },
+ { 0xD83DDC52U, },
+ { 0xD83CDFA9U, },
+ { 0xD83CDF93U, },
+ { 0xD83DDC51U, },
+ { 0x26D1U, },
+ { 0xD83CDF92U, },
+ { 0xD83DDC5DU, },
+ { 0xD83DDC5BU, },
+ { 0xD83DDC5CU, },
+ { 0xD83DDCBCU, },
+ { 0xD83DDC53U, },
+ { 0xD83DDD76U, },
+ { 0xD83CDF02U, },
+ { 0x2602U, 0xFE0FU, },
+};
+
+InputCategory Category2 = {
+ { 0xD83DDC36U, },
+ { 0xD83DDC31U, },
+ { 0xD83DDC2DU, },
+ { 0xD83DDC39U, },
+ { 0xD83DDC30U, },
+ { 0xD83EDD8AU, },
+ { 0xD83DDC3BU, },
+ { 0xD83DDC3CU, },
+ { 0xD83DDC28U, },
+ { 0xD83DDC2FU, },
+ { 0xD83EDD81U, },
+ { 0xD83DDC2EU, },
+ { 0xD83DDC37U, },
+ { 0xD83DDC3DU, },
+ { 0xD83DDC38U, },
+ { 0xD83DDC35U, },
+ { 0xD83DDE48U, },
+ { 0xD83DDE49U, },
+ { 0xD83DDE4AU, },
+ { 0xD83DDC12U, },
+ { 0xD83DDC14U, },
+ { 0xD83DDC27U, },
+ { 0xD83DDC26U, },
+ { 0xD83DDC24U, },
+ { 0xD83DDC23U, },
+ { 0xD83DDC25U, },
+ { 0xD83EDD86U, },
+ { 0xD83EDD85U, },
+ { 0xD83EDD89U, },
+ { 0xD83EDD87U, },
+ { 0xD83DDC3AU, },
+ { 0xD83DDC17U, },
+ { 0xD83DDC34U, },
+ { 0xD83EDD84U, },
+ { 0xD83DDC1DU, },
+ { 0xD83DDC1BU, },
+ { 0xD83EDD8BU, },
+ { 0xD83DDC0CU, },
+ { 0xD83DDC1AU, },
+ { 0xD83DDC1EU, },
+ { 0xD83DDC1CU, },
+ { 0xD83DDD77U, },
+ { 0xD83DDD78U, },
+ { 0xD83DDC22U, },
+ { 0xD83DDC0DU, },
+ { 0xD83EDD8EU, },
+ { 0xD83EDD82U, },
+ { 0xD83EDD80U, },
+ { 0xD83EDD91U, },
+ { 0xD83DDC19U, },
+ { 0xD83EDD90U, },
+ { 0xD83DDC20U, },
+ { 0xD83DDC1FU, },
+ { 0xD83DDC21U, },
+ { 0xD83DDC2CU, },
+ { 0xD83EDD88U, },
+ { 0xD83DDC33U, },
+ { 0xD83DDC0BU, },
+ { 0xD83DDC0AU, },
+ { 0xD83DDC06U, },
+ { 0xD83DDC05U, },
+ { 0xD83DDC03U, },
+ { 0xD83DDC02U, },
+ { 0xD83DDC04U, },
+ { 0xD83EDD8CU, },
+ { 0xD83DDC2AU, },
+ { 0xD83DDC2BU, },
+ { 0xD83DDC18U, },
+ { 0xD83EDD8FU, },
+ { 0xD83EDD8DU, },
+ { 0xD83DDC0EU, },
+ { 0xD83DDC16U, },
+ { 0xD83DDC10U, },
+ { 0xD83DDC0FU, },
+ { 0xD83DDC11U, },
+ { 0xD83DDC15U, },
+ { 0xD83DDC29U, },
+ { 0xD83DDC08U, },
+ { 0xD83DDC13U, },
+ { 0xD83EDD83U, },
+ { 0xD83DDD4AU, },
+ { 0xD83DDC07U, },
+ { 0xD83DDC01U, },
+ { 0xD83DDC00U, },
+ { 0xD83DDC3FU, },
+ { 0xD83DDC3EU, },
+ { 0xD83DDC09U, },
+ { 0xD83DDC32U, },
+ { 0xD83CDF35U, },
+ { 0xD83CDF84U, },
+ { 0xD83CDF32U, },
+ { 0xD83CDF33U, },
+ { 0xD83CDF34U, },
+ { 0xD83CDF31U, },
+ { 0xD83CDF3FU, },
+ { 0x2618U, 0xFE0FU, },
+ { 0xD83CDF40U, },
+ { 0xD83CDF8DU, },
+ { 0xD83CDF8BU, },
+ { 0xD83CDF43U, },
+ { 0xD83CDF42U, },
+ { 0xD83CDF41U, },
+ { 0xD83CDF44U, },
+ { 0xD83CDF3EU, },
+ { 0xD83DDC90U, },
+ { 0xD83CDF37U, },
+ { 0xD83CDF39U, },
+ { 0xD83EDD40U, },
+ { 0xD83CDF3BU, },
+ { 0xD83CDF3CU, },
+ { 0xD83CDF38U, },
+ { 0xD83CDF3AU, },
+ { 0xD83CDF0EU, },
+ { 0xD83CDF0DU, },
+ { 0xD83CDF0FU, },
+ { 0xD83CDF15U, },
+ { 0xD83CDF16U, },
+ { 0xD83CDF17U, },
+ { 0xD83CDF18U, },
+ { 0xD83CDF11U, },
+ { 0xD83CDF12U, },
+ { 0xD83CDF13U, },
+ { 0xD83CDF14U, },
+ { 0xD83CDF1AU, },
+ { 0xD83CDF1DU, },
+ { 0xD83CDF1EU, },
+ { 0xD83CDF1BU, },
+ { 0xD83CDF1CU, },
+ { 0xD83CDF19U, },
+ { 0xD83DDCABU, },
+ { 0x2B50U, 0xFE0FU, },
+ { 0xD83CDF1FU, },
+ { 0x2728U, },
+ { 0x26A1U, 0xFE0FU, },
+ { 0xD83DDD25U, },
+ { 0xD83DDCA5U, },
+ { 0x2604U, 0xFE0FU, },
+ { 0x2600U, 0xFE0FU, },
+ { 0xD83CDF24U, },
+ { 0x26C5U, 0xFE0FU, },
+ { 0xD83CDF25U, },
+ { 0xD83CDF26U, },
+ { 0xD83CDF08U, },
+ { 0x2601U, 0xFE0FU, },
+ { 0xD83CDF27U, },
+ { 0x26C8U, },
+ { 0xD83CDF29U, },
+ { 0xD83CDF28U, },
+ { 0x2603U, 0xFE0FU, },
+ { 0x26C4U, 0xFE0FU, },
+ { 0x2744U, 0xFE0FU, },
+ { 0xD83CDF2CU, },
+ { 0xD83DDCA8U, },
+ { 0xD83CDF2AU, },
+ { 0xD83CDF2BU, },
+ { 0xD83CDF0AU, },
+ { 0xD83DDCA7U, },
+ { 0xD83DDCA6U, },
+ { 0x2614U, 0xFE0FU, },
+};
+
+InputCategory Category3 = {
+ { 0xD83CDF4FU, },
+ { 0xD83CDF4EU, },
+ { 0xD83CDF50U, },
+ { 0xD83CDF4AU, },
+ { 0xD83CDF4BU, },
+ { 0xD83CDF4CU, },
+ { 0xD83CDF49U, },
+ { 0xD83CDF47U, },
+ { 0xD83CDF53U, },
+ { 0xD83CDF48U, },
+ { 0xD83CDF52U, },
+ { 0xD83CDF51U, },
+ { 0xD83CDF4DU, },
+ { 0xD83EDD5DU, },
+ { 0xD83EDD51U, },
+ { 0xD83CDF45U, },
+ { 0xD83CDF46U, },
+ { 0xD83EDD52U, },
+ { 0xD83EDD55U, },
+ { 0xD83CDF3DU, },
+ { 0xD83CDF36U, },
+ { 0xD83EDD54U, },
+ { 0xD83CDF60U, },
+ { 0xD83CDF30U, },
+ { 0xD83EDD5CU, },
+ { 0xD83CDF6FU, },
+ { 0xD83EDD50U, },
+ { 0xD83CDF5EU, },
+ { 0xD83EDD56U, },
+ { 0xD83EDDC0U, },
+ { 0xD83EDD5AU, },
+ { 0xD83CDF73U, },
+ { 0xD83EDD53U, },
+ { 0xD83EDD5EU, },
+ { 0xD83CDF64U, },
+ { 0xD83CDF57U, },
+ { 0xD83CDF56U, },
+ { 0xD83CDF55U, },
+ { 0xD83CDF2DU, },
+ { 0xD83CDF54U, },
+ { 0xD83CDF5FU, },
+ { 0xD83EDD59U, },
+ { 0xD83CDF2EU, },
+ { 0xD83CDF2FU, },
+ { 0xD83EDD57U, },
+ { 0xD83EDD58U, },
+ { 0xD83CDF5DU, },
+ { 0xD83CDF5CU, },
+ { 0xD83CDF72U, },
+ { 0xD83CDF65U, },
+ { 0xD83CDF63U, },
+ { 0xD83CDF71U, },
+ { 0xD83CDF5BU, },
+ { 0xD83CDF59U, },
+ { 0xD83CDF5AU, },
+ { 0xD83CDF58U, },
+ { 0xD83CDF62U, },
+ { 0xD83CDF61U, },
+ { 0xD83CDF67U, },
+ { 0xD83CDF68U, },
+ { 0xD83CDF66U, },
+ { 0xD83CDF70U, },
+ { 0xD83CDF82U, },
+ { 0xD83CDF6EU, },
+ { 0xD83CDF6DU, },
+ { 0xD83CDF6CU, },
+ { 0xD83CDF6BU, },
+ { 0xD83CDF7FU, },
+ { 0xD83CDF69U, },
+ { 0xD83CDF6AU, },
+ { 0xD83EDD5BU, },
+ { 0xD83CDF7CU, },
+ { 0x2615U, 0xFE0FU, },
+ { 0xD83CDF75U, },
+ { 0xD83CDF76U, },
+ { 0xD83CDF7AU, },
+ { 0xD83CDF7BU, },
+ { 0xD83EDD42U, },
+ { 0xD83CDF77U, },
+ { 0xD83EDD43U, },
+ { 0xD83CDF78U, },
+ { 0xD83CDF79U, },
+ { 0xD83CDF7EU, },
+ { 0xD83EDD44U, },
+ { 0xD83CDF74U, },
+ { 0xD83CDF7DU, },
+};
+
+InputCategory Category4 = {
+ { 0x26BDU, 0xFE0FU, },
+ { 0xD83CDFC0U, },
+ { 0xD83CDFC8U, },
+ { 0x26BEU, 0xFE0FU, },
+ { 0xD83CDFBEU, },
+ { 0xD83CDFD0U, },
+ { 0xD83CDFC9U, },
+ { 0xD83CDFB1U, },
+ { 0xD83CDFD3U, },
+ { 0xD83CDFF8U, },
+ { 0xD83EDD45U, },
+ { 0xD83CDFD2U, },
+ { 0xD83CDFD1U, },
+ { 0xD83CDFCFU, },
+ { 0x26F3U, 0xFE0FU, },
+ { 0xD83CDFF9U, },
+ { 0xD83CDFA3U, },
+ { 0xD83EDD4AU, },
+ { 0xD83EDD4BU, },
+ { 0x26F8U, },
+ { 0xD83CDFBFU, },
+ { 0x26F7U, },
+ { 0xD83CDFC2U, },
+ { 0xD83CDFCBU, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCBU, 0xFE0FU, },
+ { 0xD83EDD3AU, },
+ { 0xD83EDD3CU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD3CU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83EDD38U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD38U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0x26F9U, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0x26F9U, 0xFE0FU, },
+ { 0xD83EDD3EU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD3EU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83CDFCCU, 0xFE0FU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCCU, 0xFE0FU, },
+ { 0xD83CDFC4U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFC4U, },
+ { 0xD83CDFCAU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83CDFCAU, },
+ { 0xD83EDD3DU, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD3DU, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83DDEA3U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEA3U, },
+ { 0xD83CDFC7U, },
+ { 0xD83DDEB4U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB4U, },
+ { 0xD83DDEB5U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83DDEB5U, },
+ { 0xD83CDFBDU, },
+ { 0xD83CDFC5U, },
+ { 0xD83CDF96U, },
+ { 0xD83EDD47U, },
+ { 0xD83EDD48U, },
+ { 0xD83EDD49U, },
+ { 0xD83CDFC6U, },
+ { 0xD83CDFF5U, },
+ { 0xD83CDF97U, },
+ { 0xD83CDFABU, },
+ { 0xD83CDF9FU, },
+ { 0xD83CDFAAU, },
+ { 0xD83EDD39U, 0x200DU, 0x2640U, 0xFE0FU, },
+ { 0xD83EDD39U, 0x200DU, 0x2642U, 0xFE0FU, },
+ { 0xD83CDFADU, },
+ { 0xD83CDFA8U, },
+ { 0xD83CDFACU, },
+ { 0xD83CDFA4U, },
+ { 0xD83CDFA7U, },
+ { 0xD83CDFBCU, },
+ { 0xD83CDFB9U, },
+ { 0xD83EDD41U, },
+ { 0xD83CDFB7U, },
+ { 0xD83CDFBAU, },
+ { 0xD83CDFB8U, },
+ { 0xD83CDFBBU, },
+ { 0xD83CDFB2U, },
+ { 0xD83CDFAFU, },
+ { 0xD83CDFB3U, },
+ { 0xD83CDFAEU, },
+ { 0xD83CDFB0U, },
+};
+
+InputCategory Category5 = {
+ { 0xD83DDE97U, },
+ { 0xD83DDE95U, },
+ { 0xD83DDE99U, },
+ { 0xD83DDE8CU, },
+ { 0xD83DDE8EU, },
+ { 0xD83CDFCEU, },
+ { 0xD83DDE93U, },
+ { 0xD83DDE91U, },
+ { 0xD83DDE92U, },
+ { 0xD83DDE90U, },
+ { 0xD83DDE9AU, },
+ { 0xD83DDE9BU, },
+ { 0xD83DDE9CU, },
+ { 0xD83DDEF4U, },
+ { 0xD83DDEB2U, },
+ { 0xD83DDEF5U, },
+ { 0xD83CDFCDU, },
+ { 0xD83DDEA8U, },
+ { 0xD83DDE94U, },
+ { 0xD83DDE8DU, },
+ { 0xD83DDE98U, },
+ { 0xD83DDE96U, },
+ { 0xD83DDEA1U, },
+ { 0xD83DDEA0U, },
+ { 0xD83DDE9FU, },
+ { 0xD83DDE83U, },
+ { 0xD83DDE8BU, },
+ { 0xD83DDE9EU, },
+ { 0xD83DDE9DU, },
+ { 0xD83DDE84U, },
+ { 0xD83DDE85U, },
+ { 0xD83DDE88U, },
+ { 0xD83DDE82U, },
+ { 0xD83DDE86U, },
+ { 0xD83DDE87U, },
+ { 0xD83DDE8AU, },
+ { 0xD83DDE89U, },
+ { 0xD83DDE81U, },
+ { 0xD83DDEE9U, },
+ { 0x2708U, 0xFE0FU, },
+ { 0xD83DDEEBU, },
+ { 0xD83DDEECU, },
+ { 0xD83DDE80U, },
+ { 0xD83DDEF0U, },
+ { 0xD83DDCBAU, },
+ { 0xD83DDEF6U, },
+ { 0x26F5U, 0xFE0FU, },
+ { 0xD83DDEE5U, },
+ { 0xD83DDEA4U, },
+ { 0xD83DDEF3U, },
+ { 0x26F4U, },
+ { 0xD83DDEA2U, },
+ { 0x2693U, 0xFE0FU, },
+ { 0xD83DDEA7U, },
+ { 0x26FDU, 0xFE0FU, },
+ { 0xD83DDE8FU, },
+ { 0xD83DDEA6U, },
+ { 0xD83DDEA5U, },
+ { 0xD83DDDFAU, },
+ { 0xD83DDDFFU, },
+ { 0xD83DDDFDU, },
+ { 0x26F2U, 0xFE0FU, },
+ { 0xD83DDDFCU, },
+ { 0xD83CDFF0U, },
+ { 0xD83CDFEFU, },
+ { 0xD83CDFDFU, },
+ { 0xD83CDFA1U, },
+ { 0xD83CDFA2U, },
+ { 0xD83CDFA0U, },
+ { 0x26F1U, },
+ { 0xD83CDFD6U, },
+ { 0xD83CDFDDU, },
+ { 0x26F0U, },
+ { 0xD83CDFD4U, },
+ { 0xD83DDDFBU, },
+ { 0xD83CDF0BU, },
+ { 0xD83CDFDCU, },
+ { 0xD83CDFD5U, },
+ { 0x26FAU, 0xFE0FU, },
+ { 0xD83DDEE4U, },
+ { 0xD83DDEE3U, },
+ { 0xD83CDFD7U, },
+ { 0xD83CDFEDU, },
+ { 0xD83CDFE0U, },
+ { 0xD83CDFE1U, },
+ { 0xD83CDFD8U, },
+ { 0xD83CDFDAU, },
+ { 0xD83CDFE2U, },
+ { 0xD83CDFECU, },
+ { 0xD83CDFE3U, },
+ { 0xD83CDFE4U, },
+ { 0xD83CDFE5U, },
+ { 0xD83CDFE6U, },
+ { 0xD83CDFE8U, },
+ { 0xD83CDFEAU, },
+ { 0xD83CDFEBU, },
+ { 0xD83CDFE9U, },
+ { 0xD83DDC92U, },
+ { 0xD83CDFDBU, },
+ { 0x26EAU, 0xFE0FU, },
+ { 0xD83DDD4CU, },
+ { 0xD83DDD4DU, },
+ { 0xD83DDD4BU, },
+ { 0x26E9U, },
+ { 0xD83DDDFEU, },
+ { 0xD83CDF91U, },
+ { 0xD83CDFDEU, },
+ { 0xD83CDF05U, },
+ { 0xD83CDF04U, },
+ { 0xD83CDF20U, },
+ { 0xD83CDF87U, },
+ { 0xD83CDF86U, },
+ { 0xD83CDF07U, },
+ { 0xD83CDF06U, },
+ { 0xD83CDFD9U, },
+ { 0xD83CDF03U, },
+ { 0xD83CDF0CU, },
+ { 0xD83CDF09U, },
+ { 0xD83CDF01U, },
+};
+
+InputCategory Category6 = {
+ { 0x231AU, 0xFE0FU, },
+ { 0xD83DDCF1U, },
+ { 0xD83DDCF2U, },
+ { 0xD83DDCBBU, },
+ { 0x2328U, 0xFE0FU, },
+ { 0xD83DDDA5U, },
+ { 0xD83DDDA8U, },
+ { 0xD83DDDB1U, },
+ { 0xD83DDDB2U, },
+ { 0xD83DDD79U, },
+ { 0xD83DDDDCU, },
+ { 0xD83DDCBDU, },
+ { 0xD83DDCBEU, },
+ { 0xD83DDCBFU, },
+ { 0xD83DDCC0U, },
+ { 0xD83DDCFCU, },
+ { 0xD83DDCF7U, },
+ { 0xD83DDCF8U, },
+ { 0xD83DDCF9U, },
+ { 0xD83CDFA5U, },
+ { 0xD83DDCFDU, },
+ { 0xD83CDF9EU, },
+ { 0xD83DDCDEU, },
+ { 0x260EU, 0xFE0FU, },
+ { 0xD83DDCDFU, },
+ { 0xD83DDCE0U, },
+ { 0xD83DDCFAU, },
+ { 0xD83DDCFBU, },
+ { 0xD83CDF99U, },
+ { 0xD83CDF9AU, },
+ { 0xD83CDF9BU, },
+ { 0x23F1U, },
+ { 0x23F2U, },
+ { 0x23F0U, },
+ { 0xD83DDD70U, },
+ { 0x231BU, 0xFE0FU, },
+ { 0x23F3U, },
+ { 0xD83DDCE1U, },
+ { 0xD83DDD0BU, },
+ { 0xD83DDD0CU, },
+ { 0xD83DDCA1U, },
+ { 0xD83DDD26U, },
+ { 0xD83DDD6FU, },
+ { 0xD83DDDD1U, },
+ { 0xD83DDEE2U, },
+ { 0xD83DDCB8U, },
+ { 0xD83DDCB5U, },
+ { 0xD83DDCB4U, },
+ { 0xD83DDCB6U, },
+ { 0xD83DDCB7U, },
+ { 0xD83DDCB0U, },
+ { 0xD83DDCB3U, },
+ { 0xD83DDC8EU, },
+ { 0x2696U, 0xFE0FU, },
+ { 0xD83DDD27U, },
+ { 0xD83DDD28U, },
+ { 0x2692U, },
+ { 0xD83DDEE0U, },
+ { 0x26CFU, },
+ { 0xD83DDD29U, },
+ { 0x2699U, 0xFE0FU, },
+ { 0x26D3U, },
+ { 0xD83DDD2BU, },
+ { 0xD83DDCA3U, },
+ { 0xD83DDD2AU, },
+ { 0xD83DDDE1U, },
+ { 0x2694U, 0xFE0FU, },
+ { 0xD83DDEE1U, },
+ { 0xD83DDEACU, },
+ { 0x26B0U, 0xFE0FU, },
+ { 0x26B1U, 0xFE0FU, },
+ { 0xD83CDFFAU, },
+ { 0xD83DDD2EU, },
+ { 0xD83DDCFFU, },
+ { 0xD83DDC88U, },
+ { 0x2697U, 0xFE0FU, },
+ { 0xD83DDD2DU, },
+ { 0xD83DDD2CU, },
+ { 0xD83DDD73U, },
+ { 0xD83DDC8AU, },
+ { 0xD83DDC89U, },
+ { 0xD83CDF21U, },
+ { 0xD83DDEBDU, },
+ { 0xD83DDEB0U, },
+ { 0xD83DDEBFU, },
+ { 0xD83DDEC1U, },
+ { 0xD83DDEC0U, },
+ { 0xD83DDECEU, },
+ { 0xD83DDD11U, },
+ { 0xD83DDDDDU, },
+ { 0xD83DDEAAU, },
+ { 0xD83DDECBU, },
+ { 0xD83DDECFU, },
+ { 0xD83DDECCU, },
+ { 0xD83DDDBCU, },
+ { 0xD83DDECDU, },
+ { 0xD83DDED2U, },
+ { 0xD83CDF81U, },
+ { 0xD83CDF88U, },
+ { 0xD83CDF8FU, },
+ { 0xD83CDF80U, },
+ { 0xD83CDF8AU, },
+ { 0xD83CDF89U, },
+ { 0xD83CDF8EU, },
+ { 0xD83CDFEEU, },
+ { 0xD83CDF90U, },
+ { 0x2709U, 0xFE0FU, },
+ { 0xD83DDCE9U, },
+ { 0xD83DDCE8U, },
+ { 0xD83DDCE7U, },
+ { 0xD83DDC8CU, },
+ { 0xD83DDCE5U, },
+ { 0xD83DDCE4U, },
+ { 0xD83DDCE6U, },
+ { 0xD83CDFF7U, },
+ { 0xD83DDCEAU, },
+ { 0xD83DDCEBU, },
+ { 0xD83DDCECU, },
+ { 0xD83DDCEDU, },
+ { 0xD83DDCEEU, },
+ { 0xD83DDCEFU, },
+ { 0xD83DDCDCU, },
+ { 0xD83DDCC3U, },
+ { 0xD83DDCC4U, },
+ { 0xD83DDCD1U, },
+ { 0xD83DDCCAU, },
+ { 0xD83DDCC8U, },
+ { 0xD83DDCC9U, },
+ { 0xD83DDDD2U, },
+ { 0xD83DDDD3U, },
+ { 0xD83DDCC6U, },
+ { 0xD83DDCC5U, },
+ { 0xD83DDCC7U, },
+ { 0xD83DDDC3U, },
+ { 0xD83DDDF3U, },
+ { 0xD83DDDC4U, },
+ { 0xD83DDCCBU, },
+ { 0xD83DDCC1U, },
+ { 0xD83DDCC2U, },
+ { 0xD83DDDC2U, },
+ { 0xD83DDDDEU, },
+ { 0xD83DDCF0U, },
+ { 0xD83DDCD3U, },
+ { 0xD83DDCD4U, },
+ { 0xD83DDCD2U, },
+ { 0xD83DDCD5U, },
+ { 0xD83DDCD7U, },
+ { 0xD83DDCD8U, },
+ { 0xD83DDCD9U, },
+ { 0xD83DDCDAU, },
+ { 0xD83DDCD6U, },
+ { 0xD83DDD16U, },
+ { 0xD83DDD17U, },
+ { 0xD83DDCCEU, },
+ { 0xD83DDD87U, },
+ { 0xD83DDCD0U, },
+ { 0xD83DDCCFU, },
+ { 0xD83DDCCCU, },
+ { 0xD83DDCCDU, },
+ { 0x2702U, 0xFE0FU, },
+ { 0xD83DDD8AU, },
+ { 0xD83DDD8BU, },
+ { 0x2712U, 0xFE0FU, },
+ { 0xD83DDD8CU, },
+ { 0xD83DDD8DU, },
+ { 0xD83DDCDDU, },
+ { 0x270FU, 0xFE0FU, },
+ { 0xD83DDD0DU, },
+ { 0xD83DDD0EU, },
+ { 0xD83DDD0FU, },
+ { 0xD83DDD10U, },
+ { 0xD83DDD12U, },
+ { 0xD83DDD13U, },
+};
+
+InputCategory Category7 = {
+ { 0x2764U, 0xFE0FU, },
+ { 0xD83DDC9BU, },
+ { 0xD83DDC9AU, },
+ { 0xD83DDC99U, },
+ { 0xD83DDC9CU, },
+ { 0xD83DDDA4U, },
+ { 0xD83DDC94U, },
+ { 0x2763U, 0xFE0FU, },
+ { 0xD83DDC95U, },
+ { 0xD83DDC9EU, },
+ { 0xD83DDC93U, },
+ { 0xD83DDC97U, },
+ { 0xD83DDC96U, },
+ { 0xD83DDC98U, },
+ { 0xD83DDC9DU, },
+ { 0xD83DDC9FU, },
+ { 0x262EU, 0xFE0FU, },
+ { 0x271DU, 0xFE0FU, },
+ { 0x262AU, 0xFE0FU, },
+ { 0xD83DDD49U, },
+ { 0x2638U, 0xFE0FU, },
+ { 0x2721U, 0xFE0FU, },
+ { 0xD83DDD2FU, },
+ { 0xD83DDD4EU, },
+ { 0x262FU, 0xFE0FU, },
+ { 0x2626U, 0xFE0FU, },
+ { 0xD83DDED0U, },
+ { 0x26CEU, },
+ { 0x2648U, 0xFE0FU, },
+ { 0x2649U, 0xFE0FU, },
+ { 0x264AU, 0xFE0FU, },
+ { 0x264BU, 0xFE0FU, },
+ { 0x264CU, 0xFE0FU, },
+ { 0x264DU, 0xFE0FU, },
+ { 0x264EU, 0xFE0FU, },
+ { 0x264FU, 0xFE0FU, },
+ { 0x2650U, 0xFE0FU, },
+ { 0x2651U, 0xFE0FU, },
+ { 0x2652U, 0xFE0FU, },
+ { 0x2653U, 0xFE0FU, },
+ { 0xD83CDD94U, },
+ { 0x269BU, 0xFE0FU, },
+ { 0xD83CDE51U, },
+ { 0x2622U, 0xFE0FU, },
+ { 0x2623U, 0xFE0FU, },
+ { 0xD83DDCF4U, },
+ { 0xD83DDCF3U, },
+ { 0xD83CDE36U, },
+ { 0xD83CDE1AU, 0xFE0FU, },
+ { 0xD83CDE38U, },
+ { 0xD83CDE3AU, },
+ { 0xD83CDE37U, },
+ { 0x2734U, 0xFE0FU, },
+ { 0xD83CDD9AU, },
+ { 0xD83DDCAEU, },
+ { 0xD83CDE50U, },
+ { 0x3299U, 0xFE0FU, },
+ { 0x3297U, 0xFE0FU, },
+ { 0xD83CDE34U, },
+ { 0xD83CDE35U, },
+ { 0xD83CDE39U, },
+ { 0xD83CDE32U, },
+ { 0xD83CDD70U, 0xFE0FU, },
+ { 0xD83CDD71U, 0xFE0FU, },
+ { 0xD83CDD8EU, },
+ { 0xD83CDD91U, },
+ { 0xD83CDD7EU, 0xFE0FU, },
+ { 0xD83CDD98U, },
+ { 0x274CU, },
+ { 0x2B55U, 0xFE0FU, },
+ { 0xD83DDED1U, },
+ { 0x26D4U, 0xFE0FU, },
+ { 0xD83DDCDBU, },
+ { 0xD83DDEABU, },
+ { 0xD83DDCAFU, },
+ { 0xD83DDCA2U, },
+ { 0x2668U, 0xFE0FU, },
+ { 0xD83DDEB7U, },
+ { 0xD83DDEAFU, },
+ { 0xD83DDEB3U, },
+ { 0xD83DDEB1U, },
+ { 0xD83DDD1EU, },
+ { 0xD83DDCF5U, },
+ { 0xD83DDEADU, },
+ { 0x2757U, 0xFE0FU, },
+ { 0x2755U, },
+ { 0x2753U, },
+ { 0x2754U, },
+ { 0x203CU, 0xFE0FU, },
+ { 0x2049U, 0xFE0FU, },
+ { 0xD83DDD05U, },
+ { 0xD83DDD06U, },
+ { 0x303DU, 0xFE0FU, },
+ { 0x26A0U, 0xFE0FU, },
+ { 0xD83DDEB8U, },
+ { 0xD83DDD31U, },
+ { 0x269CU, 0xFE0FU, },
+ { 0xD83DDD30U, },
+ { 0x267BU, 0xFE0FU, },
+ { 0x2705U, },
+ { 0xD83CDE2FU, 0xFE0FU, },
+ { 0xD83DDCB9U, },
+ { 0x2747U, 0xFE0FU, },
+ { 0x2733U, 0xFE0FU, },
+ { 0x274EU, },
+ { 0xD83CDF10U, },
+ { 0xD83DDCA0U, },
+ { 0x24C2U, 0xFE0FU, },
+ { 0xD83CDF00U, },
+ { 0xD83DDCA4U, },
+ { 0xD83CDFE7U, },
+ { 0xD83DDEBEU, },
+ { 0x267FU, 0xFE0FU, },
+ { 0xD83CDD7FU, 0xFE0FU, },
+ { 0xD83CDE33U, },
+ { 0xD83CDE02U, },
+ { 0xD83DDEC2U, },
+ { 0xD83DDEC3U, },
+ { 0xD83DDEC4U, },
+ { 0xD83DDEC5U, },
+ { 0xD83DDEB9U, },
+ { 0xD83DDEBAU, },
+ { 0xD83DDEBCU, },
+ { 0xD83DDEBBU, },
+ { 0xD83DDEAEU, },
+ { 0xD83CDFA6U, },
+ { 0xD83DDCF6U, },
+ { 0xD83CDE01U, },
+ { 0xD83DDD23U, },
+ { 0x2139U, 0xFE0FU, },
+ { 0xD83DDD24U, },
+ { 0xD83DDD21U, },
+ { 0xD83DDD20U, },
+ { 0xD83CDD96U, },
+ { 0xD83CDD97U, },
+ { 0xD83CDD99U, },
+ { 0xD83CDD92U, },
+ { 0xD83CDD95U, },
+ { 0xD83CDD93U, },
+ { 0x30U, 0xFE0FU, 0x20E3U, },
+ { 0x31U, 0xFE0FU, 0x20E3U, },
+ { 0x32U, 0xFE0FU, 0x20E3U, },
+ { 0x33U, 0xFE0FU, 0x20E3U, },
+ { 0x34U, 0xFE0FU, 0x20E3U, },
+ { 0x35U, 0xFE0FU, 0x20E3U, },
+ { 0x36U, 0xFE0FU, 0x20E3U, },
+ { 0x37U, 0xFE0FU, 0x20E3U, },
+ { 0x38U, 0xFE0FU, 0x20E3U, },
+ { 0x39U, 0xFE0FU, 0x20E3U, },
+ { 0xD83DDD1FU, },
+ { 0xD83DDD22U, },
+ { 0x23U, 0xFE0FU, 0x20E3U, },
+ { 0x2AU, 0xFE0FU, 0x20E3U, },
+ { 0x25B6U, 0xFE0FU, },
+ { 0x23F8U, },
+ { 0x23EFU, },
+ { 0x23F9U, },
+ { 0x23FAU, },
+ { 0x23EDU, },
+ { 0x23EEU, },
+ { 0x23E9U, },
+ { 0x23EAU, },
+ { 0x23EBU, },
+ { 0x23ECU, },
+ { 0x25C0U, 0xFE0FU, },
+ { 0xD83DDD3CU, },
+ { 0xD83DDD3DU, },
+ { 0x27A1U, 0xFE0FU, },
+ { 0x2B05U, 0xFE0FU, },
+ { 0x2B06U, 0xFE0FU, },
+ { 0x2B07U, 0xFE0FU, },
+ { 0x2197U, 0xFE0FU, },
+ { 0x2198U, 0xFE0FU, },
+ { 0x2199U, 0xFE0FU, },
+ { 0x2196U, 0xFE0FU, },
+ { 0x2195U, 0xFE0FU, },
+ { 0x2194U, 0xFE0FU, },
+ { 0x21AAU, 0xFE0FU, },
+ { 0x21A9U, 0xFE0FU, },
+ { 0x2934U, 0xFE0FU, },
+ { 0x2935U, 0xFE0FU, },
+ { 0xD83DDD00U, },
+ { 0xD83DDD01U, },
+ { 0xD83DDD02U, },
+ { 0xD83DDD04U, },
+ { 0xD83DDD03U, },
+ { 0xD83CDFB5U, },
+ { 0xD83CDFB6U, },
+ { 0x2795U, },
+ { 0x2796U, },
+ { 0x2797U, },
+ { 0x2716U, 0xFE0FU, },
+ { 0xD83DDCB2U, },
+ { 0xD83DDCB1U, },
+ { 0x2122U, },
+ { 0xA9U, },
+ { 0xAEU, },
+ { 0x3030U, },
+ { 0x27B0U, },
+ { 0x27BFU, },
+ { 0xD83DDD1AU, },
+ { 0xD83DDD19U, },
+ { 0xD83DDD1BU, },
+ { 0xD83DDD1DU, },
+ { 0xD83DDD1CU, },
+ { 0x2714U, 0xFE0FU, },
+ { 0x2611U, 0xFE0FU, },
+ { 0xD83DDD18U, },
+ { 0x26AAU, 0xFE0FU, },
+ { 0x26ABU, 0xFE0FU, },
+ { 0xD83DDD34U, },
+ { 0xD83DDD35U, },
+ { 0xD83DDD3AU, },
+ { 0xD83DDD3BU, },
+ { 0xD83DDD38U, },
+ { 0xD83DDD39U, },
+ { 0xD83DDD36U, },
+ { 0xD83DDD37U, },
+ { 0xD83DDD33U, },
+ { 0xD83DDD32U, },
+ { 0x25AAU, 0xFE0FU, },
+ { 0x25ABU, 0xFE0FU, },
+ { 0x25FEU, 0xFE0FU, },
+ { 0x25FDU, 0xFE0FU, },
+ { 0x25FCU, 0xFE0FU, },
+ { 0x25FBU, 0xFE0FU, },
+ { 0x2B1BU, 0xFE0FU, },
+ { 0x2B1CU, 0xFE0FU, },
+ { 0xD83DDD08U, },
+ { 0xD83DDD07U, },
+ { 0xD83DDD09U, },
+ { 0xD83DDD0AU, },
+ { 0xD83DDD14U, },
+ { 0xD83DDD15U, },
+ { 0xD83DDCE3U, },
+ { 0xD83DDCE2U, },
+ { 0xD83DDC41U, 0x200DU, 0xD83DDDE8U, },
+ { 0xD83DDCACU, },
+ { 0xD83DDCADU, },
+ { 0xD83DDDEFU, },
+ { 0x2660U, 0xFE0FU, },
+ { 0x2663U, 0xFE0FU, },
+ { 0x2665U, 0xFE0FU, },
+ { 0x2666U, 0xFE0FU, },
+ { 0xD83CDCCFU, },
+ { 0xD83CDFB4U, },
+ { 0xD83CDC04U, 0xFE0FU, },
+ { 0xD83DDD50U, },
+ { 0xD83DDD51U, },
+ { 0xD83DDD52U, },
+ { 0xD83DDD53U, },
+ { 0xD83DDD54U, },
+ { 0xD83DDD55U, },
+ { 0xD83DDD56U, },
+ { 0xD83DDD57U, },
+ { 0xD83DDD58U, },
+ { 0xD83DDD59U, },
+ { 0xD83DDD5AU, },
+ { 0xD83DDD5BU, },
+ { 0xD83DDD5CU, },
+ { 0xD83DDD5DU, },
+ { 0xD83DDD5EU, },
+ { 0xD83DDD5FU, },
+ { 0xD83DDD60U, },
+ { 0xD83DDD61U, },
+ { 0xD83DDD62U, },
+ { 0xD83DDD63U, },
+ { 0xD83DDD64U, },
+ { 0xD83DDD65U, },
+ { 0xD83DDD66U, },
+ { 0xD83DDD67U, },
+
+//};
+//
+//InputCategory Category8 = {
+
+ { 0xD83CDFF3U, },
+ { 0xD83CDFF4U, },
+ { 0xD83CDFC1U, },
+ { 0xD83DDEA9U, },
+ { 0xD83CDFF3U, 0xFE0FU, 0x200DU, 0xD83CDF08U, },
+ { 0xD83CDDE6U, 0xD83CDDEBU, },
+ { 0xD83CDDE6U, 0xD83CDDFDU, },
+ { 0xD83CDDE6U, 0xD83CDDF1U, },
+ { 0xD83CDDE9U, 0xD83CDDFFU, },
+ { 0xD83CDDE6U, 0xD83CDDF8U, },
+ { 0xD83CDDE6U, 0xD83CDDE9U, },
+ { 0xD83CDDE6U, 0xD83CDDF4U, },
+ { 0xD83CDDE6U, 0xD83CDDEEU, },
+ { 0xD83CDDE6U, 0xD83CDDF6U, },
+ { 0xD83CDDE6U, 0xD83CDDECU, },
+ { 0xD83CDDE6U, 0xD83CDDF7U, },
+ { 0xD83CDDE6U, 0xD83CDDF2U, },
+ { 0xD83CDDE6U, 0xD83CDDFCU, },
+ { 0xD83CDDE6U, 0xD83CDDFAU, },
+ { 0xD83CDDE6U, 0xD83CDDF9U, },
+ { 0xD83CDDE6U, 0xD83CDDFFU, },
+ { 0xD83CDDE7U, 0xD83CDDF8U, },
+ { 0xD83CDDE7U, 0xD83CDDEDU, },
+ { 0xD83CDDE7U, 0xD83CDDE9U, },
+ { 0xD83CDDE7U, 0xD83CDDE7U, },
+ { 0xD83CDDE7U, 0xD83CDDFEU, },
+ { 0xD83CDDE7U, 0xD83CDDEAU, },
+ { 0xD83CDDE7U, 0xD83CDDFFU, },
+ { 0xD83CDDE7U, 0xD83CDDEFU, },
+ { 0xD83CDDE7U, 0xD83CDDF2U, },
+ { 0xD83CDDE7U, 0xD83CDDF9U, },
+ { 0xD83CDDE7U, 0xD83CDDF4U, },
+ { 0xD83CDDE7U, 0xD83CDDE6U, },
+ { 0xD83CDDE7U, 0xD83CDDFCU, },
+ { 0xD83CDDE7U, 0xD83CDDF7U, },
+ { 0xD83CDDEEU, 0xD83CDDF4U, },
+ { 0xD83CDDFBU, 0xD83CDDECU, },
+ { 0xD83CDDE7U, 0xD83CDDF3U, },
+ { 0xD83CDDE7U, 0xD83CDDECU, },
+ { 0xD83CDDE7U, 0xD83CDDEBU, },
+ { 0xD83CDDE7U, 0xD83CDDEEU, },
+ { 0xD83CDDF0U, 0xD83CDDEDU, },
+ { 0xD83CDDE8U, 0xD83CDDF2U, },
+ { 0xD83CDDE8U, 0xD83CDDE6U, },
+ { 0xD83CDDEEU, 0xD83CDDE8U, },
+ { 0xD83CDDE8U, 0xD83CDDFBU, },
+ { 0xD83CDDE7U, 0xD83CDDF6U, },
+ { 0xD83CDDF0U, 0xD83CDDFEU, },
+ { 0xD83CDDE8U, 0xD83CDDEBU, },
+ { 0xD83CDDF9U, 0xD83CDDE9U, },
+ { 0xD83CDDE8U, 0xD83CDDF1U, },
+ { 0xD83CDDE8U, 0xD83CDDF3U, },
+ { 0xD83CDDE8U, 0xD83CDDFDU, },
+ { 0xD83CDDE8U, 0xD83CDDE8U, },
+ { 0xD83CDDE8U, 0xD83CDDF4U, },
+ { 0xD83CDDF0U, 0xD83CDDF2U, },
+ { 0xD83CDDE8U, 0xD83CDDECU, },
+ { 0xD83CDDE8U, 0xD83CDDE9U, },
+ { 0xD83CDDE8U, 0xD83CDDF0U, },
+ { 0xD83CDDE8U, 0xD83CDDF7U, },
+ { 0xD83CDDE8U, 0xD83CDDEEU, },
+ { 0xD83CDDEDU, 0xD83CDDF7U, },
+ { 0xD83CDDE8U, 0xD83CDDFAU, },
+ { 0xD83CDDE8U, 0xD83CDDFCU, },
+ { 0xD83CDDE8U, 0xD83CDDFEU, },
+ { 0xD83CDDE8U, 0xD83CDDFFU, },
+ { 0xD83CDDE9U, 0xD83CDDF0U, },
+ { 0xD83CDDE9U, 0xD83CDDEFU, },
+ { 0xD83CDDE9U, 0xD83CDDF2U, },
+ { 0xD83CDDE9U, 0xD83CDDF4U, },
+ { 0xD83CDDEAU, 0xD83CDDE8U, },
+ { 0xD83CDDEAU, 0xD83CDDECU, },
+ { 0xD83CDDF8U, 0xD83CDDFBU, },
+ { 0xD83CDDECU, 0xD83CDDF6U, },
+ { 0xD83CDDEAU, 0xD83CDDF7U, },
+ { 0xD83CDDEAU, 0xD83CDDEAU, },
+ { 0xD83CDDEAU, 0xD83CDDF9U, },
+ { 0xD83CDDEAU, 0xD83CDDFAU, },
+ { 0xD83CDDEBU, 0xD83CDDF0U, },
+ { 0xD83CDDEBU, 0xD83CDDF4U, },
+ { 0xD83CDDEBU, 0xD83CDDEFU, },
+ { 0xD83CDDEBU, 0xD83CDDEEU, },
+ { 0xD83CDDEBU, 0xD83CDDF7U, },
+ { 0xD83CDDECU, 0xD83CDDEBU, },
+ { 0xD83CDDF5U, 0xD83CDDEBU, },
+ { 0xD83CDDF9U, 0xD83CDDEBU, },
+ { 0xD83CDDECU, 0xD83CDDE6U, },
+ { 0xD83CDDECU, 0xD83CDDF2U, },
+ { 0xD83CDDECU, 0xD83CDDEAU, },
+ { 0xD83CDDE9U, 0xD83CDDEAU, },
+ { 0xD83CDDECU, 0xD83CDDEDU, },
+ { 0xD83CDDECU, 0xD83CDDEEU, },
+ { 0xD83CDDECU, 0xD83CDDF7U, },
+ { 0xD83CDDECU, 0xD83CDDF1U, },
+ { 0xD83CDDECU, 0xD83CDDE9U, },
+ { 0xD83CDDECU, 0xD83CDDF5U, },
+ { 0xD83CDDECU, 0xD83CDDFAU, },
+ { 0xD83CDDECU, 0xD83CDDF9U, },
+ { 0xD83CDDECU, 0xD83CDDECU, },
+ { 0xD83CDDECU, 0xD83CDDF3U, },
+ { 0xD83CDDECU, 0xD83CDDFCU, },
+ { 0xD83CDDECU, 0xD83CDDFEU, },
+ { 0xD83CDDEDU, 0xD83CDDF9U, },
+ { 0xD83CDDEDU, 0xD83CDDF3U, },
+ { 0xD83CDDEDU, 0xD83CDDF0U, },
+ { 0xD83CDDEDU, 0xD83CDDFAU, },
+ { 0xD83CDDEEU, 0xD83CDDF8U, },
+ { 0xD83CDDEEU, 0xD83CDDF3U, },
+ { 0xD83CDDEEU, 0xD83CDDE9U, },
+ { 0xD83CDDEEU, 0xD83CDDF7U, },
+ { 0xD83CDDEEU, 0xD83CDDF6U, },
+ { 0xD83CDDEEU, 0xD83CDDEAU, },
+ { 0xD83CDDEEU, 0xD83CDDF2U, },
+ { 0xD83CDDEEU, 0xD83CDDF1U, },
+ { 0xD83CDDEEU, 0xD83CDDF9U, },
+ { 0xD83CDDEFU, 0xD83CDDF2U, },
+ { 0xD83CDDEFU, 0xD83CDDF5U, },
+ { 0xD83CDF8CU, },
+ { 0xD83CDDEFU, 0xD83CDDEAU, },
+ { 0xD83CDDEFU, 0xD83CDDF4U, },
+ { 0xD83CDDF0U, 0xD83CDDFFU, },
+ { 0xD83CDDF0U, 0xD83CDDEAU, },
+ { 0xD83CDDF0U, 0xD83CDDEEU, },
+ { 0xD83CDDFDU, 0xD83CDDF0U, },
+ { 0xD83CDDF0U, 0xD83CDDFCU, },
+ { 0xD83CDDF0U, 0xD83CDDECU, },
+ { 0xD83CDDF1U, 0xD83CDDE6U, },
+ { 0xD83CDDF1U, 0xD83CDDFBU, },
+ { 0xD83CDDF1U, 0xD83CDDE7U, },
+ { 0xD83CDDF1U, 0xD83CDDF8U, },
+ { 0xD83CDDF1U, 0xD83CDDF7U, },
+ { 0xD83CDDF1U, 0xD83CDDFEU, },
+ { 0xD83CDDF1U, 0xD83CDDEEU, },
+ { 0xD83CDDF1U, 0xD83CDDF9U, },
+ { 0xD83CDDF1U, 0xD83CDDFAU, },
+ { 0xD83CDDF2U, 0xD83CDDF4U, },
+ { 0xD83CDDF2U, 0xD83CDDF0U, },
+ { 0xD83CDDF2U, 0xD83CDDECU, },
+ { 0xD83CDDF2U, 0xD83CDDFCU, },
+ { 0xD83CDDF2U, 0xD83CDDFEU, },
+ { 0xD83CDDF2U, 0xD83CDDFBU, },
+ { 0xD83CDDF2U, 0xD83CDDF1U, },
+ { 0xD83CDDF2U, 0xD83CDDF9U, },
+ { 0xD83CDDF2U, 0xD83CDDEDU, },
+ { 0xD83CDDF2U, 0xD83CDDF6U, },
+ { 0xD83CDDF2U, 0xD83CDDF7U, },
+ { 0xD83CDDF2U, 0xD83CDDFAU, },
+ { 0xD83CDDFEU, 0xD83CDDF9U, },
+ { 0xD83CDDF2U, 0xD83CDDFDU, },
+ { 0xD83CDDEBU, 0xD83CDDF2U, },
+ { 0xD83CDDF2U, 0xD83CDDE9U, },
+ { 0xD83CDDF2U, 0xD83CDDE8U, },
+ { 0xD83CDDF2U, 0xD83CDDF3U, },
+ { 0xD83CDDF2U, 0xD83CDDEAU, },
+ { 0xD83CDDF2U, 0xD83CDDF8U, },
+ { 0xD83CDDF2U, 0xD83CDDE6U, },
+ { 0xD83CDDF2U, 0xD83CDDFFU, },
+ { 0xD83CDDF2U, 0xD83CDDF2U, },
+ { 0xD83CDDF3U, 0xD83CDDE6U, },
+ { 0xD83CDDF3U, 0xD83CDDF7U, },
+ { 0xD83CDDF3U, 0xD83CDDF5U, },
+ { 0xD83CDDF3U, 0xD83CDDF1U, },
+ { 0xD83CDDF3U, 0xD83CDDE8U, },
+ { 0xD83CDDF3U, 0xD83CDDFFU, },
+ { 0xD83CDDF3U, 0xD83CDDEEU, },
+ { 0xD83CDDF3U, 0xD83CDDEAU, },
+ { 0xD83CDDF3U, 0xD83CDDECU, },
+ { 0xD83CDDF3U, 0xD83CDDFAU, },
+ { 0xD83CDDF3U, 0xD83CDDEBU, },
+ { 0xD83CDDF0U, 0xD83CDDF5U, },
+ { 0xD83CDDF2U, 0xD83CDDF5U, },
+ { 0xD83CDDF3U, 0xD83CDDF4U, },
+ { 0xD83CDDF4U, 0xD83CDDF2U, },
+ { 0xD83CDDF5U, 0xD83CDDF0U, },
+ { 0xD83CDDF5U, 0xD83CDDFCU, },
+ { 0xD83CDDF5U, 0xD83CDDF8U, },
+ { 0xD83CDDF5U, 0xD83CDDE6U, },
+ { 0xD83CDDF5U, 0xD83CDDECU, },
+ { 0xD83CDDF5U, 0xD83CDDFEU, },
+ { 0xD83CDDF5U, 0xD83CDDEAU, },
+ { 0xD83CDDF5U, 0xD83CDDEDU, },
+ { 0xD83CDDF5U, 0xD83CDDF3U, },
+ { 0xD83CDDF5U, 0xD83CDDF1U, },
+ { 0xD83CDDF5U, 0xD83CDDF9U, },
+ { 0xD83CDDF5U, 0xD83CDDF7U, },
+ { 0xD83CDDF6U, 0xD83CDDE6U, },
+ { 0xD83CDDF7U, 0xD83CDDEAU, },
+ { 0xD83CDDF7U, 0xD83CDDF4U, },
+ { 0xD83CDDF7U, 0xD83CDDFAU, },
+ { 0xD83CDDF7U, 0xD83CDDFCU, },
+ { 0xD83CDDFCU, 0xD83CDDF8U, },
+ { 0xD83CDDF8U, 0xD83CDDF2U, },
+ { 0xD83CDDF8U, 0xD83CDDF9U, },
+ { 0xD83CDDF8U, 0xD83CDDE6U, },
+ { 0xD83CDDF8U, 0xD83CDDF3U, },
+ { 0xD83CDDF7U, 0xD83CDDF8U, },
+ { 0xD83CDDF8U, 0xD83CDDE8U, },
+ { 0xD83CDDF8U, 0xD83CDDF1U, },
+ { 0xD83CDDF8U, 0xD83CDDECU, },
+ { 0xD83CDDF8U, 0xD83CDDFDU, },
+ { 0xD83CDDF8U, 0xD83CDDF0U, },
+ { 0xD83CDDF8U, 0xD83CDDEEU, },
+ { 0xD83CDDECU, 0xD83CDDF8U, },
+ { 0xD83CDDF8U, 0xD83CDDE7U, },
+ { 0xD83CDDF8U, 0xD83CDDF4U, },
+ { 0xD83CDDFFU, 0xD83CDDE6U, },
+ { 0xD83CDDF0U, 0xD83CDDF7U, },
+ { 0xD83CDDF8U, 0xD83CDDF8U, },
+ { 0xD83CDDEAU, 0xD83CDDF8U, },
+ { 0xD83CDDF1U, 0xD83CDDF0U, },
+ { 0xD83CDDE7U, 0xD83CDDF1U, },
+ { 0xD83CDDF8U, 0xD83CDDEDU, },
+ { 0xD83CDDF0U, 0xD83CDDF3U, },
+ { 0xD83CDDF1U, 0xD83CDDE8U, },
+ { 0xD83CDDF5U, 0xD83CDDF2U, },
+ { 0xD83CDDFBU, 0xD83CDDE8U, },
+ { 0xD83CDDF8U, 0xD83CDDE9U, },
+ { 0xD83CDDF8U, 0xD83CDDF7U, },
+ { 0xD83CDDF8U, 0xD83CDDFFU, },
+ { 0xD83CDDF8U, 0xD83CDDEAU, },
+ { 0xD83CDDE8U, 0xD83CDDEDU, },
+ { 0xD83CDDF8U, 0xD83CDDFEU, },
+ { 0xD83CDDF9U, 0xD83CDDFCU, },
+ { 0xD83CDDF9U, 0xD83CDDEFU, },
+ { 0xD83CDDF9U, 0xD83CDDFFU, },
+ { 0xD83CDDF9U, 0xD83CDDEDU, },
+ { 0xD83CDDF9U, 0xD83CDDF1U, },
+ { 0xD83CDDF9U, 0xD83CDDECU, },
+ { 0xD83CDDF9U, 0xD83CDDF0U, },
+ { 0xD83CDDF9U, 0xD83CDDF4U, },
+ { 0xD83CDDF9U, 0xD83CDDF9U, },
+ { 0xD83CDDF9U, 0xD83CDDF3U, },
+ { 0xD83CDDF9U, 0xD83CDDF7U, },
+ { 0xD83CDDF9U, 0xD83CDDF2U, },
+ { 0xD83CDDF9U, 0xD83CDDE8U, },
+ { 0xD83CDDF9U, 0xD83CDDFBU, },
+ { 0xD83CDDFBU, 0xD83CDDEEU, },
+ { 0xD83CDDFAU, 0xD83CDDECU, },
+ { 0xD83CDDFAU, 0xD83CDDE6U, },
+ { 0xD83CDDE6U, 0xD83CDDEAU, },
+ { 0xD83CDDECU, 0xD83CDDE7U, },
+ { 0xD83CDDFAU, 0xD83CDDF8U, },
+ { 0xD83CDDFAU, 0xD83CDDFEU, },
+ { 0xD83CDDFAU, 0xD83CDDFFU, },
+ { 0xD83CDDFBU, 0xD83CDDFAU, },
+ { 0xD83CDDFBU, 0xD83CDDE6U, },
+ { 0xD83CDDFBU, 0xD83CDDEAU, },
+ { 0xD83CDDFBU, 0xD83CDDF3U, },
+ { 0xD83CDDFCU, 0xD83CDDEBU, },
+ { 0xD83CDDEAU, 0xD83CDDEDU, },
+ { 0xD83CDDFEU, 0xD83CDDEAU, },
+ { 0xD83CDDFFU, 0xD83CDDF2U, },
+ { 0xD83CDDFFU, 0xD83CDDFCU, },
+};
+
+constexpr auto kErrorBadData = 401;
+
+void append(Id &id, uint32 code) {
+	if (auto first = static_cast<uint16>((code >> 16) & 0xFFFFU)) {
+		id.append(QChar(first));
+	}
+	id.append(QChar(static_cast<uint16>(code & 0xFFFFU)));
+}
+
+using VariatedIds = map<Id, bool>;
+VariatedIds fillVariatedIds() {
+	auto result = VariatedIds();
+	for (auto &row : ColoredEmoji) {
+		auto variatedId = Id();
+		if (row.size() < 2) {
+			logDataError() << "colored string should have at least two characters.";
+			return VariatedIds();
+		}
+		for (auto i = size_t(0), size = row.size(); i != size; ++i) {
+			auto code = row[i];
+			if (i == 1) {
+				if (code != ColorMask) {
+					logDataError() << "color code should appear at index 1.";
+					return VariatedIds();
+				}
+			} else if (code == ColorMask) {
+				logDataError() << "color code should appear only at index 1.";
+				return VariatedIds();
+			} else if (code != kPostfix) {
+				append(variatedId, code);
+			}
+		}
+		result.insert(make_pair(variatedId, true));
+	}
+	return result;
+}
+
+void appendCategory(Data &result, const InputCategory &category, const VariatedIds &variatedIds) {
+	result.categories.push_back(vector<int>());
+	for (auto &id : category) {
+		auto emoji = Emoji();
+		auto bareId = Id();
+		auto from = id.cbegin(), to = id.cend();
+		if (to - from == 2 && *(to - 1) == kPostfix) {
+			emoji.postfixed = true;
+			--to;
+		}
+		for (auto i = from; i != to; ++i) {
+			auto code = *i;
+			if (find(begin(Colors), end(Colors), code) != end(Colors)) {
+				logDataError() << "color code found in a category emoji.";
+				result = Data();
+				return;
+			}
+			append(emoji.id, code);
+			if (code != kPostfix) {
+				append(bareId, code);
+			}
+		}
+		if (emoji.id.isEmpty()) {
+			logDataError() << "empty emoji id found.";
+			result = Data();
+			return;
+		}
+		auto it = result.map.find(emoji.id);
+		if (it == result.map.cend()) {
+			it = result.map.insert(make_pair(emoji.id, result.list.size())).first;
+			result.list.push_back(move(emoji));
+		} else if (result.list[it->second].postfixed != emoji.postfixed) {
+			logDataError() << "same emoji found with different postfixed property.";
+			result = Data();
+			return;
+		}
+		if (variatedIds.find(bareId) != variatedIds.cend()) {
+			result.list[it->second].variated = true;
+
+			auto baseId = Id();
+			append(baseId, *from++);
+			if (from != to && *from == kPostfix) {
+				++from;
+			}
+			for (auto color : Colors) {
+				auto colored = Emoji();
+				colored.id = baseId;
+				colored.colored = true;
+				append(colored.id, color);
+				for (auto i = from; i != to; ++i) {
+					append(colored.id, *i);
+				}
+				result.map.insert(make_pair(colored.id, result.list.size()));
+				result.list.push_back(move(colored));
+			}
+		}
+		result.categories.back().push_back(it->second);
+	}
+}
+
+void fillReplaces(Data &result) {
+	for (auto &replace : Replaces) {
+		auto id = Id();
+		for (auto code : replace.code) {
+			append(id, code);
+		}
+		auto it = result.map.find(id);
+		if (it == result.map.cend()) {
+			logDataError() << "emoji from replaces not found in the map.";
+			result = Data();
+			return;
+		}
+		result.replaces.insert(make_pair(QString::fromUtf8(replace.replace), it->second));
+	}
+}
+
+} // namespace
+
+common::LogStream logDataError() {
+	return common::logError(kErrorBadData, "input") << "Bad data: ";
+}
+
+Data PrepareData() {
+	Data result;
+
+	auto variatedIds = fillVariatedIds();
+	if (variatedIds.empty()) {
+		return Data();
+	}
+
+	vector<const InputCategory*> categories = {
+		&Category1,
+		&Category2,
+		&Category3,
+		&Category4,
+		&Category5,
+		&Category6,
+		&Category7,
+	};
+	for (auto category : categories) {
+		appendCategory(result, *category, variatedIds);
+		if (result.list.empty()) {
+			return Data();
+		}
+	}
+
+	fillReplaces(result);
+	if (result.list.empty()) {
+		return Data();
+	}
+
+	return result;
+}
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/codegen/emoji/data.h b/Telegram/SourceFiles/codegen/emoji/data.h
new file mode 100644
index 000000000..387a57a49
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/data.h
@@ -0,0 +1,56 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#pragma once
+
+#include "codegen/common/logging.h"
+#include <vector>
+#include <map>
+#include <memory>
+#include <functional>
+#include <QtCore/QString>
+#include <QtCore/QSet>
+#include <QtCore/QMap>
+
+namespace codegen {
+namespace emoji {
+
+using Id = QString;
+struct Emoji {
+	Id id;
+	bool postfixed = false;
+	bool variated = false;
+	bool colored = false;
+};
+
+struct Data {
+	std::vector<Emoji> list;
+	std::map<Id, int, std::greater<Id>> map;
+	std::vector<std::vector<int>> categories;
+	std::map<QString, int, std::greater<QString>> replaces;
+};
+Data PrepareData();
+
+constexpr auto kPostfix = 0xFE0FU;
+
+common::LogStream logDataError();
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/codegen/emoji/generator.cpp b/Telegram/SourceFiles/codegen/emoji/generator.cpp
new file mode 100644
index 000000000..27428099c
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/generator.cpp
@@ -0,0 +1,745 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#include "codegen/emoji/generator.h"
+
+#include <QtCore/QtPlugin>
+#include <QtCore/QBuffer>
+#include <QtGui/QFontDatabase>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QImage>
+#include <QtGui/QPainter>
+#include <QtCore/QDir>
+
+Q_IMPORT_PLUGIN(QWebpPlugin)
+#ifdef Q_OS_MAC
+Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)
+#elif defined Q_OS_WIN
+Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
+#else // !Q_OS_MAC && !Q_OS_WIN
+Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
+#endif // !Q_OS_MAC && !Q_OS_WIN
+
+namespace codegen {
+namespace emoji {
+namespace {
+
+constexpr int kErrorCantWritePath = 851;
+
+common::ProjectInfo Project = {
+	"codegen_emoji",
+	"empty",
+	"stdafx.h",
+	true, // forceReGenerate
+};
+
+QRect computeSourceRect(const QImage &image) {
+	auto size = image.width();
+	auto result = QRect(2, 2, size - 4, size - 4);
+	auto top = 1, bottom = 1, left = 1, right = 1;
+	auto rgbBits = reinterpret_cast<const QRgb*>(image.constBits());
+	for (auto i = 0; i != size; ++i) {
+		if (rgbBits[i] > 0
+			|| rgbBits[(size - 1) * size + i] > 0
+			|| rgbBits[i * size] > 0
+			|| rgbBits[i * size + (size - 1)] > 0) {
+			logDataError() << "Bad border.";
+			return QRect();
+		}
+		if (rgbBits[1 * size + i] > 0) {
+			top = -1;
+		} else if (top > 0 && rgbBits[2 * size + i] > 0) {
+			top = 0;
+		}
+		if (rgbBits[(size - 2) * size + i] > 0) {
+			bottom = -1;
+		} else if (bottom > 0 && rgbBits[(size - 3) * size + i] > 0) {
+			bottom = 0;
+		}
+		if (rgbBits[i * size + 1] > 0) {
+			left = -1;
+		} else if (left > 0 && rgbBits[i * size + 2] > 0) {
+			left = 0;
+		}
+		if (rgbBits[i * size + (size - 2)] > 0) {
+			right = -1;
+		} else if (right > 0 && rgbBits[i * size + (size - 3)] > 0) {
+			right = 0;
+		}
+	}
+	if (top < 0) {
+		if (bottom <= 0) {
+			logDataError() << "Bad vertical :(";
+			return QRect();
+		} else {
+			result.setY(result.y() + 1);
+		}
+	} else if (bottom < 0) {
+		if (top <= 0) {
+			logDataError() << "Bad vertical :(";
+			return QRect();
+		} else {
+			result.setY(result.y() - 1);
+		}
+	}
+	if (left < 0) {
+		if (right <= 0) {
+			logDataError() << "Bad horizontal :(";
+			return QRect();
+		} else {
+			result.setX(result.x() + 1);
+		}
+	} else if (right < 0) {
+		if (left <= 0) {
+			logDataError() << "Bad horizontal :(";
+			return QRect();
+		} else {
+			result.setX(result.x() - 1);
+		}
+	}
+	return result;
+}
+
+QString computeId(Id id) {
+	auto idAsParams = QStringList();
+	for (auto i = 0, size = id.size(); i != size; ++i) {
+		idAsParams.push_back("0x" + QString::number(id[i].unicode(), 16));
+	}
+	return "internal::ComputeId(" + idAsParams.join(", ") + ")";
+}
+
+} // namespace
+
+Generator::Generator(const Options &options) : project_(Project), data_(PrepareData()) {
+	QDir dir(options.outputPath);
+	if (!dir.mkpath(".")) {
+		common::logError(kErrorCantWritePath, "Command Line") << "can not open path for writing: " << dir.absolutePath().toStdString();
+		data_ = Data();
+	}
+
+	outputPath_ = dir.absolutePath() + "/emoji_config";
+	spritePath_ = dir.absolutePath() + "/emoji";
+}
+
+int Generator::generate() {
+	if (data_.list.empty()) {
+		return -1;
+	}
+
+#ifdef Q_OS_MAC
+	if (!writeImages()) {
+		return -1;
+	}
+#endif // Q_OS_MAC
+
+	if (!writeSource()) {
+		return -1;
+	}
+
+	return 0;
+}
+
+constexpr auto kVariantsCount = 5;
+constexpr auto kEmojiInRow = 40;
+
+QImage Generator::generateImage(int variantIndex) {
+	constexpr int kEmojiSizes[kVariantsCount + 1] = { 18, 22, 27, 36, 45, 180 };
+	constexpr bool kBadSizes[kVariantsCount] = { true, true, false, false, false };
+	constexpr int kEmojiFontSizes[kVariantsCount + 1] = { 14, 20, 27, 36, 45, 180 };
+	constexpr int kEmojiDeltas[kVariantsCount + 1] = { 15, 20, 25, 34, 42, 167 };
+
+	auto emojiCount = data_.list.size();
+	auto columnsCount = kEmojiInRow;
+	auto rowsCount = (emojiCount / columnsCount) + ((emojiCount % columnsCount) ? 1 : 0);
+
+	auto emojiSize = kEmojiSizes[variantIndex];
+	auto isBad = kBadSizes[variantIndex];
+	auto sourceSize = (isBad ? kEmojiSizes[kVariantsCount] : emojiSize);
+
+	auto font = QGuiApplication::font();
+	font.setFamily(QStringLiteral("Apple Color Emoji"));
+	font.setPixelSize(kEmojiFontSizes[isBad ? kVariantsCount : variantIndex]);
+
+	auto singleSize = 4 + sourceSize;
+	auto emojiImage = QImage(columnsCount * emojiSize, rowsCount * emojiSize, QImage::Format_ARGB32);
+	emojiImage.fill(Qt::transparent);
+	auto singleImage = QImage(singleSize, singleSize, QImage::Format_ARGB32);
+	{
+		QPainter p(&emojiImage);
+		p.setRenderHint(QPainter::SmoothPixmapTransform);
+
+		auto column = 0;
+		auto row = 0;
+		for (auto &emoji : data_.list) {
+			{
+				singleImage.fill(Qt::transparent);
+
+				QPainter q(&singleImage);
+				q.setPen(QColor(0, 0, 0, 255));
+				q.setFont(font);
+				q.drawText(2, 2 + kEmojiDeltas[isBad ? kVariantsCount : variantIndex], emoji.id);
+			}
+			auto sourceRect = computeSourceRect(singleImage);
+			if (sourceRect.isEmpty()) {
+				return QImage();
+			}
+			auto targetRect = QRect(column * emojiSize, row * emojiSize, emojiSize, emojiSize);
+			if (isBad) {
+				p.drawImage(targetRect, singleImage.copy(sourceRect).scaled(emojiSize, emojiSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+			} else {
+				p.drawImage(targetRect, singleImage, sourceRect);
+			}
+			++column;
+			if (column == columnsCount) {
+				column = 0;
+				++row;
+			}
+		}
+	}
+	return emojiImage;
+}
+
+bool Generator::writeImages() {
+	constexpr const char *variantPostfix[] = { "", "_125x", "_150x", "_200x", "_250x" };
+	for (auto variantIndex = 0; variantIndex != kVariantsCount; variantIndex++) {
+		auto image = generateImage(variantIndex);
+		auto postfix = variantPostfix[variantIndex];
+		auto filename = spritePath_ + postfix + ".webp";
+		auto bytes = QByteArray();
+		{
+			QBuffer buffer(&bytes);
+			if (!image.save(&buffer, "WEBP", (variantIndex < 3) ? 100 : 99)) {
+				logDataError() << "Could not save 'emoji" << postfix << ".webp'.";
+				return false;
+			}
+		}
+		auto needResave = !QFileInfo(filename).exists();
+		if (!needResave) {
+			QFile file(filename);
+			if (!file.open(QIODevice::ReadOnly)) {
+				needResave = true;
+			} else {
+				auto already = file.readAll();
+				if (already.size() != bytes.size() || memcmp(already.constData(), bytes.constData(), already.size())) {
+					needResave = true;
+				}
+			}
+		}
+        if (needResave) {
+			QFile file(filename);
+			if (!file.open(QIODevice::WriteOnly)) {
+				logDataError() << "Could not open 'emoji" << postfix << ".png'.";
+				return false;
+			} else {
+				if (file.write(bytes) != bytes.size()) {
+					logDataError() << "Could not write 'emoji" << postfix << ".png'.";
+					return false;
+				}
+			}
+		}
+	}
+	return true;
+}
+
+bool Generator::writeSource() {
+	source_ = std::make_unique<common::CppFile>(outputPath_ + ".cpp", project_);
+
+	source_->pushNamespace("Ui").pushNamespace("Emoji").pushNamespace();
+	source_->stream() << "\
+\n\
+constexpr auto kCount = " << data_.list.size() << ";\n\
+auto WorkingIndex = -1;\n\
+\n\
+QVector<One> Items;\n\
+\n";
+	source_->popNamespace().newline().pushNamespace("internal");
+	source_->stream() << "\
+\n\
+EmojiPtr ByIndex(int index) {\n\
+	return (index >= 0 && index < Items.size()) ? &Items[index] : nullptr;\n\
+}\n\
+\n\
+inline void AppendChars(QString &result) {\n\
+}\n\
+\n\
+template <typename ...Args>\n\
+inline void AppendChars(QString &result, ushort unicode, Args... args) {\n\
+	result.append(QChar(unicode));\n\
+	AppendChars(result, args...);\n\
+}\n\
+\n\
+template <typename ...Args>\n\
+inline QString ComputeId(Args... args) {\n\
+	auto result = QString();\n\
+	result.reserve(sizeof...(args));\n\
+	AppendChars(result, args...);\n\
+	return result;\n\
+}\n";
+	if (!writeFindReplace()) {
+		return false;
+	}
+	if (!writeFind()) {
+		return false;
+	}
+	source_->popNamespace();
+
+	if (!writeInitCode()) {
+		return false;
+	}
+	if (!writePacks()) {
+		return false;
+	}
+	source_->stream() << "\
+\n\
+int Index() {\n\
+	return WorkingIndex;\n\
+}\n\
+\n\
+int One::variantsCount() const {\n\
+	return hasVariants() ? " << colorsCount_ << " : 0;\n\
+}\n\
+\n\
+int One::variantIndex(EmojiPtr variant) const {\n\
+	return (variant - original());\n\
+}\n\
+\n\
+EmojiPtr One::variant(int index) const {\n\
+	return (index >= 0 && index <= variantsCount()) ? (original() + index) : this;\n\
+}\n\
+\n\
+int One::index() const {\n\
+	return (this - &Items[0]);\n\
+}\n\
+\n";
+
+	return source_->finalize();
+}
+
+bool Generator::writeInitCode() {
+	constexpr const char *variantNames[] = {
+		"dbisOne",
+		"dbisOneAndQuarter",
+		"dbisOneAndHalf",
+		"dbisTwo"
+	};
+
+	source_->stream() << "\
+\n\
+void Init() {\n\
+	auto scaleForEmoji = cRetina() ? dbisTwo : cScale();\n\
+\n\
+	switch (scaleForEmoji) {\n";
+	auto variantIndex = 0;
+	for (auto name : variantNames) {
+		source_->stream() << "\
+	case " << name << ": WorkingIndex = " << variantIndex++ << "; break;\n";
+	}
+	source_->stream() << "\
+	};\n\
+\n\
+	Items.reserve(kCount);\n\
+\n";
+
+	auto column = 0;
+	auto row = 0;
+	auto index = 0;
+	auto variated = -1;
+	auto coloredCount = 0;
+	for (auto &item : data_.list) {
+		source_->stream() << "\
+	Items.push_back({ " << computeId(item.id) << ", " << column << ", " << row << ", " << (item.postfixed ? "true" : "false") << ", " << (item.variated ? "true" : "false") << ", " << (item.colored ? "&Items[" + QString::number(variated) + "]" : "nullptr") << " });\n";
+		if (coloredCount > 0 && (item.variated || !item.colored)) {
+			if (!colorsCount_) {
+				colorsCount_ = coloredCount;
+			} else if (colorsCount_ != coloredCount) {
+				logDataError() << "different colored emoji count exist.";
+				return false;
+			}
+			coloredCount = 0;
+		}
+		if (item.variated) {
+			variated = index;
+		} else if (item.colored) {
+			if (variated <= 0) {
+				logDataError() << "wrong order of colored items.";
+				return false;
+			}
+			++coloredCount;
+		} else if (variated >= 0) {
+			variated = -1;
+		}
+		if (++column == kEmojiInRow) {
+			column = 0;
+			++row;
+		}
+		++index;
+	}
+
+	source_->stream() << "\
+}\n";
+	return true;
+}
+
+bool Generator::writePacks() {
+	constexpr const char *packNames[] = {
+		"dbietPeople",
+		"dbietNature",
+		"dbietFood",
+		"dbietActivity",
+		"dbietTravel",
+		"dbietObjects",
+		"dbietSymbols",
+	};
+	source_->stream() << "\
+\n\
+int GetPackCount(DBIEmojiTab tab) {\n\
+	switch (tab) {\n";
+	auto countIndex = 0;
+	for (auto name : packNames) {
+		if (countIndex >= int(data_.categories.size())) {
+			logDataError() << "category " << countIndex << " not found.";
+			return false;
+		}
+		source_->stream() << "\
+	case " << name << ": return " << data_.categories[countIndex++].size() << ";\n";
+	}
+	source_->stream() << "\
+	case dbietRecent: return cGetRecentEmoji().size();\n\
+	}\n\
+	return 0;\n\
+}\n\
+\n\
+EmojiPack GetPack(DBIEmojiTab tab) {\n\
+	switch (tab) {\n";
+	auto index = 0;
+	for (auto name : packNames) {
+		if (index >= int(data_.categories.size())) {
+			logDataError() << "category " << index << " not found.";
+			return false;
+		}
+		auto &category = data_.categories[index++];
+		source_->stream() << "\
+	case " << name << ": {\n\
+		static auto result = EmojiPack();\n\
+		if (result.isEmpty()) {\n\
+			result.reserve(" << category.size() << ");\n";
+		for (auto index : category) {
+			source_->stream() << "\
+			result.push_back(&Items[" << index << "]);\n";
+		}
+		source_->stream() << "\
+		}\n\
+		return result;\n\
+	} break;\n\n";
+	}
+	source_->stream() << "\
+	case dbietRecent: {\n\
+		auto result = EmojiPack();\n\
+		result.reserve(cGetRecentEmoji().size());\n\
+		for (auto &item : cGetRecentEmoji()) {\n\
+			result.push_back(item.first);\n\
+		}\n\
+		return result;\n\
+	} break;\n\
+	}\n\
+	return EmojiPack();\n\
+}\n";
+	return true;
+}
+
+bool Generator::writeFindReplace() {
+	source_->stream() << "\
+\n\
+EmojiPtr FindReplace(const QChar *ch, const QChar *end, int *outLength) {\n";
+
+	if (!writeFindFromDictionary(data_.replaces)) {
+		return false;
+	}
+
+	source_->stream() << "\
+}\n";
+
+	return true;
+}
+
+bool Generator::writeFind() {
+	source_->stream() << "\
+\n\
+EmojiPtr Find(const QChar *ch, const QChar *end, int *outLength) {\n";
+
+	if (!writeFindFromDictionary(data_.map)) {
+		return false;
+	}
+
+	source_->stream() << "\
+}\n\
+\n";
+
+	return true;
+}
+
+bool Generator::writeFindFromDictionary(const std::map<QString, int, std::greater<QString>> &dictionary) {
+	// That one was slower..
+	//
+	//using Map = std::map<QString, int, std::greater<QString>>;
+	//Map small; // 0-127
+	//Map medium; // 128-255
+	//Map large; // 256-65535
+	//Map other;  // surrogates
+	//for (auto &item : dictionary) {
+	//	auto key = item.first;
+	//	auto first = key.isEmpty() ? QChar(0) : QChar(key[0]);
+	//	if (!first.unicode() || first.isLowSurrogate() || (first.isHighSurrogate() && (key.size() < 2 || !QChar(key[1]).isLowSurrogate()))) {
+	//		logDataError() << "bad key.";
+	//		return false;
+	//	}
+	//	if (first.isHighSurrogate()) {
+	//		other.insert(item);
+	//	} else if (first.unicode() >= 256) {
+	//		if (first.unicode() >= 0xE000) {
+	//			// Currently if we'll have codes from both below and above the surrogates
+	//			// we'll return nullptr without checking the surrogates, because we first
+	//			// check those codes, applying the min-max range of codes from "large".
+	//			logDataError() << "codes after the surrogates are not supported.";
+	//			return false;
+	//		}
+	//		large.insert(item);
+	//	} else if (first.unicode() >= 128) {
+	//		medium.insert(item);
+	//	} else {
+	//		small.insert(item);
+	//	}
+	//}
+	//auto smallMinCheck = (medium.empty() && large.empty() && other.empty()) ? -1 : 0;
+	//auto smallMaxCheck = (medium.empty() && large.empty() && other.empty()) ? -1 : 128;
+	//if (!writeFindFromOneDictionary(small, smallMinCheck, smallMaxCheck)) {
+	//	return false;
+	//}
+	//auto mediumMinCheck = (large.empty() && other.empty()) ? -1 : 128;
+	//auto mediumMaxCheck = (large.empty() && other.empty()) ? -1 : 256;
+	//if (!writeFindFromOneDictionary(medium, mediumMinCheck, mediumMaxCheck)) {
+	//	return false;
+	//}
+	//if (!writeFindFromOneDictionary(large, other.empty() ? -1 : 0)) {
+	//	return false;
+	//}
+	//if (!writeFindFromOneDictionary(other)) {
+	//	return false;
+	//}
+
+	if (!writeFindFromOneDictionary(dictionary)) {
+		return false;
+	}
+	source_->stream() << "\
+	return nullptr;\n";
+	return true;
+}
+
+// min < 0 - no outer min-max check
+// max < 0 - this is last checked dictionary
+bool Generator::writeFindFromOneDictionary(const std::map<QString, int, std::greater<QString>> &dictionary, int min, int max) {
+	if (dictionary.empty()) {
+		return true;
+	}
+
+	auto tabs = [](int size) {
+		return QString(size, '\t');
+	};
+
+	std::map<int, int> uniqueFirstChars;
+	auto foundMax = 0, foundMin = 65535;
+	for (auto &item : dictionary) {
+		auto ch = item.first[0].unicode();
+		if (foundMax < ch) foundMax = ch;
+		if (foundMin > ch) foundMin = ch;
+		uniqueFirstChars[ch] = 0;
+	}
+
+	auto writeBoundsCondition = false;//(uniqueFirstChars.size() > 4);
+	auto haveOuterCondition = false;
+	if (min >= 0 && max > min) {
+		haveOuterCondition = true;
+		source_->stream() << "\
+	if (ch->unicode() >= " << min << " && ch->unicode() < " << max << ") {\n";
+		if (writeBoundsCondition) {
+			source_->stream() << "\
+		if (ch->unicode() < " << foundMin << " || ch->unicode() > " << foundMax << ") {\n\
+			return nullptr;\n\
+		}\n\n";
+		}
+	} else if (writeBoundsCondition) {
+		haveOuterCondition = true;
+		source_->stream() << "\
+	if (ch->unicode() >= " << foundMin << " && ch->unicode() <= " << foundMax << ") {\n";
+	}
+	enum class UsedCheckType {
+		Switch,
+		If,
+		UpcomingIf,
+	};
+	auto checkTypes = QVector<UsedCheckType>();
+	auto existsTill = QVector<int>(1, 1);
+	auto chars = QString();
+	auto tabsUsed = haveOuterCondition ? 2 : 1;
+
+	// Returns true if at least one check was finished.
+	auto finishChecksTillKey = [this, &chars, &checkTypes, &existsTill, &tabsUsed, tabs](const QString &key) {
+		auto result = false;
+		while (!chars.isEmpty() && key.midRef(0, chars.size()) != chars) {
+			result = true;
+
+			auto wasType = checkTypes.back();
+			chars.resize(chars.size() - 1);
+			checkTypes.pop_back();
+			if (wasType == UsedCheckType::Switch || wasType == UsedCheckType::If) {
+				--tabsUsed;
+				if (wasType == UsedCheckType::Switch) {
+					source_->stream() << tabs(tabsUsed) << "break;\n";
+				}
+				if ((!chars.isEmpty() && key.midRef(0, chars.size()) != chars) || key == chars) {
+					source_->stream() << tabs(tabsUsed) << "}\n";
+					existsTill.pop_back();
+				}
+			}
+		}
+		return result;
+	};
+
+	// Check if we can use "if" for a check on "charIndex" in "it" (otherwise only "switch")
+	auto canUseIfForCheck = [](auto it, auto end, int charIndex) {
+		auto key = it->first;
+		auto i = it;
+		auto keyStart = key.mid(0, charIndex);
+		for (++i; i != end; ++i) {
+			auto nextKey = i->first;
+			if (nextKey.mid(0, charIndex) != keyStart) {
+				return true;
+			} else if (nextKey.size() > charIndex && nextKey[charIndex] != key[charIndex]) {
+				return false;
+			}
+		}
+		return true;
+	};
+
+	// Get minimal length of key that has first "charIndex" chars same as it
+	// and has at least one more char after them.
+	auto getMinimalLength = [](auto it, auto end, int charIndex) {
+		auto key = it->first;
+		auto result = key.size();
+		auto i = it;
+		auto keyStart = key.mid(0, charIndex);
+		for (++i; i != end; ++i) {
+			auto nextKey = i->first;
+			if (nextKey.mid(0, charIndex) != keyStart || nextKey.size() <= charIndex) {
+				break;
+			}
+			if (result > nextKey.size()) {
+				result = nextKey.size();
+			}
+		}
+		return result;
+	};
+
+	auto getUnicodePointer = [](int index) {
+		if (index > 0) {
+			return "(ch + " + QString::number(index) + ')';
+		}
+		return QString("ch");
+	};
+
+	for (auto i = dictionary.cbegin(), e = dictionary.cend(); i != e; ++i) {
+		auto &item = *i;
+		auto key = item.first;
+		auto weContinueOldSwitch = finishChecksTillKey(key);
+		while (chars.size() != key.size()) {
+			auto checking = chars.size();
+			auto keyChar = key[checking];
+			auto checkedAlready = (checkTypes.size() > checking);
+			if (!checkedAlready) {
+				auto keyCharString = "0x" + QString::number(keyChar.unicode(), 16);
+				auto usedIfForCheck = false;
+				if (weContinueOldSwitch) {
+					weContinueOldSwitch = false;
+					source_->stream() << tabs(tabsUsed) << "case " << keyCharString << ":\n";
+				} else {
+					auto canCheckByIfCount = 0;
+					for (; checking + canCheckByIfCount != key.size(); ++canCheckByIfCount) {
+						if (!canUseIfForCheck(i, e, checking + canCheckByIfCount)) {
+							break;
+						}
+					}
+
+					auto canCheckTill = getMinimalLength(i, e, checking);
+					auto checkedAlready = !existsTill.isEmpty() && (existsTill.back() == canCheckTill);
+					if (checking + canCheckByIfCount - 1 > canCheckTill
+						|| checking > canCheckTill
+						|| (!existsTill.isEmpty() && existsTill.back() > canCheckTill)) {
+						logDataError() << "something wrong with the algo.";
+						return false;
+					}
+					auto condition = checkedAlready ? QString() : ("ch + " + QString::number(canCheckTill - 1) + " " + (canCheckTill == checking + 1 ? "!=" : "<") + " end");
+					existsTill.push_back(canCheckTill);
+					if (canCheckByIfCount > 0) {
+						auto checkStrings = QStringList();
+						for (auto checkByIf = 0; checkByIf != canCheckByIfCount; ++checkByIf) {
+							checkStrings.push_back(getUnicodePointer(checking + checkByIf) + "->unicode() == 0x" + QString::number(key[checking + checkByIf].unicode(), 16));
+						}
+						if (!condition.isEmpty()) {
+							checkStrings.push_front(condition);
+						}
+						for (auto upcomingChecked = 1; upcomingChecked != canCheckByIfCount; ++upcomingChecked) {
+							checkTypes.push_back(UsedCheckType::UpcomingIf);
+						}
+						source_->stream() << tabs(tabsUsed) << "if (" << checkStrings.join(" && ") << ") {\n";
+						usedIfForCheck = true;
+					} else {
+						source_->stream() << tabs(tabsUsed) << (condition.isEmpty() ? "" : "if (" + condition + ") ") << "switch (" << getUnicodePointer(checking) << "->unicode()) {\n";
+						source_->stream() << tabs(tabsUsed) << "case " << keyCharString << ":\n";
+					}
+				}
+				checkTypes.push_back(usedIfForCheck ? UsedCheckType::If : UsedCheckType::Switch);
+				++tabsUsed;
+			}
+			chars.push_back(keyChar);
+		}
+		source_->stream() << tabs(tabsUsed) << "if (outLength) *outLength = " << chars.size() << ";\n";
+
+		// While IsReplaceEdge() currently is always true we just return the value.
+		//source_->stream() << tabs(1 + chars.size()) << "if (ch + " << chars.size() << " == end || IsReplaceEdge(*(ch + " << chars.size() << ")) || (ch + " << chars.size() << ")->unicode() == ' ') {\n";
+		//source_->stream() << tabs(1 + chars.size()) << "\treturn &Items[" << item.second << "];\n";
+		//source_->stream() << tabs(1 + chars.size()) << "}\n";
+		source_->stream() << tabs(tabsUsed) << "return &Items[" << item.second << "];\n";
+	}
+	finishChecksTillKey(QString());
+
+	if (min >= 0) { // not the last dictionary
+		source_->stream() << tabs(tabsUsed) << "return nullptr;\n";
+	}
+	if (haveOuterCondition) {
+		source_->stream() << "\
+	}\n";
+	}
+	source_->stream() << "\n";
+
+	return true;
+}
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/codegen/emoji/generator.h b/Telegram/SourceFiles/codegen/emoji/generator.h
new file mode 100644
index 000000000..284c67ad5
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/generator.h
@@ -0,0 +1,66 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#pragma once
+
+#include <memory>
+#include <QtCore/QString>
+#include <QtCore/QSet>
+#include "codegen/common/cpp_file.h"
+#include "codegen/emoji/options.h"
+#include "codegen/emoji/data.h"
+
+namespace codegen {
+namespace emoji {
+
+class Generator {
+public:
+	Generator(const Options &options);
+	Generator(const Generator &other) = delete;
+	Generator &operator=(const Generator &other) = delete;
+
+	int generate();
+
+private:
+	QImage generateImage(int variantIndex);
+	bool writeImages();
+	bool writeSource();
+
+	bool writeInitCode();
+	bool writePacks();
+	bool writeFindReplace();
+	bool writeFind();
+	bool writeFindFromDictionary(const std::map<QString, int, std::greater<QString>> &dictionary);
+
+	// min < 0 - this is last checked dictionary
+	// max < 0 - no outer min-max check
+	bool writeFindFromOneDictionary(const std::map<QString, int, std::greater<QString>> &dictionary, int min = -1, int max = -1);
+
+	const common::ProjectInfo &project_;
+	int colorsCount_ = 0;
+	QString outputPath_;
+	QString spritePath_;
+	std::unique_ptr<common::CppFile> source_;
+	Data data_;
+
+};
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/codegen/emoji/main.cpp b/Telegram/SourceFiles/codegen/emoji/main.cpp
new file mode 100644
index 000000000..20095ab01
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/main.cpp
@@ -0,0 +1,33 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#include <QtGui/QGuiApplication>
+
+#include "codegen/emoji/options.h"
+#include "codegen/emoji/generator.h"
+
+int main(int argc, char *argv[]) {
+	QGuiApplication app(argc, argv);
+
+	auto options = codegen::emoji::parseOptions();
+
+	codegen::emoji::Generator generator(options);
+	return generator.generate();
+}
diff --git a/Telegram/SourceFiles/codegen/emoji/options.cpp b/Telegram/SourceFiles/codegen/emoji/options.cpp
new file mode 100644
index 000000000..740c5dfe1
--- /dev/null
+++ b/Telegram/SourceFiles/codegen/emoji/options.cpp
@@ -0,0 +1,63 @@
+/*
+This file is part of Telegram Desktop,
+the official desktop version of Telegram messaging app, see https://telegram.org
+
+Telegram Desktop is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+It is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+In addition, as a special exception, the copyright holders give permission
+to link the code of portions of this program with the OpenSSL library.
+
+Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
+Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
+*/
+#include "codegen/emoji/options.h"
+
+#include <ostream>
+#include <QtCore/QCoreApplication>
+#include "codegen/common/logging.h"
+
+namespace codegen {
+namespace emoji {
+namespace {
+
+constexpr int kErrorOutputPathExpected      = 902;
+
+} // namespace
+
+using common::logError;
+
+Options parseOptions() {
+	Options result;
+	auto args = QCoreApplication::instance()->arguments();
+	for (int i = 1, count = args.size(); i < count; ++i) { // skip first
+		auto &arg = args.at(i);
+
+		// Output path
+		if (arg == "-o") {
+			if (++i == count) {
+				logError(kErrorOutputPathExpected, "Command Line") << "output path expected after -o";
+				return Options();
+			} else {
+				result.outputPath = args.at(i);
+			}
+		} else if (arg.startsWith("-o")) {
+			result.outputPath = arg.mid(2);
+		}
+	}
+	if (result.outputPath.isEmpty()) {
+		logError(kErrorOutputPathExpected, "Command Line") << "output path expected";
+		return Options();
+	}
+	return result;
+}
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/_other/memain.h b/Telegram/SourceFiles/codegen/emoji/options.h
similarity index 75%
rename from Telegram/SourceFiles/_other/memain.h
rename to Telegram/SourceFiles/codegen/emoji/options.h
index b4c070aca..c0ec444d0 100644
--- a/Telegram/SourceFiles/_other/memain.h
+++ b/Telegram/SourceFiles/codegen/emoji/options.h
@@ -18,6 +18,20 @@ to link the code of portions of this program with the OpenSSL library.
 Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
 Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 */
-#include <QtCore/QTimer>
+#pragma once
 
-#include "genemoji.h"
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+namespace codegen {
+namespace emoji {
+
+struct Options {
+	QString outputPath = ".";
+};
+
+// Parsing failed if inputPath is empty in the result.
+Options parseOptions();
+
+} // namespace emoji
+} // namespace codegen
diff --git a/Telegram/SourceFiles/codegen/numbers/options.cpp b/Telegram/SourceFiles/codegen/numbers/options.cpp
index 02d791056..7fad88751 100644
--- a/Telegram/SourceFiles/codegen/numbers/options.cpp
+++ b/Telegram/SourceFiles/codegen/numbers/options.cpp
@@ -38,9 +38,9 @@ using common::logError;
 
 Options parseOptions() {
 	Options result;
-	auto args(QCoreApplication::instance()->arguments());
-	for (int i = 1, count = args.size(); i < count; ++i) { // skip first
-		const auto &arg(args.at(i));
+	auto args = QCoreApplication::instance()->arguments();
+	for (auto i = 1, count = args.size(); i < count; ++i) { // skip first
+		auto &arg = args.at(i);
 
 		// Output path
 		if (arg == "-o") {
diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h
index 801f0ea63..235690160 100644
--- a/Telegram/SourceFiles/config.h
+++ b/Telegram/SourceFiles/config.h
@@ -87,7 +87,6 @@ enum {
 
 	AVBlockSize = 4096, // 4Kb for ffmpeg blocksize
 
-	SaveRecentEmojisTimeout = 3000, // 3 secs
 	SaveWindowPositionTimeout = 1000, // 1 sec
 
 	AutoSearchTimeout = 900, // 0.9 secs
diff --git a/Telegram/SourceFiles/history/field_autocomplete.cpp b/Telegram/SourceFiles/history/field_autocomplete.cpp
index ba8e32e2e..eb7164464 100644
--- a/Telegram/SourceFiles/history/field_autocomplete.cpp
+++ b/Telegram/SourceFiles/history/field_autocomplete.cpp
@@ -77,7 +77,7 @@ void FieldAutocomplete::showFiltered(PeerData *peer, QString query, bool addInli
 		return;
 	}
 
-	_emoji = EmojiPtr();
+	_emoji = nullptr;
 
 	query = query.toLower();
 	auto type = Type::Stickers;
@@ -147,17 +147,18 @@ void FieldAutocomplete::updateFiltered(bool resetScroll) {
 	internal::BotCommandRows brows;
 	StickerPack srows;
 	if (_emoji) {
+		auto original = _emoji->original();
 		QMap<uint64, uint64> setsToRequest;
 		auto &sets = Global::RefStickerSets();
 		auto &order = Global::StickerSetsOrder();
-		for (int i = 0, l = order.size(); i < l; ++i) {
-			auto it = sets.find(order.at(i));
+		for (auto i = 0, l = order.size(); i != l; ++i) {
+			auto it = sets.find(order[i]);
 			if (it != sets.cend()) {
 				if (it->emoji.isEmpty()) {
 					setsToRequest.insert(it->id, it->access);
 					it->flags |= MTPDstickerSet_ClientFlag::f_not_loaded;
 				} else if (!(it->flags & MTPDstickerSet::Flag::f_archived)) {
-					StickersByEmojiMap::const_iterator i = it->emoji.constFind(emojiGetNoColor(_emoji));
+					auto i = it->emoji.constFind(original);
 					if (i != it->emoji.cend()) {
 						srows += *i;
 					}
diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp
index c3d303ab0..5ae6161db 100644
--- a/Telegram/SourceFiles/history/history_media_types.cpp
+++ b/Telegram/SourceFiles/history/history_media_types.cpp
@@ -2048,8 +2048,8 @@ HistorySticker::HistorySticker(HistoryItem *parent, DocumentData *document) : Hi
 , _data(document)
 , _emoji(_data->sticker()->alt) {
 	_data->thumb->load();
-	if (auto e = emojiFromText(_emoji)) {
-		_emoji = emojiString(e);
+	if (auto emoji = Ui::Emoji::Find(_emoji)) {
+		_emoji = emoji->text();
 	}
 }
 
diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp
index 96c416fb2..45c0530b9 100644
--- a/Telegram/SourceFiles/historywidget.cpp
+++ b/Telegram/SourceFiles/historywidget.cpp
@@ -131,11 +131,6 @@ HistoryInner::HistoryInner(HistoryWidget *historyWidget, Ui::ScrollArea *scroll,
 	_touchSelectTimer.setSingleShot(true);
 	connect(&_touchSelectTimer, SIGNAL(timeout()), this, SLOT(onTouchSelect()));
 
-	auto tmp = App::LambdaDelayed(200, this, [this] {
-		int a = 0;
-	});
-	tmp();
-
 	setAttribute(Qt::WA_AcceptTouchEvents);
 	connect(&_touchScrollTimer, SIGNAL(timeout()), this, SLOT(onTouchScrollTimer()));
 
@@ -3319,7 +3314,7 @@ void HistoryWidget::updateStickersByEmoji() {
 	int len = 0;
 	if (!_editMsgId) {
 		auto &text = _field->getTextWithTags().text;
-		if (auto emoji = emojiFromText(text, &len)) {
+		if (auto emoji = Ui::Emoji::Find(text, &len)) {
 			if (text.size() > len) {
 				len = 0;
 			} else {
diff --git a/Telegram/SourceFiles/layerwidget.cpp b/Telegram/SourceFiles/layerwidget.cpp
index f845a0315..0003cc885 100644
--- a/Telegram/SourceFiles/layerwidget.cpp
+++ b/Telegram/SourceFiles/layerwidget.cpp
@@ -719,7 +719,7 @@ LayerStackWidget::~LayerStackWidget() {
 }
 
 MediaPreviewWidget::MediaPreviewWidget(QWidget *parent) : TWidget(parent)
-, _emojiSize(EmojiSizes[EIndex + 1] / cIntRetinaFactor()) {
+, _emojiSize(Ui::Emoji::Size(Ui::Emoji::Index() + 1) / cIntRetinaFactor()) {
 	setAttribute(Qt::WA_TransparentForMouseEvents);
 	subscribe(FileDownload::ImageLoaded(), [this] { update(); });
 }
@@ -744,12 +744,12 @@ void MediaPreviewWidget::paintEvent(QPaintEvent *e) {
 	p.fillRect(r, st::stickerPreviewBg);
 	p.drawPixmap((width() - w) / 2, (height() - h) / 2, image);
 	if (!_emojiList.isEmpty()) {
-		int emojiCount = _emojiList.size();
-		int emojiWidth = (emojiCount * _emojiSize) + (emojiCount - 1) * st::stickerEmojiSkip;
-		int emojiLeft = (width() - emojiWidth) / 2;
-		int esize = EmojiSizes[EIndex + 1];
+		auto emojiCount = _emojiList.size();
+		auto emojiWidth = (emojiCount * _emojiSize) + (emojiCount - 1) * st::stickerEmojiSkip;
+		auto emojiLeft = (width() - emojiWidth) / 2;
+		auto esize = Ui::Emoji::Size(Ui::Emoji::Index() + 1);
 		for_const (auto emoji, _emojiList) {
-			p.drawPixmapLeft(emojiLeft, (height() - h) / 2 - (_emojiSize * 2), width(), App::emojiLarge(), QRect(emoji->x * esize, emoji->y * esize, esize, esize));
+			p.drawPixmapLeft(emojiLeft, (height() - h) / 2 - (_emojiSize * 2), width(), App::emojiLarge(), QRect(emoji->x() * esize, emoji->y() * esize, esize, esize));
 			emojiLeft += _emojiSize + st::stickerEmojiSkip;
 		}
 	}
@@ -837,7 +837,7 @@ void MediaPreviewWidget::fillEmojiString() {
 			_emojiList = getStickerEmojiList(inputSet.c_inputStickerSetID().vid.v);
 		} else {
 			_emojiList.clear();
-			if (auto emoji = emojiFromText(sticker->alt)) {
+			if (auto emoji = Ui::Emoji::Find(sticker->alt)) {
 				_emojiList.append(emoji);
 			}
 		}
diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp
index 88be5f06d..def584f5d 100644
--- a/Telegram/SourceFiles/localstorage.cpp
+++ b/Telegram/SourceFiles/localstorage.cpp
@@ -522,7 +522,7 @@ enum {
 	dbiDownloadPathOld = 0x15,
 	dbiScale = 0x16,
 	dbiEmojiTabOld = 0x17,
-	dbiRecentEmojisOld = 0x18,
+	dbiRecentEmojiOldOld = 0x18,
 	dbiLoggedPhoneNumber = 0x19,
 	dbiMutedPeers = 0x1a,
 	// 0x1b reserved
@@ -534,8 +534,8 @@ enum {
 	dbiTileBackground = 0x21,
 	dbiAutoLock = 0x22,
 	dbiDialogLastPath = 0x23,
-	dbiRecentEmojis = 0x24,
-	dbiEmojiVariants = 0x25,
+	dbiRecentEmojiOld = 0x24,
+	dbiEmojiVariantsOld = 0x25,
 	dbiRecentStickers = 0x26,
 	dbiDcOption = 0x27,
 	dbiTryIPv6 = 0x28,
@@ -550,6 +550,8 @@ enum {
 	dbiAutoPlay = 0x37,
 	dbiAdaptiveForWide = 0x38,
 	dbiHiddenPinnedMessages = 0x39,
+	dbiRecentEmoji = 0x3a,
+	dbiEmojiVariants = 0x3b,
 	dbiDialogsMode = 0x40,
 	dbiModerateMode = 0x41,
 	dbiVideoVolume = 0x42,
@@ -1308,40 +1310,61 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version) {
 		// deprecated
 	} break;
 
-	case dbiRecentEmojisOld: {
-		RecentEmojisPreloadOld v;
+	case dbiRecentEmojiOldOld: {
+		RecentEmojiPreloadOldOld v;
 		stream >> v;
 		if (!_checkStreamStatus(stream)) return false;
 
 		if (!v.isEmpty()) {
-			RecentEmojisPreload p;
+			RecentEmojiPreload p;
 			p.reserve(v.size());
-			for (int i = 0; i < v.size(); ++i) {
-				uint64 e(v.at(i).first);
-				switch (e) {
-				case 0xD83CDDEFLLU: e = 0xD83CDDEFD83CDDF5LLU; break;
-				case 0xD83CDDF0LLU: e = 0xD83CDDF0D83CDDF7LLU; break;
-				case 0xD83CDDE9LLU: e = 0xD83CDDE9D83CDDEALLU; break;
-				case 0xD83CDDE8LLU: e = 0xD83CDDE8D83CDDF3LLU; break;
-				case 0xD83CDDFALLU: e = 0xD83CDDFAD83CDDF8LLU; break;
-				case 0xD83CDDEBLLU: e = 0xD83CDDEBD83CDDF7LLU; break;
-				case 0xD83CDDEALLU: e = 0xD83CDDEAD83CDDF8LLU; break;
-				case 0xD83CDDEELLU: e = 0xD83CDDEED83CDDF9LLU; break;
-				case 0xD83CDDF7LLU: e = 0xD83CDDF7D83CDDFALLU; break;
-				case 0xD83CDDECLLU: e = 0xD83CDDECD83CDDE7LLU; break;
+			for (auto &item : v) {
+				auto oldKey = uint64(item.first);
+				switch (oldKey) {
+				case 0xD83CDDEFLLU: oldKey = 0xD83CDDEFD83CDDF5LLU; break;
+				case 0xD83CDDF0LLU: oldKey = 0xD83CDDF0D83CDDF7LLU; break;
+				case 0xD83CDDE9LLU: oldKey = 0xD83CDDE9D83CDDEALLU; break;
+				case 0xD83CDDE8LLU: oldKey = 0xD83CDDE8D83CDDF3LLU; break;
+				case 0xD83CDDFALLU: oldKey = 0xD83CDDFAD83CDDF8LLU; break;
+				case 0xD83CDDEBLLU: oldKey = 0xD83CDDEBD83CDDF7LLU; break;
+				case 0xD83CDDEALLU: oldKey = 0xD83CDDEAD83CDDF8LLU; break;
+				case 0xD83CDDEELLU: oldKey = 0xD83CDDEED83CDDF9LLU; break;
+				case 0xD83CDDF7LLU: oldKey = 0xD83CDDF7D83CDDFALLU; break;
+				case 0xD83CDDECLLU: oldKey = 0xD83CDDECD83CDDE7LLU; break;
+				}
+				auto id = Ui::Emoji::IdFromOldKey(oldKey);
+				if (!id.isEmpty()) {
+					p.push_back(qMakePair(id, item.second));
 				}
-				p.push_back(qMakePair(e, v.at(i).second));
 			}
-			cSetRecentEmojisPreload(p);
+			cSetRecentEmojiPreload(p);
 		}
 	} break;
 
-	case dbiRecentEmojis: {
-		RecentEmojisPreload v;
+	case dbiRecentEmojiOld: {
+		RecentEmojiPreloadOld v;
 		stream >> v;
 		if (!_checkStreamStatus(stream)) return false;
 
-		cSetRecentEmojisPreload(v);
+		if (!v.isEmpty()) {
+			RecentEmojiPreload p;
+			p.reserve(v.size());
+			for (auto &item : v) {
+				auto id = Ui::Emoji::IdFromOldKey(item.first);
+				if (!id.isEmpty()) {
+					p.push_back(qMakePair(id, item.second));
+				}
+			}
+			cSetRecentEmojiPreload(p);
+		}
+	} break;
+
+	case dbiRecentEmoji: {
+		RecentEmojiPreload v;
+		stream >> v;
+		if (!_checkStreamStatus(stream)) return false;
+
+		cSetRecentEmojiPreload(v);
 	} break;
 
 	case dbiRecentStickers: {
@@ -1352,6 +1375,24 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version) {
 		cSetRecentStickersPreload(v);
 	} break;
 
+	case dbiEmojiVariantsOld: {
+		EmojiColorVariantsOld v;
+		stream >> v;
+		if (!_checkStreamStatus(stream)) return false;
+
+		EmojiColorVariants variants;
+		for (auto i = v.cbegin(), e = v.cend(); i != e; ++i) {
+			auto id = Ui::Emoji::IdFromOldKey(static_cast<uint64>(i.key()));
+			if (!id.isEmpty()) {
+				auto index = Ui::Emoji::ColorIndexFromOldKey(i.value());
+				if (index >= 0) {
+					variants.insert(id, index);
+				}
+			}
+		}
+		cSetEmojiVariants(variants);
+	} break;
+
 	case dbiEmojiVariants: {
 		EmojiColorVariants v;
 		stream >> v;
@@ -1360,7 +1401,6 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version) {
 		cSetEmojiVariants(v);
 	} break;
 
-
 	case dbiHiddenPinnedMessages: {
 		Global::HiddenPinnedMessagesMap v;
 		stream >> v;
@@ -1620,9 +1660,22 @@ void _writeUserSettings() {
 		_writeMap(WriteMapFast);
 	}
 
+	auto recentEmojiPreloadData = cRecentEmojiPreload();
+	if (recentEmojiPreloadData.isEmpty()) {
+		recentEmojiPreloadData.reserve(cGetRecentEmoji().size());
+		for (auto &item : cGetRecentEmoji()) {
+			recentEmojiPreloadData.push_back(qMakePair(item.first->id(), item.second));
+		}
+	}
+
 	uint32 size = 21 * (sizeof(quint32) + sizeof(qint32));
 	size += sizeof(quint32) + Serialize::stringSize(Global::AskDownloadPath() ? QString() : Global::DownloadPath()) + Serialize::bytearraySize(Global::AskDownloadPath() ? QByteArray() : Global::DownloadPathBookmark());
-	size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort));
+
+	size += sizeof(quint32) + sizeof(qint32);
+	for (auto &item : recentEmojiPreloadData) {
+		size += Serialize::stringSize(item.first) + sizeof(item.second);
+	}
+
 	size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64));
 	size += sizeof(quint32) + sizeof(qint32) + (cRecentStickersPreload().isEmpty() ? cGetRecentStickers().size() : cRecentStickersPreload().size()) * (sizeof(uint64) + sizeof(ushort));
 	size += sizeof(quint32) + Serialize::stringSize(cDialogLastPath());
@@ -1659,14 +1712,7 @@ void _writeUserSettings() {
 	data.stream << quint32(dbiDialogsWidthRatio) << qint32(snap(qRound(Global::DialogsWidthRatio() * 1000000), 0, 1000000));
 
 	{
-		RecentEmojisPreload v(cRecentEmojisPreload());
-		if (v.isEmpty()) {
-			v.reserve(cGetRecentEmojis().size());
-			for (RecentEmojiPack::const_iterator i = cGetRecentEmojis().cbegin(), e = cGetRecentEmojis().cend(); i != e; ++i) {
-				v.push_back(qMakePair(emojiKey(i->first), i->second));
-			}
-		}
-		data.stream << quint32(dbiRecentEmojis) << v;
+		data.stream << quint32(dbiRecentEmoji) << recentEmojiPreloadData;
 	}
 	data.stream << quint32(dbiEmojiVariants) << cEmojiVariants();
 	{
@@ -3097,8 +3143,8 @@ void _writeStickerSet(QDataStream &stream, const Stickers::Set &set) {
 
 	if (AppVersion > 9018) {
 		stream << qint32(set.emoji.size());
-		for (StickersByEmojiMap::const_iterator j = set.emoji.cbegin(), e = set.emoji.cend(); j != e; ++j) {
-			stream << emojiString(j.key()) << qint32(j->size());
+		for (auto j = set.emoji.cbegin(), e = set.emoji.cend(); j != e; ++j) {
+			stream << j.key()->id() << qint32(j->size());
 			for (int32 k = 0, l = j->size(); k < l; ++k) {
 				stream << quint64(j->at(k)->id);
 			}
@@ -3148,7 +3194,7 @@ void _writeStickerSets(FileKey &stickersKey, CheckSet checkSet, const Stickers::
 
 		size += sizeof(qint32); // emojiCount
 		for (auto j = set.emoji.cbegin(), e = set.emoji.cend(); j != e; ++j) {
-			size += Serialize::stringSize(emojiString(j.key())) + sizeof(qint32) + (j->size() * sizeof(quint64));
+			size += Serialize::stringSize(j.key()->id()) + sizeof(qint32) + (j->size() * sizeof(quint64));
 		}
 
 		++setsCount;
@@ -3304,8 +3350,9 @@ void _readStickerSets(FileKey &stickersKey, Stickers::Order *outOrder = nullptr,
 					pack.push_back(doc);
 				}
 				if (fillStickers) {
-					if (auto e = emojiGetNoColor(emojiFromText(emojiString))) {
-						set.emoji.insert(e, pack);
+					if (auto emoji = Ui::Emoji::Find(emojiString)) {
+						emoji = emoji->original();
+						set.emoji.insert(emoji, pack);
 					}
 				}
 			}
diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp
index 117c575da..3a74d9450 100644
--- a/Telegram/SourceFiles/mainwidget.cpp
+++ b/Telegram/SourceFiles/mainwidget.cpp
@@ -5203,20 +5203,22 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
 					}
 					it->emoji.clear();
 					auto &packs = set.vpacks.c_vector().v;
-					for (int i = 0, l = packs.size(); i < l; ++i) {
-						if (packs.at(i).type() != mtpc_stickerPack) continue;
+					for (auto i = 0, l = packs.size(); i != l; ++i) {
+						if (packs[i].type() != mtpc_stickerPack) continue;
 						auto &pack = packs.at(i).c_stickerPack();
-						if (auto e = emojiGetNoColor(emojiFromText(qs(pack.vemoticon)))) {
+						if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) {
+							emoji = emoji->original();
 							auto &stickers = pack.vdocuments.c_vector().v;
+							
 							StickerPack p;
 							p.reserve(stickers.size());
-							for (int j = 0, c = stickers.size(); j < c; ++j) {
-								auto doc = App::document(stickers.at(j).v);
+							for (auto j = 0, c = stickers.size(); j != c; ++j) {
+								auto doc = App::document(stickers[j].v);
 								if (!doc || !doc->sticker()) continue;
 
 								p.push_back(doc);
 							}
-							it->emoji.insert(e, p);
+							it->emoji.insert(emoji, p);
 						}
 					}
 
diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp
index eebfbc1b6..69aaf46cd 100644
--- a/Telegram/SourceFiles/settings.cpp
+++ b/Telegram/SourceFiles/settings.cpp
@@ -74,8 +74,8 @@ bool gCompressPastedImage = true;
 
 QString gTimeFormat = qsl("hh:mm");
 
-RecentEmojiPack gRecentEmojis;
-RecentEmojisPreload gRecentEmojisPreload;
+RecentEmojiPack gRecentEmoji;
+RecentEmojiPreload gRecentEmojiPreload;
 EmojiColorVariants gEmojiVariants;
 
 RecentStickerPreload gRecentStickersPreload;
@@ -223,30 +223,27 @@ void settingsParseArgs(int argc, char *argv[]) {
 	}
 }
 
-RecentEmojiPack &cGetRecentEmojis() {
-	if (cRecentEmojis().isEmpty()) {
-		RecentEmojiPack r;
-		if (!cRecentEmojisPreload().isEmpty()) {
-			RecentEmojisPreload p(cRecentEmojisPreload());
-			cSetRecentEmojisPreload(RecentEmojisPreload());
-			r.reserve(p.size());
-			for (RecentEmojisPreload::const_iterator i = p.cbegin(), e = p.cend(); i != e; ++i) {
-				uint64 code = ((!(i->first & 0xFFFFFFFF00000000LLU) && (i->first & 0xFFFFU) == 0xFE0FU)) ? ((i->first >> 16) & 0xFFFFU) : i->first;
-				EmojiPtr ep(emojiFromKey(code));
-				if (!ep) continue;
-
-				if (ep->postfix) {
-					int32 j = 0, l = r.size();
-					for (; j < l; ++j) {
-						if (emojiKey(r[j].first) == code) {
-							break;
-						}
-					}
-					if (j < l) {
-						continue;
+RecentEmojiPack &cGetRecentEmoji() {
+	if (cRecentEmoji().isEmpty()) {
+		RecentEmojiPack result;
+		auto haveAlready = [&result](EmojiPtr emoji) {
+			for (auto &row : result) {
+				if (row.first->id() == emoji->id()) {
+					return true;
+				}
+			}
+			return false;
+		};
+		if (!cRecentEmojiPreload().isEmpty()) {
+			auto preload = cRecentEmojiPreload();
+			cSetRecentEmojiPreload(RecentEmojiPreload());
+			result.reserve(preload.size());
+			for (auto i = preload.cbegin(), e = preload.cend(); i != e; ++i) {
+				if (auto emoji = Ui::Emoji::Find(i->first)) {
+					if (!haveAlready(emoji)) {
+						result.push_back(qMakePair(emoji, i->second));
 					}
 				}
-				r.push_back(qMakePair(ep, i->second));
 			}
 		}
 		uint64 defaultRecent[] = {
@@ -285,25 +282,18 @@ RecentEmojiPack &cGetRecentEmojis() {
 			0xD83DDE10LLU,
 			0xD83DDE15LLU,
 		};
-		for (int32 i = 0, s = sizeof(defaultRecent) / sizeof(defaultRecent[0]); i < s; ++i) {
-			if (r.size() >= EmojiPanPerRow * EmojiPanRowsPerPage) break;
+		for (auto oldKey : defaultRecent) {
+			if (result.size() >= EmojiPanPerRow * EmojiPanRowsPerPage) break;
 
-			EmojiPtr ep(emojiGet(defaultRecent[i]));
-			if (!ep || ep == TwoSymbolEmoji) continue;
-
-			int32 j = 0, l = r.size();
-			for (; j < l; ++j) {
-				if (r[j].first == ep) {
-					break;
+			if (auto emoji = Ui::Emoji::FromOldKey(oldKey)) {
+				if (!haveAlready(emoji)) {
+					result.push_back(qMakePair(emoji, 1));
 				}
 			}
-			if (j < l) continue;
-
-			r.push_back(qMakePair(ep, 1));
 		}
-		cSetRecentEmojis(r);
+		cSetRecentEmoji(result);
 	}
-	return cRefRecentEmojis();
+	return cRefRecentEmoji();
 }
 
 RecentStickerPack &cGetRecentStickers() {
diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h
index 2801d48b1..61238346b 100644
--- a/Telegram/SourceFiles/settings.h
+++ b/Telegram/SourceFiles/settings.h
@@ -141,29 +141,26 @@ T convertScale(T v) {
 	return v;
 }
 
-struct EmojiData {
-	EmojiData(uint16 x, uint16 y, uint32 code, uint32 code2, uint16 len, uint16 postfix, uint32 color) : x(x), y(y), code(code), code2(code2), len(len), postfix(postfix), color(color) {
-	}
-	uint16 x, y;
-	uint32 code, code2;
-	uint16 len;
-	uint16 postfix;
-	uint32 color;
-};
+namespace Ui {
+namespace Emoji {
+class One;
+} // namespace Emoji
+} // namespace Ui
 
-typedef const EmojiData *EmojiPtr;
-static EmojiPtr TwoSymbolEmoji = EmojiPtr(0x01);
+using EmojiPtr = const Ui::Emoji::One*;
 
-typedef QVector<EmojiPtr> EmojiPack;
-typedef QVector<QPair<uint32, ushort> > RecentEmojisPreloadOld;
-typedef QVector<QPair<uint64, ushort> > RecentEmojisPreload;
-typedef QVector<QPair<EmojiPtr, ushort> > RecentEmojiPack;
-typedef QMap<uint32, uint64> EmojiColorVariants;
-DeclareRefSetting(RecentEmojiPack, RecentEmojis);
-DeclareSetting(RecentEmojisPreload, RecentEmojisPreload);
+using EmojiPack = QVector<EmojiPtr>;
+using RecentEmojiPreloadOldOld = QVector<QPair<uint32, ushort>>;
+using RecentEmojiPreloadOld = QVector<QPair<uint64, ushort>>;
+using RecentEmojiPreload = QVector<QPair<QString, ushort>>;
+using RecentEmojiPack = QVector<QPair<EmojiPtr, ushort>>;
+using EmojiColorVariantsOld = QMap<uint32, uint64>;
+using EmojiColorVariants = QMap<QString, int>;
+DeclareRefSetting(RecentEmojiPack, RecentEmoji);
+DeclareSetting(RecentEmojiPreload, RecentEmojiPreload);
 DeclareRefSetting(EmojiColorVariants, EmojiVariants);
 
-RecentEmojiPack &cGetRecentEmojis();
+RecentEmojiPack &cGetRecentEmoji();
 
 class DocumentData;
 typedef QVector<DocumentData*> StickerPack;
diff --git a/Telegram/SourceFiles/stickers/emoji_pan.cpp b/Telegram/SourceFiles/stickers/emoji_pan.cpp
index 9570d20e9..0a12c8f1b 100644
--- a/Telegram/SourceFiles/stickers/emoji_pan.cpp
+++ b/Telegram/SourceFiles/stickers/emoji_pan.cpp
@@ -40,13 +40,16 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 #include "mainwidget.h"
 
 namespace internal {
+namespace {
+
+constexpr auto kSaveRecentEmojiTimeout = 3000;
+
+} // namespace
 
 EmojiColorPicker::EmojiColorPicker(QWidget *parent) : TWidget(parent) {
-	memset(_variants, 0, sizeof(_variants));
-
 	setMouseTracking(true);
 
-	auto w = st::emojiPanMargins.left() + st::emojiPanSize.width() * (EmojiColorsCount + 1) + 4 * st::emojiColorsPadding + st::emojiColorsSep + st::emojiPanMargins.right();
+	auto w = st::emojiPanMargins.left() + st::emojiPanSize.width() + st::emojiColorsSep + st::emojiPanMargins.right();
 	auto h = st::emojiPanMargins.top() + 2 * st::emojiColorsPadding + st::emojiPanSize.height() + st::emojiPanMargins.bottom();
 	resize(w, h);
 
@@ -54,19 +57,20 @@ EmojiColorPicker::EmojiColorPicker(QWidget *parent) : TWidget(parent) {
 	connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(hideAnimated()));
 }
 
-void EmojiColorPicker::showEmoji(uint32 code) {
-	EmojiPtr e = emojiGet(code);
-	if (!e || e == TwoSymbolEmoji || !e->color) {
+void EmojiColorPicker::showEmoji(EmojiPtr emoji) {
+	if (!emoji || !emoji->hasVariants()) {
 		return;
 	}
 	_ignoreShow = false;
 
-	_variants[0] = e;
-	_variants[1] = emojiGet(e, 0xD83CDFFB);
-	_variants[2] = emojiGet(e, 0xD83CDFFC);
-	_variants[3] = emojiGet(e, 0xD83CDFFD);
-	_variants[4] = emojiGet(e, 0xD83CDFFE);
-	_variants[5] = emojiGet(e, 0xD83CDFFF);
+	_variants.resize(emoji->variantsCount() + 1);
+	for (auto i = 0, size = _variants.size(); i != size; ++i) {
+		_variants[i] = emoji->variant(i);
+	}
+
+	auto w = st::emojiPanMargins.left() + st::emojiPanSize.width() * _variants.size() + (_variants.size() - 2) * st::emojiColorsPadding + st::emojiColorsSep + st::emojiPanMargins.right();
+	auto h = st::emojiPanMargins.top() + 2 * st::emojiColorsPadding + st::emojiPanSize.height() + st::emojiPanMargins.bottom();
+	resize(w, h);
 
 	if (!_cache.isNull()) _cache = QPixmap();
 	showAnimated();
@@ -99,8 +103,8 @@ void EmojiColorPicker::paintEvent(QPaintEvent *e) {
 	if (rtl()) x = width() - x - st::emojiColorsSep;
 	p.fillRect(x, st::emojiPanMargins.top() + st::emojiColorsPadding, st::emojiColorsSep, inner.height() - st::emojiColorsPadding * 2, st::emojiColorsSepColor);
 
-	if (!_variants[0]) return;
-	for (int i = 0; i < EmojiColorsCount + 1; ++i) {
+	if (_variants.isEmpty()) return;
+	for (auto i = 0, count = _variants.size(); i != count; ++i) {
 		drawVariant(p, i);
 	}
 }
@@ -212,7 +216,7 @@ void EmojiColorPicker::updateSelected() {
 			newSelected = 0;
 		} else {
 			x -= st::emojiPanSize.width() + 2 * st::emojiColorsPadding + st::emojiColorsSep;
-			if (x >= 0 && x < st::emojiPanSize.width() * EmojiColorsCount) {
+			if (x >= 0 && x < st::emojiPanSize.width() * (_variants.size() - 1)) {
 				newSelected = (x / st::emojiPanSize.width()) + 1;
 			}
 		}
@@ -242,8 +246,8 @@ void EmojiColorPicker::drawVariant(Painter &p, int variant) {
 		if (rtl()) tl.setX(width() - tl.x() - st::emojiPanSize.width());
 		App::roundRect(p, QRect(tl, st::emojiPanSize), st::emojiPanHover, StickerHoverCorners);
 	}
-	int esize = EmojiSizes[EIndex + 1];
-	p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojiLarge(), QRect(_variants[variant]->x * esize, _variants[variant]->y * esize, esize, esize));
+	auto esize = Ui::Emoji::Size(Ui::Emoji::Index() + 1);
+	p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojiLarge(), QRect(_variants[variant]->x() * esize, _variants[variant]->y() * esize, esize, esize));
 }
 
 EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent)
@@ -256,10 +260,10 @@ EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent)
 
 	_picker->hide();
 
-	_esize = EmojiSizes[EIndex + 1];
+	_esize = Ui::Emoji::Size(Ui::Emoji::Index() + 1);
 
 	for (auto i = 0; i != emojiTabCount; ++i) {
-		_counts[i] = emojiPackCount(emojiTabAtIndex(i));
+		_counts[i] = Ui::Emoji::GetPackCount(emojiTabAtIndex(i));
 	}
 
 	_showPickerTimer.setSingleShot(true);
@@ -279,9 +283,10 @@ void EmojiPanInner::setVisibleTopBottom(int visibleTop, int visibleBottom) {
 }
 
 int EmojiPanInner::countHeight() {
-	int result = 0;
-	for (int i = 0; i < emojiTabCount; ++i) {
-		int cnt = emojiPackCount(emojiTabAtIndex(i)), rows = (cnt / EmojiPanPerRow) + ((cnt % EmojiPanPerRow) ? 1 : 0);
+	auto result = 0;
+	for (auto i = 0; i != emojiTabCount; ++i) {
+		auto cnt = Ui::Emoji::GetPackCount(emojiTabAtIndex(i));
+		auto rows = (cnt / EmojiPanPerRow) + ((cnt % EmojiPanPerRow) ? 1 : 0);
 		result += st::emojiPanHeader + rows * st::emojiPanSize.height();
 	}
 
@@ -314,18 +319,13 @@ void EmojiPanInner::paintEvent(QPaintEvent *e) {
 
 		y += st::emojiPanHeader;
 		if (_emojis[c].isEmpty()) {
-			_emojis[c] = emojiPack(emojiTabAtIndex(c));
+			_emojis[c] = Ui::Emoji::GetPack(emojiTabAtIndex(c));
 			if (emojiTabAtIndex(c) != dbietRecent) {
-				for (EmojiPack::iterator i = _emojis[c].begin(), e = _emojis[c].end(); i != e; ++i) {
-					if ((*i)->color) {
-						EmojiColorVariants::const_iterator j = cEmojiVariants().constFind((*i)->code);
+				for (auto &emoji : _emojis[c]) {
+					if (emoji->hasVariants()) {
+						auto j = cEmojiVariants().constFind(emoji->nonColoredId());
 						if (j != cEmojiVariants().cend()) {
-							EmojiPtr replace = emojiFromKey(j.value());
-							if (replace) {
-								if (replace != TwoSymbolEmoji && replace->code == (*i)->code && replace->code2 == (*i)->code2) {
-									*i = replace;
-								}
-							}
+							emoji = emoji->variant(j.value());
 						}
 					}
 				}
@@ -347,7 +347,7 @@ void EmojiPanInner::paintEvent(QPaintEvent *e) {
 					if (rtl()) tl.setX(width() - tl.x() - st::emojiPanSize.width());
 					App::roundRect(p, QRect(tl, st::emojiPanSize), st::emojiPanHover, StickerHoverCorners);
 				}
-				p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (_esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (_esize / cIntRetinaFactor())) / 2, width(), App::emojiLarge(), QRect(_emojis[c][index]->x * _esize, _emojis[c][index]->y * _esize, _esize, _esize));
+				p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (_esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (_esize / cIntRetinaFactor())) / 2, width(), App::emojiLarge(), QRect(_emojis[c][index]->x() * _esize, _emojis[c][index]->y() * _esize, _esize, _esize));
 			}
 		}
 	}
@@ -373,10 +373,10 @@ void EmojiPanInner::mousePressEvent(QMouseEvent *e) {
 
 	if (_selected >= 0) {
 		int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift;
-		if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->color) {
+		if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->hasVariants()) {
 			_pickerSel = _selected;
 			setCursor(style::cur_default);
-			if (cEmojiVariants().constFind(_emojis[tab][sel]->code) == cEmojiVariants().cend()) {
+			if (!cEmojiVariants().contains(_emojis[tab][sel]->nonColoredId())) {
 				onShowPicker();
 			} else {
 				_showPickerTimer.start(500);
@@ -395,8 +395,8 @@ void EmojiPanInner::mouseReleaseEvent(QMouseEvent *e) {
 			return _picker->handleMouseRelease(QCursor::pos());
 		} else if (_pickerSel >= 0) {
 			int tab = (_pickerSel / MatrixRowShift), sel = _pickerSel % MatrixRowShift;
-			if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->color) {
-				if (cEmojiVariants().constFind(_emojis[tab][sel]->code) != cEmojiVariants().cend()) {
+			if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->hasVariants()) {
+				if (cEmojiVariants().contains(_emojis[tab][sel]->nonColoredId())) {
 					_picker->hideAnimated();
 					_pickerSel = -1;
 				}
@@ -420,15 +420,15 @@ void EmojiPanInner::mouseReleaseEvent(QMouseEvent *e) {
 	int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift;
 	if (sel < _emojis[tab].size()) {
 		EmojiPtr emoji(_emojis[tab][sel]);
-		if (emoji->color && !_picker->isHidden()) return;
+		if (emoji->hasVariants() && !_picker->isHidden()) return;
 
 		selectEmoji(emoji);
 	}
 }
 
 void EmojiPanInner::selectEmoji(EmojiPtr emoji) {
-	RecentEmojiPack &recent(cGetRecentEmojis());
-	RecentEmojiPack::iterator i = recent.begin(), e = recent.end();
+	auto &recent = cGetRecentEmoji();
+	auto i = recent.begin(), e = recent.end();
 	for (; i != e; ++i) {
 		if (i->first == emoji) {
 			++i->second;
@@ -460,7 +460,7 @@ void EmojiPanInner::selectEmoji(EmojiPtr emoji) {
 			qSwap(*i, *(i - 1));
 		}
 	}
-	emit saveConfigDelayed(SaveRecentEmojisTimeout);
+	emit saveConfigDelayed(kSaveRecentEmojiTimeout);
 
 	emit selected(emoji);
 }
@@ -469,14 +469,16 @@ void EmojiPanInner::onShowPicker() {
 	if (_pickerSel < 0) return;
 
 	int tab = (_pickerSel / MatrixRowShift), sel = _pickerSel % MatrixRowShift;
-	if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->color) {
+	if (tab < emojiTabCount && sel < _emojis[tab].size() && _emojis[tab][sel]->hasVariants()) {
+		_picker->showEmoji(_emojis[tab][sel]);
+
 		int32 y = 0;
 		for (int c = 0; c <= tab; ++c) {
 			int32 size = (c == tab) ? (sel - (sel % EmojiPanPerRow)) : _counts[c], rows = (size / EmojiPanPerRow) + ((size % EmojiPanPerRow) ? 1 : 0);
 			y += st::emojiPanHeader + (rows * st::emojiPanSize.height());
 		}
 		y -= _picker->height() - st::buttonRadius + _visibleTop;
-		if (y < 0) {
+		if (y < st::emojiPanHeader) {
 			y += _picker->height() - st::buttonRadius + st::emojiPanSize.height() - st::buttonRadius;
 		}
 		int xmax = width() - _picker->width();
@@ -484,7 +486,6 @@ void EmojiPanInner::onShowPicker() {
 		if (rtl()) coef = 1. - coef;
 		_picker->move(qRound(xmax * coef), y);
 
-		_picker->showEmoji(_emojis[tab][sel]->code);
 		emit disableScroll(true);
 	}
 }
@@ -516,8 +517,8 @@ QRect EmojiPanInner::emojiRect(int tab, int sel) {
 }
 
 void EmojiPanInner::onColorSelected(EmojiPtr emoji) {
-	if (emoji->color) {
-		cRefEmojiVariants().insert(emoji->code, emojiKey(emoji));
+	if (emoji->colored()) {
+		cRefEmojiVariants().insert(emoji->nonColoredId(), emoji->variantIndex(emoji));
 	}
 	if (_pickerSel >= 0) {
 		int tab = (_pickerSel / MatrixRowShift), sel = _pickerSel % MatrixRowShift;
@@ -584,8 +585,8 @@ void EmojiPanInner::hideFinish() {
 
 void EmojiPanInner::refreshRecent() {
 	clearSelection();
-	_counts[0] = emojiPackCount(dbietRecent);
-	_emojis[0] = emojiPack(dbietRecent);
+	_counts[0] = Ui::Emoji::GetPackCount(dbietRecent);
+	_emojis[0] = Ui::Emoji::GetPack(dbietRecent);
 	int32 h = countHeight();
 	if (h != height()) {
 		resize(width(), h);
@@ -2199,7 +2200,7 @@ void StickerPanInner::showStickerSet(uint64 setId) {
 		if (!showingInlineItems()) {
 			_section = Section::Gifs;
 			cSetShowingSavedGifs(true);
-			emit saveConfigDelayed(SaveRecentEmojisTimeout);
+			emit saveConfigDelayed(kSaveRecentEmojiTimeout);
 		}
 		refreshSavedGifs();
 		emit scrollToY(0);
@@ -2215,7 +2216,7 @@ void StickerPanInner::showStickerSet(uint64 setId) {
 		_setGifCommand = false;
 
 		cSetShowingSavedGifs(false);
-		emit saveConfigDelayed(SaveRecentEmojisTimeout);
+		emit saveConfigDelayed(kSaveRecentEmojiTimeout);
 		Notify::clipStopperHidden(ClipStopperSavedGifsPanel);
 	}
 
diff --git a/Telegram/SourceFiles/stickers/emoji_pan.h b/Telegram/SourceFiles/stickers/emoji_pan.h
index 347f63128..4171aaa33 100644
--- a/Telegram/SourceFiles/stickers/emoji_pan.h
+++ b/Telegram/SourceFiles/stickers/emoji_pan.h
@@ -42,7 +42,6 @@ class RippleAnimation;
 namespace internal {
 
 constexpr int InlineItemsMaxPerRow = 5;
-constexpr int EmojiColorsCount = 5;
 
 using InlineResult = InlineBots::Result;
 using InlineResults = QList<InlineBots::Result*>;
@@ -64,7 +63,7 @@ class EmojiColorPicker : public TWidget {
 public:
 	EmojiColorPicker(QWidget *parent);
 
-	void showEmoji(uint32 code);
+	void showEmoji(EmojiPtr emoji);
 
 	void clearSelection();
 	void handleMouseMove(QPoint globalPos);
@@ -98,7 +97,7 @@ private:
 
 	bool _ignoreShow = false;
 
-	EmojiPtr _variants[EmojiColorsCount + 1];
+	QVector<EmojiPtr> _variants;
 
 	int _selected = -1;
 	int _pressedSel = -1;
diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp
index 58e38eb3b..ed70ce7ca 100644
--- a/Telegram/SourceFiles/structs.cpp
+++ b/Telegram/SourceFiles/structs.cpp
@@ -139,7 +139,7 @@ void EmptyUserpic::Impl::fillString(const QString &name) {
 	auto ch = name.constData(), end = ch + name.size();
 	while (ch != end) {
 		auto emojiLength = 0;
-		if (auto emoji = emojiFromText(ch, end, &emojiLength)) {
+		if (auto emoji = Ui::Emoji::Find(ch, end, &emojiLength)) {
 			ch += emojiLength;
 		} else if (ch->isHighSurrogate()) {
 			++ch;
diff --git a/Telegram/SourceFiles/ui/emoji_config.cpp b/Telegram/SourceFiles/ui/emoji_config.cpp
index ed0ee7858..073f08e22 100644
--- a/Telegram/SourceFiles/ui/emoji_config.cpp
+++ b/Telegram/SourceFiles/ui/emoji_config.cpp
@@ -1,9 +1,8 @@
 /*
-Created from emoji config by '/MetaEmoji' project
-
 WARNING! All changes made in this file will be lost!
+Created from 'empty' by 'codegen_emoji'
 
-This file is part of Telegram Desktop, 
+This file is part of Telegram Desktop,
 the official desktop version of Telegram messaging app, see https://telegram.org
 
 Telegram Desktop is free software: you can redistribute it and/or modify
@@ -23,4990 +22,13914 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
 Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 */
 #include "stdafx.h"
-#include "ui/emoji_config.h"
+#include "emoji_config.h"
 
+namespace Ui {
+namespace Emoji {
 namespace {
-	EmojiData *emojis = 0;
-	char emojisData[sizeof(EmojiData) * 1604];
+
+constexpr auto kCount = 2167;
+auto WorkingIndex = -1;
+
+QVector<One> Items;
+
+} // namespace
+
+namespace internal {
+
+EmojiPtr ByIndex(int index) {
+	return (index >= 0 && index < Items.size()) ? &Items[index] : nullptr;
 }
 
-int EmojiSizes[] = { 18, 22, 27, 36, 45 }, EIndex = -1, ESize = 0;
-const char *EmojiNames[] = { ":/gui/art/emoji.webp", ":/gui/art/emoji_125x.webp", ":/gui/art/emoji_150x.webp", ":/gui/art/emoji_200x.webp", ":/gui/art/emoji_250x.webp" }, *EName = 0;
-void emojiInit() {
-	DBIScale emojiForScale = cRetina() ? dbisTwo : cScale();
-
-	switch (emojiForScale) {
-		case dbisOne: EIndex = 0; break;
-		case dbisOneAndQuarter: EIndex = 1; break;
-		case dbisOneAndHalf: EIndex = 2; break;
-		case dbisTwo: EIndex = 3; break;
-	};
-	ESize = EmojiSizes[EIndex];
-	EName = EmojiNames[EIndex];
-
-	EmojiData *toFill = emojis = (EmojiData*)emojisData;
-
-	new (toFill++) EmojiData(4, 32, 0xA9U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(5, 32, 0xAEU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(13, 29, 0x203CU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(14, 29, 0x2049U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(6, 32, 0x2122U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(27, 31, 0x2139U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(19, 31, 0x2194U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(18, 31, 0x2195U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(17, 31, 0x2196U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(14, 31, 0x2197U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(15, 31, 0x2198U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(16, 31, 0x2199U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(22, 31, 0x21A9U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(21, 31, 0x21AAU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(30, 22, 0x231AU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(26, 23, 0x231BU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(34, 22, 0x2328U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(0, 31, 0x23E9U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(1, 31, 0x23EAU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(8, 31, 0x23EBU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(9, 31, 0x23ECU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(38, 30, 0x23EDU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(39, 30, 0x23EEU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(35, 30, 0x23EFU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(23, 23, 0x23F0U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(21, 23, 0x23F1U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(22, 23, 0x23F2U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(25, 23, 0x23F3U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(34, 30, 0x23F8U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(36, 30, 0x23F9U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(37, 30, 0x23FAU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(35, 29, 0x24C2U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(23, 32, 0x25AAU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(24, 32, 0x25ABU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(33, 30, 0x25B6U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(5, 31, 0x25C0U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(29, 32, 0x25FBU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(28, 32, 0x25FCU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(31, 32, 0x25FDU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(30, 32, 0x25FEU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(1, 15, 0x2600U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(6, 15, 0x2601U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(21, 15, 0x2602U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(15, 15, 0x2603U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(0, 15, 0x2604U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(13, 23, 0x260EU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(12, 32, 0x2611U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(22, 15, 0x2614U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(9, 17, 0x2615U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(39, 13, 0x2618U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(5, 4, 0x261DU, 0, 1, 0xFE0F, 0xFFFF040DU);
-	new (toFill++) EmojiData(19, 24, 0x2620U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(11, 28, 0x2622U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(12, 28, 0x2623U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(32, 27, 0x2626U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(25, 27, 0x262AU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(23, 27, 0x262EU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(31, 27, 0x262FU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(27, 27, 0x2638U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(3, 1, 0x2639U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(13, 0, 0x263AU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(35, 27, 0x2648U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(36, 27, 0x2649U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(37, 27, 0x264AU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(38, 27, 0x264BU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(39, 27, 0x264CU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(0, 28, 0x264DU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(1, 28, 0x264EU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(2, 28, 0x264FU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(3, 28, 0x2650U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(4, 28, 0x2651U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(5, 28, 0x2652U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(6, 28, 0x2653U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(4, 33, 0x2660U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(5, 33, 0x2663U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(6, 33, 0x2665U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(7, 33, 0x2666U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(2, 29, 0x2668U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(24, 29, 0x267BU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(2, 30, 0x267FU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(6, 24, 0x2692U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(3, 21, 0x2693U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(16, 24, 0x2694U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(3, 24, 0x2696U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(26, 24, 0x2697U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(10, 24, 0x2699U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(8, 28, 0x269BU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(19, 29, 0x269CU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(21, 29, 0x26A0U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(10, 15, 0x26A1U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(14, 32, 0x26AAU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(15, 32, 0x26ABU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(20, 24, 0x26B0U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(21, 24, 0x26B1U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(13, 17, 0x26BDU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(16, 17, 0x26BEU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(16, 15, 0x26C4U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(3, 15, 0x26C5U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(8, 15, 0x26C8U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(34, 27, 0x26CEU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(8, 24, 0x26CFU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(29, 11, 0x26D1U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(11, 24, 0x26D3U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(36, 28, 0x26D4U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(29, 22, 0x26E9U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(25, 22, 0x26EAU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(20, 21, 0x26F0U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(7, 25, 0x26F1U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(18, 21, 0x26F2U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(21, 17, 0x26F3U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(38, 20, 0x26F4U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(35, 20, 0x26F5U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(29, 17, 0x26F7U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(31, 17, 0x26F8U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(18, 18, 0x26F9U, 0, 1, 0, 0xFFFF0412U);
-	new (toFill++) EmojiData(26, 21, 0x26FAU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(5, 21, 0x26FDU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(27, 26, 0x2702U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(30, 29, 0x2705U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(32, 20, 0x2708U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(20, 25, 0x2709U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(3, 3, 0x270AU, 0, 1, 0, 0xFFFF0417U);
-	new (toFill++) EmojiData(21, 3, 0x270BU, 0, 1, 0, 0xFFFF041CU);
-	new (toFill++) EmojiData(9, 3, 0x270CU, 0, 1, 0, 0xFFFF0421U);
-	new (toFill++) EmojiData(19, 5, 0x270DU, 0, 1, 0, 0xFFFF0426U);
-	new (toFill++) EmojiData(3, 27, 0x270FU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(1, 27, 0x2712U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(36, 31, 0x2714U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(1, 32, 0x2716U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(24, 27, 0x271DU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(28, 27, 0x2721U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(39, 14, 0x2728U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(28, 29, 0x2733U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(20, 28, 0x2734U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(13, 15, 0x2744U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(27, 29, 0x2747U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(39, 28, 0x274CU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(29, 29, 0x274EU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(11, 29, 0x2753U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(12, 29, 0x2754U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(10, 29, 0x2755U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(9, 29, 0x2757U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(14, 27, 0x2763U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(8, 27, 0x2764U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(38, 31, 0x2795U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(39, 31, 0x2796U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(0, 32, 0x2797U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(10, 31, 0x27A1U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(35, 31, 0x27B0U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(33, 29, 0x27BFU, 0, 1, 0, 0);
-	new (toFill++) EmojiData(23, 31, 0x2934U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(24, 31, 0x2935U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(11, 31, 0x2B05U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(12, 31, 0x2B06U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(13, 31, 0x2B07U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(25, 32, 0x2B1BU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(26, 32, 0x2B1CU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(36, 14, 0x2B50U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(0, 29, 0x2B55U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(34, 31, 0x3030U, 0, 1, 0, 0);
-	new (toFill++) EmojiData(20, 29, 0x303DU, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(26, 28, 0x3297U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(25, 28, 0x3299U, 0, 1, 0xFE0F, 0);
-	new (toFill++) EmojiData(25, 31, 0x2320E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 31, 0x2A20E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 30, 0x3020E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 30, 0x3120E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 30, 0x3220E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 30, 0x3320E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 30, 0x3420E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 30, 0x3520E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 30, 0x3620E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 30, 0x3720E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 30, 0x3820E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 30, 0x3920E3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 33, 0xD83CDC04U, 0, 2, 0xFE0F, 0);
-	new (toFill++) EmojiData(2, 33, 0xD83CDCCFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 28, 0xD83CDD70U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 28, 0xD83CDD71U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 28, 0xD83CDD7EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 30, 0xD83CDD7FU, 0, 2, 0xFE0F, 0);
-	new (toFill++) EmojiData(32, 28, 0xD83CDD8EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 28, 0xD83CDD91U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 30, 0xD83CDD92U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 30, 0xD83CDD93U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 28, 0xD83CDD94U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 30, 0xD83CDD95U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 30, 0xD83CDD96U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 30, 0xD83CDD97U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 28, 0xD83CDD98U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 30, 0xD83CDD99U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 28, 0xD83CDD9AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 30, 0xD83CDE01U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 29, 0xD83CDE02U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 28, 0xD83CDE1AU, 0, 2, 0xFE0F, 0);
-	new (toFill++) EmojiData(25, 29, 0xD83CDE2FU, 0, 2, 0xFE0F, 0);
-	new (toFill++) EmojiData(29, 28, 0xD83CDE32U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 28, 0xD83CDE33U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 28, 0xD83CDE34U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 28, 0xD83CDE35U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 28, 0xD83CDE36U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 28, 0xD83CDE37U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 28, 0xD83CDE38U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 28, 0xD83CDE39U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 28, 0xD83CDE3AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 28, 0xD83CDE50U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 28, 0xD83CDE51U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 29, 0xD83CDF00U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 21, 0xD83CDF01U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 11, 0xD83CDF02U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 21, 0xD83CDF03U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 21, 0xD83CDF04U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 21, 0xD83CDF05U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 21, 0xD83CDF06U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 21, 0xD83CDF07U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 22, 0xD83CDF08U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 21, 0xD83CDF09U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 15, 0xD83CDF0AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 21, 0xD83CDF0BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 22, 0xD83CDF0CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 14, 0xD83CDF0DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 14, 0xD83CDF0EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 14, 0xD83CDF0FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 29, 0xD83CDF10U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 14, 0xD83CDF11U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 14, 0xD83CDF12U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 14, 0xD83CDF13U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 14, 0xD83CDF14U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 14, 0xD83CDF15U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 14, 0xD83CDF16U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 14, 0xD83CDF17U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 14, 0xD83CDF18U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 14, 0xD83CDF19U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 14, 0xD83CDF1AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 14, 0xD83CDF1BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 14, 0xD83CDF1CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 14, 0xD83CDF1DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 14, 0xD83CDF1EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 14, 0xD83CDF1FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 22, 0xD83CDF20U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 24, 0xD83CDF21U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 15, 0xD83CDF24U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 15, 0xD83CDF25U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 15, 0xD83CDF26U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 15, 0xD83CDF27U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 15, 0xD83CDF28U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 15, 0xD83CDF29U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 15, 0xD83CDF2AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 15, 0xD83CDF2BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 15, 0xD83CDF2CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 16, 0xD83CDF2DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 16, 0xD83CDF2EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 16, 0xD83CDF2FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 14, 0xD83CDF30U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 13, 0xD83CDF31U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 13, 0xD83CDF32U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 13, 0xD83CDF33U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 13, 0xD83CDF34U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 13, 0xD83CDF35U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 16, 0xD83CDF36U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 14, 0xD83CDF37U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 14, 0xD83CDF38U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 14, 0xD83CDF39U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 14, 0xD83CDF3AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 14, 0xD83CDF3BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 14, 0xD83CDF3CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 16, 0xD83CDF3DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 14, 0xD83CDF3EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 13, 0xD83CDF3FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 14, 0xD83CDF40U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 14, 0xD83CDF41U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 14, 0xD83CDF42U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 14, 0xD83CDF43U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 14, 0xD83CDF44U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 15, 0xD83CDF45U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 16, 0xD83CDF46U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 15, 0xD83CDF47U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 15, 0xD83CDF48U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 15, 0xD83CDF49U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 15, 0xD83CDF4AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 15, 0xD83CDF4BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 15, 0xD83CDF4CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 15, 0xD83CDF4DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 15, 0xD83CDF4EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 15, 0xD83CDF4FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 15, 0xD83CDF50U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 15, 0xD83CDF51U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 15, 0xD83CDF52U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 15, 0xD83CDF53U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 16, 0xD83CDF54U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 16, 0xD83CDF55U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 16, 0xD83CDF56U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 16, 0xD83CDF57U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 16, 0xD83CDF58U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 16, 0xD83CDF59U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 16, 0xD83CDF5AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 16, 0xD83CDF5BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 16, 0xD83CDF5CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 16, 0xD83CDF5DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 16, 0xD83CDF5EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 16, 0xD83CDF5FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 16, 0xD83CDF60U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 16, 0xD83CDF61U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 16, 0xD83CDF62U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 16, 0xD83CDF63U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 16, 0xD83CDF64U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 16, 0xD83CDF65U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 16, 0xD83CDF66U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 16, 0xD83CDF67U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 16, 0xD83CDF68U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 16, 0xD83CDF69U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 17, 0xD83CDF6AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 16, 0xD83CDF6BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 16, 0xD83CDF6CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 16, 0xD83CDF6DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 16, 0xD83CDF6EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 16, 0xD83CDF6FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 16, 0xD83CDF70U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 16, 0xD83CDF71U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 16, 0xD83CDF72U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 16, 0xD83CDF73U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 17, 0xD83CDF74U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 17, 0xD83CDF75U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 17, 0xD83CDF76U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 17, 0xD83CDF77U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 17, 0xD83CDF78U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 17, 0xD83CDF79U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 17, 0xD83CDF7AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 17, 0xD83CDF7BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 17, 0xD83CDF7CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 17, 0xD83CDF7DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 17, 0xD83CDF7EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 16, 0xD83CDF7FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 25, 0xD83CDF80U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 25, 0xD83CDF81U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 16, 0xD83CDF82U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 14, 0xD83CDF83U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 13, 0xD83CDF84U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 8, 0xD83CDF85U, 0, 2, 0, 0xFFFF0522U);
-	new (toFill++) EmojiData(3, 22, 0xD83CDF86U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 22, 0xD83CDF87U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 25, 0xD83CDF88U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 25, 0xD83CDF89U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 25, 0xD83CDF8AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 14, 0xD83CDF8BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 25, 0xD83CDF8CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 14, 0xD83CDF8DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 25, 0xD83CDF8EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 25, 0xD83CDF8FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 25, 0xD83CDF90U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 21, 0xD83CDF91U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 11, 0xD83CDF92U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 11, 0xD83CDF93U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 19, 0xD83CDF96U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 19, 0xD83CDF97U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 23, 0xD83CDF99U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 23, 0xD83CDF9AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 23, 0xD83CDF9BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 23, 0xD83CDF9EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 19, 0xD83CDF9FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 21, 0xD83CDFA0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 21, 0xD83CDFA1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 21, 0xD83CDFA2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 17, 0xD83CDFA3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 19, 0xD83CDFA4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 23, 0xD83CDFA5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 30, 0xD83CDFA6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 19, 0xD83CDFA7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 19, 0xD83CDFA8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 11, 0xD83CDFA9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 19, 0xD83CDFAAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 19, 0xD83CDFABU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 19, 0xD83CDFACU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 19, 0xD83CDFADU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 19, 0xD83CDFAEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 19, 0xD83CDFAFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 19, 0xD83CDFB0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 17, 0xD83CDFB1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 19, 0xD83CDFB2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 19, 0xD83CDFB3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 33, 0xD83CDFB4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 31, 0xD83CDFB5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 31, 0xD83CDFB6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 19, 0xD83CDFB7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 19, 0xD83CDFB8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 19, 0xD83CDFB9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 19, 0xD83CDFBAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 19, 0xD83CDFBBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 19, 0xD83CDFBCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 19, 0xD83CDFBDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 17, 0xD83CDFBEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 17, 0xD83CDFBFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 17, 0xD83CDFC0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 21, 0xD83CDFC1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 17, 0xD83CDFC2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 8, 0xD83CDFC3U, 0, 2, 0, 0xFFFF0527U);
-	new (toFill++) EmojiData(6, 18, 0xD83CDFC4U, 0, 2, 0, 0xFFFF052CU);
-	new (toFill++) EmojiData(11, 19, 0xD83CDFC5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 19, 0xD83CDFC6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 19, 0xD83CDFC7U, 0, 2, 0, 0xFFFF0531U);
-	new (toFill++) EmojiData(15, 17, 0xD83CDFC8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 17, 0xD83CDFC9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 18, 0xD83CDFCAU, 0, 2, 0, 0xFFFF0536U);
-	new (toFill++) EmojiData(24, 18, 0xD83CDFCBU, 0, 2, 0, 0xFFFF053BU);
-	new (toFill++) EmojiData(22, 17, 0xD83CDFCCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 20, 0xD83CDFCDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 20, 0xD83CDFCEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 17, 0xD83CDFCFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 17, 0xD83CDFD0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 17, 0xD83CDFD1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 17, 0xD83CDFD2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 17, 0xD83CDFD3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 21, 0xD83CDFD4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 21, 0xD83CDFD5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 21, 0xD83CDFD6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 21, 0xD83CDFD7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 22, 0xD83CDFD8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 21, 0xD83CDFD9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 22, 0xD83CDFDAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 22, 0xD83CDFDBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 21, 0xD83CDFDCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 21, 0xD83CDFDDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 21, 0xD83CDFDEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 22, 0xD83CDFDFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 22, 0xD83CDFE0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 22, 0xD83CDFE1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 22, 0xD83CDFE2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 22, 0xD83CDFE3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 22, 0xD83CDFE4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 22, 0xD83CDFE5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 22, 0xD83CDFE6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 29, 0xD83CDFE7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 22, 0xD83CDFE8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 22, 0xD83CDFE9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 22, 0xD83CDFEAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 22, 0xD83CDFEBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 22, 0xD83CDFECU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 21, 0xD83CDFEDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 25, 0xD83CDFEEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 22, 0xD83CDFEFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 22, 0xD83CDFF0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 26, 0xD83CDFF3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 26, 0xD83CDFF4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 19, 0xD83CDFF5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 24, 0xD83CDFF7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 17, 0xD83CDFF8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 17, 0xD83CDFF9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 24, 0xD83CDFFAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 13, 0xD83DDC00U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 13, 0xD83DDC01U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 13, 0xD83DDC02U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 13, 0xD83DDC03U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 13, 0xD83DDC04U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 13, 0xD83DDC05U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 13, 0xD83DDC06U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 13, 0xD83DDC07U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 13, 0xD83DDC08U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 13, 0xD83DDC09U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 13, 0xD83DDC0AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 13, 0xD83DDC0BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 12, 0xD83DDC0CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 12, 0xD83DDC0DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 13, 0xD83DDC0EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 13, 0xD83DDC0FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 13, 0xD83DDC10U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 13, 0xD83DDC11U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 12, 0xD83DDC12U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 13, 0xD83DDC13U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 12, 0xD83DDC14U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 13, 0xD83DDC15U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 13, 0xD83DDC16U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 12, 0xD83DDC17U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 13, 0xD83DDC18U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 12, 0xD83DDC19U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 14, 0xD83DDC1AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 12, 0xD83DDC1BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 12, 0xD83DDC1CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 12, 0xD83DDC1DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 12, 0xD83DDC1EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 13, 0xD83DDC1FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 12, 0xD83DDC20U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 13, 0xD83DDC21U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 12, 0xD83DDC22U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 12, 0xD83DDC23U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 12, 0xD83DDC24U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 12, 0xD83DDC25U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 12, 0xD83DDC26U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 12, 0xD83DDC27U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 12, 0xD83DDC28U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 13, 0xD83DDC29U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 13, 0xD83DDC2AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 13, 0xD83DDC2BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 13, 0xD83DDC2CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 12, 0xD83DDC2DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 12, 0xD83DDC2EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 12, 0xD83DDC2FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 12, 0xD83DDC30U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 12, 0xD83DDC31U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 13, 0xD83DDC32U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 13, 0xD83DDC33U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 12, 0xD83DDC34U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 12, 0xD83DDC35U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 11, 0xD83DDC36U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 12, 0xD83DDC37U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 12, 0xD83DDC38U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 12, 0xD83DDC39U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 12, 0xD83DDC3AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 12, 0xD83DDC3BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 12, 0xD83DDC3CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 12, 0xD83DDC3DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 13, 0xD83DDC3EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 13, 0xD83DDC3FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 6, 0xD83DDC40U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 6, 0xD83DDC41U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 5, 0xD83DDC42U, 0, 2, 0, 0xFFFF0540U);
-	new (toFill++) EmojiData(39, 5, 0xD83DDC43U, 0, 2, 0, 0xFFFF0545U);
-	new (toFill++) EmojiData(31, 5, 0xD83DDC44U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 5, 0xD83DDC45U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 4, 0xD83DDC46U, 0, 2, 0, 0xFFFF054AU);
-	new (toFill++) EmojiData(17, 4, 0xD83DDC47U, 0, 2, 0, 0xFFFF054FU);
-	new (toFill++) EmojiData(23, 4, 0xD83DDC48U, 0, 2, 0, 0xFFFF0554U);
-	new (toFill++) EmojiData(29, 4, 0xD83DDC49U, 0, 2, 0, 0xFFFF0559U);
-	new (toFill++) EmojiData(37, 2, 0xD83DDC4AU, 0, 2, 0, 0xFFFF055EU);
-	new (toFill++) EmojiData(19, 2, 0xD83DDC4BU, 0, 2, 0, 0xFFFF0563U);
-	new (toFill++) EmojiData(15, 3, 0xD83DDC4CU, 0, 2, 0, 0xFFFF0568U);
-	new (toFill++) EmojiData(25, 2, 0xD83DDC4DU, 0, 2, 0, 0xFFFF056DU);
-	new (toFill++) EmojiData(31, 2, 0xD83DDC4EU, 0, 2, 0, 0xFFFF0572U);
-	new (toFill++) EmojiData(13, 2, 0xD83DDC4FU, 0, 2, 0, 0xFFFF0577U);
-	new (toFill++) EmojiData(27, 3, 0xD83DDC50U, 0, 2, 0, 0xFFFF057CU);
-	new (toFill++) EmojiData(28, 11, 0xD83DDC51U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 11, 0xD83DDC52U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 11, 0xD83DDC53U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 11, 0xD83DDC54U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 11, 0xD83DDC55U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 11, 0xD83DDC56U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 11, 0xD83DDC57U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 11, 0xD83DDC58U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 11, 0xD83DDC59U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 11, 0xD83DDC5AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 11, 0xD83DDC5BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 11, 0xD83DDC5CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 11, 0xD83DDC5DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 11, 0xD83DDC5EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 11, 0xD83DDC5FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 11, 0xD83DDC60U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 11, 0xD83DDC61U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 11, 0xD83DDC62U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 11, 0xD83DDC63U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 6, 0xD83DDC64U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 6, 0xD83DDC65U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 6, 0xD83DDC66U, 0, 2, 0, 0xFFFF0581U);
-	new (toFill++) EmojiData(22, 6, 0xD83DDC67U, 0, 2, 0, 0xFFFF0586U);
-	new (toFill++) EmojiData(28, 6, 0xD83DDC68U, 0, 2, 0, 0xFFFF058BU);
-	new (toFill++) EmojiData(34, 6, 0xD83DDC69U, 0, 2, 0, 0xFFFF0590U);
-	new (toFill++) EmojiData(35, 10, 0xD83DDC6AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 9, 0xD83DDC6BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 9, 0xD83DDC6CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 9, 0xD83DDC6DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 7, 0xD83DDC6EU, 0, 2, 0, 0xFFFF0595U);
-	new (toFill++) EmojiData(11, 9, 0xD83DDC6FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 8, 0xD83DDC70U, 0, 2, 0, 0xFFFF059AU);
-	new (toFill++) EmojiData(0, 7, 0xD83DDC71U, 0, 2, 0, 0xFFFF059FU);
-	new (toFill++) EmojiData(18, 7, 0xD83DDC72U, 0, 2, 0, 0xFFFF05A4U);
-	new (toFill++) EmojiData(24, 7, 0xD83DDC73U, 0, 2, 0, 0xFFFF05A9U);
-	new (toFill++) EmojiData(6, 7, 0xD83DDC74U, 0, 2, 0, 0xFFFF05AEU);
-	new (toFill++) EmojiData(12, 7, 0xD83DDC75U, 0, 2, 0, 0xFFFF05B3U);
-	new (toFill++) EmojiData(10, 6, 0xD83DDC76U, 0, 2, 0, 0xFFFF05B8U);
-	new (toFill++) EmojiData(36, 7, 0xD83DDC77U, 0, 2, 0, 0xFFFF05BDU);
-	new (toFill++) EmojiData(21, 8, 0xD83DDC78U, 0, 2, 0, 0xFFFF05C2U);
-	new (toFill++) EmojiData(32, 1, 0xD83DDC79U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 1, 0xD83DDC7AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 1, 0xD83DDC7BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 8, 0xD83DDC7CU, 0, 2, 0, 0xFFFF05C7U);
-	new (toFill++) EmojiData(36, 1, 0xD83DDC7DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 19, 0xD83DDC7EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 1, 0xD83DDC7FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 1, 0xD83DDC80U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 9, 0xD83DDC81U, 0, 2, 0, 0xFFFF05CCU);
-	new (toFill++) EmojiData(2, 8, 0xD83DDC82U, 0, 2, 0, 0xFFFF05D1U);
-	new (toFill++) EmojiData(5, 9, 0xD83DDC83U, 0, 2, 0, 0xFFFF05D6U);
-	new (toFill++) EmojiData(17, 11, 0xD83DDC84U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 5, 0xD83DDC85U, 0, 2, 0, 0xFFFF05DBU);
-	new (toFill++) EmojiData(23, 10, 0xD83DDC86U, 0, 2, 0, 0xFFFF05E0U);
-	new (toFill++) EmojiData(17, 10, 0xD83DDC87U, 0, 2, 0, 0xFFFF05E5U);
-	new (toFill++) EmojiData(25, 24, 0xD83DDC88U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 24, 0xD83DDC89U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 24, 0xD83DDC8AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 11, 0xD83DDC8BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 25, 0xD83DDC8CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 11, 0xD83DDC8DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 24, 0xD83DDC8EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 10, 0xD83DDC8FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 14, 0xD83DDC90U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 10, 0xD83DDC91U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 22, 0xD83DDC92U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 27, 0xD83DDC93U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 27, 0xD83DDC94U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 27, 0xD83DDC95U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 27, 0xD83DDC96U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 27, 0xD83DDC97U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 27, 0xD83DDC98U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 27, 0xD83DDC99U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 27, 0xD83DDC9AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 27, 0xD83DDC9BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 27, 0xD83DDC9CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 27, 0xD83DDC9DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 27, 0xD83DDC9EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 27, 0xD83DDC9FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 29, 0xD83DDCA0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 23, 0xD83DDCA1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 29, 0xD83DDCA2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 24, 0xD83DDCA3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 1, 0xD83DDCA4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 15, 0xD83DDCA5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 15, 0xD83DDCA6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 15, 0xD83DDCA7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 15, 0xD83DDCA8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 1, 0xD83DDCA9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 3, 0xD83DDCAAU, 0, 2, 0, 0xFFFF05EAU);
-	new (toFill++) EmojiData(38, 14, 0xD83DDCABU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 33, 0xD83DDCACU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 33, 0xD83DDCADU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 28, 0xD83DDCAEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 29, 0xD83DDCAFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 24, 0xD83DDCB0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 32, 0xD83DDCB1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 32, 0xD83DDCB2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 24, 0xD83DDCB3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 23, 0xD83DDCB4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 23, 0xD83DDCB5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 23, 0xD83DDCB6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 23, 0xD83DDCB7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 23, 0xD83DDCB8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 29, 0xD83DDCB9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 21, 0xD83DDCBAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 22, 0xD83DDCBBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 11, 0xD83DDCBCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 23, 0xD83DDCBDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 23, 0xD83DDCBEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 23, 0xD83DDCBFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 23, 0xD83DDCC0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 26, 0xD83DDCC1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 26, 0xD83DDCC2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 25, 0xD83DDCC3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 26, 0xD83DDCC4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 26, 0xD83DDCC5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 26, 0xD83DDCC6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 26, 0xD83DDCC7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 25, 0xD83DDCC8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 25, 0xD83DDCC9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 25, 0xD83DDCCAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 26, 0xD83DDCCBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 26, 0xD83DDCCCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 26, 0xD83DDCCDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 26, 0xD83DDCCEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 26, 0xD83DDCCFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 26, 0xD83DDCD0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 25, 0xD83DDCD1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 26, 0xD83DDCD2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 26, 0xD83DDCD3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 26, 0xD83DDCD4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 26, 0xD83DDCD5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 26, 0xD83DDCD6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 26, 0xD83DDCD7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 26, 0xD83DDCD8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 26, 0xD83DDCD9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 26, 0xD83DDCDAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 28, 0xD83DDCDBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 25, 0xD83DDCDCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 27, 0xD83DDCDDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 23, 0xD83DDCDEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 23, 0xD83DDCDFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 23, 0xD83DDCE0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 23, 0xD83DDCE1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 32, 0xD83DDCE2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 32, 0xD83DDCE3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 25, 0xD83DDCE4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 25, 0xD83DDCE5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 25, 0xD83DDCE6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 25, 0xD83DDCE7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 25, 0xD83DDCE8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 25, 0xD83DDCE9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 25, 0xD83DDCEAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 25, 0xD83DDCEBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 25, 0xD83DDCECU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 25, 0xD83DDCEDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 25, 0xD83DDCEEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 25, 0xD83DDCEFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 26, 0xD83DDCF0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 22, 0xD83DDCF1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 22, 0xD83DDCF2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 28, 0xD83DDCF3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 28, 0xD83DDCF4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 29, 0xD83DDCF5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 30, 0xD83DDCF6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 23, 0xD83DDCF7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 23, 0xD83DDCF8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 23, 0xD83DDCF9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 23, 0xD83DDCFAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 23, 0xD83DDCFBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 23, 0xD83DDCFCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 23, 0xD83DDCFDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 24, 0xD83DDCFFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 31, 0xD83DDD00U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 31, 0xD83DDD01U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 31, 0xD83DDD02U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 31, 0xD83DDD03U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 31, 0xD83DDD04U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 29, 0xD83DDD05U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 29, 0xD83DDD06U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 32, 0xD83DDD07U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 32, 0xD83DDD08U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 32, 0xD83DDD09U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 32, 0xD83DDD0AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 23, 0xD83DDD0BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 23, 0xD83DDD0CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 27, 0xD83DDD0DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 27, 0xD83DDD0EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 26, 0xD83DDD0FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 26, 0xD83DDD10U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 24, 0xD83DDD11U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 26, 0xD83DDD12U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 26, 0xD83DDD13U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 33, 0xD83DDD14U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 33, 0xD83DDD15U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 24, 0xD83DDD16U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 26, 0xD83DDD17U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 32, 0xD83DDD18U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 32, 0xD83DDD19U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 32, 0xD83DDD1AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 32, 0xD83DDD1BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 32, 0xD83DDD1CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 32, 0xD83DDD1DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 29, 0xD83DDD1EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 30, 0xD83DDD1FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 31, 0xD83DDD20U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 31, 0xD83DDD21U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 30, 0xD83DDD22U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 31, 0xD83DDD23U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 31, 0xD83DDD24U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 15, 0xD83DDD25U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 23, 0xD83DDD26U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 24, 0xD83DDD27U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 24, 0xD83DDD28U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 24, 0xD83DDD29U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 24, 0xD83DDD2AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 24, 0xD83DDD2BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 24, 0xD83DDD2CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 24, 0xD83DDD2DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 24, 0xD83DDD2EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 27, 0xD83DDD2FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 29, 0xD83DDD30U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 29, 0xD83DDD31U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 32, 0xD83DDD32U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 32, 0xD83DDD33U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 32, 0xD83DDD34U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 32, 0xD83DDD35U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 32, 0xD83DDD36U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 32, 0xD83DDD37U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 32, 0xD83DDD38U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 32, 0xD83DDD39U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 32, 0xD83DDD3AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 32, 0xD83DDD3BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 31, 0xD83DDD3CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 31, 0xD83DDD3DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 27, 0xD83DDD49U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 13, 0xD83DDD4AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 22, 0xD83DDD4BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 22, 0xD83DDD4CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 22, 0xD83DDD4DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 27, 0xD83DDD4EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 33, 0xD83DDD50U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 33, 0xD83DDD51U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 33, 0xD83DDD52U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 33, 0xD83DDD53U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 33, 0xD83DDD54U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 33, 0xD83DDD55U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 33, 0xD83DDD56U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 33, 0xD83DDD57U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 33, 0xD83DDD58U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 33, 0xD83DDD59U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 33, 0xD83DDD5AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 33, 0xD83DDD5BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 33, 0xD83DDD5CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 33, 0xD83DDD5DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 33, 0xD83DDD5EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 33, 0xD83DDD5FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 33, 0xD83DDD60U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 33, 0xD83DDD61U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 33, 0xD83DDD62U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 33, 0xD83DDD63U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 33, 0xD83DDD64U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 33, 0xD83DDD65U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 33, 0xD83DDD66U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 33, 0xD83DDD67U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 23, 0xD83DDD6FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 23, 0xD83DDD70U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 24, 0xD83DDD73U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 19, 0xD83DDD74U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 8, 0xD83DDD75U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 11, 0xD83DDD76U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 12, 0xD83DDD77U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 14, 0xD83DDD78U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 22, 0xD83DDD79U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 26, 0xD83DDD87U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 26, 0xD83DDD8AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 27, 0xD83DDD8BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 27, 0xD83DDD8CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 27, 0xD83DDD8DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 5, 0xD83DDD90U, 0, 2, 0, 0xFFFF05EFU);
-	new (toFill++) EmojiData(35, 4, 0xD83DDD95U, 0, 2, 0, 0xFFFF05F4U);
-	new (toFill++) EmojiData(13, 5, 0xD83DDD96U, 0, 2, 0, 0xFFFF05F9U);
-	new (toFill++) EmojiData(35, 22, 0xD83DDDA5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 22, 0xD83DDDA8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 22, 0xD83DDDB1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 22, 0xD83DDDB2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 25, 0xD83DDDBCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 26, 0xD83DDDC2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 26, 0xD83DDDC3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 26, 0xD83DDDC4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 23, 0xD83DDDD1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 26, 0xD83DDDD2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 26, 0xD83DDDD3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 23, 0xD83DDDDCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 24, 0xD83DDDDDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 26, 0xD83DDDDEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 24, 0xD83DDDE1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 6, 0xD83DDDE3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 33, 0xD83DDDEFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 26, 0xD83DDDF3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 25, 0xD83DDDFAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 21, 0xD83DDDFBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 21, 0xD83DDDFCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 22, 0xD83DDDFDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 21, 0xD83DDDFEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 25, 0xD83DDDFFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 0, 0xD83DDE00U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 0, 0xD83DDE01U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 0, 0xD83DDE02U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 0, 0xD83DDE03U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 0, 0xD83DDE04U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 0, 0xD83DDE05U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 0, 0xD83DDE06U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 0, 0xD83DDE07U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 1, 0xD83DDE08U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 0, 0xD83DDE09U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 0, 0xD83DDE0AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 0, 0xD83DDE0BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 0, 0xD83DDE0CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 0, 0xD83DDE0DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 0, 0xD83DDE0EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 0, 0xD83DDE0FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 0, 0xD83DDE10U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 0, 0xD83DDE11U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 0, 0xD83DDE12U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 1, 0xD83DDE13U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 1, 0xD83DDE14U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 1, 0xD83DDE15U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 1, 0xD83DDE16U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 0, 0xD83DDE17U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 0, 0xD83DDE18U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 0, 0xD83DDE19U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 0, 0xD83DDE1AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 0, 0xD83DDE1BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 0, 0xD83DDE1CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 0, 0xD83DDE1DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 0, 0xD83DDE1EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 0, 0xD83DDE1FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 0, 0xD83DDE20U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 0, 0xD83DDE21U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 1, 0xD83DDE22U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 1, 0xD83DDE23U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 1, 0xD83DDE24U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 1, 0xD83DDE25U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 1, 0xD83DDE26U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 1, 0xD83DDE27U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 1, 0xD83DDE28U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 1, 0xD83DDE29U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 1, 0xD83DDE2AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 1, 0xD83DDE2BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 0, 0xD83DDE2CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 1, 0xD83DDE2DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 1, 0xD83DDE2EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 1, 0xD83DDE2FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 1, 0xD83DDE30U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 1, 0xD83DDE31U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 1, 0xD83DDE32U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 0, 0xD83DDE33U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 1, 0xD83DDE34U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 1, 0xD83DDE35U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 0, 0xD83DDE36U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 1, 0xD83DDE37U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 1, 0xD83DDE38U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 2, 0xD83DDE39U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 1, 0xD83DDE3AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 2, 0xD83DDE3BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 2, 0xD83DDE3CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 2, 0xD83DDE3DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 2, 0xD83DDE3EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 2, 0xD83DDE3FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 2, 0xD83DDE40U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 1, 0xD83DDE41U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 0, 0xD83DDE42U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 0, 0xD83DDE43U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 0, 0xD83DDE44U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 9, 0xD83DDE45U, 0, 2, 0, 0xFFFF05FEU);
-	new (toFill++) EmojiData(33, 9, 0xD83DDE46U, 0, 2, 0, 0xFFFF0603U);
-	new (toFill++) EmojiData(15, 9, 0xD83DDE47U, 0, 2, 0, 0xFFFF0608U);
-	new (toFill++) EmojiData(15, 12, 0xD83DDE48U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 12, 0xD83DDE49U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 12, 0xD83DDE4AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 9, 0xD83DDE4BU, 0, 2, 0, 0xFFFF060DU);
-	new (toFill++) EmojiData(7, 2, 0xD83DDE4CU, 0, 2, 0, 0xFFFF0612U);
-	new (toFill++) EmojiData(11, 10, 0xD83DDE4DU, 0, 2, 0, 0xFFFF0617U);
-	new (toFill++) EmojiData(5, 10, 0xD83DDE4EU, 0, 2, 0, 0xFFFF061CU);
-	new (toFill++) EmojiData(39, 3, 0xD83DDE4FU, 0, 2, 0, 0xFFFF0621U);
-	new (toFill++) EmojiData(0, 21, 0xD83DDE80U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 20, 0xD83DDE81U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 20, 0xD83DDE82U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 20, 0xD83DDE83U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(21, 20, 0xD83DDE84U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 20, 0xD83DDE85U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 20, 0xD83DDE86U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 20, 0xD83DDE87U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 20, 0xD83DDE88U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 20, 0xD83DDE89U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 20, 0xD83DDE8AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(19, 20, 0xD83DDE8BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 19, 0xD83DDE8CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 20, 0xD83DDE8DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 19, 0xD83DDE8EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 21, 0xD83DDE8FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 20, 0xD83DDE90U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 20, 0xD83DDE91U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 20, 0xD83DDE92U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 20, 0xD83DDE93U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 20, 0xD83DDE94U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 19, 0xD83DDE95U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(14, 20, 0xD83DDE96U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 19, 0xD83DDE97U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(13, 20, 0xD83DDE98U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 19, 0xD83DDE99U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 20, 0xD83DDE9AU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 20, 0xD83DDE9BU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 20, 0xD83DDE9CU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(20, 20, 0xD83DDE9DU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 20, 0xD83DDE9EU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 20, 0xD83DDE9FU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(16, 20, 0xD83DDEA0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(15, 20, 0xD83DDEA1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 21, 0xD83DDEA2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 17, 0xD83DDEA3U, 0, 2, 0, 0xFFFF0626U);
-	new (toFill++) EmojiData(37, 20, 0xD83DDEA4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 21, 0xD83DDEA5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 21, 0xD83DDEA6U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 21, 0xD83DDEA7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 20, 0xD83DDEA8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(32, 26, 0xD83DDEA9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 25, 0xD83DDEAAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 28, 0xD83DDEABU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(18, 24, 0xD83DDEACU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(3, 30, 0xD83DDEADU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(11, 30, 0xD83DDEAEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 29, 0xD83DDEAFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 30, 0xD83DDEB0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 29, 0xD83DDEB1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 20, 0xD83DDEB2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(5, 29, 0xD83DDEB3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(30, 18, 0xD83DDEB4U, 0, 2, 0, 0xFFFF062BU);
-	new (toFill++) EmojiData(36, 18, 0xD83DDEB5U, 0, 2, 0, 0xFFFF0630U);
-	new (toFill++) EmojiData(33, 8, 0xD83DDEB6U, 0, 2, 0, 0xFFFF0635U);
-	new (toFill++) EmojiData(3, 29, 0xD83DDEB7U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 29, 0xD83DDEB8U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 30, 0xD83DDEB9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 30, 0xD83DDEBAU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(10, 30, 0xD83DDEBBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 30, 0xD83DDEBCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 24, 0xD83DDEBDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 30, 0xD83DDEBEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 24, 0xD83DDEBFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(12, 18, 0xD83DDEC0U, 0, 2, 0, 0xFFFF063AU);
-	new (toFill++) EmojiData(37, 24, 0xD83DDEC1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(38, 29, 0xD83DDEC2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 29, 0xD83DDEC3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 30, 0xD83DDEC4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 30, 0xD83DDEC5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(0, 25, 0xD83DDECBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 25, 0xD83DDECCU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(9, 25, 0xD83DDECDU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(4, 25, 0xD83DDECEU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(2, 25, 0xD83DDECFU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 27, 0xD83DDED0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 24, 0xD83DDEE0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(17, 24, 0xD83DDEE1U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 23, 0xD83DDEE2U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 21, 0xD83DDEE3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(29, 21, 0xD83DDEE4U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 20, 0xD83DDEE5U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(31, 20, 0xD83DDEE9U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(33, 20, 0xD83DDEEBU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 20, 0xD83DDEECU, 0, 2, 0, 0);
-	new (toFill++) EmojiData(1, 21, 0xD83DDEF0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(39, 20, 0xD83DDEF3U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(23, 1, 0xD83EDD10U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(24, 0, 0xD83EDD11U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 1, 0xD83EDD12U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(25, 0, 0xD83EDD13U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(34, 0, 0xD83EDD14U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(26, 1, 0xD83EDD15U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(37, 1, 0xD83EDD16U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(27, 0, 0xD83EDD17U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(7, 5, 0xD83EDD18U, 0, 2, 0, 0xFFFF063FU);
-	new (toFill++) EmojiData(36, 12, 0xD83EDD80U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(8, 12, 0xD83EDD81U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(35, 12, 0xD83EDD82U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(22, 13, 0xD83EDD83U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(28, 12, 0xD83EDD84U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(6, 16, 0xD83EDDC0U, 0, 2, 0, 0);
-	new (toFill++) EmojiData(36, 10, 0xFFFF0000U, 0, 8, 0, 0);
-	new (toFill++) EmojiData(37, 10, 0xFFFF0001U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(38, 10, 0xFFFF0002U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(39, 10, 0xFFFF0003U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(0, 11, 0xFFFF0004U, 0, 8, 0, 0);
-	new (toFill++) EmojiData(1, 11, 0xFFFF0005U, 0, 8, 0, 0);
-	new (toFill++) EmojiData(2, 11, 0xFFFF0006U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(3, 11, 0xFFFF0007U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(4, 11, 0xFFFF0008U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(5, 11, 0xFFFF0009U, 0, 8, 0, 0);
-	new (toFill++) EmojiData(6, 11, 0xFFFF000AU, 0, 8, 0, 0);
-	new (toFill++) EmojiData(7, 11, 0xFFFF000BU, 0, 11, 0, 0);
-	new (toFill++) EmojiData(8, 11, 0xFFFF000CU, 0, 11, 0, 0);
-	new (toFill++) EmojiData(9, 11, 0xFFFF000DU, 0, 11, 0, 0);
-	new (toFill++) EmojiData(30, 10, 0xFFFF000EU, 0, 8, 0, 0);
-	new (toFill++) EmojiData(31, 10, 0xFFFF000FU, 0, 8, 0, 0);
-	new (toFill++) EmojiData(33, 10, 0xFFFF0010U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(34, 10, 0xFFFF0011U, 0, 11, 0, 0);
-	new (toFill++) EmojiData(9, 33, 0xFFFF0012U, 0, 5, 0, 0);
-	new (toFill++) EmojiData(6, 4, 0x261DU, 0, 3, 0xFE0F, 0xD83CDFFBU);
-	new (toFill++) EmojiData(7, 4, 0x261DU, 0, 3, 0xFE0F, 0xD83CDFFCU);
-	new (toFill++) EmojiData(8, 4, 0x261DU, 0, 3, 0xFE0F, 0xD83CDFFDU);
-	new (toFill++) EmojiData(9, 4, 0x261DU, 0, 3, 0xFE0F, 0xD83CDFFEU);
-	new (toFill++) EmojiData(10, 4, 0x261DU, 0, 3, 0xFE0F, 0xD83CDFFFU);
-	new (toFill++) EmojiData(19, 18, 0x26F9U, 0, 3, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(20, 18, 0x26F9U, 0, 3, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(21, 18, 0x26F9U, 0, 3, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(22, 18, 0x26F9U, 0, 3, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(23, 18, 0x26F9U, 0, 3, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(4, 3, 0x270AU, 0, 3, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(5, 3, 0x270AU, 0, 3, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(6, 3, 0x270AU, 0, 3, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(7, 3, 0x270AU, 0, 3, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(8, 3, 0x270AU, 0, 3, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(22, 3, 0x270BU, 0, 3, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(23, 3, 0x270BU, 0, 3, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(24, 3, 0x270BU, 0, 3, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(25, 3, 0x270BU, 0, 3, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(26, 3, 0x270BU, 0, 3, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(10, 3, 0x270CU, 0, 3, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(11, 3, 0x270CU, 0, 3, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(12, 3, 0x270CU, 0, 3, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(13, 3, 0x270CU, 0, 3, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(14, 3, 0x270CU, 0, 3, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(20, 5, 0x270DU, 0, 3, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(21, 5, 0x270DU, 0, 3, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(22, 5, 0x270DU, 0, 3, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(23, 5, 0x270DU, 0, 3, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(24, 5, 0x270DU, 0, 3, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(2, 34, 0xD83CDDE6U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(30, 39, 0xD83CDDE6U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(37, 33, 0xD83CDDE6U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(6, 34, 0xD83CDDE6U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(4, 34, 0xD83CDDE6U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(39, 33, 0xD83CDDE6U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(8, 34, 0xD83CDDE6U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(3, 34, 0xD83CDDE6U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(5, 34, 0xD83CDDE6U, 0xD83CDDF6U, 4, 0, 0);
-	new (toFill++) EmojiData(7, 34, 0xD83CDDE6U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(1, 34, 0xD83CDDE6U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(11, 34, 0xD83CDDE6U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(10, 34, 0xD83CDDE6U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(9, 34, 0xD83CDDE6U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(38, 33, 0xD83CDDE6U, 0xD83CDDFDU, 4, 0, 0);
-	new (toFill++) EmojiData(12, 34, 0xD83CDDE6U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(24, 34, 0xD83CDDE7U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(16, 34, 0xD83CDDE7U, 0xD83CDDE7U, 4, 0, 0);
-	new (toFill++) EmojiData(15, 34, 0xD83CDDE7U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(18, 34, 0xD83CDDE7U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(31, 34, 0xD83CDDE7U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(30, 34, 0xD83CDDE7U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(14, 34, 0xD83CDDE7U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(32, 34, 0xD83CDDE7U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(20, 34, 0xD83CDDE7U, 0xD83CDDEFU, 4, 0, 0);
-	new (toFill++) EmojiData(1, 39, 0xD83CDDE7U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(21, 34, 0xD83CDDE7U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(29, 34, 0xD83CDDE7U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(23, 34, 0xD83CDDE7U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(38, 34, 0xD83CDDE7U, 0xD83CDDF6U, 4, 0, 0);
-	new (toFill++) EmojiData(26, 34, 0xD83CDDE7U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(13, 34, 0xD83CDDE7U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(22, 34, 0xD83CDDE7U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(25, 34, 0xD83CDDE7U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(17, 34, 0xD83CDDE7U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(19, 34, 0xD83CDDE7U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(35, 34, 0xD83CDDE8U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(5, 35, 0xD83CDDE8U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(9, 35, 0xD83CDDE8U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(0, 35, 0xD83CDDE8U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(8, 35, 0xD83CDDE8U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(11, 39, 0xD83CDDE8U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(12, 35, 0xD83CDDE8U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(10, 35, 0xD83CDDE8U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(2, 35, 0xD83CDDE8U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(34, 34, 0xD83CDDE8U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(3, 35, 0xD83CDDE8U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(6, 35, 0xD83CDDE8U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(11, 35, 0xD83CDDE8U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(14, 35, 0xD83CDDE8U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(37, 34, 0xD83CDDE8U, 0xD83CDDFBU, 4, 0, 0);
-	new (toFill++) EmojiData(15, 35, 0xD83CDDE8U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(4, 35, 0xD83CDDE8U, 0xD83CDDFDU, 4, 0, 0);
-	new (toFill++) EmojiData(16, 35, 0xD83CDDE8U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(17, 35, 0xD83CDDE8U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(1, 36, 0xD83CDDE9U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(19, 35, 0xD83CDDE9U, 0xD83CDDEFU, 4, 0, 0);
-	new (toFill++) EmojiData(18, 35, 0xD83CDDE9U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(20, 35, 0xD83CDDE9U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(21, 35, 0xD83CDDE9U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(0, 34, 0xD83CDDE9U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(22, 35, 0xD83CDDEAU, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(27, 35, 0xD83CDDEAU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(23, 35, 0xD83CDDEAU, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(0, 40, 0xD83CDDEAU, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(26, 35, 0xD83CDDEAU, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(39, 38, 0xD83CDDEAU, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(28, 35, 0xD83CDDEAU, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(29, 35, 0xD83CDDEAU, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(33, 35, 0xD83CDDEBU, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(32, 35, 0xD83CDDEBU, 0xD83CDDEFU, 4, 0, 0);
-	new (toFill++) EmojiData(30, 35, 0xD83CDDEBU, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(20, 37, 0xD83CDDEBU, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(31, 35, 0xD83CDDEBU, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(34, 35, 0xD83CDDEBU, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(38, 35, 0xD83CDDECU, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(31, 39, 0xD83CDDECU, 0xD83CDDE7U, 4, 0, 0);
-	new (toFill++) EmojiData(6, 36, 0xD83CDDECU, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(0, 36, 0xD83CDDECU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(35, 35, 0xD83CDDECU, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(10, 36, 0xD83CDDECU, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(2, 36, 0xD83CDDECU, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(3, 36, 0xD83CDDECU, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(5, 36, 0xD83CDDECU, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(39, 35, 0xD83CDDECU, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(11, 36, 0xD83CDDECU, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(7, 36, 0xD83CDDECU, 0xD83CDDF5U, 4, 0, 0);
-	new (toFill++) EmojiData(25, 35, 0xD83CDDECU, 0xD83CDDF6U, 4, 0, 0);
-	new (toFill++) EmojiData(4, 36, 0xD83CDDECU, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(33, 38, 0xD83CDDECU, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(9, 36, 0xD83CDDECU, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(8, 36, 0xD83CDDECU, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(12, 36, 0xD83CDDECU, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(13, 36, 0xD83CDDECU, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(16, 36, 0xD83CDDEDU, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(15, 36, 0xD83CDDEDU, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(13, 35, 0xD83CDDEDU, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(14, 36, 0xD83CDDEDU, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(17, 36, 0xD83CDDEDU, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(36, 34, 0xD83CDDEEU, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(20, 36, 0xD83CDDEEU, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(23, 36, 0xD83CDDEEU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(25, 36, 0xD83CDDEEU, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(24, 36, 0xD83CDDEEU, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(19, 36, 0xD83CDDEEU, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(27, 34, 0xD83CDDEEU, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(22, 36, 0xD83CDDEEU, 0xD83CDDF6U, 4, 0, 0);
-	new (toFill++) EmojiData(21, 36, 0xD83CDDEEU, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(18, 36, 0xD83CDDEEU, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(26, 36, 0xD83CDDEEU, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(29, 36, 0xD83CDDEFU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(27, 36, 0xD83CDDEFU, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(30, 36, 0xD83CDDEFU, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(28, 36, 0xD83CDDEFU, 0xD83CDDF5U, 4, 0, 0);
-	new (toFill++) EmojiData(32, 36, 0xD83CDDF0U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(36, 36, 0xD83CDDF0U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(33, 34, 0xD83CDDF0U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(33, 36, 0xD83CDDF0U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(7, 35, 0xD83CDDF0U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(3, 39, 0xD83CDDF0U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(0, 38, 0xD83CDDF0U, 0xD83CDDF5U, 4, 0, 0);
-	new (toFill++) EmojiData(37, 38, 0xD83CDDF0U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(35, 36, 0xD83CDDF0U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(39, 34, 0xD83CDDF0U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(31, 36, 0xD83CDDF0U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(37, 36, 0xD83CDDF1U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(39, 36, 0xD83CDDF1U, 0xD83CDDE7U, 4, 0, 0);
-	new (toFill++) EmojiData(4, 39, 0xD83CDDF1U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(3, 37, 0xD83CDDF1U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(0, 39, 0xD83CDDF1U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(1, 37, 0xD83CDDF1U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(0, 37, 0xD83CDDF1U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(4, 37, 0xD83CDDF1U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(5, 37, 0xD83CDDF1U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(38, 36, 0xD83CDDF1U, 0xD83CDDFBU, 4, 0, 0);
-	new (toFill++) EmojiData(2, 37, 0xD83CDDF1U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(26, 37, 0xD83CDDF2U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(22, 37, 0xD83CDDF2U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(21, 37, 0xD83CDDF2U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(24, 37, 0xD83CDDF2U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(8, 37, 0xD83CDDF2U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(14, 37, 0xD83CDDF2U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(7, 37, 0xD83CDDF2U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(12, 37, 0xD83CDDF2U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(28, 37, 0xD83CDDF2U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(23, 37, 0xD83CDDF2U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(6, 37, 0xD83CDDF2U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(1, 38, 0xD83CDDF2U, 0xD83CDDF5U, 4, 0, 0);
-	new (toFill++) EmojiData(15, 37, 0xD83CDDF2U, 0xD83CDDF6U, 4, 0, 0);
-	new (toFill++) EmojiData(16, 37, 0xD83CDDF2U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(25, 37, 0xD83CDDF2U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(13, 37, 0xD83CDDF2U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(17, 37, 0xD83CDDF2U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(11, 37, 0xD83CDDF2U, 0xD83CDDFBU, 4, 0, 0);
-	new (toFill++) EmojiData(9, 37, 0xD83CDDF2U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(19, 37, 0xD83CDDF2U, 0xD83CDDFDU, 4, 0, 0);
-	new (toFill++) EmojiData(10, 37, 0xD83CDDF2U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(27, 37, 0xD83CDDF2U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(29, 37, 0xD83CDDF3U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(33, 37, 0xD83CDDF3U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(36, 37, 0xD83CDDF3U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(39, 37, 0xD83CDDF3U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(37, 37, 0xD83CDDF3U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(35, 37, 0xD83CDDF3U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(32, 37, 0xD83CDDF3U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(2, 38, 0xD83CDDF3U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(31, 37, 0xD83CDDF3U, 0xD83CDDF5U, 4, 0, 0);
-	new (toFill++) EmojiData(30, 37, 0xD83CDDF3U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(38, 37, 0xD83CDDF3U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(34, 37, 0xD83CDDF3U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(3, 38, 0xD83CDDF4U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(7, 38, 0xD83CDDF5U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(10, 38, 0xD83CDDF5U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(36, 35, 0xD83CDDF5U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(8, 38, 0xD83CDDF5U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(11, 38, 0xD83CDDF5U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(4, 38, 0xD83CDDF5U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(13, 38, 0xD83CDDF5U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(5, 39, 0xD83CDDF5U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(12, 38, 0xD83CDDF5U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(15, 38, 0xD83CDDF5U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(6, 38, 0xD83CDDF5U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(14, 38, 0xD83CDDF5U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(5, 38, 0xD83CDDF5U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(9, 38, 0xD83CDDF5U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(16, 38, 0xD83CDDF6U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(17, 38, 0xD83CDDF7U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(18, 38, 0xD83CDDF7U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(26, 38, 0xD83CDDF7U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(19, 38, 0xD83CDDF7U, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(20, 38, 0xD83CDDF7U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(24, 38, 0xD83CDDF8U, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(34, 38, 0xD83CDDF8U, 0xD83CDDE7U, 4, 0, 0);
-	new (toFill++) EmojiData(27, 38, 0xD83CDDF8U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(7, 39, 0xD83CDDF8U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(10, 39, 0xD83CDDF8U, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(29, 38, 0xD83CDDF8U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(2, 39, 0xD83CDDF8U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(32, 38, 0xD83CDDF8U, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(31, 38, 0xD83CDDF8U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(28, 38, 0xD83CDDF8U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(22, 38, 0xD83CDDF8U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(25, 38, 0xD83CDDF8U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(35, 38, 0xD83CDDF8U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(8, 39, 0xD83CDDF8U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(38, 38, 0xD83CDDF8U, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(23, 38, 0xD83CDDF8U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(24, 35, 0xD83CDDF8U, 0xD83CDDFBU, 4, 0, 0);
-	new (toFill++) EmojiData(30, 38, 0xD83CDDF8U, 0xD83CDDFDU, 4, 0, 0);
-	new (toFill++) EmojiData(12, 39, 0xD83CDDF8U, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(9, 39, 0xD83CDDF8U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(25, 39, 0xD83CDDF9U, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(1, 35, 0xD83CDDF9U, 0xD83CDDE9U, 4, 0, 0);
-	new (toFill++) EmojiData(37, 35, 0xD83CDDF9U, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(18, 39, 0xD83CDDF9U, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(16, 39, 0xD83CDDF9U, 0xD83CDDEDU, 4, 0, 0);
-	new (toFill++) EmojiData(14, 39, 0xD83CDDF9U, 0xD83CDDEFU, 4, 0, 0);
-	new (toFill++) EmojiData(19, 39, 0xD83CDDF9U, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(17, 39, 0xD83CDDF9U, 0xD83CDDF1U, 4, 0, 0);
-	new (toFill++) EmojiData(24, 39, 0xD83CDDF9U, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(22, 39, 0xD83CDDF9U, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(20, 39, 0xD83CDDF9U, 0xD83CDDF4U, 4, 0, 0);
-	new (toFill++) EmojiData(23, 39, 0xD83CDDF9U, 0xD83CDDF7U, 4, 0, 0);
-	new (toFill++) EmojiData(21, 39, 0xD83CDDF9U, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(26, 39, 0xD83CDDF9U, 0xD83CDDFBU, 4, 0, 0);
-	new (toFill++) EmojiData(13, 39, 0xD83CDDF9U, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(15, 39, 0xD83CDDF9U, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(29, 39, 0xD83CDDFAU, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(28, 39, 0xD83CDDFAU, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(32, 39, 0xD83CDDFAU, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(33, 39, 0xD83CDDFAU, 0xD83CDDFEU, 4, 0, 0);
-	new (toFill++) EmojiData(34, 39, 0xD83CDDFAU, 0xD83CDDFFU, 4, 0, 0);
-	new (toFill++) EmojiData(36, 39, 0xD83CDDFBU, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(6, 39, 0xD83CDDFBU, 0xD83CDDE8U, 4, 0, 0);
-	new (toFill++) EmojiData(37, 39, 0xD83CDDFBU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(28, 34, 0xD83CDDFBU, 0xD83CDDECU, 4, 0, 0);
-	new (toFill++) EmojiData(27, 39, 0xD83CDDFBU, 0xD83CDDEEU, 4, 0, 0);
-	new (toFill++) EmojiData(38, 39, 0xD83CDDFBU, 0xD83CDDF3U, 4, 0, 0);
-	new (toFill++) EmojiData(35, 39, 0xD83CDDFBU, 0xD83CDDFAU, 4, 0, 0);
-	new (toFill++) EmojiData(39, 39, 0xD83CDDFCU, 0xD83CDDEBU, 4, 0, 0);
-	new (toFill++) EmojiData(21, 38, 0xD83CDDFCU, 0xD83CDDF8U, 4, 0, 0);
-	new (toFill++) EmojiData(34, 36, 0xD83CDDFDU, 0xD83CDDF0U, 4, 0, 0);
-	new (toFill++) EmojiData(1, 40, 0xD83CDDFEU, 0xD83CDDEAU, 4, 0, 0);
-	new (toFill++) EmojiData(18, 37, 0xD83CDDFEU, 0xD83CDDF9U, 4, 0, 0);
-	new (toFill++) EmojiData(36, 38, 0xD83CDDFFU, 0xD83CDDE6U, 4, 0, 0);
-	new (toFill++) EmojiData(2, 40, 0xD83CDDFFU, 0xD83CDDF2U, 4, 0, 0);
-	new (toFill++) EmojiData(3, 40, 0xD83CDDFFU, 0xD83CDDFCU, 4, 0, 0);
-	new (toFill++) EmojiData(10, 8, 0xD83CDF85U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(11, 8, 0xD83CDF85U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(12, 8, 0xD83CDF85U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(13, 8, 0xD83CDF85U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(14, 8, 0xD83CDF85U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(0, 9, 0xD83CDFC3U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(1, 9, 0xD83CDFC3U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(2, 9, 0xD83CDFC3U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(3, 9, 0xD83CDFC3U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(4, 9, 0xD83CDFC3U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(7, 18, 0xD83CDFC4U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(8, 18, 0xD83CDFC4U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(9, 18, 0xD83CDFC4U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(10, 18, 0xD83CDFC4U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(11, 18, 0xD83CDFC4U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(3, 19, 0xD83CDFC7U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(4, 19, 0xD83CDFC7U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(5, 19, 0xD83CDFC7U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(6, 19, 0xD83CDFC7U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(7, 19, 0xD83CDFC7U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(1, 18, 0xD83CDFCAU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(2, 18, 0xD83CDFCAU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(3, 18, 0xD83CDFCAU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(4, 18, 0xD83CDFCAU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(5, 18, 0xD83CDFCAU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(25, 18, 0xD83CDFCBU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(26, 18, 0xD83CDFCBU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(27, 18, 0xD83CDFCBU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(28, 18, 0xD83CDFCBU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(29, 18, 0xD83CDFCBU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(34, 5, 0xD83DDC42U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(35, 5, 0xD83DDC42U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(36, 5, 0xD83DDC42U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(37, 5, 0xD83DDC42U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(38, 5, 0xD83DDC42U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(0, 6, 0xD83DDC43U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(1, 6, 0xD83DDC43U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(2, 6, 0xD83DDC43U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(3, 6, 0xD83DDC43U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(4, 6, 0xD83DDC43U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(12, 4, 0xD83DDC46U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(13, 4, 0xD83DDC46U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(14, 4, 0xD83DDC46U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(15, 4, 0xD83DDC46U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(16, 4, 0xD83DDC46U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(18, 4, 0xD83DDC47U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(19, 4, 0xD83DDC47U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(20, 4, 0xD83DDC47U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(21, 4, 0xD83DDC47U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(22, 4, 0xD83DDC47U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(24, 4, 0xD83DDC48U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(25, 4, 0xD83DDC48U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(26, 4, 0xD83DDC48U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(27, 4, 0xD83DDC48U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(28, 4, 0xD83DDC48U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(30, 4, 0xD83DDC49U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(31, 4, 0xD83DDC49U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(32, 4, 0xD83DDC49U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(33, 4, 0xD83DDC49U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(34, 4, 0xD83DDC49U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(38, 2, 0xD83DDC4AU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(39, 2, 0xD83DDC4AU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(0, 3, 0xD83DDC4AU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(1, 3, 0xD83DDC4AU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(2, 3, 0xD83DDC4AU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(20, 2, 0xD83DDC4BU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(21, 2, 0xD83DDC4BU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(22, 2, 0xD83DDC4BU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(23, 2, 0xD83DDC4BU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(24, 2, 0xD83DDC4BU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(16, 3, 0xD83DDC4CU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(17, 3, 0xD83DDC4CU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(18, 3, 0xD83DDC4CU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(19, 3, 0xD83DDC4CU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(20, 3, 0xD83DDC4CU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(26, 2, 0xD83DDC4DU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(27, 2, 0xD83DDC4DU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(28, 2, 0xD83DDC4DU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(29, 2, 0xD83DDC4DU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(30, 2, 0xD83DDC4DU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(32, 2, 0xD83DDC4EU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(33, 2, 0xD83DDC4EU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(34, 2, 0xD83DDC4EU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(35, 2, 0xD83DDC4EU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(36, 2, 0xD83DDC4EU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(14, 2, 0xD83DDC4FU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(15, 2, 0xD83DDC4FU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(16, 2, 0xD83DDC4FU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(17, 2, 0xD83DDC4FU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(18, 2, 0xD83DDC4FU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(28, 3, 0xD83DDC50U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(29, 3, 0xD83DDC50U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(30, 3, 0xD83DDC50U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(31, 3, 0xD83DDC50U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(32, 3, 0xD83DDC50U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(17, 6, 0xD83DDC66U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(18, 6, 0xD83DDC66U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(19, 6, 0xD83DDC66U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(20, 6, 0xD83DDC66U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(21, 6, 0xD83DDC66U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(23, 6, 0xD83DDC67U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(24, 6, 0xD83DDC67U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(25, 6, 0xD83DDC67U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(26, 6, 0xD83DDC67U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(27, 6, 0xD83DDC67U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(29, 6, 0xD83DDC68U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(30, 6, 0xD83DDC68U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(31, 6, 0xD83DDC68U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(32, 6, 0xD83DDC68U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(33, 6, 0xD83DDC68U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(35, 6, 0xD83DDC69U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(36, 6, 0xD83DDC69U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(37, 6, 0xD83DDC69U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(38, 6, 0xD83DDC69U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(39, 6, 0xD83DDC69U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(31, 7, 0xD83DDC6EU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(32, 7, 0xD83DDC6EU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(33, 7, 0xD83DDC6EU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(34, 7, 0xD83DDC6EU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(35, 7, 0xD83DDC6EU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(28, 8, 0xD83DDC70U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(29, 8, 0xD83DDC70U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(30, 8, 0xD83DDC70U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(31, 8, 0xD83DDC70U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(32, 8, 0xD83DDC70U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(1, 7, 0xD83DDC71U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(2, 7, 0xD83DDC71U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(3, 7, 0xD83DDC71U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(4, 7, 0xD83DDC71U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(5, 7, 0xD83DDC71U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(19, 7, 0xD83DDC72U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(20, 7, 0xD83DDC72U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(21, 7, 0xD83DDC72U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(22, 7, 0xD83DDC72U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(23, 7, 0xD83DDC72U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(25, 7, 0xD83DDC73U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(26, 7, 0xD83DDC73U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(27, 7, 0xD83DDC73U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(28, 7, 0xD83DDC73U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(29, 7, 0xD83DDC73U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(7, 7, 0xD83DDC74U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(8, 7, 0xD83DDC74U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(9, 7, 0xD83DDC74U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(10, 7, 0xD83DDC74U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(11, 7, 0xD83DDC74U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(13, 7, 0xD83DDC75U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(14, 7, 0xD83DDC75U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(15, 7, 0xD83DDC75U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(16, 7, 0xD83DDC75U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(17, 7, 0xD83DDC75U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(11, 6, 0xD83DDC76U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(12, 6, 0xD83DDC76U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(13, 6, 0xD83DDC76U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(14, 6, 0xD83DDC76U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(15, 6, 0xD83DDC76U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(37, 7, 0xD83DDC77U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(38, 7, 0xD83DDC77U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(39, 7, 0xD83DDC77U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(0, 8, 0xD83DDC77U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(1, 8, 0xD83DDC77U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(22, 8, 0xD83DDC78U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(23, 8, 0xD83DDC78U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(24, 8, 0xD83DDC78U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(25, 8, 0xD83DDC78U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(26, 8, 0xD83DDC78U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(16, 8, 0xD83DDC7CU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(17, 8, 0xD83DDC7CU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(18, 8, 0xD83DDC7CU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(19, 8, 0xD83DDC7CU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(20, 8, 0xD83DDC7CU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(22, 9, 0xD83DDC81U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(23, 9, 0xD83DDC81U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(24, 9, 0xD83DDC81U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(25, 9, 0xD83DDC81U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(26, 9, 0xD83DDC81U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(3, 8, 0xD83DDC82U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(4, 8, 0xD83DDC82U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(5, 8, 0xD83DDC82U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(6, 8, 0xD83DDC82U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(7, 8, 0xD83DDC82U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(6, 9, 0xD83DDC83U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(7, 9, 0xD83DDC83U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(8, 9, 0xD83DDC83U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(9, 9, 0xD83DDC83U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(10, 9, 0xD83DDC83U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(26, 5, 0xD83DDC85U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(27, 5, 0xD83DDC85U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(28, 5, 0xD83DDC85U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(29, 5, 0xD83DDC85U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(30, 5, 0xD83DDC85U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(24, 10, 0xD83DDC86U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(25, 10, 0xD83DDC86U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(26, 10, 0xD83DDC86U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(27, 10, 0xD83DDC86U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(28, 10, 0xD83DDC86U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(18, 10, 0xD83DDC87U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(19, 10, 0xD83DDC87U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(20, 10, 0xD83DDC87U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(21, 10, 0xD83DDC87U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(22, 10, 0xD83DDC87U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(34, 3, 0xD83DDCAAU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(35, 3, 0xD83DDCAAU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(36, 3, 0xD83DDCAAU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(37, 3, 0xD83DDCAAU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(38, 3, 0xD83DDCAAU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(2, 5, 0xD83DDD90U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(3, 5, 0xD83DDD90U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(4, 5, 0xD83DDD90U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(5, 5, 0xD83DDD90U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(6, 5, 0xD83DDD90U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(36, 4, 0xD83DDD95U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(37, 4, 0xD83DDD95U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(38, 4, 0xD83DDD95U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(39, 4, 0xD83DDD95U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(0, 5, 0xD83DDD95U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(14, 5, 0xD83DDD96U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(15, 5, 0xD83DDD96U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(16, 5, 0xD83DDD96U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(17, 5, 0xD83DDD96U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(18, 5, 0xD83DDD96U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(28, 9, 0xD83DDE45U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(29, 9, 0xD83DDE45U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(30, 9, 0xD83DDE45U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(31, 9, 0xD83DDE45U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(32, 9, 0xD83DDE45U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(34, 9, 0xD83DDE46U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(35, 9, 0xD83DDE46U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(36, 9, 0xD83DDE46U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(37, 9, 0xD83DDE46U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(38, 9, 0xD83DDE46U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(16, 9, 0xD83DDE47U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(17, 9, 0xD83DDE47U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(18, 9, 0xD83DDE47U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(19, 9, 0xD83DDE47U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(20, 9, 0xD83DDE47U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(0, 10, 0xD83DDE4BU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(1, 10, 0xD83DDE4BU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(2, 10, 0xD83DDE4BU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(3, 10, 0xD83DDE4BU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(4, 10, 0xD83DDE4BU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(8, 2, 0xD83DDE4CU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(9, 2, 0xD83DDE4CU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(10, 2, 0xD83DDE4CU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(11, 2, 0xD83DDE4CU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(12, 2, 0xD83DDE4CU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(12, 10, 0xD83DDE4DU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(13, 10, 0xD83DDE4DU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(14, 10, 0xD83DDE4DU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(15, 10, 0xD83DDE4DU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(16, 10, 0xD83DDE4DU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(6, 10, 0xD83DDE4EU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(7, 10, 0xD83DDE4EU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(8, 10, 0xD83DDE4EU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(9, 10, 0xD83DDE4EU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(10, 10, 0xD83DDE4EU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(0, 4, 0xD83DDE4FU, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(1, 4, 0xD83DDE4FU, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(2, 4, 0xD83DDE4FU, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(3, 4, 0xD83DDE4FU, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(4, 4, 0xD83DDE4FU, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(35, 17, 0xD83DDEA3U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(36, 17, 0xD83DDEA3U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(37, 17, 0xD83DDEA3U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(38, 17, 0xD83DDEA3U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(39, 17, 0xD83DDEA3U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(31, 18, 0xD83DDEB4U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(32, 18, 0xD83DDEB4U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(33, 18, 0xD83DDEB4U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(34, 18, 0xD83DDEB4U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(35, 18, 0xD83DDEB4U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(37, 18, 0xD83DDEB5U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(38, 18, 0xD83DDEB5U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(39, 18, 0xD83DDEB5U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(0, 19, 0xD83DDEB5U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(1, 19, 0xD83DDEB5U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(34, 8, 0xD83DDEB6U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(35, 8, 0xD83DDEB6U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(36, 8, 0xD83DDEB6U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(37, 8, 0xD83DDEB6U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(38, 8, 0xD83DDEB6U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(13, 18, 0xD83DDEC0U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(14, 18, 0xD83DDEC0U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(15, 18, 0xD83DDEC0U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(16, 18, 0xD83DDEC0U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(17, 18, 0xD83DDEC0U, 0, 4, 0, 0xD83CDFFFU);
-	new (toFill++) EmojiData(8, 5, 0xD83EDD18U, 0, 4, 0, 0xD83CDFFBU);
-	new (toFill++) EmojiData(9, 5, 0xD83EDD18U, 0, 4, 0, 0xD83CDFFCU);
-	new (toFill++) EmojiData(10, 5, 0xD83EDD18U, 0, 4, 0, 0xD83CDFFDU);
-	new (toFill++) EmojiData(11, 5, 0xD83EDD18U, 0, 4, 0, 0xD83CDFFEU);
-	new (toFill++) EmojiData(12, 5, 0xD83EDD18U, 0, 4, 0, 0xD83CDFFFU);
-};
-
-EmojiPtr emojiGet(uint32 code) {
-	if (!emojis) return 0;
-
-	uint32 highCode = code >> 16;
-	if (!highCode) {
-		switch (code) {
-			case 0xA9U: return &emojis[0];
-			case 0xAEU: return &emojis[1];
-		}
-
-		if (code < 0x203CU || code > 0x3299U) return 0;
-
-		switch (code) {
-			case 0x203CU: return &emojis[2];
-			case 0x2049U: return &emojis[3];
-			case 0x2122U: return &emojis[4];
-			case 0x2139U: return &emojis[5];
-			case 0x2194U: return &emojis[6];
-			case 0x2195U: return &emojis[7];
-			case 0x2196U: return &emojis[8];
-			case 0x2197U: return &emojis[9];
-			case 0x2198U: return &emojis[10];
-			case 0x2199U: return &emojis[11];
-			case 0x21A9U: return &emojis[12];
-			case 0x21AAU: return &emojis[13];
-			case 0x231AU: return &emojis[14];
-			case 0x231BU: return &emojis[15];
-			case 0x2328U: return &emojis[16];
-			case 0x23E9U: return &emojis[17];
-			case 0x23EAU: return &emojis[18];
-			case 0x23EBU: return &emojis[19];
-			case 0x23ECU: return &emojis[20];
-			case 0x23EDU: return &emojis[21];
-			case 0x23EEU: return &emojis[22];
-			case 0x23EFU: return &emojis[23];
-			case 0x23F0U: return &emojis[24];
-			case 0x23F1U: return &emojis[25];
-			case 0x23F2U: return &emojis[26];
-			case 0x23F3U: return &emojis[27];
-			case 0x23F8U: return &emojis[28];
-			case 0x23F9U: return &emojis[29];
-			case 0x23FAU: return &emojis[30];
-			case 0x24C2U: return &emojis[31];
-			case 0x25AAU: return &emojis[32];
-			case 0x25ABU: return &emojis[33];
-			case 0x25B6U: return &emojis[34];
-			case 0x25C0U: return &emojis[35];
-			case 0x25FBU: return &emojis[36];
-			case 0x25FCU: return &emojis[37];
-			case 0x25FDU: return &emojis[38];
-			case 0x25FEU: return &emojis[39];
-			case 0x2600U: return &emojis[40];
-			case 0x2601U: return &emojis[41];
-			case 0x2602U: return &emojis[42];
-			case 0x2603U: return &emojis[43];
-			case 0x2604U: return &emojis[44];
-			case 0x260EU: return &emojis[45];
-			case 0x2611U: return &emojis[46];
-			case 0x2614U: return &emojis[47];
-			case 0x2615U: return &emojis[48];
-			case 0x2618U: return &emojis[49];
-			case 0x261DU: return &emojis[50];
-			case 0x2620U: return &emojis[51];
-			case 0x2622U: return &emojis[52];
-			case 0x2623U: return &emojis[53];
-			case 0x2626U: return &emojis[54];
-			case 0x262AU: return &emojis[55];
-			case 0x262EU: return &emojis[56];
-			case 0x262FU: return &emojis[57];
-			case 0x2638U: return &emojis[58];
-			case 0x2639U: return &emojis[59];
-			case 0x263AU: return &emojis[60];
-			case 0x2648U: return &emojis[61];
-			case 0x2649U: return &emojis[62];
-			case 0x264AU: return &emojis[63];
-			case 0x264BU: return &emojis[64];
-			case 0x264CU: return &emojis[65];
-			case 0x264DU: return &emojis[66];
-			case 0x264EU: return &emojis[67];
-			case 0x264FU: return &emojis[68];
-			case 0x2650U: return &emojis[69];
-			case 0x2651U: return &emojis[70];
-			case 0x2652U: return &emojis[71];
-			case 0x2653U: return &emojis[72];
-			case 0x2660U: return &emojis[73];
-			case 0x2663U: return &emojis[74];
-			case 0x2665U: return &emojis[75];
-			case 0x2666U: return &emojis[76];
-			case 0x2668U: return &emojis[77];
-			case 0x267BU: return &emojis[78];
-			case 0x267FU: return &emojis[79];
-			case 0x2692U: return &emojis[80];
-			case 0x2693U: return &emojis[81];
-			case 0x2694U: return &emojis[82];
-			case 0x2696U: return &emojis[83];
-			case 0x2697U: return &emojis[84];
-			case 0x2699U: return &emojis[85];
-			case 0x269BU: return &emojis[86];
-			case 0x269CU: return &emojis[87];
-			case 0x26A0U: return &emojis[88];
-			case 0x26A1U: return &emojis[89];
-			case 0x26AAU: return &emojis[90];
-			case 0x26ABU: return &emojis[91];
-			case 0x26B0U: return &emojis[92];
-			case 0x26B1U: return &emojis[93];
-			case 0x26BDU: return &emojis[94];
-			case 0x26BEU: return &emojis[95];
-			case 0x26C4U: return &emojis[96];
-			case 0x26C5U: return &emojis[97];
-			case 0x26C8U: return &emojis[98];
-			case 0x26CEU: return &emojis[99];
-			case 0x26CFU: return &emojis[100];
-			case 0x26D1U: return &emojis[101];
-			case 0x26D3U: return &emojis[102];
-			case 0x26D4U: return &emojis[103];
-			case 0x26E9U: return &emojis[104];
-			case 0x26EAU: return &emojis[105];
-			case 0x26F0U: return &emojis[106];
-			case 0x26F1U: return &emojis[107];
-			case 0x26F2U: return &emojis[108];
-			case 0x26F3U: return &emojis[109];
-			case 0x26F4U: return &emojis[110];
-			case 0x26F5U: return &emojis[111];
-			case 0x26F7U: return &emojis[112];
-			case 0x26F8U: return &emojis[113];
-			case 0x26F9U: return &emojis[114];
-			case 0x26FAU: return &emojis[115];
-			case 0x26FDU: return &emojis[116];
-			case 0x2702U: return &emojis[117];
-			case 0x2705U: return &emojis[118];
-			case 0x2708U: return &emojis[119];
-			case 0x2709U: return &emojis[120];
-			case 0x270AU: return &emojis[121];
-			case 0x270BU: return &emojis[122];
-			case 0x270CU: return &emojis[123];
-			case 0x270DU: return &emojis[124];
-			case 0x270FU: return &emojis[125];
-			case 0x2712U: return &emojis[126];
-			case 0x2714U: return &emojis[127];
-			case 0x2716U: return &emojis[128];
-			case 0x271DU: return &emojis[129];
-			case 0x2721U: return &emojis[130];
-			case 0x2728U: return &emojis[131];
-			case 0x2733U: return &emojis[132];
-			case 0x2734U: return &emojis[133];
-			case 0x2744U: return &emojis[134];
-			case 0x2747U: return &emojis[135];
-			case 0x274CU: return &emojis[136];
-			case 0x274EU: return &emojis[137];
-			case 0x2753U: return &emojis[138];
-			case 0x2754U: return &emojis[139];
-			case 0x2755U: return &emojis[140];
-			case 0x2757U: return &emojis[141];
-			case 0x2763U: return &emojis[142];
-			case 0x2764U: return &emojis[143];
-			case 0x2795U: return &emojis[144];
-			case 0x2796U: return &emojis[145];
-			case 0x2797U: return &emojis[146];
-			case 0x27A1U: return &emojis[147];
-			case 0x27B0U: return &emojis[148];
-			case 0x27BFU: return &emojis[149];
-			case 0x2934U: return &emojis[150];
-			case 0x2935U: return &emojis[151];
-			case 0x2B05U: return &emojis[152];
-			case 0x2B06U: return &emojis[153];
-			case 0x2B07U: return &emojis[154];
-			case 0x2B1BU: return &emojis[155];
-			case 0x2B1CU: return &emojis[156];
-			case 0x2B50U: return &emojis[157];
-			case 0x2B55U: return &emojis[158];
-			case 0x3030U: return &emojis[159];
-			case 0x303DU: return &emojis[160];
-			case 0x3297U: return &emojis[161];
-			case 0x3299U: return &emojis[162];
-		}
-
-		return 0;
-	}
-
-	if (highCode == 0x23 || highCode == 0x2A || (highCode >= 0x30 && highCode < 0x3A)) {
-		if ((code & 0xFFFFU) != 0x20E3U) return 0;
-
-		switch (code) {
-			case 0x2320E3U: return &emojis[163];
-			case 0x2A20E3U: return &emojis[164];
-			case 0x3020E3U: return &emojis[165];
-			case 0x3120E3U: return &emojis[166];
-			case 0x3220E3U: return &emojis[167];
-			case 0x3320E3U: return &emojis[168];
-			case 0x3420E3U: return &emojis[169];
-			case 0x3520E3U: return &emojis[170];
-			case 0x3620E3U: return &emojis[171];
-			case 0x3720E3U: return &emojis[172];
-			case 0x3820E3U: return &emojis[173];
-			case 0x3920E3U: return &emojis[174];
-		}
-
-		return 0;
-	}
-
-	if (highCode == 0xFFFFU) {
-		static const int sequenceOffset = 1018;
-
-		uint32 index = (code & 0xFFFFU);
-		return (index < 19) ? &emojis[sequenceOffset + index] : 0;
-	}
-
-	if (code < 0xD83CDC04U || code > 0xD83EDDC0U) return 0;
-
-	switch (code) {
-		case 0xD83CDC04U: return &emojis[175];
-		case 0xD83CDCCFU: return &emojis[176];
-		case 0xD83CDD70U: return &emojis[177];
-		case 0xD83CDD71U: return &emojis[178];
-		case 0xD83CDD7EU: return &emojis[179];
-		case 0xD83CDD7FU: return &emojis[180];
-		case 0xD83CDD8EU: return &emojis[181];
-		case 0xD83CDD91U: return &emojis[182];
-		case 0xD83CDD92U: return &emojis[183];
-		case 0xD83CDD93U: return &emojis[184];
-		case 0xD83CDD94U: return &emojis[185];
-		case 0xD83CDD95U: return &emojis[186];
-		case 0xD83CDD96U: return &emojis[187];
-		case 0xD83CDD97U: return &emojis[188];
-		case 0xD83CDD98U: return &emojis[189];
-		case 0xD83CDD99U: return &emojis[190];
-		case 0xD83CDD9AU: return &emojis[191];
-		case 0xD83CDE01U: return &emojis[192];
-		case 0xD83CDE02U: return &emojis[193];
-		case 0xD83CDE1AU: return &emojis[194];
-		case 0xD83CDE2FU: return &emojis[195];
-		case 0xD83CDE32U: return &emojis[196];
-		case 0xD83CDE33U: return &emojis[197];
-		case 0xD83CDE34U: return &emojis[198];
-		case 0xD83CDE35U: return &emojis[199];
-		case 0xD83CDE36U: return &emojis[200];
-		case 0xD83CDE37U: return &emojis[201];
-		case 0xD83CDE38U: return &emojis[202];
-		case 0xD83CDE39U: return &emojis[203];
-		case 0xD83CDE3AU: return &emojis[204];
-		case 0xD83CDE50U: return &emojis[205];
-		case 0xD83CDE51U: return &emojis[206];
-		case 0xD83CDF00U: return &emojis[207];
-		case 0xD83CDF01U: return &emojis[208];
-		case 0xD83CDF02U: return &emojis[209];
-		case 0xD83CDF03U: return &emojis[210];
-		case 0xD83CDF04U: return &emojis[211];
-		case 0xD83CDF05U: return &emojis[212];
-		case 0xD83CDF06U: return &emojis[213];
-		case 0xD83CDF07U: return &emojis[214];
-		case 0xD83CDF08U: return &emojis[215];
-		case 0xD83CDF09U: return &emojis[216];
-		case 0xD83CDF0AU: return &emojis[217];
-		case 0xD83CDF0BU: return &emojis[218];
-		case 0xD83CDF0CU: return &emojis[219];
-		case 0xD83CDF0DU: return &emojis[220];
-		case 0xD83CDF0EU: return &emojis[221];
-		case 0xD83CDF0FU: return &emojis[222];
-		case 0xD83CDF10U: return &emojis[223];
-		case 0xD83CDF11U: return &emojis[224];
-		case 0xD83CDF12U: return &emojis[225];
-		case 0xD83CDF13U: return &emojis[226];
-		case 0xD83CDF14U: return &emojis[227];
-		case 0xD83CDF15U: return &emojis[228];
-		case 0xD83CDF16U: return &emojis[229];
-		case 0xD83CDF17U: return &emojis[230];
-		case 0xD83CDF18U: return &emojis[231];
-		case 0xD83CDF19U: return &emojis[232];
-		case 0xD83CDF1AU: return &emojis[233];
-		case 0xD83CDF1BU: return &emojis[234];
-		case 0xD83CDF1CU: return &emojis[235];
-		case 0xD83CDF1DU: return &emojis[236];
-		case 0xD83CDF1EU: return &emojis[237];
-		case 0xD83CDF1FU: return &emojis[238];
-		case 0xD83CDF20U: return &emojis[239];
-		case 0xD83CDF21U: return &emojis[240];
-		case 0xD83CDF24U: return &emojis[241];
-		case 0xD83CDF25U: return &emojis[242];
-		case 0xD83CDF26U: return &emojis[243];
-		case 0xD83CDF27U: return &emojis[244];
-		case 0xD83CDF28U: return &emojis[245];
-		case 0xD83CDF29U: return &emojis[246];
-		case 0xD83CDF2AU: return &emojis[247];
-		case 0xD83CDF2BU: return &emojis[248];
-		case 0xD83CDF2CU: return &emojis[249];
-		case 0xD83CDF2DU: return &emojis[250];
-		case 0xD83CDF2EU: return &emojis[251];
-		case 0xD83CDF2FU: return &emojis[252];
-		case 0xD83CDF30U: return &emojis[253];
-		case 0xD83CDF31U: return &emojis[254];
-		case 0xD83CDF32U: return &emojis[255];
-		case 0xD83CDF33U: return &emojis[256];
-		case 0xD83CDF34U: return &emojis[257];
-		case 0xD83CDF35U: return &emojis[258];
-		case 0xD83CDF36U: return &emojis[259];
-		case 0xD83CDF37U: return &emojis[260];
-		case 0xD83CDF38U: return &emojis[261];
-		case 0xD83CDF39U: return &emojis[262];
-		case 0xD83CDF3AU: return &emojis[263];
-		case 0xD83CDF3BU: return &emojis[264];
-		case 0xD83CDF3CU: return &emojis[265];
-		case 0xD83CDF3DU: return &emojis[266];
-		case 0xD83CDF3EU: return &emojis[267];
-		case 0xD83CDF3FU: return &emojis[268];
-		case 0xD83CDF40U: return &emojis[269];
-		case 0xD83CDF41U: return &emojis[270];
-		case 0xD83CDF42U: return &emojis[271];
-		case 0xD83CDF43U: return &emojis[272];
-		case 0xD83CDF44U: return &emojis[273];
-		case 0xD83CDF45U: return &emojis[274];
-		case 0xD83CDF46U: return &emojis[275];
-		case 0xD83CDF47U: return &emojis[276];
-		case 0xD83CDF48U: return &emojis[277];
-		case 0xD83CDF49U: return &emojis[278];
-		case 0xD83CDF4AU: return &emojis[279];
-		case 0xD83CDF4BU: return &emojis[280];
-		case 0xD83CDF4CU: return &emojis[281];
-		case 0xD83CDF4DU: return &emojis[282];
-		case 0xD83CDF4EU: return &emojis[283];
-		case 0xD83CDF4FU: return &emojis[284];
-		case 0xD83CDF50U: return &emojis[285];
-		case 0xD83CDF51U: return &emojis[286];
-		case 0xD83CDF52U: return &emojis[287];
-		case 0xD83CDF53U: return &emojis[288];
-		case 0xD83CDF54U: return &emojis[289];
-		case 0xD83CDF55U: return &emojis[290];
-		case 0xD83CDF56U: return &emojis[291];
-		case 0xD83CDF57U: return &emojis[292];
-		case 0xD83CDF58U: return &emojis[293];
-		case 0xD83CDF59U: return &emojis[294];
-		case 0xD83CDF5AU: return &emojis[295];
-		case 0xD83CDF5BU: return &emojis[296];
-		case 0xD83CDF5CU: return &emojis[297];
-		case 0xD83CDF5DU: return &emojis[298];
-		case 0xD83CDF5EU: return &emojis[299];
-		case 0xD83CDF5FU: return &emojis[300];
-		case 0xD83CDF60U: return &emojis[301];
-		case 0xD83CDF61U: return &emojis[302];
-		case 0xD83CDF62U: return &emojis[303];
-		case 0xD83CDF63U: return &emojis[304];
-		case 0xD83CDF64U: return &emojis[305];
-		case 0xD83CDF65U: return &emojis[306];
-		case 0xD83CDF66U: return &emojis[307];
-		case 0xD83CDF67U: return &emojis[308];
-		case 0xD83CDF68U: return &emojis[309];
-		case 0xD83CDF69U: return &emojis[310];
-		case 0xD83CDF6AU: return &emojis[311];
-		case 0xD83CDF6BU: return &emojis[312];
-		case 0xD83CDF6CU: return &emojis[313];
-		case 0xD83CDF6DU: return &emojis[314];
-		case 0xD83CDF6EU: return &emojis[315];
-		case 0xD83CDF6FU: return &emojis[316];
-		case 0xD83CDF70U: return &emojis[317];
-		case 0xD83CDF71U: return &emojis[318];
-		case 0xD83CDF72U: return &emojis[319];
-		case 0xD83CDF73U: return &emojis[320];
-		case 0xD83CDF74U: return &emojis[321];
-		case 0xD83CDF75U: return &emojis[322];
-		case 0xD83CDF76U: return &emojis[323];
-		case 0xD83CDF77U: return &emojis[324];
-		case 0xD83CDF78U: return &emojis[325];
-		case 0xD83CDF79U: return &emojis[326];
-		case 0xD83CDF7AU: return &emojis[327];
-		case 0xD83CDF7BU: return &emojis[328];
-		case 0xD83CDF7CU: return &emojis[329];
-		case 0xD83CDF7DU: return &emojis[330];
-		case 0xD83CDF7EU: return &emojis[331];
-		case 0xD83CDF7FU: return &emojis[332];
-		case 0xD83CDF80U: return &emojis[333];
-		case 0xD83CDF81U: return &emojis[334];
-		case 0xD83CDF82U: return &emojis[335];
-		case 0xD83CDF83U: return &emojis[336];
-		case 0xD83CDF84U: return &emojis[337];
-		case 0xD83CDF85U: return &emojis[338];
-		case 0xD83CDF86U: return &emojis[339];
-		case 0xD83CDF87U: return &emojis[340];
-		case 0xD83CDF88U: return &emojis[341];
-		case 0xD83CDF89U: return &emojis[342];
-		case 0xD83CDF8AU: return &emojis[343];
-		case 0xD83CDF8BU: return &emojis[344];
-		case 0xD83CDF8CU: return &emojis[345];
-		case 0xD83CDF8DU: return &emojis[346];
-		case 0xD83CDF8EU: return &emojis[347];
-		case 0xD83CDF8FU: return &emojis[348];
-		case 0xD83CDF90U: return &emojis[349];
-		case 0xD83CDF91U: return &emojis[350];
-		case 0xD83CDF92U: return &emojis[351];
-		case 0xD83CDF93U: return &emojis[352];
-		case 0xD83CDF96U: return &emojis[353];
-		case 0xD83CDF97U: return &emojis[354];
-		case 0xD83CDF99U: return &emojis[355];
-		case 0xD83CDF9AU: return &emojis[356];
-		case 0xD83CDF9BU: return &emojis[357];
-		case 0xD83CDF9EU: return &emojis[358];
-		case 0xD83CDF9FU: return &emojis[359];
-		case 0xD83CDFA0U: return &emojis[360];
-		case 0xD83CDFA1U: return &emojis[361];
-		case 0xD83CDFA2U: return &emojis[362];
-		case 0xD83CDFA3U: return &emojis[363];
-		case 0xD83CDFA4U: return &emojis[364];
-		case 0xD83CDFA5U: return &emojis[365];
-		case 0xD83CDFA6U: return &emojis[366];
-		case 0xD83CDFA7U: return &emojis[367];
-		case 0xD83CDFA8U: return &emojis[368];
-		case 0xD83CDFA9U: return &emojis[369];
-		case 0xD83CDFAAU: return &emojis[370];
-		case 0xD83CDFABU: return &emojis[371];
-		case 0xD83CDFACU: return &emojis[372];
-		case 0xD83CDFADU: return &emojis[373];
-		case 0xD83CDFAEU: return &emojis[374];
-		case 0xD83CDFAFU: return &emojis[375];
-		case 0xD83CDFB0U: return &emojis[376];
-		case 0xD83CDFB1U: return &emojis[377];
-		case 0xD83CDFB2U: return &emojis[378];
-		case 0xD83CDFB3U: return &emojis[379];
-		case 0xD83CDFB4U: return &emojis[380];
-		case 0xD83CDFB5U: return &emojis[381];
-		case 0xD83CDFB6U: return &emojis[382];
-		case 0xD83CDFB7U: return &emojis[383];
-		case 0xD83CDFB8U: return &emojis[384];
-		case 0xD83CDFB9U: return &emojis[385];
-		case 0xD83CDFBAU: return &emojis[386];
-		case 0xD83CDFBBU: return &emojis[387];
-		case 0xD83CDFBCU: return &emojis[388];
-		case 0xD83CDFBDU: return &emojis[389];
-		case 0xD83CDFBEU: return &emojis[390];
-		case 0xD83CDFBFU: return &emojis[391];
-		case 0xD83CDFC0U: return &emojis[392];
-		case 0xD83CDFC1U: return &emojis[393];
-		case 0xD83CDFC2U: return &emojis[394];
-		case 0xD83CDFC3U: return &emojis[395];
-		case 0xD83CDFC4U: return &emojis[396];
-		case 0xD83CDFC5U: return &emojis[397];
-		case 0xD83CDFC6U: return &emojis[398];
-		case 0xD83CDFC7U: return &emojis[399];
-		case 0xD83CDFC8U: return &emojis[400];
-		case 0xD83CDFC9U: return &emojis[401];
-		case 0xD83CDFCAU: return &emojis[402];
-		case 0xD83CDFCBU: return &emojis[403];
-		case 0xD83CDFCCU: return &emojis[404];
-		case 0xD83CDFCDU: return &emojis[405];
-		case 0xD83CDFCEU: return &emojis[406];
-		case 0xD83CDFCFU: return &emojis[407];
-		case 0xD83CDFD0U: return &emojis[408];
-		case 0xD83CDFD1U: return &emojis[409];
-		case 0xD83CDFD2U: return &emojis[410];
-		case 0xD83CDFD3U: return &emojis[411];
-		case 0xD83CDFD4U: return &emojis[412];
-		case 0xD83CDFD5U: return &emojis[413];
-		case 0xD83CDFD6U: return &emojis[414];
-		case 0xD83CDFD7U: return &emojis[415];
-		case 0xD83CDFD8U: return &emojis[416];
-		case 0xD83CDFD9U: return &emojis[417];
-		case 0xD83CDFDAU: return &emojis[418];
-		case 0xD83CDFDBU: return &emojis[419];
-		case 0xD83CDFDCU: return &emojis[420];
-		case 0xD83CDFDDU: return &emojis[421];
-		case 0xD83CDFDEU: return &emojis[422];
-		case 0xD83CDFDFU: return &emojis[423];
-		case 0xD83CDFE0U: return &emojis[424];
-		case 0xD83CDFE1U: return &emojis[425];
-		case 0xD83CDFE2U: return &emojis[426];
-		case 0xD83CDFE3U: return &emojis[427];
-		case 0xD83CDFE4U: return &emojis[428];
-		case 0xD83CDFE5U: return &emojis[429];
-		case 0xD83CDFE6U: return &emojis[430];
-		case 0xD83CDFE7U: return &emojis[431];
-		case 0xD83CDFE8U: return &emojis[432];
-		case 0xD83CDFE9U: return &emojis[433];
-		case 0xD83CDFEAU: return &emojis[434];
-		case 0xD83CDFEBU: return &emojis[435];
-		case 0xD83CDFECU: return &emojis[436];
-		case 0xD83CDFEDU: return &emojis[437];
-		case 0xD83CDFEEU: return &emojis[438];
-		case 0xD83CDFEFU: return &emojis[439];
-		case 0xD83CDFF0U: return &emojis[440];
-		case 0xD83CDFF3U: return &emojis[441];
-		case 0xD83CDFF4U: return &emojis[442];
-		case 0xD83CDFF5U: return &emojis[443];
-		case 0xD83CDFF7U: return &emojis[444];
-		case 0xD83CDFF8U: return &emojis[445];
-		case 0xD83CDFF9U: return &emojis[446];
-		case 0xD83CDFFAU: return &emojis[447];
-		case 0xD83DDC00U: return &emojis[448];
-		case 0xD83DDC01U: return &emojis[449];
-		case 0xD83DDC02U: return &emojis[450];
-		case 0xD83DDC03U: return &emojis[451];
-		case 0xD83DDC04U: return &emojis[452];
-		case 0xD83DDC05U: return &emojis[453];
-		case 0xD83DDC06U: return &emojis[454];
-		case 0xD83DDC07U: return &emojis[455];
-		case 0xD83DDC08U: return &emojis[456];
-		case 0xD83DDC09U: return &emojis[457];
-		case 0xD83DDC0AU: return &emojis[458];
-		case 0xD83DDC0BU: return &emojis[459];
-		case 0xD83DDC0CU: return &emojis[460];
-		case 0xD83DDC0DU: return &emojis[461];
-		case 0xD83DDC0EU: return &emojis[462];
-		case 0xD83DDC0FU: return &emojis[463];
-		case 0xD83DDC10U: return &emojis[464];
-		case 0xD83DDC11U: return &emojis[465];
-		case 0xD83DDC12U: return &emojis[466];
-		case 0xD83DDC13U: return &emojis[467];
-		case 0xD83DDC14U: return &emojis[468];
-		case 0xD83DDC15U: return &emojis[469];
-		case 0xD83DDC16U: return &emojis[470];
-		case 0xD83DDC17U: return &emojis[471];
-		case 0xD83DDC18U: return &emojis[472];
-		case 0xD83DDC19U: return &emojis[473];
-		case 0xD83DDC1AU: return &emojis[474];
-		case 0xD83DDC1BU: return &emojis[475];
-		case 0xD83DDC1CU: return &emojis[476];
-		case 0xD83DDC1DU: return &emojis[477];
-		case 0xD83DDC1EU: return &emojis[478];
-		case 0xD83DDC1FU: return &emojis[479];
-		case 0xD83DDC20U: return &emojis[480];
-		case 0xD83DDC21U: return &emojis[481];
-		case 0xD83DDC22U: return &emojis[482];
-		case 0xD83DDC23U: return &emojis[483];
-		case 0xD83DDC24U: return &emojis[484];
-		case 0xD83DDC25U: return &emojis[485];
-		case 0xD83DDC26U: return &emojis[486];
-		case 0xD83DDC27U: return &emojis[487];
-		case 0xD83DDC28U: return &emojis[488];
-		case 0xD83DDC29U: return &emojis[489];
-		case 0xD83DDC2AU: return &emojis[490];
-		case 0xD83DDC2BU: return &emojis[491];
-		case 0xD83DDC2CU: return &emojis[492];
-		case 0xD83DDC2DU: return &emojis[493];
-		case 0xD83DDC2EU: return &emojis[494];
-		case 0xD83DDC2FU: return &emojis[495];
-		case 0xD83DDC30U: return &emojis[496];
-		case 0xD83DDC31U: return &emojis[497];
-		case 0xD83DDC32U: return &emojis[498];
-		case 0xD83DDC33U: return &emojis[499];
-		case 0xD83DDC34U: return &emojis[500];
-		case 0xD83DDC35U: return &emojis[501];
-		case 0xD83DDC36U: return &emojis[502];
-		case 0xD83DDC37U: return &emojis[503];
-		case 0xD83DDC38U: return &emojis[504];
-		case 0xD83DDC39U: return &emojis[505];
-		case 0xD83DDC3AU: return &emojis[506];
-		case 0xD83DDC3BU: return &emojis[507];
-		case 0xD83DDC3CU: return &emojis[508];
-		case 0xD83DDC3DU: return &emojis[509];
-		case 0xD83DDC3EU: return &emojis[510];
-		case 0xD83DDC3FU: return &emojis[511];
-		case 0xD83DDC40U: return &emojis[512];
-		case 0xD83DDC41U: return &emojis[513];
-		case 0xD83DDC42U: return &emojis[514];
-		case 0xD83DDC43U: return &emojis[515];
-		case 0xD83DDC44U: return &emojis[516];
-		case 0xD83DDC45U: return &emojis[517];
-		case 0xD83DDC46U: return &emojis[518];
-		case 0xD83DDC47U: return &emojis[519];
-		case 0xD83DDC48U: return &emojis[520];
-		case 0xD83DDC49U: return &emojis[521];
-		case 0xD83DDC4AU: return &emojis[522];
-		case 0xD83DDC4BU: return &emojis[523];
-		case 0xD83DDC4CU: return &emojis[524];
-		case 0xD83DDC4DU: return &emojis[525];
-		case 0xD83DDC4EU: return &emojis[526];
-		case 0xD83DDC4FU: return &emojis[527];
-		case 0xD83DDC50U: return &emojis[528];
-		case 0xD83DDC51U: return &emojis[529];
-		case 0xD83DDC52U: return &emojis[530];
-		case 0xD83DDC53U: return &emojis[531];
-		case 0xD83DDC54U: return &emojis[532];
-		case 0xD83DDC55U: return &emojis[533];
-		case 0xD83DDC56U: return &emojis[534];
-		case 0xD83DDC57U: return &emojis[535];
-		case 0xD83DDC58U: return &emojis[536];
-		case 0xD83DDC59U: return &emojis[537];
-		case 0xD83DDC5AU: return &emojis[538];
-		case 0xD83DDC5BU: return &emojis[539];
-		case 0xD83DDC5CU: return &emojis[540];
-		case 0xD83DDC5DU: return &emojis[541];
-		case 0xD83DDC5EU: return &emojis[542];
-		case 0xD83DDC5FU: return &emojis[543];
-		case 0xD83DDC60U: return &emojis[544];
-		case 0xD83DDC61U: return &emojis[545];
-		case 0xD83DDC62U: return &emojis[546];
-		case 0xD83DDC63U: return &emojis[547];
-		case 0xD83DDC64U: return &emojis[548];
-		case 0xD83DDC65U: return &emojis[549];
-		case 0xD83DDC66U: return &emojis[550];
-		case 0xD83DDC67U: return &emojis[551];
-		case 0xD83DDC68U: return &emojis[552];
-		case 0xD83DDC69U: return &emojis[553];
-		case 0xD83DDC6AU: return &emojis[554];
-		case 0xD83DDC6BU: return &emojis[555];
-		case 0xD83DDC6CU: return &emojis[556];
-		case 0xD83DDC6DU: return &emojis[557];
-		case 0xD83DDC6EU: return &emojis[558];
-		case 0xD83DDC6FU: return &emojis[559];
-		case 0xD83DDC70U: return &emojis[560];
-		case 0xD83DDC71U: return &emojis[561];
-		case 0xD83DDC72U: return &emojis[562];
-		case 0xD83DDC73U: return &emojis[563];
-		case 0xD83DDC74U: return &emojis[564];
-		case 0xD83DDC75U: return &emojis[565];
-		case 0xD83DDC76U: return &emojis[566];
-		case 0xD83DDC77U: return &emojis[567];
-		case 0xD83DDC78U: return &emojis[568];
-		case 0xD83DDC79U: return &emojis[569];
-		case 0xD83DDC7AU: return &emojis[570];
-		case 0xD83DDC7BU: return &emojis[571];
-		case 0xD83DDC7CU: return &emojis[572];
-		case 0xD83DDC7DU: return &emojis[573];
-		case 0xD83DDC7EU: return &emojis[574];
-		case 0xD83DDC7FU: return &emojis[575];
-		case 0xD83DDC80U: return &emojis[576];
-		case 0xD83DDC81U: return &emojis[577];
-		case 0xD83DDC82U: return &emojis[578];
-		case 0xD83DDC83U: return &emojis[579];
-		case 0xD83DDC84U: return &emojis[580];
-		case 0xD83DDC85U: return &emojis[581];
-		case 0xD83DDC86U: return &emojis[582];
-		case 0xD83DDC87U: return &emojis[583];
-		case 0xD83DDC88U: return &emojis[584];
-		case 0xD83DDC89U: return &emojis[585];
-		case 0xD83DDC8AU: return &emojis[586];
-		case 0xD83DDC8BU: return &emojis[587];
-		case 0xD83DDC8CU: return &emojis[588];
-		case 0xD83DDC8DU: return &emojis[589];
-		case 0xD83DDC8EU: return &emojis[590];
-		case 0xD83DDC8FU: return &emojis[591];
-		case 0xD83DDC90U: return &emojis[592];
-		case 0xD83DDC91U: return &emojis[593];
-		case 0xD83DDC92U: return &emojis[594];
-		case 0xD83DDC93U: return &emojis[595];
-		case 0xD83DDC94U: return &emojis[596];
-		case 0xD83DDC95U: return &emojis[597];
-		case 0xD83DDC96U: return &emojis[598];
-		case 0xD83DDC97U: return &emojis[599];
-		case 0xD83DDC98U: return &emojis[600];
-		case 0xD83DDC99U: return &emojis[601];
-		case 0xD83DDC9AU: return &emojis[602];
-		case 0xD83DDC9BU: return &emojis[603];
-		case 0xD83DDC9CU: return &emojis[604];
-		case 0xD83DDC9DU: return &emojis[605];
-		case 0xD83DDC9EU: return &emojis[606];
-		case 0xD83DDC9FU: return &emojis[607];
-		case 0xD83DDCA0U: return &emojis[608];
-		case 0xD83DDCA1U: return &emojis[609];
-		case 0xD83DDCA2U: return &emojis[610];
-		case 0xD83DDCA3U: return &emojis[611];
-		case 0xD83DDCA4U: return &emojis[612];
-		case 0xD83DDCA5U: return &emojis[613];
-		case 0xD83DDCA6U: return &emojis[614];
-		case 0xD83DDCA7U: return &emojis[615];
-		case 0xD83DDCA8U: return &emojis[616];
-		case 0xD83DDCA9U: return &emojis[617];
-		case 0xD83DDCAAU: return &emojis[618];
-		case 0xD83DDCABU: return &emojis[619];
-		case 0xD83DDCACU: return &emojis[620];
-		case 0xD83DDCADU: return &emojis[621];
-		case 0xD83DDCAEU: return &emojis[622];
-		case 0xD83DDCAFU: return &emojis[623];
-		case 0xD83DDCB0U: return &emojis[624];
-		case 0xD83DDCB1U: return &emojis[625];
-		case 0xD83DDCB2U: return &emojis[626];
-		case 0xD83DDCB3U: return &emojis[627];
-		case 0xD83DDCB4U: return &emojis[628];
-		case 0xD83DDCB5U: return &emojis[629];
-		case 0xD83DDCB6U: return &emojis[630];
-		case 0xD83DDCB7U: return &emojis[631];
-		case 0xD83DDCB8U: return &emojis[632];
-		case 0xD83DDCB9U: return &emojis[633];
-		case 0xD83DDCBAU: return &emojis[634];
-		case 0xD83DDCBBU: return &emojis[635];
-		case 0xD83DDCBCU: return &emojis[636];
-		case 0xD83DDCBDU: return &emojis[637];
-		case 0xD83DDCBEU: return &emojis[638];
-		case 0xD83DDCBFU: return &emojis[639];
-		case 0xD83DDCC0U: return &emojis[640];
-		case 0xD83DDCC1U: return &emojis[641];
-		case 0xD83DDCC2U: return &emojis[642];
-		case 0xD83DDCC3U: return &emojis[643];
-		case 0xD83DDCC4U: return &emojis[644];
-		case 0xD83DDCC5U: return &emojis[645];
-		case 0xD83DDCC6U: return &emojis[646];
-		case 0xD83DDCC7U: return &emojis[647];
-		case 0xD83DDCC8U: return &emojis[648];
-		case 0xD83DDCC9U: return &emojis[649];
-		case 0xD83DDCCAU: return &emojis[650];
-		case 0xD83DDCCBU: return &emojis[651];
-		case 0xD83DDCCCU: return &emojis[652];
-		case 0xD83DDCCDU: return &emojis[653];
-		case 0xD83DDCCEU: return &emojis[654];
-		case 0xD83DDCCFU: return &emojis[655];
-		case 0xD83DDCD0U: return &emojis[656];
-		case 0xD83DDCD1U: return &emojis[657];
-		case 0xD83DDCD2U: return &emojis[658];
-		case 0xD83DDCD3U: return &emojis[659];
-		case 0xD83DDCD4U: return &emojis[660];
-		case 0xD83DDCD5U: return &emojis[661];
-		case 0xD83DDCD6U: return &emojis[662];
-		case 0xD83DDCD7U: return &emojis[663];
-		case 0xD83DDCD8U: return &emojis[664];
-		case 0xD83DDCD9U: return &emojis[665];
-		case 0xD83DDCDAU: return &emojis[666];
-		case 0xD83DDCDBU: return &emojis[667];
-		case 0xD83DDCDCU: return &emojis[668];
-		case 0xD83DDCDDU: return &emojis[669];
-		case 0xD83DDCDEU: return &emojis[670];
-		case 0xD83DDCDFU: return &emojis[671];
-		case 0xD83DDCE0U: return &emojis[672];
-		case 0xD83DDCE1U: return &emojis[673];
-		case 0xD83DDCE2U: return &emojis[674];
-		case 0xD83DDCE3U: return &emojis[675];
-		case 0xD83DDCE4U: return &emojis[676];
-		case 0xD83DDCE5U: return &emojis[677];
-		case 0xD83DDCE6U: return &emojis[678];
-		case 0xD83DDCE7U: return &emojis[679];
-		case 0xD83DDCE8U: return &emojis[680];
-		case 0xD83DDCE9U: return &emojis[681];
-		case 0xD83DDCEAU: return &emojis[682];
-		case 0xD83DDCEBU: return &emojis[683];
-		case 0xD83DDCECU: return &emojis[684];
-		case 0xD83DDCEDU: return &emojis[685];
-		case 0xD83DDCEEU: return &emojis[686];
-		case 0xD83DDCEFU: return &emojis[687];
-		case 0xD83DDCF0U: return &emojis[688];
-		case 0xD83DDCF1U: return &emojis[689];
-		case 0xD83DDCF2U: return &emojis[690];
-		case 0xD83DDCF3U: return &emojis[691];
-		case 0xD83DDCF4U: return &emojis[692];
-		case 0xD83DDCF5U: return &emojis[693];
-		case 0xD83DDCF6U: return &emojis[694];
-		case 0xD83DDCF7U: return &emojis[695];
-		case 0xD83DDCF8U: return &emojis[696];
-		case 0xD83DDCF9U: return &emojis[697];
-		case 0xD83DDCFAU: return &emojis[698];
-		case 0xD83DDCFBU: return &emojis[699];
-		case 0xD83DDCFCU: return &emojis[700];
-		case 0xD83DDCFDU: return &emojis[701];
-		case 0xD83DDCFFU: return &emojis[702];
-		case 0xD83DDD00U: return &emojis[703];
-		case 0xD83DDD01U: return &emojis[704];
-		case 0xD83DDD02U: return &emojis[705];
-		case 0xD83DDD03U: return &emojis[706];
-		case 0xD83DDD04U: return &emojis[707];
-		case 0xD83DDD05U: return &emojis[708];
-		case 0xD83DDD06U: return &emojis[709];
-		case 0xD83DDD07U: return &emojis[710];
-		case 0xD83DDD08U: return &emojis[711];
-		case 0xD83DDD09U: return &emojis[712];
-		case 0xD83DDD0AU: return &emojis[713];
-		case 0xD83DDD0BU: return &emojis[714];
-		case 0xD83DDD0CU: return &emojis[715];
-		case 0xD83DDD0DU: return &emojis[716];
-		case 0xD83DDD0EU: return &emojis[717];
-		case 0xD83DDD0FU: return &emojis[718];
-		case 0xD83DDD10U: return &emojis[719];
-		case 0xD83DDD11U: return &emojis[720];
-		case 0xD83DDD12U: return &emojis[721];
-		case 0xD83DDD13U: return &emojis[722];
-		case 0xD83DDD14U: return &emojis[723];
-		case 0xD83DDD15U: return &emojis[724];
-		case 0xD83DDD16U: return &emojis[725];
-		case 0xD83DDD17U: return &emojis[726];
-		case 0xD83DDD18U: return &emojis[727];
-		case 0xD83DDD19U: return &emojis[728];
-		case 0xD83DDD1AU: return &emojis[729];
-		case 0xD83DDD1BU: return &emojis[730];
-		case 0xD83DDD1CU: return &emojis[731];
-		case 0xD83DDD1DU: return &emojis[732];
-		case 0xD83DDD1EU: return &emojis[733];
-		case 0xD83DDD1FU: return &emojis[734];
-		case 0xD83DDD20U: return &emojis[735];
-		case 0xD83DDD21U: return &emojis[736];
-		case 0xD83DDD22U: return &emojis[737];
-		case 0xD83DDD23U: return &emojis[738];
-		case 0xD83DDD24U: return &emojis[739];
-		case 0xD83DDD25U: return &emojis[740];
-		case 0xD83DDD26U: return &emojis[741];
-		case 0xD83DDD27U: return &emojis[742];
-		case 0xD83DDD28U: return &emojis[743];
-		case 0xD83DDD29U: return &emojis[744];
-		case 0xD83DDD2AU: return &emojis[745];
-		case 0xD83DDD2BU: return &emojis[746];
-		case 0xD83DDD2CU: return &emojis[747];
-		case 0xD83DDD2DU: return &emojis[748];
-		case 0xD83DDD2EU: return &emojis[749];
-		case 0xD83DDD2FU: return &emojis[750];
-		case 0xD83DDD30U: return &emojis[751];
-		case 0xD83DDD31U: return &emojis[752];
-		case 0xD83DDD32U: return &emojis[753];
-		case 0xD83DDD33U: return &emojis[754];
-		case 0xD83DDD34U: return &emojis[755];
-		case 0xD83DDD35U: return &emojis[756];
-		case 0xD83DDD36U: return &emojis[757];
-		case 0xD83DDD37U: return &emojis[758];
-		case 0xD83DDD38U: return &emojis[759];
-		case 0xD83DDD39U: return &emojis[760];
-		case 0xD83DDD3AU: return &emojis[761];
-		case 0xD83DDD3BU: return &emojis[762];
-		case 0xD83DDD3CU: return &emojis[763];
-		case 0xD83DDD3DU: return &emojis[764];
-		case 0xD83DDD49U: return &emojis[765];
-		case 0xD83DDD4AU: return &emojis[766];
-		case 0xD83DDD4BU: return &emojis[767];
-		case 0xD83DDD4CU: return &emojis[768];
-		case 0xD83DDD4DU: return &emojis[769];
-		case 0xD83DDD4EU: return &emojis[770];
-		case 0xD83DDD50U: return &emojis[771];
-		case 0xD83DDD51U: return &emojis[772];
-		case 0xD83DDD52U: return &emojis[773];
-		case 0xD83DDD53U: return &emojis[774];
-		case 0xD83DDD54U: return &emojis[775];
-		case 0xD83DDD55U: return &emojis[776];
-		case 0xD83DDD56U: return &emojis[777];
-		case 0xD83DDD57U: return &emojis[778];
-		case 0xD83DDD58U: return &emojis[779];
-		case 0xD83DDD59U: return &emojis[780];
-		case 0xD83DDD5AU: return &emojis[781];
-		case 0xD83DDD5BU: return &emojis[782];
-		case 0xD83DDD5CU: return &emojis[783];
-		case 0xD83DDD5DU: return &emojis[784];
-		case 0xD83DDD5EU: return &emojis[785];
-		case 0xD83DDD5FU: return &emojis[786];
-		case 0xD83DDD60U: return &emojis[787];
-		case 0xD83DDD61U: return &emojis[788];
-		case 0xD83DDD62U: return &emojis[789];
-		case 0xD83DDD63U: return &emojis[790];
-		case 0xD83DDD64U: return &emojis[791];
-		case 0xD83DDD65U: return &emojis[792];
-		case 0xD83DDD66U: return &emojis[793];
-		case 0xD83DDD67U: return &emojis[794];
-		case 0xD83DDD6FU: return &emojis[795];
-		case 0xD83DDD70U: return &emojis[796];
-		case 0xD83DDD73U: return &emojis[797];
-		case 0xD83DDD74U: return &emojis[798];
-		case 0xD83DDD75U: return &emojis[799];
-		case 0xD83DDD76U: return &emojis[800];
-		case 0xD83DDD77U: return &emojis[801];
-		case 0xD83DDD78U: return &emojis[802];
-		case 0xD83DDD79U: return &emojis[803];
-		case 0xD83DDD87U: return &emojis[804];
-		case 0xD83DDD8AU: return &emojis[805];
-		case 0xD83DDD8BU: return &emojis[806];
-		case 0xD83DDD8CU: return &emojis[807];
-		case 0xD83DDD8DU: return &emojis[808];
-		case 0xD83DDD90U: return &emojis[809];
-		case 0xD83DDD95U: return &emojis[810];
-		case 0xD83DDD96U: return &emojis[811];
-		case 0xD83DDDA5U: return &emojis[812];
-		case 0xD83DDDA8U: return &emojis[813];
-		case 0xD83DDDB1U: return &emojis[814];
-		case 0xD83DDDB2U: return &emojis[815];
-		case 0xD83DDDBCU: return &emojis[816];
-		case 0xD83DDDC2U: return &emojis[817];
-		case 0xD83DDDC3U: return &emojis[818];
-		case 0xD83DDDC4U: return &emojis[819];
-		case 0xD83DDDD1U: return &emojis[820];
-		case 0xD83DDDD2U: return &emojis[821];
-		case 0xD83DDDD3U: return &emojis[822];
-		case 0xD83DDDDCU: return &emojis[823];
-		case 0xD83DDDDDU: return &emojis[824];
-		case 0xD83DDDDEU: return &emojis[825];
-		case 0xD83DDDE1U: return &emojis[826];
-		case 0xD83DDDE3U: return &emojis[827];
-		case 0xD83DDDEFU: return &emojis[828];
-		case 0xD83DDDF3U: return &emojis[829];
-		case 0xD83DDDFAU: return &emojis[830];
-		case 0xD83DDDFBU: return &emojis[831];
-		case 0xD83DDDFCU: return &emojis[832];
-		case 0xD83DDDFDU: return &emojis[833];
-		case 0xD83DDDFEU: return &emojis[834];
-		case 0xD83DDDFFU: return &emojis[835];
-		case 0xD83DDE00U: return &emojis[836];
-		case 0xD83DDE01U: return &emojis[837];
-		case 0xD83DDE02U: return &emojis[838];
-		case 0xD83DDE03U: return &emojis[839];
-		case 0xD83DDE04U: return &emojis[840];
-		case 0xD83DDE05U: return &emojis[841];
-		case 0xD83DDE06U: return &emojis[842];
-		case 0xD83DDE07U: return &emojis[843];
-		case 0xD83DDE08U: return &emojis[844];
-		case 0xD83DDE09U: return &emojis[845];
-		case 0xD83DDE0AU: return &emojis[846];
-		case 0xD83DDE0BU: return &emojis[847];
-		case 0xD83DDE0CU: return &emojis[848];
-		case 0xD83DDE0DU: return &emojis[849];
-		case 0xD83DDE0EU: return &emojis[850];
-		case 0xD83DDE0FU: return &emojis[851];
-		case 0xD83DDE10U: return &emojis[852];
-		case 0xD83DDE11U: return &emojis[853];
-		case 0xD83DDE12U: return &emojis[854];
-		case 0xD83DDE13U: return &emojis[855];
-		case 0xD83DDE14U: return &emojis[856];
-		case 0xD83DDE15U: return &emojis[857];
-		case 0xD83DDE16U: return &emojis[858];
-		case 0xD83DDE17U: return &emojis[859];
-		case 0xD83DDE18U: return &emojis[860];
-		case 0xD83DDE19U: return &emojis[861];
-		case 0xD83DDE1AU: return &emojis[862];
-		case 0xD83DDE1BU: return &emojis[863];
-		case 0xD83DDE1CU: return &emojis[864];
-		case 0xD83DDE1DU: return &emojis[865];
-		case 0xD83DDE1EU: return &emojis[866];
-		case 0xD83DDE1FU: return &emojis[867];
-		case 0xD83DDE20U: return &emojis[868];
-		case 0xD83DDE21U: return &emojis[869];
-		case 0xD83DDE22U: return &emojis[870];
-		case 0xD83DDE23U: return &emojis[871];
-		case 0xD83DDE24U: return &emojis[872];
-		case 0xD83DDE25U: return &emojis[873];
-		case 0xD83DDE26U: return &emojis[874];
-		case 0xD83DDE27U: return &emojis[875];
-		case 0xD83DDE28U: return &emojis[876];
-		case 0xD83DDE29U: return &emojis[877];
-		case 0xD83DDE2AU: return &emojis[878];
-		case 0xD83DDE2BU: return &emojis[879];
-		case 0xD83DDE2CU: return &emojis[880];
-		case 0xD83DDE2DU: return &emojis[881];
-		case 0xD83DDE2EU: return &emojis[882];
-		case 0xD83DDE2FU: return &emojis[883];
-		case 0xD83DDE30U: return &emojis[884];
-		case 0xD83DDE31U: return &emojis[885];
-		case 0xD83DDE32U: return &emojis[886];
-		case 0xD83DDE33U: return &emojis[887];
-		case 0xD83DDE34U: return &emojis[888];
-		case 0xD83DDE35U: return &emojis[889];
-		case 0xD83DDE36U: return &emojis[890];
-		case 0xD83DDE37U: return &emojis[891];
-		case 0xD83DDE38U: return &emojis[892];
-		case 0xD83DDE39U: return &emojis[893];
-		case 0xD83DDE3AU: return &emojis[894];
-		case 0xD83DDE3BU: return &emojis[895];
-		case 0xD83DDE3CU: return &emojis[896];
-		case 0xD83DDE3DU: return &emojis[897];
-		case 0xD83DDE3EU: return &emojis[898];
-		case 0xD83DDE3FU: return &emojis[899];
-		case 0xD83DDE40U: return &emojis[900];
-		case 0xD83DDE41U: return &emojis[901];
-		case 0xD83DDE42U: return &emojis[902];
-		case 0xD83DDE43U: return &emojis[903];
-		case 0xD83DDE44U: return &emojis[904];
-		case 0xD83DDE45U: return &emojis[905];
-		case 0xD83DDE46U: return &emojis[906];
-		case 0xD83DDE47U: return &emojis[907];
-		case 0xD83DDE48U: return &emojis[908];
-		case 0xD83DDE49U: return &emojis[909];
-		case 0xD83DDE4AU: return &emojis[910];
-		case 0xD83DDE4BU: return &emojis[911];
-		case 0xD83DDE4CU: return &emojis[912];
-		case 0xD83DDE4DU: return &emojis[913];
-		case 0xD83DDE4EU: return &emojis[914];
-		case 0xD83DDE4FU: return &emojis[915];
-		case 0xD83DDE80U: return &emojis[916];
-		case 0xD83DDE81U: return &emojis[917];
-		case 0xD83DDE82U: return &emojis[918];
-		case 0xD83DDE83U: return &emojis[919];
-		case 0xD83DDE84U: return &emojis[920];
-		case 0xD83DDE85U: return &emojis[921];
-		case 0xD83DDE86U: return &emojis[922];
-		case 0xD83DDE87U: return &emojis[923];
-		case 0xD83DDE88U: return &emojis[924];
-		case 0xD83DDE89U: return &emojis[925];
-		case 0xD83DDE8AU: return &emojis[926];
-		case 0xD83DDE8BU: return &emojis[927];
-		case 0xD83DDE8CU: return &emojis[928];
-		case 0xD83DDE8DU: return &emojis[929];
-		case 0xD83DDE8EU: return &emojis[930];
-		case 0xD83DDE8FU: return &emojis[931];
-		case 0xD83DDE90U: return &emojis[932];
-		case 0xD83DDE91U: return &emojis[933];
-		case 0xD83DDE92U: return &emojis[934];
-		case 0xD83DDE93U: return &emojis[935];
-		case 0xD83DDE94U: return &emojis[936];
-		case 0xD83DDE95U: return &emojis[937];
-		case 0xD83DDE96U: return &emojis[938];
-		case 0xD83DDE97U: return &emojis[939];
-		case 0xD83DDE98U: return &emojis[940];
-		case 0xD83DDE99U: return &emojis[941];
-		case 0xD83DDE9AU: return &emojis[942];
-		case 0xD83DDE9BU: return &emojis[943];
-		case 0xD83DDE9CU: return &emojis[944];
-		case 0xD83DDE9DU: return &emojis[945];
-		case 0xD83DDE9EU: return &emojis[946];
-		case 0xD83DDE9FU: return &emojis[947];
-		case 0xD83DDEA0U: return &emojis[948];
-		case 0xD83DDEA1U: return &emojis[949];
-		case 0xD83DDEA2U: return &emojis[950];
-		case 0xD83DDEA3U: return &emojis[951];
-		case 0xD83DDEA4U: return &emojis[952];
-		case 0xD83DDEA5U: return &emojis[953];
-		case 0xD83DDEA6U: return &emojis[954];
-		case 0xD83DDEA7U: return &emojis[955];
-		case 0xD83DDEA8U: return &emojis[956];
-		case 0xD83DDEA9U: return &emojis[957];
-		case 0xD83DDEAAU: return &emojis[958];
-		case 0xD83DDEABU: return &emojis[959];
-		case 0xD83DDEACU: return &emojis[960];
-		case 0xD83DDEADU: return &emojis[961];
-		case 0xD83DDEAEU: return &emojis[962];
-		case 0xD83DDEAFU: return &emojis[963];
-		case 0xD83DDEB0U: return &emojis[964];
-		case 0xD83DDEB1U: return &emojis[965];
-		case 0xD83DDEB2U: return &emojis[966];
-		case 0xD83DDEB3U: return &emojis[967];
-		case 0xD83DDEB4U: return &emojis[968];
-		case 0xD83DDEB5U: return &emojis[969];
-		case 0xD83DDEB6U: return &emojis[970];
-		case 0xD83DDEB7U: return &emojis[971];
-		case 0xD83DDEB8U: return &emojis[972];
-		case 0xD83DDEB9U: return &emojis[973];
-		case 0xD83DDEBAU: return &emojis[974];
-		case 0xD83DDEBBU: return &emojis[975];
-		case 0xD83DDEBCU: return &emojis[976];
-		case 0xD83DDEBDU: return &emojis[977];
-		case 0xD83DDEBEU: return &emojis[978];
-		case 0xD83DDEBFU: return &emojis[979];
-		case 0xD83DDEC0U: return &emojis[980];
-		case 0xD83DDEC1U: return &emojis[981];
-		case 0xD83DDEC2U: return &emojis[982];
-		case 0xD83DDEC3U: return &emojis[983];
-		case 0xD83DDEC4U: return &emojis[984];
-		case 0xD83DDEC5U: return &emojis[985];
-		case 0xD83DDECBU: return &emojis[986];
-		case 0xD83DDECCU: return &emojis[987];
-		case 0xD83DDECDU: return &emojis[988];
-		case 0xD83DDECEU: return &emojis[989];
-		case 0xD83DDECFU: return &emojis[990];
-		case 0xD83DDED0U: return &emojis[991];
-		case 0xD83DDEE0U: return &emojis[992];
-		case 0xD83DDEE1U: return &emojis[993];
-		case 0xD83DDEE2U: return &emojis[994];
-		case 0xD83DDEE3U: return &emojis[995];
-		case 0xD83DDEE4U: return &emojis[996];
-		case 0xD83DDEE5U: return &emojis[997];
-		case 0xD83DDEE9U: return &emojis[998];
-		case 0xD83DDEEBU: return &emojis[999];
-		case 0xD83DDEECU: return &emojis[1000];
-		case 0xD83DDEF0U: return &emojis[1001];
-		case 0xD83DDEF3U: return &emojis[1002];
-		case 0xD83EDD10U: return &emojis[1003];
-		case 0xD83EDD11U: return &emojis[1004];
-		case 0xD83EDD12U: return &emojis[1005];
-		case 0xD83EDD13U: return &emojis[1006];
-		case 0xD83EDD14U: return &emojis[1007];
-		case 0xD83EDD15U: return &emojis[1008];
-		case 0xD83EDD16U: return &emojis[1009];
-		case 0xD83EDD17U: return &emojis[1010];
-		case 0xD83EDD18U: return &emojis[1011];
-		case 0xD83EDD80U: return &emojis[1012];
-		case 0xD83EDD81U: return &emojis[1013];
-		case 0xD83EDD82U: return &emojis[1014];
-		case 0xD83EDD83U: return &emojis[1015];
-		case 0xD83EDD84U: return &emojis[1016];
-		case 0xD83EDDC0U: return &emojis[1017];
-		case 0xFFFF0000U: return &emojis[1018];
-		case 0xFFFF0001U: return &emojis[1019];
-		case 0xFFFF0002U: return &emojis[1020];
-		case 0xFFFF0003U: return &emojis[1021];
-		case 0xFFFF0004U: return &emojis[1022];
-		case 0xFFFF0005U: return &emojis[1023];
-		case 0xFFFF0006U: return &emojis[1024];
-		case 0xFFFF0007U: return &emojis[1025];
-		case 0xFFFF0008U: return &emojis[1026];
-		case 0xFFFF0009U: return &emojis[1027];
-		case 0xFFFF000AU: return &emojis[1028];
-		case 0xFFFF000BU: return &emojis[1029];
-		case 0xFFFF000CU: return &emojis[1030];
-		case 0xFFFF000DU: return &emojis[1031];
-		case 0xFFFF000EU: return &emojis[1032];
-		case 0xFFFF000FU: return &emojis[1033];
-		case 0xFFFF0010U: return &emojis[1034];
-		case 0xFFFF0011U: return &emojis[1035];
-		case 0xFFFF0012U: return &emojis[1036];
-		case 0xD83CDDE6U: return TwoSymbolEmoji;
-		case 0xD83CDDE7U: return TwoSymbolEmoji;
-		case 0xD83CDDE8U: return TwoSymbolEmoji;
-		case 0xD83CDDE9U: return TwoSymbolEmoji;
-		case 0xD83CDDEAU: return TwoSymbolEmoji;
-		case 0xD83CDDEBU: return TwoSymbolEmoji;
-		case 0xD83CDDECU: return TwoSymbolEmoji;
-		case 0xD83CDDEDU: return TwoSymbolEmoji;
-		case 0xD83CDDEEU: return TwoSymbolEmoji;
-		case 0xD83CDDEFU: return TwoSymbolEmoji;
-		case 0xD83CDDF0U: return TwoSymbolEmoji;
-		case 0xD83CDDF1U: return TwoSymbolEmoji;
-		case 0xD83CDDF2U: return TwoSymbolEmoji;
-		case 0xD83CDDF3U: return TwoSymbolEmoji;
-		case 0xD83CDDF4U: return TwoSymbolEmoji;
-		case 0xD83CDDF5U: return TwoSymbolEmoji;
-		case 0xD83CDDF6U: return TwoSymbolEmoji;
-		case 0xD83CDDF7U: return TwoSymbolEmoji;
-		case 0xD83CDDF8U: return TwoSymbolEmoji;
-		case 0xD83CDDF9U: return TwoSymbolEmoji;
-		case 0xD83CDDFAU: return TwoSymbolEmoji;
-		case 0xD83CDDFBU: return TwoSymbolEmoji;
-		case 0xD83CDDFCU: return TwoSymbolEmoji;
-		case 0xD83CDDFDU: return TwoSymbolEmoji;
-		case 0xD83CDDFEU: return TwoSymbolEmoji;
-		case 0xD83CDDFFU: return TwoSymbolEmoji;
-	}
-
-	return 0;
+inline void AppendChars(QString &result) {
 }
 
-EmojiPtr emojiGet(uint32 code, uint32 code2) {
-	if (code < 0xD83CDDE6U || code > 0xD83CDDFFU) return 0;
-
-	switch (code) {
-		case 0xD83CDDE6U: switch (code2) {
-			case 0xD83CDDE9U: return &emojis[1067];
-			case 0xD83CDDEAU: return &emojis[1068];
-			case 0xD83CDDEBU: return &emojis[1069];
-			case 0xD83CDDECU: return &emojis[1070];
-			case 0xD83CDDEEU: return &emojis[1071];
-			case 0xD83CDDF1U: return &emojis[1072];
-			case 0xD83CDDF2U: return &emojis[1073];
-			case 0xD83CDDF4U: return &emojis[1074];
-			case 0xD83CDDF6U: return &emojis[1075];
-			case 0xD83CDDF7U: return &emojis[1076];
-			case 0xD83CDDF8U: return &emojis[1077];
-			case 0xD83CDDF9U: return &emojis[1078];
-			case 0xD83CDDFAU: return &emojis[1079];
-			case 0xD83CDDFCU: return &emojis[1080];
-			case 0xD83CDDFDU: return &emojis[1081];
-			case 0xD83CDDFFU: return &emojis[1082];
-			default: return 0;
-		} break;
-		case 0xD83CDDE7U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1083];
-			case 0xD83CDDE7U: return &emojis[1084];
-			case 0xD83CDDE9U: return &emojis[1085];
-			case 0xD83CDDEAU: return &emojis[1086];
-			case 0xD83CDDEBU: return &emojis[1087];
-			case 0xD83CDDECU: return &emojis[1088];
-			case 0xD83CDDEDU: return &emojis[1089];
-			case 0xD83CDDEEU: return &emojis[1090];
-			case 0xD83CDDEFU: return &emojis[1091];
-			case 0xD83CDDF1U: return &emojis[1092];
-			case 0xD83CDDF2U: return &emojis[1093];
-			case 0xD83CDDF3U: return &emojis[1094];
-			case 0xD83CDDF4U: return &emojis[1095];
-			case 0xD83CDDF6U: return &emojis[1096];
-			case 0xD83CDDF7U: return &emojis[1097];
-			case 0xD83CDDF8U: return &emojis[1098];
-			case 0xD83CDDF9U: return &emojis[1099];
-			case 0xD83CDDFCU: return &emojis[1100];
-			case 0xD83CDDFEU: return &emojis[1101];
-			case 0xD83CDDFFU: return &emojis[1102];
-			default: return 0;
-		} break;
-		case 0xD83CDDE8U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1103];
-			case 0xD83CDDE8U: return &emojis[1104];
-			case 0xD83CDDE9U: return &emojis[1105];
-			case 0xD83CDDEBU: return &emojis[1106];
-			case 0xD83CDDECU: return &emojis[1107];
-			case 0xD83CDDEDU: return &emojis[1108];
-			case 0xD83CDDEEU: return &emojis[1109];
-			case 0xD83CDDF0U: return &emojis[1110];
-			case 0xD83CDDF1U: return &emojis[1111];
-			case 0xD83CDDF2U: return &emojis[1112];
-			case 0xD83CDDF3U: return &emojis[1113];
-			case 0xD83CDDF4U: return &emojis[1114];
-			case 0xD83CDDF7U: return &emojis[1115];
-			case 0xD83CDDFAU: return &emojis[1116];
-			case 0xD83CDDFBU: return &emojis[1117];
-			case 0xD83CDDFCU: return &emojis[1118];
-			case 0xD83CDDFDU: return &emojis[1119];
-			case 0xD83CDDFEU: return &emojis[1120];
-			case 0xD83CDDFFU: return &emojis[1121];
-			default: return 0;
-		} break;
-		case 0xD83CDDE9U: switch (code2) {
-			case 0xD83CDDEAU: return &emojis[1122];
-			case 0xD83CDDEFU: return &emojis[1123];
-			case 0xD83CDDF0U: return &emojis[1124];
-			case 0xD83CDDF2U: return &emojis[1125];
-			case 0xD83CDDF4U: return &emojis[1126];
-			case 0xD83CDDFFU: return &emojis[1127];
-			default: return 0;
-		} break;
-		case 0xD83CDDEAU: switch (code2) {
-			case 0xD83CDDE8U: return &emojis[1128];
-			case 0xD83CDDEAU: return &emojis[1129];
-			case 0xD83CDDECU: return &emojis[1130];
-			case 0xD83CDDEDU: return &emojis[1131];
-			case 0xD83CDDF7U: return &emojis[1132];
-			case 0xD83CDDF8U: return &emojis[1133];
-			case 0xD83CDDF9U: return &emojis[1134];
-			case 0xD83CDDFAU: return &emojis[1135];
-			default: return 0;
-		} break;
-		case 0xD83CDDEBU: switch (code2) {
-			case 0xD83CDDEEU: return &emojis[1136];
-			case 0xD83CDDEFU: return &emojis[1137];
-			case 0xD83CDDF0U: return &emojis[1138];
-			case 0xD83CDDF2U: return &emojis[1139];
-			case 0xD83CDDF4U: return &emojis[1140];
-			case 0xD83CDDF7U: return &emojis[1141];
-			default: return 0;
-		} break;
-		case 0xD83CDDECU: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1142];
-			case 0xD83CDDE7U: return &emojis[1143];
-			case 0xD83CDDE9U: return &emojis[1144];
-			case 0xD83CDDEAU: return &emojis[1145];
-			case 0xD83CDDEBU: return &emojis[1146];
-			case 0xD83CDDECU: return &emojis[1147];
-			case 0xD83CDDEDU: return &emojis[1148];
-			case 0xD83CDDEEU: return &emojis[1149];
-			case 0xD83CDDF1U: return &emojis[1150];
-			case 0xD83CDDF2U: return &emojis[1151];
-			case 0xD83CDDF3U: return &emojis[1152];
-			case 0xD83CDDF5U: return &emojis[1153];
-			case 0xD83CDDF6U: return &emojis[1154];
-			case 0xD83CDDF7U: return &emojis[1155];
-			case 0xD83CDDF8U: return &emojis[1156];
-			case 0xD83CDDF9U: return &emojis[1157];
-			case 0xD83CDDFAU: return &emojis[1158];
-			case 0xD83CDDFCU: return &emojis[1159];
-			case 0xD83CDDFEU: return &emojis[1160];
-			default: return 0;
-		} break;
-		case 0xD83CDDEDU: switch (code2) {
-			case 0xD83CDDF0U: return &emojis[1161];
-			case 0xD83CDDF3U: return &emojis[1162];
-			case 0xD83CDDF7U: return &emojis[1163];
-			case 0xD83CDDF9U: return &emojis[1164];
-			case 0xD83CDDFAU: return &emojis[1165];
-			default: return 0;
-		} break;
-		case 0xD83CDDEEU: switch (code2) {
-			case 0xD83CDDE8U: return &emojis[1166];
-			case 0xD83CDDE9U: return &emojis[1167];
-			case 0xD83CDDEAU: return &emojis[1168];
-			case 0xD83CDDF1U: return &emojis[1169];
-			case 0xD83CDDF2U: return &emojis[1170];
-			case 0xD83CDDF3U: return &emojis[1171];
-			case 0xD83CDDF4U: return &emojis[1172];
-			case 0xD83CDDF6U: return &emojis[1173];
-			case 0xD83CDDF7U: return &emojis[1174];
-			case 0xD83CDDF8U: return &emojis[1175];
-			case 0xD83CDDF9U: return &emojis[1176];
-			default: return 0;
-		} break;
-		case 0xD83CDDEFU: switch (code2) {
-			case 0xD83CDDEAU: return &emojis[1177];
-			case 0xD83CDDF2U: return &emojis[1178];
-			case 0xD83CDDF4U: return &emojis[1179];
-			case 0xD83CDDF5U: return &emojis[1180];
-			default: return 0;
-		} break;
-		case 0xD83CDDF0U: switch (code2) {
-			case 0xD83CDDEAU: return &emojis[1181];
-			case 0xD83CDDECU: return &emojis[1182];
-			case 0xD83CDDEDU: return &emojis[1183];
-			case 0xD83CDDEEU: return &emojis[1184];
-			case 0xD83CDDF2U: return &emojis[1185];
-			case 0xD83CDDF3U: return &emojis[1186];
-			case 0xD83CDDF5U: return &emojis[1187];
-			case 0xD83CDDF7U: return &emojis[1188];
-			case 0xD83CDDFCU: return &emojis[1189];
-			case 0xD83CDDFEU: return &emojis[1190];
-			case 0xD83CDDFFU: return &emojis[1191];
-			default: return 0;
-		} break;
-		case 0xD83CDDF1U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1192];
-			case 0xD83CDDE7U: return &emojis[1193];
-			case 0xD83CDDE8U: return &emojis[1194];
-			case 0xD83CDDEEU: return &emojis[1195];
-			case 0xD83CDDF0U: return &emojis[1196];
-			case 0xD83CDDF7U: return &emojis[1197];
-			case 0xD83CDDF8U: return &emojis[1198];
-			case 0xD83CDDF9U: return &emojis[1199];
-			case 0xD83CDDFAU: return &emojis[1200];
-			case 0xD83CDDFBU: return &emojis[1201];
-			case 0xD83CDDFEU: return &emojis[1202];
-			default: return 0;
-		} break;
-		case 0xD83CDDF2U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1203];
-			case 0xD83CDDE8U: return &emojis[1204];
-			case 0xD83CDDE9U: return &emojis[1205];
-			case 0xD83CDDEAU: return &emojis[1206];
-			case 0xD83CDDECU: return &emojis[1207];
-			case 0xD83CDDEDU: return &emojis[1208];
-			case 0xD83CDDF0U: return &emojis[1209];
-			case 0xD83CDDF1U: return &emojis[1210];
-			case 0xD83CDDF2U: return &emojis[1211];
-			case 0xD83CDDF3U: return &emojis[1212];
-			case 0xD83CDDF4U: return &emojis[1213];
-			case 0xD83CDDF5U: return &emojis[1214];
-			case 0xD83CDDF6U: return &emojis[1215];
-			case 0xD83CDDF7U: return &emojis[1216];
-			case 0xD83CDDF8U: return &emojis[1217];
-			case 0xD83CDDF9U: return &emojis[1218];
-			case 0xD83CDDFAU: return &emojis[1219];
-			case 0xD83CDDFBU: return &emojis[1220];
-			case 0xD83CDDFCU: return &emojis[1221];
-			case 0xD83CDDFDU: return &emojis[1222];
-			case 0xD83CDDFEU: return &emojis[1223];
-			case 0xD83CDDFFU: return &emojis[1224];
-			default: return 0;
-		} break;
-		case 0xD83CDDF3U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1225];
-			case 0xD83CDDE8U: return &emojis[1226];
-			case 0xD83CDDEAU: return &emojis[1227];
-			case 0xD83CDDEBU: return &emojis[1228];
-			case 0xD83CDDECU: return &emojis[1229];
-			case 0xD83CDDEEU: return &emojis[1230];
-			case 0xD83CDDF1U: return &emojis[1231];
-			case 0xD83CDDF4U: return &emojis[1232];
-			case 0xD83CDDF5U: return &emojis[1233];
-			case 0xD83CDDF7U: return &emojis[1234];
-			case 0xD83CDDFAU: return &emojis[1235];
-			case 0xD83CDDFFU: return &emojis[1236];
-			default: return 0;
-		} break;
-		case 0xD83CDDF4U: switch (code2) {
-			case 0xD83CDDF2U: return &emojis[1237];
-			default: return 0;
-		} break;
-		case 0xD83CDDF5U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1238];
-			case 0xD83CDDEAU: return &emojis[1239];
-			case 0xD83CDDEBU: return &emojis[1240];
-			case 0xD83CDDECU: return &emojis[1241];
-			case 0xD83CDDEDU: return &emojis[1242];
-			case 0xD83CDDF0U: return &emojis[1243];
-			case 0xD83CDDF1U: return &emojis[1244];
-			case 0xD83CDDF2U: return &emojis[1245];
-			case 0xD83CDDF3U: return &emojis[1246];
-			case 0xD83CDDF7U: return &emojis[1247];
-			case 0xD83CDDF8U: return &emojis[1248];
-			case 0xD83CDDF9U: return &emojis[1249];
-			case 0xD83CDDFCU: return &emojis[1250];
-			case 0xD83CDDFEU: return &emojis[1251];
-			default: return 0;
-		} break;
-		case 0xD83CDDF6U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1252];
-			default: return 0;
-		} break;
-		case 0xD83CDDF7U: switch (code2) {
-			case 0xD83CDDEAU: return &emojis[1253];
-			case 0xD83CDDF4U: return &emojis[1254];
-			case 0xD83CDDF8U: return &emojis[1255];
-			case 0xD83CDDFAU: return &emojis[1256];
-			case 0xD83CDDFCU: return &emojis[1257];
-			default: return 0;
-		} break;
-		case 0xD83CDDF8U: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1258];
-			case 0xD83CDDE7U: return &emojis[1259];
-			case 0xD83CDDE8U: return &emojis[1260];
-			case 0xD83CDDE9U: return &emojis[1261];
-			case 0xD83CDDEAU: return &emojis[1262];
-			case 0xD83CDDECU: return &emojis[1263];
-			case 0xD83CDDEDU: return &emojis[1264];
-			case 0xD83CDDEEU: return &emojis[1265];
-			case 0xD83CDDF0U: return &emojis[1266];
-			case 0xD83CDDF1U: return &emojis[1267];
-			case 0xD83CDDF2U: return &emojis[1268];
-			case 0xD83CDDF3U: return &emojis[1269];
-			case 0xD83CDDF4U: return &emojis[1270];
-			case 0xD83CDDF7U: return &emojis[1271];
-			case 0xD83CDDF8U: return &emojis[1272];
-			case 0xD83CDDF9U: return &emojis[1273];
-			case 0xD83CDDFBU: return &emojis[1274];
-			case 0xD83CDDFDU: return &emojis[1275];
-			case 0xD83CDDFEU: return &emojis[1276];
-			case 0xD83CDDFFU: return &emojis[1277];
-			default: return 0;
-		} break;
-		case 0xD83CDDF9U: switch (code2) {
-			case 0xD83CDDE8U: return &emojis[1278];
-			case 0xD83CDDE9U: return &emojis[1279];
-			case 0xD83CDDEBU: return &emojis[1280];
-			case 0xD83CDDECU: return &emojis[1281];
-			case 0xD83CDDEDU: return &emojis[1282];
-			case 0xD83CDDEFU: return &emojis[1283];
-			case 0xD83CDDF0U: return &emojis[1284];
-			case 0xD83CDDF1U: return &emojis[1285];
-			case 0xD83CDDF2U: return &emojis[1286];
-			case 0xD83CDDF3U: return &emojis[1287];
-			case 0xD83CDDF4U: return &emojis[1288];
-			case 0xD83CDDF7U: return &emojis[1289];
-			case 0xD83CDDF9U: return &emojis[1290];
-			case 0xD83CDDFBU: return &emojis[1291];
-			case 0xD83CDDFCU: return &emojis[1292];
-			case 0xD83CDDFFU: return &emojis[1293];
-			default: return 0;
-		} break;
-		case 0xD83CDDFAU: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1294];
-			case 0xD83CDDECU: return &emojis[1295];
-			case 0xD83CDDF8U: return &emojis[1296];
-			case 0xD83CDDFEU: return &emojis[1297];
-			case 0xD83CDDFFU: return &emojis[1298];
-			default: return 0;
-		} break;
-		case 0xD83CDDFBU: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1299];
-			case 0xD83CDDE8U: return &emojis[1300];
-			case 0xD83CDDEAU: return &emojis[1301];
-			case 0xD83CDDECU: return &emojis[1302];
-			case 0xD83CDDEEU: return &emojis[1303];
-			case 0xD83CDDF3U: return &emojis[1304];
-			case 0xD83CDDFAU: return &emojis[1305];
-			default: return 0;
-		} break;
-		case 0xD83CDDFCU: switch (code2) {
-			case 0xD83CDDEBU: return &emojis[1306];
-			case 0xD83CDDF8U: return &emojis[1307];
-			default: return 0;
-		} break;
-		case 0xD83CDDFDU: switch (code2) {
-			case 0xD83CDDF0U: return &emojis[1308];
-			default: return 0;
-		} break;
-		case 0xD83CDDFEU: switch (code2) {
-			case 0xD83CDDEAU: return &emojis[1309];
-			case 0xD83CDDF9U: return &emojis[1310];
-			default: return 0;
-		} break;
-		case 0xD83CDDFFU: switch (code2) {
-			case 0xD83CDDE6U: return &emojis[1311];
-			case 0xD83CDDF2U: return &emojis[1312];
-			case 0xD83CDDFCU: return &emojis[1313];
-			default: return 0;
-		} break;
-	}
-
-	return 0;
+template <typename ...Args>
+inline void AppendChars(QString &result, ushort unicode, Args... args) {
+	result.append(QChar(unicode));
+	AppendChars(result, args...);
 }
 
-EmojiPtr emojiGet(EmojiPtr emoji, uint32 color) {
-	if (!emoji || ((emoji->color & 0xFFFF0000U) != 0xFFFF0000U)) return emoji;
-
-	int index = 0;
-	switch (color) {
-		case 0xD83CDFFB: index = 0; break;
-		case 0xD83CDFFC: index = 1; break;
-		case 0xD83CDFFD: index = 2; break;
-		case 0xD83CDFFE: index = 3; break;
-		case 0xD83CDFFF: index = 4; break;
-		default: return emoji;
-	}
-
-	return &emojis[(emoji->color & 0xFFFFU) + index];
-}
-
-EmojiPtr emojiGet(const QChar *from, const QChar *end) {
-	static const int sequenceOffset = 1018;
-
-	if (from + 4 < end && (from + 2)->unicode() == 0x200D) {
-		uint32 one = (uint32(from->unicode()) << 16) | uint32((from + 1)->unicode()), two = (uint32((from + 3)->unicode()) << 16) | uint32((from + 4)->unicode());
-		if (one == 0xD83DDC41 && two == 0xD83DDDE8) {
-			return &emojis[sequenceOffset + 18];
-		}
-	}
-
-	if (end < from + 8 || (from + 2)->unicode() != 0x200D || (from + 5)->unicode() != 0x200D) return 0;
-
-	static const uint32 man = 0xD83DDC68, woman = 0xD83DDC69, boy = 0xD83DDC66, girl = 0xD83DDC67, heart = 0x2764FE0F, kiss = 0xD83DDC8B;
-	uint32 one = (uint32(from->unicode()) << 16) | uint32((from + 1)->unicode()), two = (uint32((from + 3)->unicode()) << 16) | uint32((from + 4)->unicode()), three = (uint32((from + 6)->unicode()) << 16) | uint32((from + 7)->unicode());
-
-	if (one != man && one != woman) return 0;
-
-	if (end > from + 10 && (from + 8)->unicode() == 0x200D) {
-		uint32 four = (uint32((from + 9)->unicode()) << 16) | uint32((from + 10)->unicode());
-
-		if (one == man) {
-			if (two == man) {
-				if (three == girl) {
-					if (four == girl) return &emojis[sequenceOffset + 13];
-					if (four == boy) return &emojis[sequenceOffset + 11];
-				} else if (three == boy) {
-					if (four == boy) return &emojis[sequenceOffset + 12];
-				}
-			} else if (two == woman) {
-				if (three == girl) {
-					if (four == girl) return &emojis[sequenceOffset + 3];
-					if (four == boy) return &emojis[sequenceOffset + 1];
-				} else if (three == boy) {
-					if (four == boy) return &emojis[sequenceOffset + 2];
-				}
-			} else if (two == heart) {
-				if (three == kiss && four == man) return &emojis[sequenceOffset + 17];
-			}
-		} else {
-			if (two == woman) {
-				if (three == girl) {
-					if (four == girl) return &emojis[sequenceOffset + 8];
-					if (four == boy) return &emojis[sequenceOffset + 6];
-				} else if (three == boy) {
-					if (four == boy) return &emojis[sequenceOffset + 7];
-				}
-			} else if (two == heart) {
-				if (three == kiss && four == woman) return &emojis[sequenceOffset + 16];
-			}
-		}
-	}
-	if (one == man) {
-		if (two == man) {
-			if (three == girl) return &emojis[sequenceOffset + 10];
-			if (three == boy) return &emojis[sequenceOffset + 9];
-		} else if (two == woman) {
-			if (three == girl) return &emojis[sequenceOffset + 0];
-		} else if (two == heart) {
-			if (three == man) return &emojis[sequenceOffset + 15];
-		}
-	} else {
-		if (two == woman) {
-			if (three == girl) return &emojis[sequenceOffset + 5];
-			if (three == boy) return &emojis[sequenceOffset + 4];
-		} else if (two == heart) {
-			if (three == woman) return &emojis[sequenceOffset + 14];
-		}
-	}
-	return 0;
-}
-
-QString emojiGetSequence(int index) {
-	static QVector<QString> sequences;
-	if (sequences.isEmpty()) {
-		sequences.reserve(19);
-
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa9"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa8"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa9"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa8"));
-		sequences.push_back(QString::fromUtf8("\xf0\x9f\x91\x81\xe2\x80\x8d\xf0\x9f\x97\xa8"));
-	}
-
-	return (index >= 0 && index < sequences.size()) ? sequences.at(index) : QString();
-}
-
-void emojiFind(const QChar *ch, const QChar *e, const QChar *&newEmojiEnd, uint32 &emojiCode) {
-	switch (ch->unicode()) {
-	case '}':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case ':':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE08U;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case 'x':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case 'D':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE06U;
-				return;
-			}
-		break;
-		}
-	break;
-	case 'O':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case ':':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE07U;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case 'B':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '-':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE0EU;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case '>':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '(':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case '(':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE21U;
-					return;
-				}
-			break;
-			}
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE20U;
-				return;
-			}
-		break;
-		}
-	break;
-	case '<':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '3':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0x2764U;
-				return;
-			}
-		break;
-		}
-	break;
-	case ';':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case 'o':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE30U;
-				return;
-			}
-		break;
-		case '-':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'P':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE1CU;
-					return;
-				}
-			break;
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE09U;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case ':':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '|':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE10U;
-				return;
-			}
-		break;
-		case 'v':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ':':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0x270CU;
-					return;
-				}
-			break;
-			}
-		break;
-		case 'u':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'p':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case ':':
-					newEmojiEnd = ch + 4;
-					if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-						emojiCode = 0x261DU;
-						return;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case 'o':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'k':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case ':':
-					newEmojiEnd = ch + 4;
-					if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-						emojiCode = 0xD83DDC4CU;
-						return;
-					}
-				break;
-				}
-			break;
-			}
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE28U;
-				return;
-			}
-		break;
-		case 'l':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'i':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case 'k':
-					if (ch + 4 != e) switch ((ch + 4)->unicode()) {
-					case 'e':
-						if (ch + 5 != e) switch ((ch + 5)->unicode()) {
-						case ':':
-							newEmojiEnd = ch + 6;
-							if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-								emojiCode = 0xD83DDC4DU;
-								return;
-							}
-						break;
-						}
-					break;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case 'k':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'i':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case 's':
-					if (ch + 4 != e) switch ((ch + 4)->unicode()) {
-					case 's':
-						if (ch + 5 != e) switch ((ch + 5)->unicode()) {
-						case ':':
-							newEmojiEnd = ch + 6;
-							if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-								emojiCode = 0xD83DDC8BU;
-								return;
-							}
-						break;
-						}
-					break;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case 'j':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'o':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case 'y':
-					if (ch + 4 != e) switch ((ch + 4)->unicode()) {
-					case ':':
-						newEmojiEnd = ch + 5;
-						if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-							emojiCode = 0xD83DDE02U;
-							return;
-						}
-					break;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case 'g':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'r':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case 'i':
-					if (ch + 4 != e) switch ((ch + 4)->unicode()) {
-					case 'n':
-						if (ch + 5 != e) switch ((ch + 5)->unicode()) {
-						case ':':
-							newEmojiEnd = ch + 6;
-							if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-								emojiCode = 0xD83DDE01U;
-								return;
-							}
-						break;
-						}
-					break;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case 'd':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'i':
-				if (ch + 3 != e) switch ((ch + 3)->unicode()) {
-				case 's':
-					if (ch + 4 != e) switch ((ch + 4)->unicode()) {
-					case 'l':
-						if (ch + 5 != e) switch ((ch + 5)->unicode()) {
-						case 'i':
-							if (ch + 6 != e) switch ((ch + 6)->unicode()) {
-							case 'k':
-								if (ch + 7 != e) switch ((ch + 7)->unicode()) {
-								case 'e':
-									if (ch + 8 != e) switch ((ch + 8)->unicode()) {
-									case ':':
-										newEmojiEnd = ch + 9;
-										if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-											emojiCode = 0xD83DDC4EU;
-											return;
-										}
-									break;
-									}
-								break;
-								}
-							break;
-							}
-						break;
-						}
-					break;
-					}
-				break;
-				}
-			break;
-			}
-		break;
-		case '_':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case '(':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE2DU;
-					return;
-				}
-			break;
-			}
-		break;
-		case ']':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE0FU;
-				return;
-			}
-		break;
-		case 'X':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE37U;
-				return;
-			}
-		break;
-		case '-':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case 'p':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE0BU;
-					return;
-				}
-			break;
-			case 'D':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE03U;
-					return;
-				}
-			break;
-			case '*':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE1AU;
-					return;
-				}
-			break;
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE0AU;
-					return;
-				}
-			break;
-			case '(':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE1EU;
-					return;
-				}
-			break;
-			}
-		break;
-		case '(':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case '(':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE29U;
-					return;
-				}
-			break;
-			}
-		break;
-		case '\'':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case '(':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE22U;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case '8':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '|':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE33U;
-				return;
-			}
-		break;
-		case 'o':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE32U;
-				return;
-			}
-		break;
-		case '-':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE0DU;
-					return;
-				}
-			break;
-			}
-		break;
-		}
-	break;
-	case '3':
-		if (ch + 1 != e) switch ((ch + 1)->unicode()) {
-		case '-':
-			if (ch + 2 != e) switch ((ch + 2)->unicode()) {
-			case ')':
-				newEmojiEnd = ch + 3;
-				if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-					emojiCode = 0xD83DDE0CU;
-					return;
-				}
-			break;
-			}
-		break;
-		case '(':
-			newEmojiEnd = ch + 2;
-			if (newEmojiEnd == e || emojiEdge(newEmojiEnd) || newEmojiEnd->unicode() == ' ') {
-				emojiCode = 0xD83DDE14U;
-				return;
-			}
-		break;
-		}
-	break;
-	}
-}
-
-int emojiPackCount(DBIEmojiTab tab) {
-	switch (tab) {
-		case dbietRecent  : return cGetRecentEmojis().size();
-		case dbietPeople  : return 204;
-		case dbietNature  : return 147;
-		case dbietFood    : return 67;
-		case dbietActivity: return 57;
-		case dbietTravel  : return 115;
-		case dbietObjects : return 178;
-		case dbietSymbols : return 516;
-	};
-	return 0;
-}
-
-EmojiPack emojiPack(DBIEmojiTab tab) {
-	switch (tab) {
-
-	case dbietPeople: {
-		static QVector<EmojiPtr> vPeople;
-		if (vPeople.isEmpty()) {
-			vPeople.resize(204);
-			vPeople[0] = &emojis[836];
-			vPeople[1] = &emojis[880];
-			vPeople[2] = &emojis[837];
-			vPeople[3] = &emojis[838];
-			vPeople[4] = &emojis[839];
-			vPeople[5] = &emojis[840];
-			vPeople[6] = &emojis[841];
-			vPeople[7] = &emojis[842];
-			vPeople[8] = &emojis[843];
-			vPeople[9] = &emojis[845];
-			vPeople[10] = &emojis[846];
-			vPeople[11] = &emojis[902];
-			vPeople[12] = &emojis[903];
-			vPeople[13] = &emojis[60];
-			vPeople[14] = &emojis[847];
-			vPeople[15] = &emojis[848];
-			vPeople[16] = &emojis[849];
-			vPeople[17] = &emojis[860];
-			vPeople[18] = &emojis[859];
-			vPeople[19] = &emojis[861];
-			vPeople[20] = &emojis[862];
-			vPeople[21] = &emojis[864];
-			vPeople[22] = &emojis[865];
-			vPeople[23] = &emojis[863];
-			vPeople[24] = &emojis[1004];
-			vPeople[25] = &emojis[1006];
-			vPeople[26] = &emojis[850];
-			vPeople[27] = &emojis[1010];
-			vPeople[28] = &emojis[851];
-			vPeople[29] = &emojis[890];
-			vPeople[30] = &emojis[852];
-			vPeople[31] = &emojis[853];
-			vPeople[32] = &emojis[854];
-			vPeople[33] = &emojis[904];
-			vPeople[34] = &emojis[1007];
-			vPeople[35] = &emojis[887];
-			vPeople[36] = &emojis[866];
-			vPeople[37] = &emojis[867];
-			vPeople[38] = &emojis[868];
-			vPeople[39] = &emojis[869];
-			vPeople[40] = &emojis[856];
-			vPeople[41] = &emojis[857];
-			vPeople[42] = &emojis[901];
-			vPeople[43] = &emojis[59];
-			vPeople[44] = &emojis[871];
-			vPeople[45] = &emojis[858];
-			vPeople[46] = &emojis[879];
-			vPeople[47] = &emojis[877];
-			vPeople[48] = &emojis[872];
-			vPeople[49] = &emojis[882];
-			vPeople[50] = &emojis[885];
-			vPeople[51] = &emojis[876];
-			vPeople[52] = &emojis[884];
-			vPeople[53] = &emojis[883];
-			vPeople[54] = &emojis[874];
-			vPeople[55] = &emojis[875];
-			vPeople[56] = &emojis[870];
-			vPeople[57] = &emojis[873];
-			vPeople[58] = &emojis[878];
-			vPeople[59] = &emojis[855];
-			vPeople[60] = &emojis[881];
-			vPeople[61] = &emojis[889];
-			vPeople[62] = &emojis[886];
-			vPeople[63] = &emojis[1003];
-			vPeople[64] = &emojis[891];
-			vPeople[65] = &emojis[1005];
-			vPeople[66] = &emojis[1008];
-			vPeople[67] = &emojis[888];
-			vPeople[68] = &emojis[612];
-			vPeople[69] = &emojis[617];
-			vPeople[70] = &emojis[844];
-			vPeople[71] = &emojis[575];
-			vPeople[72] = &emojis[569];
-			vPeople[73] = &emojis[570];
-			vPeople[74] = &emojis[576];
-			vPeople[75] = &emojis[571];
-			vPeople[76] = &emojis[573];
-			vPeople[77] = &emojis[1009];
-			vPeople[78] = &emojis[894];
-			vPeople[79] = &emojis[892];
-			vPeople[80] = &emojis[893];
-			vPeople[81] = &emojis[895];
-			vPeople[82] = &emojis[896];
-			vPeople[83] = &emojis[897];
-			vPeople[84] = &emojis[900];
-			vPeople[85] = &emojis[899];
-			vPeople[86] = &emojis[898];
-			vPeople[87] = &emojis[912];
-			vPeople[88] = &emojis[527];
-			vPeople[89] = &emojis[523];
-			vPeople[90] = &emojis[525];
-			vPeople[91] = &emojis[526];
-			vPeople[92] = &emojis[522];
-			vPeople[93] = &emojis[121];
-			vPeople[94] = &emojis[123];
-			vPeople[95] = &emojis[524];
-			vPeople[96] = &emojis[122];
-			vPeople[97] = &emojis[528];
-			vPeople[98] = &emojis[618];
-			vPeople[99] = &emojis[915];
-			vPeople[100] = &emojis[50];
-			vPeople[101] = &emojis[518];
-			vPeople[102] = &emojis[519];
-			vPeople[103] = &emojis[520];
-			vPeople[104] = &emojis[521];
-			vPeople[105] = &emojis[810];
-			vPeople[106] = &emojis[809];
-			vPeople[107] = &emojis[1011];
-			vPeople[108] = &emojis[811];
-			vPeople[109] = &emojis[124];
-			vPeople[110] = &emojis[581];
-			vPeople[111] = &emojis[516];
-			vPeople[112] = &emojis[517];
-			vPeople[113] = &emojis[514];
-			vPeople[114] = &emojis[515];
-			vPeople[115] = &emojis[513];
-			vPeople[116] = &emojis[512];
-			vPeople[117] = &emojis[548];
-			vPeople[118] = &emojis[549];
-			vPeople[119] = &emojis[827];
-			vPeople[120] = &emojis[566];
-			vPeople[121] = &emojis[550];
-			vPeople[122] = &emojis[551];
-			vPeople[123] = &emojis[552];
-			vPeople[124] = &emojis[553];
-			vPeople[125] = &emojis[561];
-			vPeople[126] = &emojis[564];
-			vPeople[127] = &emojis[565];
-			vPeople[128] = &emojis[562];
-			vPeople[129] = &emojis[563];
-			vPeople[130] = &emojis[558];
-			vPeople[131] = &emojis[567];
-			vPeople[132] = &emojis[578];
-			vPeople[133] = &emojis[799];
-			vPeople[134] = &emojis[338];
-			vPeople[135] = &emojis[572];
-			vPeople[136] = &emojis[568];
-			vPeople[137] = &emojis[560];
-			vPeople[138] = &emojis[970];
-			vPeople[139] = &emojis[395];
-			vPeople[140] = &emojis[579];
-			vPeople[141] = &emojis[559];
-			vPeople[142] = &emojis[555];
-			vPeople[143] = &emojis[556];
-			vPeople[144] = &emojis[557];
-			vPeople[145] = &emojis[907];
-			vPeople[146] = &emojis[577];
-			vPeople[147] = &emojis[905];
-			vPeople[148] = &emojis[906];
-			vPeople[149] = &emojis[911];
-			vPeople[150] = &emojis[914];
-			vPeople[151] = &emojis[913];
-			vPeople[152] = &emojis[583];
-			vPeople[153] = &emojis[582];
-			vPeople[154] = &emojis[593];
-			vPeople[155] = &emojis[1032];
-			vPeople[156] = &emojis[1033];
-			vPeople[157] = &emojis[591];
-			vPeople[158] = &emojis[1034];
-			vPeople[159] = &emojis[1035];
-			vPeople[160] = &emojis[554];
-			vPeople[161] = &emojis[1018];
-			vPeople[162] = &emojis[1019];
-			vPeople[163] = &emojis[1020];
-			vPeople[164] = &emojis[1021];
-			vPeople[165] = &emojis[1022];
-			vPeople[166] = &emojis[1023];
-			vPeople[167] = &emojis[1024];
-			vPeople[168] = &emojis[1025];
-			vPeople[169] = &emojis[1026];
-			vPeople[170] = &emojis[1027];
-			vPeople[171] = &emojis[1028];
-			vPeople[172] = &emojis[1029];
-			vPeople[173] = &emojis[1030];
-			vPeople[174] = &emojis[1031];
-			vPeople[175] = &emojis[538];
-			vPeople[176] = &emojis[533];
-			vPeople[177] = &emojis[534];
-			vPeople[178] = &emojis[532];
-			vPeople[179] = &emojis[535];
-			vPeople[180] = &emojis[537];
-			vPeople[181] = &emojis[536];
-			vPeople[182] = &emojis[580];
-			vPeople[183] = &emojis[587];
-			vPeople[184] = &emojis[547];
-			vPeople[185] = &emojis[544];
-			vPeople[186] = &emojis[545];
-			vPeople[187] = &emojis[546];
-			vPeople[188] = &emojis[542];
-			vPeople[189] = &emojis[543];
-			vPeople[190] = &emojis[530];
-			vPeople[191] = &emojis[369];
-			vPeople[192] = &emojis[352];
-			vPeople[193] = &emojis[529];
-			vPeople[194] = &emojis[101];
-			vPeople[195] = &emojis[351];
-			vPeople[196] = &emojis[541];
-			vPeople[197] = &emojis[539];
-			vPeople[198] = &emojis[540];
-			vPeople[199] = &emojis[636];
-			vPeople[200] = &emojis[531];
-			vPeople[201] = &emojis[800];
-			vPeople[202] = &emojis[589];
-			vPeople[203] = &emojis[209];
-		}
-		return vPeople;
-	} break;
-
-	case dbietNature: {
-		static QVector<EmojiPtr> vNature;
-		if (vNature.isEmpty()) {
-			vNature.resize(147);
-			vNature[0] = &emojis[502];
-			vNature[1] = &emojis[497];
-			vNature[2] = &emojis[493];
-			vNature[3] = &emojis[505];
-			vNature[4] = &emojis[496];
-			vNature[5] = &emojis[507];
-			vNature[6] = &emojis[508];
-			vNature[7] = &emojis[488];
-			vNature[8] = &emojis[495];
-			vNature[9] = &emojis[1013];
-			vNature[10] = &emojis[494];
-			vNature[11] = &emojis[503];
-			vNature[12] = &emojis[509];
-			vNature[13] = &emojis[504];
-			vNature[14] = &emojis[473];
-			vNature[15] = &emojis[501];
-			vNature[16] = &emojis[908];
-			vNature[17] = &emojis[909];
-			vNature[18] = &emojis[910];
-			vNature[19] = &emojis[466];
-			vNature[20] = &emojis[468];
-			vNature[21] = &emojis[487];
-			vNature[22] = &emojis[486];
-			vNature[23] = &emojis[484];
-			vNature[24] = &emojis[483];
-			vNature[25] = &emojis[485];
-			vNature[26] = &emojis[506];
-			vNature[27] = &emojis[471];
-			vNature[28] = &emojis[500];
-			vNature[29] = &emojis[1016];
-			vNature[30] = &emojis[477];
-			vNature[31] = &emojis[475];
-			vNature[32] = &emojis[460];
-			vNature[33] = &emojis[478];
-			vNature[34] = &emojis[476];
-			vNature[35] = &emojis[801];
-			vNature[36] = &emojis[1014];
-			vNature[37] = &emojis[1012];
-			vNature[38] = &emojis[461];
-			vNature[39] = &emojis[482];
-			vNature[40] = &emojis[480];
-			vNature[41] = &emojis[479];
-			vNature[42] = &emojis[481];
-			vNature[43] = &emojis[492];
-			vNature[44] = &emojis[499];
-			vNature[45] = &emojis[459];
-			vNature[46] = &emojis[458];
-			vNature[47] = &emojis[454];
-			vNature[48] = &emojis[453];
-			vNature[49] = &emojis[451];
-			vNature[50] = &emojis[450];
-			vNature[51] = &emojis[452];
-			vNature[52] = &emojis[490];
-			vNature[53] = &emojis[491];
-			vNature[54] = &emojis[472];
-			vNature[55] = &emojis[464];
-			vNature[56] = &emojis[463];
-			vNature[57] = &emojis[465];
-			vNature[58] = &emojis[462];
-			vNature[59] = &emojis[470];
-			vNature[60] = &emojis[448];
-			vNature[61] = &emojis[449];
-			vNature[62] = &emojis[467];
-			vNature[63] = &emojis[1015];
-			vNature[64] = &emojis[766];
-			vNature[65] = &emojis[469];
-			vNature[66] = &emojis[489];
-			vNature[67] = &emojis[456];
-			vNature[68] = &emojis[455];
-			vNature[69] = &emojis[511];
-			vNature[70] = &emojis[510];
-			vNature[71] = &emojis[457];
-			vNature[72] = &emojis[498];
-			vNature[73] = &emojis[258];
-			vNature[74] = &emojis[337];
-			vNature[75] = &emojis[255];
-			vNature[76] = &emojis[256];
-			vNature[77] = &emojis[257];
-			vNature[78] = &emojis[254];
-			vNature[79] = &emojis[268];
-			vNature[80] = &emojis[49];
-			vNature[81] = &emojis[269];
-			vNature[82] = &emojis[346];
-			vNature[83] = &emojis[344];
-			vNature[84] = &emojis[272];
-			vNature[85] = &emojis[271];
-			vNature[86] = &emojis[270];
-			vNature[87] = &emojis[267];
-			vNature[88] = &emojis[263];
-			vNature[89] = &emojis[264];
-			vNature[90] = &emojis[262];
-			vNature[91] = &emojis[260];
-			vNature[92] = &emojis[265];
-			vNature[93] = &emojis[261];
-			vNature[94] = &emojis[592];
-			vNature[95] = &emojis[273];
-			vNature[96] = &emojis[253];
-			vNature[97] = &emojis[336];
-			vNature[98] = &emojis[474];
-			vNature[99] = &emojis[802];
-			vNature[100] = &emojis[221];
-			vNature[101] = &emojis[220];
-			vNature[102] = &emojis[222];
-			vNature[103] = &emojis[228];
-			vNature[104] = &emojis[229];
-			vNature[105] = &emojis[230];
-			vNature[106] = &emojis[231];
-			vNature[107] = &emojis[224];
-			vNature[108] = &emojis[225];
-			vNature[109] = &emojis[226];
-			vNature[110] = &emojis[227];
-			vNature[111] = &emojis[233];
-			vNature[112] = &emojis[236];
-			vNature[113] = &emojis[234];
-			vNature[114] = &emojis[235];
-			vNature[115] = &emojis[237];
-			vNature[116] = &emojis[232];
-			vNature[117] = &emojis[157];
-			vNature[118] = &emojis[238];
-			vNature[119] = &emojis[619];
-			vNature[120] = &emojis[131];
-			vNature[121] = &emojis[44];
-			vNature[122] = &emojis[40];
-			vNature[123] = &emojis[241];
-			vNature[124] = &emojis[97];
-			vNature[125] = &emojis[242];
-			vNature[126] = &emojis[243];
-			vNature[127] = &emojis[41];
-			vNature[128] = &emojis[244];
-			vNature[129] = &emojis[98];
-			vNature[130] = &emojis[246];
-			vNature[131] = &emojis[89];
-			vNature[132] = &emojis[740];
-			vNature[133] = &emojis[613];
-			vNature[134] = &emojis[134];
-			vNature[135] = &emojis[245];
-			vNature[136] = &emojis[43];
-			vNature[137] = &emojis[96];
-			vNature[138] = &emojis[249];
-			vNature[139] = &emojis[616];
-			vNature[140] = &emojis[247];
-			vNature[141] = &emojis[248];
-			vNature[142] = &emojis[42];
-			vNature[143] = &emojis[47];
-			vNature[144] = &emojis[615];
-			vNature[145] = &emojis[614];
-			vNature[146] = &emojis[217];
-		}
-		return vNature;
-	} break;
-
-	case dbietFood: {
-		static QVector<EmojiPtr> vFood;
-		if (vFood.isEmpty()) {
-			vFood.resize(67);
-			vFood[0] = &emojis[284];
-			vFood[1] = &emojis[283];
-			vFood[2] = &emojis[285];
-			vFood[3] = &emojis[279];
-			vFood[4] = &emojis[280];
-			vFood[5] = &emojis[281];
-			vFood[6] = &emojis[278];
-			vFood[7] = &emojis[276];
-			vFood[8] = &emojis[288];
-			vFood[9] = &emojis[277];
-			vFood[10] = &emojis[287];
-			vFood[11] = &emojis[286];
-			vFood[12] = &emojis[282];
-			vFood[13] = &emojis[274];
-			vFood[14] = &emojis[275];
-			vFood[15] = &emojis[259];
-			vFood[16] = &emojis[266];
-			vFood[17] = &emojis[301];
-			vFood[18] = &emojis[316];
-			vFood[19] = &emojis[299];
-			vFood[20] = &emojis[1017];
-			vFood[21] = &emojis[292];
-			vFood[22] = &emojis[291];
-			vFood[23] = &emojis[305];
-			vFood[24] = &emojis[320];
-			vFood[25] = &emojis[289];
-			vFood[26] = &emojis[300];
-			vFood[27] = &emojis[250];
-			vFood[28] = &emojis[290];
-			vFood[29] = &emojis[298];
-			vFood[30] = &emojis[251];
-			vFood[31] = &emojis[252];
-			vFood[32] = &emojis[297];
-			vFood[33] = &emojis[319];
-			vFood[34] = &emojis[306];
-			vFood[35] = &emojis[304];
-			vFood[36] = &emojis[318];
-			vFood[37] = &emojis[296];
-			vFood[38] = &emojis[294];
-			vFood[39] = &emojis[295];
-			vFood[40] = &emojis[293];
-			vFood[41] = &emojis[303];
-			vFood[42] = &emojis[302];
-			vFood[43] = &emojis[308];
-			vFood[44] = &emojis[309];
-			vFood[45] = &emojis[307];
-			vFood[46] = &emojis[317];
-			vFood[47] = &emojis[335];
-			vFood[48] = &emojis[315];
-			vFood[49] = &emojis[313];
-			vFood[50] = &emojis[314];
-			vFood[51] = &emojis[312];
-			vFood[52] = &emojis[332];
-			vFood[53] = &emojis[310];
-			vFood[54] = &emojis[311];
-			vFood[55] = &emojis[327];
-			vFood[56] = &emojis[328];
-			vFood[57] = &emojis[324];
-			vFood[58] = &emojis[325];
-			vFood[59] = &emojis[326];
-			vFood[60] = &emojis[331];
-			vFood[61] = &emojis[323];
-			vFood[62] = &emojis[322];
-			vFood[63] = &emojis[48];
-			vFood[64] = &emojis[329];
-			vFood[65] = &emojis[321];
-			vFood[66] = &emojis[330];
-		}
-		return vFood;
-	} break;
-
-	case dbietActivity: {
-		static QVector<EmojiPtr> vActivity;
-		if (vActivity.isEmpty()) {
-			vActivity.resize(57);
-			vActivity[0] = &emojis[94];
-			vActivity[1] = &emojis[392];
-			vActivity[2] = &emojis[400];
-			vActivity[3] = &emojis[95];
-			vActivity[4] = &emojis[390];
-			vActivity[5] = &emojis[408];
-			vActivity[6] = &emojis[401];
-			vActivity[7] = &emojis[377];
-			vActivity[8] = &emojis[109];
-			vActivity[9] = &emojis[404];
-			vActivity[10] = &emojis[411];
-			vActivity[11] = &emojis[445];
-			vActivity[12] = &emojis[410];
-			vActivity[13] = &emojis[409];
-			vActivity[14] = &emojis[407];
-			vActivity[15] = &emojis[391];
-			vActivity[16] = &emojis[112];
-			vActivity[17] = &emojis[394];
-			vActivity[18] = &emojis[113];
-			vActivity[19] = &emojis[446];
-			vActivity[20] = &emojis[363];
-			vActivity[21] = &emojis[951];
-			vActivity[22] = &emojis[402];
-			vActivity[23] = &emojis[396];
-			vActivity[24] = &emojis[980];
-			vActivity[25] = &emojis[114];
-			vActivity[26] = &emojis[403];
-			vActivity[27] = &emojis[968];
-			vActivity[28] = &emojis[969];
-			vActivity[29] = &emojis[399];
-			vActivity[30] = &emojis[798];
-			vActivity[31] = &emojis[398];
-			vActivity[32] = &emojis[389];
-			vActivity[33] = &emojis[397];
-			vActivity[34] = &emojis[353];
-			vActivity[35] = &emojis[354];
-			vActivity[36] = &emojis[443];
-			vActivity[37] = &emojis[371];
-			vActivity[38] = &emojis[359];
-			vActivity[39] = &emojis[373];
-			vActivity[40] = &emojis[368];
-			vActivity[41] = &emojis[370];
-			vActivity[42] = &emojis[364];
-			vActivity[43] = &emojis[367];
-			vActivity[44] = &emojis[388];
-			vActivity[45] = &emojis[385];
-			vActivity[46] = &emojis[383];
-			vActivity[47] = &emojis[386];
-			vActivity[48] = &emojis[384];
-			vActivity[49] = &emojis[387];
-			vActivity[50] = &emojis[372];
-			vActivity[51] = &emojis[374];
-			vActivity[52] = &emojis[574];
-			vActivity[53] = &emojis[375];
-			vActivity[54] = &emojis[378];
-			vActivity[55] = &emojis[376];
-			vActivity[56] = &emojis[379];
-		}
-		return vActivity;
-	} break;
-
-	case dbietTravel: {
-		static QVector<EmojiPtr> vTravel;
-		if (vTravel.isEmpty()) {
-			vTravel.resize(115);
-			vTravel[0] = &emojis[939];
-			vTravel[1] = &emojis[937];
-			vTravel[2] = &emojis[941];
-			vTravel[3] = &emojis[928];
-			vTravel[4] = &emojis[930];
-			vTravel[5] = &emojis[406];
-			vTravel[6] = &emojis[935];
-			vTravel[7] = &emojis[933];
-			vTravel[8] = &emojis[934];
-			vTravel[9] = &emojis[932];
-			vTravel[10] = &emojis[942];
-			vTravel[11] = &emojis[943];
-			vTravel[12] = &emojis[944];
-			vTravel[13] = &emojis[405];
-			vTravel[14] = &emojis[966];
-			vTravel[15] = &emojis[956];
-			vTravel[16] = &emojis[936];
-			vTravel[17] = &emojis[929];
-			vTravel[18] = &emojis[940];
-			vTravel[19] = &emojis[938];
-			vTravel[20] = &emojis[949];
-			vTravel[21] = &emojis[948];
-			vTravel[22] = &emojis[947];
-			vTravel[23] = &emojis[919];
-			vTravel[24] = &emojis[927];
-			vTravel[25] = &emojis[945];
-			vTravel[26] = &emojis[920];
-			vTravel[27] = &emojis[921];
-			vTravel[28] = &emojis[924];
-			vTravel[29] = &emojis[946];
-			vTravel[30] = &emojis[918];
-			vTravel[31] = &emojis[922];
-			vTravel[32] = &emojis[923];
-			vTravel[33] = &emojis[926];
-			vTravel[34] = &emojis[925];
-			vTravel[35] = &emojis[917];
-			vTravel[36] = &emojis[998];
-			vTravel[37] = &emojis[119];
-			vTravel[38] = &emojis[999];
-			vTravel[39] = &emojis[1000];
-			vTravel[40] = &emojis[111];
-			vTravel[41] = &emojis[997];
-			vTravel[42] = &emojis[952];
-			vTravel[43] = &emojis[110];
-			vTravel[44] = &emojis[1002];
-			vTravel[45] = &emojis[916];
-			vTravel[46] = &emojis[1001];
-			vTravel[47] = &emojis[634];
-			vTravel[48] = &emojis[81];
-			vTravel[49] = &emojis[955];
-			vTravel[50] = &emojis[116];
-			vTravel[51] = &emojis[931];
-			vTravel[52] = &emojis[954];
-			vTravel[53] = &emojis[953];
-			vTravel[54] = &emojis[393];
-			vTravel[55] = &emojis[950];
-			vTravel[56] = &emojis[361];
-			vTravel[57] = &emojis[362];
-			vTravel[58] = &emojis[360];
-			vTravel[59] = &emojis[415];
-			vTravel[60] = &emojis[208];
-			vTravel[61] = &emojis[832];
-			vTravel[62] = &emojis[437];
-			vTravel[63] = &emojis[108];
-			vTravel[64] = &emojis[350];
-			vTravel[65] = &emojis[106];
-			vTravel[66] = &emojis[412];
-			vTravel[67] = &emojis[831];
-			vTravel[68] = &emojis[218];
-			vTravel[69] = &emojis[834];
-			vTravel[70] = &emojis[413];
-			vTravel[71] = &emojis[115];
-			vTravel[72] = &emojis[422];
-			vTravel[73] = &emojis[995];
-			vTravel[74] = &emojis[996];
-			vTravel[75] = &emojis[212];
-			vTravel[76] = &emojis[211];
-			vTravel[77] = &emojis[420];
-			vTravel[78] = &emojis[414];
-			vTravel[79] = &emojis[421];
-			vTravel[80] = &emojis[214];
-			vTravel[81] = &emojis[213];
-			vTravel[82] = &emojis[417];
-			vTravel[83] = &emojis[210];
-			vTravel[84] = &emojis[216];
-			vTravel[85] = &emojis[219];
-			vTravel[86] = &emojis[239];
-			vTravel[87] = &emojis[340];
-			vTravel[88] = &emojis[339];
-			vTravel[89] = &emojis[215];
-			vTravel[90] = &emojis[416];
-			vTravel[91] = &emojis[440];
-			vTravel[92] = &emojis[439];
-			vTravel[93] = &emojis[423];
-			vTravel[94] = &emojis[833];
-			vTravel[95] = &emojis[424];
-			vTravel[96] = &emojis[425];
-			vTravel[97] = &emojis[418];
-			vTravel[98] = &emojis[426];
-			vTravel[99] = &emojis[436];
-			vTravel[100] = &emojis[427];
-			vTravel[101] = &emojis[428];
-			vTravel[102] = &emojis[429];
-			vTravel[103] = &emojis[430];
-			vTravel[104] = &emojis[432];
-			vTravel[105] = &emojis[434];
-			vTravel[106] = &emojis[435];
-			vTravel[107] = &emojis[433];
-			vTravel[108] = &emojis[594];
-			vTravel[109] = &emojis[419];
-			vTravel[110] = &emojis[105];
-			vTravel[111] = &emojis[768];
-			vTravel[112] = &emojis[769];
-			vTravel[113] = &emojis[767];
-			vTravel[114] = &emojis[104];
-		}
-		return vTravel;
-	} break;
-
-	case dbietObjects: {
-		static QVector<EmojiPtr> vObjects;
-		if (vObjects.isEmpty()) {
-			vObjects.resize(178);
-			vObjects[0] = &emojis[14];
-			vObjects[1] = &emojis[689];
-			vObjects[2] = &emojis[690];
-			vObjects[3] = &emojis[635];
-			vObjects[4] = &emojis[16];
-			vObjects[5] = &emojis[812];
-			vObjects[6] = &emojis[813];
-			vObjects[7] = &emojis[814];
-			vObjects[8] = &emojis[815];
-			vObjects[9] = &emojis[803];
-			vObjects[10] = &emojis[823];
-			vObjects[11] = &emojis[637];
-			vObjects[12] = &emojis[638];
-			vObjects[13] = &emojis[639];
-			vObjects[14] = &emojis[640];
-			vObjects[15] = &emojis[700];
-			vObjects[16] = &emojis[695];
-			vObjects[17] = &emojis[696];
-			vObjects[18] = &emojis[697];
-			vObjects[19] = &emojis[365];
-			vObjects[20] = &emojis[701];
-			vObjects[21] = &emojis[358];
-			vObjects[22] = &emojis[670];
-			vObjects[23] = &emojis[45];
-			vObjects[24] = &emojis[671];
-			vObjects[25] = &emojis[672];
-			vObjects[26] = &emojis[698];
-			vObjects[27] = &emojis[699];
-			vObjects[28] = &emojis[355];
-			vObjects[29] = &emojis[356];
-			vObjects[30] = &emojis[357];
-			vObjects[31] = &emojis[25];
-			vObjects[32] = &emojis[26];
-			vObjects[33] = &emojis[24];
-			vObjects[34] = &emojis[796];
-			vObjects[35] = &emojis[27];
-			vObjects[36] = &emojis[15];
-			vObjects[37] = &emojis[673];
-			vObjects[38] = &emojis[714];
-			vObjects[39] = &emojis[715];
-			vObjects[40] = &emojis[609];
-			vObjects[41] = &emojis[741];
-			vObjects[42] = &emojis[795];
-			vObjects[43] = &emojis[820];
-			vObjects[44] = &emojis[994];
-			vObjects[45] = &emojis[632];
-			vObjects[46] = &emojis[629];
-			vObjects[47] = &emojis[628];
-			vObjects[48] = &emojis[630];
-			vObjects[49] = &emojis[631];
-			vObjects[50] = &emojis[624];
-			vObjects[51] = &emojis[627];
-			vObjects[52] = &emojis[590];
-			vObjects[53] = &emojis[83];
-			vObjects[54] = &emojis[742];
-			vObjects[55] = &emojis[743];
-			vObjects[56] = &emojis[80];
-			vObjects[57] = &emojis[992];
-			vObjects[58] = &emojis[100];
-			vObjects[59] = &emojis[744];
-			vObjects[60] = &emojis[85];
-			vObjects[61] = &emojis[102];
-			vObjects[62] = &emojis[746];
-			vObjects[63] = &emojis[611];
-			vObjects[64] = &emojis[745];
-			vObjects[65] = &emojis[826];
-			vObjects[66] = &emojis[82];
-			vObjects[67] = &emojis[993];
-			vObjects[68] = &emojis[960];
-			vObjects[69] = &emojis[51];
-			vObjects[70] = &emojis[92];
-			vObjects[71] = &emojis[93];
-			vObjects[72] = &emojis[447];
-			vObjects[73] = &emojis[749];
-			vObjects[74] = &emojis[702];
-			vObjects[75] = &emojis[584];
-			vObjects[76] = &emojis[84];
-			vObjects[77] = &emojis[748];
-			vObjects[78] = &emojis[747];
-			vObjects[79] = &emojis[797];
-			vObjects[80] = &emojis[586];
-			vObjects[81] = &emojis[585];
-			vObjects[82] = &emojis[240];
-			vObjects[83] = &emojis[444];
-			vObjects[84] = &emojis[725];
-			vObjects[85] = &emojis[977];
-			vObjects[86] = &emojis[979];
-			vObjects[87] = &emojis[981];
-			vObjects[88] = &emojis[720];
-			vObjects[89] = &emojis[824];
-			vObjects[90] = &emojis[986];
-			vObjects[91] = &emojis[987];
-			vObjects[92] = &emojis[990];
-			vObjects[93] = &emojis[958];
-			vObjects[94] = &emojis[989];
-			vObjects[95] = &emojis[816];
-			vObjects[96] = &emojis[830];
-			vObjects[97] = &emojis[107];
-			vObjects[98] = &emojis[835];
-			vObjects[99] = &emojis[988];
-			vObjects[100] = &emojis[341];
-			vObjects[101] = &emojis[348];
-			vObjects[102] = &emojis[333];
-			vObjects[103] = &emojis[334];
-			vObjects[104] = &emojis[343];
-			vObjects[105] = &emojis[342];
-			vObjects[106] = &emojis[347];
-			vObjects[107] = &emojis[349];
-			vObjects[108] = &emojis[345];
-			vObjects[109] = &emojis[438];
-			vObjects[110] = &emojis[120];
-			vObjects[111] = &emojis[681];
-			vObjects[112] = &emojis[680];
-			vObjects[113] = &emojis[679];
-			vObjects[114] = &emojis[588];
-			vObjects[115] = &emojis[686];
-			vObjects[116] = &emojis[682];
-			vObjects[117] = &emojis[683];
-			vObjects[118] = &emojis[684];
-			vObjects[119] = &emojis[685];
-			vObjects[120] = &emojis[678];
-			vObjects[121] = &emojis[687];
-			vObjects[122] = &emojis[677];
-			vObjects[123] = &emojis[676];
-			vObjects[124] = &emojis[668];
-			vObjects[125] = &emojis[643];
-			vObjects[126] = &emojis[657];
-			vObjects[127] = &emojis[650];
-			vObjects[128] = &emojis[648];
-			vObjects[129] = &emojis[649];
-			vObjects[130] = &emojis[644];
-			vObjects[131] = &emojis[645];
-			vObjects[132] = &emojis[646];
-			vObjects[133] = &emojis[822];
-			vObjects[134] = &emojis[647];
-			vObjects[135] = &emojis[818];
-			vObjects[136] = &emojis[829];
-			vObjects[137] = &emojis[819];
-			vObjects[138] = &emojis[651];
-			vObjects[139] = &emojis[821];
-			vObjects[140] = &emojis[641];
-			vObjects[141] = &emojis[642];
-			vObjects[142] = &emojis[817];
-			vObjects[143] = &emojis[825];
-			vObjects[144] = &emojis[688];
-			vObjects[145] = &emojis[659];
-			vObjects[146] = &emojis[661];
-			vObjects[147] = &emojis[663];
-			vObjects[148] = &emojis[664];
-			vObjects[149] = &emojis[665];
-			vObjects[150] = &emojis[660];
-			vObjects[151] = &emojis[658];
-			vObjects[152] = &emojis[666];
-			vObjects[153] = &emojis[662];
-			vObjects[154] = &emojis[726];
-			vObjects[155] = &emojis[654];
-			vObjects[156] = &emojis[804];
-			vObjects[157] = &emojis[117];
-			vObjects[158] = &emojis[656];
-			vObjects[159] = &emojis[655];
-			vObjects[160] = &emojis[652];
-			vObjects[161] = &emojis[653];
-			vObjects[162] = &emojis[957];
-			vObjects[163] = &emojis[441];
-			vObjects[164] = &emojis[442];
-			vObjects[165] = &emojis[719];
-			vObjects[166] = &emojis[721];
-			vObjects[167] = &emojis[722];
-			vObjects[168] = &emojis[718];
-			vObjects[169] = &emojis[805];
-			vObjects[170] = &emojis[806];
-			vObjects[171] = &emojis[126];
-			vObjects[172] = &emojis[669];
-			vObjects[173] = &emojis[125];
-			vObjects[174] = &emojis[808];
-			vObjects[175] = &emojis[807];
-			vObjects[176] = &emojis[716];
-			vObjects[177] = &emojis[717];
-		}
-		return vObjects;
-	} break;
-
-	case dbietSymbols: {
-		static QVector<EmojiPtr> vSymbols;
-		if (vSymbols.isEmpty()) {
-			vSymbols.resize(516);
-			vSymbols[0] = &emojis[143];
-			vSymbols[1] = &emojis[603];
-			vSymbols[2] = &emojis[602];
-			vSymbols[3] = &emojis[601];
-			vSymbols[4] = &emojis[604];
-			vSymbols[5] = &emojis[596];
-			vSymbols[6] = &emojis[142];
-			vSymbols[7] = &emojis[597];
-			vSymbols[8] = &emojis[606];
-			vSymbols[9] = &emojis[595];
-			vSymbols[10] = &emojis[599];
-			vSymbols[11] = &emojis[598];
-			vSymbols[12] = &emojis[600];
-			vSymbols[13] = &emojis[605];
-			vSymbols[14] = &emojis[607];
-			vSymbols[15] = &emojis[56];
-			vSymbols[16] = &emojis[129];
-			vSymbols[17] = &emojis[55];
-			vSymbols[18] = &emojis[765];
-			vSymbols[19] = &emojis[58];
-			vSymbols[20] = &emojis[130];
-			vSymbols[21] = &emojis[750];
-			vSymbols[22] = &emojis[770];
-			vSymbols[23] = &emojis[57];
-			vSymbols[24] = &emojis[54];
-			vSymbols[25] = &emojis[991];
-			vSymbols[26] = &emojis[99];
-			vSymbols[27] = &emojis[61];
-			vSymbols[28] = &emojis[62];
-			vSymbols[29] = &emojis[63];
-			vSymbols[30] = &emojis[64];
-			vSymbols[31] = &emojis[65];
-			vSymbols[32] = &emojis[66];
-			vSymbols[33] = &emojis[67];
-			vSymbols[34] = &emojis[68];
-			vSymbols[35] = &emojis[69];
-			vSymbols[36] = &emojis[70];
-			vSymbols[37] = &emojis[71];
-			vSymbols[38] = &emojis[72];
-			vSymbols[39] = &emojis[185];
-			vSymbols[40] = &emojis[86];
-			vSymbols[41] = &emojis[197];
-			vSymbols[42] = &emojis[203];
-			vSymbols[43] = &emojis[52];
-			vSymbols[44] = &emojis[53];
-			vSymbols[45] = &emojis[692];
-			vSymbols[46] = &emojis[691];
-			vSymbols[47] = &emojis[200];
-			vSymbols[48] = &emojis[194];
-			vSymbols[49] = &emojis[202];
-			vSymbols[50] = &emojis[204];
-			vSymbols[51] = &emojis[201];
-			vSymbols[52] = &emojis[133];
-			vSymbols[53] = &emojis[191];
-			vSymbols[54] = &emojis[206];
-			vSymbols[55] = &emojis[622];
-			vSymbols[56] = &emojis[205];
-			vSymbols[57] = &emojis[162];
-			vSymbols[58] = &emojis[161];
-			vSymbols[59] = &emojis[198];
-			vSymbols[60] = &emojis[199];
-			vSymbols[61] = &emojis[196];
-			vSymbols[62] = &emojis[177];
-			vSymbols[63] = &emojis[178];
-			vSymbols[64] = &emojis[181];
-			vSymbols[65] = &emojis[182];
-			vSymbols[66] = &emojis[179];
-			vSymbols[67] = &emojis[189];
-			vSymbols[68] = &emojis[103];
-			vSymbols[69] = &emojis[667];
-			vSymbols[70] = &emojis[959];
-			vSymbols[71] = &emojis[136];
-			vSymbols[72] = &emojis[158];
-			vSymbols[73] = &emojis[610];
-			vSymbols[74] = &emojis[77];
-			vSymbols[75] = &emojis[971];
-			vSymbols[76] = &emojis[963];
-			vSymbols[77] = &emojis[967];
-			vSymbols[78] = &emojis[965];
-			vSymbols[79] = &emojis[733];
-			vSymbols[80] = &emojis[693];
-			vSymbols[81] = &emojis[141];
-			vSymbols[82] = &emojis[140];
-			vSymbols[83] = &emojis[138];
-			vSymbols[84] = &emojis[139];
-			vSymbols[85] = &emojis[2];
-			vSymbols[86] = &emojis[3];
-			vSymbols[87] = &emojis[623];
-			vSymbols[88] = &emojis[708];
-			vSymbols[89] = &emojis[709];
-			vSymbols[90] = &emojis[752];
-			vSymbols[91] = &emojis[87];
-			vSymbols[92] = &emojis[160];
-			vSymbols[93] = &emojis[88];
-			vSymbols[94] = &emojis[972];
-			vSymbols[95] = &emojis[751];
-			vSymbols[96] = &emojis[78];
-			vSymbols[97] = &emojis[195];
-			vSymbols[98] = &emojis[633];
-			vSymbols[99] = &emojis[135];
-			vSymbols[100] = &emojis[132];
-			vSymbols[101] = &emojis[137];
-			vSymbols[102] = &emojis[118];
-			vSymbols[103] = &emojis[608];
-			vSymbols[104] = &emojis[207];
-			vSymbols[105] = &emojis[149];
-			vSymbols[106] = &emojis[223];
-			vSymbols[107] = &emojis[31];
-			vSymbols[108] = &emojis[431];
-			vSymbols[109] = &emojis[193];
-			vSymbols[110] = &emojis[982];
-			vSymbols[111] = &emojis[983];
-			vSymbols[112] = &emojis[984];
-			vSymbols[113] = &emojis[985];
-			vSymbols[114] = &emojis[79];
-			vSymbols[115] = &emojis[961];
-			vSymbols[116] = &emojis[978];
-			vSymbols[117] = &emojis[180];
-			vSymbols[118] = &emojis[964];
-			vSymbols[119] = &emojis[973];
-			vSymbols[120] = &emojis[974];
-			vSymbols[121] = &emojis[976];
-			vSymbols[122] = &emojis[975];
-			vSymbols[123] = &emojis[962];
-			vSymbols[124] = &emojis[366];
-			vSymbols[125] = &emojis[694];
-			vSymbols[126] = &emojis[192];
-			vSymbols[127] = &emojis[187];
-			vSymbols[128] = &emojis[188];
-			vSymbols[129] = &emojis[190];
-			vSymbols[130] = &emojis[183];
-			vSymbols[131] = &emojis[186];
-			vSymbols[132] = &emojis[184];
-			vSymbols[133] = &emojis[165];
-			vSymbols[134] = &emojis[166];
-			vSymbols[135] = &emojis[167];
-			vSymbols[136] = &emojis[168];
-			vSymbols[137] = &emojis[169];
-			vSymbols[138] = &emojis[170];
-			vSymbols[139] = &emojis[171];
-			vSymbols[140] = &emojis[172];
-			vSymbols[141] = &emojis[173];
-			vSymbols[142] = &emojis[174];
-			vSymbols[143] = &emojis[734];
-			vSymbols[144] = &emojis[737];
-			vSymbols[145] = &emojis[34];
-			vSymbols[146] = &emojis[28];
-			vSymbols[147] = &emojis[23];
-			vSymbols[148] = &emojis[29];
-			vSymbols[149] = &emojis[30];
-			vSymbols[150] = &emojis[21];
-			vSymbols[151] = &emojis[22];
-			vSymbols[152] = &emojis[17];
-			vSymbols[153] = &emojis[18];
-			vSymbols[154] = &emojis[703];
-			vSymbols[155] = &emojis[704];
-			vSymbols[156] = &emojis[705];
-			vSymbols[157] = &emojis[35];
-			vSymbols[158] = &emojis[763];
-			vSymbols[159] = &emojis[764];
-			vSymbols[160] = &emojis[19];
-			vSymbols[161] = &emojis[20];
-			vSymbols[162] = &emojis[147];
-			vSymbols[163] = &emojis[152];
-			vSymbols[164] = &emojis[153];
-			vSymbols[165] = &emojis[154];
-			vSymbols[166] = &emojis[9];
-			vSymbols[167] = &emojis[10];
-			vSymbols[168] = &emojis[11];
-			vSymbols[169] = &emojis[8];
-			vSymbols[170] = &emojis[7];
-			vSymbols[171] = &emojis[6];
-			vSymbols[172] = &emojis[707];
-			vSymbols[173] = &emojis[13];
-			vSymbols[174] = &emojis[12];
-			vSymbols[175] = &emojis[150];
-			vSymbols[176] = &emojis[151];
-			vSymbols[177] = &emojis[163];
-			vSymbols[178] = &emojis[164];
-			vSymbols[179] = &emojis[5];
-			vSymbols[180] = &emojis[739];
-			vSymbols[181] = &emojis[736];
-			vSymbols[182] = &emojis[735];
-			vSymbols[183] = &emojis[738];
-			vSymbols[184] = &emojis[381];
-			vSymbols[185] = &emojis[382];
-			vSymbols[186] = &emojis[159];
-			vSymbols[187] = &emojis[148];
-			vSymbols[188] = &emojis[127];
-			vSymbols[189] = &emojis[706];
-			vSymbols[190] = &emojis[144];
-			vSymbols[191] = &emojis[145];
-			vSymbols[192] = &emojis[146];
-			vSymbols[193] = &emojis[128];
-			vSymbols[194] = &emojis[626];
-			vSymbols[195] = &emojis[625];
-			vSymbols[196] = &emojis[0];
-			vSymbols[197] = &emojis[1];
-			vSymbols[198] = &emojis[4];
-			vSymbols[199] = &emojis[729];
-			vSymbols[200] = &emojis[728];
-			vSymbols[201] = &emojis[730];
-			vSymbols[202] = &emojis[732];
-			vSymbols[203] = &emojis[731];
-			vSymbols[204] = &emojis[46];
-			vSymbols[205] = &emojis[727];
-			vSymbols[206] = &emojis[90];
-			vSymbols[207] = &emojis[91];
-			vSymbols[208] = &emojis[755];
-			vSymbols[209] = &emojis[756];
-			vSymbols[210] = &emojis[759];
-			vSymbols[211] = &emojis[760];
-			vSymbols[212] = &emojis[757];
-			vSymbols[213] = &emojis[758];
-			vSymbols[214] = &emojis[761];
-			vSymbols[215] = &emojis[32];
-			vSymbols[216] = &emojis[33];
-			vSymbols[217] = &emojis[155];
-			vSymbols[218] = &emojis[156];
-			vSymbols[219] = &emojis[762];
-			vSymbols[220] = &emojis[37];
-			vSymbols[221] = &emojis[36];
-			vSymbols[222] = &emojis[39];
-			vSymbols[223] = &emojis[38];
-			vSymbols[224] = &emojis[753];
-			vSymbols[225] = &emojis[754];
-			vSymbols[226] = &emojis[711];
-			vSymbols[227] = &emojis[712];
-			vSymbols[228] = &emojis[713];
-			vSymbols[229] = &emojis[710];
-			vSymbols[230] = &emojis[675];
-			vSymbols[231] = &emojis[674];
-			vSymbols[232] = &emojis[723];
-			vSymbols[233] = &emojis[724];
-			vSymbols[234] = &emojis[176];
-			vSymbols[235] = &emojis[175];
-			vSymbols[236] = &emojis[73];
-			vSymbols[237] = &emojis[74];
-			vSymbols[238] = &emojis[75];
-			vSymbols[239] = &emojis[76];
-			vSymbols[240] = &emojis[380];
-			vSymbols[241] = &emojis[1036];
-			vSymbols[242] = &emojis[621];
-			vSymbols[243] = &emojis[828];
-			vSymbols[244] = &emojis[620];
-			vSymbols[245] = &emojis[771];
-			vSymbols[246] = &emojis[772];
-			vSymbols[247] = &emojis[773];
-			vSymbols[248] = &emojis[774];
-			vSymbols[249] = &emojis[775];
-			vSymbols[250] = &emojis[776];
-			vSymbols[251] = &emojis[777];
-			vSymbols[252] = &emojis[778];
-			vSymbols[253] = &emojis[779];
-			vSymbols[254] = &emojis[780];
-			vSymbols[255] = &emojis[781];
-			vSymbols[256] = &emojis[782];
-			vSymbols[257] = &emojis[783];
-			vSymbols[258] = &emojis[784];
-			vSymbols[259] = &emojis[785];
-			vSymbols[260] = &emojis[786];
-			vSymbols[261] = &emojis[787];
-			vSymbols[262] = &emojis[788];
-			vSymbols[263] = &emojis[789];
-			vSymbols[264] = &emojis[790];
-			vSymbols[265] = &emojis[791];
-			vSymbols[266] = &emojis[792];
-			vSymbols[267] = &emojis[793];
-			vSymbols[268] = &emojis[794];
-			vSymbols[269] = &emojis[1069];
-			vSymbols[270] = &emojis[1081];
-			vSymbols[271] = &emojis[1072];
-			vSymbols[272] = &emojis[1127];
-			vSymbols[273] = &emojis[1077];
-			vSymbols[274] = &emojis[1067];
-			vSymbols[275] = &emojis[1074];
-			vSymbols[276] = &emojis[1071];
-			vSymbols[277] = &emojis[1075];
-			vSymbols[278] = &emojis[1070];
-			vSymbols[279] = &emojis[1076];
-			vSymbols[280] = &emojis[1073];
-			vSymbols[281] = &emojis[1080];
-			vSymbols[282] = &emojis[1079];
-			vSymbols[283] = &emojis[1078];
-			vSymbols[284] = &emojis[1082];
-			vSymbols[285] = &emojis[1098];
-			vSymbols[286] = &emojis[1089];
-			vSymbols[287] = &emojis[1085];
-			vSymbols[288] = &emojis[1084];
-			vSymbols[289] = &emojis[1101];
-			vSymbols[290] = &emojis[1086];
-			vSymbols[291] = &emojis[1102];
-			vSymbols[292] = &emojis[1091];
-			vSymbols[293] = &emojis[1093];
-			vSymbols[294] = &emojis[1099];
-			vSymbols[295] = &emojis[1095];
-			vSymbols[296] = &emojis[1083];
-			vSymbols[297] = &emojis[1100];
-			vSymbols[298] = &emojis[1097];
-			vSymbols[299] = &emojis[1172];
-			vSymbols[300] = &emojis[1302];
-			vSymbols[301] = &emojis[1094];
-			vSymbols[302] = &emojis[1088];
-			vSymbols[303] = &emojis[1087];
-			vSymbols[304] = &emojis[1090];
-			vSymbols[305] = &emojis[1183];
-			vSymbols[306] = &emojis[1112];
-			vSymbols[307] = &emojis[1103];
-			vSymbols[308] = &emojis[1166];
-			vSymbols[309] = &emojis[1117];
-			vSymbols[310] = &emojis[1096];
-			vSymbols[311] = &emojis[1190];
-			vSymbols[312] = &emojis[1106];
-			vSymbols[313] = &emojis[1279];
-			vSymbols[314] = &emojis[1111];
-			vSymbols[315] = &emojis[1113];
-			vSymbols[316] = &emojis[1119];
-			vSymbols[317] = &emojis[1104];
-			vSymbols[318] = &emojis[1114];
-			vSymbols[319] = &emojis[1185];
-			vSymbols[320] = &emojis[1107];
-			vSymbols[321] = &emojis[1105];
-			vSymbols[322] = &emojis[1110];
-			vSymbols[323] = &emojis[1115];
-			vSymbols[324] = &emojis[1109];
-			vSymbols[325] = &emojis[1163];
-			vSymbols[326] = &emojis[1116];
-			vSymbols[327] = &emojis[1118];
-			vSymbols[328] = &emojis[1120];
-			vSymbols[329] = &emojis[1121];
-			vSymbols[330] = &emojis[1124];
-			vSymbols[331] = &emojis[1123];
-			vSymbols[332] = &emojis[1125];
-			vSymbols[333] = &emojis[1126];
-			vSymbols[334] = &emojis[1128];
-			vSymbols[335] = &emojis[1130];
-			vSymbols[336] = &emojis[1274];
-			vSymbols[337] = &emojis[1154];
-			vSymbols[338] = &emojis[1132];
-			vSymbols[339] = &emojis[1129];
-			vSymbols[340] = &emojis[1134];
-			vSymbols[341] = &emojis[1135];
-			vSymbols[342] = &emojis[1138];
-			vSymbols[343] = &emojis[1140];
-			vSymbols[344] = &emojis[1137];
-			vSymbols[345] = &emojis[1136];
-			vSymbols[346] = &emojis[1141];
-			vSymbols[347] = &emojis[1146];
-			vSymbols[348] = &emojis[1240];
-			vSymbols[349] = &emojis[1280];
-			vSymbols[350] = &emojis[1142];
-			vSymbols[351] = &emojis[1151];
-			vSymbols[352] = &emojis[1145];
-			vSymbols[353] = &emojis[1122];
-			vSymbols[354] = &emojis[1148];
-			vSymbols[355] = &emojis[1149];
-			vSymbols[356] = &emojis[1155];
-			vSymbols[357] = &emojis[1150];
-			vSymbols[358] = &emojis[1144];
-			vSymbols[359] = &emojis[1153];
-			vSymbols[360] = &emojis[1158];
-			vSymbols[361] = &emojis[1157];
-			vSymbols[362] = &emojis[1147];
-			vSymbols[363] = &emojis[1152];
-			vSymbols[364] = &emojis[1159];
-			vSymbols[365] = &emojis[1160];
-			vSymbols[366] = &emojis[1164];
-			vSymbols[367] = &emojis[1162];
-			vSymbols[368] = &emojis[1161];
-			vSymbols[369] = &emojis[1165];
-			vSymbols[370] = &emojis[1175];
-			vSymbols[371] = &emojis[1171];
-			vSymbols[372] = &emojis[1167];
-			vSymbols[373] = &emojis[1174];
-			vSymbols[374] = &emojis[1173];
-			vSymbols[375] = &emojis[1168];
-			vSymbols[376] = &emojis[1170];
-			vSymbols[377] = &emojis[1169];
-			vSymbols[378] = &emojis[1176];
-			vSymbols[379] = &emojis[1178];
-			vSymbols[380] = &emojis[1180];
-			vSymbols[381] = &emojis[1177];
-			vSymbols[382] = &emojis[1179];
-			vSymbols[383] = &emojis[1191];
-			vSymbols[384] = &emojis[1181];
-			vSymbols[385] = &emojis[1184];
-			vSymbols[386] = &emojis[1308];
-			vSymbols[387] = &emojis[1189];
-			vSymbols[388] = &emojis[1182];
-			vSymbols[389] = &emojis[1192];
-			vSymbols[390] = &emojis[1201];
-			vSymbols[391] = &emojis[1193];
-			vSymbols[392] = &emojis[1198];
-			vSymbols[393] = &emojis[1197];
-			vSymbols[394] = &emojis[1202];
-			vSymbols[395] = &emojis[1195];
-			vSymbols[396] = &emojis[1199];
-			vSymbols[397] = &emojis[1200];
-			vSymbols[398] = &emojis[1213];
-			vSymbols[399] = &emojis[1209];
-			vSymbols[400] = &emojis[1207];
-			vSymbols[401] = &emojis[1221];
-			vSymbols[402] = &emojis[1223];
-			vSymbols[403] = &emojis[1220];
-			vSymbols[404] = &emojis[1210];
-			vSymbols[405] = &emojis[1218];
-			vSymbols[406] = &emojis[1208];
-			vSymbols[407] = &emojis[1215];
-			vSymbols[408] = &emojis[1216];
-			vSymbols[409] = &emojis[1219];
-			vSymbols[410] = &emojis[1310];
-			vSymbols[411] = &emojis[1222];
-			vSymbols[412] = &emojis[1139];
-			vSymbols[413] = &emojis[1205];
-			vSymbols[414] = &emojis[1204];
-			vSymbols[415] = &emojis[1212];
-			vSymbols[416] = &emojis[1206];
-			vSymbols[417] = &emojis[1217];
-			vSymbols[418] = &emojis[1203];
-			vSymbols[419] = &emojis[1224];
-			vSymbols[420] = &emojis[1211];
-			vSymbols[421] = &emojis[1225];
-			vSymbols[422] = &emojis[1234];
-			vSymbols[423] = &emojis[1233];
-			vSymbols[424] = &emojis[1231];
-			vSymbols[425] = &emojis[1226];
-			vSymbols[426] = &emojis[1236];
-			vSymbols[427] = &emojis[1230];
-			vSymbols[428] = &emojis[1227];
-			vSymbols[429] = &emojis[1229];
-			vSymbols[430] = &emojis[1235];
-			vSymbols[431] = &emojis[1228];
-			vSymbols[432] = &emojis[1187];
-			vSymbols[433] = &emojis[1214];
-			vSymbols[434] = &emojis[1232];
-			vSymbols[435] = &emojis[1237];
-			vSymbols[436] = &emojis[1243];
-			vSymbols[437] = &emojis[1250];
-			vSymbols[438] = &emojis[1248];
-			vSymbols[439] = &emojis[1238];
-			vSymbols[440] = &emojis[1241];
-			vSymbols[441] = &emojis[1251];
-			vSymbols[442] = &emojis[1239];
-			vSymbols[443] = &emojis[1242];
-			vSymbols[444] = &emojis[1246];
-			vSymbols[445] = &emojis[1244];
-			vSymbols[446] = &emojis[1249];
-			vSymbols[447] = &emojis[1247];
-			vSymbols[448] = &emojis[1252];
-			vSymbols[449] = &emojis[1253];
-			vSymbols[450] = &emojis[1254];
-			vSymbols[451] = &emojis[1256];
-			vSymbols[452] = &emojis[1257];
-			vSymbols[453] = &emojis[1307];
-			vSymbols[454] = &emojis[1268];
-			vSymbols[455] = &emojis[1273];
-			vSymbols[456] = &emojis[1258];
-			vSymbols[457] = &emojis[1269];
-			vSymbols[458] = &emojis[1255];
-			vSymbols[459] = &emojis[1260];
-			vSymbols[460] = &emojis[1267];
-			vSymbols[461] = &emojis[1263];
-			vSymbols[462] = &emojis[1275];
-			vSymbols[463] = &emojis[1266];
-			vSymbols[464] = &emojis[1265];
-			vSymbols[465] = &emojis[1156];
-			vSymbols[466] = &emojis[1259];
-			vSymbols[467] = &emojis[1270];
-			vSymbols[468] = &emojis[1311];
-			vSymbols[469] = &emojis[1188];
-			vSymbols[470] = &emojis[1272];
-			vSymbols[471] = &emojis[1133];
-			vSymbols[472] = &emojis[1196];
-			vSymbols[473] = &emojis[1092];
-			vSymbols[474] = &emojis[1264];
-			vSymbols[475] = &emojis[1186];
-			vSymbols[476] = &emojis[1194];
-			vSymbols[477] = &emojis[1245];
-			vSymbols[478] = &emojis[1300];
-			vSymbols[479] = &emojis[1261];
-			vSymbols[480] = &emojis[1271];
-			vSymbols[481] = &emojis[1277];
-			vSymbols[482] = &emojis[1262];
-			vSymbols[483] = &emojis[1108];
-			vSymbols[484] = &emojis[1276];
-			vSymbols[485] = &emojis[1292];
-			vSymbols[486] = &emojis[1283];
-			vSymbols[487] = &emojis[1293];
-			vSymbols[488] = &emojis[1282];
-			vSymbols[489] = &emojis[1285];
-			vSymbols[490] = &emojis[1281];
-			vSymbols[491] = &emojis[1284];
-			vSymbols[492] = &emojis[1288];
-			vSymbols[493] = &emojis[1290];
-			vSymbols[494] = &emojis[1287];
-			vSymbols[495] = &emojis[1289];
-			vSymbols[496] = &emojis[1286];
-			vSymbols[497] = &emojis[1278];
-			vSymbols[498] = &emojis[1291];
-			vSymbols[499] = &emojis[1303];
-			vSymbols[500] = &emojis[1295];
-			vSymbols[501] = &emojis[1294];
-			vSymbols[502] = &emojis[1068];
-			vSymbols[503] = &emojis[1143];
-			vSymbols[504] = &emojis[1296];
-			vSymbols[505] = &emojis[1297];
-			vSymbols[506] = &emojis[1298];
-			vSymbols[507] = &emojis[1305];
-			vSymbols[508] = &emojis[1299];
-			vSymbols[509] = &emojis[1301];
-			vSymbols[510] = &emojis[1304];
-			vSymbols[511] = &emojis[1306];
-			vSymbols[512] = &emojis[1131];
-			vSymbols[513] = &emojis[1309];
-			vSymbols[514] = &emojis[1312];
-			vSymbols[515] = &emojis[1313];
-		}
-		return vSymbols;
-	} break;
-
-	};
-
-	EmojiPack result;
-	result.reserve(cGetRecentEmojis().size());
-	for (RecentEmojiPack::const_iterator i = cGetRecentEmojis().cbegin(), e = cGetRecentEmojis().cend(); i != e; ++i) {
-		result.push_back(i->first);
-	}
+template <typename ...Args>
+inline QString ComputeId(Args... args) {
+	auto result = QString();
+	result.reserve(sizeof...(args));
+	AppendChars(result, args...);
 	return result;
 }
 
+EmojiPtr FindReplace(const QChar *ch, const QChar *end, int *outLength) {
+	if (ch + 1 < end) switch (ch->unicode()) {
+	case 0x7d:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0x3a && (ch + 2)->unicode() == 0x29) {
+			if (outLength) *outLength = 3;
+			return &Items[75];
+		}
+	break;
+	case 0x78:
+		if ((ch + 1)->unicode() == 0x44) {
+			if (outLength) *outLength = 2;
+			return &Items[4];
+		}
+	break;
+	case 0x4f:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0x3a && (ch + 2)->unicode() == 0x29) {
+			if (outLength) *outLength = 3;
+			return &Items[10];
+		}
+	break;
+	case 0x42:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0x2d && (ch + 2)->unicode() == 0x29) {
+			if (outLength) *outLength = 3;
+			return &Items[27];
+		}
+	break;
+	case 0x3e:
+		if ((ch + 1)->unicode() == 0x28 && (ch + 2)->unicode() == 0x28) {
+			if (outLength) *outLength = 3;
+			return &Items[44];
+		}
+		if (outLength) *outLength = 2;
+		return &Items[43];
+	break;
+	case 0x3c:
+		if ((ch + 1)->unicode() == 0x33) {
+			if (outLength) *outLength = 2;
+			return &Items[1643];
+		}
+	break;
+	case 0x3b:
+		switch ((ch + 1)->unicode()) {
+		case 0x6f:
+			if (outLength) *outLength = 2;
+			return &Items[57];
+		break;
+		case 0x2d:
+			if (ch + 2 != end) switch ((ch + 2)->unicode()) {
+			case 0x50:
+				if (outLength) *outLength = 3;
+				return &Items[21];
+			break;
+			case 0x29:
+				if (outLength) *outLength = 3;
+				return &Items[13];
+			break;
+			}
+		break;
+		}
+	break;
+	case 0x3a:
+		switch ((ch + 1)->unicode()) {
+		case 0x7c:
+			if (outLength) *outLength = 2;
+			return &Items[46];
+		break;
+		case 0x76:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x3a) {
+				if (outLength) *outLength = 3;
+				return &Items[163];
+			}
+		break;
+		case 0x75:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0x70 && (ch + 3)->unicode() == 0x3a) {
+				if (outLength) *outLength = 4;
+				return &Items[205];
+			}
+		break;
+		case 0x6f:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0x6b && (ch + 3)->unicode() == 0x3a) {
+				if (outLength) *outLength = 4;
+				return &Items[175];
+			}
+			if (outLength) *outLength = 2;
+			return &Items[56];
+		break;
+		case 0x6c:
+			if (ch + 5 < end && (ch + 2)->unicode() == 0x69 && (ch + 3)->unicode() == 0x6b && (ch + 4)->unicode() == 0x65 && (ch + 5)->unicode() == 0x3a) {
+				if (outLength) *outLength = 6;
+				return &Items[121];
+			}
+		break;
+		case 0x6b:
+			if (ch + 5 < end && (ch + 2)->unicode() == 0x69 && (ch + 3)->unicode() == 0x73 && (ch + 4)->unicode() == 0x73 && (ch + 5)->unicode() == 0x3a) {
+				if (outLength) *outLength = 6;
+				return &Items[279];
+			}
+		break;
+		case 0x6a:
+			if (ch + 4 < end && (ch + 2)->unicode() == 0x6f && (ch + 3)->unicode() == 0x79 && (ch + 4)->unicode() == 0x3a) {
+				if (outLength) *outLength = 5;
+				return &Items[6];
+			}
+		break;
+		case 0x67:
+			if (ch + 5 < end && (ch + 2)->unicode() == 0x72 && (ch + 3)->unicode() == 0x69 && (ch + 4)->unicode() == 0x6e && (ch + 5)->unicode() == 0x3a) {
+				if (outLength) *outLength = 6;
+				return &Items[3];
+			}
+		break;
+		case 0x64:
+			if (ch + 8 < end && (ch + 2)->unicode() == 0x69 && (ch + 3)->unicode() == 0x73 && (ch + 4)->unicode() == 0x6c && (ch + 5)->unicode() == 0x69 && (ch + 6)->unicode() == 0x6b && (ch + 7)->unicode() == 0x65 && (ch + 8)->unicode() == 0x3a) {
+				if (outLength) *outLength = 9;
+				return &Items[127];
+			}
+		break;
+		case 0x5f:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x28) {
+				if (outLength) *outLength = 3;
+				return &Items[61];
+			}
+		break;
+		case 0x5d:
+			if (outLength) *outLength = 2;
+			return &Items[30];
+		break;
+		case 0x58:
+			if (outLength) *outLength = 2;
+			return &Items[72];
+		break;
+		case 0x2d:
+			if (ch + 2 != end) switch ((ch + 2)->unicode()) {
+			case 0x70:
+				if (outLength) *outLength = 3;
+				return &Items[20];
+			break;
+			case 0x44:
+				if (outLength) *outLength = 3;
+				return &Items[1];
+			break;
+			case 0x2a:
+				if (outLength) *outLength = 3;
+				return &Items[19];
+			break;
+			case 0x29:
+				if (outLength) *outLength = 3;
+				return &Items[9];
+			break;
+			case 0x28:
+				if (outLength) *outLength = 3;
+				return &Items[32];
+			break;
+			}
+		break;
+		case 0x28:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x28) {
+				if (outLength) *outLength = 3;
+				return &Items[41];
+			}
+		break;
+		case 0x27:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x28) {
+				if (outLength) *outLength = 3;
+				return &Items[58];
+			}
+		break;
+		}
+	break;
+	case 0x38:
+		switch ((ch + 1)->unicode()) {
+		case 0x7c:
+			if (outLength) *outLength = 2;
+			return &Items[54];
+		break;
+		case 0x6f:
+			if (outLength) *outLength = 2;
+			return &Items[52];
+		break;
+		case 0x2d:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x29) {
+				if (outLength) *outLength = 3;
+				return &Items[15];
+			}
+		break;
+		}
+	break;
+	case 0x33:
+		switch ((ch + 1)->unicode()) {
+		case 0x2d:
+			if (ch + 2 != end && (ch + 2)->unicode() == 0x29) {
+				if (outLength) *outLength = 3;
+				return &Items[14];
+			}
+		break;
+		case 0x28:
+			if (outLength) *outLength = 2;
+			return &Items[33];
+		break;
+		}
+	break;
+	}
+
+	return nullptr;
+}
+
+EmojiPtr Find(const QChar *ch, const QChar *end, int *outLength) {
+	switch (ch->unicode()) {
+	case 0xd83e:
+		if (ch + 1 != end) switch ((ch + 1)->unicode()) {
+		case 0xddc0:
+			if (outLength) *outLength = 2;
+			return &Items[1084];
+		break;
+		case 0xdd91:
+			if (outLength) *outLength = 2;
+			return &Items[944];
+		break;
+		case 0xdd90:
+			if (outLength) *outLength = 2;
+			return &Items[946];
+		break;
+		case 0xdd8f:
+			if (outLength) *outLength = 2;
+			return &Items[964];
+		break;
+		case 0xdd8e:
+			if (outLength) *outLength = 2;
+			return &Items[941];
+		break;
+		case 0xdd8d:
+			if (outLength) *outLength = 2;
+			return &Items[965];
+		break;
+		case 0xdd8c:
+			if (outLength) *outLength = 2;
+			return &Items[960];
+		break;
+		case 0xdd8b:
+			if (outLength) *outLength = 2;
+			return &Items[932];
+		break;
+		case 0xdd8a:
+			if (outLength) *outLength = 2;
+			return &Items[901];
+		break;
+		case 0xdd89:
+			if (outLength) *outLength = 2;
+			return &Items[924];
+		break;
+		case 0xdd88:
+			if (outLength) *outLength = 2;
+			return &Items[951];
+		break;
+		case 0xdd87:
+			if (outLength) *outLength = 2;
+			return &Items[925];
+		break;
+		case 0xdd86:
+			if (outLength) *outLength = 2;
+			return &Items[922];
+		break;
+		case 0xdd85:
+			if (outLength) *outLength = 2;
+			return &Items[923];
+		break;
+		case 0xdd84:
+			if (outLength) *outLength = 2;
+			return &Items[929];
+		break;
+		case 0xdd83:
+			if (outLength) *outLength = 2;
+			return &Items[975];
+		break;
+		case 0xdd82:
+			if (outLength) *outLength = 2;
+			return &Items[942];
+		break;
+		case 0xdd81:
+			if (outLength) *outLength = 2;
+			return &Items[906];
+		break;
+		case 0xdd80:
+			if (outLength) *outLength = 2;
+			return &Items[943];
+		break;
+		case 0xdd5e:
+			if (outLength) *outLength = 2;
+			return &Items[1088];
+		break;
+		case 0xdd5d:
+			if (outLength) *outLength = 2;
+			return &Items[1068];
+		break;
+		case 0xdd5c:
+			if (outLength) *outLength = 2;
+			return &Items[1079];
+		break;
+		case 0xdd5b:
+			if (outLength) *outLength = 2;
+			return &Items[1125];
+		break;
+		case 0xdd5a:
+			if (outLength) *outLength = 2;
+			return &Items[1085];
+		break;
+		case 0xdd59:
+			if (outLength) *outLength = 2;
+			return &Items[1096];
+		break;
+		case 0xdd58:
+			if (outLength) *outLength = 2;
+			return &Items[1100];
+		break;
+		case 0xdd57:
+			if (outLength) *outLength = 2;
+			return &Items[1099];
+		break;
+		case 0xdd56:
+			if (outLength) *outLength = 2;
+			return &Items[1083];
+		break;
+		case 0xdd55:
+			if (outLength) *outLength = 2;
+			return &Items[1073];
+		break;
+		case 0xdd54:
+			if (outLength) *outLength = 2;
+			return &Items[1076];
+		break;
+		case 0xdd53:
+			if (outLength) *outLength = 2;
+			return &Items[1087];
+		break;
+		case 0xdd52:
+			if (outLength) *outLength = 2;
+			return &Items[1072];
+		break;
+		case 0xdd51:
+			if (outLength) *outLength = 2;
+			return &Items[1069];
+		break;
+		case 0xdd50:
+			if (outLength) *outLength = 2;
+			return &Items[1081];
+		break;
+		case 0xdd4b:
+			if (outLength) *outLength = 2;
+			return &Items[1159];
+		break;
+		case 0xdd4a:
+			if (outLength) *outLength = 2;
+			return &Items[1158];
+		break;
+		case 0xdd49:
+			if (outLength) *outLength = 2;
+			return &Items[1310];
+		break;
+		case 0xdd48:
+			if (outLength) *outLength = 2;
+			return &Items[1309];
+		break;
+		case 0xdd47:
+			if (outLength) *outLength = 2;
+			return &Items[1308];
+		break;
+		case 0xdd45:
+			if (outLength) *outLength = 2;
+			return &Items[1151];
+		break;
+		case 0xdd44:
+			if (outLength) *outLength = 2;
+			return &Items[1138];
+		break;
+		case 0xdd43:
+			if (outLength) *outLength = 2;
+			return &Items[1134];
+		break;
+		case 0xdd42:
+			if (outLength) *outLength = 2;
+			return &Items[1132];
+		break;
+		case 0xdd41:
+			if (outLength) *outLength = 2;
+			return &Items[1336];
+		break;
+		case 0xdd40:
+			if (outLength) *outLength = 2;
+			return &Items[1003];
+		break;
+		case 0xdd3e:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1214];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1208];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1213];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1207];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1212];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1206];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1211];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1205];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1210];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1204];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1209];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1203];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd3d:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1262];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1256];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1261];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1255];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1260];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1254];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1259];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1253];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1258];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1252];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1257];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1251];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd3c:
+			if (ch + 4 < end && (ch + 2)->unicode() == 0x200d) {
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1178];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1177];
+					}
+				break;
+				}
+			}
+		break;
+		case 0xdd3a:
+			if (outLength) *outLength = 2;
+			return &Items[1176];
+		break;
+		case 0xdd39:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1328];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1322];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1327];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1321];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1326];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1320];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1325];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1319];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1324];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1318];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1323];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1317];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd38:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1190];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1184];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1189];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1183];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1188];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1182];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1187];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1181];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1186];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[1180];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1185];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[1179];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd37:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[743];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[737];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[742];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[736];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[741];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[735];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[740];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[734];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[739];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[733];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[738];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[732];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd36:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[617];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[616];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[615];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[614];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[613];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[612];
+		break;
+		case 0xdd35:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[647];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[646];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[645];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[644];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[643];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[642];
+		break;
+		case 0xdd34:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[635];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[634];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[633];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[632];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[631];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[630];
+		break;
+		case 0xdd33:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[270];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[269];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[268];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[267];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[266];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[265];
+		break;
+		case 0xdd30:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[659];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[658];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[657];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[656];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[655];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[654];
+		break;
+		case 0xdd27:
+			if (outLength) *outLength = 2;
+			return &Items[71];
+		break;
+		case 0xdd26:
+			if (ch + 4 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				if (ch + 6 < end) switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[731];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[725];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffe:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[730];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[724];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffd:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[729];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[723];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffc:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[728];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[722];
+							}
+						break;
+						}
+					}
+				break;
+				case 0xdffb:
+					if ((ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0x2642:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[727];
+							}
+						break;
+						case 0x2640:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[721];
+							}
+						break;
+						}
+					}
+				break;
+				}
+			break;
+			case 0x200d:
+				switch ((ch + 3)->unicode()) {
+				case 0x2642:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[726];
+					}
+				break;
+				case 0x2640:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[720];
+					}
+				break;
+				}
+			break;
+			}
+		break;
+		case 0xdd25:
+			if (outLength) *outLength = 2;
+			return &Items[67];
+		break;
+		case 0xdd24:
+			if (outLength) *outLength = 2;
+			return &Items[60];
+		break;
+		case 0xdd23:
+			if (outLength) *outLength = 2;
+			return &Items[7];
+		break;
+		case 0xdd22:
+			if (outLength) *outLength = 2;
+			return &Items[70];
+		break;
+		case 0xdd21:
+			if (outLength) *outLength = 2;
+			return &Items[28];
+		break;
+		case 0xdd20:
+			if (outLength) *outLength = 2;
+			return &Items[29];
+		break;
+		case 0xdd1e:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[162];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[161];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[160];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[159];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[158];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[157];
+		break;
+		case 0xdd1d:
+			if (outLength) *outLength = 2;
+			return &Items[120];
+		break;
+		case 0xdd1c:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[156];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[155];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[154];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[153];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[152];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[151];
+		break;
+		case 0xdd1b:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[150];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[149];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[148];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[147];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[146];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[145];
+		break;
+		case 0xdd1a:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[222];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[221];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[220];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[219];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[218];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[217];
+		break;
+		case 0xdd19:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[246];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[245];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[244];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[243];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[242];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[241];
+		break;
+		case 0xdd18:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[174];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[173];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[172];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[171];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[170];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[169];
+		break;
+		case 0xdd17:
+			if (outLength) *outLength = 2;
+			return &Items[25];
+		break;
+		case 0xdd16:
+			if (outLength) *outLength = 2;
+			return &Items[85];
+		break;
+		case 0xdd15:
+			if (outLength) *outLength = 2;
+			return &Items[74];
+		break;
+		case 0xdd14:
+			if (outLength) *outLength = 2;
+			return &Items[66];
+		break;
+		case 0xdd13:
+			if (outLength) *outLength = 2;
+			return &Items[26];
+		break;
+		case 0xdd12:
+			if (outLength) *outLength = 2;
+			return &Items[73];
+		break;
+		case 0xdd11:
+			if (outLength) *outLength = 2;
+			return &Items[24];
+		break;
+		case 0xdd10:
+			if (outLength) *outLength = 2;
+			return &Items[69];
+		break;
+		}
+	break;
+	case 0xd83d:
+		if (ch + 1 != end) switch ((ch + 1)->unicode()) {
+		case 0xdef6:
+			if (outLength) *outLength = 2;
+			return &Items[1391];
+		break;
+		case 0xdef5:
+			if (outLength) *outLength = 2;
+			return &Items[1361];
+		break;
+		case 0xdef4:
+			if (outLength) *outLength = 2;
+			return &Items[1359];
+		break;
+		case 0xdef3:
+			if (outLength) *outLength = 2;
+			return &Items[1395];
+		break;
+		case 0xdef0:
+			if (outLength) *outLength = 2;
+			return &Items[1389];
+		break;
+		case 0xdeec:
+			if (outLength) *outLength = 2;
+			return &Items[1387];
+		break;
+		case 0xdeeb:
+			if (outLength) *outLength = 2;
+			return &Items[1386];
+		break;
+		case 0xdee9:
+			if (outLength) *outLength = 2;
+			return &Items[1384];
+		break;
+		case 0xdee5:
+			if (outLength) *outLength = 2;
+			return &Items[1393];
+		break;
+		case 0xdee4:
+			if (outLength) *outLength = 2;
+			return &Items[1425];
+		break;
+		case 0xdee3:
+			if (outLength) *outLength = 2;
+			return &Items[1426];
+		break;
+		case 0xdee2:
+			if (outLength) *outLength = 2;
+			return &Items[1509];
+		break;
+		case 0xdee1:
+			if (outLength) *outLength = 2;
+			return &Items[1532];
+		break;
+		case 0xdee0:
+			if (outLength) *outLength = 2;
+			return &Items[1522];
+		break;
+		case 0xded2:
+			if (outLength) *outLength = 2;
+			return &Items[1566];
+		break;
+		case 0xded1:
+			if (outLength) *outLength = 2;
+			return &Items[1713];
+		break;
+		case 0xded0:
+			if (outLength) *outLength = 2;
+			return &Items[1669];
+		break;
+		case 0xdecf:
+			if (outLength) *outLength = 2;
+			return &Items[1562];
+		break;
+		case 0xdece:
+			if (outLength) *outLength = 2;
+			return &Items[1557];
+		break;
+		case 0xdecd:
+			if (outLength) *outLength = 2;
+			return &Items[1565];
+		break;
+		case 0xdecc:
+			if (outLength) *outLength = 2;
+			return &Items[1563];
+		break;
+		case 0xdecb:
+			if (outLength) *outLength = 2;
+			return &Items[1561];
+		break;
+		case 0xdec5:
+			if (outLength) *outLength = 2;
+			return &Items[1762];
+		break;
+		case 0xdec4:
+			if (outLength) *outLength = 2;
+			return &Items[1761];
+		break;
+		case 0xdec3:
+			if (outLength) *outLength = 2;
+			return &Items[1760];
+		break;
+		case 0xdec2:
+			if (outLength) *outLength = 2;
+			return &Items[1759];
+		break;
+		case 0xdec1:
+			if (outLength) *outLength = 2;
+			return &Items[1550];
+		break;
+		case 0xdec0:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[1556];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[1555];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[1554];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[1553];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[1552];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1551];
+		break;
+		case 0xdebf:
+			if (outLength) *outLength = 2;
+			return &Items[1549];
+		break;
+		case 0xdebe:
+			if (outLength) *outLength = 2;
+			return &Items[1754];
+		break;
+		case 0xdebd:
+			if (outLength) *outLength = 2;
+			return &Items[1547];
+		break;
+		case 0xdebc:
+			if (outLength) *outLength = 2;
+			return &Items[1765];
+		break;
+		case 0xdebb:
+			if (outLength) *outLength = 2;
+			return &Items[1766];
+		break;
+		case 0xdeba:
+			if (outLength) *outLength = 2;
+			return &Items[1764];
+		break;
+		case 0xdeb9:
+			if (outLength) *outLength = 2;
+			return &Items[1763];
+		break;
+		case 0xdeb8:
+			if (outLength) *outLength = 2;
+			return &Items[1737];
+		break;
+		case 0xdeb7:
+			if (outLength) *outLength = 2;
+			return &Items[1720];
+		break;
+		case 0xdeb6:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[817];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[823];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[816];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[822];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[815];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[821];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[814];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[820];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[813];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[819];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[812];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[818];
+		break;
+		case 0xdeb5:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1298];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1304];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1297];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1303];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1296];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1302];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1295];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1301];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1294];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1300];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[1293];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1299];
+		break;
+		case 0xdeb4:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1286];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1292];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1285];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1291];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1284];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1290];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1283];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1289];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1282];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1288];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[1281];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1287];
+		break;
+		case 0xdeb3:
+			if (outLength) *outLength = 2;
+			return &Items[1722];
+		break;
+		case 0xdeb2:
+			if (outLength) *outLength = 2;
+			return &Items[1360];
+		break;
+		case 0xdeb1:
+			if (outLength) *outLength = 2;
+			return &Items[1723];
+		break;
+		case 0xdeb0:
+			if (outLength) *outLength = 2;
+			return &Items[1548];
+		break;
+		case 0xdeaf:
+			if (outLength) *outLength = 2;
+			return &Items[1721];
+		break;
+		case 0xdeae:
+			if (outLength) *outLength = 2;
+			return &Items[1767];
+		break;
+		case 0xdead:
+			if (outLength) *outLength = 2;
+			return &Items[1726];
+		break;
+		case 0xdeac:
+			if (outLength) *outLength = 2;
+			return &Items[1533];
+		break;
+		case 0xdeab:
+			if (outLength) *outLength = 2;
+			return &Items[1716];
+		break;
+		case 0xdeaa:
+			if (outLength) *outLength = 2;
+			return &Items[1560];
+		break;
+		case 0xdea9:
+			if (outLength) *outLength = 2;
+			return &Items[1917];
+		break;
+		case 0xdea8:
+			if (outLength) *outLength = 2;
+			return &Items[1363];
+		break;
+		case 0xdea7:
+			if (outLength) *outLength = 2;
+			return &Items[1399];
+		break;
+		case 0xdea6:
+			if (outLength) *outLength = 2;
+			return &Items[1402];
+		break;
+		case 0xdea5:
+			if (outLength) *outLength = 2;
+			return &Items[1403];
+		break;
+		case 0xdea4:
+			if (outLength) *outLength = 2;
+			return &Items[1394];
+		break;
+		case 0xdea3:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1268];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1274];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1267];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1273];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1266];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1272];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1265];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1271];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1264];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1270];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[1263];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1269];
+		break;
+		case 0xdea2:
+			if (outLength) *outLength = 2;
+			return &Items[1397];
+		break;
+		case 0xdea1:
+			if (outLength) *outLength = 2;
+			return &Items[1368];
+		break;
+		case 0xdea0:
+			if (outLength) *outLength = 2;
+			return &Items[1369];
+		break;
+		case 0xde9f:
+			if (outLength) *outLength = 2;
+			return &Items[1370];
+		break;
+		case 0xde9e:
+			if (outLength) *outLength = 2;
+			return &Items[1373];
+		break;
+		case 0xde9d:
+			if (outLength) *outLength = 2;
+			return &Items[1374];
+		break;
+		case 0xde9c:
+			if (outLength) *outLength = 2;
+			return &Items[1358];
+		break;
+		case 0xde9b:
+			if (outLength) *outLength = 2;
+			return &Items[1357];
+		break;
+		case 0xde9a:
+			if (outLength) *outLength = 2;
+			return &Items[1356];
+		break;
+		case 0xde99:
+			if (outLength) *outLength = 2;
+			return &Items[1348];
+		break;
+		case 0xde98:
+			if (outLength) *outLength = 2;
+			return &Items[1366];
+		break;
+		case 0xde97:
+			if (outLength) *outLength = 2;
+			return &Items[1346];
+		break;
+		case 0xde96:
+			if (outLength) *outLength = 2;
+			return &Items[1367];
+		break;
+		case 0xde95:
+			if (outLength) *outLength = 2;
+			return &Items[1347];
+		break;
+		case 0xde94:
+			if (outLength) *outLength = 2;
+			return &Items[1364];
+		break;
+		case 0xde93:
+			if (outLength) *outLength = 2;
+			return &Items[1352];
+		break;
+		case 0xde92:
+			if (outLength) *outLength = 2;
+			return &Items[1354];
+		break;
+		case 0xde91:
+			if (outLength) *outLength = 2;
+			return &Items[1353];
+		break;
+		case 0xde90:
+			if (outLength) *outLength = 2;
+			return &Items[1355];
+		break;
+		case 0xde8f:
+			if (outLength) *outLength = 2;
+			return &Items[1401];
+		break;
+		case 0xde8e:
+			if (outLength) *outLength = 2;
+			return &Items[1350];
+		break;
+		case 0xde8d:
+			if (outLength) *outLength = 2;
+			return &Items[1365];
+		break;
+		case 0xde8c:
+			if (outLength) *outLength = 2;
+			return &Items[1349];
+		break;
+		case 0xde8b:
+			if (outLength) *outLength = 2;
+			return &Items[1372];
+		break;
+		case 0xde8a:
+			if (outLength) *outLength = 2;
+			return &Items[1381];
+		break;
+		case 0xde89:
+			if (outLength) *outLength = 2;
+			return &Items[1382];
+		break;
+		case 0xde88:
+			if (outLength) *outLength = 2;
+			return &Items[1377];
+		break;
+		case 0xde87:
+			if (outLength) *outLength = 2;
+			return &Items[1380];
+		break;
+		case 0xde86:
+			if (outLength) *outLength = 2;
+			return &Items[1379];
+		break;
+		case 0xde85:
+			if (outLength) *outLength = 2;
+			return &Items[1376];
+		break;
+		case 0xde84:
+			if (outLength) *outLength = 2;
+			return &Items[1375];
+		break;
+		case 0xde83:
+			if (outLength) *outLength = 2;
+			return &Items[1371];
+		break;
+		case 0xde82:
+			if (outLength) *outLength = 2;
+			return &Items[1378];
+		break;
+		case 0xde81:
+			if (outLength) *outLength = 2;
+			return &Items[1383];
+		break;
+		case 0xde80:
+			if (outLength) *outLength = 2;
+			return &Items[1388];
+		break;
+		case 0xde4f:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[119];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[118];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[117];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[116];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[115];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[114];
+		break;
+		case 0xde4e:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[755];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[749];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[754];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[748];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[753];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[747];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[752];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[746];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[751];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[745];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[750];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[744];
+		break;
+		case 0xde4d:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[767];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[761];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[766];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[760];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[765];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[759];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[764];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[758];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[763];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[757];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[762];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[756];
+		break;
+		case 0xde4c:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[107];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[106];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[105];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[104];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[103];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[102];
+		break;
+		case 0xde4b:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[719];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[713];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[718];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[712];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[717];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[711];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[716];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[710];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[715];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[709];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[714];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[708];
+		break;
+		case 0xde4a:
+			if (outLength) *outLength = 2;
+			return &Items[914];
+		break;
+		case 0xde49:
+			if (outLength) *outLength = 2;
+			return &Items[913];
+		break;
+		case 0xde48:
+			if (outLength) *outLength = 2;
+			return &Items[912];
+		break;
+		case 0xde47:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[665];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[671];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[664];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[670];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[663];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[669];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[662];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[668];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[661];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[667];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[660];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[666];
+		break;
+		case 0xde46:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[707];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[701];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[706];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[700];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[705];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[699];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[704];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[698];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[703];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[697];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[702];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[696];
+		break;
+		case 0xde45:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[695];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[689];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[694];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[688];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[693];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[687];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[692];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[686];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[691];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[685];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[690];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[684];
+		break;
+		case 0xde44:
+			if (outLength) *outLength = 2;
+			return &Items[65];
+		break;
+		case 0xde43:
+			if (outLength) *outLength = 2;
+			return &Items[12];
+		break;
+		case 0xde42:
+			if (outLength) *outLength = 2;
+			return &Items[11];
+		break;
+		case 0xde41:
+			if (outLength) *outLength = 2;
+			return &Items[36];
+		break;
+		case 0xde40:
+			if (outLength) *outLength = 2;
+			return &Items[93];
+		break;
+		case 0xde3f:
+			if (outLength) *outLength = 2;
+			return &Items[94];
+		break;
+		case 0xde3e:
+			if (outLength) *outLength = 2;
+			return &Items[95];
+		break;
+		case 0xde3d:
+			if (outLength) *outLength = 2;
+			return &Items[92];
+		break;
+		case 0xde3c:
+			if (outLength) *outLength = 2;
+			return &Items[91];
+		break;
+		case 0xde3b:
+			if (outLength) *outLength = 2;
+			return &Items[90];
+		break;
+		case 0xde3a:
+			if (outLength) *outLength = 2;
+			return &Items[87];
+		break;
+		case 0xde39:
+			if (outLength) *outLength = 2;
+			return &Items[89];
+		break;
+		case 0xde38:
+			if (outLength) *outLength = 2;
+			return &Items[88];
+		break;
+		case 0xde37:
+			if (outLength) *outLength = 2;
+			return &Items[72];
+		break;
+		case 0xde36:
+			if (outLength) *outLength = 2;
+			return &Items[45];
+		break;
+		case 0xde35:
+			if (outLength) *outLength = 2;
+			return &Items[53];
+		break;
+		case 0xde34:
+			if (outLength) *outLength = 2;
+			return &Items[64];
+		break;
+		case 0xde33:
+			if (outLength) *outLength = 2;
+			return &Items[54];
+		break;
+		case 0xde32:
+			if (outLength) *outLength = 2;
+			return &Items[52];
+		break;
+		case 0xde31:
+			if (outLength) *outLength = 2;
+			return &Items[55];
+		break;
+		case 0xde30:
+			if (outLength) *outLength = 2;
+			return &Items[57];
+		break;
+		case 0xde2f:
+			if (outLength) *outLength = 2;
+			return &Items[48];
+		break;
+		case 0xde2e:
+			if (outLength) *outLength = 2;
+			return &Items[51];
+		break;
+		case 0xde2d:
+			if (outLength) *outLength = 2;
+			return &Items[61];
+		break;
+		case 0xde2c:
+			if (outLength) *outLength = 2;
+			return &Items[68];
+		break;
+		case 0xde2b:
+			if (outLength) *outLength = 2;
+			return &Items[40];
+		break;
+		case 0xde2a:
+			if (outLength) *outLength = 2;
+			return &Items[63];
+		break;
+		case 0xde29:
+			if (outLength) *outLength = 2;
+			return &Items[41];
+		break;
+		case 0xde28:
+			if (outLength) *outLength = 2;
+			return &Items[56];
+		break;
+		case 0xde27:
+			if (outLength) *outLength = 2;
+			return &Items[50];
+		break;
+		case 0xde26:
+			if (outLength) *outLength = 2;
+			return &Items[49];
+		break;
+		case 0xde25:
+			if (outLength) *outLength = 2;
+			return &Items[59];
+		break;
+		case 0xde24:
+			if (outLength) *outLength = 2;
+			return &Items[42];
+		break;
+		case 0xde23:
+			if (outLength) *outLength = 2;
+			return &Items[38];
+		break;
+		case 0xde22:
+			if (outLength) *outLength = 2;
+			return &Items[58];
+		break;
+		case 0xde21:
+			if (outLength) *outLength = 2;
+			return &Items[44];
+		break;
+		case 0xde20:
+			if (outLength) *outLength = 2;
+			return &Items[43];
+		break;
+		case 0xde1f:
+			if (outLength) *outLength = 2;
+			return &Items[34];
+		break;
+		case 0xde1e:
+			if (outLength) *outLength = 2;
+			return &Items[32];
+		break;
+		case 0xde1d:
+			if (outLength) *outLength = 2;
+			return &Items[22];
+		break;
+		case 0xde1c:
+			if (outLength) *outLength = 2;
+			return &Items[21];
+		break;
+		case 0xde1b:
+			if (outLength) *outLength = 2;
+			return &Items[23];
+		break;
+		case 0xde1a:
+			if (outLength) *outLength = 2;
+			return &Items[19];
+		break;
+		case 0xde19:
+			if (outLength) *outLength = 2;
+			return &Items[18];
+		break;
+		case 0xde18:
+			if (outLength) *outLength = 2;
+			return &Items[16];
+		break;
+		case 0xde17:
+			if (outLength) *outLength = 2;
+			return &Items[17];
+		break;
+		case 0xde16:
+			if (outLength) *outLength = 2;
+			return &Items[39];
+		break;
+		case 0xde15:
+			if (outLength) *outLength = 2;
+			return &Items[35];
+		break;
+		case 0xde14:
+			if (outLength) *outLength = 2;
+			return &Items[33];
+		break;
+		case 0xde13:
+			if (outLength) *outLength = 2;
+			return &Items[62];
+		break;
+		case 0xde12:
+			if (outLength) *outLength = 2;
+			return &Items[31];
+		break;
+		case 0xde11:
+			if (outLength) *outLength = 2;
+			return &Items[47];
+		break;
+		case 0xde10:
+			if (outLength) *outLength = 2;
+			return &Items[46];
+		break;
+		case 0xde0f:
+			if (outLength) *outLength = 2;
+			return &Items[30];
+		break;
+		case 0xde0e:
+			if (outLength) *outLength = 2;
+			return &Items[27];
+		break;
+		case 0xde0d:
+			if (outLength) *outLength = 2;
+			return &Items[15];
+		break;
+		case 0xde0c:
+			if (outLength) *outLength = 2;
+			return &Items[14];
+		break;
+		case 0xde0b:
+			if (outLength) *outLength = 2;
+			return &Items[20];
+		break;
+		case 0xde0a:
+			if (outLength) *outLength = 2;
+			return &Items[9];
+		break;
+		case 0xde09:
+			if (outLength) *outLength = 2;
+			return &Items[13];
+		break;
+		case 0xde08:
+			if (outLength) *outLength = 2;
+			return &Items[75];
+		break;
+		case 0xde07:
+			if (outLength) *outLength = 2;
+			return &Items[10];
+		break;
+		case 0xde06:
+			if (outLength) *outLength = 2;
+			return &Items[4];
+		break;
+		case 0xde05:
+			if (outLength) *outLength = 2;
+			return &Items[5];
+		break;
+		case 0xde04:
+			if (outLength) *outLength = 2;
+			return &Items[2];
+		break;
+		case 0xde03:
+			if (outLength) *outLength = 2;
+			return &Items[1];
+		break;
+		case 0xde02:
+			if (outLength) *outLength = 2;
+			return &Items[6];
+		break;
+		case 0xde01:
+			if (outLength) *outLength = 2;
+			return &Items[3];
+		break;
+		case 0xde00:
+			if (outLength) *outLength = 2;
+			return &Items[0];
+		break;
+		case 0xddff:
+			if (outLength) *outLength = 2;
+			return &Items[1405];
+		break;
+		case 0xddfe:
+			if (outLength) *outLength = 2;
+			return &Items[1450];
+		break;
+		case 0xddfd:
+			if (outLength) *outLength = 2;
+			return &Items[1406];
+		break;
+		case 0xddfc:
+			if (outLength) *outLength = 2;
+			return &Items[1408];
+		break;
+		case 0xddfb:
+			if (outLength) *outLength = 2;
+			return &Items[1420];
+		break;
+		case 0xddfa:
+			if (outLength) *outLength = 2;
+			return &Items[1404];
+		break;
+		case 0xddf3:
+			if (outLength) *outLength = 2;
+			return &Items[1604];
+		break;
+		case 0xddef:
+			if (outLength) *outLength = 2;
+			return &Items[1882];
+		break;
+		case 0xdde3:
+			if (outLength) *outLength = 2;
+			return &Items[297];
+		break;
+		case 0xdde1:
+			if (outLength) *outLength = 2;
+			return &Items[1530];
+		break;
+		case 0xddde:
+			if (outLength) *outLength = 2;
+			return &Items[1610];
+		break;
+		case 0xdddd:
+			if (outLength) *outLength = 2;
+			return &Items[1559];
+		break;
+		case 0xdddc:
+			if (outLength) *outLength = 2;
+			return &Items[1475];
+		break;
+		case 0xddd3:
+			if (outLength) *outLength = 2;
+			return &Items[1599];
+		break;
+		case 0xddd2:
+			if (outLength) *outLength = 2;
+			return &Items[1598];
+		break;
+		case 0xddd1:
+			if (outLength) *outLength = 2;
+			return &Items[1508];
+		break;
+		case 0xddc4:
+			if (outLength) *outLength = 2;
+			return &Items[1605];
+		break;
+		case 0xddc3:
+			if (outLength) *outLength = 2;
+			return &Items[1603];
+		break;
+		case 0xddc2:
+			if (outLength) *outLength = 2;
+			return &Items[1609];
+		break;
+		case 0xddbc:
+			if (outLength) *outLength = 2;
+			return &Items[1564];
+		break;
+		case 0xddb2:
+			if (outLength) *outLength = 2;
+			return &Items[1473];
+		break;
+		case 0xddb1:
+			if (outLength) *outLength = 2;
+			return &Items[1472];
+		break;
+		case 0xdda8:
+			if (outLength) *outLength = 2;
+			return &Items[1471];
+		break;
+		case 0xdda5:
+			if (outLength) *outLength = 2;
+			return &Items[1470];
+		break;
+		case 0xdda4:
+			if (outLength) *outLength = 2;
+			return &Items[1648];
+		break;
+		case 0xdd96:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[234];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[233];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[232];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[231];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[230];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[229];
+		break;
+		case 0xdd95:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[258];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[257];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[256];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[255];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[254];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[253];
+		break;
+		case 0xdd90:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[228];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[227];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[226];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[225];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[224];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[223];
+		break;
+		case 0xdd8d:
+			if (outLength) *outLength = 2;
+			return &Items[1634];
+		break;
+		case 0xdd8c:
+			if (outLength) *outLength = 2;
+			return &Items[1633];
+		break;
+		case 0xdd8b:
+			if (outLength) *outLength = 2;
+			return &Items[1631];
+		break;
+		case 0xdd8a:
+			if (outLength) *outLength = 2;
+			return &Items[1630];
+		break;
+		case 0xdd87:
+			if (outLength) *outLength = 2;
+			return &Items[1624];
+		break;
+		case 0xdd7a:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[809];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[808];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[807];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[806];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[805];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[804];
+		break;
+		case 0xdd79:
+			if (outLength) *outLength = 2;
+			return &Items[1474];
+		break;
+		case 0xdd78:
+			if (outLength) *outLength = 2;
+			return &Items[938];
+		break;
+		case 0xdd77:
+			if (outLength) *outLength = 2;
+			return &Items[937];
+		break;
+		case 0xdd76:
+			if (outLength) *outLength = 2;
+			return &Items[893];
+		break;
+		case 0xdd75:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xfe0f:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[408];
+				}
+			break;
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[413];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[419];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[412];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[418];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[411];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[417];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[410];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[416];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[409];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[415];
+				break;
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[414];
+		break;
+		case 0xdd74:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[797];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[796];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[795];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[794];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[793];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[792];
+		break;
+		case 0xdd73:
+			if (outLength) *outLength = 2;
+			return &Items[1543];
+		break;
+		case 0xdd70:
+			if (outLength) *outLength = 2;
+			return &Items[1499];
+		break;
+		case 0xdd6f:
+			if (outLength) *outLength = 2;
+			return &Items[1507];
+		break;
+		case 0xdd67:
+			if (outLength) *outLength = 2;
+			return &Items[1913];
+		break;
+		case 0xdd66:
+			if (outLength) *outLength = 2;
+			return &Items[1912];
+		break;
+		case 0xdd65:
+			if (outLength) *outLength = 2;
+			return &Items[1911];
+		break;
+		case 0xdd64:
+			if (outLength) *outLength = 2;
+			return &Items[1910];
+		break;
+		case 0xdd63:
+			if (outLength) *outLength = 2;
+			return &Items[1909];
+		break;
+		case 0xdd62:
+			if (outLength) *outLength = 2;
+			return &Items[1908];
+		break;
+		case 0xdd61:
+			if (outLength) *outLength = 2;
+			return &Items[1907];
+		break;
+		case 0xdd60:
+			if (outLength) *outLength = 2;
+			return &Items[1906];
+		break;
+		case 0xdd5f:
+			if (outLength) *outLength = 2;
+			return &Items[1905];
+		break;
+		case 0xdd5e:
+			if (outLength) *outLength = 2;
+			return &Items[1904];
+		break;
+		case 0xdd5d:
+			if (outLength) *outLength = 2;
+			return &Items[1903];
+		break;
+		case 0xdd5c:
+			if (outLength) *outLength = 2;
+			return &Items[1902];
+		break;
+		case 0xdd5b:
+			if (outLength) *outLength = 2;
+			return &Items[1901];
+		break;
+		case 0xdd5a:
+			if (outLength) *outLength = 2;
+			return &Items[1900];
+		break;
+		case 0xdd59:
+			if (outLength) *outLength = 2;
+			return &Items[1899];
+		break;
+		case 0xdd58:
+			if (outLength) *outLength = 2;
+			return &Items[1898];
+		break;
+		case 0xdd57:
+			if (outLength) *outLength = 2;
+			return &Items[1897];
+		break;
+		case 0xdd56:
+			if (outLength) *outLength = 2;
+			return &Items[1896];
+		break;
+		case 0xdd55:
+			if (outLength) *outLength = 2;
+			return &Items[1895];
+		break;
+		case 0xdd54:
+			if (outLength) *outLength = 2;
+			return &Items[1894];
+		break;
+		case 0xdd53:
+			if (outLength) *outLength = 2;
+			return &Items[1893];
+		break;
+		case 0xdd52:
+			if (outLength) *outLength = 2;
+			return &Items[1892];
+		break;
+		case 0xdd51:
+			if (outLength) *outLength = 2;
+			return &Items[1891];
+		break;
+		case 0xdd50:
+			if (outLength) *outLength = 2;
+			return &Items[1890];
+		break;
+		case 0xdd4e:
+			if (outLength) *outLength = 2;
+			return &Items[1666];
+		break;
+		case 0xdd4d:
+			if (outLength) *outLength = 2;
+			return &Items[1447];
+		break;
+		case 0xdd4c:
+			if (outLength) *outLength = 2;
+			return &Items[1446];
+		break;
+		case 0xdd4b:
+			if (outLength) *outLength = 2;
+			return &Items[1448];
+		break;
+		case 0xdd4a:
+			if (outLength) *outLength = 2;
+			return &Items[976];
+		break;
+		case 0xdd49:
+			if (outLength) *outLength = 2;
+			return &Items[1662];
+		break;
+		case 0xdd3d:
+			if (outLength) *outLength = 2;
+			return &Items[1809];
+		break;
+		case 0xdd3c:
+			if (outLength) *outLength = 2;
+			return &Items[1808];
+		break;
+		case 0xdd3b:
+			if (outLength) *outLength = 2;
+			return &Items[1856];
+		break;
+		case 0xdd3a:
+			if (outLength) *outLength = 2;
+			return &Items[1855];
+		break;
+		case 0xdd39:
+			if (outLength) *outLength = 2;
+			return &Items[1858];
+		break;
+		case 0xdd38:
+			if (outLength) *outLength = 2;
+			return &Items[1857];
+		break;
+		case 0xdd37:
+			if (outLength) *outLength = 2;
+			return &Items[1860];
+		break;
+		case 0xdd36:
+			if (outLength) *outLength = 2;
+			return &Items[1859];
+		break;
+		case 0xdd35:
+			if (outLength) *outLength = 2;
+			return &Items[1854];
+		break;
+		case 0xdd34:
+			if (outLength) *outLength = 2;
+			return &Items[1853];
+		break;
+		case 0xdd33:
+			if (outLength) *outLength = 2;
+			return &Items[1861];
+		break;
+		case 0xdd32:
+			if (outLength) *outLength = 2;
+			return &Items[1862];
+		break;
+		case 0xdd31:
+			if (outLength) *outLength = 2;
+			return &Items[1738];
+		break;
+		case 0xdd30:
+			if (outLength) *outLength = 2;
+			return &Items[1740];
+		break;
+		case 0xdd2f:
+			if (outLength) *outLength = 2;
+			return &Items[1665];
+		break;
+		case 0xdd2e:
+			if (outLength) *outLength = 2;
+			return &Items[1537];
+		break;
+		case 0xdd2d:
+			if (outLength) *outLength = 2;
+			return &Items[1541];
+		break;
+		case 0xdd2c:
+			if (outLength) *outLength = 2;
+			return &Items[1542];
+		break;
+		case 0xdd2b:
+			if (outLength) *outLength = 2;
+			return &Items[1527];
+		break;
+		case 0xdd2a:
+			if (outLength) *outLength = 2;
+			return &Items[1529];
+		break;
+		case 0xdd29:
+			if (outLength) *outLength = 2;
+			return &Items[1524];
+		break;
+		case 0xdd28:
+			if (outLength) *outLength = 2;
+			return &Items[1520];
+		break;
+		case 0xdd27:
+			if (outLength) *outLength = 2;
+			return &Items[1519];
+		break;
+		case 0xdd26:
+			if (outLength) *outLength = 2;
+			return &Items[1506];
+		break;
+		case 0xdd25:
+			if (outLength) *outLength = 2;
+			return &Items[1030];
+		break;
+		case 0xdd24:
+			if (outLength) *outLength = 2;
+			return &Items[1773];
+		break;
+		case 0xdd23:
+			if (outLength) *outLength = 2;
+			return &Items[1771];
+		break;
+		case 0xdd22:
+			if (outLength) *outLength = 2;
+			return &Items[1793];
+		break;
+		case 0xdd21:
+			if (outLength) *outLength = 2;
+			return &Items[1774];
+		break;
+		case 0xdd20:
+			if (outLength) *outLength = 2;
+			return &Items[1775];
+		break;
+		case 0xdd1f:
+			if (outLength) *outLength = 2;
+			return &Items[1792];
+		break;
+		case 0xdd1e:
+			if (outLength) *outLength = 2;
+			return &Items[1724];
+		break;
+		case 0xdd1d:
+			if (outLength) *outLength = 2;
+			return &Items[1846];
+		break;
+		case 0xdd1c:
+			if (outLength) *outLength = 2;
+			return &Items[1847];
+		break;
+		case 0xdd1b:
+			if (outLength) *outLength = 2;
+			return &Items[1845];
+		break;
+		case 0xdd1a:
+			if (outLength) *outLength = 2;
+			return &Items[1843];
+		break;
+		case 0xdd19:
+			if (outLength) *outLength = 2;
+			return &Items[1844];
+		break;
+		case 0xdd18:
+			if (outLength) *outLength = 2;
+			return &Items[1850];
+		break;
+		case 0xdd17:
+			if (outLength) *outLength = 2;
+			return &Items[1622];
+		break;
+		case 0xdd16:
+			if (outLength) *outLength = 2;
+			return &Items[1621];
+		break;
+		case 0xdd15:
+			if (outLength) *outLength = 2;
+			return &Items[1876];
+		break;
+		case 0xdd14:
+			if (outLength) *outLength = 2;
+			return &Items[1875];
+		break;
+		case 0xdd13:
+			if (outLength) *outLength = 2;
+			return &Items[1642];
+		break;
+		case 0xdd12:
+			if (outLength) *outLength = 2;
+			return &Items[1641];
+		break;
+		case 0xdd11:
+			if (outLength) *outLength = 2;
+			return &Items[1558];
+		break;
+		case 0xdd10:
+			if (outLength) *outLength = 2;
+			return &Items[1640];
+		break;
+		case 0xdd0f:
+			if (outLength) *outLength = 2;
+			return &Items[1639];
+		break;
+		case 0xdd0e:
+			if (outLength) *outLength = 2;
+			return &Items[1638];
+		break;
+		case 0xdd0d:
+			if (outLength) *outLength = 2;
+			return &Items[1637];
+		break;
+		case 0xdd0c:
+			if (outLength) *outLength = 2;
+			return &Items[1504];
+		break;
+		case 0xdd0b:
+			if (outLength) *outLength = 2;
+			return &Items[1503];
+		break;
+		case 0xdd0a:
+			if (outLength) *outLength = 2;
+			return &Items[1874];
+		break;
+		case 0xdd09:
+			if (outLength) *outLength = 2;
+			return &Items[1873];
+		break;
+		case 0xdd08:
+			if (outLength) *outLength = 2;
+			return &Items[1871];
+		break;
+		case 0xdd07:
+			if (outLength) *outLength = 2;
+			return &Items[1872];
+		break;
+		case 0xdd06:
+			if (outLength) *outLength = 2;
+			return &Items[1734];
+		break;
+		case 0xdd05:
+			if (outLength) *outLength = 2;
+			return &Items[1733];
+		break;
+		case 0xdd04:
+			if (outLength) *outLength = 2;
+			return &Items[1827];
+		break;
+		case 0xdd03:
+			if (outLength) *outLength = 2;
+			return &Items[1828];
+		break;
+		case 0xdd02:
+			if (outLength) *outLength = 2;
+			return &Items[1826];
+		break;
+		case 0xdd01:
+			if (outLength) *outLength = 2;
+			return &Items[1825];
+		break;
+		case 0xdd00:
+			if (outLength) *outLength = 2;
+			return &Items[1824];
+		break;
+		case 0xdcff:
+			if (outLength) *outLength = 2;
+			return &Items[1538];
+		break;
+		case 0xdcfd:
+			if (outLength) *outLength = 2;
+			return &Items[1485];
+		break;
+		case 0xdcfc:
+			if (outLength) *outLength = 2;
+			return &Items[1480];
+		break;
+		case 0xdcfb:
+			if (outLength) *outLength = 2;
+			return &Items[1492];
+		break;
+		case 0xdcfa:
+			if (outLength) *outLength = 2;
+			return &Items[1491];
+		break;
+		case 0xdcf9:
+			if (outLength) *outLength = 2;
+			return &Items[1483];
+		break;
+		case 0xdcf8:
+			if (outLength) *outLength = 2;
+			return &Items[1482];
+		break;
+		case 0xdcf7:
+			if (outLength) *outLength = 2;
+			return &Items[1481];
+		break;
+		case 0xdcf6:
+			if (outLength) *outLength = 2;
+			return &Items[1769];
+		break;
+		case 0xdcf5:
+			if (outLength) *outLength = 2;
+			return &Items[1725];
+		break;
+		case 0xdcf4:
+			if (outLength) *outLength = 2;
+			return &Items[1688];
+		break;
+		case 0xdcf3:
+			if (outLength) *outLength = 2;
+			return &Items[1689];
+		break;
+		case 0xdcf2:
+			if (outLength) *outLength = 2;
+			return &Items[1467];
+		break;
+		case 0xdcf1:
+			if (outLength) *outLength = 2;
+			return &Items[1466];
+		break;
+		case 0xdcf0:
+			if (outLength) *outLength = 2;
+			return &Items[1611];
+		break;
+		case 0xdcef:
+			if (outLength) *outLength = 2;
+			return &Items[1590];
+		break;
+		case 0xdcee:
+			if (outLength) *outLength = 2;
+			return &Items[1589];
+		break;
+		case 0xdced:
+			if (outLength) *outLength = 2;
+			return &Items[1588];
+		break;
+		case 0xdcec:
+			if (outLength) *outLength = 2;
+			return &Items[1587];
+		break;
+		case 0xdceb:
+			if (outLength) *outLength = 2;
+			return &Items[1586];
+		break;
+		case 0xdcea:
+			if (outLength) *outLength = 2;
+			return &Items[1585];
+		break;
+		case 0xdce9:
+			if (outLength) *outLength = 2;
+			return &Items[1577];
+		break;
+		case 0xdce8:
+			if (outLength) *outLength = 2;
+			return &Items[1578];
+		break;
+		case 0xdce7:
+			if (outLength) *outLength = 2;
+			return &Items[1579];
+		break;
+		case 0xdce6:
+			if (outLength) *outLength = 2;
+			return &Items[1583];
+		break;
+		case 0xdce5:
+			if (outLength) *outLength = 2;
+			return &Items[1581];
+		break;
+		case 0xdce4:
+			if (outLength) *outLength = 2;
+			return &Items[1582];
+		break;
+		case 0xdce3:
+			if (outLength) *outLength = 2;
+			return &Items[1877];
+		break;
+		case 0xdce2:
+			if (outLength) *outLength = 2;
+			return &Items[1878];
+		break;
+		case 0xdce1:
+			if (outLength) *outLength = 2;
+			return &Items[1502];
+		break;
+		case 0xdce0:
+			if (outLength) *outLength = 2;
+			return &Items[1490];
+		break;
+		case 0xdcdf:
+			if (outLength) *outLength = 2;
+			return &Items[1489];
+		break;
+		case 0xdcde:
+			if (outLength) *outLength = 2;
+			return &Items[1487];
+		break;
+		case 0xdcdd:
+			if (outLength) *outLength = 2;
+			return &Items[1635];
+		break;
+		case 0xdcdc:
+			if (outLength) *outLength = 2;
+			return &Items[1591];
+		break;
+		case 0xdcdb:
+			if (outLength) *outLength = 2;
+			return &Items[1715];
+		break;
+		case 0xdcda:
+			if (outLength) *outLength = 2;
+			return &Items[1619];
+		break;
+		case 0xdcd9:
+			if (outLength) *outLength = 2;
+			return &Items[1618];
+		break;
+		case 0xdcd8:
+			if (outLength) *outLength = 2;
+			return &Items[1617];
+		break;
+		case 0xdcd7:
+			if (outLength) *outLength = 2;
+			return &Items[1616];
+		break;
+		case 0xdcd6:
+			if (outLength) *outLength = 2;
+			return &Items[1620];
+		break;
+		case 0xdcd5:
+			if (outLength) *outLength = 2;
+			return &Items[1615];
+		break;
+		case 0xdcd4:
+			if (outLength) *outLength = 2;
+			return &Items[1613];
+		break;
+		case 0xdcd3:
+			if (outLength) *outLength = 2;
+			return &Items[1612];
+		break;
+		case 0xdcd2:
+			if (outLength) *outLength = 2;
+			return &Items[1614];
+		break;
+		case 0xdcd1:
+			if (outLength) *outLength = 2;
+			return &Items[1594];
+		break;
+		case 0xdcd0:
+			if (outLength) *outLength = 2;
+			return &Items[1625];
+		break;
+		case 0xdccf:
+			if (outLength) *outLength = 2;
+			return &Items[1626];
+		break;
+		case 0xdcce:
+			if (outLength) *outLength = 2;
+			return &Items[1623];
+		break;
+		case 0xdccd:
+			if (outLength) *outLength = 2;
+			return &Items[1628];
+		break;
+		case 0xdccc:
+			if (outLength) *outLength = 2;
+			return &Items[1627];
+		break;
+		case 0xdccb:
+			if (outLength) *outLength = 2;
+			return &Items[1606];
+		break;
+		case 0xdcca:
+			if (outLength) *outLength = 2;
+			return &Items[1595];
+		break;
+		case 0xdcc9:
+			if (outLength) *outLength = 2;
+			return &Items[1597];
+		break;
+		case 0xdcc8:
+			if (outLength) *outLength = 2;
+			return &Items[1596];
+		break;
+		case 0xdcc7:
+			if (outLength) *outLength = 2;
+			return &Items[1602];
+		break;
+		case 0xdcc6:
+			if (outLength) *outLength = 2;
+			return &Items[1600];
+		break;
+		case 0xdcc5:
+			if (outLength) *outLength = 2;
+			return &Items[1601];
+		break;
+		case 0xdcc4:
+			if (outLength) *outLength = 2;
+			return &Items[1593];
+		break;
+		case 0xdcc3:
+			if (outLength) *outLength = 2;
+			return &Items[1592];
+		break;
+		case 0xdcc2:
+			if (outLength) *outLength = 2;
+			return &Items[1608];
+		break;
+		case 0xdcc1:
+			if (outLength) *outLength = 2;
+			return &Items[1607];
+		break;
+		case 0xdcc0:
+			if (outLength) *outLength = 2;
+			return &Items[1479];
+		break;
+		case 0xdcbf:
+			if (outLength) *outLength = 2;
+			return &Items[1478];
+		break;
+		case 0xdcbe:
+			if (outLength) *outLength = 2;
+			return &Items[1477];
+		break;
+		case 0xdcbd:
+			if (outLength) *outLength = 2;
+			return &Items[1476];
+		break;
+		case 0xdcbc:
+			if (outLength) *outLength = 2;
+			return &Items[891];
+		break;
+		case 0xdcbb:
+			if (outLength) *outLength = 2;
+			return &Items[1468];
+		break;
+		case 0xdcba:
+			if (outLength) *outLength = 2;
+			return &Items[1390];
+		break;
+		case 0xdcb9:
+			if (outLength) *outLength = 2;
+			return &Items[1744];
+		break;
+		case 0xdcb8:
+			if (outLength) *outLength = 2;
+			return &Items[1510];
+		break;
+		case 0xdcb7:
+			if (outLength) *outLength = 2;
+			return &Items[1514];
+		break;
+		case 0xdcb6:
+			if (outLength) *outLength = 2;
+			return &Items[1513];
+		break;
+		case 0xdcb5:
+			if (outLength) *outLength = 2;
+			return &Items[1511];
+		break;
+		case 0xdcb4:
+			if (outLength) *outLength = 2;
+			return &Items[1512];
+		break;
+		case 0xdcb3:
+			if (outLength) *outLength = 2;
+			return &Items[1516];
+		break;
+		case 0xdcb2:
+			if (outLength) *outLength = 2;
+			return &Items[1835];
+		break;
+		case 0xdcb1:
+			if (outLength) *outLength = 2;
+			return &Items[1836];
+		break;
+		case 0xdcb0:
+			if (outLength) *outLength = 2;
+			return &Items[1515];
+		break;
+		case 0xdcaf:
+			if (outLength) *outLength = 2;
+			return &Items[1717];
+		break;
+		case 0xdcae:
+			if (outLength) *outLength = 2;
+			return &Items[1697];
+		break;
+		case 0xdcad:
+			if (outLength) *outLength = 2;
+			return &Items[1881];
+		break;
+		case 0xdcac:
+			if (outLength) *outLength = 2;
+			return &Items[1880];
+		break;
+		case 0xdcab:
+			if (outLength) *outLength = 2;
+			return &Items[1025];
+		break;
+		case 0xdcaa:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[252];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[251];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[250];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[249];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[248];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[247];
+		break;
+		case 0xdca9:
+			if (outLength) *outLength = 2;
+			return &Items[79];
+		break;
+		case 0xdca8:
+			if (outLength) *outLength = 2;
+			return &Items[1048];
+		break;
+		case 0xdca7:
+			if (outLength) *outLength = 2;
+			return &Items[1052];
+		break;
+		case 0xdca6:
+			if (outLength) *outLength = 2;
+			return &Items[1053];
+		break;
+		case 0xdca5:
+			if (outLength) *outLength = 2;
+			return &Items[1031];
+		break;
+		case 0xdca4:
+			if (outLength) *outLength = 2;
+			return &Items[1752];
+		break;
+		case 0xdca3:
+			if (outLength) *outLength = 2;
+			return &Items[1528];
+		break;
+		case 0xdca2:
+			if (outLength) *outLength = 2;
+			return &Items[1718];
+		break;
+		case 0xdca1:
+			if (outLength) *outLength = 2;
+			return &Items[1505];
+		break;
+		case 0xdca0:
+			if (outLength) *outLength = 2;
+			return &Items[1749];
+		break;
+		case 0xdc9f:
+			if (outLength) *outLength = 2;
+			return &Items[1658];
+		break;
+		case 0xdc9e:
+			if (outLength) *outLength = 2;
+			return &Items[1652];
+		break;
+		case 0xdc9d:
+			if (outLength) *outLength = 2;
+			return &Items[1657];
+		break;
+		case 0xdc9c:
+			if (outLength) *outLength = 2;
+			return &Items[1647];
+		break;
+		case 0xdc9b:
+			if (outLength) *outLength = 2;
+			return &Items[1644];
+		break;
+		case 0xdc9a:
+			if (outLength) *outLength = 2;
+			return &Items[1645];
+		break;
+		case 0xdc99:
+			if (outLength) *outLength = 2;
+			return &Items[1646];
+		break;
+		case 0xdc98:
+			if (outLength) *outLength = 2;
+			return &Items[1656];
+		break;
+		case 0xdc97:
+			if (outLength) *outLength = 2;
+			return &Items[1654];
+		break;
+		case 0xdc96:
+			if (outLength) *outLength = 2;
+			return &Items[1655];
+		break;
+		case 0xdc95:
+			if (outLength) *outLength = 2;
+			return &Items[1651];
+		break;
+		case 0xdc94:
+			if (outLength) *outLength = 2;
+			return &Items[1649];
+		break;
+		case 0xdc93:
+			if (outLength) *outLength = 2;
+			return &Items[1653];
+		break;
+		case 0xdc92:
+			if (outLength) *outLength = 2;
+			return &Items[1443];
+		break;
+		case 0xdc91:
+			if (outLength) *outLength = 2;
+			return &Items[839];
+		break;
+		case 0xdc90:
+			if (outLength) *outLength = 2;
+			return &Items[1000];
+		break;
+		case 0xdc8f:
+			if (outLength) *outLength = 2;
+			return &Items[842];
+		break;
+		case 0xdc8e:
+			if (outLength) *outLength = 2;
+			return &Items[1517];
+		break;
+		case 0xdc8d:
+			if (outLength) *outLength = 2;
+			return &Items[277];
+		break;
+		case 0xdc8c:
+			if (outLength) *outLength = 2;
+			return &Items[1580];
+		break;
+		case 0xdc8b:
+			if (outLength) *outLength = 2;
+			return &Items[279];
+		break;
+		case 0xdc8a:
+			if (outLength) *outLength = 2;
+			return &Items[1544];
+		break;
+		case 0xdc89:
+			if (outLength) *outLength = 2;
+			return &Items[1545];
+		break;
+		case 0xdc88:
+			if (outLength) *outLength = 2;
+			return &Items[1539];
+		break;
+		case 0xdc87:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[779];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[773];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[778];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[772];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[777];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[771];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[776];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[770];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[775];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[769];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[774];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[768];
+		break;
+		case 0xdc86:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[791];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[785];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[790];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[784];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[789];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[783];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[788];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[782];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[787];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[781];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[786];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[780];
+		break;
+		case 0xdc85:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[276];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[275];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[274];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[273];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[272];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[271];
+		break;
+		case 0xdc84:
+			if (outLength) *outLength = 2;
+			return &Items[278];
+		break;
+		case 0xdc83:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[803];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[802];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[801];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[800];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[799];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[798];
+		break;
+		case 0xdc82:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[401];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[407];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[400];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[406];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[399];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[405];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[398];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[404];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[397];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[403];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[396];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[402];
+		break;
+		case 0xdc81:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[683];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[677];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[682];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[676];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[681];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[675];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[680];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[674];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2642 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[679];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[673];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[678];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[672];
+		break;
+		case 0xdc80:
+			if (outLength) *outLength = 2;
+			return &Items[81];
+		break;
+		case 0xdc7f:
+			if (outLength) *outLength = 2;
+			return &Items[76];
+		break;
+		case 0xdc7e:
+			if (outLength) *outLength = 2;
+			return &Items[84];
+		break;
+		case 0xdc7d:
+			if (outLength) *outLength = 2;
+			return &Items[83];
+		break;
+		case 0xdc7c:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[653];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[652];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[651];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[650];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[649];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[648];
+		break;
+		case 0xdc7b:
+			if (outLength) *outLength = 2;
+			return &Items[80];
+		break;
+		case 0xdc7a:
+			if (outLength) *outLength = 2;
+			return &Items[78];
+		break;
+		case 0xdc79:
+			if (outLength) *outLength = 2;
+			return &Items[77];
+		break;
+		case 0xdc78:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[629];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[628];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[627];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[626];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[625];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[624];
+		break;
+		case 0xdc77:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[389];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[395];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[388];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[394];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[387];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[393];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[386];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[392];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[385];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[391];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[384];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[390];
+		break;
+		case 0xdc76:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[305];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[304];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[303];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[302];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[301];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[300];
+		break;
+		case 0xdc75:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[353];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[352];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[351];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[350];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[349];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[348];
+		break;
+		case 0xdc74:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[347];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[346];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[345];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[344];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[343];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[342];
+		break;
+		case 0xdc73:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[365];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[371];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[364];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[370];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[363];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[369];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[362];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[368];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[361];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[367];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[360];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[366];
+		break;
+		case 0xdc72:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[359];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[358];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[357];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[356];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[355];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[354];
+		break;
+		case 0xdc71:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[335];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[341];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[334];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[340];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[333];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[339];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[332];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[338];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[331];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[337];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[330];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[336];
+		break;
+		case 0xdc70:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[641];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[640];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[639];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[638];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[637];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[636];
+		break;
+		case 0xdc6f:
+			if (ch + 4 < end && (ch + 2)->unicode() == 0x200d && (ch + 3)->unicode() == 0x2642 && (ch + 4)->unicode() == 0xfe0f) {
+				if (outLength) *outLength = 5;
+				return &Items[811];
+			}
+			if (outLength) *outLength = 2;
+			return &Items[810];
+		break;
+		case 0xdc6e:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[377];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[383];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[376];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[382];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[375];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[381];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[374];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[380];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[373];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[379];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[372];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[378];
+		break;
+		case 0xdc6d:
+			if (outLength) *outLength = 2;
+			return &Items[837];
+		break;
+		case 0xdc6c:
+			if (outLength) *outLength = 2;
+			return &Items[838];
+		break;
+		case 0xdc6b:
+			if (outLength) *outLength = 2;
+			return &Items[836];
+		break;
+		case 0xdc6a:
+			if (outLength) *outLength = 2;
+			return &Items[845];
+		break;
+		case 0xdc69:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[569];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[593];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[545];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[533];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[521];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[509];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[497];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[485];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[557];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[473];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[461];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[449];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[437];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[581];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[605];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[425];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[329];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[568];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[592];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[544];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[532];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[520];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[508];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[496];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[484];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[556];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[472];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[460];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[448];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[436];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[580];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[604];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[424];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[328];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[567];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[591];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[543];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[531];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[519];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[507];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[495];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[483];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[555];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[471];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[459];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[447];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[435];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[579];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[603];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[423];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[327];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[566];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[590];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[542];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[530];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[518];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[506];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[494];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[482];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[554];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[470];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[458];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[446];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[434];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[578];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[602];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[422];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[326];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[565];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[589];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[541];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[529];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[517];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[505];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[493];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[481];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[553];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[469];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[457];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[445];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[433];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[577];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[601];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[421];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[325];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end) switch ((ch + 3)->unicode()) {
+				case 0xd83d:
+					switch ((ch + 4)->unicode()) {
+					case 0xde92:
+						if (outLength) *outLength = 5;
+						return &Items[564];
+					break;
+					case 0xde80:
+						if (outLength) *outLength = 5;
+						return &Items[588];
+					break;
+					case 0xdd2c:
+						if (outLength) *outLength = 5;
+						return &Items[540];
+					break;
+					case 0xdd27:
+						if (outLength) *outLength = 5;
+						return &Items[528];
+					break;
+					case 0xdcbc:
+						if (outLength) *outLength = 5;
+						return &Items[516];
+					break;
+					case 0xdcbb:
+						if (outLength) *outLength = 5;
+						return &Items[504];
+					break;
+					case 0xdc69:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+							switch ((ch + 7)->unicode()) {
+							case 0xdc67:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d) {
+									switch ((ch + 10)->unicode()) {
+									case 0xdc67:
+										if (outLength) *outLength = 11;
+										return &Items[854];
+									break;
+									case 0xdc66:
+										if (outLength) *outLength = 11;
+										return &Items[852];
+									break;
+									}
+								}
+								if (outLength) *outLength = 8;
+								return &Items[851];
+							break;
+							case 0xdc66:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d && (ch + 10)->unicode() == 0xdc66) {
+									if (outLength) *outLength = 11;
+									return &Items[853];
+								}
+								if (outLength) *outLength = 8;
+								return &Items[850];
+							break;
+							}
+						}
+					break;
+					case 0xdc67:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+							switch ((ch + 7)->unicode()) {
+							case 0xdc67:
+								if (outLength) *outLength = 8;
+								return &Items[864];
+							break;
+							case 0xdc66:
+								if (outLength) *outLength = 8;
+								return &Items[862];
+							break;
+							}
+						}
+						if (outLength) *outLength = 5;
+						return &Items[861];
+					break;
+					case 0xdc66:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d && (ch + 7)->unicode() == 0xdc66) {
+							if (outLength) *outLength = 8;
+							return &Items[863];
+						}
+						if (outLength) *outLength = 5;
+						return &Items[860];
+					break;
+					}
+				break;
+				case 0xd83c:
+					switch ((ch + 4)->unicode()) {
+					case 0xdfed:
+						if (outLength) *outLength = 5;
+						return &Items[492];
+					break;
+					case 0xdfeb:
+						if (outLength) *outLength = 5;
+						return &Items[480];
+					break;
+					case 0xdfa8:
+						if (outLength) *outLength = 5;
+						return &Items[552];
+					break;
+					case 0xdfa4:
+						if (outLength) *outLength = 5;
+						return &Items[468];
+					break;
+					case 0xdf93:
+						if (outLength) *outLength = 5;
+						return &Items[456];
+					break;
+					case 0xdf73:
+						if (outLength) *outLength = 5;
+						return &Items[444];
+					break;
+					case 0xdf3e:
+						if (outLength) *outLength = 5;
+						return &Items[432];
+					break;
+					}
+				break;
+				case 0x2764:
+					if (ch + 7 < end && (ch + 4)->unicode() == 0xfe0f && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+						switch ((ch + 7)->unicode()) {
+						case 0xdc8b:
+							if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d && (ch + 10)->unicode() == 0xdc69) {
+								if (outLength) *outLength = 11;
+								return &Items[843];
+							}
+						break;
+						case 0xdc69:
+							if (outLength) *outLength = 8;
+							return &Items[840];
+						break;
+						}
+					}
+				break;
+				case 0x2708:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[576];
+					}
+				break;
+				case 0x2696:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[600];
+					}
+				break;
+				case 0x2695:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[420];
+					}
+				break;
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[324];
+		break;
+		case 0xdc68:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[575];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[599];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[551];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[539];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[527];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[515];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[503];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[491];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[563];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[479];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[467];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[455];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[443];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[587];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[611];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[431];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[323];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[574];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[598];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[550];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[538];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[526];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[514];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[502];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[490];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[562];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[478];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[466];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[454];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[442];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[586];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[610];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[430];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[322];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[573];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[597];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[549];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[537];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[525];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[513];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[501];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[489];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[561];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[477];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[465];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[453];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[441];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[585];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[609];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[429];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[321];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[572];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[596];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[548];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[536];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[524];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[512];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[500];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[488];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[560];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[476];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[464];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[452];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[440];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[584];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[608];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[428];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[320];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d) {
+						switch ((ch + 5)->unicode()) {
+						case 0xd83d:
+							switch ((ch + 6)->unicode()) {
+							case 0xde92:
+								if (outLength) *outLength = 7;
+								return &Items[571];
+							break;
+							case 0xde80:
+								if (outLength) *outLength = 7;
+								return &Items[595];
+							break;
+							case 0xdd2c:
+								if (outLength) *outLength = 7;
+								return &Items[547];
+							break;
+							case 0xdd27:
+								if (outLength) *outLength = 7;
+								return &Items[535];
+							break;
+							case 0xdcbc:
+								if (outLength) *outLength = 7;
+								return &Items[523];
+							break;
+							case 0xdcbb:
+								if (outLength) *outLength = 7;
+								return &Items[511];
+							break;
+							}
+						break;
+						case 0xd83c:
+							switch ((ch + 6)->unicode()) {
+							case 0xdfed:
+								if (outLength) *outLength = 7;
+								return &Items[499];
+							break;
+							case 0xdfeb:
+								if (outLength) *outLength = 7;
+								return &Items[487];
+							break;
+							case 0xdfa8:
+								if (outLength) *outLength = 7;
+								return &Items[559];
+							break;
+							case 0xdfa4:
+								if (outLength) *outLength = 7;
+								return &Items[475];
+							break;
+							case 0xdf93:
+								if (outLength) *outLength = 7;
+								return &Items[463];
+							break;
+							case 0xdf73:
+								if (outLength) *outLength = 7;
+								return &Items[451];
+							break;
+							case 0xdf3e:
+								if (outLength) *outLength = 7;
+								return &Items[439];
+							break;
+							}
+						break;
+						case 0x2708:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[583];
+							}
+						break;
+						case 0x2696:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[607];
+							}
+						break;
+						case 0x2695:
+							if ((ch + 6)->unicode() == 0xfe0f) {
+								if (outLength) *outLength = 7;
+								return &Items[427];
+							}
+						break;
+						}
+					}
+					if (outLength) *outLength = 4;
+					return &Items[319];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end) switch ((ch + 3)->unicode()) {
+				case 0xd83d:
+					switch ((ch + 4)->unicode()) {
+					case 0xde92:
+						if (outLength) *outLength = 5;
+						return &Items[570];
+					break;
+					case 0xde80:
+						if (outLength) *outLength = 5;
+						return &Items[594];
+					break;
+					case 0xdd2c:
+						if (outLength) *outLength = 5;
+						return &Items[546];
+					break;
+					case 0xdd27:
+						if (outLength) *outLength = 5;
+						return &Items[534];
+					break;
+					case 0xdcbc:
+						if (outLength) *outLength = 5;
+						return &Items[522];
+					break;
+					case 0xdcbb:
+						if (outLength) *outLength = 5;
+						return &Items[510];
+					break;
+					case 0xdc69:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+							switch ((ch + 7)->unicode()) {
+							case 0xdc67:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d) {
+									switch ((ch + 10)->unicode()) {
+									case 0xdc67:
+										if (outLength) *outLength = 11;
+										return &Items[849];
+									break;
+									case 0xdc66:
+										if (outLength) *outLength = 11;
+										return &Items[847];
+									break;
+									}
+								}
+								if (outLength) *outLength = 8;
+								return &Items[846];
+							break;
+							case 0xdc66:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d && (ch + 10)->unicode() == 0xdc66) {
+									if (outLength) *outLength = 11;
+									return &Items[848];
+								}
+							break;
+							}
+						}
+					break;
+					case 0xdc68:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+							switch ((ch + 7)->unicode()) {
+							case 0xdc67:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d) {
+									switch ((ch + 10)->unicode()) {
+									case 0xdc67:
+										if (outLength) *outLength = 11;
+										return &Items[859];
+									break;
+									case 0xdc66:
+										if (outLength) *outLength = 11;
+										return &Items[857];
+									break;
+									}
+								}
+								if (outLength) *outLength = 8;
+								return &Items[856];
+							break;
+							case 0xdc66:
+								if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d && (ch + 10)->unicode() == 0xdc66) {
+									if (outLength) *outLength = 11;
+									return &Items[858];
+								}
+								if (outLength) *outLength = 8;
+								return &Items[855];
+							break;
+							}
+						}
+					break;
+					case 0xdc67:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+							switch ((ch + 7)->unicode()) {
+							case 0xdc67:
+								if (outLength) *outLength = 8;
+								return &Items[869];
+							break;
+							case 0xdc66:
+								if (outLength) *outLength = 8;
+								return &Items[867];
+							break;
+							}
+						}
+						if (outLength) *outLength = 5;
+						return &Items[866];
+					break;
+					case 0xdc66:
+						if (ch + 7 < end && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d && (ch + 7)->unicode() == 0xdc66) {
+							if (outLength) *outLength = 8;
+							return &Items[868];
+						}
+						if (outLength) *outLength = 5;
+						return &Items[865];
+					break;
+					}
+				break;
+				case 0xd83c:
+					switch ((ch + 4)->unicode()) {
+					case 0xdfed:
+						if (outLength) *outLength = 5;
+						return &Items[498];
+					break;
+					case 0xdfeb:
+						if (outLength) *outLength = 5;
+						return &Items[486];
+					break;
+					case 0xdfa8:
+						if (outLength) *outLength = 5;
+						return &Items[558];
+					break;
+					case 0xdfa4:
+						if (outLength) *outLength = 5;
+						return &Items[474];
+					break;
+					case 0xdf93:
+						if (outLength) *outLength = 5;
+						return &Items[462];
+					break;
+					case 0xdf73:
+						if (outLength) *outLength = 5;
+						return &Items[450];
+					break;
+					case 0xdf3e:
+						if (outLength) *outLength = 5;
+						return &Items[438];
+					break;
+					}
+				break;
+				case 0x2764:
+					if (ch + 7 < end && (ch + 4)->unicode() == 0xfe0f && (ch + 5)->unicode() == 0x200d && (ch + 6)->unicode() == 0xd83d) {
+						switch ((ch + 7)->unicode()) {
+						case 0xdc8b:
+							if (ch + 10 < end && (ch + 8)->unicode() == 0x200d && (ch + 9)->unicode() == 0xd83d && (ch + 10)->unicode() == 0xdc68) {
+								if (outLength) *outLength = 11;
+								return &Items[844];
+							}
+						break;
+						case 0xdc68:
+							if (outLength) *outLength = 8;
+							return &Items[841];
+						break;
+						}
+					}
+				break;
+				case 0x2708:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[582];
+					}
+				break;
+				case 0x2696:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[606];
+					}
+				break;
+				case 0x2695:
+					if ((ch + 4)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 5;
+						return &Items[426];
+					}
+				break;
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[318];
+		break;
+		case 0xdc67:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[317];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[316];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[315];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[314];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[313];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[312];
+		break;
+		case 0xdc66:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[311];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[310];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[309];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[308];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[307];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[306];
+		break;
+		case 0xdc65:
+			if (outLength) *outLength = 2;
+			return &Items[299];
+		break;
+		case 0xdc64:
+			if (outLength) *outLength = 2;
+			return &Items[298];
+		break;
+		case 0xdc63:
+			if (outLength) *outLength = 2;
+			return &Items[294];
+		break;
+		case 0xdc62:
+			if (outLength) *outLength = 2;
+			return &Items[879];
+		break;
+		case 0xdc61:
+			if (outLength) *outLength = 2;
+			return &Items[878];
+		break;
+		case 0xdc60:
+			if (outLength) *outLength = 2;
+			return &Items[877];
+		break;
+		case 0xdc5f:
+			if (outLength) *outLength = 2;
+			return &Items[881];
+		break;
+		case 0xdc5e:
+			if (outLength) *outLength = 2;
+			return &Items[880];
+		break;
+		case 0xdc5d:
+			if (outLength) *outLength = 2;
+			return &Items[888];
+		break;
+		case 0xdc5c:
+			if (outLength) *outLength = 2;
+			return &Items[890];
+		break;
+		case 0xdc5b:
+			if (outLength) *outLength = 2;
+			return &Items[889];
+		break;
+		case 0xdc5a:
+			if (outLength) *outLength = 2;
+			return &Items[870];
+		break;
+		case 0xdc59:
+			if (outLength) *outLength = 2;
+			return &Items[875];
+		break;
+		case 0xdc58:
+			if (outLength) *outLength = 2;
+			return &Items[876];
+		break;
+		case 0xdc57:
+			if (outLength) *outLength = 2;
+			return &Items[874];
+		break;
+		case 0xdc56:
+			if (outLength) *outLength = 2;
+			return &Items[872];
+		break;
+		case 0xdc55:
+			if (outLength) *outLength = 2;
+			return &Items[871];
+		break;
+		case 0xdc54:
+			if (outLength) *outLength = 2;
+			return &Items[873];
+		break;
+		case 0xdc53:
+			if (outLength) *outLength = 2;
+			return &Items[892];
+		break;
+		case 0xdc52:
+			if (outLength) *outLength = 2;
+			return &Items[882];
+		break;
+		case 0xdc51:
+			if (outLength) *outLength = 2;
+			return &Items[885];
+		break;
+		case 0xdc50:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[101];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[100];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[99];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[98];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[97];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[96];
+		break;
+		case 0xdc4f:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[113];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[112];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[111];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[110];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[109];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[108];
+		break;
+		case 0xdc4e:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[132];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[131];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[130];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[129];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[128];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[127];
+		break;
+		case 0xdc4d:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[126];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[125];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[124];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[123];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[122];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[121];
+		break;
+		case 0xdc4c:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[180];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[179];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[178];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[177];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[176];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[175];
+		break;
+		case 0xdc4b:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[240];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[239];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[238];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[237];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[236];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[235];
+		break;
+		case 0xdc4a:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[138];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[137];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[136];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[135];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[134];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[133];
+		break;
+		case 0xdc49:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[192];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[191];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[190];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[189];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[188];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[187];
+		break;
+		case 0xdc48:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[186];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[185];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[184];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[183];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[182];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[181];
+		break;
+		case 0xdc47:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[204];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[203];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[202];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[201];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[200];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[199];
+		break;
+		case 0xdc46:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[198];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[197];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[196];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[195];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[194];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[193];
+		break;
+		case 0xdc45:
+			if (outLength) *outLength = 2;
+			return &Items[281];
+		break;
+		case 0xdc44:
+			if (outLength) *outLength = 2;
+			return &Items[280];
+		break;
+		case 0xdc43:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[293];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[292];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[291];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[290];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[289];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[288];
+		break;
+		case 0xdc42:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[287];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[286];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[285];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[284];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[283];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[282];
+		break;
+		case 0xdc41:
+			if (ch + 4 < end && (ch + 2)->unicode() == 0x200d && (ch + 3)->unicode() == 0xd83d && (ch + 4)->unicode() == 0xdde8) {
+				if (outLength) *outLength = 5;
+				return &Items[1879];
+			}
+			if (outLength) *outLength = 2;
+			return &Items[295];
+		break;
+		case 0xdc40:
+			if (outLength) *outLength = 2;
+			return &Items[296];
+		break;
+		case 0xdc3f:
+			if (outLength) *outLength = 2;
+			return &Items[980];
+		break;
+		case 0xdc3e:
+			if (outLength) *outLength = 2;
+			return &Items[981];
+		break;
+		case 0xdc3d:
+			if (outLength) *outLength = 2;
+			return &Items[909];
+		break;
+		case 0xdc3c:
+			if (outLength) *outLength = 2;
+			return &Items[903];
+		break;
+		case 0xdc3b:
+			if (outLength) *outLength = 2;
+			return &Items[902];
+		break;
+		case 0xdc3a:
+			if (outLength) *outLength = 2;
+			return &Items[926];
+		break;
+		case 0xdc39:
+			if (outLength) *outLength = 2;
+			return &Items[899];
+		break;
+		case 0xdc38:
+			if (outLength) *outLength = 2;
+			return &Items[910];
+		break;
+		case 0xdc37:
+			if (outLength) *outLength = 2;
+			return &Items[908];
+		break;
+		case 0xdc36:
+			if (outLength) *outLength = 2;
+			return &Items[896];
+		break;
+		case 0xdc35:
+			if (outLength) *outLength = 2;
+			return &Items[911];
+		break;
+		case 0xdc34:
+			if (outLength) *outLength = 2;
+			return &Items[928];
+		break;
+		case 0xdc33:
+			if (outLength) *outLength = 2;
+			return &Items[952];
+		break;
+		case 0xdc32:
+			if (outLength) *outLength = 2;
+			return &Items[983];
+		break;
+		case 0xdc31:
+			if (outLength) *outLength = 2;
+			return &Items[897];
+		break;
+		case 0xdc30:
+			if (outLength) *outLength = 2;
+			return &Items[900];
+		break;
+		case 0xdc2f:
+			if (outLength) *outLength = 2;
+			return &Items[905];
+		break;
+		case 0xdc2e:
+			if (outLength) *outLength = 2;
+			return &Items[907];
+		break;
+		case 0xdc2d:
+			if (outLength) *outLength = 2;
+			return &Items[898];
+		break;
+		case 0xdc2c:
+			if (outLength) *outLength = 2;
+			return &Items[950];
+		break;
+		case 0xdc2b:
+			if (outLength) *outLength = 2;
+			return &Items[962];
+		break;
+		case 0xdc2a:
+			if (outLength) *outLength = 2;
+			return &Items[961];
+		break;
+		case 0xdc29:
+			if (outLength) *outLength = 2;
+			return &Items[972];
+		break;
+		case 0xdc28:
+			if (outLength) *outLength = 2;
+			return &Items[904];
+		break;
+		case 0xdc27:
+			if (outLength) *outLength = 2;
+			return &Items[917];
+		break;
+		case 0xdc26:
+			if (outLength) *outLength = 2;
+			return &Items[918];
+		break;
+		case 0xdc25:
+			if (outLength) *outLength = 2;
+			return &Items[921];
+		break;
+		case 0xdc24:
+			if (outLength) *outLength = 2;
+			return &Items[919];
+		break;
+		case 0xdc23:
+			if (outLength) *outLength = 2;
+			return &Items[920];
+		break;
+		case 0xdc22:
+			if (outLength) *outLength = 2;
+			return &Items[939];
+		break;
+		case 0xdc21:
+			if (outLength) *outLength = 2;
+			return &Items[949];
+		break;
+		case 0xdc20:
+			if (outLength) *outLength = 2;
+			return &Items[947];
+		break;
+		case 0xdc1f:
+			if (outLength) *outLength = 2;
+			return &Items[948];
+		break;
+		case 0xdc1e:
+			if (outLength) *outLength = 2;
+			return &Items[935];
+		break;
+		case 0xdc1d:
+			if (outLength) *outLength = 2;
+			return &Items[930];
+		break;
+		case 0xdc1c:
+			if (outLength) *outLength = 2;
+			return &Items[936];
+		break;
+		case 0xdc1b:
+			if (outLength) *outLength = 2;
+			return &Items[931];
+		break;
+		case 0xdc1a:
+			if (outLength) *outLength = 2;
+			return &Items[934];
+		break;
+		case 0xdc19:
+			if (outLength) *outLength = 2;
+			return &Items[945];
+		break;
+		case 0xdc18:
+			if (outLength) *outLength = 2;
+			return &Items[963];
+		break;
+		case 0xdc17:
+			if (outLength) *outLength = 2;
+			return &Items[927];
+		break;
+		case 0xdc16:
+			if (outLength) *outLength = 2;
+			return &Items[967];
+		break;
+		case 0xdc15:
+			if (outLength) *outLength = 2;
+			return &Items[971];
+		break;
+		case 0xdc14:
+			if (outLength) *outLength = 2;
+			return &Items[916];
+		break;
+		case 0xdc13:
+			if (outLength) *outLength = 2;
+			return &Items[974];
+		break;
+		case 0xdc12:
+			if (outLength) *outLength = 2;
+			return &Items[915];
+		break;
+		case 0xdc11:
+			if (outLength) *outLength = 2;
+			return &Items[970];
+		break;
+		case 0xdc10:
+			if (outLength) *outLength = 2;
+			return &Items[968];
+		break;
+		case 0xdc0f:
+			if (outLength) *outLength = 2;
+			return &Items[969];
+		break;
+		case 0xdc0e:
+			if (outLength) *outLength = 2;
+			return &Items[966];
+		break;
+		case 0xdc0d:
+			if (outLength) *outLength = 2;
+			return &Items[940];
+		break;
+		case 0xdc0c:
+			if (outLength) *outLength = 2;
+			return &Items[933];
+		break;
+		case 0xdc0b:
+			if (outLength) *outLength = 2;
+			return &Items[953];
+		break;
+		case 0xdc0a:
+			if (outLength) *outLength = 2;
+			return &Items[954];
+		break;
+		case 0xdc09:
+			if (outLength) *outLength = 2;
+			return &Items[982];
+		break;
+		case 0xdc08:
+			if (outLength) *outLength = 2;
+			return &Items[973];
+		break;
+		case 0xdc07:
+			if (outLength) *outLength = 2;
+			return &Items[977];
+		break;
+		case 0xdc06:
+			if (outLength) *outLength = 2;
+			return &Items[955];
+		break;
+		case 0xdc05:
+			if (outLength) *outLength = 2;
+			return &Items[956];
+		break;
+		case 0xdc04:
+			if (outLength) *outLength = 2;
+			return &Items[959];
+		break;
+		case 0xdc03:
+			if (outLength) *outLength = 2;
+			return &Items[957];
+		break;
+		case 0xdc02:
+			if (outLength) *outLength = 2;
+			return &Items[958];
+		break;
+		case 0xdc01:
+			if (outLength) *outLength = 2;
+			return &Items[978];
+		break;
+		case 0xdc00:
+			if (outLength) *outLength = 2;
+			return &Items[979];
+		break;
+		}
+	break;
+	case 0xd83c:
+		if (ch + 1 != end) switch ((ch + 1)->unicode()) {
+		case 0xdffa:
+			if (outLength) *outLength = 2;
+			return &Items[1536];
+		break;
+		case 0xdff9:
+			if (outLength) *outLength = 2;
+			return &Items[1156];
+		break;
+		case 0xdff8:
+			if (outLength) *outLength = 2;
+			return &Items[1150];
+		break;
+		case 0xdff7:
+			if (outLength) *outLength = 2;
+			return &Items[1584];
+		break;
+		case 0xdff5:
+			if (outLength) *outLength = 2;
+			return &Items[1312];
+		break;
+		case 0xdff4:
+			if (outLength) *outLength = 2;
+			return &Items[1915];
+		break;
+		case 0xdff3:
+			if (ch + 5 < end && (ch + 2)->unicode() == 0xfe0f && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0xd83c && (ch + 5)->unicode() == 0xdf08) {
+				if (outLength) *outLength = 6;
+				return &Items[1918];
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1914];
+		break;
+		case 0xdff0:
+			if (outLength) *outLength = 2;
+			return &Items[1409];
+		break;
+		case 0xdfef:
+			if (outLength) *outLength = 2;
+			return &Items[1410];
+		break;
+		case 0xdfee:
+			if (outLength) *outLength = 2;
+			return &Items[1574];
+		break;
+		case 0xdfed:
+			if (outLength) *outLength = 2;
+			return &Items[1428];
+		break;
+		case 0xdfec:
+			if (outLength) *outLength = 2;
+			return &Items[1434];
+		break;
+		case 0xdfeb:
+			if (outLength) *outLength = 2;
+			return &Items[1441];
+		break;
+		case 0xdfea:
+			if (outLength) *outLength = 2;
+			return &Items[1440];
+		break;
+		case 0xdfe9:
+			if (outLength) *outLength = 2;
+			return &Items[1442];
+		break;
+		case 0xdfe8:
+			if (outLength) *outLength = 2;
+			return &Items[1439];
+		break;
+		case 0xdfe7:
+			if (outLength) *outLength = 2;
+			return &Items[1753];
+		break;
+		case 0xdfe6:
+			if (outLength) *outLength = 2;
+			return &Items[1438];
+		break;
+		case 0xdfe5:
+			if (outLength) *outLength = 2;
+			return &Items[1437];
+		break;
+		case 0xdfe4:
+			if (outLength) *outLength = 2;
+			return &Items[1436];
+		break;
+		case 0xdfe3:
+			if (outLength) *outLength = 2;
+			return &Items[1435];
+		break;
+		case 0xdfe2:
+			if (outLength) *outLength = 2;
+			return &Items[1433];
+		break;
+		case 0xdfe1:
+			if (outLength) *outLength = 2;
+			return &Items[1430];
+		break;
+		case 0xdfe0:
+			if (outLength) *outLength = 2;
+			return &Items[1429];
+		break;
+		case 0xdfdf:
+			if (outLength) *outLength = 2;
+			return &Items[1411];
+		break;
+		case 0xdfde:
+			if (outLength) *outLength = 2;
+			return &Items[1452];
+		break;
+		case 0xdfdd:
+			if (outLength) *outLength = 2;
+			return &Items[1417];
+		break;
+		case 0xdfdc:
+			if (outLength) *outLength = 2;
+			return &Items[1422];
+		break;
+		case 0xdfdb:
+			if (outLength) *outLength = 2;
+			return &Items[1444];
+		break;
+		case 0xdfda:
+			if (outLength) *outLength = 2;
+			return &Items[1432];
+		break;
+		case 0xdfd9:
+			if (outLength) *outLength = 2;
+			return &Items[1460];
+		break;
+		case 0xdfd8:
+			if (outLength) *outLength = 2;
+			return &Items[1431];
+		break;
+		case 0xdfd7:
+			if (outLength) *outLength = 2;
+			return &Items[1427];
+		break;
+		case 0xdfd6:
+			if (outLength) *outLength = 2;
+			return &Items[1416];
+		break;
+		case 0xdfd5:
+			if (outLength) *outLength = 2;
+			return &Items[1423];
+		break;
+		case 0xdfd4:
+			if (outLength) *outLength = 2;
+			return &Items[1419];
+		break;
+		case 0xdfd3:
+			if (outLength) *outLength = 2;
+			return &Items[1149];
+		break;
+		case 0xdfd2:
+			if (outLength) *outLength = 2;
+			return &Items[1152];
+		break;
+		case 0xdfd1:
+			if (outLength) *outLength = 2;
+			return &Items[1153];
+		break;
+		case 0xdfd0:
+			if (outLength) *outLength = 2;
+			return &Items[1146];
+		break;
+		case 0xdfcf:
+			if (outLength) *outLength = 2;
+			return &Items[1154];
+		break;
+		case 0xdfce:
+			if (outLength) *outLength = 2;
+			return &Items[1351];
+		break;
+		case 0xdfcd:
+			if (outLength) *outLength = 2;
+			return &Items[1362];
+		break;
+		case 0xdfcc:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xfe0f:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1215];
+				}
+			break;
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1220];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1226];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1219];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1225];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1218];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1224];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1217];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1223];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1216];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1222];
+				break;
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1221];
+		break;
+		case 0xdfcb:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xfe0f:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1164];
+				}
+			break;
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1169];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1175];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1168];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1174];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1167];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1173];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1166];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1172];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1165];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1171];
+				break;
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1170];
+		break;
+		case 0xdfca:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1244];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1250];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1243];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1249];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1242];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1248];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1241];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1247];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1240];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1246];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[1239];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1245];
+		break;
+		case 0xdfc9:
+			if (outLength) *outLength = 2;
+			return &Items[1147];
+		break;
+		case 0xdfc8:
+			if (outLength) *outLength = 2;
+			return &Items[1143];
+		break;
+		case 0xdfc7:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[1280];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[1279];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[1278];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[1277];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[1276];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1275];
+		break;
+		case 0xdfc6:
+			if (outLength) *outLength = 2;
+			return &Items[1311];
+		break;
+		case 0xdfc5:
+			if (outLength) *outLength = 2;
+			return &Items[1306];
+		break;
+		case 0xdfc4:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1232];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1238];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1231];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1237];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1230];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1236];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1229];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1235];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[1228];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[1234];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[1227];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[1233];
+		break;
+		case 0xdfc3:
+			if (ch + 3 < end) switch ((ch + 2)->unicode()) {
+			case 0xd83c:
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[829];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[835];
+				break;
+				case 0xdffe:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[828];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[834];
+				break;
+				case 0xdffd:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[827];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[833];
+				break;
+				case 0xdffc:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[826];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[832];
+				break;
+				case 0xdffb:
+					if (ch + 6 < end && (ch + 4)->unicode() == 0x200d && (ch + 5)->unicode() == 0x2640 && (ch + 6)->unicode() == 0xfe0f) {
+						if (outLength) *outLength = 7;
+						return &Items[825];
+					}
+					if (outLength) *outLength = 4;
+					return &Items[831];
+				break;
+				}
+			break;
+			case 0x200d:
+				if (ch + 4 < end && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 5;
+					return &Items[824];
+				}
+			break;
+			}
+			if (outLength) *outLength = 2;
+			return &Items[830];
+		break;
+		case 0xdfc2:
+			if (outLength) *outLength = 2;
+			return &Items[1163];
+		break;
+		case 0xdfc1:
+			if (outLength) *outLength = 2;
+			return &Items[1916];
+		break;
+		case 0xdfc0:
+			if (outLength) *outLength = 2;
+			return &Items[1142];
+		break;
+		case 0xdfbf:
+			if (outLength) *outLength = 2;
+			return &Items[1161];
+		break;
+		case 0xdfbe:
+			if (outLength) *outLength = 2;
+			return &Items[1145];
+		break;
+		case 0xdfbd:
+			if (outLength) *outLength = 2;
+			return &Items[1305];
+		break;
+		case 0xdfbc:
+			if (outLength) *outLength = 2;
+			return &Items[1334];
+		break;
+		case 0xdfbb:
+			if (outLength) *outLength = 2;
+			return &Items[1340];
+		break;
+		case 0xdfba:
+			if (outLength) *outLength = 2;
+			return &Items[1338];
+		break;
+		case 0xdfb9:
+			if (outLength) *outLength = 2;
+			return &Items[1335];
+		break;
+		case 0xdfb8:
+			if (outLength) *outLength = 2;
+			return &Items[1339];
+		break;
+		case 0xdfb7:
+			if (outLength) *outLength = 2;
+			return &Items[1337];
+		break;
+		case 0xdfb6:
+			if (outLength) *outLength = 2;
+			return &Items[1830];
+		break;
+		case 0xdfb5:
+			if (outLength) *outLength = 2;
+			return &Items[1829];
+		break;
+		case 0xdfb4:
+			if (outLength) *outLength = 2;
+			return &Items[1888];
+		break;
+		case 0xdfb3:
+			if (outLength) *outLength = 2;
+			return &Items[1343];
+		break;
+		case 0xdfb2:
+			if (outLength) *outLength = 2;
+			return &Items[1341];
+		break;
+		case 0xdfb1:
+			if (outLength) *outLength = 2;
+			return &Items[1148];
+		break;
+		case 0xdfb0:
+			if (outLength) *outLength = 2;
+			return &Items[1345];
+		break;
+		case 0xdfaf:
+			if (outLength) *outLength = 2;
+			return &Items[1342];
+		break;
+		case 0xdfae:
+			if (outLength) *outLength = 2;
+			return &Items[1344];
+		break;
+		case 0xdfad:
+			if (outLength) *outLength = 2;
+			return &Items[1329];
+		break;
+		case 0xdfac:
+			if (outLength) *outLength = 2;
+			return &Items[1331];
+		break;
+		case 0xdfab:
+			if (outLength) *outLength = 2;
+			return &Items[1314];
+		break;
+		case 0xdfaa:
+			if (outLength) *outLength = 2;
+			return &Items[1316];
+		break;
+		case 0xdfa9:
+			if (outLength) *outLength = 2;
+			return &Items[883];
+		break;
+		case 0xdfa8:
+			if (outLength) *outLength = 2;
+			return &Items[1330];
+		break;
+		case 0xdfa7:
+			if (outLength) *outLength = 2;
+			return &Items[1333];
+		break;
+		case 0xdfa6:
+			if (outLength) *outLength = 2;
+			return &Items[1768];
+		break;
+		case 0xdfa5:
+			if (outLength) *outLength = 2;
+			return &Items[1484];
+		break;
+		case 0xdfa4:
+			if (outLength) *outLength = 2;
+			return &Items[1332];
+		break;
+		case 0xdfa3:
+			if (outLength) *outLength = 2;
+			return &Items[1157];
+		break;
+		case 0xdfa2:
+			if (outLength) *outLength = 2;
+			return &Items[1413];
+		break;
+		case 0xdfa1:
+			if (outLength) *outLength = 2;
+			return &Items[1412];
+		break;
+		case 0xdfa0:
+			if (outLength) *outLength = 2;
+			return &Items[1414];
+		break;
+		case 0xdf9f:
+			if (outLength) *outLength = 2;
+			return &Items[1315];
+		break;
+		case 0xdf9e:
+			if (outLength) *outLength = 2;
+			return &Items[1486];
+		break;
+		case 0xdf9b:
+			if (outLength) *outLength = 2;
+			return &Items[1495];
+		break;
+		case 0xdf9a:
+			if (outLength) *outLength = 2;
+			return &Items[1494];
+		break;
+		case 0xdf99:
+			if (outLength) *outLength = 2;
+			return &Items[1493];
+		break;
+		case 0xdf97:
+			if (outLength) *outLength = 2;
+			return &Items[1313];
+		break;
+		case 0xdf96:
+			if (outLength) *outLength = 2;
+			return &Items[1307];
+		break;
+		case 0xdf93:
+			if (outLength) *outLength = 2;
+			return &Items[884];
+		break;
+		case 0xdf92:
+			if (outLength) *outLength = 2;
+			return &Items[887];
+		break;
+		case 0xdf91:
+			if (outLength) *outLength = 2;
+			return &Items[1451];
+		break;
+		case 0xdf90:
+			if (outLength) *outLength = 2;
+			return &Items[1575];
+		break;
+		case 0xdf8f:
+			if (outLength) *outLength = 2;
+			return &Items[1569];
+		break;
+		case 0xdf8e:
+			if (outLength) *outLength = 2;
+			return &Items[1573];
+		break;
+		case 0xdf8d:
+			if (outLength) *outLength = 2;
+			return &Items[993];
+		break;
+		case 0xdf8c:
+			if (outLength) *outLength = 2;
+			return &Items[2031];
+		break;
+		case 0xdf8b:
+			if (outLength) *outLength = 2;
+			return &Items[994];
+		break;
+		case 0xdf8a:
+			if (outLength) *outLength = 2;
+			return &Items[1571];
+		break;
+		case 0xdf89:
+			if (outLength) *outLength = 2;
+			return &Items[1572];
+		break;
+		case 0xdf88:
+			if (outLength) *outLength = 2;
+			return &Items[1568];
+		break;
+		case 0xdf87:
+			if (outLength) *outLength = 2;
+			return &Items[1456];
+		break;
+		case 0xdf86:
+			if (outLength) *outLength = 2;
+			return &Items[1457];
+		break;
+		case 0xdf85:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xdfff:
+					if (outLength) *outLength = 4;
+					return &Items[623];
+				break;
+				case 0xdffe:
+					if (outLength) *outLength = 4;
+					return &Items[622];
+				break;
+				case 0xdffd:
+					if (outLength) *outLength = 4;
+					return &Items[621];
+				break;
+				case 0xdffc:
+					if (outLength) *outLength = 4;
+					return &Items[620];
+				break;
+				case 0xdffb:
+					if (outLength) *outLength = 4;
+					return &Items[619];
+				break;
+				}
+			}
+			if (outLength) *outLength = 2;
+			return &Items[618];
+		break;
+		case 0xdf84:
+			if (outLength) *outLength = 2;
+			return &Items[985];
+		break;
+		case 0xdf83:
+			if (outLength) *outLength = 2;
+			return &Items[86];
+		break;
+		case 0xdf82:
+			if (outLength) *outLength = 2;
+			return &Items[1117];
+		break;
+		case 0xdf81:
+			if (outLength) *outLength = 2;
+			return &Items[1567];
+		break;
+		case 0xdf80:
+			if (outLength) *outLength = 2;
+			return &Items[1570];
+		break;
+		case 0xdf7f:
+			if (outLength) *outLength = 2;
+			return &Items[1122];
+		break;
+		case 0xdf7e:
+			if (outLength) *outLength = 2;
+			return &Items[1137];
+		break;
+		case 0xdf7d:
+			if (outLength) *outLength = 2;
+			return &Items[1140];
+		break;
+		case 0xdf7c:
+			if (outLength) *outLength = 2;
+			return &Items[1126];
+		break;
+		case 0xdf7b:
+			if (outLength) *outLength = 2;
+			return &Items[1131];
+		break;
+		case 0xdf7a:
+			if (outLength) *outLength = 2;
+			return &Items[1130];
+		break;
+		case 0xdf79:
+			if (outLength) *outLength = 2;
+			return &Items[1136];
+		break;
+		case 0xdf78:
+			if (outLength) *outLength = 2;
+			return &Items[1135];
+		break;
+		case 0xdf77:
+			if (outLength) *outLength = 2;
+			return &Items[1133];
+		break;
+		case 0xdf76:
+			if (outLength) *outLength = 2;
+			return &Items[1129];
+		break;
+		case 0xdf75:
+			if (outLength) *outLength = 2;
+			return &Items[1128];
+		break;
+		case 0xdf74:
+			if (outLength) *outLength = 2;
+			return &Items[1139];
+		break;
+		case 0xdf73:
+			if (outLength) *outLength = 2;
+			return &Items[1086];
+		break;
+		case 0xdf72:
+			if (outLength) *outLength = 2;
+			return &Items[1103];
+		break;
+		case 0xdf71:
+			if (outLength) *outLength = 2;
+			return &Items[1106];
+		break;
+		case 0xdf70:
+			if (outLength) *outLength = 2;
+			return &Items[1116];
+		break;
+		case 0xdf6f:
+			if (outLength) *outLength = 2;
+			return &Items[1080];
+		break;
+		case 0xdf6e:
+			if (outLength) *outLength = 2;
+			return &Items[1118];
+		break;
+		case 0xdf6d:
+			if (outLength) *outLength = 2;
+			return &Items[1119];
+		break;
+		case 0xdf6c:
+			if (outLength) *outLength = 2;
+			return &Items[1120];
+		break;
+		case 0xdf6b:
+			if (outLength) *outLength = 2;
+			return &Items[1121];
+		break;
+		case 0xdf6a:
+			if (outLength) *outLength = 2;
+			return &Items[1124];
+		break;
+		case 0xdf69:
+			if (outLength) *outLength = 2;
+			return &Items[1123];
+		break;
+		case 0xdf68:
+			if (outLength) *outLength = 2;
+			return &Items[1114];
+		break;
+		case 0xdf67:
+			if (outLength) *outLength = 2;
+			return &Items[1113];
+		break;
+		case 0xdf66:
+			if (outLength) *outLength = 2;
+			return &Items[1115];
+		break;
+		case 0xdf65:
+			if (outLength) *outLength = 2;
+			return &Items[1104];
+		break;
+		case 0xdf64:
+			if (outLength) *outLength = 2;
+			return &Items[1089];
+		break;
+		case 0xdf63:
+			if (outLength) *outLength = 2;
+			return &Items[1105];
+		break;
+		case 0xdf62:
+			if (outLength) *outLength = 2;
+			return &Items[1111];
+		break;
+		case 0xdf61:
+			if (outLength) *outLength = 2;
+			return &Items[1112];
+		break;
+		case 0xdf60:
+			if (outLength) *outLength = 2;
+			return &Items[1077];
+		break;
+		case 0xdf5f:
+			if (outLength) *outLength = 2;
+			return &Items[1095];
+		break;
+		case 0xdf5e:
+			if (outLength) *outLength = 2;
+			return &Items[1082];
+		break;
+		case 0xdf5d:
+			if (outLength) *outLength = 2;
+			return &Items[1101];
+		break;
+		case 0xdf5c:
+			if (outLength) *outLength = 2;
+			return &Items[1102];
+		break;
+		case 0xdf5b:
+			if (outLength) *outLength = 2;
+			return &Items[1107];
+		break;
+		case 0xdf5a:
+			if (outLength) *outLength = 2;
+			return &Items[1109];
+		break;
+		case 0xdf59:
+			if (outLength) *outLength = 2;
+			return &Items[1108];
+		break;
+		case 0xdf58:
+			if (outLength) *outLength = 2;
+			return &Items[1110];
+		break;
+		case 0xdf57:
+			if (outLength) *outLength = 2;
+			return &Items[1090];
+		break;
+		case 0xdf56:
+			if (outLength) *outLength = 2;
+			return &Items[1091];
+		break;
+		case 0xdf55:
+			if (outLength) *outLength = 2;
+			return &Items[1092];
+		break;
+		case 0xdf54:
+			if (outLength) *outLength = 2;
+			return &Items[1094];
+		break;
+		case 0xdf53:
+			if (outLength) *outLength = 2;
+			return &Items[1063];
+		break;
+		case 0xdf52:
+			if (outLength) *outLength = 2;
+			return &Items[1065];
+		break;
+		case 0xdf51:
+			if (outLength) *outLength = 2;
+			return &Items[1066];
+		break;
+		case 0xdf50:
+			if (outLength) *outLength = 2;
+			return &Items[1057];
+		break;
+		case 0xdf4f:
+			if (outLength) *outLength = 2;
+			return &Items[1055];
+		break;
+		case 0xdf4e:
+			if (outLength) *outLength = 2;
+			return &Items[1056];
+		break;
+		case 0xdf4d:
+			if (outLength) *outLength = 2;
+			return &Items[1067];
+		break;
+		case 0xdf4c:
+			if (outLength) *outLength = 2;
+			return &Items[1060];
+		break;
+		case 0xdf4b:
+			if (outLength) *outLength = 2;
+			return &Items[1059];
+		break;
+		case 0xdf4a:
+			if (outLength) *outLength = 2;
+			return &Items[1058];
+		break;
+		case 0xdf49:
+			if (outLength) *outLength = 2;
+			return &Items[1061];
+		break;
+		case 0xdf48:
+			if (outLength) *outLength = 2;
+			return &Items[1064];
+		break;
+		case 0xdf47:
+			if (outLength) *outLength = 2;
+			return &Items[1062];
+		break;
+		case 0xdf46:
+			if (outLength) *outLength = 2;
+			return &Items[1071];
+		break;
+		case 0xdf45:
+			if (outLength) *outLength = 2;
+			return &Items[1070];
+		break;
+		case 0xdf44:
+			if (outLength) *outLength = 2;
+			return &Items[998];
+		break;
+		case 0xdf43:
+			if (outLength) *outLength = 2;
+			return &Items[995];
+		break;
+		case 0xdf42:
+			if (outLength) *outLength = 2;
+			return &Items[996];
+		break;
+		case 0xdf41:
+			if (outLength) *outLength = 2;
+			return &Items[997];
+		break;
+		case 0xdf40:
+			if (outLength) *outLength = 2;
+			return &Items[992];
+		break;
+		case 0xdf3f:
+			if (outLength) *outLength = 2;
+			return &Items[990];
+		break;
+		case 0xdf3e:
+			if (outLength) *outLength = 2;
+			return &Items[999];
+		break;
+		case 0xdf3d:
+			if (outLength) *outLength = 2;
+			return &Items[1074];
+		break;
+		case 0xdf3c:
+			if (outLength) *outLength = 2;
+			return &Items[1005];
+		break;
+		case 0xdf3b:
+			if (outLength) *outLength = 2;
+			return &Items[1004];
+		break;
+		case 0xdf3a:
+			if (outLength) *outLength = 2;
+			return &Items[1007];
+		break;
+		case 0xdf39:
+			if (outLength) *outLength = 2;
+			return &Items[1002];
+		break;
+		case 0xdf38:
+			if (outLength) *outLength = 2;
+			return &Items[1006];
+		break;
+		case 0xdf37:
+			if (outLength) *outLength = 2;
+			return &Items[1001];
+		break;
+		case 0xdf36:
+			if (outLength) *outLength = 2;
+			return &Items[1075];
+		break;
+		case 0xdf35:
+			if (outLength) *outLength = 2;
+			return &Items[984];
+		break;
+		case 0xdf34:
+			if (outLength) *outLength = 2;
+			return &Items[988];
+		break;
+		case 0xdf33:
+			if (outLength) *outLength = 2;
+			return &Items[987];
+		break;
+		case 0xdf32:
+			if (outLength) *outLength = 2;
+			return &Items[986];
+		break;
+		case 0xdf31:
+			if (outLength) *outLength = 2;
+			return &Items[989];
+		break;
+		case 0xdf30:
+			if (outLength) *outLength = 2;
+			return &Items[1078];
+		break;
+		case 0xdf2f:
+			if (outLength) *outLength = 2;
+			return &Items[1098];
+		break;
+		case 0xdf2e:
+			if (outLength) *outLength = 2;
+			return &Items[1097];
+		break;
+		case 0xdf2d:
+			if (outLength) *outLength = 2;
+			return &Items[1093];
+		break;
+		case 0xdf2c:
+			if (outLength) *outLength = 2;
+			return &Items[1047];
+		break;
+		case 0xdf2b:
+			if (outLength) *outLength = 2;
+			return &Items[1050];
+		break;
+		case 0xdf2a:
+			if (outLength) *outLength = 2;
+			return &Items[1049];
+		break;
+		case 0xdf29:
+			if (outLength) *outLength = 2;
+			return &Items[1042];
+		break;
+		case 0xdf28:
+			if (outLength) *outLength = 2;
+			return &Items[1043];
+		break;
+		case 0xdf27:
+			if (outLength) *outLength = 2;
+			return &Items[1040];
+		break;
+		case 0xdf26:
+			if (outLength) *outLength = 2;
+			return &Items[1037];
+		break;
+		case 0xdf25:
+			if (outLength) *outLength = 2;
+			return &Items[1036];
+		break;
+		case 0xdf24:
+			if (outLength) *outLength = 2;
+			return &Items[1034];
+		break;
+		case 0xdf21:
+			if (outLength) *outLength = 2;
+			return &Items[1546];
+		break;
+		case 0xdf20:
+			if (outLength) *outLength = 2;
+			return &Items[1455];
+		break;
+		case 0xdf1f:
+			if (outLength) *outLength = 2;
+			return &Items[1027];
+		break;
+		case 0xdf1e:
+			if (outLength) *outLength = 2;
+			return &Items[1021];
+		break;
+		case 0xdf1d:
+			if (outLength) *outLength = 2;
+			return &Items[1020];
+		break;
+		case 0xdf1c:
+			if (outLength) *outLength = 2;
+			return &Items[1023];
+		break;
+		case 0xdf1b:
+			if (outLength) *outLength = 2;
+			return &Items[1022];
+		break;
+		case 0xdf1a:
+			if (outLength) *outLength = 2;
+			return &Items[1019];
+		break;
+		case 0xdf19:
+			if (outLength) *outLength = 2;
+			return &Items[1024];
+		break;
+		case 0xdf18:
+			if (outLength) *outLength = 2;
+			return &Items[1014];
+		break;
+		case 0xdf17:
+			if (outLength) *outLength = 2;
+			return &Items[1013];
+		break;
+		case 0xdf16:
+			if (outLength) *outLength = 2;
+			return &Items[1012];
+		break;
+		case 0xdf15:
+			if (outLength) *outLength = 2;
+			return &Items[1011];
+		break;
+		case 0xdf14:
+			if (outLength) *outLength = 2;
+			return &Items[1018];
+		break;
+		case 0xdf13:
+			if (outLength) *outLength = 2;
+			return &Items[1017];
+		break;
+		case 0xdf12:
+			if (outLength) *outLength = 2;
+			return &Items[1016];
+		break;
+		case 0xdf11:
+			if (outLength) *outLength = 2;
+			return &Items[1015];
+		break;
+		case 0xdf10:
+			if (outLength) *outLength = 2;
+			return &Items[1748];
+		break;
+		case 0xdf0f:
+			if (outLength) *outLength = 2;
+			return &Items[1010];
+		break;
+		case 0xdf0e:
+			if (outLength) *outLength = 2;
+			return &Items[1008];
+		break;
+		case 0xdf0d:
+			if (outLength) *outLength = 2;
+			return &Items[1009];
+		break;
+		case 0xdf0c:
+			if (outLength) *outLength = 2;
+			return &Items[1462];
+		break;
+		case 0xdf0b:
+			if (outLength) *outLength = 2;
+			return &Items[1421];
+		break;
+		case 0xdf0a:
+			if (outLength) *outLength = 2;
+			return &Items[1051];
+		break;
+		case 0xdf09:
+			if (outLength) *outLength = 2;
+			return &Items[1463];
+		break;
+		case 0xdf08:
+			if (outLength) *outLength = 2;
+			return &Items[1038];
+		break;
+		case 0xdf07:
+			if (outLength) *outLength = 2;
+			return &Items[1458];
+		break;
+		case 0xdf06:
+			if (outLength) *outLength = 2;
+			return &Items[1459];
+		break;
+		case 0xdf05:
+			if (outLength) *outLength = 2;
+			return &Items[1453];
+		break;
+		case 0xdf04:
+			if (outLength) *outLength = 2;
+			return &Items[1454];
+		break;
+		case 0xdf03:
+			if (outLength) *outLength = 2;
+			return &Items[1461];
+		break;
+		case 0xdf02:
+			if (outLength) *outLength = 2;
+			return &Items[894];
+		break;
+		case 0xdf01:
+			if (outLength) *outLength = 2;
+			return &Items[1464];
+		break;
+		case 0xdf00:
+			if (outLength) *outLength = 2;
+			return &Items[1751];
+		break;
+		case 0xde51:
+			if (outLength) *outLength = 2;
+			return &Items[1685];
+		break;
+		case 0xde50:
+			if (outLength) *outLength = 2;
+			return &Items[1698];
+		break;
+		case 0xde3a:
+			if (outLength) *outLength = 2;
+			return &Items[1693];
+		break;
+		case 0xde39:
+			if (outLength) *outLength = 2;
+			return &Items[1703];
+		break;
+		case 0xde38:
+			if (outLength) *outLength = 2;
+			return &Items[1692];
+		break;
+		case 0xde37:
+			if (outLength) *outLength = 2;
+			return &Items[1694];
+		break;
+		case 0xde36:
+			if (outLength) *outLength = 2;
+			return &Items[1690];
+		break;
+		case 0xde35:
+			if (outLength) *outLength = 2;
+			return &Items[1702];
+		break;
+		case 0xde34:
+			if (outLength) *outLength = 2;
+			return &Items[1701];
+		break;
+		case 0xde33:
+			if (outLength) *outLength = 2;
+			return &Items[1757];
+		break;
+		case 0xde32:
+			if (outLength) *outLength = 2;
+			return &Items[1704];
+		break;
+		case 0xde2f:
+			if (outLength) *outLength = 2;
+			return &Items[1743];
+		break;
+		case 0xde1a:
+			if (outLength) *outLength = 2;
+			return &Items[1691];
+		break;
+		case 0xde02:
+			if (outLength) *outLength = 2;
+			return &Items[1758];
+		break;
+		case 0xde01:
+			if (outLength) *outLength = 2;
+			return &Items[1770];
+		break;
+		case 0xddff:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2166];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2165];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2119];
+				break;
+				}
+			}
+		break;
+		case 0xddfe:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2061];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2164];
+				break;
+				}
+			}
+		break;
+		case 0xddfd:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c && (ch + 3)->unicode() == 0xddf0) {
+				if (outLength) *outLength = 4;
+				return &Items[2037];
+			}
+		break;
+		case 0xddfc:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2104];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[2162];
+				break;
+				}
+			}
+		break;
+		case 0xddfb:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2158];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2161];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2150];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[1950];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2160];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2129];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2159];
+				break;
+				}
+			}
+		break;
+		case 0xddfa:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2157];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2156];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2155];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2151];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2152];
+				break;
+				}
+			}
+		break;
+		case 0xddf9:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2138];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2136];
+				break;
+				case 0xddfb:
+					if (outLength) *outLength = 4;
+					return &Items[2149];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2144];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2146];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2143];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2145];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2147];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2140];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2142];
+				break;
+				case 0xddef:
+					if (outLength) *outLength = 4;
+					return &Items[2137];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2139];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2141];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1999];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[1963];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2148];
+				break;
+				}
+			}
+		break;
+		case 0xddf8:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2132];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2135];
+				break;
+				case 0xddfd:
+					if (outLength) *outLength = 4;
+					return &Items[2113];
+				break;
+				case 0xddfb:
+					if (outLength) *outLength = 4;
+					return &Items[1986];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2106];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2121];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2131];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2118];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2108];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2105];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2111];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2114];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2115];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2125];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2112];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2133];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[2130];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2110];
+				break;
+				case 0xdde7:
+					if (outLength) *outLength = 4;
+					return &Items[2117];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2107];
+				break;
+				}
+			}
+		break;
+		case 0xddf7:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2103];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2102];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2109];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2101];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2100];
+				break;
+				}
+			}
+		break;
+		case 0xddf6:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c && (ch + 3)->unicode() == 0xdde6) {
+				if (outLength) *outLength = 4;
+				return &Items[2099];
+			}
+		break;
+		case 0xddf5:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2092];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2088];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2097];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2089];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2098];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2095];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2128];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2096];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2087];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2094];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2091];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1998];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2093];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2090];
+				break;
+				}
+			}
+		break;
+		case 0xddf4:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c && (ch + 3)->unicode() == 0xddf2) {
+				if (outLength) *outLength = 4;
+				return &Items[2086];
+			}
+		break;
+		case 0xddf3:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2077];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2081];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2073];
+				break;
+				case 0xddf5:
+					if (outLength) *outLength = 4;
+					return &Items[2074];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2085];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2075];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2078];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2080];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[2082];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2079];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2076];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2072];
+				break;
+				}
+			}
+		break;
+		case 0xddf2:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2070];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2053];
+				break;
+				case 0xddfd:
+					if (outLength) *outLength = 4;
+					return &Items[2062];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2052];
+				break;
+				case 0xddfb:
+					if (outLength) *outLength = 4;
+					return &Items[2054];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2060];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2056];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2068];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2059];
+				break;
+				case 0xddf6:
+					if (outLength) *outLength = 4;
+					return &Items[2058];
+				break;
+				case 0xddf5:
+					if (outLength) *outLength = 4;
+					return &Items[2084];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2049];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2066];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2071];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2055];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2050];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2057];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2051];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2067];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[2064];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2065];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2069];
+				break;
+				}
+			}
+		break;
+		case 0xddf1:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2045];
+				break;
+				case 0xddfb:
+					if (outLength) *outLength = 4;
+					return &Items[2041];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2048];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2047];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2043];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2044];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2123];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2046];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[2127];
+				break;
+				case 0xdde7:
+					if (outLength) *outLength = 4;
+					return &Items[2042];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2040];
+				break;
+				}
+			}
+		break;
+		case 0xddf0:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[2034];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[1961];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2038];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2120];
+				break;
+				case 0xddf5:
+					if (outLength) *outLength = 4;
+					return &Items[2083];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2126];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[1969];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2036];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[1955];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2039];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2035];
+				break;
+				}
+			}
+		break;
+		case 0xddef:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddf5:
+					if (outLength) *outLength = 4;
+					return &Items[2030];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[2033];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2029];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2032];
+				break;
+				}
+			}
+		break;
+		case 0xddee:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2028];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2020];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2023];
+				break;
+				case 0xddf6:
+					if (outLength) *outLength = 4;
+					return &Items[2024];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1949];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2021];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2026];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2027];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2025];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[2022];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[1958];
+				break;
+				}
+			}
+		break;
+		case 0xdded:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2019];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2016];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1975];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2017];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[2018];
+				break;
+				}
+			}
+		break;
+		case 0xddec:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[2015];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[2014];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[2010];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[2011];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2116];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[2006];
+				break;
+				case 0xddf6:
+					if (outLength) *outLength = 4;
+					return &Items[1987];
+				break;
+				case 0xddf5:
+					if (outLength) *outLength = 4;
+					return &Items[2009];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[2013];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2001];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2007];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[2005];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2004];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[2012];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1997];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2002];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[2008];
+				break;
+				case 0xdde7:
+					if (outLength) *outLength = 4;
+					return &Items[2154];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[2000];
+				break;
+				}
+			}
+		break;
+		case 0xddeb:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1996];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1993];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[2063];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[1992];
+				break;
+				case 0xddef:
+					if (outLength) *outLength = 4;
+					return &Items[1994];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[1995];
+				break;
+				}
+			}
+		break;
+		case 0xddea:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[1991];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[1990];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[2122];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1988];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2163];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[1985];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[1989];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[1984];
+				break;
+				}
+			}
+		break;
+		case 0xdde9:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[1922];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1983];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[1982];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[1980];
+				break;
+				case 0xddef:
+					if (outLength) *outLength = 4;
+					return &Items[1981];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2003];
+				break;
+				}
+			}
+		break;
+		case 0xdde8:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[1979];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[1978];
+				break;
+				case 0xddfd:
+					if (outLength) *outLength = 4;
+					return &Items[1966];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[1977];
+				break;
+				case 0xddfb:
+					if (outLength) *outLength = 4;
+					return &Items[1959];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[1976];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1973];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1968];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[1965];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[1956];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[1964];
+				break;
+				case 0xddf0:
+					if (outLength) *outLength = 4;
+					return &Items[1972];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[1974];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[2134];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[1970];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1962];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[1971];
+				break;
+				case 0xdde8:
+					if (outLength) *outLength = 4;
+					return &Items[1967];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[1957];
+				break;
+				}
+			}
+		break;
+		case 0xdde7:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[1941];
+				break;
+				case 0xddfe:
+					if (outLength) *outLength = 4;
+					return &Items[1939];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[1947];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[1944];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[1935];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1948];
+				break;
+				case 0xddf6:
+					if (outLength) *outLength = 4;
+					return &Items[1960];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1945];
+				break;
+				case 0xddf3:
+					if (outLength) *outLength = 4;
+					return &Items[1951];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[1943];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[2124];
+				break;
+				case 0xddef:
+					if (outLength) *outLength = 4;
+					return &Items[1942];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[1954];
+				break;
+				case 0xdded:
+					if (outLength) *outLength = 4;
+					return &Items[1936];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[1952];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1953];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[1940];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[1937];
+				break;
+				case 0xdde7:
+					if (outLength) *outLength = 4;
+					return &Items[1938];
+				break;
+				case 0xdde6:
+					if (outLength) *outLength = 4;
+					return &Items[1946];
+				break;
+				}
+			}
+		break;
+		case 0xdde6:
+			if (ch + 3 < end && (ch + 2)->unicode() == 0xd83c) {
+				switch ((ch + 3)->unicode()) {
+				case 0xddff:
+					if (outLength) *outLength = 4;
+					return &Items[1934];
+				break;
+				case 0xddfd:
+					if (outLength) *outLength = 4;
+					return &Items[1920];
+				break;
+				case 0xddfc:
+					if (outLength) *outLength = 4;
+					return &Items[1931];
+				break;
+				case 0xddfa:
+					if (outLength) *outLength = 4;
+					return &Items[1932];
+				break;
+				case 0xddf9:
+					if (outLength) *outLength = 4;
+					return &Items[1933];
+				break;
+				case 0xddf8:
+					if (outLength) *outLength = 4;
+					return &Items[1923];
+				break;
+				case 0xddf7:
+					if (outLength) *outLength = 4;
+					return &Items[1929];
+				break;
+				case 0xddf6:
+					if (outLength) *outLength = 4;
+					return &Items[1927];
+				break;
+				case 0xddf4:
+					if (outLength) *outLength = 4;
+					return &Items[1925];
+				break;
+				case 0xddf2:
+					if (outLength) *outLength = 4;
+					return &Items[1930];
+				break;
+				case 0xddf1:
+					if (outLength) *outLength = 4;
+					return &Items[1921];
+				break;
+				case 0xddee:
+					if (outLength) *outLength = 4;
+					return &Items[1926];
+				break;
+				case 0xddec:
+					if (outLength) *outLength = 4;
+					return &Items[1928];
+				break;
+				case 0xddeb:
+					if (outLength) *outLength = 4;
+					return &Items[1919];
+				break;
+				case 0xddea:
+					if (outLength) *outLength = 4;
+					return &Items[2153];
+				break;
+				case 0xdde9:
+					if (outLength) *outLength = 4;
+					return &Items[1924];
+				break;
+				}
+			}
+		break;
+		case 0xdd9a:
+			if (outLength) *outLength = 2;
+			return &Items[1696];
+		break;
+		case 0xdd99:
+			if (outLength) *outLength = 2;
+			return &Items[1778];
+		break;
+		case 0xdd98:
+			if (outLength) *outLength = 2;
+			return &Items[1710];
+		break;
+		case 0xdd97:
+			if (outLength) *outLength = 2;
+			return &Items[1777];
+		break;
+		case 0xdd96:
+			if (outLength) *outLength = 2;
+			return &Items[1776];
+		break;
+		case 0xdd95:
+			if (outLength) *outLength = 2;
+			return &Items[1780];
+		break;
+		case 0xdd94:
+			if (outLength) *outLength = 2;
+			return &Items[1683];
+		break;
+		case 0xdd93:
+			if (outLength) *outLength = 2;
+			return &Items[1781];
+		break;
+		case 0xdd92:
+			if (outLength) *outLength = 2;
+			return &Items[1779];
+		break;
+		case 0xdd91:
+			if (outLength) *outLength = 2;
+			return &Items[1708];
+		break;
+		case 0xdd8e:
+			if (outLength) *outLength = 2;
+			return &Items[1707];
+		break;
+		case 0xdd7f:
+			if (outLength) *outLength = 2;
+			return &Items[1756];
+		break;
+		case 0xdd7e:
+			if (outLength) *outLength = 2;
+			return &Items[1709];
+		break;
+		case 0xdd71:
+			if (outLength) *outLength = 2;
+			return &Items[1706];
+		break;
+		case 0xdd70:
+			if (outLength) *outLength = 2;
+			return &Items[1705];
+		break;
+		case 0xdccf:
+			if (outLength) *outLength = 2;
+			return &Items[1887];
+		break;
+		case 0xdc04:
+			if (outLength) *outLength = 2;
+			return &Items[1889];
+		break;
+		}
+	break;
+	case 0x3299:
+		if (outLength) *outLength = 1;
+		return &Items[1699];
+	break;
+	case 0x3297:
+		if (outLength) *outLength = 1;
+		return &Items[1700];
+	break;
+	case 0x303d:
+		if (outLength) *outLength = 1;
+		return &Items[1735];
+	break;
+	case 0x3030:
+		if (outLength) *outLength = 1;
+		return &Items[1840];
+	break;
+	case 0x2b55:
+		if (outLength) *outLength = 1;
+		return &Items[1712];
+	break;
+	case 0x2b50:
+		if (outLength) *outLength = 1;
+		return &Items[1026];
+	break;
+	case 0x2b1c:
+		if (outLength) *outLength = 1;
+		return &Items[1870];
+	break;
+	case 0x2b1b:
+		if (outLength) *outLength = 1;
+		return &Items[1869];
+	break;
+	case 0x2b07:
+		if (outLength) *outLength = 1;
+		return &Items[1813];
+	break;
+	case 0x2b06:
+		if (outLength) *outLength = 1;
+		return &Items[1812];
+	break;
+	case 0x2b05:
+		if (outLength) *outLength = 1;
+		return &Items[1811];
+	break;
+	case 0x2935:
+		if (outLength) *outLength = 1;
+		return &Items[1823];
+	break;
+	case 0x2934:
+		if (outLength) *outLength = 1;
+		return &Items[1822];
+	break;
+	case 0x27bf:
+		if (outLength) *outLength = 1;
+		return &Items[1842];
+	break;
+	case 0x27b0:
+		if (outLength) *outLength = 1;
+		return &Items[1841];
+	break;
+	case 0x27a1:
+		if (outLength) *outLength = 1;
+		return &Items[1810];
+	break;
+	case 0x2797:
+		if (outLength) *outLength = 1;
+		return &Items[1833];
+	break;
+	case 0x2796:
+		if (outLength) *outLength = 1;
+		return &Items[1832];
+	break;
+	case 0x2795:
+		if (outLength) *outLength = 1;
+		return &Items[1831];
+	break;
+	case 0x2764:
+		if (outLength) *outLength = 1;
+		return &Items[1643];
+	break;
+	case 0x2763:
+		if (outLength) *outLength = 1;
+		return &Items[1650];
+	break;
+	case 0x2757:
+		if (outLength) *outLength = 1;
+		return &Items[1727];
+	break;
+	case 0x2755:
+		if (outLength) *outLength = 1;
+		return &Items[1728];
+	break;
+	case 0x2754:
+		if (outLength) *outLength = 1;
+		return &Items[1730];
+	break;
+	case 0x2753:
+		if (outLength) *outLength = 1;
+		return &Items[1729];
+	break;
+	case 0x274e:
+		if (outLength) *outLength = 1;
+		return &Items[1747];
+	break;
+	case 0x274c:
+		if (outLength) *outLength = 1;
+		return &Items[1711];
+	break;
+	case 0x2747:
+		if (outLength) *outLength = 1;
+		return &Items[1745];
+	break;
+	case 0x2744:
+		if (outLength) *outLength = 1;
+		return &Items[1046];
+	break;
+	case 0x2734:
+		if (outLength) *outLength = 1;
+		return &Items[1695];
+	break;
+	case 0x2733:
+		if (outLength) *outLength = 1;
+		return &Items[1746];
+	break;
+	case 0x2728:
+		if (outLength) *outLength = 1;
+		return &Items[1028];
+	break;
+	case 0x2721:
+		if (outLength) *outLength = 1;
+		return &Items[1664];
+	break;
+	case 0x271d:
+		if (outLength) *outLength = 1;
+		return &Items[1660];
+	break;
+	case 0x2716:
+		if (outLength) *outLength = 1;
+		return &Items[1834];
+	break;
+	case 0x2714:
+		if (outLength) *outLength = 1;
+		return &Items[1848];
+	break;
+	case 0x2712:
+		if (outLength) *outLength = 1;
+		return &Items[1632];
+	break;
+	case 0x270f:
+		if (outLength) *outLength = 1;
+		return &Items[1636];
+	break;
+	case 0x270d:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xd83c) {
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (outLength) *outLength = 3;
+				return &Items[264];
+			break;
+			case 0xdffe:
+				if (outLength) *outLength = 3;
+				return &Items[263];
+			break;
+			case 0xdffd:
+				if (outLength) *outLength = 3;
+				return &Items[262];
+			break;
+			case 0xdffc:
+				if (outLength) *outLength = 3;
+				return &Items[261];
+			break;
+			case 0xdffb:
+				if (outLength) *outLength = 3;
+				return &Items[260];
+			break;
+			}
+		}
+		if (outLength) *outLength = 1;
+		return &Items[259];
+	break;
+	case 0x270c:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xd83c) {
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (outLength) *outLength = 3;
+				return &Items[168];
+			break;
+			case 0xdffe:
+				if (outLength) *outLength = 3;
+				return &Items[167];
+			break;
+			case 0xdffd:
+				if (outLength) *outLength = 3;
+				return &Items[166];
+			break;
+			case 0xdffc:
+				if (outLength) *outLength = 3;
+				return &Items[165];
+			break;
+			case 0xdffb:
+				if (outLength) *outLength = 3;
+				return &Items[164];
+			break;
+			}
+		}
+		if (outLength) *outLength = 1;
+		return &Items[163];
+	break;
+	case 0x270b:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xd83c) {
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (outLength) *outLength = 3;
+				return &Items[216];
+			break;
+			case 0xdffe:
+				if (outLength) *outLength = 3;
+				return &Items[215];
+			break;
+			case 0xdffd:
+				if (outLength) *outLength = 3;
+				return &Items[214];
+			break;
+			case 0xdffc:
+				if (outLength) *outLength = 3;
+				return &Items[213];
+			break;
+			case 0xdffb:
+				if (outLength) *outLength = 3;
+				return &Items[212];
+			break;
+			}
+		}
+		if (outLength) *outLength = 1;
+		return &Items[211];
+	break;
+	case 0x270a:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xd83c) {
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (outLength) *outLength = 3;
+				return &Items[144];
+			break;
+			case 0xdffe:
+				if (outLength) *outLength = 3;
+				return &Items[143];
+			break;
+			case 0xdffd:
+				if (outLength) *outLength = 3;
+				return &Items[142];
+			break;
+			case 0xdffc:
+				if (outLength) *outLength = 3;
+				return &Items[141];
+			break;
+			case 0xdffb:
+				if (outLength) *outLength = 3;
+				return &Items[140];
+			break;
+			}
+		}
+		if (outLength) *outLength = 1;
+		return &Items[139];
+	break;
+	case 0x2709:
+		if (outLength) *outLength = 1;
+		return &Items[1576];
+	break;
+	case 0x2708:
+		if (outLength) *outLength = 1;
+		return &Items[1385];
+	break;
+	case 0x2705:
+		if (outLength) *outLength = 1;
+		return &Items[1742];
+	break;
+	case 0x2702:
+		if (outLength) *outLength = 1;
+		return &Items[1629];
+	break;
+	case 0x26fd:
+		if (outLength) *outLength = 1;
+		return &Items[1400];
+	break;
+	case 0x26fa:
+		if (outLength) *outLength = 1;
+		return &Items[1424];
+	break;
+	case 0x26f9:
+		if (ch + 2 < end) switch ((ch + 1)->unicode()) {
+		case 0xfe0f:
+			if (ch + 4 < end && (ch + 2)->unicode() == 0x200d && (ch + 3)->unicode() == 0x2640 && (ch + 4)->unicode() == 0xfe0f) {
+				if (outLength) *outLength = 5;
+				return &Items[1191];
+			}
+		break;
+		case 0xd83c:
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1196];
+				}
+				if (outLength) *outLength = 3;
+				return &Items[1202];
+			break;
+			case 0xdffe:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1195];
+				}
+				if (outLength) *outLength = 3;
+				return &Items[1201];
+			break;
+			case 0xdffd:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1194];
+				}
+				if (outLength) *outLength = 3;
+				return &Items[1200];
+			break;
+			case 0xdffc:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1193];
+				}
+				if (outLength) *outLength = 3;
+				return &Items[1199];
+			break;
+			case 0xdffb:
+				if (ch + 5 < end && (ch + 3)->unicode() == 0x200d && (ch + 4)->unicode() == 0x2640 && (ch + 5)->unicode() == 0xfe0f) {
+					if (outLength) *outLength = 6;
+					return &Items[1192];
+				}
+				if (outLength) *outLength = 3;
+				return &Items[1198];
+			break;
+			}
+		break;
+		}
+		if (outLength) *outLength = 1;
+		return &Items[1197];
+	break;
+	case 0x26f8:
+		if (outLength) *outLength = 1;
+		return &Items[1160];
+	break;
+	case 0x26f7:
+		if (outLength) *outLength = 1;
+		return &Items[1162];
+	break;
+	case 0x26f5:
+		if (outLength) *outLength = 1;
+		return &Items[1392];
+	break;
+	case 0x26f4:
+		if (outLength) *outLength = 1;
+		return &Items[1396];
+	break;
+	case 0x26f3:
+		if (outLength) *outLength = 1;
+		return &Items[1155];
+	break;
+	case 0x26f2:
+		if (outLength) *outLength = 1;
+		return &Items[1407];
+	break;
+	case 0x26f1:
+		if (outLength) *outLength = 1;
+		return &Items[1415];
+	break;
+	case 0x26f0:
+		if (outLength) *outLength = 1;
+		return &Items[1418];
+	break;
+	case 0x26ea:
+		if (outLength) *outLength = 1;
+		return &Items[1445];
+	break;
+	case 0x26e9:
+		if (outLength) *outLength = 1;
+		return &Items[1449];
+	break;
+	case 0x26d4:
+		if (outLength) *outLength = 1;
+		return &Items[1714];
+	break;
+	case 0x26d3:
+		if (outLength) *outLength = 1;
+		return &Items[1526];
+	break;
+	case 0x26d1:
+		if (outLength) *outLength = 1;
+		return &Items[886];
+	break;
+	case 0x26cf:
+		if (outLength) *outLength = 1;
+		return &Items[1523];
+	break;
+	case 0x26ce:
+		if (outLength) *outLength = 1;
+		return &Items[1670];
+	break;
+	case 0x26c8:
+		if (outLength) *outLength = 1;
+		return &Items[1041];
+	break;
+	case 0x26c5:
+		if (outLength) *outLength = 1;
+		return &Items[1035];
+	break;
+	case 0x26c4:
+		if (outLength) *outLength = 1;
+		return &Items[1045];
+	break;
+	case 0x26be:
+		if (outLength) *outLength = 1;
+		return &Items[1144];
+	break;
+	case 0x26bd:
+		if (outLength) *outLength = 1;
+		return &Items[1141];
+	break;
+	case 0x26b1:
+		if (outLength) *outLength = 1;
+		return &Items[1535];
+	break;
+	case 0x26b0:
+		if (outLength) *outLength = 1;
+		return &Items[1534];
+	break;
+	case 0x26ab:
+		if (outLength) *outLength = 1;
+		return &Items[1852];
+	break;
+	case 0x26aa:
+		if (outLength) *outLength = 1;
+		return &Items[1851];
+	break;
+	case 0x26a1:
+		if (outLength) *outLength = 1;
+		return &Items[1029];
+	break;
+	case 0x26a0:
+		if (outLength) *outLength = 1;
+		return &Items[1736];
+	break;
+	case 0x269c:
+		if (outLength) *outLength = 1;
+		return &Items[1739];
+	break;
+	case 0x269b:
+		if (outLength) *outLength = 1;
+		return &Items[1684];
+	break;
+	case 0x2699:
+		if (outLength) *outLength = 1;
+		return &Items[1525];
+	break;
+	case 0x2697:
+		if (outLength) *outLength = 1;
+		return &Items[1540];
+	break;
+	case 0x2696:
+		if (outLength) *outLength = 1;
+		return &Items[1518];
+	break;
+	case 0x2694:
+		if (outLength) *outLength = 1;
+		return &Items[1531];
+	break;
+	case 0x2693:
+		if (outLength) *outLength = 1;
+		return &Items[1398];
+	break;
+	case 0x2692:
+		if (outLength) *outLength = 1;
+		return &Items[1521];
+	break;
+	case 0x267f:
+		if (outLength) *outLength = 1;
+		return &Items[1755];
+	break;
+	case 0x267b:
+		if (outLength) *outLength = 1;
+		return &Items[1741];
+	break;
+	case 0x2668:
+		if (outLength) *outLength = 1;
+		return &Items[1719];
+	break;
+	case 0x2666:
+		if (outLength) *outLength = 1;
+		return &Items[1886];
+	break;
+	case 0x2665:
+		if (outLength) *outLength = 1;
+		return &Items[1885];
+	break;
+	case 0x2663:
+		if (outLength) *outLength = 1;
+		return &Items[1884];
+	break;
+	case 0x2660:
+		if (outLength) *outLength = 1;
+		return &Items[1883];
+	break;
+	case 0x2653:
+		if (outLength) *outLength = 1;
+		return &Items[1682];
+	break;
+	case 0x2652:
+		if (outLength) *outLength = 1;
+		return &Items[1681];
+	break;
+	case 0x2651:
+		if (outLength) *outLength = 1;
+		return &Items[1680];
+	break;
+	case 0x2650:
+		if (outLength) *outLength = 1;
+		return &Items[1679];
+	break;
+	case 0x264f:
+		if (outLength) *outLength = 1;
+		return &Items[1678];
+	break;
+	case 0x264e:
+		if (outLength) *outLength = 1;
+		return &Items[1677];
+	break;
+	case 0x264d:
+		if (outLength) *outLength = 1;
+		return &Items[1676];
+	break;
+	case 0x264c:
+		if (outLength) *outLength = 1;
+		return &Items[1675];
+	break;
+	case 0x264b:
+		if (outLength) *outLength = 1;
+		return &Items[1674];
+	break;
+	case 0x264a:
+		if (outLength) *outLength = 1;
+		return &Items[1673];
+	break;
+	case 0x2649:
+		if (outLength) *outLength = 1;
+		return &Items[1672];
+	break;
+	case 0x2648:
+		if (outLength) *outLength = 1;
+		return &Items[1671];
+	break;
+	case 0x263a:
+		if (outLength) *outLength = 1;
+		return &Items[8];
+	break;
+	case 0x2639:
+		if (outLength) *outLength = 1;
+		return &Items[37];
+	break;
+	case 0x2638:
+		if (outLength) *outLength = 1;
+		return &Items[1663];
+	break;
+	case 0x262f:
+		if (outLength) *outLength = 1;
+		return &Items[1667];
+	break;
+	case 0x262e:
+		if (outLength) *outLength = 1;
+		return &Items[1659];
+	break;
+	case 0x262a:
+		if (outLength) *outLength = 1;
+		return &Items[1661];
+	break;
+	case 0x2626:
+		if (outLength) *outLength = 1;
+		return &Items[1668];
+	break;
+	case 0x2623:
+		if (outLength) *outLength = 1;
+		return &Items[1687];
+	break;
+	case 0x2622:
+		if (outLength) *outLength = 1;
+		return &Items[1686];
+	break;
+	case 0x2620:
+		if (outLength) *outLength = 1;
+		return &Items[82];
+	break;
+	case 0x261d:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xd83c) {
+			switch ((ch + 2)->unicode()) {
+			case 0xdfff:
+				if (outLength) *outLength = 3;
+				return &Items[210];
+			break;
+			case 0xdffe:
+				if (outLength) *outLength = 3;
+				return &Items[209];
+			break;
+			case 0xdffd:
+				if (outLength) *outLength = 3;
+				return &Items[208];
+			break;
+			case 0xdffc:
+				if (outLength) *outLength = 3;
+				return &Items[207];
+			break;
+			case 0xdffb:
+				if (outLength) *outLength = 3;
+				return &Items[206];
+			break;
+			}
+		}
+		if (outLength) *outLength = 1;
+		return &Items[205];
+	break;
+	case 0x2618:
+		if (outLength) *outLength = 1;
+		return &Items[991];
+	break;
+	case 0x2615:
+		if (outLength) *outLength = 1;
+		return &Items[1127];
+	break;
+	case 0x2614:
+		if (outLength) *outLength = 1;
+		return &Items[1054];
+	break;
+	case 0x2611:
+		if (outLength) *outLength = 1;
+		return &Items[1849];
+	break;
+	case 0x260e:
+		if (outLength) *outLength = 1;
+		return &Items[1488];
+	break;
+	case 0x2604:
+		if (outLength) *outLength = 1;
+		return &Items[1032];
+	break;
+	case 0x2603:
+		if (outLength) *outLength = 1;
+		return &Items[1044];
+	break;
+	case 0x2602:
+		if (outLength) *outLength = 1;
+		return &Items[895];
+	break;
+	case 0x2601:
+		if (outLength) *outLength = 1;
+		return &Items[1039];
+	break;
+	case 0x2600:
+		if (outLength) *outLength = 1;
+		return &Items[1033];
+	break;
+	case 0x25fe:
+		if (outLength) *outLength = 1;
+		return &Items[1865];
+	break;
+	case 0x25fd:
+		if (outLength) *outLength = 1;
+		return &Items[1866];
+	break;
+	case 0x25fc:
+		if (outLength) *outLength = 1;
+		return &Items[1867];
+	break;
+	case 0x25fb:
+		if (outLength) *outLength = 1;
+		return &Items[1868];
+	break;
+	case 0x25c0:
+		if (outLength) *outLength = 1;
+		return &Items[1807];
+	break;
+	case 0x25b6:
+		if (outLength) *outLength = 1;
+		return &Items[1796];
+	break;
+	case 0x25ab:
+		if (outLength) *outLength = 1;
+		return &Items[1864];
+	break;
+	case 0x25aa:
+		if (outLength) *outLength = 1;
+		return &Items[1863];
+	break;
+	case 0x24c2:
+		if (outLength) *outLength = 1;
+		return &Items[1750];
+	break;
+	case 0x23fa:
+		if (outLength) *outLength = 1;
+		return &Items[1800];
+	break;
+	case 0x23f9:
+		if (outLength) *outLength = 1;
+		return &Items[1799];
+	break;
+	case 0x23f8:
+		if (outLength) *outLength = 1;
+		return &Items[1797];
+	break;
+	case 0x23f3:
+		if (outLength) *outLength = 1;
+		return &Items[1501];
+	break;
+	case 0x23f2:
+		if (outLength) *outLength = 1;
+		return &Items[1497];
+	break;
+	case 0x23f1:
+		if (outLength) *outLength = 1;
+		return &Items[1496];
+	break;
+	case 0x23f0:
+		if (outLength) *outLength = 1;
+		return &Items[1498];
+	break;
+	case 0x23ef:
+		if (outLength) *outLength = 1;
+		return &Items[1798];
+	break;
+	case 0x23ee:
+		if (outLength) *outLength = 1;
+		return &Items[1802];
+	break;
+	case 0x23ed:
+		if (outLength) *outLength = 1;
+		return &Items[1801];
+	break;
+	case 0x23ec:
+		if (outLength) *outLength = 1;
+		return &Items[1806];
+	break;
+	case 0x23eb:
+		if (outLength) *outLength = 1;
+		return &Items[1805];
+	break;
+	case 0x23ea:
+		if (outLength) *outLength = 1;
+		return &Items[1804];
+	break;
+	case 0x23e9:
+		if (outLength) *outLength = 1;
+		return &Items[1803];
+	break;
+	case 0x2328:
+		if (outLength) *outLength = 1;
+		return &Items[1469];
+	break;
+	case 0x231b:
+		if (outLength) *outLength = 1;
+		return &Items[1500];
+	break;
+	case 0x231a:
+		if (outLength) *outLength = 1;
+		return &Items[1465];
+	break;
+	case 0x21aa:
+		if (outLength) *outLength = 1;
+		return &Items[1820];
+	break;
+	case 0x21a9:
+		if (outLength) *outLength = 1;
+		return &Items[1821];
+	break;
+	case 0x2199:
+		if (outLength) *outLength = 1;
+		return &Items[1816];
+	break;
+	case 0x2198:
+		if (outLength) *outLength = 1;
+		return &Items[1815];
+	break;
+	case 0x2197:
+		if (outLength) *outLength = 1;
+		return &Items[1814];
+	break;
+	case 0x2196:
+		if (outLength) *outLength = 1;
+		return &Items[1817];
+	break;
+	case 0x2195:
+		if (outLength) *outLength = 1;
+		return &Items[1818];
+	break;
+	case 0x2194:
+		if (outLength) *outLength = 1;
+		return &Items[1819];
+	break;
+	case 0x2139:
+		if (outLength) *outLength = 1;
+		return &Items[1772];
+	break;
+	case 0x2122:
+		if (outLength) *outLength = 1;
+		return &Items[1837];
+	break;
+	case 0x2049:
+		if (outLength) *outLength = 1;
+		return &Items[1732];
+	break;
+	case 0x203c:
+		if (outLength) *outLength = 1;
+		return &Items[1731];
+	break;
+	case 0xae:
+		if (outLength) *outLength = 1;
+		return &Items[1839];
+	break;
+	case 0xa9:
+		if (outLength) *outLength = 1;
+		return &Items[1838];
+	break;
+	case 0x39:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1791];
+		}
+	break;
+	case 0x38:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1790];
+		}
+	break;
+	case 0x37:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1789];
+		}
+	break;
+	case 0x36:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1788];
+		}
+	break;
+	case 0x35:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1787];
+		}
+	break;
+	case 0x34:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1786];
+		}
+	break;
+	case 0x33:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1785];
+		}
+	break;
+	case 0x32:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1784];
+		}
+	break;
+	case 0x31:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1783];
+		}
+	break;
+	case 0x30:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1782];
+		}
+	break;
+	case 0x2a:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1795];
+		}
+	break;
+	case 0x23:
+		if (ch + 2 < end && (ch + 1)->unicode() == 0xfe0f && (ch + 2)->unicode() == 0x20e3) {
+			if (outLength) *outLength = 3;
+			return &Items[1794];
+		}
+	break;
+	}
+
+	return nullptr;
+}
+
+} // namespace internal
+
+void Init() {
+	auto scaleForEmoji = cRetina() ? dbisTwo : cScale();
+
+	switch (scaleForEmoji) {
+	case dbisOne: WorkingIndex = 0; break;
+	case dbisOneAndQuarter: WorkingIndex = 1; break;
+	case dbisOneAndHalf: WorkingIndex = 2; break;
+	case dbisTwo: WorkingIndex = 3; break;
+	};
+
+	Items.reserve(kCount);
+
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde00), 0, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde03), 1, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde04), 2, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde01), 3, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde06), 4, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde05), 5, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde02), 6, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd23), 7, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x263a), 8, 0, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0a), 9, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde07), 10, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde42), 11, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde43), 12, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde09), 13, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0c), 14, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0d), 15, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde18), 16, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde17), 17, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde19), 18, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1a), 19, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0b), 20, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1c), 21, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1d), 22, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1b), 23, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd11), 24, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd17), 25, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd13), 26, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0e), 27, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd21), 28, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd20), 29, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde0f), 30, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde12), 31, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1e), 32, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde14), 33, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde1f), 34, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde15), 35, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde41), 36, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2639), 37, 0, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde23), 38, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde16), 39, 0, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2b), 0, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde29), 1, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde24), 2, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde20), 3, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde21), 4, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde36), 5, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde10), 6, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde11), 7, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2f), 8, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde26), 9, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde27), 10, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2e), 11, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde32), 12, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde35), 13, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde33), 14, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde31), 15, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde28), 16, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde30), 17, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde22), 18, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde25), 19, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd24), 20, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2d), 21, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde13), 22, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2a), 23, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde34), 24, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde44), 25, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd14), 26, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd25), 27, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde2c), 28, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd10), 29, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd22), 30, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd27), 31, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde37), 32, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd12), 33, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd15), 34, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde08), 35, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7f), 36, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc79), 37, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7a), 38, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca9), 39, 1, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7b), 0, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc80), 1, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2620), 2, 2, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7d), 3, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7e), 4, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd16), 5, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf83), 6, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3a), 7, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde38), 8, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde39), 9, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3b), 10, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3c), 11, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3d), 12, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde40), 13, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3f), 14, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde3e), 15, 2, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50), 16, 2, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50, 0xd83c, 0xdffb), 17, 2, false, false, &Items[96] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50, 0xd83c, 0xdffc), 18, 2, false, false, &Items[96] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50, 0xd83c, 0xdffd), 19, 2, false, false, &Items[96] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50, 0xd83c, 0xdffe), 20, 2, false, false, &Items[96] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc50, 0xd83c, 0xdfff), 21, 2, false, false, &Items[96] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c), 22, 2, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c, 0xd83c, 0xdffb), 23, 2, false, false, &Items[102] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c, 0xd83c, 0xdffc), 24, 2, false, false, &Items[102] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c, 0xd83c, 0xdffd), 25, 2, false, false, &Items[102] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c, 0xd83c, 0xdffe), 26, 2, false, false, &Items[102] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4c, 0xd83c, 0xdfff), 27, 2, false, false, &Items[102] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f), 28, 2, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f, 0xd83c, 0xdffb), 29, 2, false, false, &Items[108] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f, 0xd83c, 0xdffc), 30, 2, false, false, &Items[108] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f, 0xd83c, 0xdffd), 31, 2, false, false, &Items[108] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f, 0xd83c, 0xdffe), 32, 2, false, false, &Items[108] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4f, 0xd83c, 0xdfff), 33, 2, false, false, &Items[108] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f), 34, 2, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f, 0xd83c, 0xdffb), 35, 2, false, false, &Items[114] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f, 0xd83c, 0xdffc), 36, 2, false, false, &Items[114] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f, 0xd83c, 0xdffd), 37, 2, false, false, &Items[114] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f, 0xd83c, 0xdffe), 38, 2, false, false, &Items[114] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4f, 0xd83c, 0xdfff), 39, 2, false, false, &Items[114] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1d), 0, 3, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d), 1, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d, 0xd83c, 0xdffb), 2, 3, false, false, &Items[121] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d, 0xd83c, 0xdffc), 3, 3, false, false, &Items[121] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d, 0xd83c, 0xdffd), 4, 3, false, false, &Items[121] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d, 0xd83c, 0xdffe), 5, 3, false, false, &Items[121] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4d, 0xd83c, 0xdfff), 6, 3, false, false, &Items[121] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e), 7, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e, 0xd83c, 0xdffb), 8, 3, false, false, &Items[127] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e, 0xd83c, 0xdffc), 9, 3, false, false, &Items[127] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e, 0xd83c, 0xdffd), 10, 3, false, false, &Items[127] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e, 0xd83c, 0xdffe), 11, 3, false, false, &Items[127] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4e, 0xd83c, 0xdfff), 12, 3, false, false, &Items[127] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a), 13, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a, 0xd83c, 0xdffb), 14, 3, false, false, &Items[133] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a, 0xd83c, 0xdffc), 15, 3, false, false, &Items[133] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a, 0xd83c, 0xdffd), 16, 3, false, false, &Items[133] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a, 0xd83c, 0xdffe), 17, 3, false, false, &Items[133] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4a, 0xd83c, 0xdfff), 18, 3, false, false, &Items[133] });
+	Items.push_back({ internal::ComputeId(0x270a), 19, 3, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x270a, 0xd83c, 0xdffb), 20, 3, false, false, &Items[139] });
+	Items.push_back({ internal::ComputeId(0x270a, 0xd83c, 0xdffc), 21, 3, false, false, &Items[139] });
+	Items.push_back({ internal::ComputeId(0x270a, 0xd83c, 0xdffd), 22, 3, false, false, &Items[139] });
+	Items.push_back({ internal::ComputeId(0x270a, 0xd83c, 0xdffe), 23, 3, false, false, &Items[139] });
+	Items.push_back({ internal::ComputeId(0x270a, 0xd83c, 0xdfff), 24, 3, false, false, &Items[139] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b), 25, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b, 0xd83c, 0xdffb), 26, 3, false, false, &Items[145] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b, 0xd83c, 0xdffc), 27, 3, false, false, &Items[145] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b, 0xd83c, 0xdffd), 28, 3, false, false, &Items[145] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b, 0xd83c, 0xdffe), 29, 3, false, false, &Items[145] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1b, 0xd83c, 0xdfff), 30, 3, false, false, &Items[145] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c), 31, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c, 0xd83c, 0xdffb), 32, 3, false, false, &Items[151] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c, 0xd83c, 0xdffc), 33, 3, false, false, &Items[151] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c, 0xd83c, 0xdffd), 34, 3, false, false, &Items[151] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c, 0xd83c, 0xdffe), 35, 3, false, false, &Items[151] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1c, 0xd83c, 0xdfff), 36, 3, false, false, &Items[151] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e), 37, 3, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e, 0xd83c, 0xdffb), 38, 3, false, false, &Items[157] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e, 0xd83c, 0xdffc), 39, 3, false, false, &Items[157] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e, 0xd83c, 0xdffd), 0, 4, false, false, &Items[157] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e, 0xd83c, 0xdffe), 1, 4, false, false, &Items[157] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1e, 0xd83c, 0xdfff), 2, 4, false, false, &Items[157] });
+	Items.push_back({ internal::ComputeId(0x270c), 3, 4, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x270c, 0xd83c, 0xdffb), 4, 4, false, false, &Items[163] });
+	Items.push_back({ internal::ComputeId(0x270c, 0xd83c, 0xdffc), 5, 4, false, false, &Items[163] });
+	Items.push_back({ internal::ComputeId(0x270c, 0xd83c, 0xdffd), 6, 4, false, false, &Items[163] });
+	Items.push_back({ internal::ComputeId(0x270c, 0xd83c, 0xdffe), 7, 4, false, false, &Items[163] });
+	Items.push_back({ internal::ComputeId(0x270c, 0xd83c, 0xdfff), 8, 4, false, false, &Items[163] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18), 9, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18, 0xd83c, 0xdffb), 10, 4, false, false, &Items[169] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18, 0xd83c, 0xdffc), 11, 4, false, false, &Items[169] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18, 0xd83c, 0xdffd), 12, 4, false, false, &Items[169] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18, 0xd83c, 0xdffe), 13, 4, false, false, &Items[169] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd18, 0xd83c, 0xdfff), 14, 4, false, false, &Items[169] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c), 15, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c, 0xd83c, 0xdffb), 16, 4, false, false, &Items[175] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c, 0xd83c, 0xdffc), 17, 4, false, false, &Items[175] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c, 0xd83c, 0xdffd), 18, 4, false, false, &Items[175] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c, 0xd83c, 0xdffe), 19, 4, false, false, &Items[175] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4c, 0xd83c, 0xdfff), 20, 4, false, false, &Items[175] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48), 21, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48, 0xd83c, 0xdffb), 22, 4, false, false, &Items[181] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48, 0xd83c, 0xdffc), 23, 4, false, false, &Items[181] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48, 0xd83c, 0xdffd), 24, 4, false, false, &Items[181] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48, 0xd83c, 0xdffe), 25, 4, false, false, &Items[181] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc48, 0xd83c, 0xdfff), 26, 4, false, false, &Items[181] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49), 27, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49, 0xd83c, 0xdffb), 28, 4, false, false, &Items[187] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49, 0xd83c, 0xdffc), 29, 4, false, false, &Items[187] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49, 0xd83c, 0xdffd), 30, 4, false, false, &Items[187] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49, 0xd83c, 0xdffe), 31, 4, false, false, &Items[187] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc49, 0xd83c, 0xdfff), 32, 4, false, false, &Items[187] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46), 33, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46, 0xd83c, 0xdffb), 34, 4, false, false, &Items[193] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46, 0xd83c, 0xdffc), 35, 4, false, false, &Items[193] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46, 0xd83c, 0xdffd), 36, 4, false, false, &Items[193] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46, 0xd83c, 0xdffe), 37, 4, false, false, &Items[193] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc46, 0xd83c, 0xdfff), 38, 4, false, false, &Items[193] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47), 39, 4, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47, 0xd83c, 0xdffb), 0, 5, false, false, &Items[199] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47, 0xd83c, 0xdffc), 1, 5, false, false, &Items[199] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47, 0xd83c, 0xdffd), 2, 5, false, false, &Items[199] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47, 0xd83c, 0xdffe), 3, 5, false, false, &Items[199] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc47, 0xd83c, 0xdfff), 4, 5, false, false, &Items[199] });
+	Items.push_back({ internal::ComputeId(0x261d), 5, 5, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x261d, 0xd83c, 0xdffb), 6, 5, false, false, &Items[205] });
+	Items.push_back({ internal::ComputeId(0x261d, 0xd83c, 0xdffc), 7, 5, false, false, &Items[205] });
+	Items.push_back({ internal::ComputeId(0x261d, 0xd83c, 0xdffd), 8, 5, false, false, &Items[205] });
+	Items.push_back({ internal::ComputeId(0x261d, 0xd83c, 0xdffe), 9, 5, false, false, &Items[205] });
+	Items.push_back({ internal::ComputeId(0x261d, 0xd83c, 0xdfff), 10, 5, false, false, &Items[205] });
+	Items.push_back({ internal::ComputeId(0x270b), 11, 5, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x270b, 0xd83c, 0xdffb), 12, 5, false, false, &Items[211] });
+	Items.push_back({ internal::ComputeId(0x270b, 0xd83c, 0xdffc), 13, 5, false, false, &Items[211] });
+	Items.push_back({ internal::ComputeId(0x270b, 0xd83c, 0xdffd), 14, 5, false, false, &Items[211] });
+	Items.push_back({ internal::ComputeId(0x270b, 0xd83c, 0xdffe), 15, 5, false, false, &Items[211] });
+	Items.push_back({ internal::ComputeId(0x270b, 0xd83c, 0xdfff), 16, 5, false, false, &Items[211] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a), 17, 5, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a, 0xd83c, 0xdffb), 18, 5, false, false, &Items[217] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a, 0xd83c, 0xdffc), 19, 5, false, false, &Items[217] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a, 0xd83c, 0xdffd), 20, 5, false, false, &Items[217] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a, 0xd83c, 0xdffe), 21, 5, false, false, &Items[217] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd1a, 0xd83c, 0xdfff), 22, 5, false, false, &Items[217] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90), 23, 5, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90, 0xd83c, 0xdffb), 24, 5, false, false, &Items[223] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90, 0xd83c, 0xdffc), 25, 5, false, false, &Items[223] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90, 0xd83c, 0xdffd), 26, 5, false, false, &Items[223] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90, 0xd83c, 0xdffe), 27, 5, false, false, &Items[223] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd90, 0xd83c, 0xdfff), 28, 5, false, false, &Items[223] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96), 29, 5, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96, 0xd83c, 0xdffb), 30, 5, false, false, &Items[229] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96, 0xd83c, 0xdffc), 31, 5, false, false, &Items[229] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96, 0xd83c, 0xdffd), 32, 5, false, false, &Items[229] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96, 0xd83c, 0xdffe), 33, 5, false, false, &Items[229] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd96, 0xd83c, 0xdfff), 34, 5, false, false, &Items[229] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b), 35, 5, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b, 0xd83c, 0xdffb), 36, 5, false, false, &Items[235] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b, 0xd83c, 0xdffc), 37, 5, false, false, &Items[235] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b, 0xd83c, 0xdffd), 38, 5, false, false, &Items[235] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b, 0xd83c, 0xdffe), 39, 5, false, false, &Items[235] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc4b, 0xd83c, 0xdfff), 0, 6, false, false, &Items[235] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19), 1, 6, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19, 0xd83c, 0xdffb), 2, 6, false, false, &Items[241] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19, 0xd83c, 0xdffc), 3, 6, false, false, &Items[241] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19, 0xd83c, 0xdffd), 4, 6, false, false, &Items[241] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19, 0xd83c, 0xdffe), 5, 6, false, false, &Items[241] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd19, 0xd83c, 0xdfff), 6, 6, false, false, &Items[241] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa), 7, 6, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa, 0xd83c, 0xdffb), 8, 6, false, false, &Items[247] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa, 0xd83c, 0xdffc), 9, 6, false, false, &Items[247] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa, 0xd83c, 0xdffd), 10, 6, false, false, &Items[247] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa, 0xd83c, 0xdffe), 11, 6, false, false, &Items[247] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaa, 0xd83c, 0xdfff), 12, 6, false, false, &Items[247] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95), 13, 6, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95, 0xd83c, 0xdffb), 14, 6, false, false, &Items[253] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95, 0xd83c, 0xdffc), 15, 6, false, false, &Items[253] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95, 0xd83c, 0xdffd), 16, 6, false, false, &Items[253] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95, 0xd83c, 0xdffe), 17, 6, false, false, &Items[253] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd95, 0xd83c, 0xdfff), 18, 6, false, false, &Items[253] });
+	Items.push_back({ internal::ComputeId(0x270d), 19, 6, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x270d, 0xd83c, 0xdffb), 20, 6, false, false, &Items[259] });
+	Items.push_back({ internal::ComputeId(0x270d, 0xd83c, 0xdffc), 21, 6, false, false, &Items[259] });
+	Items.push_back({ internal::ComputeId(0x270d, 0xd83c, 0xdffd), 22, 6, false, false, &Items[259] });
+	Items.push_back({ internal::ComputeId(0x270d, 0xd83c, 0xdffe), 23, 6, false, false, &Items[259] });
+	Items.push_back({ internal::ComputeId(0x270d, 0xd83c, 0xdfff), 24, 6, false, false, &Items[259] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33), 25, 6, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33, 0xd83c, 0xdffb), 26, 6, false, false, &Items[265] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33, 0xd83c, 0xdffc), 27, 6, false, false, &Items[265] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33, 0xd83c, 0xdffd), 28, 6, false, false, &Items[265] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33, 0xd83c, 0xdffe), 29, 6, false, false, &Items[265] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd33, 0xd83c, 0xdfff), 30, 6, false, false, &Items[265] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85), 31, 6, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85, 0xd83c, 0xdffb), 32, 6, false, false, &Items[271] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85, 0xd83c, 0xdffc), 33, 6, false, false, &Items[271] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85, 0xd83c, 0xdffd), 34, 6, false, false, &Items[271] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85, 0xd83c, 0xdffe), 35, 6, false, false, &Items[271] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc85, 0xd83c, 0xdfff), 36, 6, false, false, &Items[271] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8d), 37, 6, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc84), 38, 6, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8b), 39, 6, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc44), 0, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc45), 1, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42), 2, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42, 0xd83c, 0xdffb), 3, 7, false, false, &Items[282] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42, 0xd83c, 0xdffc), 4, 7, false, false, &Items[282] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42, 0xd83c, 0xdffd), 5, 7, false, false, &Items[282] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42, 0xd83c, 0xdffe), 6, 7, false, false, &Items[282] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc42, 0xd83c, 0xdfff), 7, 7, false, false, &Items[282] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43), 8, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43, 0xd83c, 0xdffb), 9, 7, false, false, &Items[288] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43, 0xd83c, 0xdffc), 10, 7, false, false, &Items[288] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43, 0xd83c, 0xdffd), 11, 7, false, false, &Items[288] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43, 0xd83c, 0xdffe), 12, 7, false, false, &Items[288] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc43, 0xd83c, 0xdfff), 13, 7, false, false, &Items[288] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc63), 14, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc41), 15, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc40), 16, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdde3), 17, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc64), 18, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc65), 19, 7, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76), 20, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76, 0xd83c, 0xdffb), 21, 7, false, false, &Items[300] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76, 0xd83c, 0xdffc), 22, 7, false, false, &Items[300] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76, 0xd83c, 0xdffd), 23, 7, false, false, &Items[300] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76, 0xd83c, 0xdffe), 24, 7, false, false, &Items[300] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc76, 0xd83c, 0xdfff), 25, 7, false, false, &Items[300] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66), 26, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66, 0xd83c, 0xdffb), 27, 7, false, false, &Items[306] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66, 0xd83c, 0xdffc), 28, 7, false, false, &Items[306] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66, 0xd83c, 0xdffd), 29, 7, false, false, &Items[306] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66, 0xd83c, 0xdffe), 30, 7, false, false, &Items[306] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc66, 0xd83c, 0xdfff), 31, 7, false, false, &Items[306] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67), 32, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67, 0xd83c, 0xdffb), 33, 7, false, false, &Items[312] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67, 0xd83c, 0xdffc), 34, 7, false, false, &Items[312] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67, 0xd83c, 0xdffd), 35, 7, false, false, &Items[312] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67, 0xd83c, 0xdffe), 36, 7, false, false, &Items[312] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc67, 0xd83c, 0xdfff), 37, 7, false, false, &Items[312] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68), 38, 7, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb), 39, 7, false, false, &Items[318] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc), 0, 8, false, false, &Items[318] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd), 1, 8, false, false, &Items[318] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe), 2, 8, false, false, &Items[318] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff), 3, 8, false, false, &Items[318] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69), 4, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb), 5, 8, false, false, &Items[324] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc), 6, 8, false, false, &Items[324] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd), 7, 8, false, false, &Items[324] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe), 8, 8, false, false, &Items[324] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff), 9, 8, false, false, &Items[324] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0x200d, 0x2640, 0xfe0f), 10, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 11, 8, false, false, &Items[330] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 12, 8, false, false, &Items[330] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 13, 8, false, false, &Items[330] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 14, 8, false, false, &Items[330] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 15, 8, false, false, &Items[330] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71), 16, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffb), 17, 8, false, false, &Items[336] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffc), 18, 8, false, false, &Items[336] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffd), 19, 8, false, false, &Items[336] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdffe), 20, 8, false, false, &Items[336] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc71, 0xd83c, 0xdfff), 21, 8, false, false, &Items[336] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74), 22, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74, 0xd83c, 0xdffb), 23, 8, false, false, &Items[342] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74, 0xd83c, 0xdffc), 24, 8, false, false, &Items[342] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74, 0xd83c, 0xdffd), 25, 8, false, false, &Items[342] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74, 0xd83c, 0xdffe), 26, 8, false, false, &Items[342] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc74, 0xd83c, 0xdfff), 27, 8, false, false, &Items[342] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75), 28, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75, 0xd83c, 0xdffb), 29, 8, false, false, &Items[348] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75, 0xd83c, 0xdffc), 30, 8, false, false, &Items[348] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75, 0xd83c, 0xdffd), 31, 8, false, false, &Items[348] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75, 0xd83c, 0xdffe), 32, 8, false, false, &Items[348] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc75, 0xd83c, 0xdfff), 33, 8, false, false, &Items[348] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72), 34, 8, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72, 0xd83c, 0xdffb), 35, 8, false, false, &Items[354] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72, 0xd83c, 0xdffc), 36, 8, false, false, &Items[354] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72, 0xd83c, 0xdffd), 37, 8, false, false, &Items[354] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72, 0xd83c, 0xdffe), 38, 8, false, false, &Items[354] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc72, 0xd83c, 0xdfff), 39, 8, false, false, &Items[354] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0x200d, 0x2640, 0xfe0f), 0, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 1, 9, false, false, &Items[360] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 2, 9, false, false, &Items[360] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 3, 9, false, false, &Items[360] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 4, 9, false, false, &Items[360] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 5, 9, false, false, &Items[360] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73), 6, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffb), 7, 9, false, false, &Items[366] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffc), 8, 9, false, false, &Items[366] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffd), 9, 9, false, false, &Items[366] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdffe), 10, 9, false, false, &Items[366] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc73, 0xd83c, 0xdfff), 11, 9, false, false, &Items[366] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0x200d, 0x2640, 0xfe0f), 12, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 13, 9, false, false, &Items[372] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 14, 9, false, false, &Items[372] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 15, 9, false, false, &Items[372] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 16, 9, false, false, &Items[372] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 17, 9, false, false, &Items[372] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e), 18, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffb), 19, 9, false, false, &Items[378] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffc), 20, 9, false, false, &Items[378] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffd), 21, 9, false, false, &Items[378] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdffe), 22, 9, false, false, &Items[378] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6e, 0xd83c, 0xdfff), 23, 9, false, false, &Items[378] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0x200d, 0x2640, 0xfe0f), 24, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 25, 9, false, false, &Items[384] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 26, 9, false, false, &Items[384] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 27, 9, false, false, &Items[384] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 28, 9, false, false, &Items[384] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 29, 9, false, false, &Items[384] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77), 30, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffb), 31, 9, false, false, &Items[390] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffc), 32, 9, false, false, &Items[390] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffd), 33, 9, false, false, &Items[390] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdffe), 34, 9, false, false, &Items[390] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc77, 0xd83c, 0xdfff), 35, 9, false, false, &Items[390] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0x200d, 0x2640, 0xfe0f), 36, 9, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 37, 9, false, false, &Items[396] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 38, 9, false, false, &Items[396] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 39, 9, false, false, &Items[396] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 0, 10, false, false, &Items[396] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 1, 10, false, false, &Items[396] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82), 2, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffb), 3, 10, false, false, &Items[402] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffc), 4, 10, false, false, &Items[402] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffd), 5, 10, false, false, &Items[402] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdffe), 6, 10, false, false, &Items[402] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc82, 0xd83c, 0xdfff), 7, 10, false, false, &Items[402] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xfe0f, 0x200d, 0x2640, 0xfe0f), 8, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 9, 10, false, false, &Items[408] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 10, 10, false, false, &Items[408] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 11, 10, false, false, &Items[408] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 12, 10, false, false, &Items[408] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 13, 10, false, false, &Items[408] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75), 14, 10, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffb), 15, 10, false, false, &Items[414] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffc), 16, 10, false, false, &Items[414] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffd), 17, 10, false, false, &Items[414] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdffe), 18, 10, false, false, &Items[414] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd75, 0xd83c, 0xdfff), 19, 10, false, false, &Items[414] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0x2695, 0xfe0f), 20, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0x2695, 0xfe0f), 21, 10, false, false, &Items[420] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0x2695, 0xfe0f), 22, 10, false, false, &Items[420] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0x2695, 0xfe0f), 23, 10, false, false, &Items[420] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0x2695, 0xfe0f), 24, 10, false, false, &Items[420] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0x2695, 0xfe0f), 25, 10, false, false, &Items[420] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0x2695, 0xfe0f), 26, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0x2695, 0xfe0f), 27, 10, false, false, &Items[426] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0x2695, 0xfe0f), 28, 10, false, false, &Items[426] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0x2695, 0xfe0f), 29, 10, false, false, &Items[426] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0x2695, 0xfe0f), 30, 10, false, false, &Items[426] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0x2695, 0xfe0f), 31, 10, false, false, &Items[426] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdf3e), 32, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf3e), 33, 10, false, false, &Items[432] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf3e), 34, 10, false, false, &Items[432] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf3e), 35, 10, false, false, &Items[432] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf3e), 36, 10, false, false, &Items[432] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf3e), 37, 10, false, false, &Items[432] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdf3e), 38, 10, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf3e), 39, 10, false, false, &Items[438] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf3e), 0, 11, false, false, &Items[438] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf3e), 1, 11, false, false, &Items[438] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf3e), 2, 11, false, false, &Items[438] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf3e), 3, 11, false, false, &Items[438] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdf73), 4, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf73), 5, 11, false, false, &Items[444] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf73), 6, 11, false, false, &Items[444] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf73), 7, 11, false, false, &Items[444] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf73), 8, 11, false, false, &Items[444] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf73), 9, 11, false, false, &Items[444] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdf73), 10, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf73), 11, 11, false, false, &Items[450] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf73), 12, 11, false, false, &Items[450] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf73), 13, 11, false, false, &Items[450] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf73), 14, 11, false, false, &Items[450] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf73), 15, 11, false, false, &Items[450] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdf93), 16, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf93), 17, 11, false, false, &Items[456] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf93), 18, 11, false, false, &Items[456] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf93), 19, 11, false, false, &Items[456] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf93), 20, 11, false, false, &Items[456] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf93), 21, 11, false, false, &Items[456] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdf93), 22, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdf93), 23, 11, false, false, &Items[462] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdf93), 24, 11, false, false, &Items[462] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdf93), 25, 11, false, false, &Items[462] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdf93), 26, 11, false, false, &Items[462] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdf93), 27, 11, false, false, &Items[462] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdfa4), 28, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfa4), 29, 11, false, false, &Items[468] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfa4), 30, 11, false, false, &Items[468] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfa4), 31, 11, false, false, &Items[468] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfa4), 32, 11, false, false, &Items[468] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfa4), 33, 11, false, false, &Items[468] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdfa4), 34, 11, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfa4), 35, 11, false, false, &Items[474] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfa4), 36, 11, false, false, &Items[474] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfa4), 37, 11, false, false, &Items[474] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfa4), 38, 11, false, false, &Items[474] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfa4), 39, 11, false, false, &Items[474] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdfeb), 0, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfeb), 1, 12, false, false, &Items[480] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfeb), 2, 12, false, false, &Items[480] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfeb), 3, 12, false, false, &Items[480] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfeb), 4, 12, false, false, &Items[480] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfeb), 5, 12, false, false, &Items[480] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdfeb), 6, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfeb), 7, 12, false, false, &Items[486] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfeb), 8, 12, false, false, &Items[486] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfeb), 9, 12, false, false, &Items[486] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfeb), 10, 12, false, false, &Items[486] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfeb), 11, 12, false, false, &Items[486] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdfed), 12, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfed), 13, 12, false, false, &Items[492] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfed), 14, 12, false, false, &Items[492] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfed), 15, 12, false, false, &Items[492] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfed), 16, 12, false, false, &Items[492] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfed), 17, 12, false, false, &Items[492] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdfed), 18, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfed), 19, 12, false, false, &Items[498] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfed), 20, 12, false, false, &Items[498] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfed), 21, 12, false, false, &Items[498] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfed), 22, 12, false, false, &Items[498] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfed), 23, 12, false, false, &Items[498] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdcbb), 24, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdcbb), 25, 12, false, false, &Items[504] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdcbb), 26, 12, false, false, &Items[504] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdcbb), 27, 12, false, false, &Items[504] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdcbb), 28, 12, false, false, &Items[504] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdcbb), 29, 12, false, false, &Items[504] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdcbb), 30, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdcbb), 31, 12, false, false, &Items[510] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdcbb), 32, 12, false, false, &Items[510] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdcbb), 33, 12, false, false, &Items[510] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdcbb), 34, 12, false, false, &Items[510] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdcbb), 35, 12, false, false, &Items[510] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdcbc), 36, 12, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdcbc), 37, 12, false, false, &Items[516] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdcbc), 38, 12, false, false, &Items[516] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdcbc), 39, 12, false, false, &Items[516] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdcbc), 0, 13, false, false, &Items[516] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdcbc), 1, 13, false, false, &Items[516] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdcbc), 2, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdcbc), 3, 13, false, false, &Items[522] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdcbc), 4, 13, false, false, &Items[522] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdcbc), 5, 13, false, false, &Items[522] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdcbc), 6, 13, false, false, &Items[522] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdcbc), 7, 13, false, false, &Items[522] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdd27), 8, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdd27), 9, 13, false, false, &Items[528] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdd27), 10, 13, false, false, &Items[528] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdd27), 11, 13, false, false, &Items[528] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdd27), 12, 13, false, false, &Items[528] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdd27), 13, 13, false, false, &Items[528] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdd27), 14, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdd27), 15, 13, false, false, &Items[534] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdd27), 16, 13, false, false, &Items[534] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdd27), 17, 13, false, false, &Items[534] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdd27), 18, 13, false, false, &Items[534] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdd27), 19, 13, false, false, &Items[534] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdd2c), 20, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdd2c), 21, 13, false, false, &Items[540] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdd2c), 22, 13, false, false, &Items[540] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdd2c), 23, 13, false, false, &Items[540] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdd2c), 24, 13, false, false, &Items[540] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdd2c), 25, 13, false, false, &Items[540] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdd2c), 26, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xdd2c), 27, 13, false, false, &Items[546] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xdd2c), 28, 13, false, false, &Items[546] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xdd2c), 29, 13, false, false, &Items[546] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xdd2c), 30, 13, false, false, &Items[546] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xdd2c), 31, 13, false, false, &Items[546] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83c, 0xdfa8), 32, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfa8), 33, 13, false, false, &Items[552] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfa8), 34, 13, false, false, &Items[552] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfa8), 35, 13, false, false, &Items[552] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfa8), 36, 13, false, false, &Items[552] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfa8), 37, 13, false, false, &Items[552] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83c, 0xdfa8), 38, 13, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83c, 0xdfa8), 39, 13, false, false, &Items[558] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83c, 0xdfa8), 0, 14, false, false, &Items[558] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83c, 0xdfa8), 1, 14, false, false, &Items[558] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83c, 0xdfa8), 2, 14, false, false, &Items[558] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83c, 0xdfa8), 3, 14, false, false, &Items[558] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xde92), 4, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xde92), 5, 14, false, false, &Items[564] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xde92), 6, 14, false, false, &Items[564] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xde92), 7, 14, false, false, &Items[564] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xde92), 8, 14, false, false, &Items[564] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xde92), 9, 14, false, false, &Items[564] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xde92), 10, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xde92), 11, 14, false, false, &Items[570] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xde92), 12, 14, false, false, &Items[570] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xde92), 13, 14, false, false, &Items[570] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xde92), 14, 14, false, false, &Items[570] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xde92), 15, 14, false, false, &Items[570] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0x2708, 0xfe0f), 16, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0x2708, 0xfe0f), 17, 14, false, false, &Items[576] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0x2708, 0xfe0f), 18, 14, false, false, &Items[576] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0x2708, 0xfe0f), 19, 14, false, false, &Items[576] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0x2708, 0xfe0f), 20, 14, false, false, &Items[576] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0x2708, 0xfe0f), 21, 14, false, false, &Items[576] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0x2708, 0xfe0f), 22, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0x2708, 0xfe0f), 23, 14, false, false, &Items[582] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0x2708, 0xfe0f), 24, 14, false, false, &Items[582] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0x2708, 0xfe0f), 25, 14, false, false, &Items[582] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0x2708, 0xfe0f), 26, 14, false, false, &Items[582] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0x2708, 0xfe0f), 27, 14, false, false, &Items[582] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xde80), 28, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xde80), 29, 14, false, false, &Items[588] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xde80), 30, 14, false, false, &Items[588] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xde80), 31, 14, false, false, &Items[588] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xde80), 32, 14, false, false, &Items[588] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xde80), 33, 14, false, false, &Items[588] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xde80), 34, 14, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0xd83d, 0xde80), 35, 14, false, false, &Items[594] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0xd83d, 0xde80), 36, 14, false, false, &Items[594] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0xd83d, 0xde80), 37, 14, false, false, &Items[594] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0xd83d, 0xde80), 38, 14, false, false, &Items[594] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0xd83d, 0xde80), 39, 14, false, false, &Items[594] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0x2696, 0xfe0f), 0, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffb, 0x200d, 0x2696, 0xfe0f), 1, 15, false, false, &Items[600] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffc, 0x200d, 0x2696, 0xfe0f), 2, 15, false, false, &Items[600] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffd, 0x200d, 0x2696, 0xfe0f), 3, 15, false, false, &Items[600] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdffe, 0x200d, 0x2696, 0xfe0f), 4, 15, false, false, &Items[600] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0xd83c, 0xdfff, 0x200d, 0x2696, 0xfe0f), 5, 15, false, false, &Items[600] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0x2696, 0xfe0f), 6, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffb, 0x200d, 0x2696, 0xfe0f), 7, 15, false, false, &Items[606] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffc, 0x200d, 0x2696, 0xfe0f), 8, 15, false, false, &Items[606] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffd, 0x200d, 0x2696, 0xfe0f), 9, 15, false, false, &Items[606] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdffe, 0x200d, 0x2696, 0xfe0f), 10, 15, false, false, &Items[606] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0xd83c, 0xdfff, 0x200d, 0x2696, 0xfe0f), 11, 15, false, false, &Items[606] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36), 12, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36, 0xd83c, 0xdffb), 13, 15, false, false, &Items[612] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36, 0xd83c, 0xdffc), 14, 15, false, false, &Items[612] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36, 0xd83c, 0xdffd), 15, 15, false, false, &Items[612] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36, 0xd83c, 0xdffe), 16, 15, false, false, &Items[612] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd36, 0xd83c, 0xdfff), 17, 15, false, false, &Items[612] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85), 18, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85, 0xd83c, 0xdffb), 19, 15, false, false, &Items[618] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85, 0xd83c, 0xdffc), 20, 15, false, false, &Items[618] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85, 0xd83c, 0xdffd), 21, 15, false, false, &Items[618] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85, 0xd83c, 0xdffe), 22, 15, false, false, &Items[618] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf85, 0xd83c, 0xdfff), 23, 15, false, false, &Items[618] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78), 24, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78, 0xd83c, 0xdffb), 25, 15, false, false, &Items[624] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78, 0xd83c, 0xdffc), 26, 15, false, false, &Items[624] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78, 0xd83c, 0xdffd), 27, 15, false, false, &Items[624] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78, 0xd83c, 0xdffe), 28, 15, false, false, &Items[624] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc78, 0xd83c, 0xdfff), 29, 15, false, false, &Items[624] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34), 30, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34, 0xd83c, 0xdffb), 31, 15, false, false, &Items[630] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34, 0xd83c, 0xdffc), 32, 15, false, false, &Items[630] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34, 0xd83c, 0xdffd), 33, 15, false, false, &Items[630] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34, 0xd83c, 0xdffe), 34, 15, false, false, &Items[630] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd34, 0xd83c, 0xdfff), 35, 15, false, false, &Items[630] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70), 36, 15, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70, 0xd83c, 0xdffb), 37, 15, false, false, &Items[636] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70, 0xd83c, 0xdffc), 38, 15, false, false, &Items[636] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70, 0xd83c, 0xdffd), 39, 15, false, false, &Items[636] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70, 0xd83c, 0xdffe), 0, 16, false, false, &Items[636] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc70, 0xd83c, 0xdfff), 1, 16, false, false, &Items[636] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35), 2, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35, 0xd83c, 0xdffb), 3, 16, false, false, &Items[642] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35, 0xd83c, 0xdffc), 4, 16, false, false, &Items[642] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35, 0xd83c, 0xdffd), 5, 16, false, false, &Items[642] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35, 0xd83c, 0xdffe), 6, 16, false, false, &Items[642] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd35, 0xd83c, 0xdfff), 7, 16, false, false, &Items[642] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c), 8, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c, 0xd83c, 0xdffb), 9, 16, false, false, &Items[648] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c, 0xd83c, 0xdffc), 10, 16, false, false, &Items[648] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c, 0xd83c, 0xdffd), 11, 16, false, false, &Items[648] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c, 0xd83c, 0xdffe), 12, 16, false, false, &Items[648] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc7c, 0xd83c, 0xdfff), 13, 16, false, false, &Items[648] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30), 14, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30, 0xd83c, 0xdffb), 15, 16, false, false, &Items[654] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30, 0xd83c, 0xdffc), 16, 16, false, false, &Items[654] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30, 0xd83c, 0xdffd), 17, 16, false, false, &Items[654] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30, 0xd83c, 0xdffe), 18, 16, false, false, &Items[654] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd30, 0xd83c, 0xdfff), 19, 16, false, false, &Items[654] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0x200d, 0x2640, 0xfe0f), 20, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 21, 16, false, false, &Items[660] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 22, 16, false, false, &Items[660] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 23, 16, false, false, &Items[660] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 24, 16, false, false, &Items[660] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 25, 16, false, false, &Items[660] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47), 26, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffb), 27, 16, false, false, &Items[666] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffc), 28, 16, false, false, &Items[666] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffd), 29, 16, false, false, &Items[666] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdffe), 30, 16, false, false, &Items[666] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde47, 0xd83c, 0xdfff), 31, 16, false, false, &Items[666] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81), 32, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffb), 33, 16, false, false, &Items[672] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffc), 34, 16, false, false, &Items[672] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffd), 35, 16, false, false, &Items[672] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffe), 36, 16, false, false, &Items[672] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdfff), 37, 16, false, false, &Items[672] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0x200d, 0x2642, 0xfe0f), 38, 16, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 39, 16, false, false, &Items[678] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 0, 17, false, false, &Items[678] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 1, 17, false, false, &Items[678] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 2, 17, false, false, &Items[678] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc81, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 3, 17, false, false, &Items[678] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45), 4, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffb), 5, 17, false, false, &Items[684] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffc), 6, 17, false, false, &Items[684] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffd), 7, 17, false, false, &Items[684] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffe), 8, 17, false, false, &Items[684] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdfff), 9, 17, false, false, &Items[684] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0x200d, 0x2642, 0xfe0f), 10, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 11, 17, false, false, &Items[690] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 12, 17, false, false, &Items[690] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 13, 17, false, false, &Items[690] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 14, 17, false, false, &Items[690] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde45, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 15, 17, false, false, &Items[690] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46), 16, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffb), 17, 17, false, false, &Items[696] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffc), 18, 17, false, false, &Items[696] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffd), 19, 17, false, false, &Items[696] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffe), 20, 17, false, false, &Items[696] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdfff), 21, 17, false, false, &Items[696] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0x200d, 0x2642, 0xfe0f), 22, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 23, 17, false, false, &Items[702] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 24, 17, false, false, &Items[702] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 25, 17, false, false, &Items[702] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 26, 17, false, false, &Items[702] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde46, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 27, 17, false, false, &Items[702] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b), 28, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffb), 29, 17, false, false, &Items[708] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffc), 30, 17, false, false, &Items[708] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffd), 31, 17, false, false, &Items[708] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffe), 32, 17, false, false, &Items[708] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdfff), 33, 17, false, false, &Items[708] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0x200d, 0x2642, 0xfe0f), 34, 17, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 35, 17, false, false, &Items[714] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 36, 17, false, false, &Items[714] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 37, 17, false, false, &Items[714] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 38, 17, false, false, &Items[714] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4b, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 39, 17, false, false, &Items[714] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0x200d, 0x2640, 0xfe0f), 0, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 1, 18, false, false, &Items[720] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 2, 18, false, false, &Items[720] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 3, 18, false, false, &Items[720] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 4, 18, false, false, &Items[720] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 5, 18, false, false, &Items[720] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0x200d, 0x2642, 0xfe0f), 6, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 7, 18, false, false, &Items[726] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 8, 18, false, false, &Items[726] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 9, 18, false, false, &Items[726] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 10, 18, false, false, &Items[726] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd26, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 11, 18, false, false, &Items[726] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0x200d, 0x2640, 0xfe0f), 12, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 13, 18, false, false, &Items[732] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 14, 18, false, false, &Items[732] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 15, 18, false, false, &Items[732] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 16, 18, false, false, &Items[732] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 17, 18, false, false, &Items[732] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0x200d, 0x2642, 0xfe0f), 18, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 19, 18, false, false, &Items[738] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 20, 18, false, false, &Items[738] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 21, 18, false, false, &Items[738] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 22, 18, false, false, &Items[738] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd37, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 23, 18, false, false, &Items[738] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e), 24, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffb), 25, 18, false, false, &Items[744] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffc), 26, 18, false, false, &Items[744] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffd), 27, 18, false, false, &Items[744] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffe), 28, 18, false, false, &Items[744] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdfff), 29, 18, false, false, &Items[744] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0x200d, 0x2642, 0xfe0f), 30, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 31, 18, false, false, &Items[750] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 32, 18, false, false, &Items[750] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 33, 18, false, false, &Items[750] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 34, 18, false, false, &Items[750] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4e, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 35, 18, false, false, &Items[750] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d), 36, 18, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffb), 37, 18, false, false, &Items[756] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffc), 38, 18, false, false, &Items[756] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffd), 39, 18, false, false, &Items[756] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffe), 0, 19, false, false, &Items[756] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdfff), 1, 19, false, false, &Items[756] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0x200d, 0x2642, 0xfe0f), 2, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 3, 19, false, false, &Items[762] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 4, 19, false, false, &Items[762] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 5, 19, false, false, &Items[762] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 6, 19, false, false, &Items[762] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4d, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 7, 19, false, false, &Items[762] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87), 8, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffb), 9, 19, false, false, &Items[768] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffc), 10, 19, false, false, &Items[768] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffd), 11, 19, false, false, &Items[768] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffe), 12, 19, false, false, &Items[768] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdfff), 13, 19, false, false, &Items[768] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0x200d, 0x2642, 0xfe0f), 14, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 15, 19, false, false, &Items[774] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 16, 19, false, false, &Items[774] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 17, 19, false, false, &Items[774] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 18, 19, false, false, &Items[774] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc87, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 19, 19, false, false, &Items[774] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86), 20, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffb), 21, 19, false, false, &Items[780] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffc), 22, 19, false, false, &Items[780] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffd), 23, 19, false, false, &Items[780] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffe), 24, 19, false, false, &Items[780] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdfff), 25, 19, false, false, &Items[780] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0x200d, 0x2642, 0xfe0f), 26, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 27, 19, false, false, &Items[786] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 28, 19, false, false, &Items[786] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 29, 19, false, false, &Items[786] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 30, 19, false, false, &Items[786] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc86, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 31, 19, false, false, &Items[786] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74), 32, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74, 0xd83c, 0xdffb), 33, 19, false, false, &Items[792] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74, 0xd83c, 0xdffc), 34, 19, false, false, &Items[792] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74, 0xd83c, 0xdffd), 35, 19, false, false, &Items[792] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74, 0xd83c, 0xdffe), 36, 19, false, false, &Items[792] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd74, 0xd83c, 0xdfff), 37, 19, false, false, &Items[792] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83), 38, 19, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83, 0xd83c, 0xdffb), 39, 19, false, false, &Items[798] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83, 0xd83c, 0xdffc), 0, 20, false, false, &Items[798] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83, 0xd83c, 0xdffd), 1, 20, false, false, &Items[798] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83, 0xd83c, 0xdffe), 2, 20, false, false, &Items[798] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc83, 0xd83c, 0xdfff), 3, 20, false, false, &Items[798] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a), 4, 20, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a, 0xd83c, 0xdffb), 5, 20, false, false, &Items[804] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a, 0xd83c, 0xdffc), 6, 20, false, false, &Items[804] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a, 0xd83c, 0xdffd), 7, 20, false, false, &Items[804] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a, 0xd83c, 0xdffe), 8, 20, false, false, &Items[804] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd7a, 0xd83c, 0xdfff), 9, 20, false, false, &Items[804] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6f), 10, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6f, 0x200d, 0x2642, 0xfe0f), 11, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0x200d, 0x2640, 0xfe0f), 12, 20, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 13, 20, false, false, &Items[812] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 14, 20, false, false, &Items[812] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 15, 20, false, false, &Items[812] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 16, 20, false, false, &Items[812] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 17, 20, false, false, &Items[812] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6), 18, 20, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffb), 19, 20, false, false, &Items[818] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffc), 20, 20, false, false, &Items[818] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffd), 21, 20, false, false, &Items[818] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdffe), 22, 20, false, false, &Items[818] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb6, 0xd83c, 0xdfff), 23, 20, false, false, &Items[818] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0x200d, 0x2640, 0xfe0f), 24, 20, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 25, 20, false, false, &Items[824] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 26, 20, false, false, &Items[824] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 27, 20, false, false, &Items[824] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 28, 20, false, false, &Items[824] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 29, 20, false, false, &Items[824] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3), 30, 20, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffb), 31, 20, false, false, &Items[830] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffc), 32, 20, false, false, &Items[830] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffd), 33, 20, false, false, &Items[830] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdffe), 34, 20, false, false, &Items[830] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc3, 0xd83c, 0xdfff), 35, 20, false, false, &Items[830] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6b), 36, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6d), 37, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6c), 38, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc91), 39, 20, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0x2764, 0xfe0f, 0x200d, 0xd83d, 0xdc69), 0, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0x2764, 0xfe0f, 0x200d, 0xd83d, 0xdc68), 1, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8f), 2, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0x2764, 0xfe0f, 0x200d, 0xd83d, 0xdc8b, 0x200d, 0xd83d, 0xdc69), 3, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0x2764, 0xfe0f, 0x200d, 0xd83d, 0xdc8b, 0x200d, 0xd83d, 0xdc68), 4, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc6a), 5, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67), 6, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc66), 7, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc66, 0x200d, 0xd83d, 0xdc66), 8, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc67), 9, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc66), 10, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67), 11, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc66), 12, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc66, 0x200d, 0xd83d, 0xdc66), 13, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc67), 14, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc66), 15, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67), 16, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc66), 17, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc66, 0x200d, 0xd83d, 0xdc66), 18, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc67), 19, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc66), 20, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67), 21, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc66), 22, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc66, 0x200d, 0xd83d, 0xdc66), 23, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc69, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc67), 24, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc66), 25, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67), 26, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc66), 27, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc66, 0x200d, 0xd83d, 0xdc66), 28, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc68, 0x200d, 0xd83d, 0xdc67, 0x200d, 0xd83d, 0xdc67), 29, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5a), 30, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc55), 31, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc56), 32, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc54), 33, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc57), 34, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc59), 35, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc58), 36, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc60), 37, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc61), 38, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc62), 39, 21, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5e), 0, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5f), 1, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc52), 2, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa9), 3, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf93), 4, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc51), 5, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26d1), 6, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf92), 7, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5d), 8, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5b), 9, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc5c), 10, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcbc), 11, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc53), 12, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd76), 13, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf02), 14, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2602), 15, 22, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc36), 16, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc31), 17, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2d), 18, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc39), 19, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc30), 20, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8a), 21, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3b), 22, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3c), 23, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc28), 24, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2f), 25, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd81), 26, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2e), 27, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc37), 28, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3d), 29, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc38), 30, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc35), 31, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde48), 32, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde49), 33, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde4a), 34, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc12), 35, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc14), 36, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc27), 37, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc26), 38, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc24), 39, 22, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc23), 0, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc25), 1, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd86), 2, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd85), 3, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd89), 4, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd87), 5, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3a), 6, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc17), 7, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc34), 8, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd84), 9, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1d), 10, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1b), 11, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8b), 12, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0c), 13, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1a), 14, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1e), 15, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1c), 16, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd77), 17, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd78), 18, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc22), 19, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0d), 20, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8e), 21, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd82), 22, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd80), 23, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd91), 24, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc19), 25, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd90), 26, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc20), 27, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc1f), 28, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc21), 29, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2c), 30, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd88), 31, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc33), 32, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0b), 33, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0a), 34, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc06), 35, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc05), 36, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc03), 37, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc02), 38, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc04), 39, 23, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8c), 0, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2a), 1, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc2b), 2, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc18), 3, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8f), 4, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd8d), 5, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0e), 6, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc16), 7, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc10), 8, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc0f), 9, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc11), 10, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc15), 11, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc29), 12, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc08), 13, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc13), 14, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd83), 15, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd4a), 16, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc07), 17, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc01), 18, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc00), 19, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3f), 20, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc3e), 21, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc09), 22, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc32), 23, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf35), 24, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf84), 25, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf32), 26, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf33), 27, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf34), 28, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf31), 29, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3f), 30, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2618), 31, 24, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf40), 32, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8d), 33, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8b), 34, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf43), 35, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf42), 36, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf41), 37, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf44), 38, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3e), 39, 24, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc90), 0, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf37), 1, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf39), 2, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd40), 3, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3b), 4, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3c), 5, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf38), 6, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3a), 7, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0e), 8, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0d), 9, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0f), 10, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf15), 11, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf16), 12, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf17), 13, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf18), 14, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf11), 15, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf12), 16, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf13), 17, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf14), 18, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1a), 19, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1d), 20, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1e), 21, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1b), 22, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1c), 23, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf19), 24, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcab), 25, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b50), 26, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf1f), 27, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2728), 28, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26a1), 29, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd25), 30, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca5), 31, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2604), 32, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2600), 33, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf24), 34, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26c5), 35, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf25), 36, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf26), 37, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf08), 38, 25, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2601), 39, 25, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf27), 0, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26c8), 1, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf29), 2, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf28), 3, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2603), 4, 26, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26c4), 5, 26, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2744), 6, 26, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2c), 7, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca8), 8, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2a), 9, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2b), 10, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0a), 11, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca7), 12, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca6), 13, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2614), 14, 26, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4f), 15, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4e), 16, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf50), 17, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4a), 18, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4b), 19, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4c), 20, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf49), 21, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf47), 22, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf53), 23, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf48), 24, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf52), 25, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf51), 26, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf4d), 27, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd5d), 28, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd51), 29, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf45), 30, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf46), 31, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd52), 32, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd55), 33, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf3d), 34, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf36), 35, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd54), 36, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf60), 37, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf30), 38, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd5c), 39, 26, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6f), 0, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd50), 1, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5e), 2, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd56), 3, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xddc0), 4, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd5a), 5, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf73), 6, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd53), 7, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd5e), 8, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf64), 9, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf57), 10, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf56), 11, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf55), 12, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2d), 13, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf54), 14, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5f), 15, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd59), 16, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2e), 17, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf2f), 18, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd57), 19, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd58), 20, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5d), 21, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5c), 22, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf72), 23, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf65), 24, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf63), 25, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf71), 26, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5b), 27, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf59), 28, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf5a), 29, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf58), 30, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf62), 31, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf61), 32, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf67), 33, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf68), 34, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf66), 35, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf70), 36, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf82), 37, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6e), 38, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6d), 39, 27, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6c), 0, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6b), 1, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7f), 2, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf69), 3, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf6a), 4, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd5b), 5, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7c), 6, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2615), 7, 28, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf75), 8, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf76), 9, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7a), 10, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7b), 11, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd42), 12, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf77), 13, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd43), 14, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf78), 15, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf79), 16, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7e), 17, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd44), 18, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf74), 19, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf7d), 20, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26bd), 21, 28, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc0), 22, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc8), 23, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26be), 24, 28, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfbe), 25, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd0), 26, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc9), 27, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb1), 28, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd3), 29, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff8), 30, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd45), 31, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd2), 32, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd1), 33, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcf), 34, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f3), 35, 28, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff9), 36, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa3), 37, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd4a), 38, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd4b), 39, 28, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f8), 0, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfbf), 1, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f7), 2, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc2), 3, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xfe0f, 0x200d, 0x2640, 0xfe0f), 4, 29, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 5, 29, false, false, &Items[1164] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 6, 29, false, false, &Items[1164] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 7, 29, false, false, &Items[1164] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 8, 29, false, false, &Items[1164] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 9, 29, false, false, &Items[1164] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb), 10, 29, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffb), 11, 29, false, false, &Items[1170] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffc), 12, 29, false, false, &Items[1170] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffd), 13, 29, false, false, &Items[1170] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdffe), 14, 29, false, false, &Items[1170] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcb, 0xd83c, 0xdfff), 15, 29, false, false, &Items[1170] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3a), 16, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3c, 0x200d, 0x2640, 0xfe0f), 17, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3c, 0x200d, 0x2642, 0xfe0f), 18, 29, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0x200d, 0x2640, 0xfe0f), 19, 29, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 20, 29, false, false, &Items[1179] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 21, 29, false, false, &Items[1179] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 22, 29, false, false, &Items[1179] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 23, 29, false, false, &Items[1179] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 24, 29, false, false, &Items[1179] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0x200d, 0x2642, 0xfe0f), 25, 29, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 26, 29, false, false, &Items[1185] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 27, 29, false, false, &Items[1185] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 28, 29, false, false, &Items[1185] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 29, 29, false, false, &Items[1185] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd38, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 30, 29, false, false, &Items[1185] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xfe0f, 0x200d, 0x2640, 0xfe0f), 31, 29, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 32, 29, false, false, &Items[1191] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 33, 29, false, false, &Items[1191] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 34, 29, false, false, &Items[1191] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 35, 29, false, false, &Items[1191] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 36, 29, false, false, &Items[1191] });
+	Items.push_back({ internal::ComputeId(0x26f9), 37, 29, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffb), 38, 29, false, false, &Items[1197] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffc), 39, 29, false, false, &Items[1197] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffd), 0, 30, false, false, &Items[1197] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdffe), 1, 30, false, false, &Items[1197] });
+	Items.push_back({ internal::ComputeId(0x26f9, 0xd83c, 0xdfff), 2, 30, false, false, &Items[1197] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0x200d, 0x2640, 0xfe0f), 3, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 4, 30, false, false, &Items[1203] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 5, 30, false, false, &Items[1203] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 6, 30, false, false, &Items[1203] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 7, 30, false, false, &Items[1203] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 8, 30, false, false, &Items[1203] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0x200d, 0x2642, 0xfe0f), 9, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 10, 30, false, false, &Items[1209] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 11, 30, false, false, &Items[1209] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 12, 30, false, false, &Items[1209] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 13, 30, false, false, &Items[1209] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3e, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 14, 30, false, false, &Items[1209] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xfe0f, 0x200d, 0x2640, 0xfe0f), 15, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 16, 30, false, false, &Items[1215] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 17, 30, false, false, &Items[1215] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 18, 30, false, false, &Items[1215] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 19, 30, false, false, &Items[1215] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 20, 30, false, false, &Items[1215] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc), 21, 30, true, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffb), 22, 30, false, false, &Items[1221] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffc), 23, 30, false, false, &Items[1221] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffd), 24, 30, false, false, &Items[1221] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdffe), 25, 30, false, false, &Items[1221] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcc, 0xd83c, 0xdfff), 26, 30, false, false, &Items[1221] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0x200d, 0x2640, 0xfe0f), 27, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 28, 30, false, false, &Items[1227] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 29, 30, false, false, &Items[1227] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 30, 30, false, false, &Items[1227] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 31, 30, false, false, &Items[1227] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 32, 30, false, false, &Items[1227] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4), 33, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffb), 34, 30, false, false, &Items[1233] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffc), 35, 30, false, false, &Items[1233] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffd), 36, 30, false, false, &Items[1233] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdffe), 37, 30, false, false, &Items[1233] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc4, 0xd83c, 0xdfff), 38, 30, false, false, &Items[1233] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0x200d, 0x2640, 0xfe0f), 39, 30, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 0, 31, false, false, &Items[1239] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 1, 31, false, false, &Items[1239] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 2, 31, false, false, &Items[1239] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 3, 31, false, false, &Items[1239] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 4, 31, false, false, &Items[1239] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca), 5, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffb), 6, 31, false, false, &Items[1245] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffc), 7, 31, false, false, &Items[1245] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffd), 8, 31, false, false, &Items[1245] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdffe), 9, 31, false, false, &Items[1245] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfca, 0xd83c, 0xdfff), 10, 31, false, false, &Items[1245] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0x200d, 0x2640, 0xfe0f), 11, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 12, 31, false, false, &Items[1251] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 13, 31, false, false, &Items[1251] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 14, 31, false, false, &Items[1251] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 15, 31, false, false, &Items[1251] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 16, 31, false, false, &Items[1251] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0x200d, 0x2642, 0xfe0f), 17, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 18, 31, false, false, &Items[1257] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 19, 31, false, false, &Items[1257] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 20, 31, false, false, &Items[1257] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 21, 31, false, false, &Items[1257] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd3d, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 22, 31, false, false, &Items[1257] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0x200d, 0x2640, 0xfe0f), 23, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 24, 31, false, false, &Items[1263] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 25, 31, false, false, &Items[1263] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 26, 31, false, false, &Items[1263] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 27, 31, false, false, &Items[1263] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 28, 31, false, false, &Items[1263] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3), 29, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffb), 30, 31, false, false, &Items[1269] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffc), 31, 31, false, false, &Items[1269] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffd), 32, 31, false, false, &Items[1269] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdffe), 33, 31, false, false, &Items[1269] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea3, 0xd83c, 0xdfff), 34, 31, false, false, &Items[1269] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7), 35, 31, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7, 0xd83c, 0xdffb), 36, 31, false, false, &Items[1275] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7, 0xd83c, 0xdffc), 37, 31, false, false, &Items[1275] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7, 0xd83c, 0xdffd), 38, 31, false, false, &Items[1275] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7, 0xd83c, 0xdffe), 39, 31, false, false, &Items[1275] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc7, 0xd83c, 0xdfff), 0, 32, false, false, &Items[1275] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0x200d, 0x2640, 0xfe0f), 1, 32, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 2, 32, false, false, &Items[1281] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 3, 32, false, false, &Items[1281] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 4, 32, false, false, &Items[1281] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 5, 32, false, false, &Items[1281] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 6, 32, false, false, &Items[1281] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4), 7, 32, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffb), 8, 32, false, false, &Items[1287] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffc), 9, 32, false, false, &Items[1287] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffd), 10, 32, false, false, &Items[1287] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdffe), 11, 32, false, false, &Items[1287] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb4, 0xd83c, 0xdfff), 12, 32, false, false, &Items[1287] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0x200d, 0x2640, 0xfe0f), 13, 32, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 14, 32, false, false, &Items[1293] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 15, 32, false, false, &Items[1293] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 16, 32, false, false, &Items[1293] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 17, 32, false, false, &Items[1293] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 18, 32, false, false, &Items[1293] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5), 19, 32, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffb), 20, 32, false, false, &Items[1299] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffc), 21, 32, false, false, &Items[1299] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffd), 22, 32, false, false, &Items[1299] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdffe), 23, 32, false, false, &Items[1299] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb5, 0xd83c, 0xdfff), 24, 32, false, false, &Items[1299] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfbd), 25, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc5), 26, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf96), 27, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd47), 28, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd48), 29, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd49), 30, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc6), 31, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff5), 32, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf97), 33, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfab), 34, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf9f), 35, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfaa), 36, 32, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0x200d, 0x2640, 0xfe0f), 37, 32, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffb, 0x200d, 0x2640, 0xfe0f), 38, 32, false, false, &Items[1317] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffc, 0x200d, 0x2640, 0xfe0f), 39, 32, false, false, &Items[1317] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffd, 0x200d, 0x2640, 0xfe0f), 0, 33, false, false, &Items[1317] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffe, 0x200d, 0x2640, 0xfe0f), 1, 33, false, false, &Items[1317] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdfff, 0x200d, 0x2640, 0xfe0f), 2, 33, false, false, &Items[1317] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0x200d, 0x2642, 0xfe0f), 3, 33, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffb, 0x200d, 0x2642, 0xfe0f), 4, 33, false, false, &Items[1323] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffc, 0x200d, 0x2642, 0xfe0f), 5, 33, false, false, &Items[1323] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffd, 0x200d, 0x2642, 0xfe0f), 6, 33, false, false, &Items[1323] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdffe, 0x200d, 0x2642, 0xfe0f), 7, 33, false, false, &Items[1323] });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd39, 0xd83c, 0xdfff, 0x200d, 0x2642, 0xfe0f), 8, 33, false, false, &Items[1323] });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfad), 9, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa8), 10, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfac), 11, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa4), 12, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa7), 13, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfbc), 14, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb9), 15, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83e, 0xdd41), 16, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb7), 17, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfba), 18, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb8), 19, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfbb), 20, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb2), 21, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfaf), 22, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb3), 23, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfae), 24, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb0), 25, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde97), 26, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde95), 27, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde99), 28, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8c), 29, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8e), 30, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfce), 31, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde93), 32, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde91), 33, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde92), 34, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde90), 35, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9a), 36, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9b), 37, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9c), 38, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdef4), 39, 33, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb2), 0, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdef5), 1, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfcd), 2, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea8), 3, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde94), 4, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8d), 5, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde98), 6, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde96), 7, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea1), 8, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea0), 9, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9f), 10, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde83), 11, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8b), 12, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9e), 13, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde9d), 14, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde84), 15, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde85), 16, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde88), 17, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde82), 18, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde86), 19, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde87), 20, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8a), 21, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde89), 22, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde81), 23, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee9), 24, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2708), 25, 34, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeeb), 26, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeec), 27, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde80), 28, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdef0), 29, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcba), 30, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdef6), 31, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f5), 32, 34, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee5), 33, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea4), 34, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdef3), 35, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f4), 36, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea2), 37, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2693), 38, 34, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea7), 39, 34, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26fd), 0, 35, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xde8f), 1, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea6), 2, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea5), 3, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddfa), 4, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddff), 5, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddfd), 6, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f2), 7, 35, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddfc), 8, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff0), 9, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfef), 10, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfdf), 11, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa1), 12, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa2), 13, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa0), 14, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f1), 15, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd6), 16, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfdd), 17, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26f0), 18, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd4), 19, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddfb), 20, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0b), 21, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfdc), 22, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd5), 23, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26fa), 24, 35, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee4), 25, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee3), 26, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd7), 27, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfed), 28, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe0), 29, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe1), 30, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd8), 31, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfda), 32, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe2), 33, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfec), 34, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe3), 35, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe4), 36, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe5), 37, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe6), 38, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe8), 39, 35, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfea), 0, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfeb), 1, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe9), 2, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc92), 3, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfdb), 4, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26ea), 5, 36, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd4c), 6, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd4d), 7, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd4b), 8, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26e9), 9, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddfe), 10, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf91), 11, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfde), 12, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf05), 13, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf04), 14, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf20), 15, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf87), 16, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf86), 17, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf07), 18, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf06), 19, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfd9), 20, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf03), 21, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf0c), 22, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf09), 23, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf01), 24, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x231a), 25, 36, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf1), 26, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf2), 27, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcbb), 28, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2328), 29, 36, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdda5), 30, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdda8), 31, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddb1), 32, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddb2), 33, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd79), 34, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdddc), 35, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcbd), 36, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcbe), 37, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcbf), 38, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc0), 39, 36, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcfc), 0, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf7), 1, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf8), 2, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf9), 3, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa5), 4, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcfd), 5, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf9e), 6, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcde), 7, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x260e), 8, 37, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcdf), 9, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce0), 10, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcfa), 11, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcfb), 12, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf99), 13, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf9a), 14, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf9b), 15, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f1), 16, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f2), 17, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f0), 18, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd70), 19, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x231b), 20, 37, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f3), 21, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce1), 22, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0b), 23, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0c), 24, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca1), 25, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd26), 26, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd6f), 27, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddd1), 28, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee2), 29, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb8), 30, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb5), 31, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb4), 32, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb6), 33, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb7), 34, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb0), 35, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb3), 36, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8e), 37, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2696), 38, 37, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd27), 39, 37, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd28), 0, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2692), 1, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee0), 2, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26cf), 3, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd29), 4, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2699), 5, 38, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26d3), 6, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2b), 7, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca3), 8, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2a), 9, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdde1), 10, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2694), 11, 38, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdee1), 12, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeac), 13, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26b0), 14, 38, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26b1), 15, 38, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdffa), 16, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2e), 17, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcff), 18, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc88), 19, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2697), 20, 38, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2d), 21, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2c), 22, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd73), 23, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8a), 24, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc89), 25, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf21), 26, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdebd), 27, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb0), 28, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdebf), 29, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec1), 30, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0), 31, 38, false, true, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0, 0xd83c, 0xdffb), 32, 38, false, false, &Items[1551] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0, 0xd83c, 0xdffc), 33, 38, false, false, &Items[1551] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0, 0xd83c, 0xdffd), 34, 38, false, false, &Items[1551] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0, 0xd83c, 0xdffe), 35, 38, false, false, &Items[1551] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec0, 0xd83c, 0xdfff), 36, 38, false, false, &Items[1551] });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdece), 37, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd11), 38, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdddd), 39, 38, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeaa), 0, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdecb), 1, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdecf), 2, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdecc), 3, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddbc), 4, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdecd), 5, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xded2), 6, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf81), 7, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf88), 8, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8f), 9, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf80), 10, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8a), 11, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf89), 12, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8e), 13, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfee), 14, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf90), 15, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2709), 16, 39, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce9), 17, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce8), 18, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce7), 19, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc8c), 20, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce5), 21, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce4), 22, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce6), 23, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff7), 24, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcea), 25, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdceb), 26, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcec), 27, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdced), 28, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcee), 29, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcef), 30, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcdc), 31, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc3), 32, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc4), 33, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd1), 34, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcca), 35, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc8), 36, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc9), 37, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddd2), 38, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddd3), 39, 39, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc6), 0, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc5), 1, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc7), 2, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddc3), 3, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddf3), 4, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddc4), 5, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdccb), 6, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc1), 7, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcc2), 8, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddc2), 9, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddde), 10, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf0), 11, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd3), 12, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd4), 13, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd2), 14, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd5), 15, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd7), 16, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd8), 17, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd9), 18, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcda), 19, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd6), 20, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd16), 21, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd17), 22, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcce), 23, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd87), 24, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcd0), 25, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdccf), 26, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdccc), 27, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdccd), 28, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2702), 29, 40, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd8a), 30, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd8b), 31, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2712), 32, 40, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd8c), 33, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd8d), 34, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcdd), 35, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x270f), 36, 40, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0d), 37, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0e), 38, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0f), 39, 40, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd10), 0, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd12), 1, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd13), 2, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2764), 3, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9b), 4, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9a), 5, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc99), 6, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9c), 7, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdda4), 8, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc94), 9, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2763), 10, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc95), 11, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9e), 12, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc93), 13, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc97), 14, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc96), 15, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc98), 16, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9d), 17, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc9f), 18, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x262e), 19, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x271d), 20, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x262a), 21, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd49), 22, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2638), 23, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2721), 24, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd2f), 25, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd4e), 26, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x262f), 27, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2626), 28, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xded0), 29, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26ce), 30, 41, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2648), 31, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2649), 32, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264a), 33, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264b), 34, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264c), 35, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264d), 36, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264e), 37, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x264f), 38, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2650), 39, 41, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2651), 0, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2652), 1, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2653), 2, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd94), 3, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x269b), 4, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde51), 5, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2622), 6, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2623), 7, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf4), 8, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf3), 9, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde36), 10, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde1a), 11, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde38), 12, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde3a), 13, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde37), 14, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2734), 15, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd9a), 16, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcae), 17, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde50), 18, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x3299), 19, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x3297), 20, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde34), 21, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde35), 22, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde39), 23, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde32), 24, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd70), 25, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd71), 26, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd8e), 27, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd91), 28, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd7e), 29, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd98), 30, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x274c), 31, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b55), 32, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xded1), 33, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26d4), 34, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcdb), 35, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeab), 36, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcaf), 37, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca2), 38, 42, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2668), 39, 42, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb7), 0, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeaf), 1, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb3), 2, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb1), 3, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1e), 4, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf5), 5, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdead), 6, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2757), 7, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2755), 8, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2753), 9, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2754), 10, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x203c), 11, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2049), 12, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd05), 13, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd06), 14, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x303d), 15, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26a0), 16, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb8), 17, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd31), 18, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x269c), 19, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd30), 20, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x267b), 21, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2705), 22, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde2f), 23, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb9), 24, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2747), 25, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2733), 26, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x274e), 27, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf10), 28, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca0), 29, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x24c2), 30, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf00), 31, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdca4), 32, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfe7), 33, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdebe), 34, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x267f), 35, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd7f), 36, 43, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde33), 37, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde02), 38, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec2), 39, 43, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec3), 0, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec4), 1, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdec5), 2, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeb9), 3, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeba), 4, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdebc), 5, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdebb), 6, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdeae), 7, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfa6), 8, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcf6), 9, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xde01), 10, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd23), 11, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2139), 12, 44, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd24), 13, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd21), 14, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd20), 15, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd96), 16, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd97), 17, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd99), 18, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd92), 19, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd95), 20, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdd93), 21, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x30, 0xfe0f, 0x20e3), 22, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x31, 0xfe0f, 0x20e3), 23, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x32, 0xfe0f, 0x20e3), 24, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x33, 0xfe0f, 0x20e3), 25, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x34, 0xfe0f, 0x20e3), 26, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x35, 0xfe0f, 0x20e3), 27, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x36, 0xfe0f, 0x20e3), 28, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x37, 0xfe0f, 0x20e3), 29, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x38, 0xfe0f, 0x20e3), 30, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x39, 0xfe0f, 0x20e3), 31, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1f), 32, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd22), 33, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23, 0xfe0f, 0x20e3), 34, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2a, 0xfe0f, 0x20e3), 35, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25b6), 36, 44, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f8), 37, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23ef), 38, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23f9), 39, 44, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23fa), 0, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23ed), 1, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23ee), 2, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23e9), 3, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23ea), 4, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23eb), 5, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x23ec), 6, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25c0), 7, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd3c), 8, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd3d), 9, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x27a1), 10, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b05), 11, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b06), 12, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b07), 13, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2197), 14, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2198), 15, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2199), 16, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2196), 17, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2195), 18, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2194), 19, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x21aa), 20, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x21a9), 21, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2934), 22, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2935), 23, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd00), 24, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd01), 25, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd02), 26, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd04), 27, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd03), 28, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb5), 29, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb6), 30, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2795), 31, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2796), 32, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2797), 33, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2716), 34, 45, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb2), 35, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcb1), 36, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2122), 37, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xa9), 38, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xae), 39, 45, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x3030), 0, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x27b0), 1, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x27bf), 2, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1a), 3, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd19), 4, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1b), 5, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1d), 6, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd1c), 7, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2714), 8, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2611), 9, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd18), 10, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26aa), 11, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x26ab), 12, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd34), 13, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd35), 14, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd3a), 15, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd3b), 16, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd38), 17, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd39), 18, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd36), 19, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd37), 20, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd33), 21, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd32), 22, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25aa), 23, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25ab), 24, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25fe), 25, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25fd), 26, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25fc), 27, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x25fb), 28, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b1b), 29, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2b1c), 30, 46, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd08), 31, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd07), 32, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd09), 33, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd0a), 34, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd14), 35, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd15), 36, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce3), 37, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdce2), 38, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdc41, 0x200d, 0xd83d, 0xdde8), 39, 46, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcac), 0, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdcad), 1, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xddef), 2, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2660), 3, 47, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2663), 4, 47, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2665), 5, 47, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0x2666), 6, 47, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdccf), 7, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfb4), 8, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdc04), 9, 47, true, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd50), 10, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd51), 11, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd52), 12, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd53), 13, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd54), 14, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd55), 15, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd56), 16, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd57), 17, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd58), 18, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd59), 19, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5a), 20, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5b), 21, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5c), 22, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5d), 23, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5e), 24, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd5f), 25, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd60), 26, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd61), 27, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd62), 28, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd63), 29, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd64), 30, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd65), 31, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd66), 32, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdd67), 33, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff3), 34, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff4), 35, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdfc1), 36, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83d, 0xdea9), 37, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdff3, 0xfe0f, 0x200d, 0xd83c, 0xdf08), 38, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddeb), 39, 47, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddfd), 0, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf1), 1, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddff), 2, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf8), 3, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xdde9), 4, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf4), 5, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddee), 6, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf6), 7, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddec), 8, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf7), 9, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf2), 10, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddfc), 11, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddfa), 12, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddf9), 13, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddff), 14, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf8), 15, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xdded), 16, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xdde9), 17, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xdde7), 18, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddfe), 19, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddea), 20, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddff), 21, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddef), 22, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf2), 23, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf9), 24, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf4), 25, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xdde6), 26, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddfc), 27, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf7), 28, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf4), 29, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xddec), 30, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf3), 31, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddec), 32, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddeb), 33, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddee), 34, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xdded), 35, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf2), 36, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xdde6), 37, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xdde8), 38, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddfb), 39, 48, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf6), 0, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddfe), 1, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddeb), 2, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xdde9), 3, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf1), 4, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf3), 5, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddfd), 6, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xdde8), 7, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf4), 8, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddf2), 9, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddec), 10, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xdde9), 11, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf0), 12, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddf7), 13, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddee), 14, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdded, 0xd83c, 0xddf7), 15, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddfa), 16, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddfc), 17, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddfe), 18, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xddff), 19, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddf0), 20, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddef), 21, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddf2), 22, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddf4), 23, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xdde8), 24, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddec), 25, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddfb), 26, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf6), 27, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddf7), 28, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddea), 29, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddf9), 30, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddfa), 31, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddf0), 32, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddf4), 33, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddef), 34, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddee), 35, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddf7), 36, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddeb), 37, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddeb), 38, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddeb), 39, 49, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xdde6), 0, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf2), 1, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddea), 2, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde9, 0xd83c, 0xddea), 3, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xdded), 4, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddee), 5, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf7), 6, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf1), 7, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xdde9), 8, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf5), 9, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddfa), 10, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf9), 11, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddec), 12, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf3), 13, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddfc), 14, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddfe), 15, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdded, 0xd83c, 0xddf9), 16, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdded, 0xd83c, 0xddf3), 17, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdded, 0xd83c, 0xddf0), 18, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdded, 0xd83c, 0xddfa), 19, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf8), 20, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf3), 21, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xdde9), 22, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf7), 23, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf6), 24, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddea), 25, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf2), 26, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf1), 27, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddee, 0xd83c, 0xddf9), 28, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddef, 0xd83c, 0xddf2), 29, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddef, 0xd83c, 0xddf5), 30, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdf8c), 31, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddef, 0xd83c, 0xddea), 32, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddef, 0xd83c, 0xddf4), 33, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddff), 34, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddea), 35, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddee), 36, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfd, 0xd83c, 0xddf0), 37, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddfc), 38, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddec), 39, 50, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xdde6), 0, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddfb), 1, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xdde7), 2, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddf8), 3, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddf7), 4, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddfe), 5, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddee), 6, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddf9), 7, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddfa), 8, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf4), 9, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf0), 10, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddec), 11, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddfc), 12, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddfe), 13, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddfb), 14, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf1), 15, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf9), 16, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xdded), 17, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf6), 18, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf7), 19, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddfa), 20, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfe, 0xd83c, 0xddf9), 21, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddfd), 22, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddeb, 0xd83c, 0xddf2), 23, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xdde9), 24, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xdde8), 25, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf3), 26, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddea), 27, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf8), 28, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xdde6), 29, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddff), 30, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf2), 31, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xdde6), 32, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddf7), 33, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddf5), 34, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddf1), 35, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xdde8), 36, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddff), 37, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddee), 38, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddea), 39, 51, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddec), 0, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddfa), 1, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddeb), 2, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddf5), 3, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf2, 0xd83c, 0xddf5), 4, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf3, 0xd83c, 0xddf4), 5, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf4, 0xd83c, 0xddf2), 6, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf0), 7, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddfc), 8, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf8), 9, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xdde6), 10, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddec), 11, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddfe), 12, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddea), 13, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xdded), 14, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf3), 15, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf1), 16, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf9), 17, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf7), 18, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf6, 0xd83c, 0xdde6), 19, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf7, 0xd83c, 0xddea), 20, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf7, 0xd83c, 0xddf4), 21, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf7, 0xd83c, 0xddfa), 22, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf7, 0xd83c, 0xddfc), 23, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfc, 0xd83c, 0xddf8), 24, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf2), 25, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf9), 26, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xdde6), 27, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf3), 28, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf7, 0xd83c, 0xddf8), 29, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xdde8), 30, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf1), 31, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddec), 32, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddfd), 33, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf0), 34, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddee), 35, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xddf8), 36, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xdde7), 37, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf4), 38, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddff, 0xd83c, 0xdde6), 39, 52, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddf7), 0, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf8), 1, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xddf8), 2, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xddf0), 3, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde7, 0xd83c, 0xddf1), 4, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xdded), 5, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf0, 0xd83c, 0xddf3), 6, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf1, 0xd83c, 0xdde8), 7, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf5, 0xd83c, 0xddf2), 8, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xdde8), 9, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xdde9), 10, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddf7), 11, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddff), 12, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddea), 13, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde8, 0xd83c, 0xdded), 14, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf8, 0xd83c, 0xddfe), 15, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddfc), 16, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddef), 17, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddff), 18, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xdded), 19, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf1), 20, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddec), 21, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf0), 22, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf4), 23, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf9), 24, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf3), 25, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf7), 26, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddf2), 27, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xdde8), 28, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddf9, 0xd83c, 0xddfb), 29, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xddee), 30, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfa, 0xd83c, 0xddec), 31, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfa, 0xd83c, 0xdde6), 32, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xdde6, 0xd83c, 0xddea), 33, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddec, 0xd83c, 0xdde7), 34, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfa, 0xd83c, 0xddf8), 35, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfa, 0xd83c, 0xddfe), 36, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfa, 0xd83c, 0xddff), 37, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xddfa), 38, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xdde6), 39, 53, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xddea), 0, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfb, 0xd83c, 0xddf3), 1, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfc, 0xd83c, 0xddeb), 2, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddea, 0xd83c, 0xdded), 3, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddfe, 0xd83c, 0xddea), 4, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddff, 0xd83c, 0xddf2), 5, 54, false, false, nullptr });
+	Items.push_back({ internal::ComputeId(0xd83c, 0xddff, 0xd83c, 0xddfc), 6, 54, false, false, nullptr });
+}
+
+int GetPackCount(DBIEmojiTab tab) {
+	switch (tab) {
+	case dbietPeople: return 291;
+	case dbietNature: return 159;
+	case dbietFood: return 86;
+	case dbietActivity: return 80;
+	case dbietTravel: return 119;
+	case dbietObjects: return 173;
+	case dbietSymbols: return 524;
+	case dbietRecent: return cGetRecentEmoji().size();
+	}
+	return 0;
+}
+
+EmojiPack GetPack(DBIEmojiTab tab) {
+	switch (tab) {
+	case dbietPeople: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(291);
+			result.push_back(&Items[0]);
+			result.push_back(&Items[1]);
+			result.push_back(&Items[2]);
+			result.push_back(&Items[3]);
+			result.push_back(&Items[4]);
+			result.push_back(&Items[5]);
+			result.push_back(&Items[6]);
+			result.push_back(&Items[7]);
+			result.push_back(&Items[8]);
+			result.push_back(&Items[9]);
+			result.push_back(&Items[10]);
+			result.push_back(&Items[11]);
+			result.push_back(&Items[12]);
+			result.push_back(&Items[13]);
+			result.push_back(&Items[14]);
+			result.push_back(&Items[15]);
+			result.push_back(&Items[16]);
+			result.push_back(&Items[17]);
+			result.push_back(&Items[18]);
+			result.push_back(&Items[19]);
+			result.push_back(&Items[20]);
+			result.push_back(&Items[21]);
+			result.push_back(&Items[22]);
+			result.push_back(&Items[23]);
+			result.push_back(&Items[24]);
+			result.push_back(&Items[25]);
+			result.push_back(&Items[26]);
+			result.push_back(&Items[27]);
+			result.push_back(&Items[28]);
+			result.push_back(&Items[29]);
+			result.push_back(&Items[30]);
+			result.push_back(&Items[31]);
+			result.push_back(&Items[32]);
+			result.push_back(&Items[33]);
+			result.push_back(&Items[34]);
+			result.push_back(&Items[35]);
+			result.push_back(&Items[36]);
+			result.push_back(&Items[37]);
+			result.push_back(&Items[38]);
+			result.push_back(&Items[39]);
+			result.push_back(&Items[40]);
+			result.push_back(&Items[41]);
+			result.push_back(&Items[42]);
+			result.push_back(&Items[43]);
+			result.push_back(&Items[44]);
+			result.push_back(&Items[45]);
+			result.push_back(&Items[46]);
+			result.push_back(&Items[47]);
+			result.push_back(&Items[48]);
+			result.push_back(&Items[49]);
+			result.push_back(&Items[50]);
+			result.push_back(&Items[51]);
+			result.push_back(&Items[52]);
+			result.push_back(&Items[53]);
+			result.push_back(&Items[54]);
+			result.push_back(&Items[55]);
+			result.push_back(&Items[56]);
+			result.push_back(&Items[57]);
+			result.push_back(&Items[58]);
+			result.push_back(&Items[59]);
+			result.push_back(&Items[60]);
+			result.push_back(&Items[61]);
+			result.push_back(&Items[62]);
+			result.push_back(&Items[63]);
+			result.push_back(&Items[64]);
+			result.push_back(&Items[65]);
+			result.push_back(&Items[66]);
+			result.push_back(&Items[67]);
+			result.push_back(&Items[68]);
+			result.push_back(&Items[69]);
+			result.push_back(&Items[70]);
+			result.push_back(&Items[71]);
+			result.push_back(&Items[72]);
+			result.push_back(&Items[73]);
+			result.push_back(&Items[74]);
+			result.push_back(&Items[75]);
+			result.push_back(&Items[76]);
+			result.push_back(&Items[77]);
+			result.push_back(&Items[78]);
+			result.push_back(&Items[79]);
+			result.push_back(&Items[80]);
+			result.push_back(&Items[81]);
+			result.push_back(&Items[82]);
+			result.push_back(&Items[83]);
+			result.push_back(&Items[84]);
+			result.push_back(&Items[85]);
+			result.push_back(&Items[86]);
+			result.push_back(&Items[87]);
+			result.push_back(&Items[88]);
+			result.push_back(&Items[89]);
+			result.push_back(&Items[90]);
+			result.push_back(&Items[91]);
+			result.push_back(&Items[92]);
+			result.push_back(&Items[93]);
+			result.push_back(&Items[94]);
+			result.push_back(&Items[95]);
+			result.push_back(&Items[96]);
+			result.push_back(&Items[102]);
+			result.push_back(&Items[108]);
+			result.push_back(&Items[114]);
+			result.push_back(&Items[120]);
+			result.push_back(&Items[121]);
+			result.push_back(&Items[127]);
+			result.push_back(&Items[133]);
+			result.push_back(&Items[139]);
+			result.push_back(&Items[145]);
+			result.push_back(&Items[151]);
+			result.push_back(&Items[157]);
+			result.push_back(&Items[163]);
+			result.push_back(&Items[169]);
+			result.push_back(&Items[175]);
+			result.push_back(&Items[181]);
+			result.push_back(&Items[187]);
+			result.push_back(&Items[193]);
+			result.push_back(&Items[199]);
+			result.push_back(&Items[205]);
+			result.push_back(&Items[211]);
+			result.push_back(&Items[217]);
+			result.push_back(&Items[223]);
+			result.push_back(&Items[229]);
+			result.push_back(&Items[235]);
+			result.push_back(&Items[241]);
+			result.push_back(&Items[247]);
+			result.push_back(&Items[253]);
+			result.push_back(&Items[259]);
+			result.push_back(&Items[265]);
+			result.push_back(&Items[271]);
+			result.push_back(&Items[277]);
+			result.push_back(&Items[278]);
+			result.push_back(&Items[279]);
+			result.push_back(&Items[280]);
+			result.push_back(&Items[281]);
+			result.push_back(&Items[282]);
+			result.push_back(&Items[288]);
+			result.push_back(&Items[294]);
+			result.push_back(&Items[295]);
+			result.push_back(&Items[296]);
+			result.push_back(&Items[297]);
+			result.push_back(&Items[298]);
+			result.push_back(&Items[299]);
+			result.push_back(&Items[300]);
+			result.push_back(&Items[306]);
+			result.push_back(&Items[312]);
+			result.push_back(&Items[318]);
+			result.push_back(&Items[324]);
+			result.push_back(&Items[330]);
+			result.push_back(&Items[336]);
+			result.push_back(&Items[342]);
+			result.push_back(&Items[348]);
+			result.push_back(&Items[354]);
+			result.push_back(&Items[360]);
+			result.push_back(&Items[366]);
+			result.push_back(&Items[372]);
+			result.push_back(&Items[378]);
+			result.push_back(&Items[384]);
+			result.push_back(&Items[390]);
+			result.push_back(&Items[396]);
+			result.push_back(&Items[402]);
+			result.push_back(&Items[408]);
+			result.push_back(&Items[414]);
+			result.push_back(&Items[420]);
+			result.push_back(&Items[426]);
+			result.push_back(&Items[432]);
+			result.push_back(&Items[438]);
+			result.push_back(&Items[444]);
+			result.push_back(&Items[450]);
+			result.push_back(&Items[456]);
+			result.push_back(&Items[462]);
+			result.push_back(&Items[468]);
+			result.push_back(&Items[474]);
+			result.push_back(&Items[480]);
+			result.push_back(&Items[486]);
+			result.push_back(&Items[492]);
+			result.push_back(&Items[498]);
+			result.push_back(&Items[504]);
+			result.push_back(&Items[510]);
+			result.push_back(&Items[516]);
+			result.push_back(&Items[522]);
+			result.push_back(&Items[528]);
+			result.push_back(&Items[534]);
+			result.push_back(&Items[540]);
+			result.push_back(&Items[546]);
+			result.push_back(&Items[552]);
+			result.push_back(&Items[558]);
+			result.push_back(&Items[564]);
+			result.push_back(&Items[570]);
+			result.push_back(&Items[576]);
+			result.push_back(&Items[582]);
+			result.push_back(&Items[588]);
+			result.push_back(&Items[594]);
+			result.push_back(&Items[600]);
+			result.push_back(&Items[606]);
+			result.push_back(&Items[612]);
+			result.push_back(&Items[618]);
+			result.push_back(&Items[624]);
+			result.push_back(&Items[630]);
+			result.push_back(&Items[636]);
+			result.push_back(&Items[642]);
+			result.push_back(&Items[648]);
+			result.push_back(&Items[654]);
+			result.push_back(&Items[660]);
+			result.push_back(&Items[666]);
+			result.push_back(&Items[672]);
+			result.push_back(&Items[678]);
+			result.push_back(&Items[684]);
+			result.push_back(&Items[690]);
+			result.push_back(&Items[696]);
+			result.push_back(&Items[702]);
+			result.push_back(&Items[708]);
+			result.push_back(&Items[714]);
+			result.push_back(&Items[720]);
+			result.push_back(&Items[726]);
+			result.push_back(&Items[732]);
+			result.push_back(&Items[738]);
+			result.push_back(&Items[744]);
+			result.push_back(&Items[750]);
+			result.push_back(&Items[756]);
+			result.push_back(&Items[762]);
+			result.push_back(&Items[768]);
+			result.push_back(&Items[774]);
+			result.push_back(&Items[780]);
+			result.push_back(&Items[786]);
+			result.push_back(&Items[792]);
+			result.push_back(&Items[798]);
+			result.push_back(&Items[804]);
+			result.push_back(&Items[810]);
+			result.push_back(&Items[811]);
+			result.push_back(&Items[812]);
+			result.push_back(&Items[818]);
+			result.push_back(&Items[824]);
+			result.push_back(&Items[830]);
+			result.push_back(&Items[836]);
+			result.push_back(&Items[837]);
+			result.push_back(&Items[838]);
+			result.push_back(&Items[839]);
+			result.push_back(&Items[840]);
+			result.push_back(&Items[841]);
+			result.push_back(&Items[842]);
+			result.push_back(&Items[843]);
+			result.push_back(&Items[844]);
+			result.push_back(&Items[845]);
+			result.push_back(&Items[846]);
+			result.push_back(&Items[847]);
+			result.push_back(&Items[848]);
+			result.push_back(&Items[849]);
+			result.push_back(&Items[850]);
+			result.push_back(&Items[851]);
+			result.push_back(&Items[852]);
+			result.push_back(&Items[853]);
+			result.push_back(&Items[854]);
+			result.push_back(&Items[855]);
+			result.push_back(&Items[856]);
+			result.push_back(&Items[857]);
+			result.push_back(&Items[858]);
+			result.push_back(&Items[859]);
+			result.push_back(&Items[860]);
+			result.push_back(&Items[861]);
+			result.push_back(&Items[862]);
+			result.push_back(&Items[863]);
+			result.push_back(&Items[864]);
+			result.push_back(&Items[865]);
+			result.push_back(&Items[866]);
+			result.push_back(&Items[867]);
+			result.push_back(&Items[868]);
+			result.push_back(&Items[869]);
+			result.push_back(&Items[870]);
+			result.push_back(&Items[871]);
+			result.push_back(&Items[872]);
+			result.push_back(&Items[873]);
+			result.push_back(&Items[874]);
+			result.push_back(&Items[875]);
+			result.push_back(&Items[876]);
+			result.push_back(&Items[877]);
+			result.push_back(&Items[878]);
+			result.push_back(&Items[879]);
+			result.push_back(&Items[880]);
+			result.push_back(&Items[881]);
+			result.push_back(&Items[882]);
+			result.push_back(&Items[883]);
+			result.push_back(&Items[884]);
+			result.push_back(&Items[885]);
+			result.push_back(&Items[886]);
+			result.push_back(&Items[887]);
+			result.push_back(&Items[888]);
+			result.push_back(&Items[889]);
+			result.push_back(&Items[890]);
+			result.push_back(&Items[891]);
+			result.push_back(&Items[892]);
+			result.push_back(&Items[893]);
+			result.push_back(&Items[894]);
+			result.push_back(&Items[895]);
+		}
+		return result;
+	} break;
+
+	case dbietNature: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(159);
+			result.push_back(&Items[896]);
+			result.push_back(&Items[897]);
+			result.push_back(&Items[898]);
+			result.push_back(&Items[899]);
+			result.push_back(&Items[900]);
+			result.push_back(&Items[901]);
+			result.push_back(&Items[902]);
+			result.push_back(&Items[903]);
+			result.push_back(&Items[904]);
+			result.push_back(&Items[905]);
+			result.push_back(&Items[906]);
+			result.push_back(&Items[907]);
+			result.push_back(&Items[908]);
+			result.push_back(&Items[909]);
+			result.push_back(&Items[910]);
+			result.push_back(&Items[911]);
+			result.push_back(&Items[912]);
+			result.push_back(&Items[913]);
+			result.push_back(&Items[914]);
+			result.push_back(&Items[915]);
+			result.push_back(&Items[916]);
+			result.push_back(&Items[917]);
+			result.push_back(&Items[918]);
+			result.push_back(&Items[919]);
+			result.push_back(&Items[920]);
+			result.push_back(&Items[921]);
+			result.push_back(&Items[922]);
+			result.push_back(&Items[923]);
+			result.push_back(&Items[924]);
+			result.push_back(&Items[925]);
+			result.push_back(&Items[926]);
+			result.push_back(&Items[927]);
+			result.push_back(&Items[928]);
+			result.push_back(&Items[929]);
+			result.push_back(&Items[930]);
+			result.push_back(&Items[931]);
+			result.push_back(&Items[932]);
+			result.push_back(&Items[933]);
+			result.push_back(&Items[934]);
+			result.push_back(&Items[935]);
+			result.push_back(&Items[936]);
+			result.push_back(&Items[937]);
+			result.push_back(&Items[938]);
+			result.push_back(&Items[939]);
+			result.push_back(&Items[940]);
+			result.push_back(&Items[941]);
+			result.push_back(&Items[942]);
+			result.push_back(&Items[943]);
+			result.push_back(&Items[944]);
+			result.push_back(&Items[945]);
+			result.push_back(&Items[946]);
+			result.push_back(&Items[947]);
+			result.push_back(&Items[948]);
+			result.push_back(&Items[949]);
+			result.push_back(&Items[950]);
+			result.push_back(&Items[951]);
+			result.push_back(&Items[952]);
+			result.push_back(&Items[953]);
+			result.push_back(&Items[954]);
+			result.push_back(&Items[955]);
+			result.push_back(&Items[956]);
+			result.push_back(&Items[957]);
+			result.push_back(&Items[958]);
+			result.push_back(&Items[959]);
+			result.push_back(&Items[960]);
+			result.push_back(&Items[961]);
+			result.push_back(&Items[962]);
+			result.push_back(&Items[963]);
+			result.push_back(&Items[964]);
+			result.push_back(&Items[965]);
+			result.push_back(&Items[966]);
+			result.push_back(&Items[967]);
+			result.push_back(&Items[968]);
+			result.push_back(&Items[969]);
+			result.push_back(&Items[970]);
+			result.push_back(&Items[971]);
+			result.push_back(&Items[972]);
+			result.push_back(&Items[973]);
+			result.push_back(&Items[974]);
+			result.push_back(&Items[975]);
+			result.push_back(&Items[976]);
+			result.push_back(&Items[977]);
+			result.push_back(&Items[978]);
+			result.push_back(&Items[979]);
+			result.push_back(&Items[980]);
+			result.push_back(&Items[981]);
+			result.push_back(&Items[982]);
+			result.push_back(&Items[983]);
+			result.push_back(&Items[984]);
+			result.push_back(&Items[985]);
+			result.push_back(&Items[986]);
+			result.push_back(&Items[987]);
+			result.push_back(&Items[988]);
+			result.push_back(&Items[989]);
+			result.push_back(&Items[990]);
+			result.push_back(&Items[991]);
+			result.push_back(&Items[992]);
+			result.push_back(&Items[993]);
+			result.push_back(&Items[994]);
+			result.push_back(&Items[995]);
+			result.push_back(&Items[996]);
+			result.push_back(&Items[997]);
+			result.push_back(&Items[998]);
+			result.push_back(&Items[999]);
+			result.push_back(&Items[1000]);
+			result.push_back(&Items[1001]);
+			result.push_back(&Items[1002]);
+			result.push_back(&Items[1003]);
+			result.push_back(&Items[1004]);
+			result.push_back(&Items[1005]);
+			result.push_back(&Items[1006]);
+			result.push_back(&Items[1007]);
+			result.push_back(&Items[1008]);
+			result.push_back(&Items[1009]);
+			result.push_back(&Items[1010]);
+			result.push_back(&Items[1011]);
+			result.push_back(&Items[1012]);
+			result.push_back(&Items[1013]);
+			result.push_back(&Items[1014]);
+			result.push_back(&Items[1015]);
+			result.push_back(&Items[1016]);
+			result.push_back(&Items[1017]);
+			result.push_back(&Items[1018]);
+			result.push_back(&Items[1019]);
+			result.push_back(&Items[1020]);
+			result.push_back(&Items[1021]);
+			result.push_back(&Items[1022]);
+			result.push_back(&Items[1023]);
+			result.push_back(&Items[1024]);
+			result.push_back(&Items[1025]);
+			result.push_back(&Items[1026]);
+			result.push_back(&Items[1027]);
+			result.push_back(&Items[1028]);
+			result.push_back(&Items[1029]);
+			result.push_back(&Items[1030]);
+			result.push_back(&Items[1031]);
+			result.push_back(&Items[1032]);
+			result.push_back(&Items[1033]);
+			result.push_back(&Items[1034]);
+			result.push_back(&Items[1035]);
+			result.push_back(&Items[1036]);
+			result.push_back(&Items[1037]);
+			result.push_back(&Items[1038]);
+			result.push_back(&Items[1039]);
+			result.push_back(&Items[1040]);
+			result.push_back(&Items[1041]);
+			result.push_back(&Items[1042]);
+			result.push_back(&Items[1043]);
+			result.push_back(&Items[1044]);
+			result.push_back(&Items[1045]);
+			result.push_back(&Items[1046]);
+			result.push_back(&Items[1047]);
+			result.push_back(&Items[1048]);
+			result.push_back(&Items[1049]);
+			result.push_back(&Items[1050]);
+			result.push_back(&Items[1051]);
+			result.push_back(&Items[1052]);
+			result.push_back(&Items[1053]);
+			result.push_back(&Items[1054]);
+		}
+		return result;
+	} break;
+
+	case dbietFood: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(86);
+			result.push_back(&Items[1055]);
+			result.push_back(&Items[1056]);
+			result.push_back(&Items[1057]);
+			result.push_back(&Items[1058]);
+			result.push_back(&Items[1059]);
+			result.push_back(&Items[1060]);
+			result.push_back(&Items[1061]);
+			result.push_back(&Items[1062]);
+			result.push_back(&Items[1063]);
+			result.push_back(&Items[1064]);
+			result.push_back(&Items[1065]);
+			result.push_back(&Items[1066]);
+			result.push_back(&Items[1067]);
+			result.push_back(&Items[1068]);
+			result.push_back(&Items[1069]);
+			result.push_back(&Items[1070]);
+			result.push_back(&Items[1071]);
+			result.push_back(&Items[1072]);
+			result.push_back(&Items[1073]);
+			result.push_back(&Items[1074]);
+			result.push_back(&Items[1075]);
+			result.push_back(&Items[1076]);
+			result.push_back(&Items[1077]);
+			result.push_back(&Items[1078]);
+			result.push_back(&Items[1079]);
+			result.push_back(&Items[1080]);
+			result.push_back(&Items[1081]);
+			result.push_back(&Items[1082]);
+			result.push_back(&Items[1083]);
+			result.push_back(&Items[1084]);
+			result.push_back(&Items[1085]);
+			result.push_back(&Items[1086]);
+			result.push_back(&Items[1087]);
+			result.push_back(&Items[1088]);
+			result.push_back(&Items[1089]);
+			result.push_back(&Items[1090]);
+			result.push_back(&Items[1091]);
+			result.push_back(&Items[1092]);
+			result.push_back(&Items[1093]);
+			result.push_back(&Items[1094]);
+			result.push_back(&Items[1095]);
+			result.push_back(&Items[1096]);
+			result.push_back(&Items[1097]);
+			result.push_back(&Items[1098]);
+			result.push_back(&Items[1099]);
+			result.push_back(&Items[1100]);
+			result.push_back(&Items[1101]);
+			result.push_back(&Items[1102]);
+			result.push_back(&Items[1103]);
+			result.push_back(&Items[1104]);
+			result.push_back(&Items[1105]);
+			result.push_back(&Items[1106]);
+			result.push_back(&Items[1107]);
+			result.push_back(&Items[1108]);
+			result.push_back(&Items[1109]);
+			result.push_back(&Items[1110]);
+			result.push_back(&Items[1111]);
+			result.push_back(&Items[1112]);
+			result.push_back(&Items[1113]);
+			result.push_back(&Items[1114]);
+			result.push_back(&Items[1115]);
+			result.push_back(&Items[1116]);
+			result.push_back(&Items[1117]);
+			result.push_back(&Items[1118]);
+			result.push_back(&Items[1119]);
+			result.push_back(&Items[1120]);
+			result.push_back(&Items[1121]);
+			result.push_back(&Items[1122]);
+			result.push_back(&Items[1123]);
+			result.push_back(&Items[1124]);
+			result.push_back(&Items[1125]);
+			result.push_back(&Items[1126]);
+			result.push_back(&Items[1127]);
+			result.push_back(&Items[1128]);
+			result.push_back(&Items[1129]);
+			result.push_back(&Items[1130]);
+			result.push_back(&Items[1131]);
+			result.push_back(&Items[1132]);
+			result.push_back(&Items[1133]);
+			result.push_back(&Items[1134]);
+			result.push_back(&Items[1135]);
+			result.push_back(&Items[1136]);
+			result.push_back(&Items[1137]);
+			result.push_back(&Items[1138]);
+			result.push_back(&Items[1139]);
+			result.push_back(&Items[1140]);
+		}
+		return result;
+	} break;
+
+	case dbietActivity: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(80);
+			result.push_back(&Items[1141]);
+			result.push_back(&Items[1142]);
+			result.push_back(&Items[1143]);
+			result.push_back(&Items[1144]);
+			result.push_back(&Items[1145]);
+			result.push_back(&Items[1146]);
+			result.push_back(&Items[1147]);
+			result.push_back(&Items[1148]);
+			result.push_back(&Items[1149]);
+			result.push_back(&Items[1150]);
+			result.push_back(&Items[1151]);
+			result.push_back(&Items[1152]);
+			result.push_back(&Items[1153]);
+			result.push_back(&Items[1154]);
+			result.push_back(&Items[1155]);
+			result.push_back(&Items[1156]);
+			result.push_back(&Items[1157]);
+			result.push_back(&Items[1158]);
+			result.push_back(&Items[1159]);
+			result.push_back(&Items[1160]);
+			result.push_back(&Items[1161]);
+			result.push_back(&Items[1162]);
+			result.push_back(&Items[1163]);
+			result.push_back(&Items[1164]);
+			result.push_back(&Items[1170]);
+			result.push_back(&Items[1176]);
+			result.push_back(&Items[1177]);
+			result.push_back(&Items[1178]);
+			result.push_back(&Items[1179]);
+			result.push_back(&Items[1185]);
+			result.push_back(&Items[1191]);
+			result.push_back(&Items[1197]);
+			result.push_back(&Items[1203]);
+			result.push_back(&Items[1209]);
+			result.push_back(&Items[1215]);
+			result.push_back(&Items[1221]);
+			result.push_back(&Items[1227]);
+			result.push_back(&Items[1233]);
+			result.push_back(&Items[1239]);
+			result.push_back(&Items[1245]);
+			result.push_back(&Items[1251]);
+			result.push_back(&Items[1257]);
+			result.push_back(&Items[1263]);
+			result.push_back(&Items[1269]);
+			result.push_back(&Items[1275]);
+			result.push_back(&Items[1281]);
+			result.push_back(&Items[1287]);
+			result.push_back(&Items[1293]);
+			result.push_back(&Items[1299]);
+			result.push_back(&Items[1305]);
+			result.push_back(&Items[1306]);
+			result.push_back(&Items[1307]);
+			result.push_back(&Items[1308]);
+			result.push_back(&Items[1309]);
+			result.push_back(&Items[1310]);
+			result.push_back(&Items[1311]);
+			result.push_back(&Items[1312]);
+			result.push_back(&Items[1313]);
+			result.push_back(&Items[1314]);
+			result.push_back(&Items[1315]);
+			result.push_back(&Items[1316]);
+			result.push_back(&Items[1317]);
+			result.push_back(&Items[1323]);
+			result.push_back(&Items[1329]);
+			result.push_back(&Items[1330]);
+			result.push_back(&Items[1331]);
+			result.push_back(&Items[1332]);
+			result.push_back(&Items[1333]);
+			result.push_back(&Items[1334]);
+			result.push_back(&Items[1335]);
+			result.push_back(&Items[1336]);
+			result.push_back(&Items[1337]);
+			result.push_back(&Items[1338]);
+			result.push_back(&Items[1339]);
+			result.push_back(&Items[1340]);
+			result.push_back(&Items[1341]);
+			result.push_back(&Items[1342]);
+			result.push_back(&Items[1343]);
+			result.push_back(&Items[1344]);
+			result.push_back(&Items[1345]);
+		}
+		return result;
+	} break;
+
+	case dbietTravel: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(119);
+			result.push_back(&Items[1346]);
+			result.push_back(&Items[1347]);
+			result.push_back(&Items[1348]);
+			result.push_back(&Items[1349]);
+			result.push_back(&Items[1350]);
+			result.push_back(&Items[1351]);
+			result.push_back(&Items[1352]);
+			result.push_back(&Items[1353]);
+			result.push_back(&Items[1354]);
+			result.push_back(&Items[1355]);
+			result.push_back(&Items[1356]);
+			result.push_back(&Items[1357]);
+			result.push_back(&Items[1358]);
+			result.push_back(&Items[1359]);
+			result.push_back(&Items[1360]);
+			result.push_back(&Items[1361]);
+			result.push_back(&Items[1362]);
+			result.push_back(&Items[1363]);
+			result.push_back(&Items[1364]);
+			result.push_back(&Items[1365]);
+			result.push_back(&Items[1366]);
+			result.push_back(&Items[1367]);
+			result.push_back(&Items[1368]);
+			result.push_back(&Items[1369]);
+			result.push_back(&Items[1370]);
+			result.push_back(&Items[1371]);
+			result.push_back(&Items[1372]);
+			result.push_back(&Items[1373]);
+			result.push_back(&Items[1374]);
+			result.push_back(&Items[1375]);
+			result.push_back(&Items[1376]);
+			result.push_back(&Items[1377]);
+			result.push_back(&Items[1378]);
+			result.push_back(&Items[1379]);
+			result.push_back(&Items[1380]);
+			result.push_back(&Items[1381]);
+			result.push_back(&Items[1382]);
+			result.push_back(&Items[1383]);
+			result.push_back(&Items[1384]);
+			result.push_back(&Items[1385]);
+			result.push_back(&Items[1386]);
+			result.push_back(&Items[1387]);
+			result.push_back(&Items[1388]);
+			result.push_back(&Items[1389]);
+			result.push_back(&Items[1390]);
+			result.push_back(&Items[1391]);
+			result.push_back(&Items[1392]);
+			result.push_back(&Items[1393]);
+			result.push_back(&Items[1394]);
+			result.push_back(&Items[1395]);
+			result.push_back(&Items[1396]);
+			result.push_back(&Items[1397]);
+			result.push_back(&Items[1398]);
+			result.push_back(&Items[1399]);
+			result.push_back(&Items[1400]);
+			result.push_back(&Items[1401]);
+			result.push_back(&Items[1402]);
+			result.push_back(&Items[1403]);
+			result.push_back(&Items[1404]);
+			result.push_back(&Items[1405]);
+			result.push_back(&Items[1406]);
+			result.push_back(&Items[1407]);
+			result.push_back(&Items[1408]);
+			result.push_back(&Items[1409]);
+			result.push_back(&Items[1410]);
+			result.push_back(&Items[1411]);
+			result.push_back(&Items[1412]);
+			result.push_back(&Items[1413]);
+			result.push_back(&Items[1414]);
+			result.push_back(&Items[1415]);
+			result.push_back(&Items[1416]);
+			result.push_back(&Items[1417]);
+			result.push_back(&Items[1418]);
+			result.push_back(&Items[1419]);
+			result.push_back(&Items[1420]);
+			result.push_back(&Items[1421]);
+			result.push_back(&Items[1422]);
+			result.push_back(&Items[1423]);
+			result.push_back(&Items[1424]);
+			result.push_back(&Items[1425]);
+			result.push_back(&Items[1426]);
+			result.push_back(&Items[1427]);
+			result.push_back(&Items[1428]);
+			result.push_back(&Items[1429]);
+			result.push_back(&Items[1430]);
+			result.push_back(&Items[1431]);
+			result.push_back(&Items[1432]);
+			result.push_back(&Items[1433]);
+			result.push_back(&Items[1434]);
+			result.push_back(&Items[1435]);
+			result.push_back(&Items[1436]);
+			result.push_back(&Items[1437]);
+			result.push_back(&Items[1438]);
+			result.push_back(&Items[1439]);
+			result.push_back(&Items[1440]);
+			result.push_back(&Items[1441]);
+			result.push_back(&Items[1442]);
+			result.push_back(&Items[1443]);
+			result.push_back(&Items[1444]);
+			result.push_back(&Items[1445]);
+			result.push_back(&Items[1446]);
+			result.push_back(&Items[1447]);
+			result.push_back(&Items[1448]);
+			result.push_back(&Items[1449]);
+			result.push_back(&Items[1450]);
+			result.push_back(&Items[1451]);
+			result.push_back(&Items[1452]);
+			result.push_back(&Items[1453]);
+			result.push_back(&Items[1454]);
+			result.push_back(&Items[1455]);
+			result.push_back(&Items[1456]);
+			result.push_back(&Items[1457]);
+			result.push_back(&Items[1458]);
+			result.push_back(&Items[1459]);
+			result.push_back(&Items[1460]);
+			result.push_back(&Items[1461]);
+			result.push_back(&Items[1462]);
+			result.push_back(&Items[1463]);
+			result.push_back(&Items[1464]);
+		}
+		return result;
+	} break;
+
+	case dbietObjects: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(173);
+			result.push_back(&Items[1465]);
+			result.push_back(&Items[1466]);
+			result.push_back(&Items[1467]);
+			result.push_back(&Items[1468]);
+			result.push_back(&Items[1469]);
+			result.push_back(&Items[1470]);
+			result.push_back(&Items[1471]);
+			result.push_back(&Items[1472]);
+			result.push_back(&Items[1473]);
+			result.push_back(&Items[1474]);
+			result.push_back(&Items[1475]);
+			result.push_back(&Items[1476]);
+			result.push_back(&Items[1477]);
+			result.push_back(&Items[1478]);
+			result.push_back(&Items[1479]);
+			result.push_back(&Items[1480]);
+			result.push_back(&Items[1481]);
+			result.push_back(&Items[1482]);
+			result.push_back(&Items[1483]);
+			result.push_back(&Items[1484]);
+			result.push_back(&Items[1485]);
+			result.push_back(&Items[1486]);
+			result.push_back(&Items[1487]);
+			result.push_back(&Items[1488]);
+			result.push_back(&Items[1489]);
+			result.push_back(&Items[1490]);
+			result.push_back(&Items[1491]);
+			result.push_back(&Items[1492]);
+			result.push_back(&Items[1493]);
+			result.push_back(&Items[1494]);
+			result.push_back(&Items[1495]);
+			result.push_back(&Items[1496]);
+			result.push_back(&Items[1497]);
+			result.push_back(&Items[1498]);
+			result.push_back(&Items[1499]);
+			result.push_back(&Items[1500]);
+			result.push_back(&Items[1501]);
+			result.push_back(&Items[1502]);
+			result.push_back(&Items[1503]);
+			result.push_back(&Items[1504]);
+			result.push_back(&Items[1505]);
+			result.push_back(&Items[1506]);
+			result.push_back(&Items[1507]);
+			result.push_back(&Items[1508]);
+			result.push_back(&Items[1509]);
+			result.push_back(&Items[1510]);
+			result.push_back(&Items[1511]);
+			result.push_back(&Items[1512]);
+			result.push_back(&Items[1513]);
+			result.push_back(&Items[1514]);
+			result.push_back(&Items[1515]);
+			result.push_back(&Items[1516]);
+			result.push_back(&Items[1517]);
+			result.push_back(&Items[1518]);
+			result.push_back(&Items[1519]);
+			result.push_back(&Items[1520]);
+			result.push_back(&Items[1521]);
+			result.push_back(&Items[1522]);
+			result.push_back(&Items[1523]);
+			result.push_back(&Items[1524]);
+			result.push_back(&Items[1525]);
+			result.push_back(&Items[1526]);
+			result.push_back(&Items[1527]);
+			result.push_back(&Items[1528]);
+			result.push_back(&Items[1529]);
+			result.push_back(&Items[1530]);
+			result.push_back(&Items[1531]);
+			result.push_back(&Items[1532]);
+			result.push_back(&Items[1533]);
+			result.push_back(&Items[1534]);
+			result.push_back(&Items[1535]);
+			result.push_back(&Items[1536]);
+			result.push_back(&Items[1537]);
+			result.push_back(&Items[1538]);
+			result.push_back(&Items[1539]);
+			result.push_back(&Items[1540]);
+			result.push_back(&Items[1541]);
+			result.push_back(&Items[1542]);
+			result.push_back(&Items[1543]);
+			result.push_back(&Items[1544]);
+			result.push_back(&Items[1545]);
+			result.push_back(&Items[1546]);
+			result.push_back(&Items[1547]);
+			result.push_back(&Items[1548]);
+			result.push_back(&Items[1549]);
+			result.push_back(&Items[1550]);
+			result.push_back(&Items[1551]);
+			result.push_back(&Items[1557]);
+			result.push_back(&Items[1558]);
+			result.push_back(&Items[1559]);
+			result.push_back(&Items[1560]);
+			result.push_back(&Items[1561]);
+			result.push_back(&Items[1562]);
+			result.push_back(&Items[1563]);
+			result.push_back(&Items[1564]);
+			result.push_back(&Items[1565]);
+			result.push_back(&Items[1566]);
+			result.push_back(&Items[1567]);
+			result.push_back(&Items[1568]);
+			result.push_back(&Items[1569]);
+			result.push_back(&Items[1570]);
+			result.push_back(&Items[1571]);
+			result.push_back(&Items[1572]);
+			result.push_back(&Items[1573]);
+			result.push_back(&Items[1574]);
+			result.push_back(&Items[1575]);
+			result.push_back(&Items[1576]);
+			result.push_back(&Items[1577]);
+			result.push_back(&Items[1578]);
+			result.push_back(&Items[1579]);
+			result.push_back(&Items[1580]);
+			result.push_back(&Items[1581]);
+			result.push_back(&Items[1582]);
+			result.push_back(&Items[1583]);
+			result.push_back(&Items[1584]);
+			result.push_back(&Items[1585]);
+			result.push_back(&Items[1586]);
+			result.push_back(&Items[1587]);
+			result.push_back(&Items[1588]);
+			result.push_back(&Items[1589]);
+			result.push_back(&Items[1590]);
+			result.push_back(&Items[1591]);
+			result.push_back(&Items[1592]);
+			result.push_back(&Items[1593]);
+			result.push_back(&Items[1594]);
+			result.push_back(&Items[1595]);
+			result.push_back(&Items[1596]);
+			result.push_back(&Items[1597]);
+			result.push_back(&Items[1598]);
+			result.push_back(&Items[1599]);
+			result.push_back(&Items[1600]);
+			result.push_back(&Items[1601]);
+			result.push_back(&Items[1602]);
+			result.push_back(&Items[1603]);
+			result.push_back(&Items[1604]);
+			result.push_back(&Items[1605]);
+			result.push_back(&Items[1606]);
+			result.push_back(&Items[1607]);
+			result.push_back(&Items[1608]);
+			result.push_back(&Items[1609]);
+			result.push_back(&Items[1610]);
+			result.push_back(&Items[1611]);
+			result.push_back(&Items[1612]);
+			result.push_back(&Items[1613]);
+			result.push_back(&Items[1614]);
+			result.push_back(&Items[1615]);
+			result.push_back(&Items[1616]);
+			result.push_back(&Items[1617]);
+			result.push_back(&Items[1618]);
+			result.push_back(&Items[1619]);
+			result.push_back(&Items[1620]);
+			result.push_back(&Items[1621]);
+			result.push_back(&Items[1622]);
+			result.push_back(&Items[1623]);
+			result.push_back(&Items[1624]);
+			result.push_back(&Items[1625]);
+			result.push_back(&Items[1626]);
+			result.push_back(&Items[1627]);
+			result.push_back(&Items[1628]);
+			result.push_back(&Items[1629]);
+			result.push_back(&Items[1630]);
+			result.push_back(&Items[1631]);
+			result.push_back(&Items[1632]);
+			result.push_back(&Items[1633]);
+			result.push_back(&Items[1634]);
+			result.push_back(&Items[1635]);
+			result.push_back(&Items[1636]);
+			result.push_back(&Items[1637]);
+			result.push_back(&Items[1638]);
+			result.push_back(&Items[1639]);
+			result.push_back(&Items[1640]);
+			result.push_back(&Items[1641]);
+			result.push_back(&Items[1642]);
+		}
+		return result;
+	} break;
+
+	case dbietSymbols: {
+		static auto result = EmojiPack();
+		if (result.isEmpty()) {
+			result.reserve(524);
+			result.push_back(&Items[1643]);
+			result.push_back(&Items[1644]);
+			result.push_back(&Items[1645]);
+			result.push_back(&Items[1646]);
+			result.push_back(&Items[1647]);
+			result.push_back(&Items[1648]);
+			result.push_back(&Items[1649]);
+			result.push_back(&Items[1650]);
+			result.push_back(&Items[1651]);
+			result.push_back(&Items[1652]);
+			result.push_back(&Items[1653]);
+			result.push_back(&Items[1654]);
+			result.push_back(&Items[1655]);
+			result.push_back(&Items[1656]);
+			result.push_back(&Items[1657]);
+			result.push_back(&Items[1658]);
+			result.push_back(&Items[1659]);
+			result.push_back(&Items[1660]);
+			result.push_back(&Items[1661]);
+			result.push_back(&Items[1662]);
+			result.push_back(&Items[1663]);
+			result.push_back(&Items[1664]);
+			result.push_back(&Items[1665]);
+			result.push_back(&Items[1666]);
+			result.push_back(&Items[1667]);
+			result.push_back(&Items[1668]);
+			result.push_back(&Items[1669]);
+			result.push_back(&Items[1670]);
+			result.push_back(&Items[1671]);
+			result.push_back(&Items[1672]);
+			result.push_back(&Items[1673]);
+			result.push_back(&Items[1674]);
+			result.push_back(&Items[1675]);
+			result.push_back(&Items[1676]);
+			result.push_back(&Items[1677]);
+			result.push_back(&Items[1678]);
+			result.push_back(&Items[1679]);
+			result.push_back(&Items[1680]);
+			result.push_back(&Items[1681]);
+			result.push_back(&Items[1682]);
+			result.push_back(&Items[1683]);
+			result.push_back(&Items[1684]);
+			result.push_back(&Items[1685]);
+			result.push_back(&Items[1686]);
+			result.push_back(&Items[1687]);
+			result.push_back(&Items[1688]);
+			result.push_back(&Items[1689]);
+			result.push_back(&Items[1690]);
+			result.push_back(&Items[1691]);
+			result.push_back(&Items[1692]);
+			result.push_back(&Items[1693]);
+			result.push_back(&Items[1694]);
+			result.push_back(&Items[1695]);
+			result.push_back(&Items[1696]);
+			result.push_back(&Items[1697]);
+			result.push_back(&Items[1698]);
+			result.push_back(&Items[1699]);
+			result.push_back(&Items[1700]);
+			result.push_back(&Items[1701]);
+			result.push_back(&Items[1702]);
+			result.push_back(&Items[1703]);
+			result.push_back(&Items[1704]);
+			result.push_back(&Items[1705]);
+			result.push_back(&Items[1706]);
+			result.push_back(&Items[1707]);
+			result.push_back(&Items[1708]);
+			result.push_back(&Items[1709]);
+			result.push_back(&Items[1710]);
+			result.push_back(&Items[1711]);
+			result.push_back(&Items[1712]);
+			result.push_back(&Items[1713]);
+			result.push_back(&Items[1714]);
+			result.push_back(&Items[1715]);
+			result.push_back(&Items[1716]);
+			result.push_back(&Items[1717]);
+			result.push_back(&Items[1718]);
+			result.push_back(&Items[1719]);
+			result.push_back(&Items[1720]);
+			result.push_back(&Items[1721]);
+			result.push_back(&Items[1722]);
+			result.push_back(&Items[1723]);
+			result.push_back(&Items[1724]);
+			result.push_back(&Items[1725]);
+			result.push_back(&Items[1726]);
+			result.push_back(&Items[1727]);
+			result.push_back(&Items[1728]);
+			result.push_back(&Items[1729]);
+			result.push_back(&Items[1730]);
+			result.push_back(&Items[1731]);
+			result.push_back(&Items[1732]);
+			result.push_back(&Items[1733]);
+			result.push_back(&Items[1734]);
+			result.push_back(&Items[1735]);
+			result.push_back(&Items[1736]);
+			result.push_back(&Items[1737]);
+			result.push_back(&Items[1738]);
+			result.push_back(&Items[1739]);
+			result.push_back(&Items[1740]);
+			result.push_back(&Items[1741]);
+			result.push_back(&Items[1742]);
+			result.push_back(&Items[1743]);
+			result.push_back(&Items[1744]);
+			result.push_back(&Items[1745]);
+			result.push_back(&Items[1746]);
+			result.push_back(&Items[1747]);
+			result.push_back(&Items[1748]);
+			result.push_back(&Items[1749]);
+			result.push_back(&Items[1750]);
+			result.push_back(&Items[1751]);
+			result.push_back(&Items[1752]);
+			result.push_back(&Items[1753]);
+			result.push_back(&Items[1754]);
+			result.push_back(&Items[1755]);
+			result.push_back(&Items[1756]);
+			result.push_back(&Items[1757]);
+			result.push_back(&Items[1758]);
+			result.push_back(&Items[1759]);
+			result.push_back(&Items[1760]);
+			result.push_back(&Items[1761]);
+			result.push_back(&Items[1762]);
+			result.push_back(&Items[1763]);
+			result.push_back(&Items[1764]);
+			result.push_back(&Items[1765]);
+			result.push_back(&Items[1766]);
+			result.push_back(&Items[1767]);
+			result.push_back(&Items[1768]);
+			result.push_back(&Items[1769]);
+			result.push_back(&Items[1770]);
+			result.push_back(&Items[1771]);
+			result.push_back(&Items[1772]);
+			result.push_back(&Items[1773]);
+			result.push_back(&Items[1774]);
+			result.push_back(&Items[1775]);
+			result.push_back(&Items[1776]);
+			result.push_back(&Items[1777]);
+			result.push_back(&Items[1778]);
+			result.push_back(&Items[1779]);
+			result.push_back(&Items[1780]);
+			result.push_back(&Items[1781]);
+			result.push_back(&Items[1782]);
+			result.push_back(&Items[1783]);
+			result.push_back(&Items[1784]);
+			result.push_back(&Items[1785]);
+			result.push_back(&Items[1786]);
+			result.push_back(&Items[1787]);
+			result.push_back(&Items[1788]);
+			result.push_back(&Items[1789]);
+			result.push_back(&Items[1790]);
+			result.push_back(&Items[1791]);
+			result.push_back(&Items[1792]);
+			result.push_back(&Items[1793]);
+			result.push_back(&Items[1794]);
+			result.push_back(&Items[1795]);
+			result.push_back(&Items[1796]);
+			result.push_back(&Items[1797]);
+			result.push_back(&Items[1798]);
+			result.push_back(&Items[1799]);
+			result.push_back(&Items[1800]);
+			result.push_back(&Items[1801]);
+			result.push_back(&Items[1802]);
+			result.push_back(&Items[1803]);
+			result.push_back(&Items[1804]);
+			result.push_back(&Items[1805]);
+			result.push_back(&Items[1806]);
+			result.push_back(&Items[1807]);
+			result.push_back(&Items[1808]);
+			result.push_back(&Items[1809]);
+			result.push_back(&Items[1810]);
+			result.push_back(&Items[1811]);
+			result.push_back(&Items[1812]);
+			result.push_back(&Items[1813]);
+			result.push_back(&Items[1814]);
+			result.push_back(&Items[1815]);
+			result.push_back(&Items[1816]);
+			result.push_back(&Items[1817]);
+			result.push_back(&Items[1818]);
+			result.push_back(&Items[1819]);
+			result.push_back(&Items[1820]);
+			result.push_back(&Items[1821]);
+			result.push_back(&Items[1822]);
+			result.push_back(&Items[1823]);
+			result.push_back(&Items[1824]);
+			result.push_back(&Items[1825]);
+			result.push_back(&Items[1826]);
+			result.push_back(&Items[1827]);
+			result.push_back(&Items[1828]);
+			result.push_back(&Items[1829]);
+			result.push_back(&Items[1830]);
+			result.push_back(&Items[1831]);
+			result.push_back(&Items[1832]);
+			result.push_back(&Items[1833]);
+			result.push_back(&Items[1834]);
+			result.push_back(&Items[1835]);
+			result.push_back(&Items[1836]);
+			result.push_back(&Items[1837]);
+			result.push_back(&Items[1838]);
+			result.push_back(&Items[1839]);
+			result.push_back(&Items[1840]);
+			result.push_back(&Items[1841]);
+			result.push_back(&Items[1842]);
+			result.push_back(&Items[1843]);
+			result.push_back(&Items[1844]);
+			result.push_back(&Items[1845]);
+			result.push_back(&Items[1846]);
+			result.push_back(&Items[1847]);
+			result.push_back(&Items[1848]);
+			result.push_back(&Items[1849]);
+			result.push_back(&Items[1850]);
+			result.push_back(&Items[1851]);
+			result.push_back(&Items[1852]);
+			result.push_back(&Items[1853]);
+			result.push_back(&Items[1854]);
+			result.push_back(&Items[1855]);
+			result.push_back(&Items[1856]);
+			result.push_back(&Items[1857]);
+			result.push_back(&Items[1858]);
+			result.push_back(&Items[1859]);
+			result.push_back(&Items[1860]);
+			result.push_back(&Items[1861]);
+			result.push_back(&Items[1862]);
+			result.push_back(&Items[1863]);
+			result.push_back(&Items[1864]);
+			result.push_back(&Items[1865]);
+			result.push_back(&Items[1866]);
+			result.push_back(&Items[1867]);
+			result.push_back(&Items[1868]);
+			result.push_back(&Items[1869]);
+			result.push_back(&Items[1870]);
+			result.push_back(&Items[1871]);
+			result.push_back(&Items[1872]);
+			result.push_back(&Items[1873]);
+			result.push_back(&Items[1874]);
+			result.push_back(&Items[1875]);
+			result.push_back(&Items[1876]);
+			result.push_back(&Items[1877]);
+			result.push_back(&Items[1878]);
+			result.push_back(&Items[1879]);
+			result.push_back(&Items[1880]);
+			result.push_back(&Items[1881]);
+			result.push_back(&Items[1882]);
+			result.push_back(&Items[1883]);
+			result.push_back(&Items[1884]);
+			result.push_back(&Items[1885]);
+			result.push_back(&Items[1886]);
+			result.push_back(&Items[1887]);
+			result.push_back(&Items[1888]);
+			result.push_back(&Items[1889]);
+			result.push_back(&Items[1890]);
+			result.push_back(&Items[1891]);
+			result.push_back(&Items[1892]);
+			result.push_back(&Items[1893]);
+			result.push_back(&Items[1894]);
+			result.push_back(&Items[1895]);
+			result.push_back(&Items[1896]);
+			result.push_back(&Items[1897]);
+			result.push_back(&Items[1898]);
+			result.push_back(&Items[1899]);
+			result.push_back(&Items[1900]);
+			result.push_back(&Items[1901]);
+			result.push_back(&Items[1902]);
+			result.push_back(&Items[1903]);
+			result.push_back(&Items[1904]);
+			result.push_back(&Items[1905]);
+			result.push_back(&Items[1906]);
+			result.push_back(&Items[1907]);
+			result.push_back(&Items[1908]);
+			result.push_back(&Items[1909]);
+			result.push_back(&Items[1910]);
+			result.push_back(&Items[1911]);
+			result.push_back(&Items[1912]);
+			result.push_back(&Items[1913]);
+			result.push_back(&Items[1914]);
+			result.push_back(&Items[1915]);
+			result.push_back(&Items[1916]);
+			result.push_back(&Items[1917]);
+			result.push_back(&Items[1918]);
+			result.push_back(&Items[1919]);
+			result.push_back(&Items[1920]);
+			result.push_back(&Items[1921]);
+			result.push_back(&Items[1922]);
+			result.push_back(&Items[1923]);
+			result.push_back(&Items[1924]);
+			result.push_back(&Items[1925]);
+			result.push_back(&Items[1926]);
+			result.push_back(&Items[1927]);
+			result.push_back(&Items[1928]);
+			result.push_back(&Items[1929]);
+			result.push_back(&Items[1930]);
+			result.push_back(&Items[1931]);
+			result.push_back(&Items[1932]);
+			result.push_back(&Items[1933]);
+			result.push_back(&Items[1934]);
+			result.push_back(&Items[1935]);
+			result.push_back(&Items[1936]);
+			result.push_back(&Items[1937]);
+			result.push_back(&Items[1938]);
+			result.push_back(&Items[1939]);
+			result.push_back(&Items[1940]);
+			result.push_back(&Items[1941]);
+			result.push_back(&Items[1942]);
+			result.push_back(&Items[1943]);
+			result.push_back(&Items[1944]);
+			result.push_back(&Items[1945]);
+			result.push_back(&Items[1946]);
+			result.push_back(&Items[1947]);
+			result.push_back(&Items[1948]);
+			result.push_back(&Items[1949]);
+			result.push_back(&Items[1950]);
+			result.push_back(&Items[1951]);
+			result.push_back(&Items[1952]);
+			result.push_back(&Items[1953]);
+			result.push_back(&Items[1954]);
+			result.push_back(&Items[1955]);
+			result.push_back(&Items[1956]);
+			result.push_back(&Items[1957]);
+			result.push_back(&Items[1958]);
+			result.push_back(&Items[1959]);
+			result.push_back(&Items[1960]);
+			result.push_back(&Items[1961]);
+			result.push_back(&Items[1962]);
+			result.push_back(&Items[1963]);
+			result.push_back(&Items[1964]);
+			result.push_back(&Items[1965]);
+			result.push_back(&Items[1966]);
+			result.push_back(&Items[1967]);
+			result.push_back(&Items[1968]);
+			result.push_back(&Items[1969]);
+			result.push_back(&Items[1970]);
+			result.push_back(&Items[1971]);
+			result.push_back(&Items[1972]);
+			result.push_back(&Items[1973]);
+			result.push_back(&Items[1974]);
+			result.push_back(&Items[1975]);
+			result.push_back(&Items[1976]);
+			result.push_back(&Items[1977]);
+			result.push_back(&Items[1978]);
+			result.push_back(&Items[1979]);
+			result.push_back(&Items[1980]);
+			result.push_back(&Items[1981]);
+			result.push_back(&Items[1982]);
+			result.push_back(&Items[1983]);
+			result.push_back(&Items[1984]);
+			result.push_back(&Items[1985]);
+			result.push_back(&Items[1986]);
+			result.push_back(&Items[1987]);
+			result.push_back(&Items[1988]);
+			result.push_back(&Items[1989]);
+			result.push_back(&Items[1990]);
+			result.push_back(&Items[1991]);
+			result.push_back(&Items[1992]);
+			result.push_back(&Items[1993]);
+			result.push_back(&Items[1994]);
+			result.push_back(&Items[1995]);
+			result.push_back(&Items[1996]);
+			result.push_back(&Items[1997]);
+			result.push_back(&Items[1998]);
+			result.push_back(&Items[1999]);
+			result.push_back(&Items[2000]);
+			result.push_back(&Items[2001]);
+			result.push_back(&Items[2002]);
+			result.push_back(&Items[2003]);
+			result.push_back(&Items[2004]);
+			result.push_back(&Items[2005]);
+			result.push_back(&Items[2006]);
+			result.push_back(&Items[2007]);
+			result.push_back(&Items[2008]);
+			result.push_back(&Items[2009]);
+			result.push_back(&Items[2010]);
+			result.push_back(&Items[2011]);
+			result.push_back(&Items[2012]);
+			result.push_back(&Items[2013]);
+			result.push_back(&Items[2014]);
+			result.push_back(&Items[2015]);
+			result.push_back(&Items[2016]);
+			result.push_back(&Items[2017]);
+			result.push_back(&Items[2018]);
+			result.push_back(&Items[2019]);
+			result.push_back(&Items[2020]);
+			result.push_back(&Items[2021]);
+			result.push_back(&Items[2022]);
+			result.push_back(&Items[2023]);
+			result.push_back(&Items[2024]);
+			result.push_back(&Items[2025]);
+			result.push_back(&Items[2026]);
+			result.push_back(&Items[2027]);
+			result.push_back(&Items[2028]);
+			result.push_back(&Items[2029]);
+			result.push_back(&Items[2030]);
+			result.push_back(&Items[2031]);
+			result.push_back(&Items[2032]);
+			result.push_back(&Items[2033]);
+			result.push_back(&Items[2034]);
+			result.push_back(&Items[2035]);
+			result.push_back(&Items[2036]);
+			result.push_back(&Items[2037]);
+			result.push_back(&Items[2038]);
+			result.push_back(&Items[2039]);
+			result.push_back(&Items[2040]);
+			result.push_back(&Items[2041]);
+			result.push_back(&Items[2042]);
+			result.push_back(&Items[2043]);
+			result.push_back(&Items[2044]);
+			result.push_back(&Items[2045]);
+			result.push_back(&Items[2046]);
+			result.push_back(&Items[2047]);
+			result.push_back(&Items[2048]);
+			result.push_back(&Items[2049]);
+			result.push_back(&Items[2050]);
+			result.push_back(&Items[2051]);
+			result.push_back(&Items[2052]);
+			result.push_back(&Items[2053]);
+			result.push_back(&Items[2054]);
+			result.push_back(&Items[2055]);
+			result.push_back(&Items[2056]);
+			result.push_back(&Items[2057]);
+			result.push_back(&Items[2058]);
+			result.push_back(&Items[2059]);
+			result.push_back(&Items[2060]);
+			result.push_back(&Items[2061]);
+			result.push_back(&Items[2062]);
+			result.push_back(&Items[2063]);
+			result.push_back(&Items[2064]);
+			result.push_back(&Items[2065]);
+			result.push_back(&Items[2066]);
+			result.push_back(&Items[2067]);
+			result.push_back(&Items[2068]);
+			result.push_back(&Items[2069]);
+			result.push_back(&Items[2070]);
+			result.push_back(&Items[2071]);
+			result.push_back(&Items[2072]);
+			result.push_back(&Items[2073]);
+			result.push_back(&Items[2074]);
+			result.push_back(&Items[2075]);
+			result.push_back(&Items[2076]);
+			result.push_back(&Items[2077]);
+			result.push_back(&Items[2078]);
+			result.push_back(&Items[2079]);
+			result.push_back(&Items[2080]);
+			result.push_back(&Items[2081]);
+			result.push_back(&Items[2082]);
+			result.push_back(&Items[2083]);
+			result.push_back(&Items[2084]);
+			result.push_back(&Items[2085]);
+			result.push_back(&Items[2086]);
+			result.push_back(&Items[2087]);
+			result.push_back(&Items[2088]);
+			result.push_back(&Items[2089]);
+			result.push_back(&Items[2090]);
+			result.push_back(&Items[2091]);
+			result.push_back(&Items[2092]);
+			result.push_back(&Items[2093]);
+			result.push_back(&Items[2094]);
+			result.push_back(&Items[2095]);
+			result.push_back(&Items[2096]);
+			result.push_back(&Items[2097]);
+			result.push_back(&Items[2098]);
+			result.push_back(&Items[2099]);
+			result.push_back(&Items[2100]);
+			result.push_back(&Items[2101]);
+			result.push_back(&Items[2102]);
+			result.push_back(&Items[2103]);
+			result.push_back(&Items[2104]);
+			result.push_back(&Items[2105]);
+			result.push_back(&Items[2106]);
+			result.push_back(&Items[2107]);
+			result.push_back(&Items[2108]);
+			result.push_back(&Items[2109]);
+			result.push_back(&Items[2110]);
+			result.push_back(&Items[2111]);
+			result.push_back(&Items[2112]);
+			result.push_back(&Items[2113]);
+			result.push_back(&Items[2114]);
+			result.push_back(&Items[2115]);
+			result.push_back(&Items[2116]);
+			result.push_back(&Items[2117]);
+			result.push_back(&Items[2118]);
+			result.push_back(&Items[2119]);
+			result.push_back(&Items[2120]);
+			result.push_back(&Items[2121]);
+			result.push_back(&Items[2122]);
+			result.push_back(&Items[2123]);
+			result.push_back(&Items[2124]);
+			result.push_back(&Items[2125]);
+			result.push_back(&Items[2126]);
+			result.push_back(&Items[2127]);
+			result.push_back(&Items[2128]);
+			result.push_back(&Items[2129]);
+			result.push_back(&Items[2130]);
+			result.push_back(&Items[2131]);
+			result.push_back(&Items[2132]);
+			result.push_back(&Items[2133]);
+			result.push_back(&Items[2134]);
+			result.push_back(&Items[2135]);
+			result.push_back(&Items[2136]);
+			result.push_back(&Items[2137]);
+			result.push_back(&Items[2138]);
+			result.push_back(&Items[2139]);
+			result.push_back(&Items[2140]);
+			result.push_back(&Items[2141]);
+			result.push_back(&Items[2142]);
+			result.push_back(&Items[2143]);
+			result.push_back(&Items[2144]);
+			result.push_back(&Items[2145]);
+			result.push_back(&Items[2146]);
+			result.push_back(&Items[2147]);
+			result.push_back(&Items[2148]);
+			result.push_back(&Items[2149]);
+			result.push_back(&Items[2150]);
+			result.push_back(&Items[2151]);
+			result.push_back(&Items[2152]);
+			result.push_back(&Items[2153]);
+			result.push_back(&Items[2154]);
+			result.push_back(&Items[2155]);
+			result.push_back(&Items[2156]);
+			result.push_back(&Items[2157]);
+			result.push_back(&Items[2158]);
+			result.push_back(&Items[2159]);
+			result.push_back(&Items[2160]);
+			result.push_back(&Items[2161]);
+			result.push_back(&Items[2162]);
+			result.push_back(&Items[2163]);
+			result.push_back(&Items[2164]);
+			result.push_back(&Items[2165]);
+			result.push_back(&Items[2166]);
+		}
+		return result;
+	} break;
+
+	case dbietRecent: {
+		auto result = EmojiPack();
+		result.reserve(cGetRecentEmoji().size());
+		for (auto &item : cGetRecentEmoji()) {
+			result.push_back(item.first);
+		}
+		return result;
+	} break;
+	}
+	return EmojiPack();
+}
+
+int Index() {
+	return WorkingIndex;
+}
+
+int One::variantsCount() const {
+	return hasVariants() ? 5 : 0;
+}
+
+int One::variantIndex(EmojiPtr variant) const {
+	return (variant - original());
+}
+
+EmojiPtr One::variant(int index) const {
+	return (index >= 0 && index <= variantsCount()) ? (original() + index) : this;
+}
+
+int One::index() const {
+	return (this - &Items[0]);
+}
+
+} // namespace Emoji
+} // namespace Ui
diff --git a/Telegram/SourceFiles/ui/emoji_config.h b/Telegram/SourceFiles/ui/emoji_config.h
index de7975daa..00e55994c 100644
--- a/Telegram/SourceFiles/ui/emoji_config.h
+++ b/Telegram/SourceFiles/ui/emoji_config.h
@@ -22,149 +22,219 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 
 #include "ui/text/text.h"
 
-void emojiInit();
-EmojiPtr emojiGet(uint32 code);
-EmojiPtr emojiGet(uint32 code, uint32 code2);
-EmojiPtr emojiGet(EmojiPtr emoji, uint32 color);
-EmojiPtr emojiGet(const QChar *from, const QChar *end);
-QString emojiGetSequence(int index);
+namespace Ui {
+namespace Emoji {
+namespace internal {
 
-inline QString emojiString(EmojiPtr emoji) {
-	if ((emoji->code & 0xFFFF0000U) == 0xFFFF0000U) { // sequence
-		return emojiGetSequence(emoji->code & 0xFFFFU);
-	}
+EmojiPtr ByIndex(int index);
 
-	QString result;
-	result.reserve(emoji->len + (emoji->postfix ? 1 : 0));
-	if (!(emoji->code >> 16)) {
-		result.append(QChar(emoji->code & 0xFFFF));
-	} else {
-		result.append(QChar((emoji->code >> 16) & 0xFFFF));
-		result.append(QChar(emoji->code & 0xFFFF));
-		if (emoji->code2) {
-			result.append(QChar((emoji->code2 >> 16) & 0xFFFF));
-			result.append(QChar(emoji->code2 & 0xFFFF));
-		}
-	}
-	if (emoji->color && ((emoji->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-		result.append(QChar((emoji->color >> 16) & 0xFFFF));
-		result.append(QChar(emoji->color & 0xFFFF));
-	}
-	if (emoji->postfix) result.append(QChar(emoji->postfix));
-	return result;
-}
+EmojiPtr Find(const QChar *ch, const QChar *end, int *outLength = nullptr);
 
-inline uint64 emojiKey(EmojiPtr emoji) {
-	uint64 key = emoji->code;
-	if (emoji->code2) {
-		key = (key << 32) | uint64(emoji->code2);
-	} else if (emoji->color && ((emoji->color & 0xFFFF0000U) != 0xFFFF0000U)) {
-		key = (key << 32) | uint64(emoji->color);
-	}
-	return key;
-}
-
-inline EmojiPtr emojiFromKey(uint64 key) {
-	uint32 code = uint32(key >> 32), code2 = uint32(key & 0xFFFFFFFFLLU);
-	if (!code && code2) {
-		code = code2;
-		code2 = 0;
-	}
-	EmojiPtr emoji = emojiGet(code);
-	if (emoji == TwoSymbolEmoji) {
-		return emojiGet(code, code2);
-	} else if (emoji && emoji->color && code2) {
-		return emojiGet(emoji, code2);
-	}
-	return emoji;
-}
-
-inline EmojiPtr emojiFromUrl(const QString &url) {
-	return emojiFromKey(url.midRef(10).toULongLong(0, 16)); // skip emoji://e.
-}
-
-inline EmojiPtr emojiFromText(const QChar *ch, const QChar *end, int *outLength = nullptr) {
-	EmojiPtr emoji = nullptr;
-	if (ch + 1 < end && ((ch->isHighSurrogate() && (ch + 1)->isLowSurrogate()) || (((ch->unicode() >= 0x30 && ch->unicode() < 0x3A) || ch->unicode() == 0x23 || ch->unicode() == 0x2A) && (ch + 1)->unicode() == 0x20E3))) {
-		uint32 code = (ch->unicode() << 16) | (ch + 1)->unicode();
-		emoji = emojiGet(code);
-		if (emoji) {
-			if (emoji == TwoSymbolEmoji) { // check two symbol
-				if (ch + 3 >= end) {
-					emoji = 0;
-				} else {
-					uint32 code2 = ((uint32((ch + 2)->unicode()) << 16) | uint32((ch + 3)->unicode()));
-					emoji = emojiGet(code, code2);
-				}
-			} else {
-				if (ch + 2 < end && (ch + 2)->unicode() == 0x200D) { // check sequence
-					EmojiPtr seq = emojiGet(ch, end);
-					if (seq) {
-						emoji = seq;
-					}
-				}
-			}
-		}
-	} else if (ch + 2 < end && ((ch->unicode() >= 0x30 && ch->unicode() < 0x3A) || ch->unicode() == 0x23 || ch->unicode() == 0x2A) && (ch + 1)->unicode() == 0xFE0F && (ch + 2)->unicode() == 0x20E3) {
-		uint32 code = (ch->unicode() << 16) | (ch + 2)->unicode();
-		emoji = emojiGet(code);
-		if (outLength) *outLength = emoji->len + 1;
-		return emoji;
-	} else if (ch < end) {
-		emoji = emojiGet(ch->unicode());
-		t_assert(emoji != TwoSymbolEmoji);
-	}
-
-	if (emoji) {
-		int32 len = emoji->len + ((ch + emoji->len < end && (ch + emoji->len)->unicode() == 0xFE0F) ? 1 : 0);
-		if (emoji->color && (ch + len + 1 < end && (ch + len)->isHighSurrogate() && (ch + len + 1)->isLowSurrogate())) { // color
-			uint32 color = ((uint32((ch + len)->unicode()) << 16) | uint32((ch + len + 1)->unicode()));
-			EmojiPtr col = emojiGet(emoji, color);
-			if (col && col != emoji) {
-				len += col->len - emoji->len;
-				emoji = col;
-				if (ch + len < end && (ch + len)->unicode() == 0xFE0F) {
-					++len;
-				}
-			}
-		}
-		if (outLength) *outLength = len;
-	}
-
-	return emoji;
-}
-
-inline EmojiPtr emojiFromText(const QString &text, int32 *plen = 0) {
-	return text.isEmpty() ? EmojiPtr(0) : emojiFromText(text.constBegin(), text.constEnd(), plen);
-}
-
-inline EmojiPtr emojiGetNoColor(EmojiPtr emoji) {
-	if (emoji && emoji->color && (emoji->color & 0xFFFF0000U) != 0xFFFF0000U) {
-		EmojiPtr result = emojiGet(emoji->code);
-		return (result == TwoSymbolEmoji) ? emojiGet(emoji->code, emoji->code2) : result;
-	}
-	return emoji;
-}
-
-extern int EmojiSizes[5], EIndex, ESize;
-extern const char *EmojiNames[5], *EName;
-
-void emojiFind(const QChar *ch, const QChar *e, const QChar *&newEmojiEnd, uint32 &emojiCode);
-
-inline bool emojiEdge(const QChar *ch) {
+inline bool IsReplaceEdge(const QChar *ch) {
 	return true;
 
-	switch (ch->unicode()) {
-	case '.': case ',': case ':': case ';': case '!': case '?': case '#': case '@':
-	case '(': case ')': case '[': case ']': case '{': case '}': case '<': case '>':
-	case '+': case '=': case '-': case '_': case '*': case '/': case '\\': case '^': case '$':
-	case '"': case '\'':
-	case 8212: case 171: case 187: // --, <<, >>
-		return true;
-	}
-	return false;
+//	switch (ch->unicode()) {
+//	case '.': case ',': case ':': case ';': case '!': case '?': case '#': case '@':
+//	case '(': case ')': case '[': case ']': case '{': case '}': case '<': case '>':
+//	case '+': case '=': case '-': case '_': case '*': case '/': case '\\': case '^': case '$':
+//	case '"': case '\'':
+//	case 8212: case 171: case 187: // --, <<, >>
+//		return true;
+//	}
+//	return false;
 }
 
+EmojiPtr FindReplace(const QChar *ch, const QChar *end, int *outLength = nullptr);
+
+} // namespace internal
+
+void Init();
+
+constexpr auto kPostfix = static_cast<ushort>(0xFE0F);
+
+class One {
+public:
+	QString id() const {
+		return _id;
+	}
+	QString text() const {
+		return hasPostfix() ? (_id + QChar(kPostfix)) : _id;
+	}
+
+	bool colored() const {
+		return (_original != nullptr);
+	}
+	EmojiPtr original() const {
+		return _original ? _original : this;
+	}
+	QString nonColoredId() const {
+		return original()->id();
+	}
+
+	bool hasPostfix() const {
+		return _hasPostfix;
+	}
+
+	bool hasVariants() const {
+		return _colorizable || colored();
+	}
+	int variantsCount() const;
+	int variantIndex(EmojiPtr variant) const;
+	EmojiPtr variant(int index) const;
+
+	int index() const;
+	QString toUrl() const {
+		return qsl("emoji://e.") + QString::number(index());
+	}
+
+	int x() const {
+		return _x;
+	}
+	int y() const {
+		return _y;
+	}
+
+private:
+	One() = default; // For QVector<> to compile.
+	One(const One &other) = default;
+
+	One(const QString &id, uint16 x, uint16 y, bool hasPostfix, bool colorizable, EmojiPtr original)
+	: _id(id)
+	, _x(x)
+	, _y(y)
+	, _hasPostfix(hasPostfix)
+	, _colorizable(colorizable)
+	, _original(original) {
+		t_assert(!_colorizable || !colored());
+	}
+
+	const QString _id;
+	const uint16 _x = 0;
+	const uint16 _y = 0;
+	const bool _hasPostfix = false;
+	const bool _colorizable = false;
+	const EmojiPtr _original = nullptr;
+
+	friend void Init();
+	friend class QVector<One>;
+
+};
+
+inline EmojiPtr FromUrl(const QString &url) {
+	auto start = qstr("emoji://e.");
+	if (url.startsWith(start)) {
+		return internal::ByIndex(url.midRef(start.size()).toInt()); // skip emoji://e.
+	}
+	return nullptr;
+}
+
+inline EmojiPtr Find(const QChar *ch, const QChar *end, int *outLength = nullptr) {
+	if (ch != end) {
+		if (auto result = internal::Find(ch, end, outLength)) {
+			if (outLength && result->hasPostfix()) {
+				// Try to consume a pending 0xFE0F postfix.
+				// Comment out hasPostfix() check if you want to consume it anyway.
+				auto resultEnd = ch + *outLength;
+				if (resultEnd != end && resultEnd->unicode() == kPostfix) {
+					++*outLength;
+				}
+			}
+			return result;
+		}
+	}
+	return nullptr;
+}
+
+inline EmojiPtr Find(const QString &text, int *outLength = nullptr) {
+	return Find(text.constBegin(), text.constEnd(), outLength);
+}
+
+inline QString IdFromOldKey(uint64 oldKey) {
+	auto code = uint32(oldKey >> 32);
+	auto code2 = uint32(oldKey & 0xFFFFFFFFLLU);
+	if (!code && code2) {
+		code = base::take(code2);
+	}
+	if ((code & 0xFFFF0000U) != 0xFFFF0000U) { // code and code2 contain the whole id
+		auto result = QString();
+		result.reserve(4);
+		auto addCode = [&result](uint32 code) {
+			if (auto high = (code >> 16)) {
+				result.append(QChar(static_cast<ushort>(high & 0xFFFFU)));
+			}
+			result.append(QChar(static_cast<ushort>(code & 0xFFFFU)));
+		};
+		addCode(code);
+		if (code2) addCode(code2);
+		return result;
+	}
+
+	// old sequence
+	auto sequenceIndex = int(code & 0xFFFFU);
+	switch (sequenceIndex) {
+	case 0: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 1: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 2: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 3: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 4: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 5: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 6: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 7: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 8: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa9\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 9: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 10: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 11: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 12: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa6\xe2\x80\x8d\xf0\x9f\x91\xa6");
+	case 13: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa8\xe2\x80\x8d\xf0\x9f\x91\xa7\xe2\x80\x8d\xf0\x9f\x91\xa7");
+	case 14: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa9");
+	case 15: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x91\xa8");
+	case 16: return QString::fromUtf8("\xf0\x9f\x91\xa9\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa9");
+	case 17: return QString::fromUtf8("\xf0\x9f\x91\xa8\xe2\x80\x8d\xe2\x9d\xa4\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x92\x8b\xe2\x80\x8d\xf0\x9f\x91\xa8");
+	case 18: return QString::fromUtf8("\xf0\x9f\x91\x81\xe2\x80\x8d\xf0\x9f\x97\xa8");
+	}
+	return QString();
+}
+
+inline EmojiPtr FromOldKey(uint64 oldKey) {
+	return Find(IdFromOldKey(oldKey));
+}
+
+inline int ColorIndexFromCode(uint32 code) {
+	switch (code) {
+	case 0xD83CDFFB: return 1;
+	case 0xD83CDFFC: return 2;
+	case 0xD83CDFFD: return 3;
+	case 0xD83CDFFE: return 4;
+	case 0xD83CDFFF: return 5;
+	}
+	return 0;
+}
+
+inline int ColorIndexFromOldKey(uint64 oldKey) {
+	return ColorIndexFromCode(uint32(oldKey & 0xFFFFFFFFLLU));
+}
+
+int Index();
+
+inline int Size(int index = Index()) {
+	int sizes[] = { 18, 22, 27, 36, 45 };
+	return sizes[index];
+}
+
+inline QString Filename(int index = Index()) {
+	const char *EmojiNames[] = {
+		":/gui/art/emoji.webp",
+		":/gui/art/emoji_125x.webp",
+		":/gui/art/emoji_150x.webp",
+		":/gui/art/emoji_200x.webp",
+		":/gui/art/emoji_250x.webp",
+	};
+	return QString::fromLatin1(EmojiNames[index]);
+}
+
+int GetPackCount(DBIEmojiTab tab);
+EmojiPack GetPack(DBIEmojiTab tab);
+
 inline void appendPartToResult(QString &result, const QChar *start, const QChar *from, const QChar *to, EntitiesInText *inOutEntities) {
 	if (to > from) {
 		for (auto &entity : *inOutEntities) {
@@ -181,48 +251,43 @@ inline void appendPartToResult(QString &result, const QChar *start, const QChar
 	}
 }
 
-inline QString replaceEmojis(const QString &text, EntitiesInText *inOutEntities) {
-	QString result;
-	auto currentEntity = inOutEntities->begin(), entitiesEnd = inOutEntities->end();
-	const QChar *emojiStart = text.constData(), *emojiEnd = emojiStart, *e = text.constData() + text.size();
-	bool canFindEmoji = true;
-	for (const QChar *ch = emojiEnd; ch != e;) {
-		uint32 emojiCode = 0;
-		const QChar *newEmojiEnd = 0;
-		if (canFindEmoji) {
-			emojiFind(ch, e, newEmojiEnd, emojiCode);
-		}
+inline QString ReplaceInText(const QString &text, EntitiesInText *inOutEntities) {
+	auto result = QString();
+	auto currentEntity = inOutEntities->begin();
+	auto entitiesEnd = inOutEntities->end();
+	auto emojiStart = text.constData();
+	auto emojiEnd = emojiStart;
+	auto end = emojiStart + text.size();
+	auto canFindEmoji = true;
+	for (auto ch = emojiEnd; ch != end;) {
+		auto emojiLength = 0;
+		auto emoji = canFindEmoji ? internal::FindReplace(ch, end, &emojiLength) : nullptr;
+		auto newEmojiEnd = ch + emojiLength;
 
 		while (currentEntity != entitiesEnd && ch >= emojiStart + currentEntity->offset() + currentEntity->length()) {
 			++currentEntity;
 		}
-		EmojiPtr emoji = emojiCode ? emojiGet(emojiCode) : 0;
-		if (emoji && emoji != TwoSymbolEmoji &&
+		if (emoji &&
 		    (ch == emojiStart || !ch->isLetterOrNumber() || !(ch - 1)->isLetterOrNumber()) &&
-		    (newEmojiEnd == e || !newEmojiEnd->isLetterOrNumber() || newEmojiEnd == emojiStart || !(newEmojiEnd - 1)->isLetterOrNumber()) &&
+		    (newEmojiEnd == end || !newEmojiEnd->isLetterOrNumber() || newEmojiEnd == emojiStart || !(newEmojiEnd - 1)->isLetterOrNumber()) &&
 			(currentEntity == entitiesEnd || (ch < emojiStart + currentEntity->offset() && newEmojiEnd <= emojiStart + currentEntity->offset()) || (ch >= emojiStart + currentEntity->offset() + currentEntity->length() && newEmojiEnd > emojiStart + currentEntity->offset() + currentEntity->length()))
 		) {
 			if (result.isEmpty()) result.reserve(text.size());
 
 			appendPartToResult(result, emojiStart, emojiEnd, ch, inOutEntities);
 
-			if (emoji->color) {
-				EmojiColorVariants::const_iterator it = cEmojiVariants().constFind(emoji->code);
+			if (emoji->hasVariants()) {
+				auto it = cEmojiVariants().constFind(emoji->nonColoredId());
 				if (it != cEmojiVariants().cend()) {
-					EmojiPtr replace = emojiFromKey(it.value());
-					if (replace) {
-						if (replace != TwoSymbolEmoji && replace->code == emoji->code && replace->code2 == emoji->code2) {
-							emoji = replace;
-						}
-					}
+					emoji = emoji->variant(it.value());
 				}
 			}
-			result.append(emojiString(emoji));
+			result.append(emoji->text());
 
 			ch = emojiEnd = newEmojiEnd;
 			canFindEmoji = true;
 		} else {
-			if (emojiEdge(ch)) {
+			if (internal::IsReplaceEdge(ch)) {
 				canFindEmoji = true;
 			} else {
 				canFindEmoji = false;
@@ -232,10 +297,10 @@ inline QString replaceEmojis(const QString &text, EntitiesInText *inOutEntities)
 	}
 	if (result.isEmpty()) return text;
 
-	appendPartToResult(result, emojiStart, emojiEnd, e, inOutEntities);
+	appendPartToResult(result, emojiStart, emojiEnd, end, inOutEntities);
 
 	return result;
 }
 
-int emojiPackCount(DBIEmojiTab tab);
-EmojiPack emojiPack(DBIEmojiTab tab);
+} // namespace Emoji
+} // namespace Ui
diff --git a/Telegram/SourceFiles/ui/text/text.cpp b/Telegram/SourceFiles/ui/text/text.cpp
index 4c441a03e..5db266311 100644
--- a/Telegram/SourceFiles/ui/text/text.cpp
+++ b/Telegram/SourceFiles/ui/text/text.cpp
@@ -132,7 +132,6 @@ const QChar *textSkipCommand(const QChar *from, const QChar *end, bool canLink)
 
 class TextParser {
 public:
-
 	static Qt::LayoutDirection stringDirection(const QString &str, int32 from, int32 to) {
 		const ushort *p = reinterpret_cast<const ushort*>(str.unicode()) + from;
 		const ushort *end = p + (to - from);
@@ -479,14 +478,14 @@ public:
 
 	void parseEmojiFromCurrent() {
 		int len = 0;
-		EmojiPtr e = emojiFromText(ptr - emojiLookback, end, &len);
+		auto e = Ui::Emoji::Find(ptr - emojiLookback, end, &len);
 		if (!e) return;
 
 		for (int l = len - emojiLookback - 1; l > 0; --l) {
 			_t->_text.push_back(*++ptr);
 		}
-		if (e->postfix && _t->_text.at(_t->_text.size() - 1).unicode() != e->postfix) {
-			_t->_text.push_back(e->postfix);
+		if (e->hasPostfix() && _t->_text.at(_t->_text.size() - 1).unicode() != Ui::Emoji::kPostfix) {
+			_t->_text.push_back(QChar(Ui::Emoji::kPostfix));
 			++len;
 		}
 
@@ -498,9 +497,6 @@ public:
 		src(text),
 		rich(options.flags & TextParseRichText),
 		multiline(options.flags & TextParseMultiline),
-		maxLnkIndex(0),
-		flags(0),
-		lnkIndex(0),
 		stopAfterWidth(QFIXED_MAX) {
 		if (options.flags & TextParseLinks) {
 			textParseEntities(src, options.flags, &entities, rich);
@@ -511,9 +507,6 @@ public:
 		src(textWithEntities.text),
 		rich(options.flags & TextParseRichText),
 		multiline(options.flags & TextParseMultiline),
-		maxLnkIndex(0),
-		flags(0),
-		lnkIndex(0),
 		stopAfterWidth(QFIXED_MAX) {
 		auto preparsed = textWithEntities.entities;
 		if ((options.flags & TextParseLinks) && !preparsed.isEmpty()) {
@@ -686,16 +679,17 @@ private:
 	typedef QMap<const QChar*, QList<int32> > RemoveFlagsMap;
 	RemoveFlagsMap removeFlags;
 
-	uint16 maxLnkIndex;
+	uint16 maxLnkIndex = 0;
 
 	// current state
-	int32 flags;
-	uint16 lnkIndex;
-	const EmojiData *emoji; // current emoji, if current word is an emoji, or zero
-	int32 blockStart; // offset in result, from which current parsed block is started
-	int32 diacs; // diac chars skipped without good char
+	int32 flags = 0;
+	uint16 lnkIndex = 0;
+	EmojiPtr emoji = nullptr; // current emoji, if current word is an emoji, or zero
+	int32 blockStart = 0; // offset in result, from which current parsed block is started
+	int32 diacs = 0; // diac chars skipped without good char
 	QFixed sumWidth, stopAfterWidth; // summary width of all added words
-	bool sumFinished, newlineAwaited;
+	bool sumFinished = false;
+	bool newlineAwaited = false;
 
 	// current char data
 	QChar ch; // current char (low surrogate, if current char is surrogate pair)
@@ -2516,35 +2510,31 @@ void Text::setMarkedText(const style::TextStyle &st, const TextWithEntities &tex
 	_st = &st;
 	clear();
 	{
-//		QString newText; // utf16 of the text for emoji
+		// utf codes of the text display for emoji extraction
+//		auto text = textWithEntities.text;
+//		auto newText = QString();
 //		newText.reserve(8 * text.size());
+//		newText.append("\t{ ");
 //		for (const QChar *ch = text.constData(), *e = ch + text.size(); ch != e; ++ch) {
-//			if (chIsNewline(*ch)) {
-//				newText.append(*ch);
+//			if (*ch == TextCommand) {
+//				break;
+//			} else if (chIsNewline(*ch)) {
+//				newText.append("},").append(*ch).append("\t{ ");
 //			} else {
 //				if (ch->isHighSurrogate() || ch->isLowSurrogate()) {
 //					if (ch->isHighSurrogate() && (ch + 1 != e) && ((ch + 1)->isLowSurrogate())) {
-//						newText.append("0x").append(QString::number((uint32(ch->unicode()) << 16) | uint32((ch + 1)->unicode()), 16).toUpper()).append("LLU,");
+//						newText.append("0x").append(QString::number((uint32(ch->unicode()) << 16) | uint32((ch + 1)->unicode()), 16).toUpper()).append("U, ");
 //						++ch;
 //					} else {
-//						newText.append("BADx").append(QString::number(ch->unicode(), 16).toUpper()).append("LLU,");
+//						newText.append("BADx").append(QString::number(ch->unicode(), 16).toUpper()).append("U, ");
 //					}
 //				} else {
-//					newText.append("0x").append(QString::number(ch->unicode(), 16).toUpper()).append("LLU,");
+//					newText.append("0x").append(QString::number(ch->unicode(), 16).toUpper()).append("U, ");
 //				}
 //			}
 //		}
-//		newText.append("\n\n").append(text);
-//		TextParser parser(this, newText, EntitiesInText(), options);
-
-//		QString newText; // utf8 of the text for emoji sequences
-//		newText.reserve(8 * text.size());
-//		QByteArray ba = text.toUtf8();
-//		for (int32 i = 0, l = ba.size(); i < l; ++i) {
-//			newText.append("\\x").append(QString::number(uchar(ba.at(i)), 16).toLower());
-//		}
-//		newText.append("\n\n").append(text);
-//		TextParser parser(this, newText, EntitiesInText(), options);
+//		newText.append("},\n\n").append(text);
+//		TextParser parser(this, { newText, EntitiesInText() }, options);
 
 		TextParser parser(this, textWithEntities, options);
 	}
@@ -3016,5 +3006,6 @@ void Text::clearFields() {
 }
 
 void emojiDraw(QPainter &p, EmojiPtr e, int x, int y) {
-	p.drawPixmap(QPoint(x, y), App::emoji(), QRect(e->x * ESize, e->y * ESize, ESize, ESize));
+	auto size = Ui::Emoji::Size();
+	p.drawPixmap(QPoint(x, y), App::emoji(), QRect(e->x() * size, e->y() * size, size, size));
 }
diff --git a/Telegram/SourceFiles/ui/text/text_block.cpp b/Telegram/SourceFiles/ui/text/text_block.cpp
index d7597f850..33a7d96a4 100644
--- a/Telegram/SourceFiles/ui/text/text_block.cpp
+++ b/Telegram/SourceFiles/ui/text/text_block.cpp
@@ -347,7 +347,7 @@ TextBlock::TextBlock(const style::font &font, const QString &str, QFixed minResi
 	}
 }
 
-EmojiBlock::EmojiBlock(const style::font &font, const QString &str, uint16 from, uint16 length, uchar flags, uint16 lnkIndex, const EmojiData *emoji) : ITextBlock(font, str, from, length, flags, lnkIndex), emoji(emoji) {
+EmojiBlock::EmojiBlock(const style::font &font, const QString &str, uint16 from, uint16 length, uchar flags, uint16 lnkIndex, EmojiPtr emoji) : ITextBlock(font, str, from, length, flags, lnkIndex), emoji(emoji) {
 	_flags |= ((TextBlockTEmoji & 0x0F) << 8);
 	_width = int(st::emojiSize + 2 * st::emojiPadding);
 }
diff --git a/Telegram/SourceFiles/ui/text/text_block.h b/Telegram/SourceFiles/ui/text/text_block.h
index 2aa4e0514..3c71f4378 100644
--- a/Telegram/SourceFiles/ui/text/text_block.h
+++ b/Telegram/SourceFiles/ui/text/text_block.h
@@ -196,9 +196,9 @@ public:
 
 private:
 
-	EmojiBlock(const style::font &font, const QString &str, uint16 from, uint16 length, uchar flags, uint16 lnkIndex, const EmojiData *emoji);
+	EmojiBlock(const style::font &font, const QString &str, uint16 from, uint16 length, uchar flags, uint16 lnkIndex, EmojiPtr emoji);
 
-	const EmojiData *emoji;
+	EmojiPtr emoji = nullptr;
 
 	friend class Text;
 	friend class TextParser;
diff --git a/Telegram/SourceFiles/ui/text/text_entity.cpp b/Telegram/SourceFiles/ui/text/text_entity.cpp
index 33463135e..1339bce3f 100644
--- a/Telegram/SourceFiles/ui/text/text_entity.cpp
+++ b/Telegram/SourceFiles/ui/text/text_entity.cpp
@@ -1215,59 +1215,60 @@ bool textSplit(QString &sendingText, EntitiesInText &sendingEntities, QString &l
 			++currentEntity;
 		}
 
-#define MARK_GOOD_AS_LEVEL(level) \
-if (goodLevel <= (level)) {\
-goodLevel = (level);\
-good = ch;\
-goodEntity = currentEntity;\
-goodInEntity = inEntity;\
-goodCanBreakEntity = canBreakEntity;\
-}
-
 		if (s > half) {
 			bool inEntity = (currentEntity < entityCount) && (ch > start + leftEntities.at(currentEntity).offset()) && (ch < start + leftEntities.at(currentEntity).offset() + leftEntities.at(currentEntity).length());
 			EntityInTextType entityType = (currentEntity < entityCount) ? leftEntities.at(currentEntity).type() : EntityInTextInvalid;
 			bool canBreakEntity = (entityType == EntityInTextPre || entityType == EntityInTextCode);
 			int32 noEntityLevel = inEntity ? 0 : 1;
+
+			auto markGoodAsLevel = [&](int newLevel) {
+				if (goodLevel > newLevel) {
+					return;
+				}
+				goodLevel = newLevel;
+				good = ch;
+				goodEntity = currentEntity;
+				goodInEntity = inEntity;
+				goodCanBreakEntity = canBreakEntity;
+			};
+
 			if (inEntity && !canBreakEntity) {
-				MARK_GOOD_AS_LEVEL(0);
+				markGoodAsLevel(0);
 			} else {
 				if (chIsNewline(*ch)) {
 					if (inEntity) {
 						if (ch + 1 < end && chIsNewline(*(ch + 1))) {
-							MARK_GOOD_AS_LEVEL(12);
+							markGoodAsLevel(12);
 						} else {
-							MARK_GOOD_AS_LEVEL(11);
+							markGoodAsLevel(11);
 						}
 					} else if (ch + 1 < end && chIsNewline(*(ch + 1))) {
-						MARK_GOOD_AS_LEVEL(15);
+						markGoodAsLevel(15);
 					} else if (currentEntity < entityCount && ch + 1 == start + leftEntities.at(currentEntity).offset() && leftEntities.at(currentEntity).type() == EntityInTextPre) {
-						MARK_GOOD_AS_LEVEL(14);
+						markGoodAsLevel(14);
 					} else if (currentEntity > 0 && ch == start + leftEntities.at(currentEntity - 1).offset() + leftEntities.at(currentEntity - 1).length() && leftEntities.at(currentEntity - 1).type() == EntityInTextPre) {
-						MARK_GOOD_AS_LEVEL(14);
+						markGoodAsLevel(14);
 					} else {
-						MARK_GOOD_AS_LEVEL(13);
+						markGoodAsLevel(13);
 					}
 				} else if (chIsSpace(*ch)) {
 					if (chIsSentenceEnd(*(ch - 1))) {
-						MARK_GOOD_AS_LEVEL(9 + noEntityLevel);
+						markGoodAsLevel(9 + noEntityLevel);
 					} else if (chIsSentencePartEnd(*(ch - 1))) {
-						MARK_GOOD_AS_LEVEL(7 + noEntityLevel);
+						markGoodAsLevel(7 + noEntityLevel);
 					} else {
-						MARK_GOOD_AS_LEVEL(5 + noEntityLevel);
+						markGoodAsLevel(5 + noEntityLevel);
 					}
 				} else if (chIsWordSeparator(*(ch - 1))) {
-					MARK_GOOD_AS_LEVEL(3 + noEntityLevel);
+					markGoodAsLevel(3 + noEntityLevel);
 				} else {
-					MARK_GOOD_AS_LEVEL(1 + noEntityLevel);
+					markGoodAsLevel(1 + noEntityLevel);
 				}
 			}
 		}
 
-#undef MARK_GOOD_AS_LEVEL
-
 		int elen = 0;
-		if (EmojiPtr e = emojiFromText(ch, end, &elen)) {
+		if (auto e = Ui::Emoji::Find(ch, end, &elen)) {
 			for (int i = 0; i < elen; ++i, ++ch, ++s) {
 				if (ch->isHighSurrogate() && i + 1 < elen && (ch + 1)->isLowSurrogate()) {
 					++ch;
@@ -1927,7 +1928,7 @@ QString prepareTextWithEntities(QString result, int32 flags, EntitiesInText *inO
 	replaceStringWithEntities(qstr(">>"), QChar(187), result, inOutEntities);
 
 	if (cReplaceEmojis()) {
-		result = replaceEmojis(result, inOutEntities);
+		result = Ui::Emoji::ReplaceInText(result, inOutEntities);
 	}
 
 	trimTextWithEntities(result, inOutEntities);
diff --git a/Telegram/SourceFiles/ui/widgets/input_fields.cpp b/Telegram/SourceFiles/ui/widgets/input_fields.cpp
index bcb470007..62f4efa0e 100644
--- a/Telegram/SourceFiles/ui/widgets/input_fields.cpp
+++ b/Telegram/SourceFiles/ui/widgets/input_fields.cpp
@@ -398,11 +398,9 @@ EmojiPtr FlatTextarea::getSingleEmoji() const {
 	getSingleEmojiFragment(text, fragment);
 
 	if (!text.isEmpty()) {
-		QTextCharFormat format = fragment.charFormat();
-		QString imageName = static_cast<QTextImageFormat*>(&format)->name();
-		if (imageName.startsWith(qstr("emoji://e."))) {
-			return emojiFromUrl(imageName);
-		}
+		auto format = fragment.charFormat();
+		auto imageName = static_cast<QTextImageFormat*>(&format)->name();
+		return Ui::Emoji::FromUrl(imageName);
 	}
 	return nullptr;
 }
@@ -617,8 +615,8 @@ void FlatTextarea::getSingleEmojiFragment(QString &text, QTextFragment &fragment
 				t = t.mid(0, end - p);
 			}
 			if (f.isImageFormat() && !t.isEmpty() && t.at(0).unicode() == QChar::ObjectReplacementCharacter) {
-				QString imageName = static_cast<QTextImageFormat*>(&f)->name();
-				if (imageName.startsWith(qstr("emoji://e."))) {
+				auto imageName = static_cast<QTextImageFormat*>(&f)->name();
+				if (Ui::Emoji::FromUrl(imageName)) {
 					fragment = fr;
 					text = t;
 					return;
@@ -771,25 +769,23 @@ QString FlatTextarea::getTextPart(int start, int end, TagList *outTagsList, bool
 				case 0xfdd0: // QTextBeginningOfFrame
 				case 0xfdd1: // QTextEndOfFrame
 				case QChar::ParagraphSeparator:
-				case QChar::LineSeparator:
-				*uc = QLatin1Char('\n');
-				break;
-				case QChar::Nbsp:
-				*uc = QLatin1Char(' ');
-				break;
-				case QChar::ObjectReplacementCharacter:
-				if (emojiText.isEmpty() && f.isImageFormat()) {
-					QString imageName = static_cast<QTextImageFormat*>(&f)->name();
-					if (imageName.startsWith(qstr("emoji://e."))) {
-						if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-							emojiText = emojiString(emoji);
+				case QChar::LineSeparator: {
+					*uc = QLatin1Char('\n');
+				} break;
+				case QChar::Nbsp: {
+					*uc = QLatin1Char(' ');
+				} break;
+				case QChar::ObjectReplacementCharacter: {
+					if (emojiText.isEmpty() && f.isImageFormat()) {
+						auto imageName = static_cast<QTextImageFormat*>(&f)->name();
+						if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+							emojiText = emoji->text();
 						}
 					}
-				}
-				if (uc > ub) result.append(ub, uc - ub);
-				if (!emojiText.isEmpty()) result.append(emojiText);
-				ub = uc + 1;
-				break;
+					if (uc > ub) result.append(ub, uc - ub);
+					if (!emojiText.isEmpty()) result.append(emojiText);
+					ub = uc + 1;
+				} break;
 				}
 			}
 			if (uc > ub) result.append(ub, uc - ub);
@@ -947,10 +943,11 @@ void FlatTextarea::insertFromMimeData(const QMimeData *source) {
 
 void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 	QTextImageFormat imageFormat;
-	int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor();
+	auto ew = Ui::Emoji::Size() + st::emojiPadding * cIntRetinaFactor() * 2;
+	auto eh = _st.font->height * cIntRetinaFactor();
 	imageFormat.setWidth(ew / cIntRetinaFactor());
 	imageFormat.setHeight(eh / cIntRetinaFactor());
-	imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16));
+	imageFormat.setName(emoji->toUrl());
 	imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
 	if (c.charFormat().isAnchor()) {
 		imageFormat.setAnchor(true);
@@ -962,11 +959,9 @@ void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 }
 
 QVariant FlatTextarea::loadResource(int type, const QUrl &name) {
-	QString imageName = name.toDisplayString();
-	if (imageName.startsWith(qstr("emoji://e."))) {
-		if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-			return QVariant(App::emojiSingle(emoji, _st.font->height));
-		}
+	auto imageName = name.toDisplayString();
+	if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+		return QVariant(App::emojiSingle(emoji, _st.font->height));
 	}
 	return QVariant();
 }
@@ -1141,7 +1136,7 @@ void FlatTextarea::processFormatting(int insertPosition, int insertEnd) {
 				auto *ch = textStart + qMax(changedPositionInFragment, 0);
 				for (; ch < textEnd; ++ch) {
 					int emojiLength = 0;
-					if (auto emoji = emojiFromText(ch, textEnd, &emojiLength)) {
+					if (auto emoji = Ui::Emoji::Find(ch, textEnd, &emojiLength)) {
 						// Replace emoji if no current action is prepared.
 						if (action.type == ActionType::Invalid) {
 							action.type = ActionType::InsertEmoji;
@@ -2057,25 +2052,23 @@ QString InputArea::getText(int32 start, int32 end) const {
 				case 0xfdd0: // QTextBeginningOfFrame
 				case 0xfdd1: // QTextEndOfFrame
 				case QChar::ParagraphSeparator:
-				case QChar::LineSeparator:
+				case QChar::LineSeparator: {
 					*uc = QLatin1Char('\n');
-					break;
-				case QChar::Nbsp:
+				} break;
+				case QChar::Nbsp: {
 					*uc = QLatin1Char(' ');
-					break;
-				case QChar::ObjectReplacementCharacter:
+				} break;
+				case QChar::ObjectReplacementCharacter: {
 					if (emojiText.isEmpty() && f.isImageFormat()) {
-						QString imageName = static_cast<QTextImageFormat*>(&f)->name();
-						if (imageName.startsWith(qstr("emoji://e."))) {
-							if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-								emojiText = emojiString(emoji);
-							}
+						auto imageName = static_cast<QTextImageFormat*>(&f)->name();
+						if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+							emojiText = emoji->text();
 						}
 					}
 					if (uc > ub) result.append(ub, uc - ub);
 					if (!emojiText.isEmpty()) result.append(emojiText);
 					ub = uc + 1;
-					break;
+				} break;
 				}
 			}
 			if (uc > ub) result.append(ub, uc - ub);
@@ -2110,10 +2103,11 @@ bool InputArea::isRedoAvailable() const {
 
 void InputArea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 	QTextImageFormat imageFormat;
-	int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor();
+	auto ew = Ui::Emoji::Size() + st::emojiPadding * cIntRetinaFactor() * 2;
+	auto eh = _st.font->height * cIntRetinaFactor();
 	imageFormat.setWidth(ew / cIntRetinaFactor());
 	imageFormat.setHeight(eh / cIntRetinaFactor());
-	imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16));
+	imageFormat.setName(emoji->toUrl());
 	imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
 
 	static QString objectReplacement(QChar::ObjectReplacementCharacter);
@@ -2121,18 +2115,16 @@ void InputArea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 }
 
 QVariant InputArea::Inner::loadResource(int type, const QUrl &name) {
-	QString imageName = name.toDisplayString();
-	if (imageName.startsWith(qstr("emoji://e."))) {
-		if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-			return QVariant(App::emojiSingle(emoji, f()->_st.font->height));
-		}
+	auto imageName = name.toDisplayString();
+	if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+		return QVariant(App::emojiSingle(emoji, f()->_st.font->height));
 	}
 	return QVariant();
 }
 
 void InputArea::processDocumentContentsChange(int position, int charsAdded) {
 	int32 replacePosition = -1, replaceLen = 0;
-	const EmojiData *emoji = 0;
+	EmojiPtr emoji = nullptr;
 
 	static QString regular = qsl("Open Sans"), semibold = qsl("Open Sans Semibold");
 	bool checkTilde = !cRetina() && (_inner->font().pixelSize() == 13) && (_inner->font().family() == regular);
@@ -2164,7 +2156,7 @@ void InputArea::processDocumentContentsChange(int position, int charsAdded) {
 				const QChar *ch = t.constData(), *e = ch + t.size();
 				for (; ch != e; ++ch, ++fp) {
 					int32 emojiLen = 0;
-					emoji = emojiFromText(ch, e, &emojiLen);
+					emoji = Ui::Emoji::Find(ch, e, &emojiLen);
 					if (emoji) {
 						if (replacePosition >= 0) {
 							emoji = 0; // replace tilde char format first
@@ -2791,25 +2783,23 @@ QString InputField::getText(int32 start, int32 end) const {
 				case 0xfdd0: // QTextBeginningOfFrame
 				case 0xfdd1: // QTextEndOfFrame
 				case QChar::ParagraphSeparator:
-				case QChar::LineSeparator:
+				case QChar::LineSeparator: {
 					*uc = QLatin1Char('\n');
-					break;
-				case QChar::Nbsp:
+				} break;
+				case QChar::Nbsp: {
 					*uc = QLatin1Char(' ');
-					break;
-				case QChar::ObjectReplacementCharacter:
+				} break;
+				case QChar::ObjectReplacementCharacter: {
 					if (emojiText.isEmpty() && f.isImageFormat()) {
-						QString imageName = static_cast<QTextImageFormat*>(&f)->name();
-						if (imageName.startsWith(qstr("emoji://e."))) {
-							if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-								emojiText = emojiString(emoji);
-							}
+						auto imageName = static_cast<QTextImageFormat*>(&f)->name();
+						if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+							emojiText = emoji->text();
 						}
 					}
 					if (uc > ub) result.append(ub, uc - ub);
 					if (!emojiText.isEmpty()) result.append(emojiText);
 					ub = uc + 1;
-					break;
+				} break;
 				}
 			}
 			if (uc > ub) result.append(ub, uc - ub);
@@ -2844,10 +2834,10 @@ bool InputField::isRedoAvailable() const {
 
 void InputField::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 	QTextImageFormat imageFormat;
-	int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor();
+	auto ew = Ui::Emoji::Size() + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor();
 	imageFormat.setWidth(ew / cIntRetinaFactor());
 	imageFormat.setHeight(eh / cIntRetinaFactor());
-	imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16));
+	imageFormat.setName(emoji->toUrl());
 	imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
 
 	static QString objectReplacement(QChar::ObjectReplacementCharacter);
@@ -2856,17 +2846,15 @@ void InputField::insertEmoji(EmojiPtr emoji, QTextCursor c) {
 
 QVariant InputField::Inner::loadResource(int type, const QUrl &name) {
 	QString imageName = name.toDisplayString();
-	if (imageName.startsWith(qstr("emoji://e."))) {
-		if (EmojiPtr emoji = emojiFromUrl(imageName)) {
-			return QVariant(App::emojiSingle(emoji, f()->_st.font->height));
-		}
+	if (auto emoji = Ui::Emoji::FromUrl(imageName)) {
+		return QVariant(App::emojiSingle(emoji, f()->_st.font->height));
 	}
 	return QVariant();
 }
 
 void InputField::processDocumentContentsChange(int position, int charsAdded) {
 	int32 replacePosition = -1, replaceLen = 0;
-	const EmojiData *emoji = 0;
+	EmojiPtr emoji = nullptr;
 	bool newlineFound = false;
 
 	static QString regular = qsl("Open Sans"), semibold = qsl("Open Sans Semibold"), space(' ');
@@ -2910,8 +2898,8 @@ void InputField::processDocumentContentsChange(int position, int charsAdded) {
 						break;
 					}
 
-					int32 emojiLen = 0;
-					emoji = emojiFromText(ch, e, &emojiLen);
+					auto emojiLen = 0;
+					emoji = Ui::Emoji::Find(ch, e, &emojiLen);
 					if (emoji) {
 						if (replacePosition >= 0) {
 							emoji = 0; // replace tilde char format first
diff --git a/Telegram/SourceFiles/window/themes/window_theme_preview.cpp b/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
index abcaaa17c..f1a7d082e 100644
--- a/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
+++ b/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
@@ -42,7 +42,7 @@ QString fillLetters(const QString &name) {
 	auto ch = name.constData(), end = ch + name.size();
 	while (ch != end) {
 		auto emojiLength = 0;
-		if (auto emoji = emojiFromText(ch, end, &emojiLength)) {
+		if (auto emoji = Ui::Emoji::Find(ch, end, &emojiLength)) {
 			ch += emojiLength;
 		} else if (ch->isHighSurrogate()) {
 			++ch;
diff --git a/Telegram/gyp/codegen.gyp b/Telegram/gyp/codegen.gyp
index 04f62494a..ab19d10ad 100644
--- a/Telegram/gyp/codegen.gyp
+++ b/Telegram/gyp/codegen.gyp
@@ -124,5 +124,33 @@
       '<(src_loc)/codegen/numbers/processor.cpp',
       '<(src_loc)/codegen/numbers/processor.h',
     ],
+  }, {
+    'target_name': 'codegen_emoji',
+    'variables': {
+      'libs_loc': '../../../Libraries',
+      'src_loc': '../SourceFiles',
+      'mac_target': '10.10',
+    },
+    'includes': [
+      'common_executable.gypi',
+      'qt.gypi',
+    ],
+
+    'include_dirs': [
+      '<(src_loc)',
+    ],
+    'sources': [
+      '<(src_loc)/codegen/common/cpp_file.cpp',
+      '<(src_loc)/codegen/common/cpp_file.h',
+      '<(src_loc)/codegen/common/logging.cpp',
+      '<(src_loc)/codegen/common/logging.h',
+      '<(src_loc)/codegen/emoji/data.cpp',
+      '<(src_loc)/codegen/emoji/data.h',
+      '<(src_loc)/codegen/emoji/generator.cpp',
+      '<(src_loc)/codegen/emoji/generator.h',
+      '<(src_loc)/codegen/emoji/main.cpp',
+      '<(src_loc)/codegen/emoji/options.cpp',
+      '<(src_loc)/codegen/emoji/options.h',
+    ],
   }],
 }
diff --git a/Telegram/gyp/qt.gypi b/Telegram/gyp/qt.gypi
index 24ededbff..a8adbaa2c 100644
--- a/Telegram/gyp/qt.gypi
+++ b/Telegram/gyp/qt.gypi
@@ -232,6 +232,13 @@
         '-rdynamic',
       ],
     }],
+    [ 'build_mac', {
+      'xcode_settings': {
+        'OTHER_LDFLAGS': [
+          '-lcups',
+        ],
+      },
+    }],
   ],
 
   'rules': [{
diff --git a/Telegram/gyp/telegram_mac.gypi b/Telegram/gyp/telegram_mac.gypi
index 6544bd927..38b6aed0b 100644
--- a/Telegram/gyp/telegram_mac.gypi
+++ b/Telegram/gyp/telegram_mac.gypi
@@ -26,7 +26,6 @@
       'CURRENT_PROJECT_VERSION': '<!(./print_version.sh)',
       'ASSETCATALOG_COMPILER_APPICON_NAME': 'AppIcon',
       'OTHER_LDFLAGS': [
-        '-lcups',
         '-lbsm',
         '-lm',
         '-lssl',