CVE-2023-2021: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (CWE-79)
value: Cross-site Scripting (XSS) - Stored in GitHub repository nilsteampassnet/teampass prior to 3.0.3.
CWE description: The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
CVSS v3 base score: 5.4
Published: 2023-04-13T12:15Z
Repository: https://github.com/nilsteampassnet/teampass
Language: PHP
Files changed: includes/libraries/anti-xss-master/src/voku/helper/ASCII.php, includes/libraries/anti-xss-master/src/voku/helper/UTF8.php, includes/libraries/anti-xss-master/src/voku/helper/data/ascii_by_languages.php, includes/libraries/anti-xss-master/src/voku/helper/data/ascii_extras_by_languages.php, includes/libraries/anti-xss-master/src/voku/helper/data/ascii_language_max_key.php, includes/libraries/anti-xss-master/src/voku/helper/data/ascii_ord.php, includes/libraries/anti-xss-master/src/voku/helper/data/caseFolding_full.php, includes/libraries/anti-xss-master/src/voku/helper/data/chr.php, includes/libraries/anti-xss-master/src/voku/helper/data/emoji.php, includes/libraries/anti-xss-master/src/voku/helper/data/encodings.php, includes/libraries/anti-xss-master/src/voku/helper/data/ord.php, includes/libraries/anti-xss-master/src/voku/helper/data/transliterator_list.php, includes/libraries/anti-xss-master/src/voku/helper/data/utf8_fix.php, includes/libraries/anti-xss-master/src/voku/helper/data/win1252_to_utf8.php, includes/libraries/anti-xss-master/src/voku/helper/data/x000.php, includes/libraries/anti-xss-master/src/voku/helper/data/x001.php, includes/libraries/anti-xss-master/src/voku/helper/data/x002.php, includes/libraries/anti-xss-master/src/voku/helper/data/x003.php, includes/libraries/anti-xss-master/src/voku/helper/data/x004.php, includes/libraries/anti-xss-master/src/voku/helper/data/x005.php, includes/libraries/anti-xss-master/src/voku/helper/data/x006.php, includes/libraries/anti-xss-master/src/voku/helper/data/x007.php, includes/libraries/anti-xss-master/src/voku/helper/data/x009.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x00f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x010.php, includes/libraries/anti-xss-master/src/voku/helper/data/x011.php, includes/libraries/anti-xss-master/src/voku/helper/data/x012.php, includes/libraries/anti-xss-master/src/voku/helper/data/x013.php, includes/libraries/anti-xss-master/src/voku/helper/data/x014.php, includes/libraries/anti-xss-master/src/voku/helper/data/x015.php, includes/libraries/anti-xss-master/src/voku/helper/data/x016.php, includes/libraries/anti-xss-master/src/voku/helper/data/x017.php, includes/libraries/anti-xss-master/src/voku/helper/data/x018.php, includes/libraries/anti-xss-master/src/voku/helper/data/x01d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x01e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x01f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x020.php, includes/libraries/anti-xss-master/src/voku/helper/data/x021.php, includes/libraries/anti-xss-master/src/voku/helper/data/x022.php, includes/libraries/anti-xss-master/src/voku/helper/data/x023.php, includes/libraries/anti-xss-master/src/voku/helper/data/x024.php, includes/libraries/anti-xss-master/src/voku/helper/data/x025.php, includes/libraries/anti-xss-master/src/voku/helper/data/x026.php, includes/libraries/anti-xss-master/src/voku/helper/data/x027.php, includes/libraries/anti-xss-master/src/voku/helper/data/x028.php, includes/libraries/anti-xss-master/src/voku/helper/data/x029.php, includes/libraries/anti-xss-master/src/voku/helper/data/x02a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x02c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x02e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x02f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x030.php, includes/libraries/anti-xss-master/src/voku/helper/data/x031.php, includes/libraries/anti-xss-master/src/voku/helper/data/x032.php, includes/libraries/anti-xss-master/src/voku/helper/data/x033.php, includes/libraries/anti-xss-master/src/voku/helper/data/x04d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x04e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x04f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x050.php, includes/libraries/anti-xss-master/src/voku/helper/data/x051.php, includes/libraries/anti-xss-master/src/voku/helper/data/x052.php, includes/libraries/anti-xss-master/src/voku/helper/data/x053.php, includes/libraries/anti-xss-master/src/voku/helper/data/x054.php, includes/libraries/anti-xss-master/src/voku/helper/data/x055.php, includes/libraries/anti-xss-master/src/voku/helper/data/x056.php, includes/libraries/anti-xss-master/src/voku/helper/data/x057.php, includes/libraries/anti-xss-master/src/voku/helper/data/x058.php, includes/libraries/anti-xss-master/src/voku/helper/data/x059.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x05f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x060.php, includes/libraries/anti-xss-master/src/voku/helper/data/x061.php, includes/libraries/anti-xss-master/src/voku/helper/data/x062.php, includes/libraries/anti-xss-master/src/voku/helper/data/x063.php, includes/libraries/anti-xss-master/src/voku/helper/data/x064.php, includes/libraries/anti-xss-master/src/voku/helper/data/x065.php, includes/libraries/anti-xss-master/src/voku/helper/data/x066.php, includes/libraries/anti-xss-master/src/voku/helper/data/x067.php, includes/libraries/anti-xss-master/src/voku/helper/data/x068.php, includes/libraries/anti-xss-master/src/voku/helper/data/x069.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x06f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x070.php, includes/libraries/anti-xss-master/src/voku/helper/data/x071.php, includes/libraries/anti-xss-master/src/voku/helper/data/x072.php, includes/libraries/anti-xss-master/src/voku/helper/data/x073.php, includes/libraries/anti-xss-master/src/voku/helper/data/x074.php, includes/libraries/anti-xss-master/src/voku/helper/data/x075.php, includes/libraries/anti-xss-master/src/voku/helper/data/x076.php, includes/libraries/anti-xss-master/src/voku/helper/data/x077.php, includes/libraries/anti-xss-master/src/voku/helper/data/x078.php, includes/libraries/anti-xss-master/src/voku/helper/data/x079.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x07f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x080.php, includes/libraries/anti-xss-master/src/voku/helper/data/x081.php, includes/libraries/anti-xss-master/src/voku/helper/data/x082.php, includes/libraries/anti-xss-master/src/voku/helper/data/x083.php, includes/libraries/anti-xss-master/src/voku/helper/data/x084.php, includes/libraries/anti-xss-master/src/voku/helper/data/x085.php, includes/libraries/anti-xss-master/src/voku/helper/data/x086.php, includes/libraries/anti-xss-master/src/voku/helper/data/x087.php, includes/libraries/anti-xss-master/src/voku/helper/data/x088.php, includes/libraries/anti-xss-master/src/voku/helper/data/x089.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x08f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x090.php, includes/libraries/anti-xss-master/src/voku/helper/data/x091.php, includes/libraries/anti-xss-master/src/voku/helper/data/x092.php, includes/libraries/anti-xss-master/src/voku/helper/data/x093.php, includes/libraries/anti-xss-master/src/voku/helper/data/x094.php, includes/libraries/anti-xss-master/src/voku/helper/data/x095.php, includes/libraries/anti-xss-master/src/voku/helper/data/x096.php, includes/libraries/anti-xss-master/src/voku/helper/data/x097.php, includes/libraries/anti-xss-master/src/voku/helper/data/x098.php, includes/libraries/anti-xss-master/src/voku/helper/data/x099.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09a.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09b.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09c.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09d.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09e.php, includes/libraries/anti-xss-master/src/voku/helper/data/x09f.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0a0.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0a1.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0a2.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0a3.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0a4.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ac.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ad.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ae.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0af.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b0.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b1.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b2.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b3.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b4.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b5.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b6.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b7.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b8.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0b9.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ba.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0bb.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0bc.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0bd.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0be.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0bf.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c0.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c1.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c2.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c3.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c4.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c5.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c6.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c7.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c8.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0c9.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ca.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0cb.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0cc.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0cd.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ce.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0cf.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d0.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d1.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d2.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d3.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d4.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d5.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d6.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0d7.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0f9.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0fa.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0fb.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0fc.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0fd.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0fe.php, includes/libraries/anti-xss-master/src/voku/helper/data/x0ff.php, includes/libraries/anti-xss-master/src/voku/helper/data/x1d4.php, includes/libraries/anti-xss-master/src/voku/helper/data/x1d5.php, includes/libraries/anti-xss-master/src/voku/helper/data/x1d6.php, includes/libraries/anti-xss-master/src/voku/helper/data/x1d7.php, includes/libraries/anti-xss-master/src/voku/helper/data/x1f1.php, sources/core.php, sources/identify.php, sources/items.queries.php
Commit date: 2023-04-09 14:54:25 +0200
Commit message: 3.0.3

Fix potential XSS in item description field

Diff: diff --git a/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php b/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php
new file mode 100644
index 000000000..6688c27ef
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php
@@ -0,0 +1,1501 @@
+<?php
+
+declare(strict_types=1);
+
+namespace voku\helper;
+
+/**
+ * ## 🇷🇺 Русским гражданам
+ * В Украине сейчас идет война. Силами РФ наносятся удары по гражданской инфраструктуре в [Харькове][1], [Киеве][2], [Чернигове][3], [Сумах][4], [Ирпене][5] и десятках других городов. Гибнут люди - и гражданское население, и военные, в том числе российские призывники, которых бросили воевать. Чтобы лишить собственный народ доступа к информации, правительство РФ запретило называть войну войной, закрыло независимые СМИ и принимает сейчас ряд диктаторских законов. Эти законы призваны заткнуть рот всем, кто против войны. За обычный призыв к миру сейчас можно получить несколько лет тюрьмы.
+ * Не молчите! Молчание - знак вашего согласия с политикой российского правительства.
+ *  **Вы можете сделать выбор НЕ МОЛЧАТЬ.**
+ * ---
+ * ## 🇺🇸 To people of Russia
+ * There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilian infrastructure in [Kharkiv][1], [Kyiv][2], [Chernihiv][3], [Sumy][4], [Irpin][5] and dozens of other cities. People are dying – both civilians and military servicemen, including Russian conscripts who were thrown into the fighting. In order to deprive its own people of access to information, the government of the Russian Federation has forbidden calling a war a war, shut down independent media and is passing a number of dictatorial laws. These laws are meant to silence all those who are against war. You can be jailed for multiple years for simply calling for peace.
+ * Do not be silent! Silence is a sign that you accept the Russian government's policy.
+ * **You can choose NOT TO BE SILENT.**
+ * ---
+ * - [1] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/P7K2MSZDGFMIJPDD7CI2GIROJI.jpg "Kharkiv under attack"
+ * - [2] https://gdb.voanews.com/01bd0000-0aff-0242-fad0-08d9fc92c5b3_cx0_cy5_cw0_w1023_r1_s.jpg "Kyiv under attack"
+ * - [3] https://ichef.bbci.co.uk/news/976/cpsprodpb/163DD/production/_123510119_hi074310744.jpg "Chernihiv under attack"
+ * - [4] https://www.youtube.com/watch?v=8K-bkqKKf2A "Sumy under attack"
+ * - [5] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/K4MTMLEHTRKGFK3GSKAT4GR3NE.jpg "Irpin under attack"
+ *
+ * @psalm-immutable
+ */
+final class ASCII
+{
+    //
+    // INFO: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+    //
+
+    const UZBEK_LANGUAGE_CODE = 'uz';
+
+    const TURKMEN_LANGUAGE_CODE = 'tk';
+
+    const THAI_LANGUAGE_CODE = 'th';
+
+    const PASHTO_LANGUAGE_CODE = 'ps';
+
+    const ORIYA_LANGUAGE_CODE = 'or';
+
+    const MONGOLIAN_LANGUAGE_CODE = 'mn';
+
+    const KOREAN_LANGUAGE_CODE = 'ko';
+
+    const KIRGHIZ_LANGUAGE_CODE = 'ky';
+
+    const ARMENIAN_LANGUAGE_CODE = 'hy';
+
+    const BENGALI_LANGUAGE_CODE = 'bn';
+
+    const BELARUSIAN_LANGUAGE_CODE = 'be';
+
+    const AMHARIC_LANGUAGE_CODE = 'am';
+
+    const JAPANESE_LANGUAGE_CODE = 'ja';
+
+    const CHINESE_LANGUAGE_CODE = 'zh';
+
+    const DUTCH_LANGUAGE_CODE = 'nl';
+
+    const ITALIAN_LANGUAGE_CODE = 'it';
+
+    const MACEDONIAN_LANGUAGE_CODE = 'mk';
+
+    const PORTUGUESE_LANGUAGE_CODE = 'pt';
+
+    const GREEKLISH_LANGUAGE_CODE = 'el__greeklish';
+
+    const GREEK_LANGUAGE_CODE = 'el';
+
+    const HINDI_LANGUAGE_CODE = 'hi';
+
+    const SWEDISH_LANGUAGE_CODE = 'sv';
+
+    const TURKISH_LANGUAGE_CODE = 'tr';
+
+    const BULGARIAN_LANGUAGE_CODE = 'bg';
+
+    const HUNGARIAN_LANGUAGE_CODE = 'hu';
+
+    const MYANMAR_LANGUAGE_CODE = 'my';
+
+    const CROATIAN_LANGUAGE_CODE = 'hr';
+
+    const FINNISH_LANGUAGE_CODE = 'fi';
+
+    const GEORGIAN_LANGUAGE_CODE = 'ka';
+
+    const RUSSIAN_LANGUAGE_CODE = 'ru';
+
+    const RUSSIAN_PASSPORT_2013_LANGUAGE_CODE = 'ru__passport_2013';
+
+    const RUSSIAN_GOST_2000_B_LANGUAGE_CODE = 'ru__gost_2000_b';
+
+    const UKRAINIAN_LANGUAGE_CODE = 'uk';
+
+    const KAZAKH_LANGUAGE_CODE = 'kk';
+
+    const CZECH_LANGUAGE_CODE = 'cs';
+
+    const DANISH_LANGUAGE_CODE = 'da';
+
+    const POLISH_LANGUAGE_CODE = 'pl';
+
+    const ROMANIAN_LANGUAGE_CODE = 'ro';
+
+    const ESPERANTO_LANGUAGE_CODE = 'eo';
+
+    const ESTONIAN_LANGUAGE_CODE = 'et';
+
+    const LATVIAN_LANGUAGE_CODE = 'lv';
+
+    const LITHUANIAN_LANGUAGE_CODE = 'lt';
+
+    const NORWEGIAN_LANGUAGE_CODE = 'no';
+
+    const VIETNAMESE_LANGUAGE_CODE = 'vi';
+
+    const ARABIC_LANGUAGE_CODE = 'ar';
+
+    const PERSIAN_LANGUAGE_CODE = 'fa';
+
+    const SERBIAN_LANGUAGE_CODE = 'sr';
+
+    const SERBIAN_CYRILLIC_LANGUAGE_CODE = 'sr__cyr';
+
+    const SERBIAN_LATIN_LANGUAGE_CODE = 'sr__lat';
+
+    const AZERBAIJANI_LANGUAGE_CODE = 'az';
+
+    const SLOVAK_LANGUAGE_CODE = 'sk';
+
+    const FRENCH_LANGUAGE_CODE = 'fr';
+
+    const FRENCH_AUSTRIAN_LANGUAGE_CODE = 'fr_at';
+
+    const FRENCH_SWITZERLAND_LANGUAGE_CODE = 'fr_ch';
+
+    const GERMAN_LANGUAGE_CODE = 'de';
+
+    const GERMAN_AUSTRIAN_LANGUAGE_CODE = 'de_at';
+
+    const GERMAN_SWITZERLAND_LANGUAGE_CODE = 'de_ch';
+
+    const ENGLISH_LANGUAGE_CODE = 'en';
+
+    const EXTRA_LATIN_CHARS_LANGUAGE_CODE = 'latin';
+
+    const EXTRA_WHITESPACE_CHARS_LANGUAGE_CODE = ' ';
+
+    const EXTRA_MSWORD_CHARS_LANGUAGE_CODE = 'msword';
+
+    /**
+     * @var array<string, array<string, string>>|null
+     */
+    private static $ASCII_MAPS;
+
+    /**
+     * @var array<string, array<string, string>>|null
+     */
+    private static $ASCII_MAPS_AND_EXTRAS;
+
+    /**
+     * @var array<string, array<string, string>>|null
+     */
+    private static $ASCII_EXTRAS;
+
+    /**
+     * @var array<string, int>|null
+     */
+    private static $ORD;
+
+    /**
+     * @var array<string, int>|null
+     */
+    private static $LANGUAGE_MAX_KEY;
+
+    /**
+     * url: https://en.wikipedia.org/wiki/Wikipedia:ASCII#ASCII_printable_characters
+     *
+     * @var string
+     */
+    private static $REGEX_ASCII = "[^\x09\x10\x13\x0A\x0D\x20-\x7E]";
+
+    /**
+     * bidirectional text chars
+     *
+     * url: https://www.w3.org/International/questions/qa-bidi-unicode-controls
+     *
+     * @var array<int, string>
+     */
+    private static $BIDI_UNI_CODE_CONTROLS_TABLE = [
+        // LEFT-TO-RIGHT EMBEDDING (use -> dir = "ltr")
+        8234 => "\xE2\x80\xAA",
+        // RIGHT-TO-LEFT EMBEDDING (use -> dir = "rtl")
+        8235 => "\xE2\x80\xAB",
+        // POP DIRECTIONAL FORMATTING // (use -> </bdo>)
+        8236 => "\xE2\x80\xAC",
+        // LEFT-TO-RIGHT OVERRIDE // (use -> <bdo dir = "ltr">)
+        8237 => "\xE2\x80\xAD",
+        // RIGHT-TO-LEFT OVERRIDE // (use -> <bdo dir = "rtl">)
+        8238 => "\xE2\x80\xAE",
+        // LEFT-TO-RIGHT ISOLATE // (use -> dir = "ltr")
+        8294 => "\xE2\x81\xA6",
+        // RIGHT-TO-LEFT ISOLATE // (use -> dir = "rtl")
+        8295 => "\xE2\x81\xA7",
+        // FIRST STRONG ISOLATE // (use -> dir = "auto")
+        8296 => "\xE2\x81\xA8",
+        // POP DIRECTIONAL ISOLATE
+        8297 => "\xE2\x81\xA9",
+    ];
+
+    /**
+     * Get all languages from the constants "ASCII::.*LANGUAGE_CODE".
+     *
+     * @return string[]
+     *
+     * @phpstan-return array<string, string>
+     */
+    public static function getAllLanguages(): array
+    {
+        // init
+        static $LANGUAGES = [];
+
+        if ($LANGUAGES !== []) {
+            return $LANGUAGES;
+        }
+
+        foreach ((new \ReflectionClass(__CLASS__))->getConstants() as $constant => $lang) {
+            if (\strpos($constant, 'EXTRA') !== false) {
+                $LANGUAGES[\strtolower($constant)] = $lang;
+            } else {
+                $LANGUAGES[\strtolower(\str_replace('_LANGUAGE_CODE', '', $constant))] = $lang;
+            }
+        }
+
+        return $LANGUAGES;
+    }
+
+    /**
+     * Returns an replacement array for ASCII methods.
+     *
+     * EXAMPLE: <code>
+     * $array = ASCII::charsArray();
+     * var_dump($array['ru']['б']); // 'b'
+     * </code>
+     *
+     * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
+     *
+     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
+     *
+     * @psalm-pure
+     *
+     * @return array
+     *
+     * @phpstan-return array<string, array<string , string>>
+     */
+    public static function charsArray(bool $replace_extra_symbols = false): array
+    {
+        if ($replace_extra_symbols) {
+            self::prepareAsciiAndExtrasMaps();
+
+            return self::$ASCII_MAPS_AND_EXTRAS ?? [];
+        }
+
+        self::prepareAsciiMaps();
+
+        return self::$ASCII_MAPS ?? [];
+    }
+
+    /**
+     * Returns an replacement array for ASCII methods with a mix of multiple languages.
+     *
+     * EXAMPLE: <code>
+     * $array = ASCII::charsArrayWithMultiLanguageValues();
+     * var_dump($array['b']); // ['β', 'б', 'ဗ', 'ბ', 'ب']
+     * </code>
+     *
+     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
+     *
+     * @psalm-pure
+     *
+     * @return array
+     *               <p>An array of replacements.</p>
+     *
+     * @phpstan-return array<string, array<int, string>>
+     */
+    public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array
+    {
+        /** @var array<string, array<string, array<int, string>>> */
+        static $CHARS_ARRAY = [];
+        $cacheKey = '' . $replace_extra_symbols;
+
+        if (isset($CHARS_ARRAY[$cacheKey])) {
+            return $CHARS_ARRAY[$cacheKey];
+        }
+
+        // init
+        $return = [];
+        $language_all_chars = self::charsArrayWithSingleLanguageValues(
+            $replace_extra_symbols,
+            false
+        );
+
+        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
+        /** @var array<string, string> $language_all_chars */
+        $language_all_chars = $language_all_chars;
+
+        /** @noinspection AlterInForeachInspection */
+        foreach ($language_all_chars as $key => &$value) {
+            $return[$value][] = $key;
+        }
+
+        $CHARS_ARRAY[$cacheKey] = $return;
+
+        /** @var array<string, array<int, string>> $return - hack for phpstan */
+        return $return;
+    }
+
+    /**
+     * Returns an replacement array for ASCII methods with one language.
+     *
+     * For example, German will map 'ä' to 'ae', while other languages
+     * will simply return e.g. 'a'.
+     *
+     * EXAMPLE: <code>
+     * $array = ASCII::charsArrayWithOneLanguage('ru');
+     * $tmpKey = \array_search('yo', $array['replace']);
+     * echo $array['orig'][$tmpKey]; // 'ё'
+     * </code>
+     *
+     * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
+     *
+     * @param string $language              [optional] <p>Language of the source string e.g.: en, de_at, or de-ch.
+     *                                      (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
+     * @param bool   $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
+     * @param bool   $asOrigReplaceArray    [optional] <p>TRUE === return {orig: string[], replace: string[]}
+     *                                      array</p>
+     *
+     * @psalm-pure
+     *
+     * @return array
+     *               <p>An array of replacements.</p>
+     *
+     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
+     * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
+     */
+    public static function charsArrayWithOneLanguage(
+        string $language = self::ENGLISH_LANGUAGE_CODE,
+        bool $replace_extra_symbols = false,
+        bool $asOrigReplaceArray = true
+    ): array {
+        $language = self::get_language($language);
+
+        // init
+        /** @var array<string, array<string, array<string, string>|array{orig: string[], replace: string[]}>> */
+        static $CHARS_ARRAY = [];
+        $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;
+
+        // check static cache
+        if (isset($CHARS_ARRAY[$cacheKey][$language])) {
+            return $CHARS_ARRAY[$cacheKey][$language];
+        }
+
+        if ($replace_extra_symbols) {
+            self::prepareAsciiAndExtrasMaps();
+
+            /** @noinspection DuplicatedCode */
+            if (isset(self::$ASCII_MAPS_AND_EXTRAS[$language])) {
+                $tmpArray = self::$ASCII_MAPS_AND_EXTRAS[$language];
+
+                if ($asOrigReplaceArray) {
+                    $CHARS_ARRAY[$cacheKey][$language] = [
+                        'orig'    => \array_keys($tmpArray),
+                        'replace' => \array_values($tmpArray),
+                    ];
+                } else {
+                    $CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
+                }
+            } else {
+                /** @noinspection NestedPositiveIfStatementsInspection */
+                if ($asOrigReplaceArray) {
+                    $CHARS_ARRAY[$cacheKey][$language] = [
+                        'orig'    => [],
+                        'replace' => [],
+                    ];
+                } else {
+                    $CHARS_ARRAY[$cacheKey][$language] = [];
+                }
+            }
+        } else {
+            self::prepareAsciiMaps();
+
+            /** @noinspection DuplicatedCode */
+            if (isset(self::$ASCII_MAPS[$language])) {
+                $tmpArray = self::$ASCII_MAPS[$language];
+
+                if ($asOrigReplaceArray) {
+                    $CHARS_ARRAY[$cacheKey][$language] = [
+                        'orig'    => \array_keys($tmpArray),
+                        'replace' => \array_values($tmpArray),
+                    ];
+                } else {
+                    $CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
+                }
+            } else {
+                /** @noinspection NestedPositiveIfStatementsInspection */
+                if ($asOrigReplaceArray) {
+                    $CHARS_ARRAY[$cacheKey][$language] = [
+                        'orig'    => [],
+                        'replace' => [],
+                    ];
+                } else {
+                    $CHARS_ARRAY[$cacheKey][$language] = [];
+                }
+            }
+        }
+
+        return $CHARS_ARRAY[$cacheKey][$language] ?? ['orig' => [], 'replace' => []];
+    }
+
+    /**
+     * Returns an replacement array for ASCII methods with multiple languages.
+     *
+     * EXAMPLE: <code>
+     * $array = ASCII::charsArrayWithSingleLanguageValues();
+     * $tmpKey = \array_search('hnaik', $array['replace']);
+     * echo $array['orig'][$tmpKey]; // '၌'
+     * </code>
+     *
+     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
+     * @param bool $asOrigReplaceArray    [optional] <p>TRUE === return {orig: string[], replace: string[]}
+     *                                    array</p>
+     *
+     * @psalm-pure
+     *
+     * @return array
+     *               <p>An array of replacements.</p>
+     *
+     * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
+     */
+    public static function charsArrayWithSingleLanguageValues(
+        bool $replace_extra_symbols = false,
+        bool $asOrigReplaceArray = true
+    ): array {
+        // init
+        /** @var array<string, array<string, string>|array{orig: string[], replace: string[]}> */
+        static $CHARS_ARRAY = [];
+        $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;
+
+        if (isset($CHARS_ARRAY[$cacheKey])) {
+            return $CHARS_ARRAY[$cacheKey];
+        }
+
+        if ($replace_extra_symbols) {
+            self::prepareAsciiAndExtrasMaps();
+
+            /** @noinspection AlterInForeachInspection */
+            /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
+            foreach (self::$ASCII_MAPS_AND_EXTRAS ?? [] as &$map) {
+                $CHARS_ARRAY[$cacheKey][] = $map;
+            }
+        } else {
+            self::prepareAsciiMaps();
+
+            /** @noinspection AlterInForeachInspection */
+            /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
+            foreach (self::$ASCII_MAPS ?? [] as &$map) {
+                $CHARS_ARRAY[$cacheKey][] = $map;
+            }
+        }
+
+        /** @phpstan-ignore-next-line - ... error? */
+        $CHARS_ARRAY[$cacheKey] = \array_merge([], ...$CHARS_ARRAY[$cacheKey]);
+
+        if ($asOrigReplaceArray) {
+            $CHARS_ARRAY[$cacheKey] = [
+                'orig'    => \array_keys($CHARS_ARRAY[$cacheKey]),
+                'replace' => \array_values($CHARS_ARRAY[$cacheKey]),
+            ];
+        }
+
+        return $CHARS_ARRAY[$cacheKey];
+    }
+
+    /**
+     * Accepts a string and removes all non-UTF-8 characters from it + extras if needed.
+     *
+     * @param string $str                         <p>The string to be sanitized.</p>
+     * @param bool   $normalize_whitespace        [optional] <p>Set to true, if you need to normalize the
+     *                                            whitespace.</p>
+     * @param bool   $normalize_msword            [optional] <p>Set to true, if you need to normalize MS Word chars
+     *                                            e.g.: "…"
+     *                                            => "..."</p>
+     * @param bool   $keep_non_breaking_space     [optional] <p>Set to true, to keep non-breaking-spaces, in
+     *                                            combination with
+     *                                            $normalize_whitespace</p>
+     * @param bool   $remove_invisible_characters [optional] <p>Set to false, if you not want to remove invisible
+     *                                            characters e.g.: "\0"</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A clean UTF-8 string.</p>
+     */
+    public static function clean(
+        string $str,
+        bool $normalize_whitespace = true,
+        bool $keep_non_breaking_space = false,
+        bool $normalize_msword = true,
+        bool $remove_invisible_characters = true
+    ): string {
+        // http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string
+        // caused connection reset problem on larger strings
+
+        $regex = '/
+          (
+            (?: [\x00-\x7F]               # single-byte sequences   0xxxxxxx
+            |   [\xC0-\xDF][\x80-\xBF]    # double-byte sequences   110xxxxx 10xxxxxx
+            |   [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences   1110xxxx 10xxxxxx * 2
+            |   [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
+            ){1,100}                      # ...one or more times
+          )
+        | ( [\x80-\xBF] )                 # invalid byte in range 10000000 - 10111111
+        | ( [\xC0-\xFF] )                 # invalid byte in range 11000000 - 11111111
+        /x';
+        $str = (string) \preg_replace($regex, '$1', $str);
+
+        if ($normalize_whitespace) {
+            $str = self::normalize_whitespace($str, $keep_non_breaking_space);
+        }
+
+        if ($normalize_msword) {
+            $str = self::normalize_msword($str);
+        }
+
+        if ($remove_invisible_characters) {
+            $str = self::remove_invisible_characters($str);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Checks if a string is 7 bit ASCII.
+     *
+     * EXAMPLE: <code>
+     * ASCII::is_ascii('白'); // false
+     * </code>
+     *
+     * @param string $str <p>The string to check.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>
+     *              <strong>true</strong> if it is ASCII<br>
+     *              <strong>false</strong> otherwise
+     *              </p>
+     */
+    public static function is_ascii(string $str): bool
+    {
+        if ($str === '') {
+            return true;
+        }
+
+        return !\preg_match('/' . self::$REGEX_ASCII . '/', $str);
+    }
+
+    /**
+     * Returns a string with smart quotes, ellipsis characters, and dashes from
+     * Windows-1252 (commonly used in Word documents) replaced by their ASCII
+     * equivalents.
+     *
+     * EXAMPLE: <code>
+     * ASCII::normalize_msword('„Abcdef…”'); // '"Abcdef..."'
+     * </code>
+     *
+     * @param string $str <p>The string to be normalized.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with normalized characters for commonly used chars in Word documents.</p>
+     */
+    public static function normalize_msword(string $str): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        /** @var array{orig: string[], replace: string[]} */
+        static $MSWORD_CACHE = ['orig' => [], 'replace' => []];
+
+        if (empty($MSWORD_CACHE['orig'])) {
+            self::prepareAsciiMaps();
+
+            /** @var array<string, string> */
+            $map = self::$ASCII_MAPS[self::EXTRA_MSWORD_CHARS_LANGUAGE_CODE] ?? [];
+
+            $MSWORD_CACHE = [
+                'orig'    => \array_keys($map),
+                'replace' => \array_values($map),
+            ];
+        }
+
+        return \str_replace($MSWORD_CACHE['orig'], $MSWORD_CACHE['replace'], $str);
+    }
+
+    /**
+     * Normalize the whitespace.
+     *
+     * EXAMPLE: <code>
+     * ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -"
+     * </code>
+     *
+     * @param string $str                          <p>The string to be normalized.</p>
+     * @param bool   $keepNonBreakingSpace         [optional] <p>Set to true, to keep non-breaking-spaces.</p>
+     * @param bool   $keepBidiUnicodeControls      [optional] <p>Set to true, to keep non-printable (for the web)
+     *                                             bidirectional text chars.</p>
+     * @param bool   $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with normalized whitespace.</p>
+     */
+    public static function normalize_whitespace(
+        string $str,
+        bool $keepNonBreakingSpace = false,
+        bool $keepBidiUnicodeControls = false,
+        bool $normalize_control_characters = false
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        /** @var array<int,array<string,string>> */
+        static $WHITESPACE_CACHE = [];
+        $cacheKey = (int) $keepNonBreakingSpace;
+
+        if ($normalize_control_characters) {
+            $str = \str_replace(
+                [
+                    "\x0d\x0c",     // 'END OF LINE'
+                    "\xe2\x80\xa8", // 'LINE SEPARATOR'
+                    "\xe2\x80\xa9", // 'PARAGRAPH SEPARATOR'
+                    "\x0c",         // 'FORM FEED' // "\f"
+                    "\x0b",         // 'VERTICAL TAB' // "\v"
+                ],
+                [
+                    "\n",
+                    "\n",
+                    "\n",
+                    "\n",
+                    "\t",
+                ],
+                $str
+            );
+        }
+
+        if (!isset($WHITESPACE_CACHE[$cacheKey])) {
+            self::prepareAsciiMaps();
+
+            $WHITESPACE_CACHE[$cacheKey] = self::$ASCII_MAPS[self::EXTRA_WHITESPACE_CHARS_LANGUAGE_CODE] ?? [];
+
+            if ($keepNonBreakingSpace) {
+                unset($WHITESPACE_CACHE[$cacheKey]["\xc2\xa0"]);
+            }
+
+            $WHITESPACE_CACHE[$cacheKey] = array_keys($WHITESPACE_CACHE[$cacheKey]);
+        }
+
+        if (!$keepBidiUnicodeControls) {
+            /** @var array<int,string>|null */
+            static $BIDI_UNICODE_CONTROLS_CACHE = null;
+
+            if ($BIDI_UNICODE_CONTROLS_CACHE === null) {
+                $BIDI_UNICODE_CONTROLS_CACHE = self::$BIDI_UNI_CODE_CONTROLS_TABLE;
+            }
+
+            $str = \str_replace($BIDI_UNICODE_CONTROLS_CACHE, '', $str);
+        }
+
+        return \str_replace($WHITESPACE_CACHE[$cacheKey], ' ', $str);
+    }
+
+    /**
+     * Remove invisible characters from a string.
+     *
+     * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script.
+     *
+     * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php
+     *
+     * @param string $str
+     * @param bool   $url_encoded
+     * @param string $replacement
+     * @param bool   $keep_basic_control_characters
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function remove_invisible_characters(
+        string $str,
+        bool $url_encoded = false,
+        string $replacement = '',
+        bool $keep_basic_control_characters = true
+    ): string {
+        // init
+        $non_displayables = [];
+
+        // every control character except:
+        // - newline (dec 10),
+        // - carriage return (dec 13),
+        // - horizontal tab (dec 09)
+        if ($url_encoded) {
+            $non_displayables[] = '/%0[0-8bcefBCEF]/'; // url encoded 00-08, 11, 12, 14, 15
+            $non_displayables[] = '/%1[0-9a-fA-F]/'; // url encoded 16-31
+        }
+
+        if ($keep_basic_control_characters) {
+            $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127
+        } else {
+            $str = self::normalize_whitespace($str, false, false, true);
+            $non_displayables[] = '/[^\P{C}\s]/u';
+        }
+
+        do {
+            $str = (string) \preg_replace($non_displayables, $replacement, $str, -1, $count);
+        } while ($count !== 0);
+
+        return $str;
+    }
+
+    /**
+     *  WARNING: This method will return broken characters and is only for special cases.
+     *
+     * Convert two UTF-8 encoded string to a single-byte strings suitable for
+     * functions that need the same string length after the conversion.
+     *
+     * The function simply uses (and updates) a tailored dynamic encoding
+     * (in/out map parameter) where non-ascii characters are remapped to
+     * the range [128-255] in order of appearance.
+     *
+     * @param string $str1
+     * @param string $str2
+     *
+     * @return string[]
+     *
+     * @phpstan-return array{0: string, 1: string}
+     */
+    public static function to_ascii_remap(string $str1, string $str2): array
+    {
+        $charMap = [];
+        $str1 = self::to_ascii_remap_intern($str1, $charMap);
+        $str2 = self::to_ascii_remap_intern($str2, $charMap);
+
+        return [$str1, $str2];
+    }
+
+    /**
+     * Returns an ASCII version of the string. A set of non-ASCII characters are
+     * replaced with their closest ASCII counterparts, and the rest are removed
+     * by default. The language or locale of the source string can be supplied
+     * for language-specific transliteration in any of the following formats:
+     * en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping
+     * to "aeoeue" rather than "aou" as in other languages.
+     *
+     * EXAMPLE: <code>
+     * ASCII::to_ascii('�Düsseldorf�', 'en'); // Dusseldorf
+     * </code>
+     *
+     * @param string    $str                       <p>The input string.</p>
+     * @param string    $language                  [optional] <p>Language of the source string.
+     *                                             (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
+     * @param bool      $remove_unsupported_chars  [optional] <p>Whether or not to remove the
+     *                                             unsupported characters.</p>
+     * @param bool      $replace_extra_symbols     [optional]  <p>Add some more replacements e.g. "£" with " pound
+     *                                             ".</p>
+     * @param bool      $use_transliterate         [optional]  <p>Use ASCII::to_transliterate() for unknown chars.</p>
+     * @param bool|null $replace_single_chars_only [optional]  <p>Single char replacement is better for the
+     *                                             performance, but some languages need to replace more then one char
+     *                                             at the same time. | NULL === auto-setting, depended on the
+     *                                             language</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string that contains only ASCII characters.</p>
+     *
+     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
+     */
+    public static function to_ascii(
+        string $str,
+        string $language = self::ENGLISH_LANGUAGE_CODE,
+        bool $remove_unsupported_chars = true,
+        bool $replace_extra_symbols = false,
+        bool $use_transliterate = false,
+        bool $replace_single_chars_only = null
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        /** @phpstan-var ASCII::*_LANGUAGE_CODE - hack for phpstan */
+        $language = self::get_language($language);
+
+        static $EXTRA_SYMBOLS_CACHE = null;
+
+        /** @var array<string,array<string,string>> */
+        static $REPLACE_HELPER_CACHE = [];
+        $cacheKey = $language . '-' . $replace_extra_symbols;
+
+        if (!isset($REPLACE_HELPER_CACHE[$cacheKey])) {
+            $langAll = self::charsArrayWithSingleLanguageValues($replace_extra_symbols, false);
+
+            $langSpecific = self::charsArrayWithOneLanguage($language, $replace_extra_symbols, false);
+
+            if ($langSpecific === []) {
+                $REPLACE_HELPER_CACHE[$cacheKey] = $langAll;
+            } else {
+                $REPLACE_HELPER_CACHE[$cacheKey] = \array_merge([], $langAll, $langSpecific);
+            }
+        }
+
+        if (
+            $replace_extra_symbols
+            &&
+            $EXTRA_SYMBOLS_CACHE === null
+        ) {
+            $EXTRA_SYMBOLS_CACHE = [];
+            foreach (self::$ASCII_EXTRAS ?? [] as $extrasDataTmp) {
+                foreach ($extrasDataTmp as $extrasDataKeyTmp => $extrasDataValueTmp) {
+                    $EXTRA_SYMBOLS_CACHE[$extrasDataKeyTmp] = $extrasDataKeyTmp;
+                }
+            }
+            $EXTRA_SYMBOLS_CACHE = \implode('', $EXTRA_SYMBOLS_CACHE);
+        }
+
+        $charDone = [];
+        if (\preg_match_all('/' . self::$REGEX_ASCII . ($replace_extra_symbols ? '|[' . $EXTRA_SYMBOLS_CACHE . ']' : '') . '/u', $str, $matches)) {
+            if (!$replace_single_chars_only) {
+                if (self::$LANGUAGE_MAX_KEY === null) {
+                    self::$LANGUAGE_MAX_KEY = self::getData('ascii_language_max_key');
+                }
+
+                $maxKeyLength = self::$LANGUAGE_MAX_KEY[$language] ?? 0;
+
+                if ($maxKeyLength >= 5) {
+                    foreach ($matches[0] as $keyTmp => $char) {
+                        if (isset($matches[0][$keyTmp + 4])) {
+                            $fiveChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3] . $matches[0][$keyTmp + 4];
+                        } else {
+                            $fiveChars = null;
+                        }
+                        if (
+                            $fiveChars
+                            &&
+                            !isset($charDone[$fiveChars])
+                            &&
+                            isset($REPLACE_HELPER_CACHE[$cacheKey][$fiveChars])
+                            &&
+                            \strpos($str, $fiveChars) !== false
+                        ) {
+                            // DEBUG
+                            //\var_dump($str, $fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars]);
+
+                            $charDone[$fiveChars] = true;
+                            $str = \str_replace($fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars], $str);
+
+                            // DEBUG
+                            //\var_dump($str, "\n");
+                        }
+                    }
+                }
+
+                if ($maxKeyLength >= 4) {
+                    foreach ($matches[0] as $keyTmp => $char) {
+                        if (isset($matches[0][$keyTmp + 3])) {
+                            $fourChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3];
+                        } else {
+                            $fourChars = null;
+                        }
+                        if (
+                            $fourChars
+                            &&
+                            !isset($charDone[$fourChars])
+                            &&
+                            isset($REPLACE_HELPER_CACHE[$cacheKey][$fourChars])
+                            &&
+                            \strpos($str, $fourChars) !== false
+                        ) {
+                            // DEBUG
+                            //\var_dump($str, $fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars]);
+
+                            $charDone[$fourChars] = true;
+                            $str = \str_replace($fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars], $str);
+
+                            // DEBUG
+                            //\var_dump($str, "\n");
+                        }
+                    }
+                }
+
+                foreach ($matches[0] as $keyTmp => $char) {
+                    if (isset($matches[0][$keyTmp + 2])) {
+                        $threeChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2];
+                    } else {
+                        $threeChars = null;
+                    }
+                    if (
+                        $threeChars
+                        &&
+                        !isset($charDone[$threeChars])
+                        &&
+                        isset($REPLACE_HELPER_CACHE[$cacheKey][$threeChars])
+                        &&
+                        \strpos($str, $threeChars) !== false
+                    ) {
+                        // DEBUG
+                        //\var_dump($str, $threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars]);
+
+                        $charDone[$threeChars] = true;
+                        $str = \str_replace($threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars], $str);
+
+                        // DEBUG
+                        //\var_dump($str, "\n");
+                    }
+                }
+
+                foreach ($matches[0] as $keyTmp => $char) {
+                    if (isset($matches[0][$keyTmp + 1])) {
+                        $twoChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1];
+                    } else {
+                        $twoChars = null;
+                    }
+                    if (
+                        $twoChars
+                        &&
+                        !isset($charDone[$twoChars])
+                        &&
+                        isset($REPLACE_HELPER_CACHE[$cacheKey][$twoChars])
+                        &&
+                        \strpos($str, $twoChars) !== false
+                    ) {
+                        // DEBUG
+                        //\var_dump($str, $twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars]);
+
+                        $charDone[$twoChars] = true;
+                        $str = \str_replace($twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars], $str);
+
+                        // DEBUG
+                        //\var_dump($str, "\n");
+                    }
+                }
+            }
+
+            foreach ($matches[0] as $char) {
+                if (
+                    !isset($charDone[$char])
+                    &&
+                    isset($REPLACE_HELPER_CACHE[$cacheKey][$char])
+                    &&
+                    \strpos($str, $char) !== false
+                ) {
+                    // DEBUG
+                    //\var_dump($str, $char, $REPLACE_HELPER_CACHE[$cacheKey][$char]);
+
+                    $charDone[$char] = true;
+                    $str = \str_replace($char, $REPLACE_HELPER_CACHE[$cacheKey][$char], $str);
+
+                    // DEBUG
+                    //\var_dump($str, "\n");
+                }
+            }
+        }
+
+        /** @psalm-suppress PossiblyNullOperand - we use the prepare* methods here, so we don't get NULL here */
+        if (!isset(self::$ASCII_MAPS[$language])) {
+            $use_transliterate = true;
+        }
+
+        if ($use_transliterate) {
+            $str = self::to_transliterate($str, null, false);
+        }
+
+        if ($remove_unsupported_chars) {
+            $str = (string) \str_replace(["\n\r", "\n", "\r", "\t"], ' ', $str);
+            $str = (string) \preg_replace('/' . self::$REGEX_ASCII . '/', '', $str);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Convert given string to safe filename (and keep string case).
+     *
+     * EXAMPLE: <code>
+     * ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png'
+     * </code>
+     *
+     * @param string $str
+     * @param bool   $use_transliterate <p>ASCII::to_transliterate() is used by default - unsafe characters are
+     *                                  simply replaced with hyphen otherwise.</p>
+     * @param string $fallback_char
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string that contains only safe characters for a filename.</p>
+     */
+    public static function to_filename(
+        string $str,
+        bool $use_transliterate = true,
+        string $fallback_char = '-'
+    ): string {
+        if ($use_transliterate) {
+            $str = self::to_transliterate($str, $fallback_char);
+        }
+
+        $fallback_char_escaped = \preg_quote($fallback_char, '/');
+
+        $str = (string) \preg_replace(
+            [
+                '/[^' . $fallback_char_escaped . '.\\-a-zA-Z\d\\s]/', // 1) remove un-needed chars
+                '/\s+/u',                                             // 2) convert spaces to $fallback_char
+                '/[' . $fallback_char_escaped . ']+/u',               // 3) remove double $fallback_char's
+            ],
+            [
+                '',
+                $fallback_char,
+                $fallback_char,
+            ],
+            $str
+        );
+
+        return \trim($str, $fallback_char);
+    }
+
+    /**
+     * Converts the string into an URL slug. This includes replacing non-ASCII
+     * characters with their closest ASCII equivalents, removing remaining
+     * non-ASCII and non-alphanumeric characters, and replacing whitespace with
+     * $separator. The separator defaults to a single dash, and the string
+     * is also converted to lowercase. The language of the source string can
+     * also be supplied for language-specific transliteration.
+     *
+     * @param string                $str
+     * @param string                $separator             [optional] <p>The string used to replace whitespace.</p>
+     * @param string                $language              [optional] <p>Language of the source string.
+     *                                                     (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
+     * @param array<string, string> $replacements          [optional] <p>A map of replaceable strings.</p>
+     * @param bool                  $replace_extra_symbols [optional]  <p>Add some more replacements e.g. "£" with "
+     *                                                     pound ".</p>
+     * @param bool                  $use_str_to_lower      [optional] <p>Use "string to lower" for the input.</p>
+     * @param bool                  $use_transliterate     [optional]  <p>Use ASCII::to_transliterate() for unknown
+     *                                                     chars.</p>
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string that has been converted to an URL slug.</p>
+     *
+     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
+     */
+    public static function to_slugify(
+        string $str,
+        string $separator = '-',
+        string $language = self::ENGLISH_LANGUAGE_CODE,
+        array $replacements = [],
+        bool $replace_extra_symbols = false,
+        bool $use_str_to_lower = true,
+        bool $use_transliterate = false
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        foreach ($replacements as $from => $to) {
+            $str = \str_replace($from, $to, $str);
+        }
+
+        $str = self::to_ascii(
+            $str,
+            $language,
+            false,
+            $replace_extra_symbols,
+            $use_transliterate
+        );
+
+        $str = \str_replace('@', $separator, $str);
+
+        $str = (string) \preg_replace(
+            '/[^a-zA-Z\\d\\s\\-_' . \preg_quote($separator, '/') . ']/',
+            '',
+            $str
+        );
+
+        if ($use_str_to_lower) {
+            $str = \strtolower($str);
+        }
+
+        $str = (string) \preg_replace('/^[\'\\s]+|[\'\\s]+$/', '', $str);
+        $str = (string) \preg_replace('/\\B([A-Z])/', '-\1', $str);
+        $str = (string) \preg_replace('/[\\-_\\s]+/', $separator, $str);
+
+        $l = \strlen($separator);
+        if ($l && \strpos($str, $separator) === 0) {
+            $str = (string) \substr($str, $l);
+        }
+
+        if (\substr($str, -$l) === $separator) {
+            $str = (string) \substr($str, 0, \strlen($str) - $l);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns an ASCII version of the string. A set of non-ASCII characters are
+     * replaced with their closest ASCII counterparts, and the rest are removed
+     * unless instructed otherwise.
+     *
+     * EXAMPLE: <code>
+     * ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii'
+     * </code>
+     *
+     * @param string      $str     <p>The input string.</p>
+     * @param string|null $unknown [optional] <p>Character use if character unknown. (default is '?')
+     *                             But you can also use NULL to keep the unknown chars.</p>
+     * @param bool        $strict  [optional] <p>Use "transliterator_transliterate()" from PHP-Intl
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A String that contains only ASCII characters.</p>
+     *
+     * @noinspection ParameterDefaultValueIsNotNullInspection
+     */
+    public static function to_transliterate(
+        string $str,
+        $unknown = '?',
+        bool $strict = false
+    ): string {
+        /** @var array<int,string>|null */
+        static $UTF8_TO_TRANSLIT = null;
+
+        /** null|\Transliterator */
+        static $TRANSLITERATOR = null;
+
+        /** @var bool|null */
+        static $SUPPORT_INTL = null;
+
+        if ($str === '') {
+            return '';
+        }
+
+        if ($SUPPORT_INTL === null) {
+            $SUPPORT_INTL = \extension_loaded('intl');
+        }
+
+        // check if we only have ASCII, first (better performance)
+        $str_tmp = $str;
+        if (self::is_ascii($str)) {
+            return $str;
+        }
+
+        $str = self::clean($str);
+
+        // check again, if we only have ASCII, now ...
+        if (
+            $str_tmp !== $str
+            &&
+            self::is_ascii($str)
+        ) {
+            return $str;
+        }
+
+        if (
+            $strict
+            &&
+            $SUPPORT_INTL === true
+        ) {
+            if (!isset($TRANSLITERATOR)) {
+                // INFO: see "*-Latin" rules via "transliterator_list_ids()"
+                /** @var \Transliterator */
+                $TRANSLITERATOR = \transliterator_create('NFKC; [:Nonspacing Mark:] Remove; NFKC; Any-Latin; Latin-ASCII;');
+            }
+
+            // INFO: https://unicode.org/cldr/utility/character.jsp
+            $str_tmp = \transliterator_transliterate($TRANSLITERATOR, $str);
+
+            if ($str_tmp !== false) {
+
+                // check again, if we only have ASCII, now ...
+                if (
+                    $str_tmp !== $str
+                    &&
+                    self::is_ascii($str_tmp)
+                ) {
+                    return $str_tmp;
+                }
+
+                $str = $str_tmp;
+            }
+        }
+
+        if (self::$ORD === null) {
+            self::$ORD = self::getData('ascii_ord');
+        }
+
+        \preg_match_all('/.|[^\x00]$/us', $str, $array_tmp);
+        $chars = $array_tmp[0];
+        $ord = null;
+        $str_tmp = '';
+        foreach ($chars as &$c) {
+            $ordC0 = self::$ORD[$c[0]];
+
+            if ($ordC0 >= 0 && $ordC0 <= 127) {
+                $str_tmp .= $c;
+
+                continue;
+            }
+
+            $ordC1 = self::$ORD[$c[1]];
+
+            // ASCII - next please
+            if ($ordC0 >= 192 && $ordC0 <= 223) {
+                $ord = ($ordC0 - 192) * 64 + ($ordC1 - 128);
+            }
+
+            if ($ordC0 >= 224) {
+                $ordC2 = self::$ORD[$c[2]];
+
+                if ($ordC0 <= 239) {
+                    $ord = ($ordC0 - 224) * 4096 + ($ordC1 - 128) * 64 + ($ordC2 - 128);
+                }
+
+                if ($ordC0 >= 240) {
+                    $ordC3 = self::$ORD[$c[3]];
+
+                    if ($ordC0 <= 247) {
+                        $ord = ($ordC0 - 240) * 262144 + ($ordC1 - 128) * 4096 + ($ordC2 - 128) * 64 + ($ordC3 - 128);
+                    }
+
+                    // We only process valid UTF-8 chars (<= 4 byte), so we don't need this code here ...
+                    /*
+                    if ($ordC0 >= 248) {
+                        $ordC4 = self::$ORD[$c[4]];
+
+                        if ($ordC0 <= 251) {
+                            $ord = ($ordC0 - 248) * 16777216 + ($ordC1 - 128) * 262144 + ($ordC2 - 128) * 4096 + ($ordC3 - 128) * 64 + ($ordC4 - 128);
+                        }
+
+                        if ($ordC0 >= 252) {
+                            $ordC5 = self::$ORD[$c[5]];
+
+                            if ($ordC0 <= 253) {
+                                $ord = ($ordC0 - 252) * 1073741824 + ($ordC1 - 128) * 16777216 + ($ordC2 - 128) * 262144 + ($ordC3 - 128) * 4096 + ($ordC4 - 128) * 64 + ($ordC5 - 128);
+                            }
+                        }
+                    }
+                     */
+                }
+            }
+
+            if (
+                $ordC0 === 254
+                ||
+                $ordC0 === 255
+                ||
+                $ord === null
+            ) {
+                $str_tmp .= $unknown ?? $c;
+
+                continue;
+            }
+
+            $bank = $ord >> 8;
+            if (!isset($UTF8_TO_TRANSLIT[$bank])) {
+                $UTF8_TO_TRANSLIT[$bank] = self::getDataIfExists(\sprintf('x%03x', $bank));
+            }
+
+            $new_char = $ord & 255;
+
+            if (isset($UTF8_TO_TRANSLIT[$bank][$new_char])) {
+
+                // keep for debugging
+                /*
+                echo "file: " . sprintf('x%02x', $bank) . "\n";
+                echo "char: " . $c . "\n";
+                echo "ord: " . $ord . "\n";
+                echo "new_char: " . $new_char . "\n";
+                echo "new_char: " . mb_chr($new_char) . "\n";
+                echo "ascii: " . $UTF8_TO_TRANSLIT[$bank][$new_char] . "\n";
+                echo "bank:" . $bank . "\n\n";
+                 */
+
+                $new_char = $UTF8_TO_TRANSLIT[$bank][$new_char];
+
+                /** @noinspection MissingOrEmptyGroupStatementInspection */
+                /** @noinspection PhpStatementHasEmptyBodyInspection */
+                if ($unknown === null && $new_char === '') {
+                    // nothing
+                } elseif (
+                    $new_char === '[?]'
+                    ||
+                    $new_char === '[?] '
+                ) {
+                    $c = $unknown ?? $c;
+                } else {
+                    $c = $new_char;
+                }
+            } else {
+
+                // keep for debugging missing chars
+                /*
+                echo "file: " . sprintf('x%02x', $bank) . "\n";
+                echo "char: " . $c . "\n";
+                echo "ord: " . $ord . "\n";
+                echo "new_char: " . $new_char . "\n";
+                echo "new_char: " . mb_chr($new_char) . "\n";
+                echo "bank:" . $bank . "\n\n";
+                 */
+
+                $c = $unknown ?? $c;
+            }
+
+            $str_tmp .= $c;
+        }
+
+        return $str_tmp;
+    }
+
+    /**
+     * WARNING: This method will return broken characters and is only for special cases.
+     *
+     * Convert a UTF-8 encoded string to a single-byte string suitable for
+     * functions that need the same string length after the conversion.
+     *
+     * The function simply uses (and updates) a tailored dynamic encoding
+     * (in/out map parameter) where non-ascii characters are remapped to
+     * the range [128-255] in order of appearance.
+     *
+     * Thus, it supports up to 128 different multibyte code points max over
+     * the whole set of strings sharing this encoding.
+     *
+     * Source: https://github.com/KEINOS/mb_levenshtein
+     *
+     * @param string $str <p>UTF-8 string to be converted to extended ASCII.</p>
+     * @param array  $map <p>Internal-Map of code points to ASCII characters.</p>
+     *
+     * @return string
+     *                <p>Mapped borken string.</p>
+     *
+     * @phpstan-param array<string, string> $map
+     */
+    private static function to_ascii_remap_intern(string $str, array &$map): string
+    {
+        // find all utf-8 characters
+        $matches = [];
+        if (!\preg_match_all('/[\xC0-\xF7][\x80-\xBF]+/', $str, $matches)) {
+            return $str; // plain ascii string
+        }
+
+        // update the encoding map with the characters not already met
+        $mapCount = \count($map);
+        foreach ($matches[0] as $mbc) {
+            if (!isset($map[$mbc])) {
+                $map[$mbc] = \chr(128 + $mapCount);
+                ++$mapCount;
+            }
+        }
+
+        // finally, remap non-ascii characters
+        return \strtr($str, $map);
+    }
+
+    /**
+     * Get the language from a string.
+     *
+     * e.g.: de_at -> de_at
+     *       de_DE -> de
+     *       DE_DE -> de
+     *       de-de -> de
+     *
+     * @noinspection ReturnTypeCanBeDeclaredInspection
+     *
+     * @param string $language
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    private static function get_language(string $language)
+    {
+        if ($language === '') {
+            return '';
+        }
+
+        if (
+            \strpos($language, '_') === false
+            &&
+            \strpos($language, '-') === false
+        ) {
+            return \strtolower($language);
+        }
+
+        $language = \str_replace('-', '_', \strtolower($language));
+
+        $regex = '/(?<first>[a-z]+)_\g{first}/';
+
+        return (string) \preg_replace($regex, '$1', $language);
+    }
+
+    /**
+     * Get data from "/data/*.php".
+     *
+     * @noinspection ReturnTypeCanBeDeclaredInspection
+     *
+     * @param string $file
+     *
+     * @psalm-pure
+     *
+     * @return array<mixed>
+     */
+    private static function getData(string $file)
+    {
+        /** @noinspection PhpIncludeInspection */
+        /** @noinspection UsingInclusionReturnValueInspection */
+        /** @psalm-suppress UnresolvableInclude */
+        return include __DIR__ . '/data/' . $file . '.php';
+    }
+
+    /**
+     * Get data from "/data/*.php".
+     *
+     * @param string $file
+     *
+     * @psalm-pure
+     *
+     * @return array<mixed>
+     */
+    private static function getDataIfExists(string $file): array
+    {
+        $file = __DIR__ . '/data/' . $file . '.php';
+        /** @psalm-suppress ImpureFunctionCall */
+        if (\is_file($file)) {
+            /** @noinspection PhpIncludeInspection */
+            /** @noinspection UsingInclusionReturnValueInspection */
+            /** @psalm-suppress UnresolvableInclude */
+            return include $file;
+        }
+
+        return [];
+    }
+
+    /**
+     * @psalm-pure
+     *
+     * @return void
+     */
+    private static function prepareAsciiAndExtrasMaps()
+    {
+        if (self::$ASCII_MAPS_AND_EXTRAS === null) {
+            self::prepareAsciiMaps();
+            self::prepareAsciiExtras();
+
+            /** @psalm-suppress PossiblyNullArgument - we use the prepare* methods here, so we don't get NULL here */
+            self::$ASCII_MAPS_AND_EXTRAS = \array_merge_recursive(
+                self::$ASCII_MAPS ?? [],
+                self::$ASCII_EXTRAS ?? []
+            );
+        }
+    }
+
+    /**
+     * @psalm-pure
+     *
+     * @return void
+     */
+    private static function prepareAsciiMaps()
+    {
+        if (self::$ASCII_MAPS === null) {
+            self::$ASCII_MAPS = self::getData('ascii_by_languages');
+        }
+    }
+
+    /**
+     * @psalm-pure
+     *
+     * @return void
+     */
+    private static function prepareAsciiExtras()
+    {
+        if (self::$ASCII_EXTRAS === null) {
+            self::$ASCII_EXTRAS = self::getData('ascii_extras_by_languages');
+        }
+    }
+}
\ No newline at end of file
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php b/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php
new file mode 100644
index 000000000..658b11ab6
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php
@@ -0,0 +1,14100 @@
+<?php
+
+declare(strict_types=1);
+
+namespace voku\helper;
+
+/**
+ * ## 🇷🇺 Русским гражданам
+ * В Украине сейчас идет война. Силами РФ наносятся удары по гражданской инфраструктуре в [Харькове][1], [Киеве][2], [Чернигове][3], [Сумах][4], [Ирпене][5] и десятках других городов. Гибнут люди - и гражданское население, и военные, в том числе российские призывники, которых бросили воевать. Чтобы лишить собственный народ доступа к информации, правительство РФ запретило называть войну войной, закрыло независимые СМИ и принимает сейчас ряд диктаторских законов. Эти законы призваны заткнуть рот всем, кто против войны. За обычный призыв к миру сейчас можно получить несколько лет тюрьмы.
+ * Не молчите! Молчание - знак вашего согласия с политикой российского правительства.
+ *  **Вы можете сделать выбор НЕ МОЛЧАТЬ.**
+ * ---
+ * ## 🇺🇸 To people of Russia
+ * There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilian infrastructure in [Kharkiv][1], [Kyiv][2], [Chernihiv][3], [Sumy][4], [Irpin][5] and dozens of other cities. People are dying – both civilians and military servicemen, including Russian conscripts who were thrown into the fighting. In order to deprive its own people of access to information, the government of the Russian Federation has forbidden calling a war a war, shut down independent media and is passing a number of dictatorial laws. These laws are meant to silence all those who are against war. You can be jailed for multiple years for simply calling for peace.
+ * Do not be silent! Silence is a sign that you accept the Russian government's policy.
+ * **You can choose NOT TO BE SILENT.**
+ * ---
+ * - [1] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/P7K2MSZDGFMIJPDD7CI2GIROJI.jpg "Kharkiv under attack"
+ * - [2] https://gdb.voanews.com/01bd0000-0aff-0242-fad0-08d9fc92c5b3_cx0_cy5_cw0_w1023_r1_s.jpg "Kyiv under attack"
+ * - [3] https://ichef.bbci.co.uk/news/976/cpsprodpb/163DD/production/_123510119_hi074310744.jpg "Chernihiv under attack"
+ * - [4] https://www.youtube.com/watch?v=8K-bkqKKf2A "Sumy under attack"
+ * - [5] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/K4MTMLEHTRKGFK3GSKAT4GR3NE.jpg "Irpin under attack"
+ *
+ * @immutable
+ */
+final class UTF8
+{
+    /**
+     * Bom => Byte-Length
+     *
+     * INFO: https://en.wikipedia.org/wiki/Byte_order_mark
+     *
+     * @var array<string, int>
+     */
+    private static $BOM = [
+        "\xef\xbb\xbf"     => 3, // UTF-8 BOM
+        'ï»¿'              => 6, // UTF-8 BOM as "WINDOWS-1252" (one char has [maybe] more then one byte ...)
+        "\x00\x00\xfe\xff" => 4, // UTF-32 (BE) BOM
+        '  þÿ'             => 6, // UTF-32 (BE) BOM as "WINDOWS-1252"
+        "\xff\xfe\x00\x00" => 4, // UTF-32 (LE) BOM
+        'ÿþ  '             => 6, // UTF-32 (LE) BOM as "WINDOWS-1252"
+        "\xfe\xff"         => 2, // UTF-16 (BE) BOM
+        'þÿ'               => 4, // UTF-16 (BE) BOM as "WINDOWS-1252"
+        "\xff\xfe"         => 2, // UTF-16 (LE) BOM
+        'ÿþ'               => 4, // UTF-16 (LE) BOM as "WINDOWS-1252"
+    ];
+
+    /**
+     * Numeric code point => UTF-8 Character
+     *
+     * url: http://www.w3schools.com/charsets/ref_utf_punctuation.asp
+     *
+     * @var array<int, string>
+     */
+    private static $WHITESPACE = [
+        // NULL Byte
+        0 => "\x0",
+        // Tab
+        9 => "\x9",
+        // New Line
+        10 => "\xa",
+        // Vertical Tab
+        11 => "\xb",
+        // Carriage Return
+        13 => "\xd",
+        // Ordinary Space
+        32 => "\x20",
+        // NO-BREAK SPACE
+        160 => "\xc2\xa0",
+        // OGHAM SPACE MARK
+        5760 => "\xe1\x9a\x80",
+        // MONGOLIAN VOWEL SEPARATOR
+        6158 => "\xe1\xa0\x8e",
+        // EN QUAD
+        8192 => "\xe2\x80\x80",
+        // EM QUAD
+        8193 => "\xe2\x80\x81",
+        // EN SPACE
+        8194 => "\xe2\x80\x82",
+        // EM SPACE
+        8195 => "\xe2\x80\x83",
+        // THREE-PER-EM SPACE
+        8196 => "\xe2\x80\x84",
+        // FOUR-PER-EM SPACE
+        8197 => "\xe2\x80\x85",
+        // SIX-PER-EM SPACE
+        8198 => "\xe2\x80\x86",
+        // FIGURE SPACE
+        8199 => "\xe2\x80\x87",
+        // PUNCTUATION SPACE
+        8200 => "\xe2\x80\x88",
+        // THIN SPACE
+        8201 => "\xe2\x80\x89",
+        // HAIR SPACE
+        8202 => "\xe2\x80\x8a",
+        // LINE SEPARATOR
+        8232 => "\xe2\x80\xa8",
+        // PARAGRAPH SEPARATOR
+        8233 => "\xe2\x80\xa9",
+        // NARROW NO-BREAK SPACE
+        8239 => "\xe2\x80\xaf",
+        // MEDIUM MATHEMATICAL SPACE
+        8287 => "\xe2\x81\x9f",
+        // HALFWIDTH HANGUL FILLER
+        65440 => "\xef\xbe\xa0",
+        // IDEOGRAPHIC SPACE
+        12288 => "\xe3\x80\x80",
+    ];
+
+    /**
+     * @var array<string, string>
+     */
+    private static $WHITESPACE_TABLE = [
+        'SPACE'                     => "\x20",
+        'NO-BREAK SPACE'            => "\xc2\xa0",
+        'OGHAM SPACE MARK'          => "\xe1\x9a\x80",
+        'EN QUAD'                   => "\xe2\x80\x80",
+        'EM QUAD'                   => "\xe2\x80\x81",
+        'EN SPACE'                  => "\xe2\x80\x82",
+        'EM SPACE'                  => "\xe2\x80\x83",
+        'THREE-PER-EM SPACE'        => "\xe2\x80\x84",
+        'FOUR-PER-EM SPACE'         => "\xe2\x80\x85",
+        'SIX-PER-EM SPACE'          => "\xe2\x80\x86",
+        'FIGURE SPACE'              => "\xe2\x80\x87",
+        'PUNCTUATION SPACE'         => "\xe2\x80\x88",
+        'THIN SPACE'                => "\xe2\x80\x89",
+        'HAIR SPACE'                => "\xe2\x80\x8a",
+        'LINE SEPARATOR'            => "\xe2\x80\xa8",
+        'PARAGRAPH SEPARATOR'       => "\xe2\x80\xa9",
+        'ZERO WIDTH SPACE'          => "\xe2\x80\x8b",
+        'NARROW NO-BREAK SPACE'     => "\xe2\x80\xaf",
+        'MEDIUM MATHEMATICAL SPACE' => "\xe2\x81\x9f",
+        'IDEOGRAPHIC SPACE'         => "\xe3\x80\x80",
+        'HALFWIDTH HANGUL FILLER'   => "\xef\xbe\xa0",
+    ];
+
+    /**
+     * @var array
+     *
+     * @phpstan-var array{upper: string[], lower: string[]}
+     */
+    private static $COMMON_CASE_FOLD = [
+        'upper' => [
+            'µ',
+            'ſ',
+            "\xCD\x85",
+            'ς',
+            'ẞ',
+            "\xCF\x90",
+            "\xCF\x91",
+            "\xCF\x95",
+            "\xCF\x96",
+            "\xCF\xB0",
+            "\xCF\xB1",
+            "\xCF\xB5",
+            "\xE1\xBA\x9B",
+            "\xE1\xBE\xBE",
+        ],
+        'lower' => [
+            'μ',
+            's',
+            'ι',
+            'σ',
+            'ß',
+            'β',
+            'θ',
+            'φ',
+            'π',
+            'κ',
+            'ρ',
+            'ε',
+            "\xE1\xB9\xA1",
+            'ι',
+        ],
+    ];
+
+    /**
+     * @var array
+     *
+     * @phpstan-var array<string, mixed>
+     */
+    private static $SUPPORT = [];
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string, string>|null
+     */
+    private static $BROKEN_UTF8_FIX;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<int, string>|null
+     */
+    private static $WIN1252_TO_UTF8;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<int ,string>|null
+     */
+    private static $INTL_TRANSLITERATOR_LIST;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string>|null
+     */
+    private static $ENCODINGS;
+
+    /**
+     * @var int[]|null
+     *
+     * @phpstan-var array<string ,int>|null
+     */
+    private static $ORD;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string, string>|null
+     */
+    private static $EMOJI;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string>|null
+     */
+    private static $EMOJI_VALUES_CACHE;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string>|null
+     */
+    private static $EMOJI_KEYS_CACHE;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<string>|null
+     */
+    private static $EMOJI_KEYS_REVERSIBLE_CACHE;
+
+    /**
+     * @var string[]|null
+     *
+     * @phpstan-var array<int, string>|null
+     */
+    private static $CHR;
+
+    /**
+     * __construct()
+     */
+    public function __construct()
+    {
+    }
+
+    /**
+     * Return the character at the specified position: $str[1] like functionality.
+     *
+     * EXAMPLE: <code>UTF8::access('fòô', 1); // 'ò'</code>
+     *
+     * @param string $str      <p>A UTF-8 string.</p>
+     * @param int    $pos      <p>The position of character to return.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Single multi-byte character.</p>
+     */
+    public static function access(string $str, int $pos, string $encoding = 'UTF-8'): string
+    {
+        if ($str === '' || $pos < 0) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str, $pos, 1);
+        }
+
+        return (string) self::substr($str, $pos, 1, $encoding);
+    }
+
+    /**
+     * Prepends UTF-8 BOM character to the string and returns the whole string.
+     *
+     * INFO: If BOM already existed there, the Input string is returned.
+     *
+     * EXAMPLE: <code>UTF8::add_bom_to_string('fòô'); // "\xEF\xBB\xBF" . 'fòô'</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return non-empty-string
+     *                           <p>The output string that contains BOM.</p>
+     */
+    public static function add_bom_to_string(string $str): string
+    {
+        if (!self::string_has_bom($str)) {
+            $str = self::bom() . $str;
+        }
+
+        \assert($str !== '');
+
+        return $str;
+    }
+
+    /**
+     * Changes all keys in an array.
+     *
+     * @param array<string, mixed> $array    <p>The array to work on</p>
+     * @param int                  $case     [optional] <p> Either <strong>CASE_UPPER</strong><br>
+     *                                       or <strong>CASE_LOWER</strong> (default)</p>
+     * @param string               $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  <p>An array with its keys lower- or uppercased.</p>
+     */
+    public static function array_change_key_case(
+        array $array,
+        int $case = \CASE_LOWER,
+        string $encoding = 'UTF-8'
+    ): array {
+        if (
+            $case !== \CASE_LOWER
+            &&
+            $case !== \CASE_UPPER
+        ) {
+            $case = \CASE_LOWER;
+        }
+
+        $return = [];
+        foreach ($array as $key => &$value) {
+            $key = $case === \CASE_LOWER
+                ? self::strtolower($key, $encoding)
+                : self::strtoupper($key, $encoding);
+
+            $return[$key] = $value;
+        }
+
+        return $return;
+    }
+
+    /**
+     * Returns the substring between $start and $end, if found, or an empty
+     * string. An optional offset may be supplied from which to begin the
+     * search for the start string.
+     *
+     * @param string $str
+     * @param string $start    <p>Delimiter marking the start of the substring.</p>
+     * @param string $end      <p>Delimiter marking the end of the substring.</p>
+     * @param int    $offset   [optional] <p>Index from which to begin the search. Default: 0</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function between(
+        string $str,
+        string $start,
+        string $end,
+        int $offset = 0,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($encoding === 'UTF-8') {
+            $start_position = \mb_strpos($str, $start, $offset);
+            if ($start_position === false) {
+                return '';
+            }
+
+            $substr_index = $start_position + (int) \mb_strlen($start);
+            $end_position = \mb_strpos($str, $end, $substr_index);
+            if (
+                $end_position === false
+                ||
+                $end_position === $substr_index
+            ) {
+                return '';
+            }
+
+            return (string) \mb_substr($str, $substr_index, $end_position - $substr_index);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        $start_position = self::strpos($str, $start, $offset, $encoding);
+        if ($start_position === false) {
+            return '';
+        }
+
+        $substr_index = $start_position + (int) self::strlen($start, $encoding);
+        $end_position = self::strpos($str, $end, $substr_index, $encoding);
+        if (
+            $end_position === false
+            ||
+            $end_position === $substr_index
+        ) {
+            return '';
+        }
+
+        return (string) self::substr(
+            $str,
+            $substr_index,
+            $end_position - $substr_index,
+            $encoding
+        );
+    }
+
+    /**
+     * Convert binary into a string.
+     *
+     * INFO: opposite to UTF8::str_to_binary()
+     *
+     * EXAMPLE: <code>UTF8::binary_to_str('11110000100111111001100010000011'); // '😃'</code>
+     *
+     * @param string $bin 1|0
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function binary_to_str($bin): string
+    {
+        if (!isset($bin[0])) {
+            return '';
+        }
+
+        $convert = \base_convert($bin, 2, 16);
+        if ($convert === '0') {
+            return '';
+        }
+
+        return \pack('H*', $convert);
+    }
+
+    /**
+     * Returns the UTF-8 Byte Order Mark Character.
+     *
+     * INFO: take a look at UTF8::$bom for e.g. UTF-16 and UTF-32 BOM values
+     *
+     * EXAMPLE: <code>UTF8::bom(); // "\xEF\xBB\xBF"</code>
+     *
+     * @psalm-pure
+     *
+     * @return non-empty-string
+     *                           <p>UTF-8 Byte Order Mark.</p>
+     */
+    public static function bom(): string
+    {
+        return "\xef\xbb\xbf";
+    }
+
+    /**
+     * @alias of UTF8::chr_map()
+     *
+     * @param callable(string): string $callback
+     * @param string   $str
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *
+     * @see   UTF8::chr_map()
+     */
+    public static function callback($callback, string $str): array
+    {
+        return self::chr_map($callback, $str);
+    }
+
+    /**
+     * Returns the character at $index, with indexes starting at 0.
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param int<1, max> $index <p>Position of the character.</p>
+     * @param string      $encoding   [optional] <p>Default is UTF-8</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The character at $index.</p>
+     */
+    public static function char_at(string $str, int $index, string $encoding = 'UTF-8'): string
+    {
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str, $index, 1);
+        }
+
+        return (string) self::substr($str, $index, 1, $encoding);
+    }
+
+    /**
+     * Returns an array consisting of the characters in the string.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  <p>An array of chars.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-list<string> : list<string>)
+     */
+    public static function chars(string $str): array
+    {
+        return self::str_split($str);
+    }
+
+    /**
+     * This method will auto-detect your server environment for UTF-8 support.
+     *
+     * @return true|null
+     *
+     * @internal <p>You don't need to run it manually, it will be triggered if it's needed.</p>
+     */
+    public static function checkForSupport()
+    {
+        if (!isset(self::$SUPPORT['already_checked_via_portable_utf8'])) {
+            self::$SUPPORT['already_checked_via_portable_utf8'] = true;
+
+            // http://php.net/manual/en/book.mbstring.php
+            self::$SUPPORT['mbstring'] = self::mbstring_loaded();
+
+            self::$SUPPORT['mbstring_func_overload'] = self::mbstring_overloaded();
+            if (self::$SUPPORT['mbstring'] === true) {
+                \mb_internal_encoding('UTF-8');
+                \mb_regex_encoding('UTF-8');
+                self::$SUPPORT['mbstring_internal_encoding'] = 'UTF-8';
+            }
+
+            // http://php.net/manual/en/book.iconv.php
+            self::$SUPPORT['iconv'] = self::iconv_loaded();
+
+            // http://php.net/manual/en/book.intl.php
+            self::$SUPPORT['intl'] = self::intl_loaded();
+
+            // http://php.net/manual/en/class.intlchar.php
+            self::$SUPPORT['intlChar'] = self::intlChar_loaded();
+
+            // http://php.net/manual/en/book.ctype.php
+            self::$SUPPORT['ctype'] = self::ctype_loaded();
+
+            // http://php.net/manual/en/class.finfo.php
+            self::$SUPPORT['finfo'] = self::finfo_loaded();
+
+            // http://php.net/manual/en/book.json.php
+            self::$SUPPORT['json'] = self::json_loaded();
+
+            // http://php.net/manual/en/book.pcre.php
+            self::$SUPPORT['pcre_utf8'] = self::pcre_utf8_support();
+
+            self::$SUPPORT['symfony_polyfill_used'] = self::symfony_polyfill_used();
+            if (self::$SUPPORT['symfony_polyfill_used'] === true) {
+                \mb_internal_encoding('UTF-8');
+                self::$SUPPORT['mbstring_internal_encoding'] = 'UTF-8';
+            }
+
+            return true;
+        }
+
+        return null;
+    }
+
+    /**
+     * Generates a UTF-8 encoded character from the given code point.
+     *
+     * INFO: opposite to UTF8::ord()
+     *
+     * EXAMPLE: <code>UTF8::chr(0x2603); // '☃'</code>
+     *
+     * @param int    $code_point <p>The code point for which to generate a character.</p>
+     * @param string $encoding   [optional] <p>Default is UTF-8</p>
+     *
+     * @psalm-pure
+     *
+     * @return string|null
+     *                     <p>Multi-byte character, returns null on failure or empty input.</p>
+     */
+    public static function chr($code_point, string $encoding = 'UTF-8')
+    {
+        // init
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<string,string>
+         */
+        static $CHAR_CACHE = [];
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            $encoding !== 'ISO-8859-1'
+            &&
+            $encoding !== 'WINDOWS-1252'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::chr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        if (
+            !\is_int($code_point) /* @phpstan-ignore-line | hack for bad inputs */
+            ||
+            $code_point <= 0
+        ) {
+            return null;
+        }
+
+        $cache_key = $code_point . '_' . $encoding;
+        if (isset($CHAR_CACHE[$cache_key])) {
+            return $CHAR_CACHE[$cache_key];
+        }
+
+        if ($code_point <= 0x80) { // only for "simple"-chars
+
+            if (self::$CHR === null) {
+                self::$CHR = self::getData('chr');
+            }
+
+            /**
+             * @psalm-suppress PossiblyNullArrayAccess
+             */
+            $chr = self::$CHR[$code_point];
+
+            if ($encoding !== 'UTF-8') {
+                $chr = self::encode($encoding, $chr);
+            }
+
+            return $CHAR_CACHE[$cache_key] = $chr;
+        }
+
+        //
+        // fallback via "IntlChar"
+        //
+
+        if (self::$SUPPORT['intlChar'] === true) {
+            $chr = \IntlChar::chr($code_point);
+
+            if ($encoding !== 'UTF-8') {
+                $chr = self::encode($encoding, $chr);
+            }
+
+            return $CHAR_CACHE[$cache_key] = $chr;
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        if (self::$CHR === null) {
+            self::$CHR = self::getData('chr');
+        }
+
+        $code_point = (int) $code_point;
+        if ($code_point <= 0x7FF) {
+            /**
+             * @psalm-suppress PossiblyNullArrayAccess
+             */
+            $chr = self::$CHR[($code_point >> 6) + 0xC0] .
+                   self::$CHR[($code_point & 0x3F) + 0x80];
+        } elseif ($code_point <= 0xFFFF) {
+            /**
+             * @psalm-suppress PossiblyNullArrayAccess
+             */
+            $chr = self::$CHR[($code_point >> 12) + 0xE0] .
+                   self::$CHR[(($code_point >> 6) & 0x3F) + 0x80] .
+                   self::$CHR[($code_point & 0x3F) + 0x80];
+        } else {
+            /**
+             * @psalm-suppress PossiblyNullArrayAccess
+             */
+            $chr = self::$CHR[($code_point >> 18) + 0xF0] .
+                   self::$CHR[(($code_point >> 12) & 0x3F) + 0x80] .
+                   self::$CHR[(($code_point >> 6) & 0x3F) + 0x80] .
+                   self::$CHR[($code_point & 0x3F) + 0x80];
+        }
+
+        if ($encoding !== 'UTF-8') {
+            $chr = self::encode($encoding, $chr);
+        }
+
+        return $CHAR_CACHE[$cache_key] = $chr;
+    }
+
+    /**
+     * Applies callback to all characters of a string.
+     *
+     * EXAMPLE: <code>UTF8::chr_map([UTF8::class, 'strtolower'], 'Κόσμε'); // ['κ','ό', 'σ', 'μ', 'ε']</code>
+     *
+     * @param callable(string): string $callback <p>The callback function.</p>
+     * @param string   $str      <p>UTF-8 string to run callback on.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  <p>The outcome of the callback, as array.</p>
+     */
+    public static function chr_map($callback, string $str): array
+    {
+        return \array_map(
+            $callback,
+            self::str_split($str)
+        );
+    }
+
+    /**
+     * Generates an array of byte length of each character of a Unicode string.
+     *
+     * 1 byte => U+0000  - U+007F
+     * 2 byte => U+0080  - U+07FF
+     * 3 byte => U+0800  - U+FFFF
+     * 4 byte => U+10000 - U+10FFFF
+     *
+     * EXAMPLE: <code>UTF8::chr_size_list('中文空白-test'); // [3, 3, 3, 3, 1, 1, 1, 1, 1]</code>
+     *
+     * @param string $str <p>The original unicode string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int[]
+     *               <p>An array of byte lengths of each character.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-list<1|2|3|4> : list<1|2|3|4>)
+     */
+    public static function chr_size_list(string $str): array
+    {
+        if ($str === '') {
+            return [];
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            /* @phpstan-ignore-next-line | str_split only give one char, so that we only got int<1,4> */
+            return \array_map(
+                static function (string $data): int {
+                    // "mb_" is available if overload is used, so use it ...
+                    return \mb_strlen($data, 'CP850'); // 8-BIT
+                },
+                self::str_split($str)
+            );
+        }
+
+        /* @phpstan-ignore-next-line | str_split only give one char, so that we only got int<1,4> */
+        return \array_map('\strlen', self::str_split($str));
+    }
+
+    /**
+     * Get a decimal code representation of a specific character.
+     *
+     * INFO: opposite to UTF8::decimal_to_chr()
+     *
+     * EXAMPLE: <code>UTF8::chr_to_decimal('§'); // 0xa7</code>
+     *
+     * @param string $char <p>The input character.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     */
+    public static function chr_to_decimal(string $char): int
+    {
+        if (self::$SUPPORT['iconv'] === true) {
+            $chr_tmp = \iconv('UTF-8', 'UCS-4LE', $char);
+            if ($chr_tmp !== false) {
+                /** @phpstan-ignore-next-line - "unpack": only false if the format string contains errors */
+                return \unpack('V', $chr_tmp)[1];
+            }
+        }
+
+        $code = self::ord($char[0]);
+        $bytes = 1;
+
+        if (!($code & 0x80)) {
+            // 0xxxxxxx
+            return $code;
+        }
+
+        if (($code & 0xe0) === 0xc0) {
+            // 110xxxxx
+            $bytes = 2;
+            $code &= ~0xc0;
+        } elseif (($code & 0xf0) === 0xe0) {
+            // 1110xxxx
+            $bytes = 3;
+            $code &= ~0xe0;
+        } elseif (($code & 0xf8) === 0xf0) {
+            // 11110xxx
+            $bytes = 4;
+            $code &= ~0xf0;
+        }
+
+        for ($i = 2; $i <= $bytes; ++$i) {
+            // 10xxxxxx
+            $code = ($code << 6) + (self::ord($char[$i - 1]) & ~0x80);
+        }
+
+        return $code;
+    }
+
+    /**
+     * Get hexadecimal code point (U+xxxx) of a UTF-8 encoded character.
+     *
+     * EXAMPLE: <code>UTF8::chr_to_hex('§'); // U+00a7</code>
+     *
+     * @param int|string $char   <p>The input character</p>
+     * @param string     $prefix [optional]
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The code point encoded as U+xxxx.</p>
+     */
+    public static function chr_to_hex($char, string $prefix = 'U+'): string
+    {
+        if ($char === '') {
+            return '';
+        }
+
+        if ($char === '&#0;') {
+            $char = '';
+        }
+
+        return self::int_to_hex(self::ord((string) $char), $prefix);
+    }
+
+    /**
+     * Splits a string into smaller chunks and multiple lines, using the specified line ending character.
+     *
+     * EXAMPLE: <code>UTF8::chunk_split('ABC-ÖÄÜ-中文空白-κόσμε', 3); // "ABC\r\n-ÖÄ\r\nÜ-中\r\n文空白\r\n-κό\r\nσμε"</code>
+     *
+     * @param string      $str          <p>The original string to be split.</p>
+     * @param int<1, max> $chunk_length [optional] <p>The maximum character length of a chunk.</p>
+     * @param string      $end          [optional] <p>The character(s) to be inserted at the end of each chunk.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The chunked string.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function chunk_split(string $str, int $chunk_length = 76, string $end = "\r\n"): string
+    {
+        return \implode($end, self::str_split($str, $chunk_length));
+    }
+
+    /**
+     * Accepts a string and removes all non-UTF-8 characters from it + extras if needed.
+     *
+     * EXAMPLE: <code>UTF8::clean("\xEF\xBB\xBF„Abcdef\xc2\xa0\x20…” — 😃 - DÃ¼sseldorf", true, true); // '„Abcdef  …” — 😃 - DÃ¼sseldorf'</code>
+     *
+     * @param string $str                                     <p>The string to be sanitized.</p>
+     * @param bool   $remove_bom                              [optional] <p>Set to true, if you need to remove
+     *                                                        UTF-BOM.</p>
+     * @param bool   $normalize_whitespace                    [optional] <p>Set to true, if you need to normalize the
+     *                                                        whitespace.</p>
+     * @param bool   $normalize_msword                        [optional] <p>Set to true, if you need to normalize MS
+     *                                                        Word chars e.g.: "…"
+     *                                                        => "..."</p>
+     * @param bool   $keep_non_breaking_space                 [optional] <p>Set to true, to keep non-breaking-spaces,
+     *                                                        in
+     *                                                        combination with
+     *                                                        $normalize_whitespace</p>
+     * @param bool   $replace_diamond_question_mark           [optional] <p>Set to true, if you need to remove diamond
+     *                                                        question mark e.g.: "�"</p>
+     * @param bool   $remove_invisible_characters             [optional] <p>Set to false, if you not want to remove
+     *                                                        invisible characters e.g.: "\0"</p>
+     * @param bool   $remove_invisible_characters_url_encoded [optional] <p>Set to true, if you not want to remove
+     *                                                        invisible url encoded characters e.g.: "%0B"<br> WARNING:
+     *                                                        maybe contains false-positives e.g. aa%0Baa -> aaaa.
+     *                                                        </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>An clean UTF-8 encoded string.</p>
+     */
+    public static function clean(
+        string $str,
+        bool $remove_bom = false,
+        bool $normalize_whitespace = false,
+        bool $normalize_msword = false,
+        bool $keep_non_breaking_space = false,
+        bool $replace_diamond_question_mark = false,
+        bool $remove_invisible_characters = true,
+        bool $remove_invisible_characters_url_encoded = false
+    ): string {
+        // http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string
+        // caused connection reset problem on larger strings
+
+        $regex = '/
+          (
+            (?: [\x00-\x7F]               # single-byte sequences   0xxxxxxx
+            |   [\xC0-\xDF][\x80-\xBF]    # double-byte sequences   110xxxxx 10xxxxxx
+            |   [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences   1110xxxx 10xxxxxx * 2
+            |   [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
+            ){1,100}                      # ...one or more times
+          )
+        | ( [\x80-\xBF] )                 # invalid byte in range 10000000 - 10111111
+        | ( [\xC0-\xFF] )                 # invalid byte in range 11000000 - 11111111
+        /x';
+        $str = (string) \preg_replace($regex, '$1', $str);
+
+        if ($replace_diamond_question_mark) {
+            $str = self::replace_diamond_question_mark($str);
+        }
+
+        if ($remove_invisible_characters) {
+            $str = self::remove_invisible_characters($str, $remove_invisible_characters_url_encoded);
+        }
+
+        if ($normalize_whitespace) {
+            $str = self::normalize_whitespace($str, $keep_non_breaking_space);
+        }
+
+        if ($normalize_msword) {
+            $str = self::normalize_msword($str);
+        }
+
+        if ($remove_bom) {
+            $str = self::remove_bom($str);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Clean-up a string and show only printable UTF-8 chars at the end  + fix UTF-8 encoding.
+     *
+     * EXAMPLE: <code>UTF8::cleanup("\xEF\xBB\xBF„Abcdef\xc2\xa0\x20…” — 😃 - DÃ¼sseldorf", true, true); // '„Abcdef  …” — 😃 - Düsseldorf'</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function cleanup($str): string
+    {
+        // init
+        $str = (string) $str;
+
+        if ($str === '') {
+            return '';
+        }
+
+        // fixed ISO <-> UTF-8 Errors
+        $str = self::fix_simple_utf8($str);
+
+        // remove all none UTF-8 symbols
+        // && remove diamond question mark (�)
+        // && remove remove invisible characters (e.g. "\0")
+        // && remove BOM
+        // && normalize whitespace chars (but keep non-breaking-spaces)
+        return self::clean(
+            $str,
+            true,
+            true,
+            false,
+            true,
+            true
+        );
+    }
+
+    /**
+     * Accepts a string or an array of chars and returns an array of Unicode code points.
+     *
+     * INFO: opposite to UTF8::string()
+     *
+     * EXAMPLE: <code>
+     * UTF8::codepoints('κöñ'); // array(954, 246, 241)
+     * // ... OR ...
+     * UTF8::codepoints('κöñ', true); // array('U+03ba', 'U+00f6', 'U+00f1')
+     * </code>
+     *
+     * @param string|string[] $arg         <p>A UTF-8 encoded string or an array of such chars.</p>
+     * @param bool            $use_u_style <p>If True, will return code points in U+xxxx format,
+     *                                     default, code points will be returned as integers.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int[]|string[]
+     *                        <p>
+     *                        The array of code points:<br>
+     *                        int[] for $u_style === false<br>
+     *                        string[] for $u_style === true<br>
+     *                        </p>
+     *
+     * @template T as string|string[]
+     * @phpstan-param T $arg
+     * @phpstan-return (T is non-empty-string ? ($use_u_style is true ? non-empty-list<string> : non-empty-list<int>) : ($use_u_style is true ? list<string> : list<int>))
+     */
+    public static function codepoints($arg, bool $use_u_style = false): array
+    {
+        if (\is_string($arg)) {
+            $arg = self::str_split($arg);
+        }
+
+        /**
+         * @psalm-suppress DocblockTypeContradiction
+         * @phpstan-ignore-next-line hack for bad inputs
+         */
+        if (!\is_array($arg)) {
+            return [];
+        }
+
+        if ($arg === []) {
+            return [];
+        }
+
+        $arg = \array_map(
+            [
+                self::class,
+                'ord',
+            ],
+            $arg
+        );
+
+        if ($use_u_style) {
+            $arg = \array_map(
+                [
+                    self::class,
+                    'int_to_hex',
+                ],
+                $arg
+            );
+        }
+
+        /* @phpstan-ignore-next-line | FP? */
+        return $arg;
+    }
+
+    /**
+     * Trims the string and replaces consecutive whitespace characters with a
+     * single space. This includes tabs and newline characters, as well as
+     * multibyte whitespace such as the thin space and ideographic space.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with trimmed $str and condensed whitespace.</p>
+     */
+    public static function collapse_whitespace(string $str): string
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \trim((string) \mb_ereg_replace('[[:space:]]+', ' ', $str));
+        }
+
+        return \trim(self::regex_replace($str, '[[:space:]]+', ' '));
+    }
+
+    /**
+     * Returns count of characters used in a string.
+     *
+     * EXAMPLE: <code>UTF8::count_chars('κaκbκc'); // array('κ' => 3, 'a' => 1, 'b' => 1, 'c' => 1)</code>
+     *
+     * @param string $str                     <p>The input string.</p>
+     * @param bool   $clean_utf8              [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param bool   $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
+     *
+     * @psalm-pure
+     *
+     * @return int[]
+     *               <p>An associative array of Character as keys and
+     *               their count as values.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-array<string, int> : array<string, int>)
+     */
+    public static function count_chars(
+        string $str,
+        bool $clean_utf8 = false,
+        bool $try_to_use_mb_functions = true
+    ): array {
+        return \array_count_values(
+            self::str_split(
+                $str,
+                1,
+                $clean_utf8,
+                $try_to_use_mb_functions
+            )
+        );
+    }
+
+    /**
+     * Create a valid CSS identifier for e.g. "class"- or "id"-attributes.
+     *
+     * EXAMPLE: <code>UTF8::css_identifier('123foo/bar!!!'); // _23foo-bar</code>
+     *
+     * copy&past from https://github.com/drupal/core/blob/8.8.x/lib/Drupal/Component/Utility/Html.php#L95
+     *
+     * @param string   $str        <p>INFO: if no identifier is given e.g. " " or "", we will create a unique string automatically</p>
+     * @param string[] $filter
+     * @param bool     $strip_tags
+     * @param bool     $strtolower
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @phpstan-param array<string,string> $filter
+     */
+    public static function css_identifier(
+        string $str = '',
+        array $filter = [
+            ' ' => '-',
+            '/' => '-',
+            '[' => '',
+            ']' => '',
+        ],
+        bool $strip_tags = false,
+        bool $strtolower = true
+    ): string {
+        // We could also use strtr() here but its much slower than str_replace(). In
+        // order to keep '__' to stay '__' we first replace it with a different
+        // placeholder after checking that it is not defined as a filter.
+        $double_underscore_replacements = 0;
+
+        $str = \trim($str);
+        if ($str) {
+            $str = self::clean($str, true);
+        }
+
+        if ($strip_tags) {
+            $str = \strip_tags($str);
+        }
+
+        $str = \trim($str);
+        // fallback (1)
+        if (!$str) {
+            $str = \uniqid('auto-generated-css-class', true);
+        }
+
+        if ($strtolower) {
+            $str = \strtolower($str);
+        }
+
+        if (!isset($filter['__'])) {
+            $str = \str_replace('__', '##', $str, $double_underscore_replacements);
+        }
+
+        $str = \str_replace(\array_keys($filter), \array_values($filter), $str);
+        // Replace temporary placeholder '##' with '__' only if the original
+        // $identifier contained '__'.
+        if ($double_underscore_replacements > 0) {
+            $str = \str_replace('##', '__', $str);
+        }
+
+        // Valid characters in a CSS identifier are:
+        // - the hyphen (U+002D)
+        // - a-z (U+0030 - U+0039)
+        // - A-Z (U+0041 - U+005A)
+        // - the underscore (U+005F)
+        // - 0-9 (U+0061 - U+007A)
+        // - ISO 10646 characters U+00A1 and higher
+        // We strip out any character not in the above list.
+        $str = (string) \preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $str);
+        // Identifiers cannot start with a digit, two hyphens, or a hyphen followed by a digit.
+        $str = (string) \preg_replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__'], $str);
+
+        return \trim($str, '-');
+    }
+
+    /**
+     * Remove css media-queries.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function css_stripe_media_queries(string $str): string
+    {
+        return (string) \preg_replace(
+            '#@media\\s+(?:only\\s)?(?:[\\s{(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#isumU',
+            '',
+            $str
+        );
+    }
+
+    /**
+     * Checks whether ctype is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function ctype_loaded(): bool
+    {
+        return \extension_loaded('ctype');
+    }
+
+    /**
+     * Converts an int value into a UTF-8 character.
+     *
+     * INFO: opposite to UTF8::string()
+     *
+     * EXAMPLE: <code>UTF8::decimal_to_chr(931); // 'Σ'</code>
+     *
+     * @param int|string $int
+     *
+     * @phpstan-param int|numeric-string $int
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function decimal_to_chr($int): string
+    {
+        // We cannot use html_entity_decode() here, as it will not return
+        // characters for many values < 160.
+        return \mb_convert_encoding('&#' . $int . ';', 'UTF-8', 'HTML-ENTITIES');
+    }
+
+    /**
+     * Decodes a MIME header field
+     *
+     * @param string $str
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>A decoded MIME field on success,
+     *                      or false if an error occurs during the decoding.</p>
+     */
+    public static function decode_mimeheader($str, string $encoding = 'UTF-8')
+    {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        // always fallback via symfony polyfill
+        return \iconv_mime_decode($str, \ICONV_MIME_DECODE_CONTINUE_ON_ERROR, $encoding);
+    }
+
+    /**
+     * Convert any two-letter country code (ISO 3166-1) to the corresponding Emoji.
+     *
+     * @see https://en.wikipedia.org/wiki/ISO_3166-1
+     *
+     * @param string $country_code_iso_3166_1 <p>e.g. DE</p>
+     *
+     * @return string
+     *                <p>Emoji or empty string on error.</p>
+     */
+    public static function emoji_from_country_code(string $country_code_iso_3166_1): string
+    {
+        if ($country_code_iso_3166_1 === '') {
+            return '';
+        }
+
+        if (self::strlen($country_code_iso_3166_1) !== 2) {
+            return '';
+        }
+
+        $country_code_iso_3166_1 = \strtoupper($country_code_iso_3166_1);
+
+        $flagOffset = 0x1F1E6;
+        $asciiOffset = 0x41;
+
+        return (self::chr((self::ord($country_code_iso_3166_1[0]) - $asciiOffset + $flagOffset)) ?? '') .
+               (self::chr((self::ord($country_code_iso_3166_1[1]) - $asciiOffset + $flagOffset)) ?? '');
+    }
+
+    /**
+     * Decodes a string which was encoded by "UTF8::emoji_encode()".
+     *
+     * INFO: opposite to UTF8::emoji_encode()
+     *
+     * EXAMPLE: <code>
+     * UTF8::emoji_decode('foo CHARACTER_OGRE', false); // 'foo 👹'
+     * //
+     * UTF8::emoji_decode('foo _-_PORTABLE_UTF8_-_308095726_-_627590803_-_8FTU_ELBATROP_-_', true); // 'foo 👹'
+     * </code>
+     *
+     * @param string $str                            <p>The input string.</p>
+     * @param bool   $use_reversible_string_mappings [optional] <p>
+     *                                               When <b>TRUE</b>, we se a reversible string mapping
+     *                                               between "emoji_encode" and "emoji_decode".</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function emoji_decode(
+        string $str,
+        bool $use_reversible_string_mappings = false
+    ): string {
+        if (self::$EMOJI_KEYS_CACHE === null) {
+            /** @phpstan-ignore-next-line - we need to load the data first */
+            self::initEmojiData();
+        }
+
+        if ($use_reversible_string_mappings) {
+            return (string) \str_replace(
+                (array) self::$EMOJI_KEYS_REVERSIBLE_CACHE,
+                (array) self::$EMOJI_VALUES_CACHE,
+                $str
+            );
+        }
+
+        return (string) \str_replace(
+            (array) self::$EMOJI_KEYS_CACHE,
+            (array) self::$EMOJI_VALUES_CACHE,
+            $str
+        );
+    }
+
+    /**
+     * Encode a string with emoji chars into a non-emoji string.
+     *
+     * INFO: opposite to UTF8::emoji_decode()
+     *
+     * EXAMPLE: <code>
+     * UTF8::emoji_encode('foo 👹', false)); // 'foo CHARACTER_OGRE'
+     * //
+     * UTF8::emoji_encode('foo 👹', true)); // 'foo _-_PORTABLE_UTF8_-_308095726_-_627590803_-_8FTU_ELBATROP_-_'
+     * </code>
+     *
+     * @param string $str                            <p>The input string</p>
+     * @param bool   $use_reversible_string_mappings [optional] <p>
+     *                                               when <b>TRUE</b>, we use a reversible string mapping
+     *                                               between "emoji_encode" and "emoji_decode"</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function emoji_encode(
+        string $str,
+        bool $use_reversible_string_mappings = false
+    ): string {
+        if (self::$EMOJI_KEYS_CACHE === null) {
+            /** @phpstan-ignore-next-line - we need to load the data first */
+            self::initEmojiData();
+        }
+
+        if ($use_reversible_string_mappings) {
+            return (string) \str_replace(
+                (array) self::$EMOJI_VALUES_CACHE,
+                (array) self::$EMOJI_KEYS_REVERSIBLE_CACHE,
+                $str
+            );
+        }
+
+        return (string) \str_replace(
+            (array) self::$EMOJI_VALUES_CACHE,
+            (array) self::$EMOJI_KEYS_CACHE,
+            $str
+        );
+    }
+
+    /**
+     * Encode a string with a new charset-encoding.
+     *
+     * INFO:  This function will also try to fix broken / double encoding,
+     *        so you can call this function also on a UTF-8 string and you don't mess up the string.
+     *
+     * EXAMPLE: <code>
+     * UTF8::encode('ISO-8859-1', '-ABC-中文空白-'); // '-ABC-????-'
+     * //
+     * UTF8::encode('UTF-8', '-ABC-中文空白-'); // '-ABC-中文空白-'
+     * //
+     * UTF8::encode('HTML', '-ABC-中文空白-'); // '-ABC-&#20013;&#25991;&#31354;&#30333;-'
+     * //
+     * UTF8::encode('BASE64', '-ABC-中文空白-'); // 'LUFCQy3kuK3mlofnqbrnmb0t'
+     * </code>
+     *
+     * @param string $to_encoding                   <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.</p>
+     * @param string $str                           <p>The input string</p>
+     * @param bool   $auto_detect_the_from_encoding [optional] <p>Force the new encoding (we try to fix broken / double
+     *                                              encoding for UTF-8)<br> otherwise we auto-detect the current
+     *                                              string-encoding</p>
+     * @param string $from_encoding                 [optional] <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.<br>
+     *                                              A empty string will trigger the autodetect anyway.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @psalm-suppress InvalidReturnStatement
+     */
+    public static function encode(
+        string $to_encoding,
+        string $str,
+        bool $auto_detect_the_from_encoding = true,
+        string $from_encoding = ''
+    ): string {
+        if ($str === '' || $to_encoding === '') {
+            return $str;
+        }
+
+        if ($to_encoding !== 'UTF-8' && $to_encoding !== 'CP850') {
+            $to_encoding = self::normalize_encoding($to_encoding, 'UTF-8');
+        }
+
+        if ($from_encoding && $from_encoding !== 'UTF-8' && $from_encoding !== 'CP850') {
+            $from_encoding = self::normalize_encoding($from_encoding);
+        }
+
+        if (
+            $to_encoding
+            &&
+            $from_encoding
+            &&
+            $from_encoding === $to_encoding
+        ) {
+            return $str;
+        }
+
+        if ($from_encoding === 'JSON') {
+            $str = self::json_decode($str);
+            $from_encoding = '';
+        }
+
+        if ($from_encoding === 'BASE64') {
+            $str = \base64_decode($str, true);
+            $from_encoding = '';
+        }
+
+        if ($from_encoding === 'HTML-ENTITIES') {
+            /* @phpstan-ignore-next-line | $str has manybe changed */
+            $str = self::html_entity_decode($str, \ENT_COMPAT);
+            $from_encoding = '';
+        }
+
+        if ($to_encoding === 'JSON') {
+            $return = self::json_encode($str);
+            if ($return === false) {
+                throw new \InvalidArgumentException('The input string [' . $str . '] can not be used for json_encode().');
+            }
+
+            return $return;
+        }
+
+        if ($to_encoding === 'BASE64') {
+            return \base64_encode($str);
+        }
+
+        if ($to_encoding === 'HTML-ENTITIES') {
+            /* @phpstan-ignore-next-line | $str has manybe changed */
+            return self::html_encode($str, true);
+        }
+
+        if (
+            $auto_detect_the_from_encoding
+            ||
+            !$from_encoding
+        ) {
+            $from_encoding_auto_detected = self::str_detect_encoding($str);
+        } else {
+            $from_encoding_auto_detected = false;
+        }
+
+        // DEBUG
+        //var_dump($to_encoding, $from_encoding, $from_encoding_auto_detected, $str, "\n\n");
+
+        if ($from_encoding_auto_detected !== false) {
+            $from_encoding = $from_encoding_auto_detected;
+        } elseif ($auto_detect_the_from_encoding) {
+            // fallback for the "autodetect"-mode
+            /* @phpstan-ignore-next-line | $str has manybe changed */
+            return self::to_utf8($str);
+        }
+
+        if (
+            !$from_encoding
+            ||
+            $from_encoding === $to_encoding
+        ) {
+            return $str;
+        }
+
+        if (
+            $to_encoding === 'UTF-8'
+            &&
+            (
+                $from_encoding === 'WINDOWS-1252'
+                ||
+                $from_encoding === 'ISO-8859-1'
+            )
+        ) {
+            /* @phpstan-ignore-next-line | $str has manybe changed */
+            return self::to_utf8($str);
+        }
+
+        if (
+            $to_encoding === 'ISO-8859-1'
+            &&
+            (
+                $from_encoding === 'WINDOWS-1252'
+                ||
+                $from_encoding === 'UTF-8'
+            )
+        ) {
+            /* @phpstan-ignore-next-line | $str has manybe changed */
+            return self::to_iso8859($str);
+        }
+
+        if (
+            $to_encoding !== 'UTF-8'
+            &&
+            $to_encoding !== 'ISO-8859-1'
+            &&
+            $to_encoding !== 'WINDOWS-1252'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::encode() without mbstring cannot handle "' . $to_encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            $str_encoded = \mb_convert_encoding(
+                $str,
+                $to_encoding,
+                $from_encoding
+            );
+
+            if ($str_encoded) {
+                \assert(\is_string($str_encoded));
+
+                return $str_encoded;
+            }
+        }
+
+        /** @noinspection PhpUsageOfSilenceOperatorInspection - Detected an incomplete multibyte character in input string */
+        $return = @\iconv($from_encoding, $to_encoding, $str);
+        if ($return !== false) {
+            return $return;
+        }
+
+        return $str;
+    }
+
+    /**
+     * @param string      $str
+     * @param string      $from_charset      [optional] <p>Set the input charset.</p>
+     * @param string      $to_charset        [optional] <p>Set the output charset.</p>
+     * @param string      $transfer_encoding [optional] <p>Set the transfer encoding.</p>
+     * @param string      $linefeed          [optional] <p>Set the used linefeed.</p>
+     * @param int<1, max> $indent            [optional] <p>Set the max length indent.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>An encoded MIME field on success,
+     *                      or false if an error occurs during the encoding.</p>
+     */
+    public static function encode_mimeheader(
+        string $str,
+        string $from_charset = 'UTF-8',
+        string $to_charset = 'UTF-8',
+        string $transfer_encoding = 'Q',
+        string $linefeed = "\r\n",
+        int $indent = 76
+    ) {
+        if ($from_charset !== 'UTF-8' && $from_charset !== 'CP850') {
+            $from_charset = self::normalize_encoding($from_charset, 'UTF-8');
+        }
+
+        if ($to_charset !== 'UTF-8' && $to_charset !== 'CP850') {
+            $to_charset = self::normalize_encoding($to_charset, 'UTF-8');
+        }
+
+        // always fallback via symfony polyfill
+        return \iconv_mime_encode(
+            '',
+            $str,
+            [
+                'scheme'           => $transfer_encoding,
+                'line-length'      => $indent,
+                'input-charset'    => $from_charset,
+                'output-charset'   => $to_charset,
+                'line-break-chars' => $linefeed,
+            ]
+        );
+    }
+
+    /**
+     * Create an extract from a sentence, so if the search-string was found, it tries to center in the output.
+     *
+     * @param string   $str                       <p>The input string.</p>
+     * @param string   $search                    <p>The searched string.</p>
+     * @param int|null $length                    [optional] <p>Default: null === text->length / 2</p>
+     * @param string   $replacer_for_skipped_text [optional] <p>Default: …</p>
+     * @param string   $encoding                  [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function extract_text(
+        string $str,
+        string $search = '',
+        int $length = null,
+        string $replacer_for_skipped_text = '…',
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        $trim_chars = "\t\r\n -_()!~?=+/*\\,.:;\"'[]{}`&";
+
+        if ($length === null) {
+            $length = (int) \round((int) self::strlen($str, $encoding) / 2);
+        }
+
+        if ($search === '') {
+            if ($encoding === 'UTF-8') {
+                if ($length > 0) {
+                    $string_length = (int) \mb_strlen($str);
+                    $end = ($length - 1) > $string_length ? $string_length : ($length - 1);
+                } else {
+                    $end = 0;
+                }
+
+                $pos = (int) \min(
+                    \mb_strpos($str, ' ', $end),
+                    \mb_strpos($str, '.', $end)
+                );
+            } else {
+                if ($length > 0) {
+                    $string_length = (int) self::strlen($str, $encoding);
+                    $end = ($length - 1) > $string_length ? $string_length : ($length - 1);
+                } else {
+                    $end = 0;
+                }
+
+                $pos = (int) \min(
+                    self::strpos($str, ' ', $end, $encoding),
+                    self::strpos($str, '.', $end, $encoding)
+                );
+            }
+
+            if ($pos) {
+                if ($encoding === 'UTF-8') {
+                    $str_sub = \mb_substr($str, 0, $pos);
+                } else {
+                    $str_sub = self::substr($str, 0, $pos, $encoding);
+                }
+
+                if ($str_sub === false) {
+                    return '';
+                }
+
+                return \rtrim($str_sub, $trim_chars) . $replacer_for_skipped_text;
+            }
+
+            return $str;
+        }
+
+        if ($encoding === 'UTF-8') {
+            $word_position = (int) \mb_stripos($str, $search);
+            $half_side = (int) ($word_position - $length / 2 + (int) \mb_strlen($search) / 2);
+        } else {
+            $word_position = (int) self::stripos($str, $search, 0, $encoding);
+            $half_side = (int) ($word_position - $length / 2 + (int) self::strlen($search, $encoding) / 2);
+        }
+
+        $pos_start = 0;
+        if ($half_side > 0) {
+            if ($encoding === 'UTF-8') {
+                $half_text = \mb_substr($str, 0, $half_side);
+            } else {
+                $half_text = self::substr($str, 0, $half_side, $encoding);
+            }
+            if ($half_text !== false) {
+                if ($encoding === 'UTF-8') {
+                    $pos_start = (int) \max(
+                        \mb_strrpos($half_text, ' '),
+                        \mb_strrpos($half_text, '.')
+                    );
+                } else {
+                    $pos_start = (int) \max(
+                        self::strrpos($half_text, ' ', 0, $encoding),
+                        self::strrpos($half_text, '.', 0, $encoding)
+                    );
+                }
+            }
+        }
+
+        if ($word_position && $half_side > 0) {
+            $offset = $pos_start + $length - 1;
+            $real_length = (int) self::strlen($str, $encoding);
+
+            if ($offset > $real_length) {
+                $offset = $real_length;
+            }
+
+            if ($encoding === 'UTF-8') {
+                $pos_end = (int) \min(
+                    \mb_strpos($str, ' ', $offset),
+                    \mb_strpos($str, '.', $offset)
+                ) - $pos_start;
+            } else {
+                $pos_end = (int) \min(
+                    self::strpos($str, ' ', $offset, $encoding),
+                    self::strpos($str, '.', $offset, $encoding)
+                ) - $pos_start;
+            }
+
+            if (!$pos_end || $pos_end <= 0) {
+                if ($encoding === 'UTF-8') {
+                    $str_sub = \mb_substr($str, $pos_start, (int) \mb_strlen($str));
+                } else {
+                    $str_sub = self::substr($str, $pos_start, (int) self::strlen($str, $encoding), $encoding);
+                }
+                if ($str_sub !== false) {
+                    $extract = $replacer_for_skipped_text . \ltrim($str_sub, $trim_chars);
+                } else {
+                    $extract = '';
+                }
+            } else {
+                if ($encoding === 'UTF-8') {
+                    $str_sub = \mb_substr($str, $pos_start, $pos_end);
+                } else {
+                    $str_sub = self::substr($str, $pos_start, $pos_end, $encoding);
+                }
+                if ($str_sub !== false) {
+                    $extract = $replacer_for_skipped_text . \trim($str_sub, $trim_chars) . $replacer_for_skipped_text;
+                } else {
+                    $extract = '';
+                }
+            }
+        } else {
+            $offset = $length - 1;
+            $true_length = (int) self::strlen($str, $encoding);
+
+            if ($offset > $true_length) {
+                $offset = $true_length;
+            }
+
+            if ($encoding === 'UTF-8') {
+                $pos_end = (int) \min(
+                    \mb_strpos($str, ' ', $offset),
+                    \mb_strpos($str, '.', $offset)
+                );
+            } else {
+                $pos_end = (int) \min(
+                    self::strpos($str, ' ', $offset, $encoding),
+                    self::strpos($str, '.', $offset, $encoding)
+                );
+            }
+
+            if ($pos_end) {
+                if ($encoding === 'UTF-8') {
+                    $str_sub = \mb_substr($str, 0, $pos_end);
+                } else {
+                    $str_sub = self::substr($str, 0, $pos_end, $encoding);
+                }
+                if ($str_sub !== false) {
+                    $extract = \rtrim($str_sub, $trim_chars) . $replacer_for_skipped_text;
+                } else {
+                    $extract = '';
+                }
+            } else {
+                $extract = $str;
+            }
+        }
+
+        return $extract;
+    }
+
+    /**
+     * Reads entire file into a string.
+     *
+     * EXAMPLE: <code>UTF8::file_get_contents('utf16le.txt'); // ...</code>
+     *
+     * WARNING: Do not use UTF-8 Option ($convert_to_utf8) for binary files (e.g.: images) !!!
+     *
+     * @see http://php.net/manual/en/function.file-get-contents.php
+     *
+     * @param string        $filename         <p>
+     *                                        Name of the file to read.
+     *                                        </p>
+     * @param bool          $use_include_path [optional] <p>
+     *                                        Prior to PHP 5, this parameter is called
+     *                                        use_include_path and is a bool.
+     *                                        As of PHP 5 the FILE_USE_INCLUDE_PATH can be used
+     *                                        to trigger include path
+     *                                        search.
+     *                                        </p>
+     * @param resource|null $context          [optional] <p>
+     *                                        A valid context resource created with
+     *                                        stream_context_create. If you don't need to use a
+     *                                        custom context, you can skip this parameter by &null;.
+     *                                        </p>
+     * @param int|null      $offset           [optional] <p>
+     *                                        The offset where the reading starts.
+     *                                        </p>
+     * @param int<0, max>|null $max_length       [optional] <p>
+     *                                        Maximum length of data read. The default is to read until end
+     *                                        of file is reached.
+     *                                        </p>
+     * @param int           $timeout          <p>The time in seconds for the timeout.</p>
+     * @param bool          $convert_to_utf8  <strong>WARNING!!!</strong> <p>Maybe you can't use this option for
+     *                                        some files, because they used non default utf-8 chars. Binary files
+     *                                        like images or pdf will not be converted.</p>
+     * @param string        $from_encoding    [optional] <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.<br>
+     *                                        A empty string will trigger the autodetect anyway.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The function returns the read data as string or <b>false</b> on failure.</p>
+     */
+    public static function file_get_contents(
+        string $filename,
+        bool $use_include_path = false,
+        $context = null,
+        int $offset = null,
+        int $max_length = null,
+        int $timeout = 10,
+        bool $convert_to_utf8 = true,
+        string $from_encoding = ''
+    ) {
+        // init
+        /** @noinspection CallableParameterUseCaseInTypeContextInspection - is ok here */
+        $filename = Bootup::filter_sanitize_string_polyfill($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        if ($timeout && $context === null) {
+            $context = \stream_context_create(
+                [
+                    'http' => [
+                        'timeout' => $timeout,
+                    ],
+                ]
+            );
+        }
+
+        if ($offset === null) {
+            $offset = 0;
+        }
+
+        if (\is_int($max_length)) {
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            if ($max_length < 0) {
+                $max_length = 0;
+            }
+
+            $data = \file_get_contents($filename, $use_include_path, $context, $offset, $max_length);
+        } else {
+            $data = \file_get_contents($filename, $use_include_path, $context, $offset);
+        }
+
+        // return false on error
+        if ($data === false) {
+            return false;
+        }
+
+        if (
+            $convert_to_utf8
+            &&
+            (
+                !self::is_binary($data, true)
+                ||
+                self::is_utf16($data, false) !== false
+                ||
+                self::is_utf32($data, false) !== false
+            )
+        ) {
+            $data = self::encode('UTF-8', $data, false, $from_encoding);
+            $data = self::cleanup($data);
+        }
+
+        return $data;
+    }
+
+    /**
+     * Checks if a file starts with BOM (Byte Order Mark) character.
+     *
+     * EXAMPLE: <code>UTF8::file_has_bom('utf8_with_bom.txt'); // true</code>
+     *
+     * @param string $file_path <p>Path to a valid file.</p>
+     *
+     * @throws \RuntimeException if file_get_contents() returned false
+     *
+     * @return bool
+     *              <p><strong>true</strong> if the file has BOM at the start, <strong>false</strong> otherwise</p>
+     *
+     * @psalm-pure
+     */
+    public static function file_has_bom(string $file_path): bool
+    {
+        $file_content = \file_get_contents($file_path);
+        if ($file_content === false) {
+            throw new \RuntimeException('file_get_contents() returned false for:' . $file_path);
+        }
+
+        return self::string_has_bom($file_content);
+    }
+
+    /**
+     * Normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
+     *
+     * EXAMPLE: <code>UTF8::filter(array("\xE9", 'à', 'a')); // array('é', 'à', 'a')</code>
+     *
+     * @param array|object|string $var
+     * @param int                 $normalization_form
+     * @param string              $leading_combining
+     *
+     * @psalm-pure
+     *
+     * @return mixed
+     *
+     * @template TFilter
+     * @phpstan-param TFilter $var
+     * @phpstan-return TFilter
+     */
+    public static function filter(
+        $var,
+        int $normalization_form = \Normalizer::NFC,
+        string $leading_combining = '◌'
+    ) {
+        switch (\gettype($var)) {
+            case 'object':
+            case 'array':
+                /* @phpstan-ignore-next-line | object & array are both iterable */
+                foreach ($var as &$v) {
+                    $v = self::filter($v, $normalization_form, $leading_combining);
+                }
+                unset($v);
+
+                break;
+            case 'string':
+
+                if (\strpos($var, "\r") !== false) {
+                    $var = self::normalize_line_ending($var);
+                }
+
+                if (!ASCII::is_ascii($var)) {
+                    if (\Normalizer::isNormalized($var, $normalization_form)) {
+                        $n = '-';
+                    } else {
+                        $n = \Normalizer::normalize($var, $normalization_form);
+
+                        if ($n && isset($n[0])) {
+                            $var = $n;
+                        } else {
+                            $var = self::encode('UTF-8', $var);
+                        }
+                    }
+
+                    \assert(\is_string($var));
+                    if (
+                        $n
+                        &&
+                        $var[0] >= "\x80"
+                        &&
+                        isset($n[0], $leading_combining[0])
+                        &&
+                        \preg_match('/^\\p{Mn}/u', $var)
+                    ) {
+                        // Prevent leading combining chars
+                        // for NFC-safe concatenations.
+                        $var = $leading_combining . $var;
+                    }
+                }
+
+                break;
+            default:
+                // nothing
+        }
+
+        /** @noinspection PhpSillyAssignmentInspection */
+        /** @phpstan-var TFilter $var */
+        $var = $var;
+
+        return $var;
+    }
+
+    /**
+     * "filter_input()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
+     *
+     * Gets a specific external variable by name and optionally filters it.
+     *
+     * EXAMPLE: <code>
+     * // _GET['foo'] = 'bar';
+     * UTF8::filter_input(INPUT_GET, 'foo', FILTER_UNSAFE_RAW)); // 'bar'
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.filter-input.php
+     *
+     * @param int            $type          <p>
+     *                                      One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
+     *                                      <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
+     *                                      <b>INPUT_ENV</b>.
+     *                                      </p>
+     * @param string         $variable_name <p>
+     *                                      Name of a variable to get.
+     *                                      </p>
+     * @param int            $filter        [optional] <p>
+     *                                      The ID of the filter to apply. The
+     *                                      manual page lists the available filters.
+     *                                      </p>
+     * @param int|int[]|null $options       [optional] <p>
+     *                                      Associative array of options or bitwise disjunction of flags. If filter
+     *                                      accepts options, flags can be provided in "flags" field of array.
+     *                                      </p>
+     *
+     * @psalm-pure
+     *
+     * @return mixed
+     *               <p>
+     *               Value of the requested variable on success, <b>FALSE</b> if the filter fails, or <b>NULL</b> if the
+     *               <i>variable_name</i> variable is not set. If the flag <b>FILTER_NULL_ON_FAILURE</b> is used, it
+     *               returns <b>FALSE</b> if the variable is not set and <b>NULL</b> if the filter fails.
+     *               </p>
+     */
+    public static function filter_input(
+        int $type,
+        string $variable_name,
+        int $filter = \FILTER_DEFAULT,
+        $options = null
+    ) {
+        /**
+         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
+         */
+        if ($options === null || \func_num_args() < 4) {
+            $var = \filter_input($type, $variable_name, $filter);
+        } else {
+            $var = \filter_input($type, $variable_name, $filter, $options);
+        }
+
+        return self::filter($var);
+    }
+
+    /**
+     * "filter_input_array()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
+     *
+     * Gets external variables and optionally filters them.
+     *
+     * EXAMPLE: <code>
+     * // _GET['foo'] = 'bar';
+     * UTF8::filter_input_array(INPUT_GET, array('foo' => 'FILTER_UNSAFE_RAW')); // array('bar')
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.filter-input-array.php
+     *
+     * @param int                       $type       <p>
+     *                                              One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
+     *                                              <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
+     *                                              <b>INPUT_ENV</b>.
+     *                                              </p>
+     * @param array<string, mixed>|null $definition [optional] <p>
+     *                                              An array defining the arguments. A valid key is a string
+     *                                              containing a variable name and a valid value is either a filter type, or an array
+     *                                              optionally specifying the filter, flags and options. If the value is an
+     *                                              array, valid keys are filter which specifies the
+     *                                              filter type,
+     *                                              flags which specifies any flags that apply to the
+     *                                              filter, and options which specifies any options that
+     *                                              apply to the filter. See the example below for a better understanding.
+     *                                              </p>
+     *                                              <p>
+     *                                              This parameter can be also an integer holding a filter constant. Then all values in the
+     *                                              input array are filtered by this filter.
+     *                                              </p>
+     * @param bool                      $add_empty  [optional] <p>
+     *                                              Add missing keys as <b>NULL</b> to the return value.
+     *                                              </p>
+     *
+     * @psalm-pure
+     *
+     * @return array<string, mixed>|false|null
+     *                                         <p>
+     *                                         An array containing the values of the requested variables on success, or <b>FALSE</b> on failure.
+     *                                         An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if the variable is not
+     *                                         set. Or if the flag <b>FILTER_NULL_ON_FAILURE</b> is used, it returns <b>FALSE</b> if the variable
+     *                                         is not set and <b>NULL</b> if the filter fails.
+     *                                         </p>
+     */
+    public static function filter_input_array(
+        int $type,
+        $definition = null,
+        bool $add_empty = true
+    ) {
+        /**
+         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
+         */
+        if ($definition === null || \func_num_args() < 2) {
+            $a = \filter_input_array($type);
+        } else {
+            $a = \filter_input_array($type, $definition, $add_empty);
+        }
+
+        /* @phpstan-ignore-next-line | magic frm self::filter :/ */
+        return self::filter($a);
+    }
+
+    /**
+     * "filter_var()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
+     *
+     * Filters a variable with a specified filter.
+     *
+     * EXAMPLE: <code>UTF8::filter_var('-ABC-中文空白-', FILTER_VALIDATE_URL); // false</code>
+     *
+     * @see http://php.net/manual/en/function.filter-var.php
+     *
+     * @param float|int|string|null $variable <p>
+     *                                        Value to filter.
+     *                                        </p>
+     * @param int                   $filter   [optional] <p>
+     *                                        The ID of the filter to apply. The
+     *                                        manual page lists the available filters.
+     *                                        </p>
+     * @param int|int[]             $options  [optional] <p>
+     *                                        Associative array of options or bitwise disjunction of flags. If filter
+     *                                        accepts options, flags can be provided in "flags" field of array. For
+     *                                        the "callback" filter, callable type should be passed. The
+     *                                        callback must accept one argument, the value to be filtered, and return
+     *                                        the value after filtering/sanitizing it.
+     *                                        </p>
+     *                                        <p>
+     *                                        <code>
+     *                                        // for filters that accept options, use this format
+     *                                        $options = array(
+     *                                        'options' => array(
+     *                                        'default' => 3, // value to return if the filter fails
+     *                                        // other options here
+     *                                        'min_range' => 0
+     *                                        ),
+     *                                        'flags' => FILTER_FLAG_ALLOW_OCTAL,
+     *                                        );
+     *                                        $var = filter_var('0755', FILTER_VALIDATE_INT, $options);
+     *                                        // for filter that only accept flags, you can pass them directly
+     *                                        $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
+     *                                        // for filter that only accept flags, you can also pass as an array
+     *                                        $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN,
+     *                                        array('flags' => FILTER_NULL_ON_FAILURE));
+     *                                        // callback validate filter
+     *                                        function foo($value)
+     *                                        {
+     *                                        // Expected format: Surname, GivenNames
+     *                                        if (strpos($value, ", ") === false) return false;
+     *                                        list($surname, $givennames) = explode(", ", $value, 2);
+     *                                        $empty = (empty($surname) || empty($givennames));
+     *                                        $notstrings = (!is_string($surname) || !is_string($givennames));
+     *                                        if ($empty || $notstrings) {
+     *                                        return false;
+     *                                        } else {
+     *                                        return $value;
+     *                                        }
+     *                                        }
+     *                                        $var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo'));
+     *                                        </code>
+     *                                        </p>
+     *
+     * @psalm-pure
+     *
+     * @return mixed
+     *               <p>The filtered data, or <b>FALSE</b> if the filter fails.</p>
+     */
+    public static function filter_var(
+        $variable,
+        int $filter = \FILTER_DEFAULT,
+        $options = 0
+    ) {
+        /**
+         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
+         */
+        if (\func_num_args() < 3) {
+            $variable = \filter_var($variable, $filter);
+        } else {
+            $variable = \filter_var($variable, $filter, $options);
+        }
+
+        return self::filter($variable);
+    }
+
+    /**
+     * "filter_var_array()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
+     *
+     * Gets multiple variables and optionally filters them.
+     *
+     * EXAMPLE: <code>
+     * $filters = [
+     *     'name'  => ['filter'  => FILTER_CALLBACK, 'options' => [UTF8::class, 'ucwords']],
+     *     'age'   => ['filter'  => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 120]],
+     *     'email' => FILTER_VALIDATE_EMAIL,
+     * ];
+     *
+     * $data = [
+     *     'name' => 'κόσμε',
+     *     'age' => '18',
+     *     'email' => 'foo@bar.de'
+     * ];
+     *
+     * UTF8::filter_var_array($data, $filters, true); // ['name' => 'Κόσμε', 'age' => 18, 'email' => 'foo@bar.de']
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.filter-var-array.php
+     *
+     * @param array<string, mixed>          $data       <p>
+     *                                                  An array with string keys containing the data to filter.
+     *                                                  </p>
+     * @param array<string, mixed>|int      $definition [optional] <p>
+     *                                                  An array defining the arguments. A valid key is a string
+     *                                                  containing a variable name and a valid value is either a
+     *                                                  filter type, or an
+     *                                                  array optionally specifying the filter, flags and options.
+     *                                                  If the value is an array, valid keys are filter
+     *                                                  which specifies the filter type,
+     *                                                  flags which specifies any flags that apply to the
+     *                                                  filter, and options which specifies any options that
+     *                                                  apply to the filter. See the example below for a better understanding.
+     *                                                  </p>
+     *                                                  <p>
+     *                                                  This parameter can be also an integer holding a filter constant. Then all values
+     *                                                  in the input array are filtered by this filter.
+     *                                                  </p>
+     * @param bool                          $add_empty  [optional] <p>
+     *                                                  Add missing keys as <b>NULL</b> to the return value.
+     *                                                  </p>
+     *
+     * @psalm-pure
+     *
+     * @return array<string, mixed>|false|null
+     *                                         <p>
+     *                                         An array containing the values of the requested variables on success, or <b>FALSE</b> on failure.
+     *                                         An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if the variable is not
+     *                                         set.
+     *                                         </p>
+     */
+    public static function filter_var_array(
+        array $data,
+        $definition = 0,
+        bool $add_empty = true
+    ) {
+        /**
+         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
+         */
+        if (\func_num_args() < 2) {
+            $a = \filter_var_array($data);
+        } else {
+            $a = \filter_var_array($data, $definition, $add_empty);
+        }
+
+        /* @phpstan-ignore-next-line | magic frm self::filter :/ */
+        return self::filter($a);
+    }
+
+    /**
+     * Checks whether finfo is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function finfo_loaded(): bool
+    {
+        return \class_exists('finfo');
+    }
+
+    /**
+     * Returns the first $n characters of the string.
+     *
+     * @param string      $str      <p>The input string.</p>
+     * @param int<1, max> $n        <p>Number of characters to retrieve from the start.</p>
+     * @param string      $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function first_char(
+        string $str,
+        int $n = 1,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $str === ''
+            ||
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            $n <= 0
+        ) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str, 0, $n);
+        }
+
+        return (string) self::substr($str, 0, $n, $encoding);
+    }
+
+    /**
+     * Check if the number of Unicode characters isn't greater than the specified integer.
+     *
+     * EXAMPLE: <code>UTF8::fits_inside('κόσμε', 6); // false</code>
+     *
+     * @param string $str      the original string to be checked
+     * @param int    $box_size the size in number of chars to be checked against string
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>TRUE</strong> if string is less than or equal to $box_size, <strong>FALSE</strong> otherwise.</p>
+     */
+    public static function fits_inside(string $str, int $box_size): bool
+    {
+        return (int) self::strlen($str) <= $box_size;
+    }
+
+    /**
+     * Try to fix simple broken UTF-8 strings.
+     *
+     * INFO: Take a look at "UTF8::fix_utf8()" if you need a more advanced fix for broken UTF-8 strings.
+     *
+     * EXAMPLE: <code>UTF8::fix_simple_utf8('DÃ¼sseldorf'); // 'Düsseldorf'</code>
+     *
+     * If you received an UTF-8 string that was converted from Windows-1252 as it was ISO-8859-1
+     * (ignoring Windows-1252 chars from 80 to 9F) use this function to fix it.
+     * See: http://en.wikipedia.org/wiki/Windows-1252
+     *
+     * @param string $str <p>The input string</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function fix_simple_utf8(string $str): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<mixed>|null
+         */
+        static $BROKEN_UTF8_TO_UTF8_KEYS_CACHE = null;
+
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<mixed>|null
+         */
+        static $BROKEN_UTF8_TO_UTF8_VALUES_CACHE = null;
+
+        if ($BROKEN_UTF8_TO_UTF8_KEYS_CACHE === null) {
+            if (self::$BROKEN_UTF8_FIX === null) {
+                self::$BROKEN_UTF8_FIX = self::getData('utf8_fix');
+            }
+
+            $BROKEN_UTF8_TO_UTF8_KEYS_CACHE = \array_keys(self::$BROKEN_UTF8_FIX ?: []);
+            $BROKEN_UTF8_TO_UTF8_VALUES_CACHE = self::$BROKEN_UTF8_FIX;
+        }
+
+        \assert(\is_array($BROKEN_UTF8_TO_UTF8_VALUES_CACHE));
+
+        return \str_replace($BROKEN_UTF8_TO_UTF8_KEYS_CACHE, $BROKEN_UTF8_TO_UTF8_VALUES_CACHE, $str);
+    }
+
+    /**
+     * Fix a double (or multiple) encoded UTF8 string.
+     *
+     * EXAMPLE: <code>UTF8::fix_utf8('FÃÂÂÂÂ©dÃÂÂÂÂ©ration'); // 'Fédération'</code>
+     *
+     * @param string|string[] $str you can use a string or an array of strings
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *                         <p>Will return the fixed input-"array" or
+     *                         the fixed input-"string".</p>
+     *
+     * @template TFixUtf8 as string|string[]
+     * @phpstan-param TFixUtf8 $str
+     * @phpstan-return TFixUtf8
+     */
+    public static function fix_utf8($str)
+    {
+        if (\is_array($str)) {
+            foreach ($str as &$v) {
+                $v = self::fix_utf8($v);
+            }
+            unset($v);
+
+            /**
+             * @psalm-suppress InvalidReturnStatement
+             */
+            return $str;
+        }
+
+        $str = (string) $str; /* @phpstan-ignore-line | TFixUtf8 is string here */
+        $last = '';
+        while ($last !== $str) {
+            $last = $str;
+            /**
+             * @psalm-suppress PossiblyInvalidArgument
+             */
+            $str = self::to_utf8(
+                self::utf8_decode($str, true)
+            );
+        }
+
+        /**
+         * @psalm-suppress InvalidReturnStatement
+         */
+        return $str;
+    }
+
+    /**
+     * Get character of a specific character.
+     *
+     * EXAMPLE: <code>UTF8::getCharDirection('ا'); // 'RTL'</code>
+     *
+     * @param string $char
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>'RTL' or 'LTR'.</p>
+     */
+    public static function getCharDirection(string $char): string
+    {
+        if (self::$SUPPORT['intlChar'] === true) {
+            $tmp_return = \IntlChar::charDirection($char);
+
+            // from "IntlChar"-Class
+            $char_direction = [
+                'RTL' => [1, 13, 14, 15, 21],
+                'LTR' => [0, 11, 12, 20],
+            ];
+
+            if (\in_array($tmp_return, $char_direction['LTR'], true)) {
+                return 'LTR';
+            }
+
+            if (\in_array($tmp_return, $char_direction['RTL'], true)) {
+                return 'RTL';
+            }
+        }
+
+        $c = static::chr_to_decimal($char);
+
+        if (!($c >= 0x5be && $c <= 0x10b7f)) {
+            return 'LTR';
+        }
+
+        if ($c <= 0x85e) {
+            if ($c === 0x5be ||
+                $c === 0x5c0 ||
+                $c === 0x5c3 ||
+                $c === 0x5c6 ||
+                ($c >= 0x5d0 && $c <= 0x5ea) ||
+                ($c >= 0x5f0 && $c <= 0x5f4) ||
+                $c === 0x608 ||
+                $c === 0x60b ||
+                $c === 0x60d ||
+                $c === 0x61b ||
+                ($c >= 0x61e && $c <= 0x64a) ||
+                ($c >= 0x66d && $c <= 0x66f) ||
+                ($c >= 0x671 && $c <= 0x6d5) ||
+                ($c >= 0x6e5 && $c <= 0x6e6) ||
+                ($c >= 0x6ee && $c <= 0x6ef) ||
+                ($c >= 0x6fa && $c <= 0x70d) ||
+                $c === 0x710 ||
+                ($c >= 0x712 && $c <= 0x72f) ||
+                ($c >= 0x74d && $c <= 0x7a5) ||
+                $c === 0x7b1 ||
+                ($c >= 0x7c0 && $c <= 0x7ea) ||
+                ($c >= 0x7f4 && $c <= 0x7f5) ||
+                $c === 0x7fa ||
+                ($c >= 0x800 && $c <= 0x815) ||
+                $c === 0x81a ||
+                $c === 0x824 ||
+                $c === 0x828 ||
+                ($c >= 0x830 && $c <= 0x83e) ||
+                ($c >= 0x840 && $c <= 0x858) ||
+                $c === 0x85e
+            ) {
+                return 'RTL';
+            }
+        } elseif ($c === 0x200f) {
+            return 'RTL';
+        } elseif ($c >= 0xfb1d) {
+            if ($c === 0xfb1d ||
+                ($c >= 0xfb1f && $c <= 0xfb28) ||
+                ($c >= 0xfb2a && $c <= 0xfb36) ||
+                ($c >= 0xfb38 && $c <= 0xfb3c) ||
+                $c === 0xfb3e ||
+                ($c >= 0xfb40 && $c <= 0xfb41) ||
+                ($c >= 0xfb43 && $c <= 0xfb44) ||
+                ($c >= 0xfb46 && $c <= 0xfbc1) ||
+                ($c >= 0xfbd3 && $c <= 0xfd3d) ||
+                ($c >= 0xfd50 && $c <= 0xfd8f) ||
+                ($c >= 0xfd92 && $c <= 0xfdc7) ||
+                ($c >= 0xfdf0 && $c <= 0xfdfc) ||
+                ($c >= 0xfe70 && $c <= 0xfe74) ||
+                ($c >= 0xfe76 && $c <= 0xfefc) ||
+                ($c >= 0x10800 && $c <= 0x10805) ||
+                $c === 0x10808 ||
+                ($c >= 0x1080a && $c <= 0x10835) ||
+                ($c >= 0x10837 && $c <= 0x10838) ||
+                $c === 0x1083c ||
+                ($c >= 0x1083f && $c <= 0x10855) ||
+                ($c >= 0x10857 && $c <= 0x1085f) ||
+                ($c >= 0x10900 && $c <= 0x1091b) ||
+                ($c >= 0x10920 && $c <= 0x10939) ||
+                $c === 0x1093f ||
+                $c === 0x10a00 ||
+                ($c >= 0x10a10 && $c <= 0x10a13) ||
+                ($c >= 0x10a15 && $c <= 0x10a17) ||
+                ($c >= 0x10a19 && $c <= 0x10a33) ||
+                ($c >= 0x10a40 && $c <= 0x10a47) ||
+                ($c >= 0x10a50 && $c <= 0x10a58) ||
+                ($c >= 0x10a60 && $c <= 0x10a7f) ||
+                ($c >= 0x10b00 && $c <= 0x10b35) ||
+                ($c >= 0x10b40 && $c <= 0x10b55) ||
+                ($c >= 0x10b58 && $c <= 0x10b72) ||
+                ($c >= 0x10b78)
+            ) {
+                return 'RTL';
+            }
+        }
+
+        return 'LTR';
+    }
+
+    /**
+     * Check for php-support.
+     *
+     * @param string|null $key
+     *
+     * @psalm-pure
+     *
+     * @return mixed
+     *               Return the full support-"array", if $key === null<br>
+     *               return bool-value, if $key is used and available<br>
+     *               otherwise return <strong>null</strong>
+     */
+    public static function getSupportInfo(string $key = null)
+    {
+        if ($key === null) {
+            return self::$SUPPORT;
+        }
+
+        if (self::$INTL_TRANSLITERATOR_LIST === null) {
+            self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
+        }
+        // compatibility fix for old versions
+        self::$SUPPORT['intl__transliterator_list_ids'] = self::$INTL_TRANSLITERATOR_LIST;
+
+        return self::$SUPPORT[$key] ?? null;
+    }
+
+    /**
+     * Warning: this method only works for some file-types (png, jpg)
+     *          if you need more supported types, please use e.g. "finfo"
+     *
+     * @param string                                                        $str
+     * @param array{ext: null|string, mime: null|string, type: null|string} $fallback
+     *
+     * @return array{ext: null|string, mime: null|string, type: null|string}
+     *
+     * @psalm-pure
+     */
+    public static function get_file_type(
+        string $str,
+        array $fallback = [
+            'ext'  => null,
+            'mime' => 'application/octet-stream',
+            'type' => null,
+        ]
+    ): array {
+        if ($str === '') {
+            return $fallback;
+        }
+
+        /** @var false|string $str_info - needed for PhpStan (stubs error) */
+        $str_info = \substr($str, 0, 2);
+        if ($str_info === false || \strlen($str_info) !== 2) {
+            return $fallback;
+        }
+
+        // DEBUG
+        //var_dump($str_info);
+
+        $str_info = \unpack('C2chars', $str_info);
+
+        if ($str_info === false) {
+            return $fallback;
+        }
+        $type_code = (int) ($str_info['chars1'] . $str_info['chars2']);
+
+        // DEBUG
+        //var_dump($type_code);
+
+        //
+        // info: https://en.wikipedia.org/wiki/Magic_number_%28programming%29#Format_indicator
+        //
+        switch ($type_code) {
+            // WARNING: do not add too simple comparisons, because of false-positive results:
+            //
+            // 3780 => 'pdf', 7790 => 'exe', 7784 => 'midi', 8075 => 'zip',
+            // 8297 => 'rar', 7173 => 'gif', 7373 => 'tiff' 6677 => 'bmp', ...
+            //
+            case 255216:
+                $ext = 'jpg';
+                $mime = 'image/jpeg';
+                $type = 'binary';
+
+                break;
+            case 13780:
+                $ext = 'png';
+                $mime = 'image/png';
+                $type = 'binary';
+
+                break;
+            default:
+                return $fallback;
+        }
+
+        return [
+            'ext'  => $ext,
+            'mime' => $mime,
+            'type' => $type,
+        ];
+    }
+
+    /**
+     * @param int<1, max> $length         <p>Length of the random string.</p>
+     * @param string      $possible_chars [optional] <p>Characters string for the random selection.</p>
+     * @param string      $encoding       [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $possible_chars
+     * @phpstan-return (T is non-empty-string ? non-empty-string : '')
+     */
+    public static function get_random_string(
+        int $length,
+        string $possible_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
+        string $encoding = 'UTF-8'
+    ): string {
+        // init
+        $i = 0;
+        $str = '';
+
+        //
+        // add random chars
+        //
+
+        if ($encoding === 'UTF-8') {
+            $max_length = (int) \mb_strlen($possible_chars);
+            if ($max_length === 0) {
+                return '';
+            }
+
+            while ($i < $length) {
+                try {
+                    $rand_int = \random_int(0, $max_length - 1);
+                } catch (\Exception $e) {
+                    $rand_int = \mt_rand(0, $max_length - 1);
+                }
+                $char = \mb_substr($possible_chars, $rand_int, 1);
+                /* @phpstan-ignore-next-line | "false" was at least the return type in the past, or? */
+                if ($char !== false) {
+                    $str .= $char;
+                    ++$i;
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $max_length = (int) self::strlen($possible_chars, $encoding);
+            if ($max_length === 0) {
+                return '';
+            }
+
+            while ($i < $length) {
+                try {
+                    $rand_int = \random_int(0, $max_length - 1);
+                } catch (\Exception $e) {
+                    $rand_int = \mt_rand(0, $max_length - 1);
+                }
+                $char = self::substr($possible_chars, $rand_int, 1, $encoding);
+                if ($char !== false) {
+                    $str .= $char;
+                    ++$i;
+                }
+            }
+        }
+
+        return $str;
+    }
+
+    /**
+     * @param int|string $extra_entropy [optional] <p>Extra entropy via a string or int value.</p>
+     * @param bool       $use_md5       [optional] <p>Return the unique identifier as md5-hash? Default: true</p>
+     *
+     * @return non-empty-string
+     */
+    public static function get_unique_string($extra_entropy = '', bool $use_md5 = true): string
+    {
+        try {
+            $rand_int = \random_int(0, \mt_getrandmax());
+        } catch (\Exception $e) {
+            $rand_int = \mt_rand(0, \mt_getrandmax());
+        }
+
+        $unique_helper = $rand_int .
+                         \session_id() .
+                         ($_SERVER['REMOTE_ADDR'] ?? '') .
+                         ($_SERVER['SERVER_ADDR'] ?? '') .
+                         $extra_entropy;
+
+        $unique_string = \uniqid($unique_helper, true);
+
+        if ($use_md5) {
+            $unique_string = \md5($unique_string . $unique_helper);
+        }
+
+        return $unique_string;
+    }
+
+    /**
+     * Returns true if the string contains a lower case char, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not the string contains a lower case character.</p>
+     */
+    public static function has_lowercase(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('.*[[:lower:]]', $str);
+        }
+
+        return self::str_matches_pattern($str, '.*[[:lower:]]');
+    }
+
+    /**
+     * Returns true if the string contains whitespace, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not the string contains whitespace.</p>
+     */
+    public static function has_whitespace(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('.*[[:space:]]', $str);
+        }
+
+        return self::str_matches_pattern($str, '.*[[:space:]]');
+    }
+
+    /**
+     * Returns true if the string contains an upper case char, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not the string contains an upper case character.</p>
+     */
+    public static function has_uppercase(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('.*[[:upper:]]', $str);
+        }
+
+        return self::str_matches_pattern($str, '.*[[:upper:]]');
+    }
+
+    /**
+     * Converts a hexadecimal value into a UTF-8 character.
+     *
+     * INFO: opposite to UTF8::chr_to_hex()
+     *
+     * EXAMPLE: <code>UTF8::hex_to_chr('U+00a7'); // '§'</code>
+     *
+     * @param string $hexdec <p>The hexadecimal value.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                      <p>One single UTF-8 character.</p>
+     */
+    public static function hex_to_chr(string $hexdec)
+    {
+        /** @noinspection PhpUsageOfSilenceOperatorInspection - Invalid characters passed for attempted conversion, these have been ignored */
+        return self::decimal_to_chr((int) @\hexdec($hexdec));
+    }
+
+    /**
+     * Converts hexadecimal U+xxxx code point representation to integer.
+     *
+     * INFO: opposite to UTF8::int_to_hex()
+     *
+     * EXAMPLE: <code>UTF8::hex_to_int('U+00f1'); // 241</code>
+     *
+     * @param string $hexdec <p>The hexadecimal code point representation.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The code point, or false on failure.</p>
+     */
+    public static function hex_to_int($hexdec)
+    {
+        // init
+        $hexdec = (string) $hexdec;
+
+        if ($hexdec === '') {
+            return false;
+        }
+
+        if (\preg_match('/^(?:\\\u|U\+|)([a-zA-Z0-9]{4,6})$/', $hexdec, $match)) {
+            return \intval($match[1], 16);
+        }
+
+        return false;
+    }
+
+    /**
+     * Converts a UTF-8 string to a series of HTML numbered entities.
+     *
+     * INFO: opposite to UTF8::html_decode()
+     *
+     * EXAMPLE: <code>UTF8::html_encode('中文空白'); // '&#20013;&#25991;&#31354;&#30333;'</code>
+     *
+     * @param string $str              <p>The Unicode string to be encoded as numbered entities.</p>
+     * @param bool   $keep_ascii_chars [optional] <p>Keep ASCII chars.</p>
+     * @param string $encoding         [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>HTML numbered entities.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function html_encode(
+        string $str,
+        bool $keep_ascii_chars = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        // INFO: http://stackoverflow.com/questions/35854535/better-explanation-of-convmap-in-mb-encode-numericentity
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($keep_ascii_chars) {
+                $start_code = 0x80;
+            } else {
+                $start_code = 0x00;
+            }
+
+            if ($encoding === 'UTF-8') {
+                /** @var false|string|null $return - needed for PhpStan (stubs error) */
+                $return = \mb_encode_numericentity(
+                    $str,
+                    [$start_code, 0xfffff, 0, 0xfffff]
+                );
+                if ($return !== null && $return !== false) {
+                    return $return;
+                }
+            }
+
+            /** @var false|string|null $return - needed for PhpStan (stubs error) */
+            $return = \mb_encode_numericentity(
+                $str,
+                [$start_code, 0xfffff, 0, 0xfffff],
+                $encoding
+            );
+            if ($return !== null && $return !== false) {
+                return $return;
+            }
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        return \implode(
+            '',
+            \array_map(
+                static function (string $chr) use ($keep_ascii_chars, $encoding): string {
+                    return self::single_chr_html_encode($chr, $keep_ascii_chars, $encoding);
+                },
+                self::str_split($str)
+            )
+        );
+    }
+
+    /**
+     * UTF-8 version of html_entity_decode()
+     *
+     * The reason we are not using html_entity_decode() by itself is because
+     * while it is not technically correct to leave out the semicolon
+     * at the end of an entity most browsers will still interpret the entity
+     * correctly. html_entity_decode() does not convert entities without
+     * semicolons, so we are left with our own little solution here. Bummer.
+     *
+     * Convert all HTML entities to their applicable characters.
+     *
+     * INFO: opposite to UTF8::html_encode()
+     *
+     * EXAMPLE: <code>UTF8::html_entity_decode('&#20013;&#25991;&#31354;&#30333;'); // '中文空白'</code>
+     *
+     * @see http://php.net/manual/en/function.html-entity-decode.php
+     *
+     * @param string   $str      <p>
+     *                           The input string.
+     *                           </p>
+     * @param int|null $flags    [optional] <p>
+     *                           A bitmask of one or more of the following flags, which specify how to handle quotes
+     *                           and which document type to use. The default is ENT_COMPAT | ENT_HTML401.
+     *                           <table>
+     *                           Available <i>flags</i> constants
+     *                           <tr valign="top">
+     *                           <td>Constant Name</td>
+     *                           <td>Description</td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_COMPAT</b></td>
+     *                           <td>Will convert double-quotes and leave single-quotes alone.</td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_QUOTES</b></td>
+     *                           <td>Will convert both double and single quotes.</td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_NOQUOTES</b></td>
+     *                           <td>Will leave both double and single quotes unconverted.</td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_HTML401</b></td>
+     *                           <td>
+     *                           Handle code as HTML 4.01.
+     *                           </td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_XML1</b></td>
+     *                           <td>
+     *                           Handle code as XML 1.
+     *                           </td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_XHTML</b></td>
+     *                           <td>
+     *                           Handle code as XHTML.
+     *                           </td>
+     *                           </tr>
+     *                           <tr valign="top">
+     *                           <td><b>ENT_HTML5</b></td>
+     *                           <td>
+     *                           Handle code as HTML 5.
+     *                           </td>
+     *                           </tr>
+     *                           </table>
+     *                           </p>
+     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The decoded string.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function html_entity_decode(
+        string $str,
+        int $flags = null,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            !isset($str[3]) // examples: &; || &x;
+            ||
+            \strpos($str, '&') === false // no "&"
+        ) {
+            return $str;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($flags === null) {
+            $flags = \ENT_QUOTES | \ENT_HTML5;
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            $encoding !== 'ISO-8859-1'
+            &&
+            $encoding !== 'WINDOWS-1252'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::html_entity_decode() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        do {
+            $str_compare = $str;
+
+            if (\strpos($str, '&') !== false) {
+                if (\strpos($str, '&#') !== false) {
+                    // decode also numeric & UTF16 two byte entities
+                    $str = (string) \preg_replace(
+                        '/(&#(?:x0*[0-9a-fA-F]{2,6}(?![0-9a-fA-F;])|(?:0*\d{2,6}(?![0-9;]))))/S',
+                        '$1;',
+                        $str
+                    );
+                }
+
+                $str = \html_entity_decode(
+                    $str,
+                    $flags,
+                    $encoding
+                );
+            }
+        } while ($str_compare !== $str);
+
+        return $str;
+    }
+
+    /**
+     * Create a escape html version of the string via "UTF8::htmlspecialchars()".
+     *
+     * @param string $str
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function html_escape(string $str, string $encoding = 'UTF-8'): string
+    {
+        return self::htmlspecialchars(
+            $str,
+            \ENT_QUOTES | \ENT_SUBSTITUTE,
+            $encoding
+        );
+    }
+
+    /**
+     * Remove empty html-tag.
+     *
+     * e.g.: <pre><tag></tag></pre>
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function html_stripe_empty_tags(string $str): string
+    {
+        return (string) \preg_replace(
+            '/<[^\\/>]*?>\\s*?<\\/[^>]*?>/u',
+            '',
+            $str
+        );
+    }
+
+    /**
+     * Convert all applicable characters to HTML entities: UTF-8 version of htmlentities().
+     *
+     * EXAMPLE: <code>UTF8::htmlentities('<白-öäü>'); // '&lt;&#30333;-&ouml;&auml;&uuml;&gt;'</code>
+     *
+     * @see http://php.net/manual/en/function.htmlentities.php
+     *
+     * @param string $str           <p>
+     *                              The input string.
+     *                              </p>
+     * @param int    $flags         [optional] <p>
+     *                              A bitmask of one or more of the following flags, which specify how to handle
+     *                              quotes, invalid code unit sequences and the used document type. The default is
+     *                              ENT_COMPAT | ENT_HTML401.
+     *                              <table>
+     *                              Available <i>flags</i> constants
+     *                              <tr valign="top">
+     *                              <td>Constant Name</td>
+     *                              <td>Description</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_COMPAT</b></td>
+     *                              <td>Will convert double-quotes and leave single-quotes alone.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_QUOTES</b></td>
+     *                              <td>Will convert both double and single quotes.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_NOQUOTES</b></td>
+     *                              <td>Will leave both double and single quotes unconverted.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_IGNORE</b></td>
+     *                              <td>
+     *                              Silently discard invalid code unit sequences instead of returning
+     *                              an empty string. Using this flag is discouraged as it
+     *                              may have security implications.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_SUBSTITUTE</b></td>
+     *                              <td>
+     *                              Replace invalid code unit sequences with a Unicode Replacement Character
+     *                              U+FFFD (UTF-8) or &#38;#38;#FFFD; (otherwise) instead of returning an empty
+     *                              string.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_DISALLOWED</b></td>
+     *                              <td>
+     *                              Replace invalid code points for the given document type with a
+     *                              Unicode Replacement Character U+FFFD (UTF-8) or &#38;#38;#FFFD;
+     *                              (otherwise) instead of leaving them as is. This may be useful, for
+     *                              instance, to ensure the well-formedness of XML documents with
+     *                              embedded external content.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_HTML401</b></td>
+     *                              <td>
+     *                              Handle code as HTML 4.01.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_XML1</b></td>
+     *                              <td>
+     *                              Handle code as XML 1.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_XHTML</b></td>
+     *                              <td>
+     *                              Handle code as XHTML.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_HTML5</b></td>
+     *                              <td>
+     *                              Handle code as HTML 5.
+     *                              </td>
+     *                              </tr>
+     *                              </table>
+     *                              </p>
+     * @param string $encoding      [optional] <p>
+     *                              Like <b>htmlspecialchars</b>,
+     *                              <b>htmlentities</b> takes an optional third argument
+     *                              <i>encoding</i> which defines encoding used in
+     *                              conversion.
+     *                              Although this argument is technically optional, you are highly
+     *                              encouraged to specify the correct value for your code.
+     *                              </p>
+     * @param bool   $double_encode [optional] <p>
+     *                              When <i>double_encode</i> is turned off PHP will not
+     *                              encode existing html entities. The default is to convert everything.
+     *                              </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>
+     *                The encoded string.
+     *                <br><br>
+     *                If the input <i>string</i> contains an invalid code unit
+     *                sequence within the given <i>encoding</i> an empty string
+     *                will be returned, unless either the <b>ENT_IGNORE</b> or
+     *                <b>ENT_SUBSTITUTE</b> flags are set.
+     *                </p>
+     */
+    public static function htmlentities(
+        string $str,
+        int $flags = \ENT_COMPAT,
+        string $encoding = 'UTF-8',
+        bool $double_encode = true
+    ): string {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        $str = \htmlentities(
+            $str,
+            $flags,
+            $encoding,
+            $double_encode
+        );
+
+        /**
+         * PHP doesn't replace a backslash to its html entity since this is something
+         * that's mostly used to escape characters when inserting in a database. Since
+         * we're using a decent database layer, we don't need this shit and we're replacing
+         * the double backslashes by its' html entity equivalent.
+         *
+         * https://github.com/forkcms/library/blob/master/spoon/filter/filter.php#L303
+         */
+        $str = \str_replace('\\', '&#92;', $str);
+
+        return self::html_encode($str, true, $encoding);
+    }
+
+    /**
+     * Convert only special characters to HTML entities: UTF-8 version of htmlspecialchars()
+     *
+     * INFO: Take a look at "UTF8::htmlentities()"
+     *
+     * EXAMPLE: <code>UTF8::htmlspecialchars('<白-öäü>'); // '&lt;白-öäü&gt;'</code>
+     *
+     * @see http://php.net/manual/en/function.htmlspecialchars.php
+     *
+     * @param string $str           <p>
+     *                              The string being converted.
+     *                              </p>
+     * @param int    $flags         [optional] <p>
+     *                              A bitmask of one or more of the following flags, which specify how to handle
+     *                              quotes, invalid code unit sequences and the used document type. The default is
+     *                              ENT_COMPAT | ENT_HTML401.
+     *                              <table>
+     *                              Available <i>flags</i> constants
+     *                              <tr valign="top">
+     *                              <td>Constant Name</td>
+     *                              <td>Description</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_COMPAT</b></td>
+     *                              <td>Will convert double-quotes and leave single-quotes alone.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_QUOTES</b></td>
+     *                              <td>Will convert both double and single quotes.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_NOQUOTES</b></td>
+     *                              <td>Will leave both double and single quotes unconverted.</td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_IGNORE</b></td>
+     *                              <td>
+     *                              Silently discard invalid code unit sequences instead of returning
+     *                              an empty string. Using this flag is discouraged as it
+     *                              may have security implications.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_SUBSTITUTE</b></td>
+     *                              <td>
+     *                              Replace invalid code unit sequences with a Unicode Replacement Character
+     *                              U+FFFD (UTF-8) or &#38;#38;#FFFD; (otherwise) instead of returning an empty
+     *                              string.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_DISALLOWED</b></td>
+     *                              <td>
+     *                              Replace invalid code points for the given document type with a
+     *                              Unicode Replacement Character U+FFFD (UTF-8) or &#38;#38;#FFFD;
+     *                              (otherwise) instead of leaving them as is. This may be useful, for
+     *                              instance, to ensure the well-formedness of XML documents with
+     *                              embedded external content.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_HTML401</b></td>
+     *                              <td>
+     *                              Handle code as HTML 4.01.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_XML1</b></td>
+     *                              <td>
+     *                              Handle code as XML 1.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_XHTML</b></td>
+     *                              <td>
+     *                              Handle code as XHTML.
+     *                              </td>
+     *                              </tr>
+     *                              <tr valign="top">
+     *                              <td><b>ENT_HTML5</b></td>
+     *                              <td>
+     *                              Handle code as HTML 5.
+     *                              </td>
+     *                              </tr>
+     *                              </table>
+     *                              </p>
+     * @param string $encoding      [optional] <p>
+     *                              Defines encoding used in conversion.
+     *                              </p>
+     *                              <p>
+     *                              For the purposes of this function, the encodings
+     *                              ISO-8859-1, ISO-8859-15,
+     *                              UTF-8, cp866,
+     *                              cp1251, cp1252, and
+     *                              KOI8-R are effectively equivalent, provided the
+     *                              <i>string</i> itself is valid for the encoding, as
+     *                              the characters affected by <b>htmlspecialchars</b> occupy
+     *                              the same positions in all of these encodings.
+     *                              </p>
+     * @param bool   $double_encode [optional] <p>
+     *                              When <i>double_encode</i> is turned off PHP will not
+     *                              encode existing html entities, the default is to convert everything.
+     *                              </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The converted string.</p>
+     *                <p>
+     *                If the input <i>string</i> contains an invalid code unit
+     *                sequence within the given <i>encoding</i> an empty string
+     *                will be returned, unless either the <b>ENT_IGNORE</b> or
+     *                <b>ENT_SUBSTITUTE</b> flags are set.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function htmlspecialchars(
+        string $str,
+        int $flags = \ENT_COMPAT,
+        string $encoding = 'UTF-8',
+        bool $double_encode = true
+    ): string {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        return \htmlspecialchars(
+            $str,
+            $flags,
+            $encoding,
+            $double_encode
+        );
+    }
+
+    /**
+     * Checks whether iconv is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function iconv_loaded(): bool
+    {
+        return \extension_loaded('iconv');
+    }
+
+    /**
+     * Converts Integer to hexadecimal U+xxxx code point representation.
+     *
+     * INFO: opposite to UTF8::hex_to_int()
+     *
+     * EXAMPLE: <code>UTF8::int_to_hex(241); // 'U+00f1'</code>
+     *
+     * @param int    $int    <p>The integer to be converted to hexadecimal code point.</p>
+     * @param string $prefix [optional]
+     *
+     * @psalm-pure
+     *
+     * @return string the code point, or empty string on failure
+     */
+    public static function int_to_hex(int $int, string $prefix = 'U+'): string
+    {
+        $hex = \dechex($int);
+
+        $hex = (\strlen($hex) < 4 ? \substr('0000' . $hex, -4) : $hex);
+
+        return $prefix . $hex . '';
+    }
+
+    /**
+     * Checks whether intl-char is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function intlChar_loaded(): bool
+    {
+        return \class_exists('IntlChar');
+    }
+
+    /**
+     * Checks whether intl is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function intl_loaded(): bool
+    {
+        return \extension_loaded('intl');
+    }
+
+    /**
+     * Returns true if the string contains only alphabetic chars, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only alphabetic chars.</p>
+     */
+    public static function is_alpha(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:alpha:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:alpha:]]*$');
+    }
+
+    /**
+     * Returns true if the string contains only alphabetic and numeric chars, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only alphanumeric chars.</p>
+     */
+    public static function is_alphanumeric(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:alnum:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:alnum:]]*$');
+    }
+
+    /**
+     * Returns true if the string contains only punctuation chars, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only punctuation chars.</p>
+     */
+    public static function is_punctuation(string $str): bool
+    {
+        return self::str_matches_pattern($str, '^[[:punct:]]*$');
+    }
+
+    /**
+     * Returns true if the string contains only printable (non-invisible) chars, false otherwise.
+     *
+     * @param string $str                       <p>The input string.</p>
+     * @param bool   $ignore_control_characters [optional] <p>Ignore control characters like [LRM] or [LSEP].</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only printable (non-invisible) chars.</p>
+     */
+    public static function is_printable(string $str, bool $ignore_control_characters = false): bool
+    {
+        return self::remove_invisible_characters($str, false, '', $ignore_control_characters) === $str;
+    }
+
+    /**
+     * Checks if a string is 7 bit ASCII.
+     *
+     * EXAMPLE: <code>UTF8::is_ascii('白'); // false</code>
+     *
+     * @param string $str <p>The string to check.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>
+     *              <strong>true</strong> if it is ASCII<br>
+     *              <strong>false</strong> otherwise
+     *              </p>
+     */
+    public static function is_ascii(string $str): bool
+    {
+        return ASCII::is_ascii($str);
+    }
+
+    /**
+     * Returns true if the string is base64 encoded, false otherwise.
+     *
+     * EXAMPLE: <code>UTF8::is_base64('4KSu4KWL4KSo4KS/4KSa'); // true</code>
+     *
+     * @param string|null $str                   <p>The input string.</p>
+     * @param bool        $empty_string_is_valid [optional] <p>Is an empty string valid base64 or not?</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str is base64 encoded.</p>
+     */
+    public static function is_base64($str, bool $empty_string_is_valid = false): bool
+    {
+        if (
+            !$empty_string_is_valid
+            &&
+            $str === ''
+        ) {
+            return false;
+        }
+
+        if (!\is_string($str)) {
+            return false;
+        }
+
+        $base64String = \base64_decode($str, true);
+
+        return $base64String !== false && \base64_encode($base64String) === $str;
+    }
+
+    /**
+     * Check if the input is binary... (is look like a hack).
+     *
+     * EXAMPLE: <code>UTF8::is_binary(01); // true</code>
+     *
+     * @param int|string $input
+     * @param bool       $strict
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function is_binary($input, bool $strict = false): bool
+    {
+        $input = (string) $input;
+        if ($input === '') {
+            return false;
+        }
+
+        if (\preg_match('~^[01]+$~', $input)) {
+            return true;
+        }
+
+        $ext = self::get_file_type($input);
+        if ($ext['type'] === 'binary') {
+            return true;
+        }
+
+        if (!$strict) {
+            $test_length = \strlen($input);
+            $test_null_counting = \substr_count($input, "\x0", 0, $test_length);
+            if (($test_null_counting / $test_length) > 0.25) {
+                return true;
+            }
+        }
+
+        if ($strict) {
+            if (self::$SUPPORT['finfo'] === false) {
+                throw new \RuntimeException('ext-fileinfo: is not installed');
+            }
+
+            /**
+             * @psalm-suppress ImpureMethodCall - it will return the same result for the same file ...
+             */
+            $finfo_encoding = (new \finfo(\FILEINFO_MIME_ENCODING))->buffer($input);
+            if ($finfo_encoding && $finfo_encoding === 'binary') {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if the file is binary.
+     *
+     * EXAMPLE: <code>UTF8::is_binary('./utf32.txt'); // true</code>
+     *
+     * @param string $file
+     *
+     * @return bool
+     */
+    public static function is_binary_file($file): bool
+    {
+        // init
+        $block = '';
+
+        $fp = \fopen($file, 'rb');
+        if (\is_resource($fp)) {
+            $block = \fread($fp, 512);
+            \fclose($fp);
+        }
+
+        if ($block === '' || $block === false) {
+            return false;
+        }
+
+        return self::is_binary($block, true);
+    }
+
+    /**
+     * Returns true if the string contains only whitespace chars, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only whitespace characters.</p>
+     */
+    public static function is_blank(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:space:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:space:]]*$');
+    }
+
+    /**
+     * Checks if the given string is equal to any "Byte Order Mark".
+     *
+     * WARNING: Use "UTF8::string_has_bom()" if you will check BOM in a string.
+     *
+     * EXAMPLE: <code>UTF8::is_bom("\xef\xbb\xbf"); // true</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if the $utf8_chr is Byte Order Mark, <strong>false</strong> otherwise.</p>
+     */
+    public static function is_bom($str): bool
+    {
+        /** @noinspection PhpUnusedLocalVariableInspection */
+        foreach (self::$BOM as $bom_string => &$bom_byte_length) {
+            if ($str === $bom_string) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Determine whether the string is considered to be empty.
+     *
+     * A variable is considered empty if it does not exist or if its value equals FALSE.
+     * empty() does not generate a warning if the variable does not exist.
+     *
+     * @param array<array-key, mixed>|float|int|string $str
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str is empty().</p>
+     */
+    public static function is_empty($str): bool
+    {
+        return empty($str);
+    }
+
+    /**
+     * Returns true if the string contains only hexadecimal chars, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only hexadecimal chars.</p>
+     */
+    public static function is_hexadecimal(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:xdigit:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:xdigit:]]*$');
+    }
+
+    /**
+     * Check if the string contains any HTML tags.
+     *
+     * EXAMPLE: <code>UTF8::is_html('<b>lall</b>'); // true</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains html elements.</p>
+     */
+    public static function is_html(string $str): bool
+    {
+        if ($str === '') {
+            return false;
+        }
+
+        // init
+        $matches = [];
+
+        $str = self::emoji_encode($str); // hack for emoji support :/
+
+        \preg_match("/<\\/?\\w+(?:(?:\\s+\\w+(?:\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)*\\s*|\\s*)\\/?>/u", $str, $matches);
+
+        return $matches !== [];
+    }
+
+    /**
+     * Check if $url is an correct url.
+     *
+     * @param string $url
+     * @param bool   $disallow_localhost
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function is_url(string $url, bool $disallow_localhost = false): bool
+    {
+        if ($url === '') {
+            return false;
+        }
+
+        // WARNING: keep this as hack protection
+        if (!self::str_istarts_with_any($url, ['http://', 'https://'])) {
+            return false;
+        }
+
+        // e.g. -> the server itself connect to "https://foo.localhost/phpmyadmin/...
+        if ($disallow_localhost) {
+            if (self::str_istarts_with_any(
+                $url,
+                [
+                    'http://localhost',
+                    'https://localhost',
+                    'http://127.0.0.1',
+                    'https://127.0.0.1',
+                    'http://::1',
+                    'https://::1',
+                ]
+            )) {
+                return false;
+            }
+
+            $regex = '/^(?:http(?:s)?:\/\/).*?(?:\.localhost)/iu';
+            if (\preg_match($regex, $url)) {
+                return false;
+            }
+        }
+
+        // INFO: this is needed for e.g. "http://müller.de/" (internationalized domain names) and non ASCII-parameters
+        $regex = '/^(?:http(?:s)?:\\/\\/)(?:[\p{L}0-9][\p{L}0-9_-]*(?:\\.[\p{L}0-9][\p{L}0-9_-]*))(?:\\d+)?(?:\\/\\.*)?/iu';
+        if (\preg_match($regex, $url)) {
+            return true;
+        }
+
+        return \filter_var($url, \FILTER_VALIDATE_URL) !== false;
+    }
+
+    /**
+     * Try to check if "$str" is a JSON-string.
+     *
+     * EXAMPLE: <code>UTF8::is_json('{"array":[1,"¥","ä"]}'); // true</code>
+     *
+     * @param string $str                                    <p>The input string.</p>
+     * @param bool   $only_array_or_object_results_are_valid [optional] <p>Only array and objects are valid json
+     *                                                       results.</p>
+     *
+     * @return bool
+     *              <p>Whether or not the $str is in JSON format.</p>
+     */
+    public static function is_json(string $str, bool $only_array_or_object_results_are_valid = true): bool
+    {
+        if ($str === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['json'] === false) {
+            throw new \RuntimeException('ext-json: is not installed');
+        }
+
+        $jsonOrNull = self::json_decode($str);
+        if ($jsonOrNull === null && \strtoupper($str) !== 'NULL') {
+            return false;
+        }
+
+        if (
+            $only_array_or_object_results_are_valid
+            &&
+            !\is_object($jsonOrNull)
+            &&
+            !\is_array($jsonOrNull)
+        ) {
+            return false;
+        }
+
+        return \json_last_error() === \JSON_ERROR_NONE;
+    }
+
+    /**
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only lowercase chars.</p>
+     */
+    public static function is_lowercase(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:lower:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:lower:]]*$');
+    }
+
+    /**
+     * Returns true if the string is serialized, false otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str is serialized.</p>
+     */
+    public static function is_serialized(string $str): bool
+    {
+        if ($str === '') {
+            return false;
+        }
+
+        /** @noinspection PhpUsageOfSilenceOperatorInspection */
+        /** @noinspection UnserializeExploitsInspection */
+        return $str === 'b:0;'
+               ||
+               @\unserialize($str, []) !== false;
+    }
+
+    /**
+     * Returns true if the string contains only lower case chars, false
+     * otherwise.
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains only lower case characters.</p>
+     */
+    public static function is_uppercase(string $str): bool
+    {
+        if (self::$SUPPORT['mbstring'] === true) {
+            return \mb_ereg_match('^[[:upper:]]*$', $str);
+        }
+
+        return self::str_matches_pattern($str, '^[[:upper:]]*$');
+    }
+
+    /**
+     * Check if the string is UTF-16.
+     *
+     * EXAMPLE: <code>
+     * UTF8::is_utf16(file_get_contents('utf-16-le.txt')); // 1
+     * //
+     * UTF8::is_utf16(file_get_contents('utf-16-be.txt')); // 2
+     * //
+     * UTF8::is_utf16(file_get_contents('utf-8.txt')); // false
+     * </code>
+     *
+     * @param string $str                       <p>The input string.</p>
+     * @param bool   $check_if_string_is_binary
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <strong>false</strong> if is't not UTF-16,<br>
+     *                   <strong>1</strong> for UTF-16LE,<br>
+     *                   <strong>2</strong> for UTF-16BE
+     */
+    public static function is_utf16($str, bool $check_if_string_is_binary = true)
+    {
+        // init
+        $str = (string) $str;
+        $str_chars = [];
+
+        // fix for the "binary"-check
+        if ($check_if_string_is_binary !== false && self::string_has_bom($str)) {
+            $check_if_string_is_binary = false;
+        }
+
+        if (
+            $check_if_string_is_binary
+            &&
+            !self::is_binary($str, true)
+        ) {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring'] === false) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::is_utf16() without mbstring may did not work correctly', \E_USER_WARNING);
+        }
+
+        $str = self::remove_bom($str);
+
+        $maybe_utf16le = 0;
+        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-16LE');
+        if ($test) {
+            $test2 = \mb_convert_encoding($test, 'UTF-16LE', 'UTF-8');
+            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-16LE');
+            if ($test3 === $test) {
+                $str_chars = self::count_chars($str, true, false);
+                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
+                    if (\in_array($test3char, $str_chars, true)) {
+                        ++$maybe_utf16le;
+                    }
+                }
+                unset($test3charEmpty);
+            }
+        }
+
+        $maybe_utf16be = 0;
+        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-16BE');
+        if ($test) {
+            $test2 = \mb_convert_encoding($test, 'UTF-16BE', 'UTF-8');
+            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-16BE');
+            if ($test3 === $test) {
+                if ($str_chars === []) {
+                    $str_chars = self::count_chars($str, true, false);
+                }
+                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
+                    if (\in_array($test3char, $str_chars, true)) {
+                        ++$maybe_utf16be;
+                    }
+                }
+                unset($test3charEmpty);
+            }
+        }
+
+        if ($maybe_utf16be !== $maybe_utf16le) {
+            if ($maybe_utf16le > $maybe_utf16be) {
+                return 1;
+            }
+
+            return 2;
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if the string is UTF-32.
+     *
+     * EXAMPLE: <code>
+     * UTF8::is_utf32(file_get_contents('utf-32-le.txt')); // 1
+     * //
+     * UTF8::is_utf32(file_get_contents('utf-32-be.txt')); // 2
+     * //
+     * UTF8::is_utf32(file_get_contents('utf-8.txt')); // false
+     * </code>
+     *
+     * @param string $str                       <p>The input string.</p>
+     * @param bool   $check_if_string_is_binary
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <strong>false</strong> if is't not UTF-32,<br>
+     *                   <strong>1</strong> for UTF-32LE,<br>
+     *                   <strong>2</strong> for UTF-32BE
+     */
+    public static function is_utf32($str, bool $check_if_string_is_binary = true)
+    {
+        // init
+        $str = (string) $str;
+        $str_chars = [];
+
+        // fix for the "binary"-check
+        if ($check_if_string_is_binary !== false && self::string_has_bom($str)) {
+            $check_if_string_is_binary = false;
+        }
+
+        if (
+            $check_if_string_is_binary
+            &&
+            !self::is_binary($str, true)
+        ) {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring'] === false) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::is_utf32() without mbstring may did not work correctly', \E_USER_WARNING);
+        }
+
+        $str = self::remove_bom($str);
+
+        $maybe_utf32le = 0;
+        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-32LE');
+        if ($test) {
+            $test2 = \mb_convert_encoding($test, 'UTF-32LE', 'UTF-8');
+            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-32LE');
+            if ($test3 === $test) {
+                $str_chars = self::count_chars($str, true, false);
+                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
+                    if (\in_array($test3char, $str_chars, true)) {
+                        ++$maybe_utf32le;
+                    }
+                }
+                unset($test3charEmpty);
+            }
+        }
+
+        $maybe_utf32be = 0;
+        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-32BE');
+        if ($test) {
+            $test2 = \mb_convert_encoding($test, 'UTF-32BE', 'UTF-8');
+            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-32BE');
+            if ($test3 === $test) {
+                if ($str_chars === []) {
+                    $str_chars = self::count_chars($str, true, false);
+                }
+                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
+                    if (\in_array($test3char, $str_chars, true)) {
+                        ++$maybe_utf32be;
+                    }
+                }
+                unset($test3charEmpty);
+            }
+        }
+
+        if ($maybe_utf32be !== $maybe_utf32le) {
+            if ($maybe_utf32le > $maybe_utf32be) {
+                return 1;
+            }
+
+            return 2;
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks whether the passed input contains only byte sequences that appear valid UTF-8.
+     *
+     * EXAMPLE: <code>
+     * UTF8::is_utf8(['Iñtërnâtiônàlizætiøn', 'foo']); // true
+     * //
+     * UTF8::is_utf8(["Iñtërnâtiônàlizætiøn\xA0\xA1", 'bar']); // false
+     * </code>
+     *
+     * @param int|string|string[]|null $str    <p>The input to be checked.</p>
+     * @param bool                     $strict <p>Check also if the string is not UTF-16 or UTF-32.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function is_utf8($str, bool $strict = false): bool
+    {
+        if (\is_array($str)) {
+            foreach ($str as &$v) {
+                if (!self::is_utf8($v, $strict)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        return self::is_utf8_string((string) $str, $strict);
+    }
+
+    /**
+     * (PHP 5 &gt;= 5.2.0, PECL json &gt;= 1.2.0)<br/>
+     * Decodes a JSON string
+     *
+     * EXAMPLE: <code>UTF8::json_decode('[1,"\u00a5","\u00e4"]'); // array(1, '¥', 'ä')</code>
+     *
+     * @see http://php.net/manual/en/function.json-decode.php
+     *
+     * @param string $json    <p>
+     *                        The <i>json</i> string being decoded.
+     *                        </p>
+     *                        <p>
+     *                        This function only works with UTF-8 encoded strings.
+     *                        </p>
+     *                        <p>PHP implements a superset of
+     *                        JSON - it will also encode and decode scalar types and <b>NULL</b>. The JSON standard
+     *                        only supports these values when they are nested inside an array or an object.
+     *                        </p>
+     * @param bool   $assoc   [optional] <p>
+     *                        When <b>TRUE</b>, returned objects will be converted into
+     *                        associative arrays.
+     *                        </p>
+     * @param int    $depth   [optional] <p>
+     *                        User specified recursion depth.
+     *                        </p>
+     * @param int    $options [optional] <p>
+     *                        Bitmask of JSON decode options. Currently only
+     *                        <b>JSON_BIGINT_AS_STRING</b>
+     *                        is supported (default is to cast large integers as floats)
+     *                        </p>
+     *
+     * @psalm-pure
+     *
+     * @return mixed
+     *               <p>The value encoded in <i>json</i> in appropriate PHP type. Values true, false and
+     *               null (case-insensitive) are returned as <b>TRUE</b>, <b>FALSE</b> and <b>NULL</b> respectively.
+     *               <b>NULL</b> is returned if the <i>json</i> cannot be decoded or if the encoded data
+     *               is deeper than the recursion limit.</p>
+     */
+    public static function json_decode(
+        string $json,
+        bool $assoc = false,
+        int $depth = 512,
+        int $options = 0
+    ) {
+        $json = self::filter($json);
+
+        if (self::$SUPPORT['json'] === false) {
+            throw new \RuntimeException('ext-json: is not installed');
+        }
+
+        if ($depth < 1) {
+            $depth = 1;
+        }
+
+        return \json_decode($json, $assoc, $depth, $options);
+    }
+
+    /**
+     * (PHP 5 &gt;= 5.2.0, PECL json &gt;= 1.2.0)<br/>
+     * Returns the JSON representation of a value.
+     *
+     * EXAMPLE: <code>UTF8::json_encode(array(1, '¥', 'ä')); // '[1,"\u00a5","\u00e4"]'</code>
+     *
+     * @see http://php.net/manual/en/function.json-encode.php
+     *
+     * @param mixed $value   <p>
+     *                       The <i>value</i> being encoded. Can be any type except
+     *                       a resource.
+     *                       </p>
+     *                       <p>
+     *                       All string data must be UTF-8 encoded.
+     *                       </p>
+     *                       <p>PHP implements a superset of
+     *                       JSON - it will also encode and decode scalar types and <b>NULL</b>. The JSON standard
+     *                       only supports these values when they are nested inside an array or an object.
+     *                       </p>
+     * @param int   $options [optional] <p>
+     *                       Bitmask consisting of <b>JSON_HEX_QUOT</b>,
+     *                       <b>JSON_HEX_TAG</b>,
+     *                       <b>JSON_HEX_AMP</b>,
+     *                       <b>JSON_HEX_APOS</b>,
+     *                       <b>JSON_NUMERIC_CHECK</b>,
+     *                       <b>JSON_PRETTY_PRINT</b>,
+     *                       <b>JSON_UNESCAPED_SLASHES</b>,
+     *                       <b>JSON_FORCE_OBJECT</b>,
+     *                       <b>JSON_UNESCAPED_UNICODE</b>. The behaviour of these
+     *                       constants is described on
+     *                       the JSON constants page.
+     *                       </p>
+     * @param int   $depth   [optional] <p>
+     *                       Set the maximum depth. Must be greater than zero.
+     *                       </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>A JSON encoded <strong>string</strong> on success or<br>
+     *                      <strong>FALSE</strong> on failure.</p>
+     */
+    public static function json_encode($value, int $options = 0, int $depth = 512)
+    {
+        $value = self::filter($value);
+
+        if (self::$SUPPORT['json'] === false) {
+            throw new \RuntimeException('ext-json: is not installed');
+        }
+
+        if ($depth < 1) {
+            $depth = 1;
+        }
+
+        return \json_encode($value, $options, $depth);
+    }
+
+    /**
+     * Checks whether JSON is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function json_loaded(): bool
+    {
+        return \function_exists('json_decode');
+    }
+
+    /**
+     * Makes string's first char lowercase.
+     *
+     * EXAMPLE: <code>UTF8::lcfirst('ÑTËRNÂTIÔNÀLIZÆTIØN'); // ñTËRNÂTIÔNÀLIZÆTIØN</code>
+     *
+     * @param string      $str                           <p>The input string</p>
+     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The resulting string.</p>
+     */
+    public static function lcfirst(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        $use_mb_functions = ($lang === null && !$try_to_keep_the_string_length);
+
+        if ($encoding === 'UTF-8') {
+            $str_part_two = (string) \mb_substr($str, 1);
+
+            if ($use_mb_functions) {
+                $str_part_one = \mb_strtolower(
+                    (string) \mb_substr($str, 0, 1)
+                );
+            } else {
+                $str_part_one = self::strtolower(
+                    (string) \mb_substr($str, 0, 1),
+                    $encoding,
+                    false,
+                    $lang,
+                    $try_to_keep_the_string_length
+                );
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $str_part_two = (string) self::substr($str, 1, null, $encoding);
+
+            $str_part_one = self::strtolower(
+                (string) self::substr($str, 0, 1, $encoding),
+                $encoding,
+                false,
+                $lang,
+                $try_to_keep_the_string_length
+            );
+        }
+
+        return $str_part_one . $str_part_two;
+    }
+
+    /**
+     * Lowercase for all words in the string.
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string[]    $exceptions                    [optional] <p>Exclusion for some words.</p>
+     * @param string      $char_list                     [optional] <p>Additional chars that contains to words and do
+     *                                                   not start a new word.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset.</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function lcwords(
+        string $str,
+        array $exceptions = [],
+        string $char_list = '',
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if (!$str) {
+            return '';
+        }
+
+        $words = self::str_to_words($str, $char_list);
+        $use_exceptions = $exceptions !== [];
+
+        $words_str = '';
+        foreach ($words as &$word) {
+            if (!$word) {
+                continue;
+            }
+
+            if (
+                !$use_exceptions
+                ||
+                !\in_array($word, $exceptions, true)
+            ) {
+                $words_str .= self::lcfirst($word, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
+            } else {
+                $words_str .= $word;
+            }
+        }
+
+        return $words_str;
+    }
+
+    /**
+     * Calculate Levenshtein distance between two strings.
+     *
+     * For better performance, in a real application with a single input string
+     * matched against many strings from a database, you will probably want to pre-
+     * encode the input only once and use \levenshtein().
+     *
+     * Source: https://github.com/KEINOS/mb_levenshtein
+     *
+     * @see https://www.php.net/manual/en/function.levenshtein
+     *
+     * @param string $str1            <p>One of the strings being evaluated for Levenshtein distance.</p>
+     * @param string $str2            <p>One of the strings being evaluated for Levenshtein distance.</p>
+     * @param int    $insertionCost   [optional] <p>Defines the cost of insertion.</p>
+     * @param int    $replacementCost [optional] <p>Defines the cost of replacement.</p>
+     * @param int    $deletionCost    [optional] <p>Defines the cost of deletion.</p>
+     *
+     * @return int
+     */
+    public static function levenshtein(
+        string $str1,
+        string $str2,
+        int $insertionCost = 1,
+        int $replacementCost = 1,
+        int $deletionCost = 1
+    ): int {
+        $result = ASCII::to_ascii_remap($str1, $str2);
+
+        return \levenshtein($result[0], $result[1], $insertionCost, $replacementCost, $deletionCost);
+    }
+
+    /**
+     * Strip whitespace or other characters from the beginning of a UTF-8 string.
+     *
+     * EXAMPLE: <code>UTF8::ltrim('　中文空白　 '); // '中文空白　 '</code>
+     *
+     * @param string      $str   <p>The string to be trimmed</p>
+     * @param string|null $chars <p>Optional characters to be stripped</p>
+     *
+     * @psalm-pure
+     *
+     * @return string the string with unwanted characters stripped from the left
+     */
+    public static function ltrim(string $str = '', string $chars = null): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($chars !== null) {
+                /** @noinspection PregQuoteUsageInspection */
+                $chars = \preg_quote($chars);
+                $pattern = "^[{$chars}]+";
+            } else {
+                $pattern = '^[\\s]+';
+            }
+
+            return (string) \mb_ereg_replace($pattern, '', $str);
+        }
+
+        if ($chars !== null) {
+            $chars = \preg_quote($chars, '/');
+            $pattern = "^[{$chars}]+";
+        } else {
+            $pattern = '^[\\s]+';
+        }
+
+        return self::regex_replace($str, $pattern, '');
+    }
+
+    /**
+     * Returns the UTF-8 character with the maximum code point in the given data.
+     *
+     * EXAMPLE: <code>UTF8::max('abc-äöü-中文空白'); // 'ø'</code>
+     *
+     * @param string|string[] $arg <p>A UTF-8 encoded string or an array of such strings.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string|null the character with the highest code point than others, returns null on failure or empty input
+     */
+    public static function max($arg)
+    {
+        if (\is_array($arg)) {
+            $arg = \implode('', $arg);
+        }
+
+        $codepoints = self::codepoints($arg);
+        if ($codepoints === []) {
+            return null;
+        }
+
+        $codepoint_max = \max($codepoints);
+
+        return self::chr((int) $codepoint_max);
+    }
+
+    /**
+     * Calculates and returns the maximum number of bytes taken by any
+     * UTF-8 encoded character in the given string.
+     *
+     * EXAMPLE: <code>UTF8::max_chr_width('Intërnâtiônàlizætiøn'); // 2</code>
+     *
+     * @param string $str <p>The original Unicode string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <p>Max byte lengths of the given chars.</p>
+     *
+     * @phpstan-return 0|1|2|3|4
+     */
+    public static function max_chr_width(string $str): int
+    {
+        $bytes = self::chr_size_list($str);
+        if ($bytes !== []) {
+            return (int) \max($bytes);
+        }
+
+        return 0;
+    }
+
+    /**
+     * Checks whether mbstring is available on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function mbstring_loaded(): bool
+    {
+        return \extension_loaded('mbstring');
+    }
+
+    /**
+     * Returns the UTF-8 character with the minimum code point in the given data.
+     *
+     * EXAMPLE: <code>UTF8::min('abc-äöü-中文空白'); // '-'</code>
+     *
+     * @param string|string[] $arg <strong>A UTF-8 encoded string or an array of such strings.</strong>
+     *
+     * @psalm-pure
+     *
+     * @return string|null
+     *                     <p>The character with the lowest code point than others, returns null on failure or empty input.</p>
+     */
+    public static function min($arg)
+    {
+        if (\is_array($arg)) {
+            $arg = \implode('', $arg);
+        }
+
+        $codepoints = self::codepoints($arg);
+        if ($codepoints === []) {
+            return null;
+        }
+
+        $codepoint_min = \min($codepoints);
+
+        return self::chr((int) $codepoint_min);
+    }
+
+    /**
+     * Normalize the encoding-"name" input.
+     *
+     * EXAMPLE: <code>UTF8::normalize_encoding('UTF8'); // 'UTF-8'</code>
+     *
+     * @param mixed $encoding <p>e.g.: ISO, UTF8, WINDOWS-1251 etc.</p>
+     * @param mixed $fallback <p>e.g.: UTF-8</p>
+     *
+     * @psalm-pure
+     *
+     * @return mixed|string
+     *                      <p>e.g.: ISO-8859-1, UTF-8, WINDOWS-1251 etc.<br>Will return a empty string as fallback (by default)</p>
+     *
+     * @template TNormalizeEncodingFallback
+     * @phpstan-param string|TNormalizeEncodingFallback $fallback
+     * @phpstan-return string|TNormalizeEncodingFallback
+     */
+    public static function normalize_encoding($encoding, $fallback = '')
+    {
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<string,string>
+         */
+        static $STATIC_NORMALIZE_ENCODING_CACHE = [];
+
+        // init
+        $encoding = (string) $encoding;
+
+        if (!$encoding) {
+            return $fallback;
+        }
+
+        if (
+            $encoding === 'UTF-8'
+            ||
+            $encoding === 'UTF8'
+        ) {
+            return 'UTF-8';
+        }
+
+        if (
+            $encoding === '8BIT'
+            ||
+            $encoding === 'BINARY'
+        ) {
+            return 'CP850';
+        }
+
+        if (
+            $encoding === 'HTML'
+            ||
+            $encoding === 'HTML-ENTITIES'
+        ) {
+            return 'HTML-ENTITIES';
+        }
+
+        if (
+            $encoding === 'ISO'
+            ||
+            $encoding === 'ISO-8859-1'
+        ) {
+            return 'ISO-8859-1';
+        }
+
+        // only a fallback, for non "strict_types" usage ...
+        if ($encoding === '1') {
+            return $fallback;
+        }
+
+        if (isset($STATIC_NORMALIZE_ENCODING_CACHE[$encoding])) {
+            return $STATIC_NORMALIZE_ENCODING_CACHE[$encoding];
+        }
+
+        if (self::$ENCODINGS === null) {
+            self::$ENCODINGS = self::getData('encodings');
+        }
+
+        if (\in_array($encoding, self::$ENCODINGS, true)) {
+            $STATIC_NORMALIZE_ENCODING_CACHE[$encoding] = $encoding;
+
+            return $encoding;
+        }
+
+        $encoding_original = $encoding;
+        $encoding = \strtoupper($encoding);
+        $encoding_upper_helper = (string) \preg_replace('/[^a-zA-Z0-9]/u', '', $encoding);
+
+        $equivalences = [
+            'ISO8859'     => 'ISO-8859-1',
+            'ISO88591'    => 'ISO-8859-1',
+            'ISO'         => 'ISO-8859-1',
+            'LATIN'       => 'ISO-8859-1',
+            'LATIN1'      => 'ISO-8859-1', // Western European
+            'ISO88592'    => 'ISO-8859-2',
+            'LATIN2'      => 'ISO-8859-2', // Central European
+            'ISO88593'    => 'ISO-8859-3',
+            'LATIN3'      => 'ISO-8859-3', // Southern European
+            'ISO88594'    => 'ISO-8859-4',
+            'LATIN4'      => 'ISO-8859-4', // Northern European
+            'ISO88595'    => 'ISO-8859-5',
+            'ISO88596'    => 'ISO-8859-6', // Greek
+            'ISO88597'    => 'ISO-8859-7',
+            'ISO88598'    => 'ISO-8859-8', // Hebrew
+            'ISO88599'    => 'ISO-8859-9',
+            'LATIN5'      => 'ISO-8859-9', // Turkish
+            'ISO885911'   => 'ISO-8859-11',
+            'TIS620'      => 'ISO-8859-11', // Thai
+            'ISO885910'   => 'ISO-8859-10',
+            'LATIN6'      => 'ISO-8859-10', // Nordic
+            'ISO885913'   => 'ISO-8859-13',
+            'LATIN7'      => 'ISO-8859-13', // Baltic
+            'ISO885914'   => 'ISO-8859-14',
+            'LATIN8'      => 'ISO-8859-14', // Celtic
+            'ISO885915'   => 'ISO-8859-15',
+            'LATIN9'      => 'ISO-8859-15', // Western European (with some extra chars e.g. €)
+            'ISO885916'   => 'ISO-8859-16',
+            'LATIN10'     => 'ISO-8859-16', // Southeast European
+            'CP1250'      => 'WINDOWS-1250',
+            'WIN1250'     => 'WINDOWS-1250',
+            'WINDOWS1250' => 'WINDOWS-1250',
+            'CP1251'      => 'WINDOWS-1251',
+            'WIN1251'     => 'WINDOWS-1251',
+            'WINDOWS1251' => 'WINDOWS-1251',
+            'CP1252'      => 'WINDOWS-1252',
+            'WIN1252'     => 'WINDOWS-1252',
+            'WINDOWS1252' => 'WINDOWS-1252',
+            'CP1253'      => 'WINDOWS-1253',
+            'WIN1253'     => 'WINDOWS-1253',
+            'WINDOWS1253' => 'WINDOWS-1253',
+            'CP1254'      => 'WINDOWS-1254',
+            'WIN1254'     => 'WINDOWS-1254',
+            'WINDOWS1254' => 'WINDOWS-1254',
+            'CP1255'      => 'WINDOWS-1255',
+            'WIN1255'     => 'WINDOWS-1255',
+            'WINDOWS1255' => 'WINDOWS-1255',
+            'CP1256'      => 'WINDOWS-1256',
+            'WIN1256'     => 'WINDOWS-1256',
+            'WINDOWS1256' => 'WINDOWS-1256',
+            'CP1257'      => 'WINDOWS-1257',
+            'WIN1257'     => 'WINDOWS-1257',
+            'WINDOWS1257' => 'WINDOWS-1257',
+            'CP1258'      => 'WINDOWS-1258',
+            'WIN1258'     => 'WINDOWS-1258',
+            'WINDOWS1258' => 'WINDOWS-1258',
+            'UTF16'       => 'UTF-16',
+            'UTF32'       => 'UTF-32',
+            'UTF8'        => 'UTF-8',
+            'UTF'         => 'UTF-8',
+            'UTF7'        => 'UTF-7',
+            '8BIT'        => 'CP850',
+            'BINARY'      => 'CP850',
+        ];
+
+        if (!empty($equivalences[$encoding_upper_helper])) {
+            $encoding = $equivalences[$encoding_upper_helper];
+        }
+
+        $STATIC_NORMALIZE_ENCODING_CACHE[$encoding_original] = $encoding;
+
+        return $encoding;
+    }
+
+    /**
+     * Standardize line ending to unix-like.
+     *
+     * @param string          $str      <p>The input string.</p>
+     * @param string|string[] $replacer <p>The replacer char e.g. "\n" (Linux) or "\r\n" (Windows). You can also use \PHP_EOL
+     *                                  here.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with normalized line ending.</p>
+     */
+    public static function normalize_line_ending(string $str, $replacer = "\n"): string
+    {
+        return \str_replace(["\r\n", "\r", "\n"], $replacer, $str);
+    }
+
+    /**
+     * Normalize some MS Word special characters.
+     *
+     * EXAMPLE: <code>UTF8::normalize_msword('„Abcdef…”'); // '"Abcdef..."'</code>
+     *
+     * @param string $str <p>The string to be normalized.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with normalized characters for commonly used chars in Word documents.</p>
+     */
+    public static function normalize_msword(string $str): string
+    {
+        return ASCII::normalize_msword($str);
+    }
+
+    /**
+     * Normalize the whitespace.
+     *
+     * EXAMPLE: <code>UTF8::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -"</code>
+     *
+     * @param string $str                          <p>The string to be normalized.</p>
+     * @param bool   $keep_non_breaking_space      [optional] <p>Set to true, to keep non-breaking-spaces.</p>
+     * @param bool   $keep_bidi_unicode_controls   [optional] <p>Set to true, to keep non-printable (for the web)
+     *                                             bidirectional text chars.</p>
+     * @param bool   $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with normalized whitespace.</p>
+     */
+    public static function normalize_whitespace(
+        string $str,
+        bool $keep_non_breaking_space = false,
+        bool $keep_bidi_unicode_controls = false,
+        bool $normalize_control_characters = false
+    ): string {
+        return ASCII::normalize_whitespace(
+            $str,
+            $keep_non_breaking_space,
+            $keep_bidi_unicode_controls,
+            $normalize_control_characters
+        );
+    }
+
+    /**
+     * Calculates Unicode code point of the given UTF-8 encoded character.
+     *
+     * INFO: opposite to UTF8::chr()
+     *
+     * EXAMPLE: <code>UTF8::ord('☃'); // 0x2603</code>
+     *
+     * @param string $chr      <p>The character of which to calculate code point.<p/>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <p>Unicode code point of the given character,<br>
+     *             0 on invalid UTF-8 byte sequence</p>
+     */
+    public static function ord($chr, string $encoding = 'UTF-8'): int
+    {
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<string,int>
+         */
+        static $CHAR_CACHE = [];
+
+        // init
+        $chr = (string) $chr;
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        $cache_key = $chr . '_' . $encoding;
+        if (isset($CHAR_CACHE[$cache_key])) {
+            return $CHAR_CACHE[$cache_key];
+        }
+
+        // check again, if it's still not UTF-8
+        if ($encoding !== 'UTF-8') {
+            $chr = self::encode($encoding, $chr);
+        }
+
+        if (self::$ORD === null) {
+            self::$ORD = self::getData('ord');
+        }
+
+        if (isset(self::$ORD[$chr])) {
+            return $CHAR_CACHE[$cache_key] = self::$ORD[$chr];
+        }
+
+        //
+        // fallback via "IntlChar"
+        //
+
+        if (self::$SUPPORT['intlChar'] === true) {
+            $code = \IntlChar::ord($chr);
+            if ($code) {
+                return $CHAR_CACHE[$cache_key] = $code;
+            }
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $chr = \unpack('C*', (string) \substr($chr, 0, 4));
+        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
+        /** @var int[] $chr - "unpack": only false if the format string contains errors */
+        $chr = $chr;
+        $code = $chr ? $chr[1] : 0;
+
+        if ($code >= 0xF0 && isset($chr[4])) {
+            return $CHAR_CACHE[$cache_key] = ((($code - 0xF0) << 18) + (($chr[2] - 0x80) << 12) + (($chr[3] - 0x80) << 6) + $chr[4] - 0x80);
+        }
+
+        if ($code >= 0xE0 && isset($chr[3])) {
+            return $CHAR_CACHE[$cache_key] = ((($code - 0xE0) << 12) + (($chr[2] - 0x80) << 6) + $chr[3] - 0x80);
+        }
+
+        if ($code >= 0xC0 && isset($chr[2])) {
+            return $CHAR_CACHE[$cache_key] = ((($code - 0xC0) << 6) + $chr[2] - 0x80);
+        }
+
+        return $CHAR_CACHE[$cache_key] = $code;
+    }
+
+    /**
+     * Parses the string into an array (into the the second parameter).
+     *
+     * WARNING: Unlike "parse_str()", this method does not (re-)place variables in the current scope,
+     *          if the second parameter is not set!
+     *
+     * EXAMPLE: <code>
+     * UTF8::parse_str('Iñtërnâtiônéàlizætiøn=測試&arr[]=foo+測試&arr[]=ການທົດສອບ', $array);
+     * echo $array['Iñtërnâtiônéàlizætiøn']; // '測試'
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.parse-str.php
+     *
+     * @param string               $str        <p>The input string.</p>
+     * @param array<string, mixed> $result     <p>The result will be returned into this reference parameter.</p>
+     * @param bool                 $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Will return <strong>false</strong> if php can't parse the string and we haven't any $result.</p>
+     */
+    public static function parse_str(string $str, &$result, bool $clean_utf8 = false): bool
+    {
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            $return = \mb_parse_str($str, $result);
+
+            return $return !== false && $result !== [];
+        }
+
+        /**
+         * @psalm-suppress ImpureFunctionCall - we use the second parameter, so we don't change variables by magic
+         */
+        \parse_str($str, $result);
+
+        return $result !== [];
+    }
+
+    /**
+     * Checks if \u modifier is available that enables Unicode support in PCRE.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>
+     *              <strong>true</strong> if support is available,<br>
+     *              <strong>false</strong> otherwise
+     *              </p>
+     */
+    public static function pcre_utf8_support(): bool
+    {
+        /** @noinspection PhpUsageOfSilenceOperatorInspection */
+        return (bool) @\preg_match('//u', '');
+    }
+
+    /**
+     * Create an array containing a range of UTF-8 characters.
+     *
+     * EXAMPLE: <code>UTF8::range('κ', 'ζ'); // array('κ', 'ι', 'θ', 'η', 'ζ',)</code>
+     *
+     * @param int|string $var1      <p>Numeric or hexadecimal code points, or a UTF-8 character to start from.</p>
+     * @param int|string $var2      <p>Numeric or hexadecimal code points, or a UTF-8 character to end at.</p>
+     * @param bool       $use_ctype <p>use ctype to detect numeric and hexadecimal, otherwise we will use a simple
+     *                              "is_numeric"</p>
+     * @param string     $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param float|int  $step      [optional] <p>
+     *                              If a step value is given, it will be used as the
+     *                              increment between elements in the sequence. step
+     *                              should be given as a positive number. If not specified,
+     *                              step will default to 1.
+     *                              </p>
+     *
+     * @psalm-pure
+     *
+     * @return list<string>
+     */
+    public static function range(
+        $var1,
+        $var2,
+        bool $use_ctype = true,
+        string $encoding = 'UTF-8',
+        $step = 1
+    ): array {
+        if (!$var1 || !$var2) {
+            return [];
+        }
+
+        if ($step !== 1) {
+            /**
+             * @psalm-suppress RedundantConditionGivenDocblockType
+             * @psalm-suppress DocblockTypeContradiction
+             * @phpstan-ignore-next-line | ignore wrong inputs
+             */
+            if (!\is_numeric($step)) {
+                throw new \InvalidArgumentException('$step need to be a number, type given: ' . \gettype($step));
+            }
+
+            /**
+             * @psalm-suppress RedundantConditionGivenDocblockType - false-positive from psalm?
+             */
+            if ($step <= 0) {
+                throw new \InvalidArgumentException('$step need to be a positive number, given: ' . $step);
+            }
+        }
+
+        if ($use_ctype && self::$SUPPORT['ctype'] === false) {
+            throw new \RuntimeException('ext-ctype: is not installed');
+        }
+
+        $is_digit = false;
+        $is_xdigit = false;
+
+        if ($use_ctype && \ctype_digit((string) $var1) && \ctype_digit((string) $var2)) {
+            $is_digit = true;
+            $start = (int) $var1;
+        } elseif ($use_ctype && \ctype_xdigit($var1) && \ctype_xdigit($var2)) {
+            $is_xdigit = true;
+            $start = (int) self::hex_to_int((string) $var1);
+        } elseif (!$use_ctype && \is_numeric($var1)) {
+            $start = (int) $var1;
+        } else {
+            $start = self::ord((string) $var1);
+        }
+
+        if (!$start) {
+            return [];
+        }
+
+        if ($is_digit) {
+            $end = (int) $var2;
+        } elseif ($is_xdigit) {
+            $end = (int) self::hex_to_int((string) $var2);
+        } elseif (!$use_ctype && \is_numeric($var2)) {
+            $end = (int) $var2;
+        } else {
+            $end = self::ord((string) $var2);
+        }
+
+        if (!$end) {
+            return [];
+        }
+
+        $array = [];
+        foreach (\range($start, $end, $step) as $i) {
+            $array[] = (string) self::chr((int) $i, $encoding);
+        }
+
+        return $array;
+    }
+
+    /**
+     * Get data from an array via array like string.
+     *
+     * EXAMPLE: <code>$array['foo'][123] = 'lall'; UTF8::getUrlParamFromArray('foo[123]', $array); // 'lall'</code>
+     *
+     * @param array<array-key, mixed> $data
+     *
+     * @return mixed
+     */
+    public static function getUrlParamFromArray(string $param, array $data)
+    {
+        /**
+         * @param array<array-key, mixed> $searchArray
+         * @param array<array-key, mixed> $array
+         *
+         * @return mixed
+         */
+        $getUrlArgFromArrayHelper = static function (array $searchArray, array $array) use (&$getUrlArgFromArrayHelper) {
+            foreach ($searchArray as $key => $value) {
+                if (isset($array[$key])) {
+                    if (\is_array($value) && \is_array($array[$key])) {
+                        return $getUrlArgFromArrayHelper($value, $array[$key]);
+                    }
+
+                    return $array[$key];
+                }
+            }
+
+            return null;
+        };
+
+        /**
+         * @param string $string
+         * @return array|null
+         */
+        $getUrlKeyArgsFromString = static function (string $string) {
+            if (!self::str_contains($string, '?')) {
+                $string = '?' . $string;
+            }
+
+            $args = parse_url($string, PHP_URL_QUERY);
+            if ($args) {
+                $query = [];
+                parse_str($args, $query);
+
+                return $query;
+            }
+
+            return null;
+        };
+
+        if (isset($data[$param])) {
+            return $data[$param];
+        }
+
+        $paramKeys = $getUrlKeyArgsFromString($param);
+        if ($paramKeys !== null) {
+            return $getUrlArgFromArrayHelper($paramKeys, $data);
+        }
+
+        return null;
+    }
+
+    /**
+     * Multi decode HTML entity + fix urlencoded-win1252-chars.
+     *
+     * EXAMPLE: <code>UTF8::rawurldecode('tes%20öäü%20\u00edtest+test'); // 'tes öäü ítest+test'</code>
+     *
+     * e.g:
+     * 'test+test'                     => 'test+test'
+     * 'D&#252;sseldorf'               => 'Düsseldorf'
+     * 'D%FCsseldorf'                  => 'Düsseldorf'
+     * 'D&#xFC;sseldorf'               => 'Düsseldorf'
+     * 'D%26%23xFC%3Bsseldorf'         => 'Düsseldorf'
+     * 'DÃ¼sseldorf'                   => 'Düsseldorf'
+     * 'D%C3%BCsseldorf'               => 'Düsseldorf'
+     * 'D%C3%83%C2%BCsseldorf'         => 'Düsseldorf'
+     * 'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'
+     *
+     * @param string $str          <p>The input string.</p>
+     * @param bool   $multi_decode <p>Decode as often as possible.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The decoded URL, as a string.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function rawurldecode(string $str, bool $multi_decode = true): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        $str = self::urldecode_unicode_helper($str);
+
+        if ($multi_decode) {
+            do {
+                $str_compare = $str;
+
+                /**
+                 * @psalm-suppress PossiblyInvalidArgument
+                 */
+                $str = \rawurldecode(
+                    self::html_entity_decode(
+                        self::to_utf8($str),
+                        \ENT_QUOTES | \ENT_HTML5
+                    )
+                );
+            } while ($str_compare !== $str);
+        } else {
+            /**
+             * @psalm-suppress PossiblyInvalidArgument
+             */
+            $str = \rawurldecode(
+                self::html_entity_decode(
+                    self::to_utf8($str),
+                    \ENT_QUOTES | \ENT_HTML5
+                )
+            );
+        }
+
+        return self::fix_simple_utf8($str);
+    }
+
+    /**
+     * Replaces all occurrences of $pattern in $str by $replacement.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $pattern     <p>The regular expression pattern.</p>
+     * @param string $replacement <p>The string to replace with.</p>
+     * @param string $options     [optional] <p>Matching conditions to be used.</p>
+     * @param string $delimiter   [optional] <p>Delimiter the the regex. Default: '/'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function regex_replace(
+        string $str,
+        string $pattern,
+        string $replacement,
+        string $options = '',
+        string $delimiter = '/'
+    ): string {
+        if ($options === 'msr') {
+            $options = 'ms';
+        }
+
+        // fallback
+        if (!$delimiter) {
+            $delimiter = '/';
+        }
+
+        return (string) \preg_replace(
+            $delimiter . $pattern . $delimiter . 'u' . $options,
+            $replacement,
+            $str
+        );
+    }
+
+    /**
+     * Remove the BOM from UTF-8 / UTF-16 / UTF-32 strings.
+     *
+     * EXAMPLE: <code>UTF8::remove_bom("\xEF\xBB\xBFΜπορώ να"); // 'Μπορώ να'</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without UTF-BOM.</p>
+     */
+    public static function remove_bom(string $str): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        $str_length = \strlen($str);
+        foreach (self::$BOM as $bom_string => $bom_byte_length) {
+            if (\strncmp($str, $bom_string, $bom_byte_length) === 0) {
+                /** @var false|string $str_tmp - needed for PhpStan (stubs error) */
+                $str_tmp = \substr($str, $bom_byte_length, $str_length);
+                if ($str_tmp === false) {
+                    return '';
+                }
+
+                $str_length -= $bom_byte_length;
+
+                $str = (string) $str_tmp;
+            }
+        }
+
+        return $str;
+    }
+
+    /**
+     * Removes duplicate occurrences of a string in another string.
+     *
+     * EXAMPLE: <code>UTF8::remove_duplicates('öäü-κόσμεκόσμε-äöü', 'κόσμε'); // 'öäü-κόσμε-äöü'</code>
+     *
+     * @param string          $str  <p>The base string.</p>
+     * @param string|string[] $what <p>String to search for in the base string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with removed duplicates.</p>
+     */
+    public static function remove_duplicates(string $str, $what = ' '): string
+    {
+        if (\is_string($what)) {
+            $what = [$what];
+        }
+
+        /**
+         * @psalm-suppress RedundantConditionGivenDocblockType
+         * @phpstan-ignore-next-line | ignore wrong inputs
+         */
+        if (\is_array($what)) {
+            foreach ($what as $item) {
+                $str = (string) \preg_replace('/(' . \preg_quote($item, '/') . ')+/u', $item, $str);
+            }
+        }
+
+        return $str;
+    }
+
+    /**
+     * Remove html via "strip_tags()" from the string.
+     *
+     * @param string $str            <p>The input string.</p>
+     * @param string $allowable_tags [optional] <p>You can use the optional second parameter to specify tags which
+     *                               should not be stripped. Default: null
+     *                               </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with without html tags.</p>
+     */
+    public static function remove_html(string $str, string $allowable_tags = ''): string
+    {
+        return \strip_tags($str, $allowable_tags);
+    }
+
+    /**
+     * Remove all breaks [<br> | \r\n | \r | \n | ...] from the string.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $replacement [optional] <p>Default is a empty string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without breaks.</p>
+     */
+    public static function remove_html_breaks(string $str, string $replacement = ''): string
+    {
+        return (string) \preg_replace("#/\r\n|\r|\n|<br.*/?>#isU", $replacement, $str);
+    }
+
+    /**
+     * Remove invisible characters from a string.
+     *
+     * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script.
+     *
+     * EXAMPLE: <code>UTF8::remove_invisible_characters("κόσ\0με"); // 'κόσμε'</code>
+     *
+     * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php
+     *
+     * @param string $str                           <p>The input string.</p>
+     * @param bool   $url_encoded                   [optional] <p>
+     *                                              Try to remove url encoded control character.
+     *                                              WARNING: maybe contains false-positives e.g. aa%0Baa -> aaaa.
+     *                                              <br>
+     *                                              Default: false
+     *                                              </p>
+     * @param string $replacement                   [optional] <p>The replacement character.</p>
+     * @param bool   $keep_basic_control_characters [optional] <p>Keep control characters like [LRM] or [LSEP].</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without invisible chars.</p>
+     */
+    public static function remove_invisible_characters(
+        string $str,
+        bool $url_encoded = false,
+        string $replacement = '',
+        bool $keep_basic_control_characters = true
+    ): string {
+        return ASCII::remove_invisible_characters(
+            $str,
+            $url_encoded,
+            $replacement,
+            $keep_basic_control_characters
+        );
+    }
+
+    /**
+     * Returns a new string with the prefix $substring removed, if present.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $substring <p>The prefix to remove.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without the prefix $substring.</p>
+     */
+    public static function remove_left(
+        string $str,
+        string $substring,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $substring
+            &&
+            \strpos($str, $substring) === 0
+        ) {
+            if ($encoding === 'UTF-8') {
+                return (string) \mb_substr(
+                    $str,
+                    (int) \mb_strlen($substring)
+                );
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return (string) self::substr(
+                $str,
+                (int) self::strlen($substring, $encoding),
+                null,
+                $encoding
+            );
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns a new string with the suffix $substring removed, if present.
+     *
+     * @param string $str
+     * @param string $substring <p>The suffix to remove.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string having a $str without the suffix $substring.</p>
+     */
+    public static function remove_right(
+        string $str,
+        string $substring,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($substring && \substr($str, -\strlen($substring)) === $substring) {
+            if ($encoding === 'UTF-8') {
+                return (string) \mb_substr(
+                    $str,
+                    0,
+                    (int) \mb_strlen($str) - (int) \mb_strlen($substring)
+                );
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return (string) self::substr(
+                $str,
+                0,
+                (int) self::strlen($str, $encoding) - (int) self::strlen($substring, $encoding),
+                $encoding
+            );
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns a new string with the suffix $substring removed, if present and case-insensitive.
+     *
+     * @param string $str
+     * @param string $substring <p>The suffix to remove.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string having a $str without the suffix $substring.</p>
+     */
+    public static function remove_iright(
+        string $str,
+        string $substring,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($substring && self::strtoupper(\substr($str, -\strlen($substring)), $encoding) === self::strtoupper($substring, $encoding)) {
+            if ($encoding === 'UTF-8') {
+                return (string) \mb_substr(
+                    $str,
+                    0,
+                    (int) \mb_strlen($str) - (int) \mb_strlen($substring)
+                );
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return (string) self::substr(
+                $str,
+                0,
+                (int) self::strlen($str, $encoding) - (int) self::strlen($substring, $encoding),
+                $encoding
+            );
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns a new string with the prefix $substring removed, if present and case-insensitive.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $substring <p>The prefix to remove.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without the prefix $substring.</p>
+     */
+    public static function remove_ileft(
+        string $str,
+        string $substring,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $substring
+            &&
+            \strpos(self::strtoupper($str, $encoding), self::strtoupper($substring, $encoding)) === 0
+        ) {
+            if ($encoding === 'UTF-8') {
+                return (string) \mb_substr(
+                    $str,
+                    (int) \mb_strlen($substring)
+                );
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return (string) self::substr(
+                $str,
+                (int) self::strlen($substring, $encoding),
+                null,
+                $encoding
+            );
+        }
+
+        return $str;
+    }
+
+    /**
+     * Replaces all occurrences of $search in $str by $replacement.
+     *
+     * @param string $str            <p>The input string.</p>
+     * @param string $search         <p>The needle to search for.</p>
+     * @param string $replacement    <p>The string to replace with.</p>
+     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with replaced parts.</p>
+     */
+    public static function replace(
+        string $str,
+        string $search,
+        string $replacement,
+        bool $case_sensitive = true
+    ): string {
+        if ($case_sensitive) {
+            return \str_replace($search, $replacement, $str);
+        }
+
+        return self::str_ireplace($search, $replacement, $str);
+    }
+
+    /**
+     * Replaces all occurrences of $search in $str by $replacement.
+     *
+     * @param string          $str            <p>The input string.</p>
+     * @param string[]        $search         <p>The elements to search for.</p>
+     * @param string|string[] $replacement    <p>The string to replace with.</p>
+     * @param bool            $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with replaced parts.</p>
+     */
+    public static function replace_all(
+        string $str,
+        array $search,
+        $replacement,
+        bool $case_sensitive = true
+    ): string {
+        if ($case_sensitive) {
+            return \str_replace($search, $replacement, $str);
+        }
+
+        return self::str_ireplace($search, $replacement, $str);
+    }
+
+    /**
+     * Replace the diamond question mark (�) and invalid-UTF8 chars with the replacement.
+     *
+     * EXAMPLE: <code>UTF8::replace_diamond_question_mark('中文空白�', ''); // '中文空白'</code>
+     *
+     * @param string $str                        <p>The input string</p>
+     * @param string $replacement_char           <p>The replacement character.</p>
+     * @param bool   $process_invalid_utf8_chars <p>Convert invalid UTF-8 chars </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string without diamond question marks (�).</p>
+     */
+    public static function replace_diamond_question_mark(
+        string $str,
+        string $replacement_char = '',
+        bool $process_invalid_utf8_chars = true
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($process_invalid_utf8_chars) {
+            if ($replacement_char === '') {
+                $replacement_char_helper = 'none';
+            } else {
+                $replacement_char_helper = \ord($replacement_char);
+            }
+
+            if (self::$SUPPORT['mbstring'] === false) {
+                // if there is no native support for "mbstring",
+                // then we need to clean the string before ...
+                $str = self::clean($str);
+            }
+
+            /**
+             * @psalm-suppress ImpureFunctionCall - we will reset the value in the next step
+             */
+            $save = \mb_substitute_character();
+            /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore "Unknown character" warnings, it's working anyway */
+            @\mb_substitute_character($replacement_char_helper);
+            // the polyfill maybe return false, so cast to string
+            $str = (string) \mb_convert_encoding($str, 'UTF-8', 'UTF-8');
+            \mb_substitute_character($save);
+        }
+
+        return \str_replace(
+            [
+                "\xEF\xBF\xBD",
+                '�',
+            ],
+            [
+                $replacement_char,
+                $replacement_char,
+            ],
+            $str
+        );
+    }
+
+    /**
+     * Strip whitespace or other characters from the end of a UTF-8 string.
+     *
+     * EXAMPLE: <code>UTF8::rtrim('-ABC-中文空白-  '); // '-ABC-中文空白-'</code>
+     *
+     * @param string      $str   <p>The string to be trimmed.</p>
+     * @param string|null $chars <p>Optional characters to be stripped.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with unwanted characters stripped from the right.</p>
+     */
+    public static function rtrim(string $str = '', string $chars = null): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($chars !== null) {
+                /** @noinspection PregQuoteUsageInspection */
+                $chars = \preg_quote($chars);
+                $pattern = "[{$chars}]+$";
+            } else {
+                $pattern = '[\\s]+$';
+            }
+
+            return (string) \mb_ereg_replace($pattern, '', $str);
+        }
+
+        if ($chars !== null) {
+            $chars = \preg_quote($chars, '/');
+            $pattern = "[{$chars}]+$";
+        } else {
+            $pattern = '[\\s]+$';
+        }
+
+        return self::regex_replace($str, $pattern, '');
+    }
+
+    /**
+     * WARNING: Print native UTF-8 support (libs) by default, e.g. for debugging.
+     *
+     * @param bool $useEcho
+     *
+     * @psalm-pure
+     *
+     * @return string|void
+     *
+     * @phpstan-return ($useEcho is true ? void : string)
+     */
+    public static function showSupport(bool $useEcho = true)
+    {
+        // init
+        $html = '';
+
+        $html .= '<pre>';
+        foreach (self::$SUPPORT as $key => &$value) {
+            $html .= $key . ' - ' . \print_r($value, true) . "\n<br>";
+        }
+        $html .= '</pre>';
+
+        if ($useEcho) {
+            echo $html;
+        }
+
+        return $html;
+    }
+
+    /**
+     * Converts a UTF-8 character to HTML Numbered Entity like "&#123;".
+     *
+     * EXAMPLE: <code>UTF8::single_chr_html_encode('κ'); // '&#954;'</code>
+     *
+     * @param string $char             <p>The Unicode character to be encoded as numbered entity.</p>
+     * @param bool   $keep_ascii_chars <p>Set to <strong>true</strong> to keep ASCII chars.</>
+     * @param string $encoding         [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The HTML numbered entity for the given character.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $char
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function single_chr_html_encode(
+        string $char,
+        bool $keep_ascii_chars = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($char === '') {
+            return '';
+        }
+
+        if (
+            $keep_ascii_chars
+            &&
+            ASCII::is_ascii($char)
+        ) {
+            return $char;
+        }
+
+        return '&#' . self::ord($char, $encoding) . ';';
+    }
+
+    /**
+     * @param string      $str
+     * @param int<1, max> $tab_length
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function spaces_to_tabs(string $str, int $tab_length = 4): string
+    {
+        if ($tab_length === 4) {
+            $tab = '    ';
+        } elseif ($tab_length === 2) {
+            $tab = '  ';
+        } else {
+            $tab = \str_repeat(' ', $tab_length);
+        }
+
+        return \str_replace($tab, "\t", $str);
+    }
+
+    /**
+     * Returns a camelCase version of the string. Trims surrounding spaces,
+     * capitalizes letters following digits, spaces, dashes and underscores,
+     * and removes spaces, dashes, as well as underscores.
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string      $encoding                      [optional] <p>Default: 'UTF-8'</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_camelize(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        $str = self::lcfirst(
+            \trim($str),
+            $encoding,
+            false,
+            $lang,
+            $try_to_keep_the_string_length
+        );
+        $str = (string) \preg_replace('/^[-_]+/', '', $str);
+
+        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
+
+        $str = (string) \preg_replace_callback(
+            '/[-_\\s]+(.)?/u',
+            /**
+             * @param array $match
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $match) use ($use_mb_functions, $encoding, $lang, $try_to_keep_the_string_length): string {
+                if (isset($match[1])) {
+                    if ($use_mb_functions) {
+                        if ($encoding === 'UTF-8') {
+                            return \mb_strtoupper($match[1]);
+                        }
+
+                        return \mb_strtoupper($match[1], $encoding);
+                    }
+
+                    return self::strtoupper($match[1], $encoding, false, $lang, $try_to_keep_the_string_length);
+                }
+
+                return '';
+            },
+            $str
+        );
+
+        return (string) \preg_replace_callback(
+            '/[\\p{N}]+(.)?/u',
+            /**
+             * @param array $match
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $match) use ($use_mb_functions, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length): string {
+                if ($use_mb_functions) {
+                    if ($encoding === 'UTF-8') {
+                        return \mb_strtoupper($match[0]);
+                    }
+
+                    return \mb_strtoupper($match[0], $encoding);
+                }
+
+                return self::strtoupper($match[0], $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
+            },
+            $str
+        );
+    }
+
+    /**
+     * Returns the string with the first letter of each word capitalized,
+     * except for when the word is a name which shouldn't be capitalized.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with $str capitalized.</p>
+     */
+    public static function str_capitalize_name(string $str): string
+    {
+        return self::str_capitalize_name_helper(
+            self::str_capitalize_name_helper(
+                self::collapse_whitespace($str),
+                ' '
+            ),
+            '-'
+        );
+    }
+
+    /**
+     * Returns true if the string contains $needle, false otherwise. By default
+     * the comparison is case-sensitive, but can be made insensitive by setting
+     * $case_sensitive to false.
+     *
+     * @param string $haystack       <p>The input string.</p>
+     * @param string $needle         <p>Substring to look for.</p>
+     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $haystack contains $needle.</p>
+     */
+    public static function str_contains(
+        string $haystack,
+        string $needle,
+        bool $case_sensitive = true
+    ): bool {
+        if ($case_sensitive) {
+            if (\PHP_VERSION_ID >= 80000) {
+                /** @phpstan-ignore-next-line - only for PHP8 */
+                return \str_contains($haystack, $needle);
+            }
+
+            return \strpos($haystack, $needle) !== false;
+        }
+
+        return \mb_stripos($haystack, $needle) !== false;
+    }
+
+    /**
+     * Returns true if the string contains all $needles, false otherwise. By
+     * default, the comparison is case-sensitive, but can be made insensitive by
+     * setting $case_sensitive to false.
+     *
+     * @param string   $haystack       <p>The input string.</p>
+     * @param scalar[] $needles        <p>SubStrings to look for.</p>
+     * @param bool     $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $haystack contains $needle.</p>
+     */
+    public static function str_contains_all(
+        string $haystack,
+        array $needles,
+        bool $case_sensitive = true
+    ): bool {
+        if ($haystack === '' || $needles === []) {
+            return false;
+        }
+
+        foreach ($needles as &$needle) {
+            if (
+                $case_sensitive
+                &&
+                (!$needle || \strpos($haystack, (string)$needle) === false)
+            ) {
+                return false;
+            }
+
+            if (!$needle || \mb_stripos($haystack, (string) $needle) === false) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns true if the string contains any $needles, false otherwise. By
+     * default the comparison is case-sensitive, but can be made insensitive by
+     * setting $case_sensitive to false.
+     *
+     * @param string   $haystack       <p>The input string.</p>
+     * @param scalar[] $needles        <p>SubStrings to look for.</p>
+     * @param bool     $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str contains $needle.</p>
+     */
+    public static function str_contains_any(
+        string $haystack,
+        array $needles,
+        bool $case_sensitive = true
+    ): bool {
+        if ($haystack === '' || $needles === []) {
+            return false;
+        }
+
+        foreach ($needles as &$needle) {
+            if (!$needle) {
+                continue;
+            }
+
+            if ($case_sensitive) {
+                if (\strpos($haystack, (string) $needle) !== false) {
+                    return true;
+                }
+
+                continue;
+            }
+
+            if (\mb_stripos($haystack, (string) $needle) !== false) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a lowercase and trimmed string separated by dashes. Dashes are
+     * inserted before uppercase characters (with the exception of the first
+     * character of the string), and in place of spaces as well as underscores.
+     *
+     * @param string $str      <p>The input string.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_dasherize(string $str, string $encoding = 'UTF-8'): string
+    {
+        return self::str_delimit($str, '-', $encoding);
+    }
+
+    /**
+     * Returns a lowercase and trimmed string separated by the given delimiter.
+     *
+     * Delimiters are inserted before uppercase characters (with the exception
+     * of the first character of the string), and in place of spaces, dashes,
+     * and underscores. Alpha delimiters are not converted to lowercase.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_delimit('test case, '#'); // 'test#case'
+     * UTF8::str_delimit('test -case', '**'); // 'test**case'
+     * </code>
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string      $delimiter                     <p>Sequence used to separate parts of the string.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ ->
+     *                                                   ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_delimit(
+        string $str,
+        string $delimiter,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if (self::$SUPPORT['mbstring'] === true) {
+            $str = (string) \mb_ereg_replace('\\B(\\p{Lu})', '-\1', \trim($str));
+
+            $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
+            if ($use_mb_functions && $encoding === 'UTF-8') {
+                $str = \mb_strtolower($str);
+            } else {
+                $str = self::strtolower($str, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
+            }
+
+            return (string) \mb_ereg_replace('[\\-_\\s]+', $delimiter, $str);
+        }
+
+        $str = (string) \preg_replace('/\\B(\\p{Lu})/u', '-\1', \trim($str));
+
+        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
+        if ($use_mb_functions && $encoding === 'UTF-8') {
+            $str = \mb_strtolower($str);
+        } else {
+            $str = self::strtolower($str, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
+        }
+
+        return (string) \preg_replace('/[\\-_\\s]+/u', $delimiter, $str);
+    }
+
+    /**
+     * Optimized "mb_detect_encoding()"-function -> with support for UTF-16 and UTF-32.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_detect_encoding('中文空白'); // 'UTF-8'
+     * UTF8::str_detect_encoding('Abc'); // 'ASCII'
+     * </code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>
+     *                      The detected string-encoding e.g. UTF-8 or UTF-16BE,<br>
+     *                      otherwise it will return false e.g. for BINARY or not detected encoding.
+     *                      </p>
+     */
+    public static function str_detect_encoding($str)
+    {
+        // init
+        $str = (string) $str;
+
+        //
+        // 1.) check binary strings (010001001...) like UTF-16 / UTF-32 / PDF / Images / ...
+        //
+
+        if (self::is_binary($str, self::string_has_bom($str) ? false : true)) {
+            $is_utf32 = self::is_utf32($str, false);
+            if ($is_utf32 === 1) {
+                return 'UTF-32LE';
+            }
+            if ($is_utf32 === 2) {
+                return 'UTF-32BE';
+            }
+
+            $is_utf16 = self::is_utf16($str, false);
+            if ($is_utf16 === 1) {
+                return 'UTF-16LE';
+            }
+            if ($is_utf16 === 2) {
+                return 'UTF-16BE';
+            }
+
+            // is binary but not "UTF-16" or "UTF-32"
+            return false;
+        }
+
+        //
+        // 2.) simple check for ASCII chars
+        //
+
+        if (ASCII::is_ascii($str)) {
+            return 'ASCII';
+        }
+
+        //
+        // 3.) simple check for UTF-8 chars
+        //
+
+        if (self::is_utf8_string($str)) {
+            return 'UTF-8';
+        }
+
+        //
+        // 4.) check via "mb_detect_encoding()"
+        //
+        // INFO: UTF-16, UTF-32, UCS2 and UCS4, encoding detection will fail always with "mb_detect_encoding()"
+
+        $encoding_detecting_order = [
+            'ISO-8859-1',
+            'ISO-8859-2',
+            'ISO-8859-3',
+            'ISO-8859-4',
+            'ISO-8859-5',
+            'ISO-8859-6',
+            'ISO-8859-7',
+            'ISO-8859-8',
+            'ISO-8859-9',
+            'ISO-8859-10',
+            'ISO-8859-13',
+            'ISO-8859-14',
+            'ISO-8859-15',
+            'ISO-8859-16',
+            'WINDOWS-1251',
+            'WINDOWS-1252',
+            'WINDOWS-1254',
+            'CP932',
+            'CP936',
+            'CP950',
+            'CP866',
+            'CP850',
+            'CP51932',
+            'CP50220',
+            'CP50221',
+            'CP50222',
+            'ISO-2022-JP',
+            'ISO-2022-KR',
+            'JIS',
+            'JIS-ms',
+            'EUC-CN',
+            'EUC-JP',
+        ];
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            // info: do not use the symfony polyfill here
+            $encoding = \mb_detect_encoding($str, $encoding_detecting_order, true);
+            if ($encoding) {
+                return $encoding;
+            }
+        }
+
+        //
+        // 5.) check via "iconv()"
+        //
+
+        if (self::$ENCODINGS === null) {
+            self::$ENCODINGS = self::getData('encodings');
+        }
+
+        foreach (self::$ENCODINGS as $encoding_tmp) {
+            // INFO: //IGNORE but still throw notice
+            /** @noinspection PhpUsageOfSilenceOperatorInspection */
+            if ((string) @\iconv($encoding_tmp, $encoding_tmp . '//IGNORE', $str) === $str) {
+                return $encoding_tmp;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if the string ends with the given substring.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_ends_with('BeginMiddleΚόσμε', 'Κόσμε'); // true
+     * UTF8::str_ends_with('BeginMiddleΚόσμε', 'κόσμε'); // false
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function str_ends_with(string $haystack, string $needle): bool
+    {
+        if ($needle === '') {
+            return true;
+        }
+
+        if ($haystack === '') {
+            return false;
+        }
+
+        if (\PHP_VERSION_ID >= 80000) {
+            /** @phpstan-ignore-next-line - only for PHP8 */
+            return \str_ends_with($haystack, $needle);
+        }
+
+        return \substr($haystack, -\strlen($needle)) === $needle;
+    }
+
+    /**
+     * Returns true if the string ends with any of $substrings, false otherwise.
+     *
+     * - case-sensitive
+     *
+     * @param string   $str        <p>The input string.</p>
+     * @param string[] $substrings <p>Substrings to look for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str ends with $substring.</p>
+     */
+    public static function str_ends_with_any(string $str, array $substrings): bool
+    {
+        if ($substrings === []) {
+            return false;
+        }
+
+        foreach ($substrings as &$substring) {
+            if (\substr($str, -\strlen($substring)) === $substring) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Ensures that the string begins with $substring. If it doesn't, it's
+     * prepended.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $substring <p>The substring to add if not present.</p>
+     *
+     * @psalm-pure
+     *
+     * @template T as string
+     * @template TSub as string
+     * @phpstan-param T $str
+     * @phpstan-param TSub $substring
+     * @phpstan-return (TSub is non-empty-string ? non-empty-string : (T is non-empty-string ? non-empty-string : string))
+     */
+    public static function str_ensure_left(string $str, string $substring): string
+    {
+        if (
+            $substring !== ''
+            &&
+            \strpos($str, $substring) === 0
+        ) {
+            return $str;
+        }
+
+        return $substring . $str;
+    }
+
+    /**
+     * Ensures that the string ends with $substring. If it doesn't, it's appended.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $substring <p>The substring to add if not present.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @template TSub as string
+     * @phpstan-param T $str
+     * @phpstan-param TSub $substring
+     * @phpstan-return (TSub is non-empty-string ? non-empty-string : (T is non-empty-string ? non-empty-string : string))
+     */
+    public static function str_ensure_right(string $str, string $substring): string
+    {
+        if (
+            $str === ''
+            ||
+            $substring === ''
+            ||
+            \substr($str, -\strlen($substring)) !== $substring
+        ) {
+            $str .= $substring;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Capitalizes the first word of the string, replaces underscores with
+     * spaces, and strips '_id'.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_humanize($str): string
+    {
+        $str = \str_replace(
+            [
+                '_id',
+                '_',
+            ],
+            [
+                '',
+                ' ',
+            ],
+            $str
+        );
+
+        return self::ucfirst(\trim($str));
+    }
+
+    /**
+     * Check if the string ends with the given substring, case-insensitive.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_iends_with('BeginMiddleΚόσμε', 'Κόσμε'); // true
+     * UTF8::str_iends_with('BeginMiddleΚόσμε', 'κόσμε'); // true
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function str_iends_with(string $haystack, string $needle): bool
+    {
+        if ($needle === '') {
+            return true;
+        }
+
+        if ($haystack === '') {
+            return false;
+        }
+
+        return self::strcasecmp(\substr($haystack, -\strlen($needle)), $needle) === 0;
+    }
+
+    /**
+     * Returns true if the string ends with any of $substrings, false otherwise.
+     *
+     * - case-insensitive
+     *
+     * @param string   $str        <p>The input string.</p>
+     * @param string[] $substrings <p>Substrings to look for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str ends with $substring.</p>
+     */
+    public static function str_iends_with_any(string $str, array $substrings): bool
+    {
+        if ($substrings === []) {
+            return false;
+        }
+
+        foreach ($substrings as &$substring) {
+            if (self::str_iends_with($str, $substring)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Inserts $substring into the string at the $index provided.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $substring <p>String to be inserted.</p>
+     * @param int    $index     <p>The index at which to insert the substring.</p>
+     * @param string $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_insert(
+        string $str,
+        string $substring,
+        int $index,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($encoding === 'UTF-8') {
+            $len = (int) \mb_strlen($str);
+            if ($index > $len) {
+                return $str;
+            }
+
+            /** @noinspection UnnecessaryCastingInspection */
+            return (string) \mb_substr($str, 0, $index) .
+                   $substring .
+                   (string) \mb_substr($str, $index, $len);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        $len = (int) self::strlen($str, $encoding);
+        if ($index > $len) {
+            return $str;
+        }
+
+        return ((string) self::substr($str, 0, $index, $encoding)) .
+               $substring .
+               ((string) self::substr($str, $index, $len, $encoding));
+    }
+
+    /**
+     * Case-insensitive and UTF-8 safe version of <function>str_replace</function>.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_ireplace('lIzÆ', 'lise', 'Iñtërnâtiônàlizætiøn'); // 'Iñtërnâtiônàlisetiøn'
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.str-ireplace.php
+     *
+     * @param string|string[] $search      <p>
+     *                                     Every replacement with search array is
+     *                                     performed on the result of previous replacement.
+     *                                     </p>
+     * @param string|string[] $replacement <p>The replacement.</p>
+     * @param string|string[] $subject     <p>
+     *                                     If subject is an array, then the search and
+     *                                     replace is performed with every entry of
+     *                                     subject, and the return value is an array as
+     *                                     well.
+     *                                     </p>
+     * @param int             $count       [optional] <p>
+     *                                     The number of matched and replaced needles will
+     *                                     be returned in count which is passed by
+     *                                     reference.
+     *                                     </p>
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *                         <p>A string or an array of replacements.</p>
+     *
+     * @template TStrIReplaceSubject
+     * @phpstan-param TStrIReplaceSubject $subject
+     * @phpstan-return TStrIReplaceSubject
+     */
+    public static function str_ireplace($search, $replacement, $subject, &$count = null)
+    {
+        $search = (array) $search;
+
+        /** @noinspection AlterInForeachInspection */
+        foreach ($search as &$s) {
+            $s = (string) $s;
+            if ($s === '') {
+                $s = '/^(?<=.)$/';
+            } else {
+                $s = '/' . \preg_quote($s, '/') . '/ui';
+            }
+        }
+
+        // fallback
+        /** @phpstan-ignore-next-line - only a fallback for PHP8 */
+        if ($replacement === null) {
+            $replacement = '';
+        }
+        /** @phpstan-ignore-next-line - only a fallback for PHP8 */
+        if ($subject === null) {
+            $subject = '';
+        }
+
+        /**
+         * @psalm-suppress PossiblyNullArgument
+         * @phpstan-var TStrIReplaceSubject $subject
+         */
+        $subject = \preg_replace($search, $replacement, $subject, -1, $count);
+
+        return $subject;
+    }
+
+    /**
+     * Replaces $search from the beginning of string with $replacement.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $search      <p>The string to search for.</p>
+     * @param string $replacement <p>The replacement.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string after the replacement.</p>
+     */
+    public static function str_ireplace_beginning(string $str, string $search, string $replacement): string
+    {
+        if ($str === '') {
+            if ($replacement === '') {
+                return '';
+            }
+
+            if ($search === '') {
+                return $replacement;
+            }
+        }
+
+        if ($search === '') {
+            return $str . $replacement;
+        }
+
+        $searchLength = \strlen($search);
+        if (\strncasecmp($str, $search, $searchLength) === 0) {
+            return $replacement . \substr($str, $searchLength);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Replaces $search from the ending of string with $replacement.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $search      <p>The string to search for.</p>
+     * @param string $replacement <p>The replacement.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string after the replacement.</p>
+     */
+    public static function str_ireplace_ending(string $str, string $search, string $replacement): string
+    {
+        if ($str === '') {
+            if ($replacement === '') {
+                return '';
+            }
+
+            if ($search === '') {
+                return $replacement;
+            }
+        }
+
+        if ($search === '') {
+            return $str . $replacement;
+        }
+
+        if (\stripos($str, $search, \strlen($str) - \strlen($search)) !== false) {
+            $str = \substr($str, 0, -\strlen($search)) . $replacement;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Check if the string starts with the given substring, case-insensitive.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_istarts_with('ΚόσμεMiddleEnd', 'Κόσμε'); // true
+     * UTF8::str_istarts_with('ΚόσμεMiddleEnd', 'κόσμε'); // true
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function str_istarts_with(string $haystack, string $needle): bool
+    {
+        if ($needle === '') {
+            return true;
+        }
+
+        if ($haystack === '') {
+            return false;
+        }
+
+        return self::stripos($haystack, $needle) === 0;
+    }
+
+    /**
+     * Returns true if the string begins with any of $substrings, false otherwise.
+     *
+     * - case-insensitive
+     *
+     * @param string   $str        <p>The input string.</p>
+     * @param scalar[] $substrings <p>Substrings to look for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str starts with $substring.</p>
+     */
+    public static function str_istarts_with_any(string $str, array $substrings): bool
+    {
+        if ($str === '') {
+            return false;
+        }
+
+        if ($substrings === []) {
+            return false;
+        }
+
+        foreach ($substrings as &$substring) {
+            if (self::str_istarts_with($str, (string) $substring)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Gets the substring after the first occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_after_first_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        $offset = self::stripos($str, $separator);
+        if ($offset === false) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr(
+                $str,
+                $offset + (int) \mb_strlen($separator)
+            );
+        }
+
+        return (string) self::substr(
+            $str,
+            $offset + (int) self::strlen($separator, $encoding),
+            null,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring after the last occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_after_last_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        $offset = self::strripos($str, $separator);
+        if ($offset === false) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr(
+                $str,
+                $offset + (int) self::strlen($separator)
+            );
+        }
+
+        return (string) self::substr(
+            $str,
+            $offset + (int) self::strlen($separator, $encoding),
+            null,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring before the first occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_before_first_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        $offset = self::stripos($str, $separator);
+        if ($offset === false) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str, 0, $offset);
+        }
+
+        return (string) self::substr($str, 0, $offset, $encoding);
+    }
+
+    /**
+     * Gets the substring before the last occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_before_last_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $offset = \mb_strripos($str, $separator);
+            if ($offset === false) {
+                return '';
+            }
+
+            return (string) \mb_substr($str, 0, $offset);
+        }
+
+        $offset = self::strripos($str, $separator, 0, $encoding);
+        if ($offset === false) {
+            return '';
+        }
+
+        return (string) self::substr($str, 0, $offset, $encoding);
+    }
+
+    /**
+     * Gets the substring after (or before via "$before_needle") the first occurrence of the "$needle".
+     *
+     * @param string $str           <p>The input string.</p>
+     * @param string $needle        <p>The string to look for.</p>
+     * @param bool   $before_needle [optional] <p>Default: false</p>
+     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_first(
+        string $str,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $needle === ''
+            ||
+            $str === ''
+        ) {
+            return '';
+        }
+
+        $part = self::stristr(
+            $str,
+            $needle,
+            $before_needle,
+            $encoding
+        );
+        if ($part === false) {
+            return '';
+        }
+
+        return $part;
+    }
+
+    /**
+     * Gets the substring after (or before via "$before_needle") the last occurrence of the "$needle".
+     *
+     * @param string $str           <p>The input string.</p>
+     * @param string $needle        <p>The string to look for.</p>
+     * @param bool   $before_needle [optional] <p>Default: false</p>
+     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_isubstr_last(
+        string $str,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $needle === ''
+            ||
+            $str === ''
+        ) {
+            return '';
+        }
+
+        $part = self::strrichr(
+            $str,
+            $needle,
+            $before_needle,
+            $encoding
+        );
+        if ($part === false) {
+            return '';
+        }
+
+        return $part;
+    }
+
+    /**
+     * Returns the last $n characters of the string.
+     *
+     * @param string $str      <p>The input string.</p>
+     * @param int    $n        <p>Number of characters to retrieve from the end.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_last_char(
+        string $str,
+        int $n = 1,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '' || $n <= 0) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str, -$n);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        return (string) self::substr($str, -$n, null, $encoding);
+    }
+
+    /**
+     * Limit the number of characters in a string.
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param int<1, max> $length     [optional] <p>Default: 100</p>
+     * @param string      $str_add_on [optional] <p>Default: …</p>
+     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_limit(
+        string $str,
+        int $length = 100,
+        string $str_add_on = '…',
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $str === ''
+            ||
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            $length <= 0
+        ) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ((int) \mb_strlen($str) <= $length) {
+                return $str;
+            }
+
+            /** @noinspection UnnecessaryCastingInspection */
+            return (string) \mb_substr($str, 0, $length - (int) self::strlen($str_add_on)) . $str_add_on;
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ((int) self::strlen($str, $encoding) <= $length) {
+            return $str;
+        }
+
+        return ((string) self::substr($str, 0, $length - (int) self::strlen($str_add_on), $encoding)) . $str_add_on;
+    }
+
+    /**
+     * Limit the number of characters in a string in bytes.
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param int<1, max> $length     [optional] <p>Default: 100</p>
+     * @param string      $str_add_on [optional] <p>Default: ...</p>
+     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_limit_in_byte(
+        string $str,
+        int $length = 100,
+        string $str_add_on = '...',
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $str === ''
+            ||
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            $length <= 0
+        ) {
+            return '';
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ((int) self::strlen_in_byte($str, $encoding) <= $length) {
+            return $str;
+        }
+
+        return ((string) self::substr_in_byte($str, 0, $length - (int) self::strlen_in_byte($str_add_on), $encoding)) . $str_add_on;
+    }
+
+    /**
+     * Limit the number of characters in a string, but also after the next word.
+     *
+     * EXAMPLE: <code>UTF8::str_limit_after_word('fòô bàř fòô', 8, ''); // 'fòô bàř'</code>
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param int<1, max> $length     [optional] <p>Default: 100</p>
+     * @param string      $str_add_on [optional] <p>Default: …</p>
+     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_limit_after_word(
+        string $str,
+        int $length = 100,
+        string $str_add_on = '…',
+        string $encoding = 'UTF-8'
+    ): string {
+        if (
+            $str === ''
+            ||
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            $length <= 0
+        ) {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ((int) \mb_strlen($str) <= $length) {
+                return $str;
+            }
+
+            if (\mb_substr($str, $length - 1, 1) === ' ') {
+                return ((string) \mb_substr($str, 0, $length - 1)) . $str_add_on;
+            }
+
+            $str = \mb_substr($str, 0, $length);
+
+            $array = \explode(' ', $str, -1);
+            $new_str = \implode(' ', $array);
+
+            if ($new_str === '') {
+                return ((string) \mb_substr($str, 0, $length - 1)) . $str_add_on;
+            }
+        } else {
+            if ((int) self::strlen($str, $encoding) <= $length) {
+                return $str;
+            }
+
+            if (self::substr($str, $length - 1, 1, $encoding) === ' ') {
+                return ((string) self::substr($str, 0, $length - 1, $encoding)) . $str_add_on;
+            }
+
+            /** @noinspection CallableParameterUseCaseInTypeContextInspection - FP */
+            $str = self::substr($str, 0, $length, $encoding);
+            if ($str === false) {
+                return '' . $str_add_on;
+            }
+
+            $array = \explode(' ', $str, -1);
+            $new_str = \implode(' ', $array);
+
+            if ($new_str === '') {
+                return ((string) self::substr($str, 0, $length - 1, $encoding)) . $str_add_on;
+            }
+        }
+
+        return $new_str . $str_add_on;
+    }
+
+    /**
+     * Returns the longest common prefix between the $str1 and $str2.
+     *
+     * @param string $str1     <p>The input sting.</p>
+     * @param string $str2     <p>Second string for comparison.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_longest_common_prefix(
+        string $str1,
+        string $str2,
+        string $encoding = 'UTF-8'
+    ): string {
+        // init
+        $longest_common_prefix = '';
+
+        if ($encoding === 'UTF-8') {
+            $max_length = (int) \min(
+                \mb_strlen($str1),
+                \mb_strlen($str2)
+            );
+
+            for ($i = 0; $i < $max_length; ++$i) {
+                $char = \mb_substr($str1, $i, 1);
+
+                if (
+                    $char !== false /* @phpstan-ignore-line | old polyfill will return false, or? */
+                    &&
+                    $char === \mb_substr($str2, $i, 1)
+                ) {
+                    $longest_common_prefix .= $char;
+                } else {
+                    break;
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $max_length = (int) \min(
+                self::strlen($str1, $encoding),
+                self::strlen($str2, $encoding)
+            );
+
+            for ($i = 0; $i < $max_length; ++$i) {
+                $char = self::substr($str1, $i, 1, $encoding);
+
+                if (
+                    $char !== false
+                    &&
+                    $char === self::substr($str2, $i, 1, $encoding)
+                ) {
+                    $longest_common_prefix .= $char;
+                } else {
+                    break;
+                }
+            }
+        }
+
+        return $longest_common_prefix;
+    }
+
+    /**
+     * Returns the longest common substring between the $str1 and $str2.
+     * In the case of ties, it returns that which occurs first.
+     *
+     * @param string $str1
+     * @param string $str2     <p>Second string for comparison.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with its $str being the longest common substring.</p>
+     */
+    public static function str_longest_common_substring(
+        string $str1,
+        string $str2,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str1 === '' || $str2 === '') {
+            return '';
+        }
+
+        // Uses dynamic programming to solve
+        // http://en.wikipedia.org/wiki/Longest_common_substring_problem
+
+        if ($encoding === 'UTF-8') {
+            $str_length = (int) \mb_strlen($str1);
+            $other_length = (int) \mb_strlen($str2);
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $str_length = (int) self::strlen($str1, $encoding);
+            $other_length = (int) self::strlen($str2, $encoding);
+        }
+
+        // Return if either string is empty
+        if ($str_length === 0 || $other_length === 0) {
+            return '';
+        }
+
+        $len = 0;
+        $end = 0;
+        $table = \array_fill(
+            0,
+            $str_length + 1,
+            \array_fill(0, $other_length + 1, 0)
+        );
+
+        if ($encoding === 'UTF-8') {
+            for ($i = 1; $i <= $str_length; ++$i) {
+                for ($j = 1; $j <= $other_length; ++$j) {
+                    $str_char = \mb_substr($str1, $i - 1, 1);
+                    $other_char = \mb_substr($str2, $j - 1, 1);
+
+                    if ($str_char === $other_char) {
+                        $table[$i][$j] = $table[$i - 1][$j - 1] + 1;
+                        if ($table[$i][$j] > $len) {
+                            $len = $table[$i][$j];
+                            $end = $i;
+                        }
+                    } else {
+                        $table[$i][$j] = 0;
+                    }
+                }
+            }
+        } else {
+            for ($i = 1; $i <= $str_length; ++$i) {
+                for ($j = 1; $j <= $other_length; ++$j) {
+                    $str_char = self::substr($str1, $i - 1, 1, $encoding);
+                    $other_char = self::substr($str2, $j - 1, 1, $encoding);
+
+                    if ($str_char === $other_char) {
+                        $table[$i][$j] = $table[$i - 1][$j - 1] + 1;
+                        if ($table[$i][$j] > $len) {
+                            $len = $table[$i][$j];
+                            $end = $i;
+                        }
+                    } else {
+                        $table[$i][$j] = 0;
+                    }
+                }
+            }
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) \mb_substr($str1, $end - $len, $len);
+        }
+
+        return (string) self::substr($str1, $end - $len, $len, $encoding);
+    }
+
+    /**
+     * Returns the longest common suffix between the $str1 and $str2.
+     *
+     * @param string $str1
+     * @param string $str2     <p>Second string for comparison.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_longest_common_suffix(
+        string $str1,
+        string $str2,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str1 === '' || $str2 === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $max_length = (int) \min(
+                \mb_strlen($str1, $encoding),
+                \mb_strlen($str2, $encoding)
+            );
+
+            $longest_common_suffix = '';
+            for ($i = 1; $i <= $max_length; ++$i) {
+                $char = \mb_substr($str1, -$i, 1);
+
+                if (
+                    $char !== false /* @phpstan-ignore-line | old polyfill will return false, or? */
+                    &&
+                    $char === \mb_substr($str2, -$i, 1)
+                ) {
+                    $longest_common_suffix = $char . $longest_common_suffix;
+                } else {
+                    break;
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $max_length = (int) \min(
+                self::strlen($str1, $encoding),
+                self::strlen($str2, $encoding)
+            );
+
+            $longest_common_suffix = '';
+            for ($i = 1; $i <= $max_length; ++$i) {
+                $char = self::substr($str1, -$i, 1, $encoding);
+
+                if (
+                    $char !== false
+                    &&
+                    $char === self::substr($str2, -$i, 1, $encoding)
+                ) {
+                    $longest_common_suffix = $char . $longest_common_suffix;
+                } else {
+                    break;
+                }
+            }
+        }
+
+        return $longest_common_suffix;
+    }
+
+    /**
+     * Returns true if $str matches the supplied pattern, false otherwise.
+     *
+     * @param string $str     <p>The input string.</p>
+     * @param string $pattern <p>Regex pattern to match against.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str matches the pattern.</p>
+     */
+    public static function str_matches_pattern(string $str, string $pattern): bool
+    {
+        return (bool) \preg_match('/' . $pattern . '/u', $str);
+    }
+
+    /**
+     * Returns whether or not a character exists at an index. Offsets may be
+     * negative to count from the last character in the string. Implements
+     * part of the ArrayAccess interface.
+     *
+     * @param string $str      <p>The input string.</p>
+     * @param int    $offset   <p>The index to check.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not the index exists.</p>
+     */
+    public static function str_offset_exists(string $str, int $offset, string $encoding = 'UTF-8'): bool
+    {
+        // init
+        $length = (int) self::strlen($str, $encoding);
+
+        if ($offset >= 0) {
+            return $length > $offset;
+        }
+
+        return $length >= \abs($offset);
+    }
+
+    /**
+     * Returns the character at the given index. Offsets may be negative to
+     * count from the last character in the string. Implements part of the
+     * ArrayAccess interface, and throws an OutOfBoundsException if the index
+     * does not exist.
+     *
+     * @param string      $str      <p>The input string.</p>
+     * @param int<1, max> $index    <p>The <strong>index</strong> from which to retrieve the char.</p>
+     * @param string      $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @throws \OutOfBoundsException if the positive or negative offset does not exist
+     *
+     * @return string
+     *                <p>The character at the specified index.</p>
+     *
+     * @psalm-pure
+     */
+    public static function str_offset_get(string $str, int $index, string $encoding = 'UTF-8'): string
+    {
+        // init
+        $length = (int) self::strlen($str);
+
+        if (
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            ($index >= 0 && $length <= $index)
+            ||
+            $length < \abs($index)
+        ) {
+            throw new \OutOfBoundsException('No character exists at the index');
+        }
+
+        return self::char_at($str, $index, $encoding);
+    }
+
+    /**
+     * Pad a UTF-8 string to a given length with another string.
+     *
+     * EXAMPLE: <code>UTF8::str_pad('中文空白', 10, '_', STR_PAD_BOTH); // '___中文空白___'</code>
+     *
+     * @param string     $str        <p>The input string.</p>
+     * @param int        $pad_length <p>The length of return string.</p>
+     * @param string     $pad_string [optional] <p>String to use for padding the input string.</p>
+     * @param int|string $pad_type   [optional] <p>
+     *                               Can be <strong>STR_PAD_RIGHT</strong> (default), [or string "right"]<br>
+     *                               <strong>STR_PAD_LEFT</strong> [or string "left"] or<br>
+     *                               <strong>STR_PAD_BOTH</strong> [or string "both"]
+     *                               </p>
+     * @param string     $encoding   [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Returns the padded string.</p>
+     */
+    public static function str_pad(
+        string $str,
+        int $pad_length,
+        string $pad_string = ' ',
+        $pad_type = \STR_PAD_RIGHT,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($pad_length === 0 || $pad_string === '') {
+            return $str;
+        }
+
+        if ($pad_type !== (int) $pad_type) {
+            if ($pad_type === 'left') {
+                $pad_type = \STR_PAD_LEFT;
+            } elseif ($pad_type === 'right') {
+                $pad_type = \STR_PAD_RIGHT;
+            } elseif ($pad_type === 'both') {
+                $pad_type = \STR_PAD_BOTH;
+            } else {
+                throw new \InvalidArgumentException(
+                    'Pad expects $pad_type to be "STR_PAD_*" or ' . "to be one of 'left', 'right' or 'both'"
+                );
+            }
+        }
+
+        if ($encoding === 'UTF-8') {
+            $str_length = (int) \mb_strlen($str);
+
+            if ($pad_length >= $str_length) {
+                switch ($pad_type) {
+                    case \STR_PAD_LEFT:
+                        $ps_length = (int) \mb_strlen($pad_string);
+
+                        $diff = ($pad_length - $str_length);
+
+                        $pre = (string) \mb_substr(
+                            \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
+                            0,
+                            $diff
+                        );
+                        $post = '';
+
+                        break;
+
+                    case \STR_PAD_BOTH:
+                        $diff = ($pad_length - $str_length);
+
+                        $ps_length_left = (int) \floor($diff / 2);
+
+                        $ps_length_right = (int) \ceil($diff / 2);
+
+                        $pre = (string) \mb_substr(
+                            \str_repeat($pad_string, $ps_length_left),
+                            0,
+                            $ps_length_left
+                        );
+                        $post = (string) \mb_substr(
+                            \str_repeat($pad_string, $ps_length_right),
+                            0,
+                            $ps_length_right
+                        );
+
+                        break;
+
+                    case \STR_PAD_RIGHT:
+                    default:
+                        $ps_length = (int) \mb_strlen($pad_string);
+
+                        $diff = ($pad_length - $str_length);
+
+                        $post = (string) \mb_substr(
+                            \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
+                            0,
+                            $diff
+                        );
+                        $pre = '';
+                }
+
+                return $pre . $str . $post;
+            }
+
+            return $str;
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        $str_length = (int) self::strlen($str, $encoding);
+
+        if ($pad_length >= $str_length) {
+            switch ($pad_type) {
+                case \STR_PAD_LEFT:
+                    $ps_length = (int) self::strlen($pad_string, $encoding);
+
+                    $diff = ($pad_length - $str_length);
+
+                    $pre = (string) self::substr(
+                        \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
+                        0,
+                        $diff,
+                        $encoding
+                    );
+                    $post = '';
+
+                    break;
+
+                case \STR_PAD_BOTH:
+                    $diff = ($pad_length - $str_length);
+
+                    $ps_length_left = (int) \floor($diff / 2);
+
+                    $ps_length_right = (int) \ceil($diff / 2);
+
+                    $pre = (string) self::substr(
+                        \str_repeat($pad_string, $ps_length_left),
+                        0,
+                        $ps_length_left,
+                        $encoding
+                    );
+                    $post = (string) self::substr(
+                        \str_repeat($pad_string, $ps_length_right),
+                        0,
+                        $ps_length_right,
+                        $encoding
+                    );
+
+                    break;
+
+                case \STR_PAD_RIGHT:
+                default:
+                    $ps_length = (int) self::strlen($pad_string, $encoding);
+
+                    $diff = ($pad_length - $str_length);
+
+                    $post = (string) self::substr(
+                        \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
+                        0,
+                        $diff,
+                        $encoding
+                    );
+                    $pre = '';
+            }
+
+            return $pre . $str . $post;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns a new string of a given length such that both sides of the
+     * string are padded. Alias for "UTF8::str_pad()" with a $pad_type of 'both'.
+     *
+     * @param string $str
+     * @param int    $length   <p>Desired string length after padding.</p>
+     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string with padding applied.</p>
+     */
+    public static function str_pad_both(
+        string $str,
+        int $length,
+        string $pad_str = ' ',
+        string $encoding = 'UTF-8'
+    ): string {
+        return self::str_pad(
+            $str,
+            $length,
+            $pad_str,
+            \STR_PAD_BOTH,
+            $encoding
+        );
+    }
+
+    /**
+     * Returns a new string of a given length such that the beginning of the
+     * string is padded. Alias for "UTF8::str_pad()" with a $pad_type of 'left'.
+     *
+     * @param string $str
+     * @param int    $length   <p>Desired string length after padding.</p>
+     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string with left padding.</p>
+     */
+    public static function str_pad_left(
+        string $str,
+        int $length,
+        string $pad_str = ' ',
+        string $encoding = 'UTF-8'
+    ): string {
+        return self::str_pad(
+            $str,
+            $length,
+            $pad_str,
+            \STR_PAD_LEFT,
+            $encoding
+        );
+    }
+
+    /**
+     * Returns a new string of a given length such that the end of the string
+     * is padded. Alias for "UTF8::str_pad()" with a $pad_type of 'right'.
+     *
+     * @param string $str
+     * @param int    $length   <p>Desired string length after padding.</p>
+     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string with right padding.</p>
+     */
+    public static function str_pad_right(
+        string $str,
+        int $length,
+        string $pad_str = ' ',
+        string $encoding = 'UTF-8'
+    ): string {
+        return self::str_pad(
+            $str,
+            $length,
+            $pad_str,
+            \STR_PAD_RIGHT,
+            $encoding
+        );
+    }
+
+    /**
+     * Repeat a string.
+     *
+     * EXAMPLE: <code>UTF8::str_repeat("°~\xf0\x90\x28\xbc", 2); // '°~ð(¼°~ð(¼'</code>
+     *
+     * @param string      $str   <p>
+     *                           The string to be repeated.
+     *                           </p>
+     * @param int<1, max> $multiplier <p>
+     *                           Number of time the input string should be
+     *                           repeated.
+     *                           </p>
+     *                           <p>
+     *                           multiplier has to be greater than or equal to 0.
+     *                           If the multiplier is set to 0, the function
+     *                           will return an empty string.
+     *                           </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The repeated string.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_repeat(string $str, int $multiplier): string
+    {
+        $str = self::filter($str);
+
+        return \str_repeat($str, $multiplier);
+    }
+
+    /**
+     * INFO: This is only a wrapper for "str_replace()"  -> the original functions is already UTF-8 safe.
+     *
+     * Replace all occurrences of the search string with the replacement string
+     *
+     * @see http://php.net/manual/en/function.str-replace.php
+     *
+     * @param string|string[] $search  <p>
+     *                                 The value being searched for, otherwise known as the needle.
+     *                                 An array may be used to designate multiple needles.
+     *                                 </p>
+     * @param string|string[] $replace <p>
+     *                                 The replacement value that replaces found search
+     *                                 values. An array may be used to designate multiple replacements.
+     *                                 </p>
+     * @param string|string[] $subject <p>
+     *                                 The string or array of strings being searched and replaced on,
+     *                                 otherwise known as the haystack.
+     *                                 </p>
+     *                                 <p>
+     *                                 If subject is an array, then the search and
+     *                                 replace is performed with every entry of
+     *                                 subject, and the return value is an array as
+     *                                 well.
+     *                                 </p>
+     * @param int|null        $count   [optional] <p>
+     *                                 If passed, this will hold the number of matched and replaced needles.
+     *                                 </p>
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *                         <p>This function returns a string or an array with the replaced values.</p>
+     *
+     * @template TStrReplaceSubject
+     * @phpstan-param TStrReplaceSubject $subject
+     * @phpstan-return TStrReplaceSubject
+     *
+     * @deprecated please use \str_replace() instead
+     */
+    public static function str_replace(
+        $search,
+        $replace,
+        $subject,
+        int &$count = null
+    ) {
+        /**
+         * @psalm-suppress PossiblyNullArgument
+         * @phpstan-var TStrReplaceSubject $return;
+         */
+        $return = \str_replace(
+            $search,
+            $replace,
+            $subject,
+            $count
+        );
+
+        return $return;
+    }
+
+    /**
+     * Replaces $search from the beginning of string with $replacement.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $search      <p>The string to search for.</p>
+     * @param string $replacement <p>The replacement.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string after the replacements.</p>
+     */
+    public static function str_replace_beginning(
+        string $str,
+        string $search,
+        string $replacement
+    ): string {
+        if ($str === '') {
+            if ($replacement === '') {
+                return '';
+            }
+
+            if ($search === '') {
+                return $replacement;
+            }
+        }
+
+        if ($search === '') {
+            return $str . $replacement;
+        }
+
+        $searchLength = \strlen($search);
+        if (\strncmp($str, $search, $searchLength) === 0) {
+            return $replacement . \substr($str, $searchLength);
+        }
+
+        return $str;
+    }
+
+    /**
+     * Replaces $search from the ending of string with $replacement.
+     *
+     * @param string $str         <p>The input string.</p>
+     * @param string $search      <p>The string to search for.</p>
+     * @param string $replacement <p>The replacement.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string after the replacements.</p>
+     */
+    public static function str_replace_ending(
+        string $str,
+        string $search,
+        string $replacement
+    ): string {
+        if ($str === '') {
+            if ($replacement === '') {
+                return '';
+            }
+
+            if ($search === '') {
+                return $replacement;
+            }
+        }
+
+        if ($search === '') {
+            return $str . $replacement;
+        }
+
+        if (\strpos($str, $search, \strlen($str) - \strlen($search)) !== false) {
+            $str = \substr($str, 0, -\strlen($search)) . $replacement;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Replace the first "$search"-term with the "$replace"-term.
+     *
+     * @param string $search
+     * @param string $replace
+     * @param string $subject
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @psalm-suppress InvalidReturnType
+     */
+    public static function str_replace_first(
+        string $search,
+        string $replace,
+        string $subject
+    ): string {
+        $pos = self::strpos($subject, $search);
+
+        if ($pos !== false) {
+            /**
+             * @psalm-suppress InvalidReturnStatement
+             */
+            return self::substr_replace(
+                $subject,
+                $replace,
+                $pos,
+                (int) self::strlen($search)
+            );
+        }
+
+        return $subject;
+    }
+
+    /**
+     * Replace the last "$search"-term with the "$replace"-term.
+     *
+     * @param string $search
+     * @param string $replace
+     * @param string $subject
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @psalm-suppress InvalidReturnType
+     */
+    public static function str_replace_last(
+        string $search,
+        string $replace,
+        string $subject
+    ): string {
+        $pos = self::strrpos($subject, $search);
+        if ($pos !== false) {
+            /**
+             * @psalm-suppress InvalidReturnStatement
+             */
+            return self::substr_replace(
+                $subject,
+                $replace,
+                $pos,
+                (int) self::strlen($search)
+            );
+        }
+
+        return $subject;
+    }
+
+    /**
+     * Shuffles all the characters in the string.
+     *
+     * INFO: uses random algorithm which is weak for cryptography purposes
+     *
+     * EXAMPLE: <code>UTF8::str_shuffle('fòô bàř fòô'); // 'àòôřb ffòô '</code>
+     *
+     * @param string $str      <p>The input string</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @return string
+     *                <p>The shuffled string.</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function str_shuffle(string $str, string $encoding = 'UTF-8'): string
+    {
+        if ($encoding === 'UTF-8') {
+            $indexes = \range(0, (int) \mb_strlen($str) - 1);
+            \shuffle($indexes);
+
+            // init
+            $shuffled_str = '';
+
+            foreach ($indexes as &$i) {
+                $tmp_sub_str = \mb_substr($str, $i, 1);
+                if ($tmp_sub_str !== false) { /* @phpstan-ignore-line | old polyfill will return false, or? */
+                    $shuffled_str .= $tmp_sub_str;
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $indexes = \range(0, (int) self::strlen($str, $encoding) - 1);
+            \shuffle($indexes);
+
+            // init
+            $shuffled_str = '';
+
+            foreach ($indexes as &$i) {
+                $tmp_sub_str = self::substr($str, $i, 1, $encoding);
+                if ($tmp_sub_str !== false) {
+                    $shuffled_str .= $tmp_sub_str;
+                }
+            }
+        }
+
+        return $shuffled_str;
+    }
+
+    /**
+     * Returns the substring beginning at $start, and up to, but not including
+     * the index specified by $end. If $end is omitted, the function extracts
+     * the remaining string. If $end is negative, it is computed from the end
+     * of the string.
+     *
+     * @param string   $str
+     * @param int      $start    <p>Initial index from which to begin extraction.</p>
+     * @param int|null $end      [optional] <p>Index at which to end extraction. Default: null</p>
+     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The extracted substring.</p><p>If <i>str</i> is shorter than <i>start</i>
+     *                      characters long, <b>FALSE</b> will be returned.
+     */
+    public static function str_slice(
+        string $str,
+        int $start,
+        int $end = null,
+        string $encoding = 'UTF-8'
+    ) {
+        if ($encoding === 'UTF-8') {
+            if ($end === null) {
+                $length = (int) \mb_strlen($str);
+            } elseif ($end >= 0 && $end <= $start) {
+                return '';
+            } elseif ($end < 0) {
+                $length = (int) \mb_strlen($str) + $end - $start;
+            } else {
+                $length = $end - $start;
+            }
+
+            return \mb_substr($str, $start, $length);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ($end === null) {
+            $length = (int) self::strlen($str, $encoding);
+        } elseif ($end >= 0 && $end <= $start) {
+            return '';
+        } elseif ($end < 0) {
+            $length = (int) self::strlen($str, $encoding) + $end - $start;
+        } else {
+            $length = $end - $start;
+        }
+
+        return self::substr($str, $start, $length, $encoding);
+    }
+
+    /**
+     * Convert a string to e.g.: "snake_case"
+     *
+     * @param string $str
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string in snake_case.</p>
+     */
+    public static function str_snakeize(string $str, string $encoding = 'UTF-8'): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        $str = \str_replace(
+            '-',
+            '_',
+            self::normalize_whitespace($str)
+        );
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        $str = (string) \preg_replace_callback(
+            '/([\\p{N}|\\p{Lu}])/u',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                $match = $matches[1];
+                $match_int = (int) $match;
+
+                if ((string) $match_int === $match) {
+                    return '_' . $match . '_';
+                }
+
+                if ($encoding === 'UTF-8') {
+                    return '_' . \mb_strtolower($match);
+                }
+
+                return '_' . self::strtolower($match, $encoding);
+            },
+            $str
+        );
+
+        $str = (string) \preg_replace(
+            [
+                '/\\s+/u',        // convert spaces to "_"
+                '/^\\s+|\\s+$/u', // trim leading & trailing spaces
+                '/_+/',           // remove double "_"
+            ],
+            [
+                '_',
+                '',
+                '_',
+            ],
+            $str
+        );
+
+        return \trim(\trim($str, '_')); // trim leading & trailing "_" + whitespace
+    }
+
+    /**
+     * Sort all characters according to code points.
+     *
+     * EXAMPLE: <code>UTF8::str_sort('  -ABC-中文空白-  '); // '    ---ABC中文白空'</code>
+     *
+     * @param string $str    <p>A UTF-8 string.</p>
+     * @param bool   $unique <p>Sort unique. If <strong>true</strong>, repeated characters are ignored.</p>
+     * @param bool   $desc   <p>If <strong>true</strong>, will sort characters in reverse code point order.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string of sorted characters.</p>
+     */
+    public static function str_sort(string $str, bool $unique = false, bool $desc = false): string
+    {
+        /** @var int[] $array */
+        $array = self::codepoints($str);
+
+        if ($unique) {
+            $array = \array_flip(\array_flip($array));
+        }
+
+        if ($desc) {
+            \arsort($array);
+        } else {
+            \asort($array);
+        }
+
+        return self::string($array);
+    }
+
+    /**
+     * Convert a string to an array of Unicode characters.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_split_array(['中文空白', 'test'], 2); // [['中文', '空白'], ['te', 'st']]
+     * </code>
+     *
+     * @param int[]|string[] $input                   <p>The string[] or int[] to split into array.</p>
+     * @param int<1, max>    $length                  [optional] <p>Max character length of each array
+     *                                                element.</p>
+     * @param bool           $clean_utf8              [optional] <p>Remove non UTF-8 chars from the
+     *                                                string.</p>
+     * @param bool           $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
+     *                                                "mb_substr"</p>
+     *
+     * @psalm-pure
+     *
+     * @return list<list<string>>
+     *                            <p>An array containing chunks of the input.</p>
+     */
+    public static function str_split_array(
+        array $input,
+        int $length = 1,
+        bool $clean_utf8 = false,
+        bool $try_to_use_mb_functions = true
+    ): array {
+        foreach ($input as &$v) {
+            $v = self::str_split(
+                $v,
+                $length,
+                $clean_utf8,
+                $try_to_use_mb_functions
+            );
+        }
+
+        /** @var list<list<string>> $input */
+        return $input;
+    }
+
+    /**
+     * Convert a string to an array of unicode characters.
+     *
+     * EXAMPLE: <code>UTF8::str_split('中文空白'); // array('中', '文', '空', '白')</code>
+     *
+     * @param int|string  $str                     <p>The string or int to split into array.</p>
+     * @param int<1, max> $length                  [optional] <p>Max character length of each array
+     *                                            element.</p>
+     * @param bool        $clean_utf8              [optional] <p>Remove non UTF-8 chars from the
+     *                                            string.</p>
+     * @param bool        $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
+     *                                            "mb_substr"</p>
+     *
+     * @psalm-pure
+     *
+     * @return list<string>
+     *                      <p>An array containing chunks of chars from the input.</p>
+     */
+    public static function str_split(
+        $str,
+        int $length = 1,
+        bool $clean_utf8 = false,
+        bool $try_to_use_mb_functions = true
+    ): array {
+        /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+        if ($length <= 0) {
+            return [];
+        }
+
+        // this is only an old fallback
+        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
+        /** @var int|int[]|string|string[] $str */
+        $str = $str;
+        if (\is_array($str)) {
+            /** @psalm-suppress InvalidReturnStatement */
+            /** @phpstan-ignore-next-line - old code :/ */
+            return self::str_split_array(
+                $str,
+                $length,
+                $clean_utf8,
+                $try_to_use_mb_functions
+            );
+        }
+
+        // init
+        $str = (string) $str;
+
+        if ($str === '') {
+            return [];
+        }
+
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        if (
+            $try_to_use_mb_functions
+            &&
+            self::$SUPPORT['mbstring'] === true
+        ) {
+            if (\function_exists('mb_str_split')) {
+                try {
+                    /**
+                     * @psalm-suppress ImpureFunctionCall - why?
+                     */
+                    $return = \mb_str_split($str, $length);
+                } catch (\Error $e) {
+                    // PHP >= 8.0 : mb_str_split() will now throw ValueError on error. Previously, mb_str_split() returned false instead.
+                    $return = false;
+                }
+                if ($return !== false) {
+                    return $return;
+                }
+            }
+
+            $i_max = \mb_strlen($str);
+            if ($i_max <= 127) {
+                $ret = [];
+                for ($i = 0; $i < $i_max; ++$i) {
+                    $ret[] = \mb_substr($str, $i, 1);
+                }
+            } else {
+                $return_array = [];
+                \preg_match_all('/./us', $str, $return_array);
+                $ret = $return_array[0] ?? [];
+            }
+        } elseif (self::$SUPPORT['pcre_utf8'] === true) {
+            $return_array = [];
+            \preg_match_all('/./us', $str, $return_array);
+            $ret = $return_array[0] ?? [];
+        } else {
+
+            // fallback
+
+            $ret = [];
+            $len = \strlen($str);
+
+            for ($i = 0; $i < $len; ++$i) {
+                if (($str[$i] & "\x80") === "\x00") {
+                    $ret[] = $str[$i];
+                } elseif (
+                    isset($str[$i + 1])
+                    &&
+                    ($str[$i] & "\xE0") === "\xC0"
+                ) {
+                    if (($str[$i + 1] & "\xC0") === "\x80") {
+                        $ret[] = $str[$i] . $str[$i + 1];
+
+                        ++$i;
+                    }
+                } elseif (
+                    isset($str[$i + 2])
+                    &&
+                    ($str[$i] & "\xF0") === "\xE0"
+                ) {
+                    if (
+                        ($str[$i + 1] & "\xC0") === "\x80"
+                        &&
+                        ($str[$i + 2] & "\xC0") === "\x80"
+                    ) {
+                        $ret[] = $str[$i] . $str[$i + 1] . $str[$i + 2];
+
+                        $i += 2;
+                    }
+                } elseif (
+                    isset($str[$i + 3])
+                    &&
+                    ($str[$i] & "\xF8") === "\xF0"
+                ) {
+                    if (
+                        ($str[$i + 1] & "\xC0") === "\x80"
+                        &&
+                        ($str[$i + 2] & "\xC0") === "\x80"
+                        &&
+                        ($str[$i + 3] & "\xC0") === "\x80"
+                    ) {
+                        $ret[] = $str[$i] . $str[$i + 1] . $str[$i + 2] . $str[$i + 3];
+
+                        $i += 3;
+                    }
+                }
+            }
+        }
+
+        if ($length > 1) {
+            return \array_map(
+                static function (array $item): string {
+                    /* @phpstan-ignore-next-line | "array_map + array_chunk" is not supported by phpstan?! */
+                    return \implode('', $item);
+                },
+                \array_chunk($ret, $length)
+            );
+        }
+
+        if (isset($ret[0]) && $ret[0] === '') {
+            return [];
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Splits the string with the provided regular expression, returning an
+     * array of strings. An optional integer $limit will truncate the
+     * results.
+     *
+     * @param string $str
+     * @param string $pattern <p>The regex with which to split the string.</p>
+     * @param int    $limit   [optional] <p>Maximum number of results to return. Default: -1 === no limit</p>
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  <p>An array of strings.</p>
+     */
+    public static function str_split_pattern(string $str, string $pattern, int $limit = -1): array
+    {
+        if ($limit === 0) {
+            return [];
+        }
+
+        if ($pattern === '') {
+            return [$str];
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($limit >= 0) {
+                $result_tmp = \mb_split($pattern, $str);
+                if ($result_tmp === false) {
+                    return [];
+                }
+
+                $result = [];
+                foreach ($result_tmp as $item_tmp) {
+                    if ($limit === 0) {
+                        break;
+                    }
+                    --$limit;
+
+                    $result[] = $item_tmp;
+                }
+
+                return $result;
+            }
+
+            $result = \mb_split($pattern, $str);
+            if ($result === false) {
+                return [];
+            }
+
+            return $result;
+        }
+
+        if ($limit > 0) {
+            ++$limit;
+        } else {
+            $limit = -1;
+        }
+
+        $array = \preg_split('/' . \preg_quote($pattern, '/') . '/u', $str, $limit);
+        if ($array === false) {
+            return [];
+        }
+
+        if ($limit > 0 && \count($array) === $limit) {
+            \array_pop($array);
+        }
+
+        return $array;
+    }
+
+    /**
+     * Check if the string starts with the given substring.
+     *
+     * EXAMPLE: <code>
+     * UTF8::str_starts_with('ΚόσμεMiddleEnd', 'Κόσμε'); // true
+     * UTF8::str_starts_with('ΚόσμεMiddleEnd', 'κόσμε'); // false
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function str_starts_with(string $haystack, string $needle): bool
+    {
+        if ($needle === '') {
+            return true;
+        }
+
+        if ($haystack === '') {
+            return false;
+        }
+
+        if (\PHP_VERSION_ID >= 80000) {
+            /** @phpstan-ignore-next-line - only for PHP8 */
+            return \str_starts_with($haystack, $needle);
+        }
+
+        return \strncmp($haystack, $needle, \strlen($needle)) === 0;
+    }
+
+    /**
+     * Returns true if the string begins with any of $substrings, false otherwise.
+     *
+     * - case-sensitive
+     *
+     * @param string   $str        <p>The input string.</p>
+     * @param scalar[] $substrings <p>Substrings to look for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>Whether or not $str starts with $substring.</p>
+     */
+    public static function str_starts_with_any(string $str, array $substrings): bool
+    {
+        if ($str === '') {
+            return false;
+        }
+
+        if ($substrings === []) {
+            return false;
+        }
+
+        foreach ($substrings as &$substring) {
+            if (self::str_starts_with($str, (string) $substring)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Gets the substring after the first occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_after_first_separator(string $str, string $separator, string $encoding = 'UTF-8'): string
+    {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $offset = \mb_strpos($str, $separator);
+            if ($offset === false) {
+                return '';
+            }
+
+            return (string) \mb_substr(
+                $str,
+                $offset + (int) \mb_strlen($separator)
+            );
+        }
+
+        $offset = self::strpos($str, $separator, 0, $encoding);
+        if ($offset === false) {
+            return '';
+        }
+
+        return (string) \mb_substr(
+            $str,
+            $offset + (int) self::strlen($separator, $encoding),
+            null,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring after the last occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_after_last_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $offset = \mb_strrpos($str, $separator);
+            if ($offset === false) {
+                return '';
+            }
+
+            return (string) \mb_substr(
+                $str,
+                $offset + (int) \mb_strlen($separator)
+            );
+        }
+
+        $offset = self::strrpos($str, $separator, 0, $encoding);
+        if ($offset === false) {
+            return '';
+        }
+
+        return (string) self::substr(
+            $str,
+            $offset + (int) self::strlen($separator, $encoding),
+            null,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring before the first occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_before_first_separator(
+        string $str,
+        string $separator,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $offset = \mb_strpos($str, $separator);
+            if ($offset === false) {
+                return '';
+            }
+
+            return (string) \mb_substr(
+                $str,
+                0,
+                $offset
+            );
+        }
+
+        $offset = self::strpos($str, $separator, 0, $encoding);
+        if ($offset === false) {
+            return '';
+        }
+
+        return (string) self::substr(
+            $str,
+            0,
+            $offset,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring before the last occurrence of a separator.
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param string $separator <p>The string separator.</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_before_last_separator(string $str, string $separator, string $encoding = 'UTF-8'): string
+    {
+        if ($separator === '' || $str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            $offset = \mb_strrpos($str, $separator);
+            if ($offset === false) {
+                return '';
+            }
+
+            return (string) \mb_substr(
+                $str,
+                0,
+                $offset
+            );
+        }
+
+        $offset = self::strrpos($str, $separator, 0, $encoding);
+        if ($offset === false) {
+            return '';
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        return (string) self::substr(
+            $str,
+            0,
+            $offset,
+            $encoding
+        );
+    }
+
+    /**
+     * Gets the substring after (or before via "$before_needle") the first occurrence of the "$needle".
+     *
+     * @param string $str           <p>The input string.</p>
+     * @param string $needle        <p>The string to look for.</p>
+     * @param bool   $before_needle [optional] <p>Default: false</p>
+     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_first(
+        string $str,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '' || $needle === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ($before_needle) {
+                $part = \mb_strstr(
+                    $str,
+                    $needle,
+                    $before_needle
+                );
+            } else {
+                $part = \mb_strstr(
+                    $str,
+                    $needle
+                );
+            }
+        } else {
+            $part = self::strstr(
+                $str,
+                $needle,
+                $before_needle,
+                $encoding
+            );
+        }
+
+        return $part === false ? '' : $part;
+    }
+
+    /**
+     * Gets the substring after (or before via "$before_needle") the last occurrence of the "$needle".
+     *
+     * @param string $str           <p>The input string.</p>
+     * @param string $needle        <p>The string to look for.</p>
+     * @param bool   $before_needle [optional] <p>Default: false</p>
+     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function str_substr_last(
+        string $str,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '' || $needle === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ($before_needle) {
+                $part = \mb_strrchr(
+                    $str,
+                    $needle,
+                    $before_needle
+                );
+            } else {
+                $part = \mb_strrchr(
+                    $str,
+                    $needle
+                );
+            }
+        } else {
+            $part = self::strrchr(
+                $str,
+                $needle,
+                $before_needle,
+                $encoding
+            );
+        }
+
+        return $part === false ? '' : $part;
+    }
+
+    /**
+     * Surrounds $str with the given substring.
+     *
+     * @param string $str
+     * @param string $substring <p>The substring to add to both sides.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with the substring both prepended and appended.</p>
+     *
+     * @template T as string
+     * @template TSub as string
+     * @phpstan-param T $str
+     * @phpstan-param TSub $substring
+     * @phpstan-return (T is non-empty-string ? non-empty-string : (TSub is non-empty-string ? non-empty-string : string))
+     */
+    public static function str_surround(string $str, string $substring): string
+    {
+        return $substring . $str . $substring;
+    }
+
+    /**
+     * Returns a trimmed string with the first letter of each word capitalized.
+     * Also accepts an array, $ignore, allowing you to list words not to be
+     * capitalized.
+     *
+     * @param string        $str
+     * @param string[]|null $ignore                        [optional] <p>An array of words not to capitalize or
+     *                                                     null. Default: null</p>
+     * @param string        $encoding                      [optional] <p>Default: 'UTF-8'</p>
+     * @param bool          $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the
+     *                                                     string.</p>
+     * @param string|null   $lang                          [optional] <p>Set the language for special cases: az,
+     *                                                     el, lt, tr</p>
+     * @param bool          $try_to_keep_the_string_length [optional] <p>true === try to keep the string length:
+     *                                                     e.g. ẞ -> ß</p>
+     * @param bool          $use_trim_first                [optional] <p>true === trim the input string,
+     *                                                     first</p>
+     * @param string|null   $word_define_chars             [optional] <p>An string of chars that will be used as
+     *                                                     whitespace separator === words.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The titleized string.</p>
+     */
+    public static function str_titleize(
+        string $str,
+        array $ignore = null,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false,
+        bool $use_trim_first = true,
+        string $word_define_chars = null
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($use_trim_first) {
+            $str = \trim($str);
+        }
+
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
+
+        if ($word_define_chars) {
+            $word_define_chars = \preg_quote($word_define_chars, '/');
+        } else {
+            $word_define_chars = '';
+        }
+
+        $str = (string) \preg_replace_callback(
+            '/([^\\s' . $word_define_chars . ']+)/u',
+            static function (array $match) use ($try_to_keep_the_string_length, $lang, $ignore, $use_mb_functions, $encoding): string {
+                if ($ignore !== null && \in_array($match[0], $ignore, true)) {
+                    return $match[0];
+                }
+
+                if ($use_mb_functions) {
+                    if ($encoding === 'UTF-8') {
+                        return \mb_strtoupper(\mb_substr($match[0], 0, 1))
+                               . \mb_strtolower(\mb_substr($match[0], 1));
+                    }
+
+                    return \mb_strtoupper(\mb_substr($match[0], 0, 1, $encoding), $encoding)
+                           . \mb_strtolower(\mb_substr($match[0], 1, null, $encoding), $encoding);
+                }
+
+                return self::ucfirst(
+                    self::strtolower(
+                        $match[0],
+                        $encoding,
+                        false,
+                        $lang,
+                        $try_to_keep_the_string_length
+                    ),
+                    $encoding,
+                    false,
+                    $lang,
+                    $try_to_keep_the_string_length
+                );
+            },
+            $str
+        );
+
+        return $str;
+    }
+
+    /**
+     * Convert a string into a obfuscate string.
+     *
+     * EXAMPLE: <code>
+     *
+     * UTF8::str_obfuscate('lars@moelleken.org', 0.5, '*', ['@', '.']); // e.g. "l***@m**lleke*.*r*"
+     * </code>
+     *
+     * @param string   $str
+     * @param float    $percent
+     * @param string   $obfuscateChar
+     * @param string[] $keepChars
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The obfuscate string.</p>
+     */
+    public static function str_obfuscate(
+        string $str,
+        float $percent = 0.5,
+        string $obfuscateChar = '*',
+        array $keepChars = []
+    ): string {
+        $obfuscateCharHelper = "\u{2603}";
+        $str = \str_replace($obfuscateChar, $obfuscateCharHelper, $str);
+
+        $chars = self::chars($str);
+        $charsMax = \count($chars);
+        $charsMaxChange = \round($charsMax * $percent);
+        $charsCounter = 0;
+        $charKeyDone = [];
+
+        while ($charsCounter < $charsMaxChange) {
+            foreach ($chars as $charKey => $char) {
+                if (isset($charKeyDone[$charKey])) {
+                    continue;
+                }
+
+                if (\random_int(0, 100) > 50) {
+                    continue;
+                }
+
+                if ($char === $obfuscateChar) {
+                    continue;
+                }
+
+                ++$charsCounter;
+                $charKeyDone[$charKey] = true;
+
+                if ($charsCounter > $charsMaxChange) {
+                    break;
+                }
+
+                if (\in_array($char, $keepChars, true)) {
+                    continue;
+                }
+
+                $chars[$charKey] = $obfuscateChar;
+            }
+        }
+
+        $str = \implode('', $chars);
+
+        return \str_replace($obfuscateCharHelper, $obfuscateChar, $str);
+    }
+
+    /**
+     * Returns a trimmed string in proper title case.
+     *
+     * Also accepts an array, $ignore, allowing you to list words not to be
+     * capitalized.
+     *
+     * Adapted from John Gruber's script.
+     *
+     * @see https://gist.github.com/gruber/9f9e8650d68b13ce4d78
+     *
+     * @param string   $str
+     * @param string[] $ignore   <p>An array of words not to capitalize.</p>
+     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The titleized string.</p>
+     */
+    public static function str_titleize_for_humans(
+        string $str,
+        array $ignore = [],
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        $small_words = [
+            '(?<!q&)a',
+            'an',
+            'and',
+            'as',
+            'at(?!&t)',
+            'but',
+            'by',
+            'en',
+            'for',
+            'if',
+            'in',
+            'of',
+            'on',
+            'or',
+            'the',
+            'to',
+            'v[.]?',
+            'via',
+            'vs[.]?',
+        ];
+
+        if ($ignore !== []) {
+            $small_words = \array_merge($small_words, $ignore);
+        }
+
+        $small_words_rx = \implode('|', $small_words);
+        $apostrophe_rx = '(?x: [\'’] [[:lower:]]* )?';
+
+        $str = \trim($str);
+
+        if (!self::has_lowercase($str)) {
+            $str = self::strtolower($str, $encoding);
+        }
+
+        // the main substitutions
+        $str = (string) \preg_replace_callback(
+            '~\\b (_*) (?:                                                                  # 1. Leading underscore and
+                        ( (?<=[ ][/\\\\]) [[:alpha:]]+ [-_[:alpha:]/\\\\]+ |                # 2. file path or
+                          [-_[:alpha:]]+ [@.:] [-_[:alpha:]@.:/]+ ' . $apostrophe_rx . ' )  #    URL, domain, or email
+                        |                                                                   #
+                        ( (?i: ' . $small_words_rx . ' ) ' . $apostrophe_rx . ' )           # 3. or small word (case-insensitive)
+                        |                                                                   #
+                        ( [[:alpha:]] [[:lower:]\'’()\[\]{}]* ' . $apostrophe_rx . ' )      # 4. or word w/o internal caps
+                        |                                                                   #
+                        ( [[:alpha:]] [[:alpha:]\'’()\[\]{}]* ' . $apostrophe_rx . ' )      # 5. or some other word
+                      ) (_*) \\b                                                            # 6. With trailing underscore
+                    ~ux',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                // preserve leading underscore
+                $str = $matches[1];
+                if ($matches[2]) {
+                    // preserve URLs, domains, emails and file paths
+                    $str .= $matches[2];
+                } elseif ($matches[3]) {
+                    // lower-case small words
+                    $str .= self::strtolower($matches[3], $encoding);
+                } elseif ($matches[4]) {
+                    // capitalize word w/o internal caps
+                    $str .= static::ucfirst($matches[4], $encoding);
+                } else {
+                    // preserve other kinds of word (iPhone)
+                    $str .= $matches[5];
+                }
+                // preserve trailing underscore
+                $str .= $matches[6];
+
+                return $str;
+            },
+            $str
+        );
+
+        // Exceptions for small words: capitalize at start of title...
+        $str = (string) \preg_replace_callback(
+            '~(  \\A [[:punct:]]*            # start of title...
+                      |  [:.;?!][ ]+                # or of subsentence...
+                      |  [ ][\'"“‘(\[][ ]* )        # or of inserted subphrase...
+                      ( ' . $small_words_rx . ' ) \\b # ...followed by small word
+                     ~uxi',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                return $matches[1] . static::ucfirst($matches[2], $encoding);
+            },
+            $str
+        );
+
+        // ...and end of title
+        $str = (string) \preg_replace_callback(
+            '~\\b ( ' . $small_words_rx . ' ) # small word...
+                      (?= [[:punct:]]* \Z          # ...at the end of the title...
+                      |   [\'"’”)\]] [ ] )         # ...or of an inserted subphrase?
+                     ~uxi',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                return static::ucfirst($matches[1], $encoding);
+            },
+            $str
+        );
+
+        // Exceptions for small words in hyphenated compound words.
+        // e.g. "in-flight" -> In-Flight
+        $str = (string) \preg_replace_callback(
+            '~\\b
+                        (?<! -)                   # Negative lookbehind for a hyphen; we do not want to match man-in-the-middle but do want (in-flight)
+                        ( ' . $small_words_rx . ' )
+                        (?= -[[:alpha:]]+)        # lookahead for "-someword"
+                       ~uxi',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                return static::ucfirst($matches[1], $encoding);
+            },
+            $str
+        );
+
+        // e.g. "Stand-in" -> "Stand-In" (Stand is already capped at this point)
+        $str = (string) \preg_replace_callback(
+            '~\\b
+                      (?<!…)                    # Negative lookbehind for a hyphen; we do not want to match man-in-the-middle but do want (stand-in)
+                      ( [[:alpha:]]+- )         # $1 = first word and hyphen, should already be properly capped
+                      ( ' . $small_words_rx . ' ) # ...followed by small word
+                      (?!	- )                 # Negative lookahead for another -
+                     ~uxi',
+            /**
+             * @param string[] $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches) use ($encoding): string {
+                return $matches[1] . static::ucfirst($matches[2], $encoding);
+            },
+            $str
+        );
+
+        return $str;
+    }
+
+    /**
+     * Get a binary representation of a specific string.
+     *
+     * EXAPLE: <code>UTF8::str_to_binary('😃'); // '11110000100111111001100010000011'</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>false on error</p>
+     */
+    public static function str_to_binary(string $str)
+    {
+        $value = \unpack('H*', $str);
+        if ($value === false) {
+            return false;
+        }
+
+        return \base_convert($value[1], 16, 2);
+    }
+
+    /**
+     * @param string   $str
+     * @param bool     $remove_empty_values <p>Remove empty values.</p>
+     * @param int|null $remove_short_values <p>The min. string length or null to disable</p>
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     */
+    public static function str_to_lines(string $str, bool $remove_empty_values = false, int $remove_short_values = null): array
+    {
+        if ($str === '') {
+            return $remove_empty_values ? [] : [''];
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            $return = \mb_split("[\r\n]{1,2}", $str);
+        } else {
+            $return = \preg_split("/[\r\n]{1,2}/u", $str);
+        }
+
+        if ($return === false) {
+            return $remove_empty_values ? [] : [''];
+        }
+
+        if (
+            $remove_short_values === null
+            &&
+            !$remove_empty_values
+        ) {
+            return $return;
+        }
+
+        return self::reduce_string_array(
+            $return,
+            $remove_empty_values,
+            $remove_short_values
+        );
+    }
+
+    /**
+     * Convert a string into an array of words.
+     *
+     * EXAMPLE: <code>UTF8::str_to_words('中文空白 oöäü#s', '#') // array('', '中文空白', ' ', 'oöäü#s', '')</code>
+     *
+     * @param string   $str
+     * @param string   $char_list           <p>Additional chars for the definition of "words".</p>
+     * @param bool     $remove_empty_values <p>Remove empty values.</p>
+     * @param int|null $remove_short_values <p>The min. string length or null to disable</p>
+     *
+     * @psalm-pure
+     *
+     * @return list<string>
+     *
+     * @phpstan-return ($remove_empty_values is true ? list<string> : non-empty-list<string>)
+     */
+    public static function str_to_words(
+        string $str,
+        string $char_list = '',
+        bool $remove_empty_values = false,
+        int $remove_short_values = null
+    ): array {
+        if ($str === '') {
+            return $remove_empty_values ? [] : [''];
+        }
+
+        $char_list = self::rxClass($char_list, '\pL');
+
+        $return = \preg_split("/({$char_list}+(?:[\p{Pd}’']{$char_list}+)*)/u", $str, -1, \PREG_SPLIT_DELIM_CAPTURE);
+        if ($return === false) {
+            return $remove_empty_values ? [] : [''];
+        }
+
+        if (
+            $remove_short_values === null
+            &&
+            !$remove_empty_values
+        ) {
+            return $return;
+        }
+
+        $tmp_return = self::reduce_string_array(
+            $return,
+            $remove_empty_values,
+            $remove_short_values
+        );
+
+        foreach ($tmp_return as &$item) {
+            $item = (string) $item;
+        }
+
+        return $tmp_return;
+    }
+
+    /**
+     * Truncates the string to a given length. If $substring is provided, and
+     * truncating occurs, the string is further truncated so that the substring
+     * may be appended without exceeding the desired length.
+     *
+     * @param string $str
+     * @param int    $length    <p>Desired length of the truncated string.</p>
+     * @param string $substring [optional] <p>The substring to append if it can fit. Default: ''</p>
+     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string after truncating.</p>
+     */
+    public static function str_truncate(
+        string $str,
+        int $length,
+        string $substring = '',
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ($length >= (int) \mb_strlen($str)) {
+                return $str;
+            }
+
+            if ($substring !== '') {
+                $length -= (int) \mb_strlen($substring);
+
+                /** @noinspection UnnecessaryCastingInspection */
+                return (string) \mb_substr($str, 0, $length) . $substring;
+            }
+
+            return (string) \mb_substr($str, 0, $length);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ($length >= (int) self::strlen($str, $encoding)) {
+            return $str;
+        }
+
+        if ($substring !== '') {
+            $length -= (int) self::strlen($substring, $encoding);
+        }
+
+        return (
+               (string) self::substr(
+                   $str,
+                   0,
+                   $length,
+                   $encoding
+               )
+               ) . $substring;
+    }
+
+    /**
+     * Truncates the string to a given length, while ensuring that it does not
+     * split words. If $substring is provided, and truncating occurs, the
+     * string is further truncated so that the substring may be appended without
+     * exceeding the desired length.
+     *
+     * @param string $str
+     * @param int    $length                                 <p>Desired length of the truncated string.</p>
+     * @param string $substring                              [optional] <p>The substring to append if it can fit.
+     *                                                       Default:
+     *                                                       ''</p>
+     * @param string $encoding                               [optional] <p>Default: 'UTF-8'</p>
+     * @param bool   $ignore_do_not_split_words_for_one_word [optional] <p>Default: false</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string after truncating.</p>
+     */
+    public static function str_truncate_safe(
+        string $str,
+        int $length,
+        string $substring = '',
+        string $encoding = 'UTF-8',
+        bool $ignore_do_not_split_words_for_one_word = false
+    ): string {
+        if ($str === '' || $length <= 0) {
+            return $substring;
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ($length >= (int) \mb_strlen($str)) {
+                return $str;
+            }
+
+            // need to further trim the string so we can append the substring
+            $length -= (int) \mb_strlen($substring);
+            if ($length <= 0) {
+                return $substring;
+            }
+
+            /** @var false|string $truncated - needed for PhpStan (stubs error) */
+            $truncated = \mb_substr($str, 0, $length);
+            if ($truncated === false) {
+                return '';
+            }
+
+            // if the last word was truncated
+            $space_position = \mb_strpos($str, ' ', $length - 1);
+            if ($space_position !== $length) {
+                // find pos of the last occurrence of a space, get up to that
+                $last_position = \mb_strrpos($truncated, ' ', 0);
+
+                if (
+                    $last_position !== false
+                    ||
+                    (
+                        $space_position !== false
+                        &&
+                        !$ignore_do_not_split_words_for_one_word
+                    )
+                ) {
+                    $truncated = (string) \mb_substr($truncated, 0, (int) $last_position);
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            if ($length >= (int) self::strlen($str, $encoding)) {
+                return $str;
+            }
+
+            // need to further trim the string so we can append the substring
+            $length -= (int) self::strlen($substring, $encoding);
+            if ($length <= 0) {
+                return $substring;
+            }
+
+            $truncated = self::substr($str, 0, $length, $encoding);
+
+            if ($truncated === false) {
+                return '';
+            }
+
+            // if the last word was truncated
+            $space_position = self::strpos($str, ' ', $length - 1, $encoding);
+            if ($space_position !== $length) {
+                // find pos of the last occurrence of a space, get up to that
+                $last_position = self::strrpos($truncated, ' ', 0, $encoding);
+
+                if (
+                    $last_position !== false
+                    ||
+                    (
+                        $space_position !== false
+                        &&
+                        !$ignore_do_not_split_words_for_one_word
+                    )
+                ) {
+                    $truncated = (string) self::substr($truncated, 0, (int) $last_position, $encoding);
+                }
+            }
+        }
+
+        return $truncated . $substring;
+    }
+
+    /**
+     * Returns a lowercase and trimmed string separated by underscores.
+     * Underscores are inserted before uppercase characters (with the exception
+     * of the first character of the string), and in place of spaces as well as
+     * dashes.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The underscored string.</p>
+     */
+    public static function str_underscored(string $str): string
+    {
+        return self::str_delimit($str, '_');
+    }
+
+    /**
+     * Returns an UpperCamelCase version of the supplied string. It trims
+     * surrounding spaces, capitalizes letters following digits, spaces, dashes
+     * and underscores, and removes spaces, dashes, underscores.
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string      $encoding                      [optional] <p>Default: 'UTF-8'</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string in UpperCamelCase.</p>
+     */
+    public static function str_upper_camelize(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        return self::ucfirst(self::str_camelize($str, $encoding), $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
+    }
+
+    /**
+     * Get the number of words in a specific string.
+     *
+     * EXAMPLES: <code>
+     * // format: 0 -> return only word count (int)
+     * //
+     * UTF8::str_word_count('中文空白 öäü abc#c'); // 4
+     * UTF8::str_word_count('中文空白 öäü abc#c', 0, '#'); // 3
+     *
+     * // format: 1 -> return words (array)
+     * //
+     * UTF8::str_word_count('中文空白 öäü abc#c', 1); // array('中文空白', 'öäü', 'abc', 'c')
+     * UTF8::str_word_count('中文空白 öäü abc#c', 1, '#'); // array('中文空白', 'öäü', 'abc#c')
+     *
+     * // format: 2 -> return words with offset (array)
+     * //
+     * UTF8::str_word_count('中文空白 öäü ab#c', 2); // array(0 => '中文空白', 5 => 'öäü', 9 => 'abc', 13 => 'c')
+     * UTF8::str_word_count('中文空白 öäü ab#c', 2, '#'); // array(0 => '中文空白', 5 => 'öäü', 9 => 'abc#c')
+     * </code>
+     *
+     * @param string $str       <p>The input string.</p>
+     * @param int    $format    [optional] <p>
+     *                          <strong>0</strong> => return a number of words (default)<br>
+     *                          <strong>1</strong> => return an array of words<br>
+     *                          <strong>2</strong> => return an array of words with word-offset as key
+     *                          </p>
+     * @param string $char_list [optional] <p>Additional chars that contains to words and do not start a new word.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int|string[]
+     *                      <p>The number of words in the string.</p>
+     *
+     * @phpstan-param 0|1|2 $format
+     * @phpstan-return ($format is 2 ? array<int, string> : ($format is 1 ? list<string> : 0|positive-int))
+     */
+    public static function str_word_count(string $str, int $format = 0, string $char_list = '')
+    {
+        $str_parts = self::str_to_words($str, $char_list);
+
+        $len = \count($str_parts);
+
+        if ($format === 1) {
+            $number_of_words = [];
+            for ($i = 1; $i < $len; $i += 2) {
+                $number_of_words[] = $str_parts[$i];
+            }
+
+            return $number_of_words;
+        }
+
+        if ($format === 2) {
+            $number_of_words = [];
+            $offset = (int) self::strlen($str_parts[0]);
+            for ($i = 1; $i < $len; $i += 2) {
+                $number_of_words[$offset] = $str_parts[$i];
+                $offset += (int) self::strlen($str_parts[$i]) + (int) self::strlen($str_parts[$i + 1]);
+            }
+
+            return $number_of_words;
+        }
+
+        $number_of_words = (int) (($len - 1) / 2);
+
+        /* @phpstan-ignore-next-line | it should be 0|positive-int, maybe nested "phpstan-return" is not working? */
+        return $number_of_words;
+    }
+
+    /**
+     * Case-insensitive string comparison.
+     *
+     * INFO: Case-insensitive version of UTF8::strcmp()
+     *
+     * EXAMPLE: <code>UTF8::strcasecmp("iñtërnâtiôn\nàlizætiøn", "Iñtërnâtiôn\nàlizætiøn"); // 0</code>
+     *
+     * @param string $str1     <p>The first string.</p>
+     * @param string $str2     <p>The second string.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
+     *             <strong>&gt; 0</strong> if str1 is greater than str2,<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strcasecmp(
+        string $str1,
+        string $str2,
+        string $encoding = 'UTF-8'
+    ): int {
+        return self::strcmp(
+            self::strtocasefold(
+                $str1,
+                true,
+                false,
+                $encoding,
+                null,
+                false
+            ),
+            self::strtocasefold(
+                $str2,
+                true,
+                false,
+                $encoding,
+                null,
+                false
+            )
+        );
+    }
+
+    /**
+     * Case-sensitive string comparison.
+     *
+     * EXAMPLE: <code>UTF8::strcmp("iñtërnâtiôn\nàlizætiøn", "iñtërnâtiôn\nàlizætiøn"); // 0</code>
+     *
+     * @param string $str1 <p>The first string.</p>
+     * @param string $str2 <p>The second string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if str1 is less than str2<br>
+     *             <strong>&gt; 0</strong> if str1 is greater than str2<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strcmp(string $str1, string $str2): int
+    {
+        if ($str1 === $str2) {
+            return 0;
+        }
+
+        return \strcmp(
+            \Normalizer::normalize($str1, \Normalizer::NFD),
+            \Normalizer::normalize($str2, \Normalizer::NFD)
+        );
+    }
+
+    /**
+     * Find length of initial segment not matching mask.
+     *
+     * @param string   $str
+     * @param string   $char_list
+     * @param int      $offset
+     * @param int|null $length
+     * @param string   $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *
+     * @phpstan-return 0|positive-int
+     */
+    public static function strcspn(
+        string $str,
+        string $char_list,
+        int $offset = 0,
+        int $length = null,
+        string $encoding = 'UTF-8'
+    ): int {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($char_list === '') {
+            return (int) self::strlen($str, $encoding);
+        }
+
+        if ($offset || $length !== null) {
+            if ($encoding === 'UTF-8') {
+                if ($length === null) {
+                    $str_tmp = \mb_substr($str, $offset);
+                } else {
+                    $str_tmp = \mb_substr($str, $offset, $length);
+                }
+            } else {
+                $str_tmp = self::substr($str, $offset, $length, $encoding);
+            }
+
+            if ($str_tmp === false) {
+                return 0;
+            }
+
+            $str = $str_tmp;
+        }
+
+        if ($str === '') {
+            return 0;
+        }
+
+        $matches = [];
+        if (\preg_match('/^(.*?)' . self::rxClass($char_list) . '/us', $str, $matches)) {
+            $return = self::strlen($matches[1], $encoding);
+            if ($return === false) {
+                return 0;
+            }
+
+            return $return;
+        }
+
+        return (int) self::strlen($str, $encoding);
+    }
+
+    /**
+     * Create a UTF-8 string from code points.
+     *
+     * INFO: opposite to UTF8::codepoints()
+     *
+     * EXAMPLE: <code>UTF8::string(array(246, 228, 252)); // 'öäü'</code>
+     *
+     * @param int|int[]|string|string[] $intOrHex <p>Integer or Hexadecimal codepoints.</p>
+     *
+     * @phpstan-param int[]|numeric-string[]|int|numeric-string $intOrHex
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A UTF-8 encoded string.</p>
+     */
+    public static function string($intOrHex): string
+    {
+        if ($intOrHex === []) {
+            return '';
+        }
+
+        if (!\is_array($intOrHex)) {
+            $intOrHex = [$intOrHex];
+        }
+
+        $str = '';
+        foreach ($intOrHex as $strPart) {
+            $str .= '&#' . (int) $strPart . ';';
+        }
+
+        // We cannot use html_entity_decode() here, as it will not return
+        // characters for many values < 160.
+        return mb_convert_encoding($str, 'UTF-8', 'HTML-ENTITIES');
+    }
+
+    /**
+     * Checks if string starts with "BOM" (Byte Order Mark Character) character.
+     *
+     * EXAMPLE: <code>UTF8::string_has_bom("\xef\xbb\xbf foobar"); // true</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p>
+     *              <strong>true</strong> if the string has BOM at the start,<br>
+     *              <strong>false</strong> otherwise
+     *              </p>
+     */
+    public static function string_has_bom(string $str): bool
+    {
+        foreach (self::$BOM as $bom_string => &$bom_byte_length) {
+            if (\strncmp($str, $bom_string, $bom_byte_length) === 0) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Strip HTML and PHP tags from a string + clean invalid UTF-8.
+     *
+     * EXAMPLE: <code>UTF8::strip_tags("<span>κόσμε\xa0\xa1</span>"); // 'κόσμε'</code>
+     *
+     * @see http://php.net/manual/en/function.strip-tags.php
+     *
+     * @param string      $str            <p>
+     *                                    The input string.
+     *                                    </p>
+     * @param string|null $allowable_tags [optional] <p>
+     *                                    You can use the optional second parameter to specify tags which should
+     *                                    not be stripped.
+     *                                    </p>
+     *                                    <p>
+     *                                    HTML comments and PHP tags are also stripped. This is hardcoded and
+     *                                    can not be changed with allowable_tags.
+     *                                    </p>
+     * @param bool        $clean_utf8     [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The stripped string.</p>
+     */
+    public static function strip_tags(
+        string $str,
+        string $allowable_tags = null,
+        bool $clean_utf8 = false
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            $str = self::clean($str);
+        }
+
+        if ($allowable_tags === null) {
+            return \strip_tags($str);
+        }
+
+        return \strip_tags($str, $allowable_tags);
+    }
+
+    /**
+     * Strip all whitespace characters. This includes tabs and newline
+     * characters, as well as multibyte whitespace such as the thin space
+     * and ideographic space.
+     *
+     * EXAMPLE: <code>UTF8::strip_whitespace('   Ο     συγγραφέας  '); // 'Οσυγγραφέας'</code>
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function strip_whitespace(string $str): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        return (string) \preg_replace('/[[:space:]]+/u', '', $str);
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string, case-insensitive.
+     *
+     * INFO: use UTF8::stripos_in_byte() for the byte-length
+     *
+     * EXAMPLE: <code>UTF8::stripos('aσσb', 'ΣΣ'); // 1</code> (σσ == ΣΣ)
+     *
+     * @see http://php.net/manual/en/function.mb-stripos.php
+     *
+     * @param string $haystack   <p>The string from which to get the position of the first occurrence of needle.</p>
+     * @param string $needle     <p>The string to find in haystack.</p>
+     * @param int    $offset     [optional] <p>The position in haystack to start searching.</p>
+     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   Return the <strong>(int)</strong> numeric position of the first occurrence of needle in the
+     *                   haystack string,<br> or <strong>false</strong> if needle is not found
+     *
+     * @phpstan-return false|0|positive-int
+     */
+    public static function stripos(
+        string $haystack,
+        string $needle,
+        int $offset = 0,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return 0;
+            }
+
+            return false;
+        }
+
+        if ($needle === '' && \PHP_VERSION_ID < 80000) {
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $haystack = self::clean($haystack);
+            $needle = self::clean($needle);
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_stripos($haystack, $needle, $offset);
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return \mb_stripos($haystack, $needle, $offset, $encoding);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_stripos()" can't handle other encodings
+            &&
+            $offset >= 0 // grapheme_stripos() can't handle negative offset
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_stripos($haystack, $needle, $offset);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($haystack . $needle)) {
+            return \stripos($haystack, $needle, $offset);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $haystack = self::strtocasefold($haystack, true, false, $encoding, null, false);
+        $needle = self::strtocasefold($needle, true, false, $encoding, null, false);
+
+        return self::strpos($haystack, $needle, $offset, $encoding);
+    }
+
+    /**
+     * Returns all of haystack starting from and including the first occurrence of needle to the end.
+     *
+     * EXAMPLE: <code>
+     * $str = 'iñtërnâtiônàlizætiøn';
+     * $search = 'NÂT';
+     *
+     * UTF8::stristr($str, $search)); // 'nâtiônàlizætiøn'
+     * UTF8::stristr($str, $search, true)); // 'iñtër'
+     * </code>
+     *
+     * @param string $haystack      <p>The input string. Must be valid UTF-8.</p>
+     * @param string $needle        <p>The string to look for. Must be valid UTF-8.</p>
+     * @param bool   $before_needle [optional] <p>
+     *                              If <b>TRUE</b>, it returns the part of the
+     *                              haystack before the first occurrence of the needle (excluding the needle).
+     *                              </p>
+     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>A sub-string,<br>or <strong>false</strong> if needle is not found.</p>
+     */
+    public static function stristr(
+        string $haystack,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return '';
+            }
+
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($needle === '') {
+            if (\PHP_VERSION_ID >= 80000) {
+                return $haystack;
+            }
+
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_stristr($haystack, $needle, $before_needle);
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return \mb_stristr($haystack, $needle, $before_needle, $encoding);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::stristr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_stristr()" can't handle other encodings
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_stristr($haystack, $needle, $before_needle);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        if (ASCII::is_ascii($needle . $haystack)) {
+            return \stristr($haystack, $needle, $before_needle);
+        }
+
+        \preg_match('/^(.*?)' . \preg_quote($needle, '/') . '/usi', $haystack, $match);
+
+        if (!isset($match[1])) {
+            return false;
+        }
+
+        if ($before_needle) {
+            return $match[1];
+        }
+
+        return self::substr($haystack, (int) self::strlen($match[1], $encoding), null, $encoding);
+    }
+
+    /**
+     * Get the string length, not the byte-length!
+     *
+     * INFO: use UTF8::strwidth() for the char-length
+     *
+     * EXAMPLE: <code>UTF8::strlen("Iñtërnâtiôn\xE9àlizætiøn")); // 20</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strlen.php
+     *
+     * @param string $str        <p>The string being checked for length.</p>
+     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>
+     *                   The number <strong>(int)</strong> of characters in the string $str having character encoding
+     *                   $encoding.
+     *                   (One multi-byte character counted as +1).
+     *                   <br>
+     *                   Can return <strong>false</strong>, if e.g. mbstring is not installed and we process invalid
+     *                   chars.
+     *                   </p>
+     *
+     * @phpstan-return false|0|positive-int
+     */
+    public static function strlen(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($str === '') {
+            return 0;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($clean_utf8) {
+            // "mb_strlen" and "\iconv_strlen" returns wrong length,
+            // if invalid characters are found in $str
+            $str = self::clean($str);
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore warnings, it's working anyway */
+                return @\mb_strlen($str);
+            }
+
+            /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore warnings, it's working anyway */
+            return @\mb_strlen($str, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            return \strlen($str);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+            &&
+            self::$SUPPORT['iconv'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strlen() without mbstring / iconv cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via iconv
+        //
+
+        if (self::$SUPPORT['iconv'] === true) {
+            $return_tmp = \iconv_strlen($str, $encoding);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_strlen()" can't handle other encodings
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_strlen($str);
+            /* @phpstan-ignore-next-line | "grapheme_strlen" will maybe return "null" for empty-strings and "false" on error */
+            if ($return_tmp !== false && $return_tmp !== null) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($str)) {
+            return \strlen($str);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        \preg_match_all('/./us', $str, $parts);
+
+        $return_tmp = \count($parts[0]);
+        if ($return_tmp === 0) {
+            return false;
+        }
+
+        return $return_tmp;
+    }
+
+    /**
+     * Get string length in byte.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *
+     * @phpstan-return 0|positive-int
+     */
+    public static function strlen_in_byte(string $str): int
+    {
+        if ($str === '') {
+            return 0;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_strlen($str, 'CP850'); // 8-BIT
+        }
+
+        return \strlen($str);
+    }
+
+    /**
+     * Case-insensitive string comparisons using a "natural order" algorithm.
+     *
+     * INFO: natural order version of UTF8::strcasecmp()
+     *
+     * EXAMPLES: <code>
+     * UTF8::strnatcasecmp('2', '10Hello WORLD 中文空白!'); // -1
+     * UTF8::strcasecmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // 1
+     *
+     * UTF8::strnatcasecmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // 1
+     * UTF8::strcasecmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // -1
+     * </code>
+     *
+     * @param string $str1     <p>The first string.</p>
+     * @param string $str2     <p>The second string.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if str1 is less than str2<br>
+     *             <strong>&gt; 0</strong> if str1 is greater than str2<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strnatcasecmp(string $str1, string $str2, string $encoding = 'UTF-8'): int
+    {
+        return self::strnatcmp(
+            self::strtocasefold($str1, true, false, $encoding, null, false),
+            self::strtocasefold($str2, true, false, $encoding, null, false)
+        );
+    }
+
+    /**
+     * String comparisons using a "natural order" algorithm
+     *
+     * INFO: natural order version of UTF8::strcmp()
+     *
+     * EXAMPLES: <code>
+     * UTF8::strnatcmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // -1
+     * UTF8::strcmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // 1
+     *
+     * UTF8::strnatcmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // 1
+     * UTF8::strcmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // -1
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.strnatcmp.php
+     *
+     * @param string $str1 <p>The first string.</p>
+     * @param string $str2 <p>The second string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
+     *             <strong>&gt; 0</strong> if str1 is greater than str2;<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strnatcmp(string $str1, string $str2): int
+    {
+        if ($str1 === $str2) {
+            return 0;
+        }
+
+        return \strnatcmp(
+            (string) self::strtonatfold($str1),
+            (string) self::strtonatfold($str2)
+        );
+    }
+
+    /**
+     * Case-insensitive string comparison of the first n characters.
+     *
+     * EXAMPLE: <code>
+     * UTF8::strcasecmp("iñtërnâtiôn\nàlizætiøn321", "iñtërnâtiôn\nàlizætiøn123", 5); // 0
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.strncasecmp.php
+     *
+     * @param string $str1     <p>The first string.</p>
+     * @param string $str2     <p>The second string.</p>
+     * @param int    $len      <p>The length of strings to be used in the comparison.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if <i>str1</i> is less than <i>str2</i>;<br>
+     *             <strong>&gt; 0</strong> if <i>str1</i> is greater than <i>str2</i>;<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strncasecmp(
+        string $str1,
+        string $str2,
+        int $len,
+        string $encoding = 'UTF-8'
+    ): int {
+        return self::strncmp(
+            self::strtocasefold($str1, true, false, $encoding, null, false),
+            self::strtocasefold($str2, true, false, $encoding, null, false),
+            $len
+        );
+    }
+
+    /**
+     * String comparison of the first n characters.
+     *
+     * EXAMPLE: <code>
+     * UTF8::strncmp("Iñtërnâtiôn\nàlizætiøn321", "Iñtërnâtiôn\nàlizætiøn123", 5); // 0
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.strncmp.php
+     *
+     * @param string $str1     <p>The first string.</p>
+     * @param string $str2     <p>The second string.</p>
+     * @param int    $len      <p>Number of characters to use in the comparison.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if <i>str1</i> is less than <i>str2</i>;<br>
+     *             <strong>&gt; 0</strong> if <i>str1</i> is greater than <i>str2</i>;<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function strncmp(
+        string $str1,
+        string $str2,
+        int $len,
+        string $encoding = 'UTF-8'
+    ): int {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($encoding === 'UTF-8') {
+            $str1 = (string) \mb_substr($str1, 0, $len);
+            $str2 = (string) \mb_substr($str2, 0, $len);
+        } else {
+            $str1 = (string) self::substr($str1, 0, $len, $encoding);
+            $str2 = (string) self::substr($str2, 0, $len, $encoding);
+        }
+
+        return self::strcmp($str1, $str2);
+    }
+
+    /**
+     * Search a string for any of a set of characters.
+     *
+     * EXAMPLE: <code>UTF8::strpbrk('-中文空白-', '白'); // '白-'</code>
+     *
+     * @see http://php.net/manual/en/function.strpbrk.php
+     *
+     * @param string $haystack  <p>The string where char_list is looked for.</p>
+     * @param string $char_list <p>This parameter is case-sensitive.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The string starting from the character found, or false if it is not found.</p>
+     */
+    public static function strpbrk(string $haystack, string $char_list)
+    {
+        if ($haystack === '' || $char_list === '') {
+            return false;
+        }
+
+        if (\preg_match('/' . self::rxClass($char_list) . '/us', $haystack, $m)) {
+            return \substr($haystack, (int) \strpos($haystack, $m[0]));
+        }
+
+        return false;
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string.
+     *
+     * INFO: use UTF8::strpos_in_byte() for the byte-length
+     *
+     * EXAMPLE: <code>UTF8::strpos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 8</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strpos.php
+     *
+     * @param string     $haystack   <p>The string from which to get the position of the first occurrence of needle.</p>
+     * @param int|string $needle     <p>The string to find in haystack.<br>Or a code point as int.</p>
+     * @param int        $offset     [optional] <p>The search offset. If it is not specified, 0 is used.</p>
+     * @param string     $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   The <strong>(int)</strong> numeric position of the first occurrence of needle in the haystack
+     *                   string.<br> If needle is not found it returns false.
+     *
+     * @phpstan-return false|0|positive-int
+     */
+    public static function strpos(
+        string $haystack,
+        $needle,
+        int $offset = 0,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000) {
+                if ($needle === '') {
+                    return 0;
+                }
+            } else {
+                return false;
+            }
+        }
+
+        // iconv and mbstring do not support integer $needle
+        if ((int) $needle === $needle) {
+            $needle = (string) self::chr($needle);
+        }
+        $needle = (string) $needle;
+
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return 0;
+            }
+
+            return false;
+        }
+
+        if ($needle === '' && \PHP_VERSION_ID < 80000) {
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
+                return @\mb_strpos($haystack, $needle, $offset);
+            }
+
+            /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
+            return @\mb_strpos($haystack, $needle, $offset, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            return \strpos($haystack, $needle, $offset);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['iconv'] === false
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strpos() without mbstring / iconv cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_strpos()" can't handle other encodings
+            &&
+            $offset >= 0 // grapheme_strpos() can't handle negative offset
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_strpos($haystack, $needle, $offset);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback via iconv
+        //
+
+        if (
+            $offset >= 0 // iconv_strpos() can't handle negative offset
+            &&
+            self::$SUPPORT['iconv'] === true
+        ) {
+            // ignore invalid negative offset to keep compatibility
+            // with php < 5.5.35, < 5.6.21, < 7.0.6
+            $return_tmp = \iconv_strpos($haystack, $needle, $offset > 0 ? $offset : 0, $encoding);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($haystack . $needle)) {
+            /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
+            return @\strpos($haystack, $needle, $offset);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $haystack_tmp = self::substr($haystack, $offset, null, $encoding);
+        if ($haystack_tmp === false) {
+            $haystack_tmp = '';
+        }
+        $haystack = (string) $haystack_tmp;
+
+        if ($offset < 0) {
+            $offset = 0;
+        }
+
+        $pos = \strpos($haystack, $needle);
+        if ($pos === false) {
+            return false;
+        }
+
+        if ($pos) {
+            return $offset + (int) self::strlen(\substr($haystack, 0, $pos), $encoding);
+        }
+
+        return $offset + 0;
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string.
+     *
+     * @param string $haystack <p>
+     *                         The string being checked.
+     *                         </p>
+     * @param string $needle   <p>
+     *                         The position counted from the beginning of haystack.
+     *                         </p>
+     * @param int    $offset   [optional] <p>
+     *                         The search offset. If it is not specified, 0 is used.
+     *                         </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The numeric position of the first occurrence of needle in the
+     *                   haystack string. If needle is not found, it returns false.</p>
+     *
+     * @phpstan-return false|0|positive-int
+     */
+    public static function strpos_in_byte(string $haystack, string $needle, int $offset = 0)
+    {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_strpos($haystack, $needle, $offset, 'CP850'); // 8-BIT
+        }
+
+        return \strpos($haystack, $needle, $offset);
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string, case-insensitive.
+     *
+     * @param string $haystack <p>
+     *                         The string being checked.
+     *                         </p>
+     * @param string $needle   <p>
+     *                         The position counted from the beginning of haystack.
+     *                         </p>
+     * @param int    $offset   [optional] <p>
+     *                         The search offset. If it is not specified, 0 is used.
+     *                         </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The numeric position of the first occurrence of needle in the
+     *                   haystack string. If needle is not found, it returns false.</p>
+     *
+     * @phpstan-return false|0|positive-int
+     */
+    public static function stripos_in_byte(string $haystack, string $needle, int $offset = 0)
+    {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_stripos($haystack, $needle, $offset, 'CP850'); // 8-BIT
+        }
+
+        return \stripos($haystack, $needle, $offset);
+    }
+
+    /**
+     * Find the last occurrence of a character in a string within another.
+     *
+     * EXAMPLE: <code>UTF8::strrchr('κόσμεκόσμε-äöü', 'κόσμε'); // 'κόσμε-äöü'</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strrchr.php
+     *
+     * @param string $haystack      <p>The string from which to get the last occurrence of needle.</p>
+     * @param string $needle        <p>The string to find in haystack</p>
+     * @param bool   $before_needle [optional] <p>
+     *                              Determines which portion of haystack
+     *                              this function returns.
+     *                              If set to true, it returns all of haystack
+     *                              from the beginning to the last occurrence of needle.
+     *                              If set to false, it returns all of haystack
+     *                              from the last occurrence of needle to the end,
+     *                              </p>
+     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The portion of haystack or false if needle is not found.</p>
+     */
+    public static function strrchr(
+        string $haystack,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strrchr($haystack, $needle, $before_needle);
+            }
+
+            return \mb_strrchr($haystack, $needle, $before_needle, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            !$before_needle
+            &&
+            (
+                $encoding === 'CP850'
+                ||
+                $encoding === 'ASCII'
+            )
+        ) {
+            return \strrchr($haystack, $needle);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strrchr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via iconv
+        //
+
+        if (self::$SUPPORT['iconv'] === true) {
+            $needle_tmp = self::substr($needle, 0, 1, $encoding);
+            if ($needle_tmp === false) {
+                return false;
+            }
+            $needle = $needle_tmp;
+
+            $pos = \iconv_strrpos($haystack, $needle, $encoding);
+            if ($pos === false) {
+                return false;
+            }
+
+            if ($before_needle) {
+                return self::substr($haystack, 0, $pos, $encoding);
+            }
+
+            return self::substr($haystack, $pos, null, $encoding);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $needle_tmp = self::substr($needle, 0, 1, $encoding);
+        if ($needle_tmp === false) {
+            return false;
+        }
+        $needle = $needle_tmp;
+
+        $pos = self::strrpos($haystack, $needle, 0, $encoding);
+        if ($pos === false) {
+            return false;
+        }
+
+        if ($before_needle) {
+            return self::substr($haystack, 0, $pos, $encoding);
+        }
+
+        return self::substr($haystack, $pos, null, $encoding);
+    }
+
+    /**
+     * Reverses characters order in the string.
+     *
+     * EXAMPLE: <code>UTF8::strrev('κ-öäü'); // 'üäö-κ'</code>
+     *
+     * @param string $str      <p>The input string.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The string with characters in the reverse sequence.</p>
+     */
+    public static function strrev(string $str, string $encoding = 'UTF-8'): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        // init
+        $reversed = '';
+
+        $str = self::emoji_encode($str, true);
+
+        if ($encoding === 'UTF-8') {
+            if (self::$SUPPORT['intl'] === true) {
+                // try "grapheme" first: https://stackoverflow.com/questions/17496493/strrev-dosent-support-utf-8
+                $i = (int) \grapheme_strlen($str);
+                while ($i--) {
+                    $reversed_tmp = \grapheme_substr($str, $i, 1);
+                    if ($reversed_tmp !== false) {
+                        $reversed .= $reversed_tmp;
+                    }
+                }
+            } else {
+                $i = (int) \mb_strlen($str);
+                while ($i--) {
+                    $reversed_tmp = \mb_substr($str, $i, 1);
+                    if ($reversed_tmp !== false) { /* @phpstan-ignore-line | old polyfill will return false, or? */
+                        $reversed .= $reversed_tmp;
+                    }
+                }
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $i = (int) self::strlen($str, $encoding);
+            while ($i--) {
+                $reversed_tmp = self::substr($str, $i, 1, $encoding);
+                if ($reversed_tmp !== false) {
+                    $reversed .= $reversed_tmp;
+                }
+            }
+        }
+
+        return self::emoji_decode($reversed, true);
+    }
+
+    /**
+     * Find the last occurrence of a character in a string within another, case-insensitive.
+     *
+     * EXAMPLE: <code>UTF8::strrichr('Aκόσμεκόσμε-äöü', 'aκόσμε'); // 'Aκόσμεκόσμε-äöü'</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strrichr.php
+     *
+     * @param string $haystack      <p>The string from which to get the last occurrence of needle.</p>
+     * @param string $needle        <p>The string to find in haystack.</p>
+     * @param bool   $before_needle [optional] <p>
+     *                              Determines which portion of haystack
+     *                              this function returns.
+     *                              If set to true, it returns all of haystack
+     *                              from the beginning to the last occurrence of needle.
+     *                              If set to false, it returns all of haystack
+     *                              from the last occurrence of needle to the end,
+     *                              </p>
+     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The portion of haystack or<br>false if needle is not found.</p>
+     */
+    public static function strrichr(
+        string $haystack,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strrichr($haystack, $needle, $before_needle);
+            }
+
+            return \mb_strrichr($haystack, $needle, $before_needle, $encoding);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $needle_tmp = self::substr($needle, 0, 1, $encoding);
+        if ($needle_tmp === false) {
+            return false;
+        }
+        $needle = $needle_tmp;
+
+        $pos = self::strripos($haystack, $needle, 0, $encoding);
+        if ($pos === false) {
+            return false;
+        }
+
+        if ($before_needle) {
+            return self::substr($haystack, 0, $pos, $encoding);
+        }
+
+        return self::substr($haystack, $pos, null, $encoding);
+    }
+
+    /**
+     * Find the position of the last occurrence of a substring in a string, case-insensitive.
+     *
+     * EXAMPLE: <code>UTF8::strripos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 13</code>
+     *
+     * @param string     $haystack   <p>The string to look in.</p>
+     * @param int|string $needle     <p>The string to look for.</p>
+     * @param int        $offset     [optional] <p>Number of characters to ignore in the beginning or end.</p>
+     * @param string     $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The <strong>(int)</strong> numeric position of the last occurrence of needle in the haystack
+     *                   string.<br>If needle is not found, it returns false.</p>
+     */
+    public static function strripos(
+        string $haystack,
+        $needle,
+        int $offset = 0,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000) {
+                if ($needle === '') {
+                    return 0;
+                }
+            } else {
+                return false;
+            }
+        }
+
+        // iconv and mbstring do not support integer $needle
+        if ((int) $needle === $needle && $needle >= 0) {
+            $needle = (string) self::chr($needle);
+        }
+        $needle = (string) $needle;
+
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return 0;
+            }
+
+            return false;
+        }
+
+        if ($needle === '' && \PHP_VERSION_ID < 80000) {
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // mb_strripos() && iconv_strripos() is not tolerant to invalid characters
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        //
+        // fallback via mbstrig
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strripos($haystack, $needle, $offset);
+            }
+
+            return \mb_strripos($haystack, $needle, $offset, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            return \strripos($haystack, $needle, $offset);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strripos() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_strripos()" can't handle other encodings
+            &&
+            $offset >= 0 // grapheme_strripos() can't handle negative offset
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_strripos($haystack, $needle, $offset);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($haystack . $needle)) {
+            return \strripos($haystack, $needle, $offset);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $haystack = self::strtocasefold($haystack, true, false, $encoding);
+        $needle = self::strtocasefold($needle, true, false, $encoding);
+
+        return self::strrpos($haystack, $needle, $offset, $encoding, $clean_utf8);
+    }
+
+    /**
+     * Finds position of last occurrence of a string within another, case-insensitive.
+     *
+     * @param string $haystack <p>
+     *                         The string from which to get the position of the last occurrence
+     *                         of needle.
+     *                         </p>
+     * @param string $needle   <p>
+     *                         The string to find in haystack.
+     *                         </p>
+     * @param int    $offset   [optional] <p>
+     *                         The position in haystack
+     *                         to start searching.
+     *                         </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>eturn the numeric position of the last occurrence of needle in the
+     *                   haystack string, or false if needle is not found.</p>
+     */
+    public static function strripos_in_byte(string $haystack, string $needle, int $offset = 0)
+    {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_strripos($haystack, $needle, $offset, 'CP850'); // 8-BIT
+        }
+
+        return \strripos($haystack, $needle, $offset);
+    }
+
+    /**
+     * Find the position of the last occurrence of a substring in a string.
+     *
+     * EXAMPLE: <code>UTF8::strrpos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 13</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strrpos.php
+     *
+     * @param string     $haystack   <p>The string being checked, for the last occurrence of needle</p>
+     * @param int|string $needle     <p>The string to find in haystack.<br>Or a code point as int.</p>
+     * @param int        $offset     [optional] <p>May be specified to begin searching an arbitrary number of characters
+     *                               into the string. Negative values will stop searching at an arbitrary point prior to
+     *                               the end of the string.
+     *                               </p>
+     * @param string     $encoding   [optional] <p>Set the charset.</p>
+     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The <strong>(int)</strong> numeric position of the last occurrence of needle in the haystack
+     *                   string.<br>If needle is not found, it returns false.</p>
+     */
+    public static function strrpos(
+        string $haystack,
+        $needle,
+        int $offset = 0,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000) {
+                if ($needle === '') {
+                    return 0;
+                }
+            } else {
+                return false;
+            }
+        }
+
+        // iconv and mbstring do not support integer $needle
+        if ((int) $needle === $needle && $needle >= 0) {
+            $needle = (string) self::chr($needle);
+        }
+        $needle = (string) $needle;
+
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return 0;
+            }
+
+            return false;
+        }
+
+        if ($needle === '' && \PHP_VERSION_ID < 80000) {
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // mb_strrpos && iconv_strrpos is not tolerant to invalid characters
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strrpos($haystack, $needle, $offset);
+            }
+
+            return \mb_strrpos($haystack, $needle, $offset, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            return \strrpos($haystack, $needle, $offset);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strrpos() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $offset >= 0 // grapheme_strrpos() can't handle negative offset
+            &&
+            $encoding === 'UTF-8' // INFO: "grapheme_strrpos()" can't handle other encodings
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_strrpos($haystack, $needle, $offset);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($haystack . $needle)) {
+            return \strrpos($haystack, $needle, $offset);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        $haystack_tmp = null;
+        if ($offset > 0) {
+            $haystack_tmp = self::substr($haystack, $offset);
+        } elseif ($offset < 0) {
+            $haystack_tmp = self::substr($haystack, 0, $offset);
+            $offset = 0;
+        }
+
+        if ($haystack_tmp !== null) {
+            if ($haystack_tmp === false) {
+                $haystack_tmp = '';
+            }
+            $haystack = (string) $haystack_tmp;
+        }
+
+        $pos = \strrpos($haystack, $needle);
+        if ($pos === false) {
+            return false;
+        }
+
+        /** @var false|string $str_tmp - needed for PhpStan (stubs error) */
+        $str_tmp = \substr($haystack, 0, $pos);
+        if ($str_tmp === false) {
+            return false;
+        }
+
+        return $offset + (int) self::strlen($str_tmp);
+    }
+
+    /**
+     * Find the position of the last occurrence of a substring in a string.
+     *
+     * @param string $haystack <p>
+     *                         The string being checked, for the last occurrence
+     *                         of needle.
+     *                         </p>
+     * @param string $needle   <p>
+     *                         The string to find in haystack.
+     *                         </p>
+     * @param int    $offset   [optional] <p>May be specified to begin searching an arbitrary number of characters into
+     *                         the string. Negative values will stop searching at an arbitrary point
+     *                         prior to the end of the string.
+     *                         </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The numeric position of the last occurrence of needle in the
+     *                   haystack string. If needle is not found, it returns false.</p>
+     */
+    public static function strrpos_in_byte(string $haystack, string $needle, int $offset = 0)
+    {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_strrpos($haystack, $needle, $offset, 'CP850'); // 8-BIT
+        }
+
+        return \strrpos($haystack, $needle, $offset);
+    }
+
+    /**
+     * Finds the length of the initial segment of a string consisting entirely of characters contained within a given
+     * mask.
+     *
+     * EXAMPLE: <code>UTF8::strspn('iñtërnâtiônàlizætiøn', 'itñ'); // '3'</code>
+     *
+     * @param string   $str      <p>The input string.</p>
+     * @param string   $mask     <p>The mask of chars</p>
+     * @param int      $offset   [optional]
+     * @param int|null $length   [optional]
+     * @param string   $encoding [optional] <p>Set the charset.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     */
+    public static function strspn(
+        string $str,
+        string $mask,
+        int $offset = 0,
+        int $length = null,
+        string $encoding = 'UTF-8'
+    ) {
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($offset || $length !== null) {
+            if ($encoding === 'UTF-8') {
+                if ($length === null) {
+                    $str = (string) \mb_substr($str, $offset);
+                } else {
+                    $str = (string) \mb_substr($str, $offset, $length);
+                }
+            } else {
+                $str = (string) self::substr($str, $offset, $length, $encoding);
+            }
+        }
+
+        if ($str === '' || $mask === '') {
+            return 0;
+        }
+
+        $matches = [];
+
+        return \preg_match('/^' . self::rxClass($mask) . '+/u', $str, $matches) ? (int) self::strlen($matches[0], $encoding) : 0;
+    }
+
+    /**
+     * Returns part of haystack string from the first occurrence of needle to the end of haystack.
+     *
+     * EXAMPLE: <code>
+     * $str = 'iñtërnâtiônàlizætiøn';
+     * $search = 'nât';
+     *
+     * UTF8::strstr($str, $search)); // 'nâtiônàlizætiøn'
+     * UTF8::strstr($str, $search, true)); // 'iñtër'
+     * </code>
+     *
+     * @param string $haystack      <p>The input string. Must be valid UTF-8.</p>
+     * @param string $needle        <p>The string to look for. Must be valid UTF-8.</p>
+     * @param bool   $before_needle [optional] <p>
+     *                              If <b>TRUE</b>, strstr() returns the part of the
+     *                              haystack before the first occurrence of the needle (excluding the needle).
+     *                              </p>
+     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>A sub-string,<br>or <strong>false</strong> if needle is not found.</p>
+     */
+    public static function strstr(
+        string $haystack,
+        string $needle,
+        bool $before_needle = false,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($haystack === '') {
+            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
+                return '';
+            }
+
+            return false;
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($needle === '') {
+            if (\PHP_VERSION_ID >= 80000) {
+                return $haystack;
+            }
+
+            return false;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strstr($haystack, $needle, $before_needle);
+            }
+
+            return \mb_strstr($haystack, $needle, $before_needle, $encoding);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            return \strstr($haystack, $needle, $before_needle);
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strstr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_strstr()" can't handle other encodings
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_strstr($haystack, $needle, $before_needle);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($haystack . $needle)) {
+            return \strstr($haystack, $needle, $before_needle);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        \preg_match('/^(.*?)' . \preg_quote($needle, '/') . '/us', $haystack, $match);
+
+        if (!isset($match[1])) {
+            return false;
+        }
+
+        if ($before_needle) {
+            return $match[1];
+        }
+
+        return self::substr($haystack, (int) self::strlen($match[1]));
+    }
+
+    /**
+     * Finds first occurrence of a string within another.
+     *
+     * @param string $haystack      <p>
+     *                              The string from which to get the first occurrence
+     *                              of needle.
+     *                              </p>
+     * @param string $needle        <p>
+     *                              The string to find in haystack.
+     *                              </p>
+     * @param bool   $before_needle [optional] <p>
+     *                              Determines which portion of haystack
+     *                              this function returns.
+     *                              If set to true, it returns all of haystack
+     *                              from the beginning to the first occurrence of needle.
+     *                              If set to false, it returns all of haystack
+     *                              from the first occurrence of needle to the end,
+     *                              </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The portion of haystack,
+     *                      or false if needle is not found.</p>
+     */
+    public static function strstr_in_byte(
+        string $haystack,
+        string $needle,
+        bool $before_needle = false
+    ) {
+        if ($haystack === '' || $needle === '') {
+            return false;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_strstr($haystack, $needle, $before_needle, 'CP850'); // 8-BIT
+        }
+
+        return \strstr($haystack, $needle, $before_needle);
+    }
+
+    /**
+     * Unicode transformation for case-less matching.
+     *
+     * EXAMPLE: <code>UTF8::strtocasefold('ǰ◌̱'); // 'ǰ◌̱'</code>
+     *
+     * @see http://unicode.org/reports/tr21/tr21-5.html
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param bool        $full       [optional] <p>
+     *                                <b>true</b>, replace full case folding chars (default)<br>
+     *                                <b>false</b>, use only limited static array [UTF8::$COMMON_CASE_FOLD]
+     *                                </p>
+     * @param bool        $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string      $encoding   [optional] <p>Set the charset.</p>
+     * @param string|null $lang       [optional] <p>Set the language for special cases: az, el, lt, tr</p>
+     * @param bool        $lower      [optional] <p>Use lowercase string, otherwise use uppercase string. PS: uppercase
+     *                                is for some languages better ...</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function strtocasefold(
+        string $str,
+        bool $full = true,
+        bool $clean_utf8 = false,
+        string $encoding = 'UTF-8',
+        string $lang = null,
+        bool $lower = true
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        $str = self::fixStrCaseHelper($str, $lower, $full);
+
+        if ($lang === null && $encoding === 'UTF-8') {
+            if ($lower) {
+                return \mb_strtolower($str);
+            }
+
+            return \mb_strtoupper($str);
+        }
+
+        if ($lower) {
+            return self::strtolower($str, $encoding, false, $lang);
+        }
+
+        return self::strtoupper($str, $encoding, false, $lang);
+    }
+
+    /**
+     * Make a string lowercase.
+     *
+     * EXAMPLE: <code>UTF8::strtolower('DÉJÀ Σσς Iıİi'); // 'déjà σσς iıii'</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strtolower.php
+     *
+     * @param string      $str                           <p>The string being lowercased.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>String with all alphabetic characters converted to lowercase.</p>
+     */
+    public static function strtolower(
+        $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        // init
+        $str = (string) $str;
+
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        // hack for old php version or for the polyfill ...
+        if ($try_to_keep_the_string_length) {
+            $str = self::fixStrCaseHelper($str, true);
+        }
+
+        if ($lang === null && $encoding === 'UTF-8') {
+            return \mb_strtolower($str);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ($lang !== null) {
+            if (self::$SUPPORT['intl'] === true) {
+                if (self::$INTL_TRANSLITERATOR_LIST === null) {
+                    self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
+                }
+
+                $language_code = $lang . '-Lower';
+                if (!\in_array($language_code, self::$INTL_TRANSLITERATOR_LIST, true)) {
+                    /**
+                     * @psalm-suppress ImpureFunctionCall - this is only a warning
+                     */
+                    \trigger_error('UTF8::strtolower() cannot handle special language: ' . $lang . ' | supported: ' . \print_r(self::$INTL_TRANSLITERATOR_LIST, true), \E_USER_WARNING);
+
+                    $language_code = 'Any-Lower';
+                }
+
+                return (string) \transliterator_transliterate($language_code, $str);
+            }
+
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strtolower() without intl cannot handle the "lang" parameter: ' . $lang, \E_USER_WARNING);
+        }
+
+        // always fallback via symfony polyfill
+        return \mb_strtolower($str, $encoding);
+    }
+
+    /**
+     * Make a string uppercase.
+     *
+     * EXAMPLE: <code>UTF8::strtoupper('Déjà Σσς Iıİi'); // 'DÉJÀ ΣΣΣ IIİI'</code>
+     *
+     * @see http://php.net/manual/en/function.mb-strtoupper.php
+     *
+     * @param string      $str                           <p>The string being uppercased.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset.</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>String with all alphabetic characters converted to uppercase.</p>
+     */
+    public static function strtoupper(
+        $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        // init
+        $str = (string) $str;
+
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        // hack for old php version or for the polyfill ...
+        if ($try_to_keep_the_string_length) {
+            $str = self::fixStrCaseHelper($str);
+        }
+
+        if ($lang === null && $encoding === 'UTF-8') {
+            return \mb_strtoupper($str);
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ($lang !== null) {
+            if (self::$SUPPORT['intl'] === true) {
+                if (self::$INTL_TRANSLITERATOR_LIST === null) {
+                    self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
+                }
+
+                $language_code = $lang . '-Upper';
+                if (!\in_array($language_code, self::$INTL_TRANSLITERATOR_LIST, true)) {
+                    /**
+                     * @psalm-suppress ImpureFunctionCall - this is only a warning
+                     */
+                    \trigger_error('UTF8::strtoupper() without intl for special language: ' . $lang, \E_USER_WARNING);
+
+                    $language_code = 'Any-Upper';
+                }
+
+                return (string) \transliterator_transliterate($language_code, $str);
+            }
+
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::strtolower() without intl cannot handle the "lang"-parameter: ' . $lang, \E_USER_WARNING);
+        }
+
+        // always fallback via symfony polyfill
+        return \mb_strtoupper($str, $encoding);
+    }
+
+    /**
+     * Translate characters or replace sub-strings.
+     *
+     * EXAMPLE:
+     * <code>
+     * $array = [
+     *     'Hello'   => '○●◎',
+     *     '中文空白' => 'earth',
+     * ];
+     * UTF8::strtr('Hello 中文空白', $array); // '○●◎ earth'
+     * </code>
+     *
+     * @see http://php.net/manual/en/function.strtr.php
+     *
+     * @param string          $str  <p>The string being translated.</p>
+     * @param string|string[] $from <p>The string replacing from.</p>
+     * @param string|string[] $to   [optional] <p>The string being translated to to.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>This function returns a copy of str, translating all occurrences of each character in "from"
+     *                to the corresponding character in "to".</p>
+     */
+    public static function strtr(string $str, $from, $to = ''): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($from === $to) {
+            return $str;
+        }
+
+        if ($to !== '') {
+            if (!\is_array($from)) {
+                $from = self::str_split($from);
+            }
+
+            if (!\is_array($to)) {
+                $to = self::str_split($to);
+            }
+
+            $count_from = \count($from);
+            $count_to = \count($to);
+
+            if ($count_from !== $count_to) {
+                if ($count_from > $count_to) {
+                    $from = \array_slice($from, 0, $count_to);
+                } elseif ($count_from < $count_to) {
+                    $to = \array_slice($to, 0, $count_from);
+                }
+            }
+
+            try {
+                $from = \array_combine($from, $to);
+            } catch (\Error $e) {
+                // PHP >= 8.0 : array_combine() will now throw a ValueError if the number of elements for each array is not equal; previously this function returned false instead.
+                $from = false;
+            }
+            if ($from === false) {
+                throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . \print_r($from, true) . ' | to: ' . \print_r($to, true) . ')');
+            }
+        }
+
+        if (\is_string($from)) {
+            return \str_replace($from, $to, $str);
+        }
+
+        return \strtr($str, $from);
+    }
+
+    /**
+     * Return the width of a string.
+     *
+     * INFO: use UTF8::strlen() for the byte-length
+     *
+     * EXAMPLE: <code>UTF8::strwidth("Iñtërnâtiôn\xE9àlizætiøn")); // 21</code>
+     *
+     * @param string $str        <p>The input string.</p>
+     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *
+     * @phpstan-return 0|positive-int
+     */
+    public static function strwidth(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ): int {
+        if ($str === '') {
+            return 0;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($clean_utf8) {
+            // iconv and mbstring are not tolerant to invalid encoding
+            // further, their behaviour is inconsistent with that of PHP's substr
+            $str = self::clean($str);
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_strwidth($str);
+            }
+
+            return \mb_strwidth($str, $encoding);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        if ($encoding !== 'UTF-8') {
+            $str = self::encode('UTF-8', $str, false, $encoding);
+        }
+
+        $wide = 0;
+        $str = (string) \preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $str, -1, $wide);
+
+        /* @phpstan-ignore-next-line | should return 0|positive-int */
+        return ($wide << 1) + (int) self::strlen($str);
+    }
+
+    /**
+     * Get part of a string.
+     *
+     * EXAMPLE: <code>UTF8::substr('中文空白', 1, 2); // '文空'</code>
+     *
+     * @see http://php.net/manual/en/function.mb-substr.php
+     *
+     * @param string   $str        <p>The string being checked.</p>
+     * @param int      $offset     <p>The first position used in str.</p>
+     * @param int|null $length     [optional] <p>The maximum length of the returned string.</p>
+     * @param string   $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      The portion of <i>str</i> specified by the <i>offset</i> and
+     *                      <i>length</i> parameters.</p><p>If <i>str</i> is shorter than <i>offset</i>
+     *                      characters long, <b>FALSE</b> will be returned.
+     */
+    public static function substr(
+        string $str,
+        int $offset = 0,
+        int $length = null,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        // empty string
+        if ($str === '' || $length === 0) {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // iconv and mbstring are not tolerant to invalid encoding
+            // further, their behaviour is inconsistent with that of PHP's substr
+            $str = self::clean($str);
+        }
+
+        // whole string
+        if (!$offset && $length === null) {
+            return $str;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        //
+        // fallback via mbstring
+        //
+
+        if (self::$SUPPORT['mbstring'] === true && $encoding === 'UTF-8') {
+            if ($length === null) {
+                return \mb_substr($str, $offset);
+            }
+
+            return \mb_substr($str, $offset, $length);
+        }
+
+        //
+        // fallback for binary || ascii only
+        //
+
+        if (
+            $encoding === 'CP850'
+            ||
+            $encoding === 'ASCII'
+        ) {
+            if ($length === null) {
+                return \substr($str, $offset);
+            }
+
+            return \substr($str, $offset, $length);
+        }
+
+        // otherwise we need the string-length
+        $str_length = 0;
+        if (
+            $offset
+            ||
+            $length === null /* @phpstan-ignore-line | can be NULL here?! */
+        ) {
+            $str_length = self::strlen($str, $encoding);
+        }
+
+        // e.g.: invalid chars + mbstring not installed
+        if ($str_length === false) {
+            return false;
+        }
+
+        // empty string
+        if ($offset === $str_length && !$length) {
+            return '';
+        }
+
+        // impossible
+        if ($offset && $offset > $str_length) {
+            return '';
+        }
+
+        $length = $length ?? $str_length;
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::substr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        //
+        // fallback via intl
+        //
+
+        if (
+            $encoding === 'UTF-8' // INFO: "grapheme_substr()" can't handle other encodings
+            &&
+            $offset >= 0 // grapheme_substr() can't handle negative offset
+            &&
+            self::$SUPPORT['intl'] === true
+        ) {
+            $return_tmp = \grapheme_substr($str, $offset, $length);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback via iconv
+        //
+
+        if (
+            $length >= 0 // "iconv_substr()" can't handle negative length
+            &&
+            self::$SUPPORT['iconv'] === true
+        ) {
+            $return_tmp = \iconv_substr($str, $offset, $length);
+            if ($return_tmp !== false) {
+                return $return_tmp;
+            }
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($str)) {
+            return \substr($str, $offset, $length);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        // split to array, and remove invalid characters
+        // &&
+        // extract relevant part, and join to make sting again
+        return \implode('', \array_slice(self::str_split($str), $offset, $length));
+    }
+
+    /**
+     * Binary-safe comparison of two strings from an offset, up to a length of characters.
+     *
+     * EXAMPLE: <code>
+     * UTF8::substr_compare("○●◎\r", '●◎', 0, 2); // -1
+     * UTF8::substr_compare("○●◎\r", '◎●', 1, 2); // 1
+     * UTF8::substr_compare("○●◎\r", '●◎', 1, 2); // 0
+     * </code>
+     *
+     * @param string   $str1               <p>The main string being compared.</p>
+     * @param string   $str2               <p>The secondary string being compared.</p>
+     * @param int      $offset             [optional] <p>The start position for the comparison. If negative, it starts
+     *                                     counting from the end of the string.</p>
+     * @param int|null $length             [optional] <p>The length of the comparison. The default value is the largest
+     *                                     of the length of the str compared to the length of main_str less the
+     *                                     offset.</p>
+     * @param bool     $case_insensitivity [optional] <p>If case_insensitivity is TRUE, comparison is case
+     *                                     insensitive.</p>
+     * @param string   $encoding           [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
+     *             <strong>&gt; 0</strong> if str1 is greater than str2,<br>
+     *             <strong>0</strong> if they are equal
+     */
+    public static function substr_compare(
+        string $str1,
+        string $str2,
+        int $offset = 0,
+        int $length = null,
+        bool $case_insensitivity = false,
+        string $encoding = 'UTF-8'
+    ): int {
+        if (
+            $offset !== 0
+            ||
+            $length !== null
+        ) {
+            if ($encoding === 'UTF-8') {
+                if ($length === null) {
+                    $str1 = (string) \mb_substr($str1, $offset);
+                } else {
+                    $str1 = (string) \mb_substr($str1, $offset, $length);
+                }
+                $str2 = (string) \mb_substr($str2, 0, (int) self::strlen($str1));
+            } else {
+                $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+                $str1 = (string) self::substr($str1, $offset, $length, $encoding);
+                $str2 = (string) self::substr($str2, 0, (int) self::strlen($str1), $encoding);
+            }
+        }
+
+        if ($case_insensitivity) {
+            return self::strcasecmp($str1, $str2, $encoding);
+        }
+
+        return self::strcmp($str1, $str2);
+    }
+
+    /**
+     * Count the number of substring occurrences.
+     *
+     * EXAMPLE: <code>UTF8::substr_count('中文空白', '文空', 1, 2); // 1</code>
+     *
+     * @see http://php.net/manual/en/function.substr-count.php
+     *
+     * @param string   $haystack   <p>The string to search in.</p>
+     * @param string   $needle     <p>The substring to search for.</p>
+     * @param int      $offset     [optional] <p>The offset where to start counting.</p>
+     * @param int|null $length     [optional] <p>
+     *                             The maximum length after the specified offset to search for the
+     *                             substring. It outputs a warning if the offset plus the length is
+     *                             greater than the haystack length.
+     *                             </p>
+     * @param string   $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>This functions returns an integer or false if there isn't a string.</p>
+     */
+    public static function substr_count(
+        string $haystack,
+        string $needle,
+        int $offset = 0,
+        int $length = null,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ) {
+        if ($needle === '') {
+            return false;
+        }
+
+        if ($haystack === '' || $length === 0) {
+            return 0;
+        }
+
+        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $needle = self::clean($needle);
+            $haystack = self::clean($haystack);
+        }
+
+        if ($offset || $length > 0) {
+            if ($length === null) {
+                $length_tmp = self::strlen($haystack, $encoding);
+                if ($length_tmp === false) {
+                    return false;
+                }
+                $length = $length_tmp;
+            }
+
+            if ($encoding === 'UTF-8') {
+                $haystack = (string) \mb_substr($haystack, $offset, $length);
+            } else {
+                $haystack = (string) \mb_substr($haystack, $offset, $length, $encoding);
+            }
+        }
+
+        if (
+            $encoding !== 'UTF-8'
+            &&
+            self::$SUPPORT['mbstring'] === false
+        ) {
+            /**
+             * @psalm-suppress ImpureFunctionCall - this is only a warning
+             */
+            \trigger_error('UTF8::substr_count() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($encoding === 'UTF-8') {
+                return \mb_substr_count($haystack, $needle);
+            }
+
+            return \mb_substr_count($haystack, $needle, $encoding);
+        }
+
+        \preg_match_all('/' . \preg_quote($needle, '/') . '/us', $haystack, $matches, \PREG_SET_ORDER);
+
+        return \count($matches);
+    }
+
+    /**
+     * Count the number of substring occurrences.
+     *
+     * @param string   $haystack <p>
+     *                           The string being checked.
+     *                           </p>
+     * @param string   $needle   <p>
+     *                           The string being found.
+     *                           </p>
+     * @param int      $offset   [optional] <p>
+     *                           The offset where to start counting
+     *                           </p>
+     * @param int|null $length   [optional] <p>
+     *                           The maximum length after the specified offset to search for the
+     *                           substring. It outputs a warning if the offset plus the length is
+     *                           greater than the haystack length.
+     *                           </p>
+     *
+     * @psalm-pure
+     *
+     * @return false|int
+     *                   <p>The number of times the
+     *                   needle substring occurs in the
+     *                   haystack string.</p>
+     */
+    public static function substr_count_in_byte(
+        string $haystack,
+        string $needle,
+        int $offset = 0,
+        int $length = null
+    ) {
+        if ($haystack === '' || $needle === '') {
+            return 0;
+        }
+
+        if (
+            ($offset || $length !== null)
+            &&
+            self::$SUPPORT['mbstring_func_overload'] === true
+        ) {
+            if ($length === null) {
+                $length_tmp = self::strlen($haystack);
+                if ($length_tmp === false) {
+                    return false;
+                }
+                $length = $length_tmp;
+            }
+
+            if (
+                (
+                    $length !== 0
+                    &&
+                    $offset !== 0
+                )
+                &&
+                ($length + $offset) <= 0
+                &&
+                \PHP_VERSION_ID < 71000 // output from "substr_count()" have changed in PHP 7.1
+            ) {
+                return false;
+            }
+
+            /** @var false|string $haystack_tmp - needed for PhpStan (stubs error) */
+            $haystack_tmp = \substr($haystack, $offset, $length);
+            if ($haystack_tmp === false) {
+                $haystack_tmp = '';
+            }
+            $haystack = (string) $haystack_tmp;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_substr_count($haystack, $needle, 'CP850'); // 8-BIT
+        }
+
+        if ($length === null) {
+            return \substr_count($haystack, $needle, $offset);
+        }
+
+        return \substr_count($haystack, $needle, $offset, $length);
+    }
+
+    /**
+     * Returns the number of occurrences of $substring in the given string.
+     * By default, the comparison is case-sensitive, but can be made insensitive
+     * by setting $case_sensitive to false.
+     *
+     * @param string $str            <p>The input string.</p>
+     * @param string $substring      <p>The substring to search for.</p>
+     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
+     * @param string $encoding       [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return int
+     *
+     * @phpstan-return 0|positive-int
+     */
+    public static function substr_count_simple(
+        string $str,
+        string $substring,
+        bool $case_sensitive = true,
+        string $encoding = 'UTF-8'
+    ): int {
+        if ($str === '' || $substring === '') {
+            return 0;
+        }
+
+        if ($encoding === 'UTF-8') {
+            if ($case_sensitive) {
+                return (int) \mb_substr_count($str, $substring);
+            }
+
+            return (int) \mb_substr_count(
+                \mb_strtoupper($str),
+                \mb_strtoupper($substring)
+            );
+        }
+
+        $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+        if ($case_sensitive) {
+            return (int) \mb_substr_count($str, $substring, $encoding);
+        }
+
+        return (int) \mb_substr_count(
+            self::strtocasefold($str, true, false, $encoding, null, false),
+            self::strtocasefold($substring, true, false, $encoding, null, false),
+            $encoding
+        );
+    }
+
+    /**
+     * Removes a prefix ($needle) from the beginning of the string ($haystack), case-insensitive.
+     *
+     * EXMAPLE: <code>
+     * UTF8::substr_ileft('ΚόσμεMiddleEnd', 'Κόσμε'); // 'MiddleEnd'
+     * UTF8::substr_ileft('ΚόσμεMiddleEnd', 'κόσμε'); // 'MiddleEnd'
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Return the sub-string.</p>
+     */
+    public static function substr_ileft(string $haystack, string $needle): string
+    {
+        if ($haystack === '') {
+            return '';
+        }
+
+        if ($needle === '') {
+            return $haystack;
+        }
+
+        if (self::str_istarts_with($haystack, $needle)) {
+            $haystack = (string) \mb_substr($haystack, (int) self::strlen($needle));
+        }
+
+        return $haystack;
+    }
+
+    /**
+     * Get part of a string process in bytes.
+     *
+     * @param string   $str    <p>The string being checked.</p>
+     * @param int      $offset <p>The first position used in str.</p>
+     * @param int|null $length [optional] <p>The maximum length of the returned string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return false|string
+     *                      <p>The portion of <i>str</i> specified by the <i>offset</i> and
+     *                      <i>length</i> parameters.</p><p>If <i>str</i> is shorter than <i>offset</i>
+     *                      characters long, <b>FALSE</b> will be returned.</p>
+     */
+    public static function substr_in_byte(string $str, int $offset = 0, int $length = null)
+    {
+        // empty string
+        if ($str === '' || $length === 0) {
+            return '';
+        }
+
+        // whole string
+        if (!$offset && $length === null) {
+            return $str;
+        }
+
+        if (self::$SUPPORT['mbstring_func_overload'] === true) {
+            // "mb_" is available if overload is used, so use it ...
+            return \mb_substr($str, $offset, $length, 'CP850'); // 8-BIT
+        }
+
+        return \substr($str, $offset, $length ?? 2147483647);
+    }
+
+    /**
+     * Removes a suffix ($needle) from the end of the string ($haystack), case-insensitive.
+     *
+     * EXAMPLE: <code>
+     * UTF8::substr_iright('BeginMiddleΚόσμε', 'Κόσμε'); // 'BeginMiddle'
+     * UTF8::substr_iright('BeginMiddleΚόσμε', 'κόσμε'); // 'BeginMiddle'
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Return the sub-string.<p>
+     */
+    public static function substr_iright(string $haystack, string $needle): string
+    {
+        if ($haystack === '') {
+            return '';
+        }
+
+        if ($needle === '') {
+            return $haystack;
+        }
+
+        if (self::str_iends_with($haystack, $needle)) {
+            $haystack = (string) \mb_substr($haystack, 0, (int) self::strlen($haystack) - (int) self::strlen($needle));
+        }
+
+        return $haystack;
+    }
+
+    /**
+     * Removes a prefix ($needle) from the beginning of the string ($haystack).
+     *
+     * EXAMPLE: <code>
+     * UTF8::substr_left('ΚόσμεMiddleEnd', 'Κόσμε'); // 'MiddleEnd'
+     * UTF8::substr_left('ΚόσμεMiddleEnd', 'κόσμε'); // 'ΚόσμεMiddleEnd'
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Return the sub-string.</p>
+     */
+    public static function substr_left(string $haystack, string $needle): string
+    {
+        if ($haystack === '') {
+            return '';
+        }
+
+        if ($needle === '') {
+            return $haystack;
+        }
+
+        if (self::str_starts_with($haystack, $needle)) {
+            $haystack = (string) \mb_substr($haystack, (int) self::strlen($needle));
+        }
+
+        return $haystack;
+    }
+
+    /**
+     * Replace text within a portion of a string.
+     *
+     * EXAMPLE: <code>UTF8::substr_replace(array('Iñtërnâtiônàlizætiøn', 'foo'), 'æ', 1); // array('Iæñtërnâtiônàlizætiøn', 'fæoo')</code>
+     *
+     * source: https://gist.github.com/stemar/8287074
+     *
+     * @param string|string[] $str         <p>The input string or an array of stings.</p>
+     * @param string|string[] $replacement <p>The replacement string or an array of stings.</p>
+     * @param int|int[]       $offset      <p>
+     *                                     If start is positive, the replacing will begin at the start'th offset
+     *                                     into string.
+     *                                     <br><br>
+     *                                     If start is negative, the replacing will begin at the start'th character
+     *                                     from the end of string.
+     *                                     </p>
+     * @param int|int[]|null  $length      [optional] <p>If given and is positive, it represents the length of the
+     *                                     portion of string which is to be replaced. If it is negative, it
+     *                                     represents the number of characters from the end of string at which to
+     *                                     stop replacing. If it is not given, then it will default to strlen(
+     *                                     string ); i.e. end the replacing at the end of string. Of course, if
+     *                                     length is zero then this function will have the effect of inserting
+     *                                     replacement into string at the given start offset.</p>
+     * @param string          $encoding    [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *                         <p>The result string is returned. If string is an array then array is returned.</p>
+     *
+     * @template TSubstrReplace string|string[]
+     * @phpstan-param TSubstrReplace $str
+     * @phpstan-return TSubstrReplace
+     */
+    public static function substr_replace(
+        $str,
+        $replacement,
+        $offset,
+        $length = null,
+        string $encoding = 'UTF-8'
+    ) {
+        if (\is_array($str)) {
+            $num = \count($str);
+
+            // the replacement
+            if (\is_array($replacement)) {
+                $replacement = \array_slice($replacement, 0, $num);
+            } else {
+                $replacement = \array_pad([$replacement], $num, $replacement);
+            }
+
+            // the offset
+            if (\is_array($offset)) {
+                $offset = \array_slice($offset, 0, $num);
+                foreach ($offset as &$value_tmp) {
+                    $value_tmp = (int) $value_tmp === $value_tmp ? $value_tmp : 0;
+                }
+                unset($value_tmp);
+            } else {
+                $offset = \array_pad([$offset], $num, $offset);
+            }
+
+            // the length
+            if ($length === null) {
+                $length = \array_fill(0, $num, 0);
+            } elseif (\is_array($length)) {
+                $length = \array_slice($length, 0, $num);
+                foreach ($length as &$value_tmp_V2) {
+                    $value_tmp_V2 = (int) $value_tmp_V2 === $value_tmp_V2 ? $value_tmp_V2 : $num;
+                }
+                unset($value_tmp_V2);
+            } else {
+                $length = \array_pad([$length], $num, $length);
+            }
+
+            // recursive call
+            /** @phpstan-ignore-next-line - phpstan currently can't handle recursive calls */
+            return \array_map([self::class, 'substr_replace'], $str, $replacement, $offset, $length);
+        }
+
+        if (\is_array($replacement)) {
+            if ($replacement !== []) {
+                $replacement = $replacement[0];
+            } else {
+                $replacement = '';
+            }
+        }
+
+        // init
+        $str = (string) $str;
+        $replacement = (string) $replacement;
+
+        if (\is_array($length)) {
+            throw new \InvalidArgumentException('Parameter "$length" can only be an array, if "$str" is also an array.');
+        }
+
+        if (\is_array($offset)) {
+            throw new \InvalidArgumentException('Parameter "$offset" can only be an array, if "$str" is also an array.');
+        }
+
+        if ($str === '') {
+            return $replacement;
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            $string_length = (int) self::strlen($str, $encoding);
+
+            if ($offset < 0) {
+                $offset = (int) \max(0, $string_length + $offset);
+            } elseif ($offset > $string_length) {
+                $offset = $string_length;
+            }
+
+            if ($length !== null && $length < 0) {
+                $length = (int) \max(0, $string_length - $offset + $length);
+            } elseif ($length === null || $length > $string_length) {
+                $length = $string_length;
+            }
+
+            if (($offset + $length) > $string_length) {
+                $length = $string_length - $offset;
+            }
+
+            return ((string) \mb_substr($str, 0, $offset, $encoding)) .
+                   $replacement .
+                   ((string) \mb_substr($str, $offset + $length, $string_length - $offset - $length, $encoding));
+        }
+
+        //
+        // fallback for ascii only
+        //
+
+        if (ASCII::is_ascii($str)) {
+            return ($length === null) ?
+                \substr_replace($str, $replacement, $offset) :
+                \substr_replace($str, $replacement, $offset, $length);
+        }
+
+        //
+        // fallback via vanilla php
+        //
+
+        \preg_match_all('/./us', $str, $str_matches);
+        \preg_match_all('/./us', $replacement, $replacement_matches);
+
+        if ($length === null) {
+            $length_tmp = self::strlen($str, $encoding);
+            if ($length_tmp === false) {
+                // e.g.: non mbstring support + invalid chars
+                return '';
+            }
+            $length = $length_tmp;
+        }
+
+        \array_splice($str_matches[0], $offset, $length, $replacement_matches[0]);
+
+        return \implode('', $str_matches[0]);
+    }
+
+    /**
+     * Removes a suffix ($needle) from the end of the string ($haystack).
+     *
+     * EXAMPLE: <code>
+     * UTF8::substr_right('BeginMiddleΚόσμε', 'Κόσμε'); // 'BeginMiddle'
+     * UTF8::substr_right('BeginMiddleΚόσμε', 'κόσμε'); // 'BeginMiddleΚόσμε'
+     * </code>
+     *
+     * @param string $haystack <p>The string to search in.</p>
+     * @param string $needle   <p>The substring to search for.</p>
+     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Return the sub-string.</p>
+     */
+    public static function substr_right(
+        string $haystack,
+        string $needle,
+        string $encoding = 'UTF-8'
+    ): string {
+        if ($haystack === '') {
+            return '';
+        }
+
+        if ($needle === '') {
+            return $haystack;
+        }
+
+        if (
+            $encoding === 'UTF-8'
+            &&
+            \substr($haystack, -\strlen($needle)) === $needle
+        ) {
+            return (string) \mb_substr($haystack, 0, (int) \mb_strlen($haystack) - (int) \mb_strlen($needle));
+        }
+
+        if (\substr($haystack, -\strlen($needle)) === $needle) {
+            return (string) self::substr(
+                $haystack,
+                0,
+                (int) self::strlen($haystack, $encoding) - (int) self::strlen($needle, $encoding),
+                $encoding
+            );
+        }
+
+        return $haystack;
+    }
+
+    /**
+     * Returns a case swapped version of the string.
+     *
+     * EXAMPLE: <code>UTF8::swapCase('déJÀ σσς iıII'); // 'DÉjà ΣΣΣ IIii'</code>
+     *
+     * @param string $str        <p>The input string.</p>
+     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>Each character's case swapped.</p>
+     */
+    public static function swapCase(string $str, string $encoding = 'UTF-8', bool $clean_utf8 = false): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        if ($encoding === 'UTF-8') {
+            return (string) (\mb_strtolower($str) ^ \mb_strtoupper($str) ^ $str);
+        }
+
+        return (string) (self::strtolower($str, $encoding) ^ self::strtoupper($str, $encoding) ^ $str);
+    }
+
+    /**
+     * Checks whether symfony-polyfills are used.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     *              <p><strong>true</strong> if in use, <strong>false</strong> otherwise</p>
+     *
+     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
+     */
+    public static function symfony_polyfill_used(): bool
+    {
+        // init
+        $return = false;
+
+        $return_tmp = \extension_loaded('mbstring');
+        if (!$return_tmp && \function_exists('mb_strlen')) {
+            $return = true;
+        }
+
+        $return_tmp = \extension_loaded('iconv');
+        if (!$return_tmp && \function_exists('iconv')) {
+            $return = true;
+        }
+
+        return $return;
+    }
+
+    /**
+     * @param string $str
+     * @param int    $tab_length
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function tabs_to_spaces(string $str, int $tab_length = 4): string
+    {
+        if ($tab_length === 4) {
+            $spaces = '    ';
+        } elseif ($tab_length === 2) {
+            $spaces = '  ';
+        } else {
+            $spaces = \str_repeat(' ', $tab_length);
+        }
+
+        return \str_replace("\t", $spaces, $str);
+    }
+
+    /**
+     * Converts the first character of each word in the string to uppercase
+     * and all other chars to lowercase.
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>A string with all characters of $str being title-cased.</p>
+     */
+    public static function titlecase(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        if (
+            $lang === null
+            &&
+            !$try_to_keep_the_string_length
+        ) {
+            if ($encoding === 'UTF-8') {
+                return \mb_convert_case($str, \MB_CASE_TITLE);
+            }
+
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            return \mb_convert_case($str, \MB_CASE_TITLE, $encoding);
+        }
+
+        return self::str_titleize(
+            $str,
+            null,
+            $encoding,
+            false,
+            $lang,
+            $try_to_keep_the_string_length,
+            false
+        );
+    }
+
+    /**
+     * Convert a string into ASCII.
+     *
+     * EXAMPLE: <code>UTF8::to_ascii('déjà σσς iıii'); // 'deja sss iiii'</code>
+     *
+     * @param string $str     <p>The input string.</p>
+     * @param string $unknown [optional] <p>Character use if character unknown. (default is ?)</p>
+     * @param bool   $strict  [optional] <p>Use "transliterator_transliterate()" from PHP-Intl | WARNING: bad
+     *                        performance</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function to_ascii(
+        string $str,
+        string $unknown = '?',
+        bool $strict = false
+    ): string {
+        return ASCII::to_transliterate($str, $unknown, $strict);
+    }
+
+    /**
+     * @param bool|float|int|string $str
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    public static function to_boolean($str): bool
+    {
+        // init
+        $str = (string) $str;
+
+        if ($str === '') {
+            return false;
+        }
+
+        // Info: http://php.net/manual/en/filter.filters.validate.php
+        $map = [
+            'true'  => true,
+            '1'     => true,
+            'on'    => true,
+            'yes'   => true,
+            'false' => false,
+            '0'     => false,
+            'off'   => false,
+            'no'    => false,
+        ];
+
+        if (isset($map[$str])) {
+            return $map[$str];
+        }
+
+        $key = \strtolower($str);
+        if (isset($map[$key])) {
+            return $map[$key];
+        }
+
+        if (\is_numeric($str)) {
+            return ((float) $str) > 0;
+        }
+
+        return (bool) \trim($str);
+    }
+
+    /**
+     * Convert given string to safe filename (and keep string case).
+     *
+     * @param string $str
+     * @param bool   $use_transliterate No transliteration, conversion etc. is done by default - unsafe characters are
+     *                                  simply replaced with hyphen.
+     * @param string $fallback_char
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function to_filename(
+        string $str,
+        bool $use_transliterate = false,
+        string $fallback_char = '-'
+    ): string {
+        return ASCII::to_filename(
+            $str,
+            $use_transliterate,
+            $fallback_char
+        );
+    }
+
+    /**
+     * Convert a string into "ISO-8859"-encoding (Latin-1).
+     *
+     * EXAMPLE: <code>UTF8::to_utf8(UTF8::to_iso8859('  -ABC-中文空白-  ')); // '  -ABC-????-  '</code>
+     *
+     * @param string|string[] $str
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *
+     * @template TToIso8859 as string|string[]
+     * @phpstan-param TToIso8859 $str
+     * @phpstan-return (TToIso8859 is string ? string : string[])
+     */
+    public static function to_iso8859($str)
+    {
+        if (\is_array($str)) {
+            foreach ($str as &$v) {
+                $v = self::to_iso8859($v);
+            }
+
+            return $str;
+        }
+
+        /* @phpstan-ignore-next-line | FP? -> "Cannot cast TToIso8859 of array<string>|string to string." it's a string here */
+        $str = (string) $str;
+        if ($str === '') {
+            return '';
+        }
+
+        return self::utf8_decode($str);
+    }
+
+    /**
+     * This function leaves UTF-8 characters alone, while converting almost all non-UTF8 to UTF8.
+     *
+     * <ul>
+     * <li>It decode UTF-8 codepoints and Unicode escape sequences.</li>
+     * <li>It assumes that the encoding of the original string is either WINDOWS-1252 or ISO-8859.</li>
+     * <li>WARNING: It does not remove invalid UTF-8 characters, so you maybe need to use "UTF8::clean()" for this
+     * case.</li>
+     * </ul>
+     *
+     * EXAMPLE: <code>UTF8::to_utf8(["\u0063\u0061\u0074"]); // array('cat')</code>
+     *
+     * @param string|string[] $str                        <p>Any string or array of strings.</p>
+     * @param bool            $decode_html_entity_to_utf8 <p>Set to true, if you need to decode html-entities.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string|string[]
+     *                         <p>The UTF-8 encoded string</p>
+     *
+     * @template TToUtf8 as string|string[]
+     * @phpstan-param TToUtf8 $str
+     * @phpstan-return (TToUtf8 is string ? string : string[])
+     */
+    public static function to_utf8($str, bool $decode_html_entity_to_utf8 = false)
+    {
+        if (\is_array($str)) {
+            foreach ($str as &$v) {
+                $v = self::to_utf8_string($v, $decode_html_entity_to_utf8);
+            }
+
+            /** @phpstan-var TToUtf8 $str */
+            return $str;
+        }
+
+        \assert(\is_string($str));
+
+        $str = self::to_utf8_string($str, $decode_html_entity_to_utf8);
+
+        /** @phpstan-var TToUtf8 $str */
+        return $str;
+    }
+
+    /**
+     * This function leaves UTF-8 characters alone, while converting almost all non-UTF8 to UTF8.
+     *
+     * <ul>
+     * <li>It decode UTF-8 codepoints and Unicode escape sequences.</li>
+     * <li>It assumes that the encoding of the original string is either WINDOWS-1252 or ISO-8859.</li>
+     * <li>WARNING: It does not remove invalid UTF-8 characters, so you maybe need to use "UTF8::clean()" for this
+     * case.</li>
+     * </ul>
+     *
+     * EXAMPLE: <code>UTF8::to_utf8_string("\u0063\u0061\u0074"); // 'cat'</code>
+     *
+     * @param string $str                        <p>Any string.</p>
+     * @param bool   $decode_html_entity_to_utf8 <p>Set to true, if you need to decode html-entities.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The UTF-8 encoded string</p>
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function to_utf8_string(string $str, bool $decode_html_entity_to_utf8 = false): string
+    {
+        if ($str === '') {
+            return $str;
+        }
+
+        $max = \strlen($str);
+        $buf = '';
+
+        for ($i = 0; $i < $max; ++$i) {
+            $c1 = $str[$i];
+
+            if ($c1 >= "\xC0") { // should be converted to UTF8, if it's not UTF8 already
+
+                if ($c1 <= "\xDF") { // looks like 2 bytes UTF8
+
+                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];
+
+                    if ($c2 >= "\x80" && $c2 <= "\xBF") { // yeah, almost sure it's UTF8 already
+                        $buf .= $c1 . $c2;
+                        ++$i;
+                    } else { // not valid UTF8 - convert it
+                        $buf .= self::to_utf8_convert_helper($c1);
+                    }
+                } elseif ($c1 >= "\xE0" && $c1 <= "\xEF") { // looks like 3 bytes UTF8
+
+                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];
+                    $c3 = $i + 2 >= $max ? "\x00" : $str[$i + 2];
+
+                    if ($c2 >= "\x80" && $c2 <= "\xBF" && $c3 >= "\x80" && $c3 <= "\xBF") { // yeah, almost sure it's UTF8 already
+                        $buf .= $c1 . $c2 . $c3;
+                        $i += 2;
+                    } else { // not valid UTF8 - convert it
+                        $buf .= self::to_utf8_convert_helper($c1);
+                    }
+                } elseif ($c1 >= "\xF0" && $c1 <= "\xF7") { // looks like 4 bytes UTF8
+
+                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];
+                    $c3 = $i + 2 >= $max ? "\x00" : $str[$i + 2];
+                    $c4 = $i + 3 >= $max ? "\x00" : $str[$i + 3];
+
+                    if ($c2 >= "\x80" && $c2 <= "\xBF" && $c3 >= "\x80" && $c3 <= "\xBF" && $c4 >= "\x80" && $c4 <= "\xBF") { // yeah, almost sure it's UTF8 already
+                        $buf .= $c1 . $c2 . $c3 . $c4;
+                        $i += 3;
+                    } else { // not valid UTF8 - convert it
+                        $buf .= self::to_utf8_convert_helper($c1);
+                    }
+                } else { // doesn't look like UTF8, but should be converted
+
+                    $buf .= self::to_utf8_convert_helper($c1);
+                }
+            } elseif (($c1 & "\xC0") === "\x80") { // needs conversion
+
+                $buf .= self::to_utf8_convert_helper($c1);
+            } else { // it doesn't need conversion
+
+                $buf .= $c1;
+            }
+        }
+
+        // decode unicode escape sequences + unicode surrogate pairs
+        $buf = \preg_replace_callback(
+            '/\\\\u([dD][89abAB][0-9a-fA-F]{2})\\\\u([dD][cdefCDEF][\da-fA-F]{2})|\\\\u([0-9a-fA-F]{4})/',
+            /**
+             * @param array $matches
+             *
+             * @psalm-pure
+             *
+             * @return string
+             */
+            static function (array $matches): string {
+                if (isset($matches[3])) {
+                    $cp = (int) \hexdec($matches[3]);
+                } else {
+                    // http://unicode.org/faq/utf_bom.html#utf16-4
+                    $cp = ((int) \hexdec($matches[1]) << 10)
+                          + (int) \hexdec($matches[2])
+                          + 0x10000
+                          - (0xD800 << 10)
+                          - 0xDC00;
+                }
+
+                // https://github.com/php/php-src/blob/php-7.3.2/ext/standard/html.c#L471
+                //
+                // php_utf32_utf8(unsigned char *buf, unsigned k)
+
+                if ($cp < 0x80) {
+                    return (string) self::chr($cp);
+                }
+
+                if ($cp < 0xA0) {
+                    /** @noinspection UnnecessaryCastingInspection */
+                    return (string) self::chr(0xC0 | $cp >> 6) . (string) self::chr(0x80 | $cp & 0x3F);
+                }
+
+                return self::decimal_to_chr($cp);
+            },
+            $buf
+        );
+
+        if ($buf === null) {
+            return '';
+        }
+
+        // decode UTF-8 codepoints
+        if ($decode_html_entity_to_utf8) {
+            $buf = self::html_entity_decode($buf);
+        }
+
+        return $buf;
+    }
+
+    /**
+     * Returns the given string as an integer, or null if the string isn't numeric.
+     *
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return int|null
+     *                  <p>null if the string isn't numeric</p>
+     */
+    public static function to_int(string $str)
+    {
+        if (\is_numeric($str)) {
+            return (int) $str;
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the given input as string, or null if the input isn't int|float|string
+     * and do not implement the "__toString()" method.
+     *
+     * @param float|int|object|string|null $input
+     *
+     * @psalm-pure
+     *
+     * @return string|null
+     *                     <p>null if the input isn't int|float|string and has no "__toString()" method</p>
+     */
+    public static function to_string($input)
+    {
+        if ($input === null) {
+            return null;
+        }
+
+        $input_type = \gettype($input);
+
+        if (
+            $input_type === 'string'
+            ||
+            $input_type === 'integer'
+            ||
+            $input_type === 'float'
+            ||
+            $input_type === 'double'
+        ) {
+            /* @phpstan-ignore-next-line | "gettype" is not supported by phpstan?! */
+            return (string) $input;
+        }
+
+        /** @phpstan-ignore-next-line - "gettype": FP? */
+        if ($input_type === 'object' && \method_exists($input, '__toString')) {
+            return (string) $input;
+        }
+
+        return null;
+    }
+
+    /**
+     * Strip whitespace or other characters from the beginning and end of a UTF-8 string.
+     *
+     * INFO: This is slower then "trim()"
+     *
+     * We can only use the original-function, if we use <= 7-Bit in the string / chars
+     * but the check for ASCII (7-Bit) cost more time, then we can safe here.
+     *
+     * EXAMPLE: <code>UTF8::trim('   -ABC-中文空白-  '); // '-ABC-中文空白-'</code>
+     *
+     * @param string      $str   <p>The string to be trimmed</p>
+     * @param string|null $chars [optional] <p>Optional characters to be stripped</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The trimmed string.</p>
+     */
+    public static function trim(string $str = '', string $chars = null): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        if (self::$SUPPORT['mbstring'] === true) {
+            if ($chars !== null) {
+                /** @noinspection PregQuoteUsageInspection */
+                $chars = \preg_quote($chars);
+                $pattern = "^[{$chars}]+|[{$chars}]+\$";
+            } else {
+                $pattern = '^[\\s]+|[\\s]+$';
+            }
+
+            return (string) \mb_ereg_replace($pattern, '', $str);
+        }
+
+        if ($chars !== null) {
+            $chars = \preg_quote($chars, '/');
+            $pattern = "^[{$chars}]+|[{$chars}]+\$";
+        } else {
+            $pattern = '^[\\s]+|[\\s]+$';
+        }
+
+        return self::regex_replace($str, $pattern, '');
+    }
+
+    /**
+     * Makes string's first char uppercase.
+     *
+     * EXAMPLE: <code>UTF8::ucfirst('ñtërnâtiônàlizætiøn foo'); // 'Ñtërnâtiônàlizætiøn foo'</code>
+     *
+     * @param string      $str                           <p>The input string.</p>
+     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
+     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
+     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
+     *                                                   tr</p>
+     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
+     *                                                   -> ß</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The resulting string with with char uppercase.</p>
+     */
+    public static function ucfirst(
+        string $str,
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false,
+        string $lang = null,
+        bool $try_to_keep_the_string_length = false
+    ): string {
+        if ($str === '') {
+            return '';
+        }
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
+
+        if ($encoding === 'UTF-8') {
+            $str_part_two = (string) \mb_substr($str, 1);
+
+            if ($use_mb_functions) {
+                $str_part_one = \mb_strtoupper(
+                    (string) \mb_substr($str, 0, 1)
+                );
+            } else {
+                $str_part_one = self::strtoupper(
+                    (string) \mb_substr($str, 0, 1),
+                    $encoding,
+                    false,
+                    $lang,
+                    $try_to_keep_the_string_length
+                );
+            }
+        } else {
+            $encoding = self::normalize_encoding($encoding, 'UTF-8');
+
+            $str_part_two = (string) self::substr($str, 1, null, $encoding);
+
+            if ($use_mb_functions) {
+                $str_part_one = \mb_strtoupper(
+                    (string) \mb_substr($str, 0, 1, $encoding),
+                    $encoding
+                );
+            } else {
+                $str_part_one = self::strtoupper(
+                    (string) self::substr($str, 0, 1, $encoding),
+                    $encoding,
+                    false,
+                    $lang,
+                    $try_to_keep_the_string_length
+                );
+            }
+        }
+
+        return $str_part_one . $str_part_two;
+    }
+
+    /**
+     * Uppercase for all words in the string.
+     *
+     * EXAMPLE: <code>UTF8::ucwords('iñt ërn âTi ônà liz æti øn'); // 'Iñt Ërn ÂTi Ônà Liz Æti Øn'</code>
+     *
+     * @param string   $str        <p>The input string.</p>
+     * @param string[] $exceptions [optional] <p>Exclusion for some words.</p>
+     * @param string   $char_list  [optional] <p>Additional chars that contains to words and do not start a new
+     *                             word.</p>
+     * @param string   $encoding   [optional] <p>Set the charset.</p>
+     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function ucwords(
+        string $str,
+        array $exceptions = [],
+        string $char_list = '',
+        string $encoding = 'UTF-8',
+        bool $clean_utf8 = false
+    ): string {
+        if (!$str) {
+            return '';
+        }
+
+        // INFO: mb_convert_case($str, MB_CASE_TITLE);
+        // -> MB_CASE_TITLE didn't only uppercase the first letter, it also lowercase all other letters
+
+        if ($clean_utf8) {
+            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
+            // if invalid characters are found in $haystack before $needle
+            $str = self::clean($str);
+        }
+
+        $use_php_default_functions = !(bool) ($char_list . \implode('', $exceptions));
+
+        if (
+            $use_php_default_functions
+            &&
+            ASCII::is_ascii($str)
+        ) {
+            return \ucwords($str);
+        }
+
+        $words = self::str_to_words($str, $char_list);
+        $use_exceptions = $exceptions !== [];
+
+        $words_str = '';
+        foreach ($words as &$word) {
+            if (!$word) {
+                continue;
+            }
+
+            if (
+                !$use_exceptions
+                ||
+                !\in_array($word, $exceptions, true)
+            ) {
+                $words_str .= self::ucfirst($word, $encoding);
+            } else {
+                $words_str .= $word;
+            }
+        }
+
+        return $words_str;
+    }
+
+    /**
+     * Multi decode HTML entity + fix urlencoded-win1252-chars.
+     *
+     * EXAMPLE: <code>UTF8::urldecode('tes%20öäü%20\u00edtest+test'); // 'tes öäü ítest test'</code>
+     *
+     * e.g:
+     * 'test+test'                     => 'test test'
+     * 'D&#252;sseldorf'               => 'Düsseldorf'
+     * 'D%FCsseldorf'                  => 'Düsseldorf'
+     * 'D&#xFC;sseldorf'               => 'Düsseldorf'
+     * 'D%26%23xFC%3Bsseldorf'         => 'Düsseldorf'
+     * 'DÃ¼sseldorf'                   => 'Düsseldorf'
+     * 'D%C3%BCsseldorf'               => 'Düsseldorf'
+     * 'D%C3%83%C2%BCsseldorf'         => 'Düsseldorf'
+     * 'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'
+     *
+     * @param string $str          <p>The input string.</p>
+     * @param bool   $multi_decode <p>Decode as often as possible.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *
+     * @template T as string
+     * @phpstan-param T $str
+     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
+     */
+    public static function urldecode(string $str, bool $multi_decode = true): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        $str = self::urldecode_unicode_helper($str);
+
+        if ($multi_decode) {
+            do {
+                $str_compare = $str;
+
+                /**
+                 * @psalm-suppress PossiblyInvalidArgument
+                 */
+                $str = \urldecode(
+                    self::html_entity_decode(
+                        self::to_utf8($str),
+                        \ENT_QUOTES | \ENT_HTML5
+                    )
+                );
+            } while ($str_compare !== $str);
+        } else {
+            /**
+             * @psalm-suppress PossiblyInvalidArgument
+             */
+            $str = \urldecode(
+                self::html_entity_decode(
+                    self::to_utf8($str),
+                    \ENT_QUOTES | \ENT_HTML5
+                )
+            );
+        }
+
+        return self::fix_simple_utf8($str);
+    }
+
+    /**
+     * Decodes a UTF-8 string to ISO-8859-1.
+     *
+     * EXAMPLE: <code>UTF8::encode('UTF-8', UTF8::utf8_decode('-ABC-中文空白-')); // '-ABC-????-'</code>
+     *
+     * @param string $str             <p>The input string.</p>
+     * @param bool   $keep_utf8_chars
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function utf8_decode(string $str, bool $keep_utf8_chars = false): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        // save for later comparision
+        $str_backup = $str;
+        $len = \strlen($str);
+
+        if (self::$ORD === null) {
+            self::$ORD = self::getData('ord');
+        }
+
+        if (self::$CHR === null) {
+            self::$CHR = self::getData('chr');
+        }
+
+        $no_char_found = '?';
+        for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) {
+            switch ($str[$i] & "\xF0") {
+                case "\xC0":
+                case "\xD0":
+                    $c = (self::$ORD[$str[$i] & "\x1F"] << 6) | self::$ORD[$str[++$i] & "\x3F"];
+                    $str[$j] = $c < 256 ? self::$CHR[$c] : $no_char_found;
+
+                    break;
+
+                case "\xF0":
+                    ++$i;
+
+                // no break
+
+                case "\xE0":
+                    $str[$j] = $no_char_found;
+                    $i += 2;
+
+                    break;
+
+                default:
+                    $str[$j] = $str[$i];
+            }
+        }
+
+        /** @var false|string $return - needed for PhpStan (stubs error) */
+        $return = \substr($str, 0, $j);
+        if ($return === false) {
+            $return = '';
+        }
+
+        if (
+            $keep_utf8_chars
+            &&
+            (int) self::strlen($return) >= (int) self::strlen($str_backup)
+        ) {
+            return $str_backup;
+        }
+
+        return $return;
+    }
+
+    /**
+     * Encodes an ISO-8859-1 string to UTF-8.
+     *
+     * EXAMPLE: <code>UTF8::utf8_decode(UTF8::utf8_encode('-ABC-中文空白-')); // '-ABC-中文空白-'</code>
+     *
+     * @param string $str <p>The input string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function utf8_encode(string $str): string
+    {
+        if ($str === '') {
+            return '';
+        }
+
+        /** @noinspection PhpUsageOfSilenceOperatorInspection | TODO for PHP > 8.2: find a replacement for this */
+        /** @var false|string $str - the polyfill maybe return false */
+        $str = @\utf8_encode($str);
+
+        if ($str === false) {
+            return '';
+        }
+
+        return $str;
+    }
+
+    /**
+     * Returns an array with all utf8 whitespace characters.
+     *
+     * @see http://www.bogofilter.org/pipermail/bogofilter/2003-March/001889.html
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  An array with all known whitespace characters as values and the type of whitespace as keys
+     *                  as defined in above URL
+     */
+    public static function whitespace_table(): array
+    {
+        return self::$WHITESPACE_TABLE;
+    }
+
+    /**
+     * Limit the number of words in a string.
+     *
+     * EXAMPLE: <code>UTF8::words_limit('fòô bàř fòô', 2, ''); // 'fòô bàř'</code>
+     *
+     * @param string      $str        <p>The input string.</p>
+     * @param int<1, max> $limit      <p>The limit of words as integer.</p>
+     * @param string      $str_add_on <p>Replacement for the striped string.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function words_limit(
+        string $str,
+        int $limit = 100,
+        string $str_add_on = '…'
+    ): string {
+        if (
+            $str === ''
+            ||
+            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
+            $limit <= 0
+        ) {
+            return '';
+        }
+
+        \preg_match('/^\\s*+(?:[^\\s]++\\s*+){1,' . $limit . '}/u', $str, $matches);
+
+        if (
+            !isset($matches[0])
+            ||
+            \mb_strlen($str) === (int) \mb_strlen($matches[0])
+        ) {
+            return $str;
+        }
+
+        return \rtrim($matches[0]) . $str_add_on;
+    }
+
+    /**
+     * Wraps a string to a given number of characters
+     *
+     * EXAMPLE: <code>UTF8::wordwrap('Iñtërnâtiônàlizætiøn', 2, '<br>', true)); // 'Iñ<br>të<br>rn<br>ât<br>iô<br>nà<br>li<br>zæ<br>ti<br>øn'</code>
+     *
+     * @see http://php.net/manual/en/function.wordwrap.php
+     *
+     * @param string      $str   <p>The input string.</p>
+     * @param int<1, max> $width [optional] <p>The column width.</p>
+     * @param string      $break [optional] <p>The line is broken using the optional break parameter.</p>
+     * @param bool        $cut   [optional] <p>
+     *                      If the cut is set to true, the string is
+     *                      always wrapped at or before the specified width. So if you have
+     *                      a word that is larger than the given width, it is broken apart.
+     *                      </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     *                <p>The given string wrapped at the specified column.</p>
+     */
+    public static function wordwrap(
+        string $str,
+        int $width = 75,
+        string $break = "\n",
+        bool $cut = false
+    ): string {
+        if ($str === '' || $break === '') {
+            return '';
+        }
+
+        $str_split = \explode($break, $str);
+
+        /** @var string[] $charsArray */
+        $charsArray = [];
+        $word_split = '';
+        foreach ($str_split as $i => $i_value) {
+            if ($i) {
+                $charsArray[] = $break;
+                $word_split .= '#';
+            }
+
+            foreach (self::str_split($i_value) as $c) {
+                $charsArray[] = $c;
+                if ($c === ' ') {
+                    $word_split .= ' ';
+                } else {
+                    $word_split .= '?';
+                }
+            }
+        }
+
+        $str_return = '';
+        $j = 0;
+        $b = -1;
+        $i = -1;
+        $word_split = \wordwrap($word_split, $width, '#', $cut);
+
+        $max = \mb_strlen($word_split);
+        /** @noinspection PhpAssignmentInConditionInspection - is ok here */
+        while (($b = \mb_strpos($word_split, '#', $b + 1)) !== false) {
+            for (++$i; $i < $b; ++$i) {
+                if (isset($charsArray[$j])) {
+                    $str_return .= $charsArray[$j];
+                    unset($charsArray[$j]);
+                }
+                ++$j;
+
+                // prevent endless loop, e.g. if there is a error in the "mb_*" polyfill
+                if ($i > $max) {
+                    break 2;
+                }
+            }
+
+            if (
+                $break === $charsArray[$j]
+                ||
+                $charsArray[$j] === ' '
+            ) {
+                unset($charsArray[$j++]);
+            }
+
+            $str_return .= $break;
+
+            // prevent endless loop, e.g. if there is a error in the "mb_*" polyfill
+            if ($b > $max) {
+                break;
+            }
+        }
+
+        return $str_return . \implode('', $charsArray);
+    }
+
+    /**
+     * Line-Wrap the string after $limit, but split the string by "$delimiter" before ...
+     *    ... so that we wrap the per line.
+     *
+     * @param string      $str             <p>The input string.</p>
+     * @param int<1, max> $width           [optional] <p>The column width.</p>
+     * @param string      $break           [optional] <p>The line is broken using the optional break parameter.</p>
+     * @param bool        $cut             [optional] <p>
+     *                                     If the cut is set to true, the string is
+     *                                     always wrapped at or before the specified width. So if you have
+     *                                     a word that is larger than the given width, it is broken apart.
+     *                                     </p>
+     * @param bool        $add_final_break [optional] <p>
+     *                                     If this flag is true, then the method will add a $break at the end
+     *                                     of the result string.
+     *                                     </p>
+     * @param non-empty-string|null $delimiter       [optional] <p>
+     *                                     You can change the default behavior, where we split the string by newline.
+     *                                     </p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    public static function wordwrap_per_line(
+        string $str,
+        int $width = 75,
+        string $break = "\n",
+        bool $cut = false,
+        bool $add_final_break = true,
+        string $delimiter = null
+    ): string {
+        if ($delimiter === null) {
+            $strings = \preg_split('/\\r\\n|\\r|\\n/', $str);
+        } else {
+            $strings = \explode($delimiter, $str);
+        }
+
+        $string_helper_array = [];
+        if ($strings !== false) {
+            foreach ($strings as $value) {
+                $string_helper_array[] = self::wordwrap($value, $width, $break, $cut);
+            }
+        }
+
+        if ($add_final_break) {
+            $final_break = $break;
+        } else {
+            $final_break = '';
+        }
+
+        return \implode($delimiter ?? "\n", $string_helper_array) . $final_break;
+    }
+
+    /**
+     * Returns an array of Unicode White Space characters.
+     *
+     * @psalm-pure
+     *
+     * @return string[]
+     *                  <p>An array with numeric code point as key and White Space Character as value.</p>
+     */
+    public static function ws(): array
+    {
+        return self::$WHITESPACE;
+    }
+
+    /**
+     * Checks whether the passed string contains only byte sequences that are valid UTF-8 characters.
+     *
+     * EXAMPLE: <code>
+     * UTF8::is_utf8_string('Iñtërnâtiônàlizætiøn']); // true
+     * //
+     * UTF8::is_utf8_string("Iñtërnâtiônàlizætiøn\xA0\xA1"); // false
+     * </code>
+     *
+     * @see          http://hsivonen.iki.fi/php-utf8/
+     *
+     * @param string $str    <p>The string to be checked.</p>
+     * @param bool   $strict <p>Check also if the string is not UTF-16 or UTF-32.</p>
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    private static function is_utf8_string(string $str, bool $strict = false)
+    {
+        if ($str === '') {
+            return true;
+        }
+
+        if ($strict) {
+            $is_binary = self::is_binary($str, true);
+
+            if ($is_binary && self::is_utf16($str, false) !== false) {
+                return false;
+            }
+
+            if ($is_binary && self::is_utf32($str, false) !== false) {
+                return false;
+            }
+        }
+
+        if (self::$SUPPORT['pcre_utf8']) {
+            // If even just the first character can be matched, when the /u
+            // modifier is used, then it's valid UTF-8. If the UTF-8 is somehow
+            // invalid, nothing at all will match, even if the string contains
+            // some valid sequences
+            return \preg_match('/^./us', $str) === 1;
+        }
+
+        $mState = 0; // cached expected number of octets after the current octet
+        // until the beginning of the next UTF8 character sequence
+        $mUcs4 = 0; // cached Unicode character
+        $mBytes = 1; // cached expected number of octets in the current sequence
+
+        if (self::$ORD === null) {
+            self::$ORD = self::getData('ord');
+        }
+
+        $len = \strlen($str);
+        for ($i = 0; $i < $len; ++$i) {
+            $in = self::$ORD[$str[$i]];
+
+            if ($mState === 0) {
+                // When mState is zero we expect either a US-ASCII character or a
+                // multi-octet sequence.
+                if ((0x80 & $in) === 0) {
+                    // US-ASCII, pass straight through.
+                    $mBytes = 1;
+                } elseif ((0xE0 & $in) === 0xC0) {
+                    // First octet of 2 octet sequence.
+                    $mUcs4 = $in;
+                    $mUcs4 = ($mUcs4 & 0x1F) << 6;
+                    $mState = 1;
+                    $mBytes = 2;
+                } elseif ((0xF0 & $in) === 0xE0) {
+                    // First octet of 3 octet sequence.
+                    $mUcs4 = $in;
+                    $mUcs4 = ($mUcs4 & 0x0F) << 12;
+                    $mState = 2;
+                    $mBytes = 3;
+                } elseif ((0xF8 & $in) === 0xF0) {
+                    // First octet of 4 octet sequence.
+                    $mUcs4 = $in;
+                    $mUcs4 = ($mUcs4 & 0x07) << 18;
+                    $mState = 3;
+                    $mBytes = 4;
+                } elseif ((0xFC & $in) === 0xF8) {
+                    /* First octet of 5 octet sequence.
+                     *
+                     * This is illegal because the encoded codepoint must be either
+                     * (a) not the shortest form or
+                     * (b) outside the Unicode range of 0-0x10FFFF.
+                     * Rather than trying to resynchronize, we will carry on until the end
+                     * of the sequence and let the later error handling code catch it.
+                     */
+                    $mUcs4 = $in;
+                    $mUcs4 = ($mUcs4 & 0x03) << 24;
+                    $mState = 4;
+                    $mBytes = 5;
+                } elseif ((0xFE & $in) === 0xFC) {
+                    // First octet of 6 octet sequence, see comments for 5 octet sequence.
+                    $mUcs4 = $in;
+                    $mUcs4 = ($mUcs4 & 1) << 30;
+                    $mState = 5;
+                    $mBytes = 6;
+                } else {
+                    // Current octet is neither in the US-ASCII range nor a legal first
+                    // octet of a multi-octet sequence.
+                    return false;
+                }
+            } elseif ((0xC0 & $in) === 0x80) {
+
+                // When mState is non-zero, we expect a continuation of the multi-octet
+                // sequence
+
+                // Legal continuation.
+                $shift = ($mState - 1) * 6;
+                $tmp = $in;
+                $tmp = ($tmp & 0x0000003F) << $shift;
+                $mUcs4 |= $tmp;
+                // Prefix: End of the multi-octet sequence. mUcs4 now contains the final
+                // Unicode code point to be output.
+                if (--$mState === 0) {
+                    // Check for illegal sequences and code points.
+                    //
+                    // From Unicode 3.1, non-shortest form is illegal
+                    if (
+                        ($mBytes === 2 && $mUcs4 < 0x0080)
+                        ||
+                        ($mBytes === 3 && $mUcs4 < 0x0800)
+                        ||
+                        ($mBytes === 4 && $mUcs4 < 0x10000)
+                        ||
+                        ($mBytes > 4)
+                        ||
+                        // From Unicode 3.2, surrogate characters are illegal.
+                        (($mUcs4 & 0xFFFFF800) === 0xD800)
+                        ||
+                        // Code points outside the Unicode range are illegal.
+                        ($mUcs4 > 0x10FFFF)
+                    ) {
+                        return false;
+                    }
+                    // initialize UTF8 cache
+                    $mState = 0;
+                    $mUcs4 = 0;
+                    $mBytes = 1;
+                }
+            } else {
+                // ((0xC0 & (*in) != 0x80) && (mState != 0))
+                // Incomplete multi-octet sequence.
+                return false;
+            }
+        }
+
+        return $mState === 0;
+    }
+
+    /**
+     * @param string $str
+     * @param bool   $use_lowercase      <p>Use uppercase by default, otherwise use lowercase.</p>
+     * @param bool   $use_full_case_fold <p>Convert not only common cases.</p>
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    private static function fixStrCaseHelper(
+        string $str,
+        bool $use_lowercase = false,
+        bool $use_full_case_fold = false
+    ) {
+        $upper = self::$COMMON_CASE_FOLD['upper'];
+        $lower = self::$COMMON_CASE_FOLD['lower'];
+
+        if ($use_lowercase) {
+            $str = \str_replace(
+                $upper,
+                $lower,
+                $str
+            );
+        } else {
+            $str = \str_replace(
+                $lower,
+                $upper,
+                $str
+            );
+        }
+
+        if ($use_full_case_fold) {
+            /**
+             * @psalm-suppress ImpureStaticVariable
+             *
+             * @var array<mixed>|null
+             */
+            static $FULL_CASE_FOLD = null;
+            if ($FULL_CASE_FOLD === null) {
+                $FULL_CASE_FOLD = self::getData('caseFolding_full');
+            }
+
+            if ($use_lowercase) {
+                $str = \str_replace($FULL_CASE_FOLD[0], $FULL_CASE_FOLD[1], $str);
+            } else {
+                $str = \str_replace($FULL_CASE_FOLD[1], $FULL_CASE_FOLD[0], $str);
+            }
+        }
+
+        return $str;
+    }
+
+    /**
+     * get data from "/data/*.php"
+     *
+     * @param string $file
+     *
+     * @psalm-pure
+     *
+     * @return array<array-key, mixed>
+     */
+    private static function getData(string $file)
+    {
+        /** @noinspection PhpIncludeInspection */
+        /** @noinspection UsingInclusionReturnValueInspection */
+        /** @psalm-suppress UnresolvableInclude */
+        return include __DIR__ . '/data/' . $file . '.php';
+    }
+
+    /**
+     * @psalm-pure
+     *
+     * @return true|null
+     */
+    private static function initEmojiData()
+    {
+        if (self::$EMOJI_KEYS_CACHE === null) {
+            if (self::$EMOJI === null) {
+                self::$EMOJI = self::getData('emoji');
+            }
+
+            /**
+             * @psalm-suppress ImpureFunctionCall - static sort function is used
+             */
+            \uksort(
+                self::$EMOJI,
+                static function (string $a, string $b): int {
+                    return \strlen($b) <=> \strlen($a);
+                }
+            );
+
+            self::$EMOJI_KEYS_CACHE = \array_keys(self::$EMOJI);
+            self::$EMOJI_VALUES_CACHE = self::$EMOJI;
+
+            foreach (self::$EMOJI_KEYS_CACHE as $key) {
+                $tmp_key = \crc32($key);
+                self::$EMOJI_KEYS_REVERSIBLE_CACHE[] = '_-_PORTABLE_UTF8_-_' . $tmp_key . '_-_' . \strrev((string) $tmp_key) . '_-_8FTU_ELBATROP_-_';
+            }
+
+            return true;
+        }
+
+        return null;
+    }
+
+    /**
+     * Checks whether mbstring "overloaded" is active on the server.
+     *
+     * @psalm-pure
+     *
+     * @return bool
+     */
+    private static function mbstring_overloaded(): bool
+    {
+        /**
+         * INI directive 'mbstring.func_overload' is deprecated since PHP 7.2
+         */
+
+        /** @noinspection PhpComposerExtensionStubsInspection */
+        /** @noinspection PhpUsageOfSilenceOperatorInspection */
+        /** @noinspection DeprecatedIniOptionsInspection */
+        return \defined('MB_OVERLOAD_STRING')
+               &&
+               ((int) @\ini_get('mbstring.func_overload') & \MB_OVERLOAD_STRING);
+    }
+
+    /**
+     * @param string[] $strings
+     * @param bool     $remove_empty_values
+     * @param int|null $remove_short_values
+     *
+     * @psalm-pure
+     *
+     * @return list<string>
+     */
+    private static function reduce_string_array(
+        array $strings,
+        bool $remove_empty_values,
+        int $remove_short_values = null
+    ) {
+        // init
+        $return = [];
+
+        foreach ($strings as &$str) {
+            if (
+                $remove_short_values !== null
+                &&
+                \mb_strlen($str) <= $remove_short_values
+            ) {
+                continue;
+            }
+
+            if (
+                $remove_empty_values
+                &&
+                \trim($str) === ''
+            ) {
+                continue;
+            }
+
+            $return[] = $str;
+        }
+
+        return $return;
+    }
+
+    /**
+     * rxClass
+     *
+     * @param string $s
+     * @param string $class
+     *
+     * @return string
+     *
+     * @psalm-pure
+     */
+    private static function rxClass(string $s, string $class = '')
+    {
+        /**
+         * @psalm-suppress ImpureStaticVariable
+         *
+         * @var array<string,string>
+         */
+        static $RX_CLASS_CACHE = [];
+
+        $cache_key = $s . '_' . $class;
+
+        if (isset($RX_CLASS_CACHE[$cache_key])) {
+            return $RX_CLASS_CACHE[$cache_key];
+        }
+
+        $class_array = [];
+        $class_array[] = $class;
+
+        /** @noinspection SuspiciousLoopInspection */
+        /** @noinspection AlterInForeachInspection */
+        foreach (self::str_split($s) as &$s) {
+            if ($s === '-') {
+                $class_array[0] = '-' . $class_array[0];
+            } elseif (!isset($s[2])) {
+                $class_array[0] .= \preg_quote($s, '/');
+            } elseif (self::strlen($s) === 1) {
+                $class_array[0] .= $s;
+            } else {
+                $class_array[] = $s;
+            }
+        }
+
+        if ($class_array[0]) {
+            $class_array[0] = '[' . $class_array[0] . ']';
+        }
+
+        if (\count($class_array) === 1) {
+            $return = $class_array[0];
+        } else {
+            $return = '(?:' . \implode('|', $class_array) . ')';
+        }
+
+        $RX_CLASS_CACHE[$cache_key] = $return;
+
+        return $return;
+    }
+
+    /**
+     * Personal names such as "Marcus Aurelius" are sometimes typed incorrectly using lowercase ("marcus aurelius").
+     *
+     * @param string $names
+     * @param string $delimiter
+     * @param string $encoding
+     *
+     * @phpstan-param non-empty-string $delimiter
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    private static function str_capitalize_name_helper(
+        string $names,
+        string $delimiter,
+        string $encoding = 'UTF-8'
+    ) {
+        // init
+        try {
+            $name_helper_array = \explode($delimiter, $names);
+        } catch (\Error $e) {
+            // PHP >= 8.0 : explode() will now throw ValueError when separator parameter is given an empty string (""). Previously, explode() returned false instead.
+            $name_helper_array = false;
+        }
+        if ($name_helper_array === false) {
+            return '';
+        }
+
+        $special_cases = [
+            'names' => [
+                'ab',
+                'af',
+                'al',
+                'and',
+                'ap',
+                'bint',
+                'binte',
+                'da',
+                'de',
+                'del',
+                'den',
+                'der',
+                'di',
+                'dit',
+                'ibn',
+                'la',
+                'mac',
+                'nic',
+                'of',
+                'ter',
+                'the',
+                'und',
+                'van',
+                'von',
+                'y',
+                'zu',
+            ],
+            'prefixes' => [
+                'al-',
+                "d'",
+                'ff',
+                "l'",
+                'mac',
+                'mc',
+                'nic',
+            ],
+        ];
+
+        foreach ($name_helper_array as &$name) {
+            if (\in_array($name, $special_cases['names'], true)) {
+                continue;
+            }
+
+            $continue = false;
+
+            if ($delimiter === '-') {
+                foreach ((array) $special_cases['names'] as &$beginning) {
+                    if (\strncmp($name, $beginning, \strlen($beginning)) === 0) {
+                        $continue = true;
+
+                        break;
+                    }
+                }
+                unset($beginning);
+            }
+
+            foreach ((array) $special_cases['prefixes'] as &$beginning) {
+                if (\strncmp($name, $beginning, \strlen($beginning)) === 0) {
+                    $continue = true;
+
+                    break;
+                }
+            }
+            unset($beginning);
+
+            if ($continue) {
+                continue;
+            }
+
+            $name = self::ucfirst($name, $encoding);
+        }
+
+        return \implode($delimiter, $name_helper_array);
+    }
+
+    /**
+     * Generic case-sensitive transformation for collation matching.
+     *
+     * @param string $str <p>The input string</p>
+     *
+     * @psalm-pure
+     *
+     * @return string|null
+     */
+    private static function strtonatfold(string $str)
+    {
+        $str = \Normalizer::normalize($str, \Normalizer::NFD);
+        if ($str === false) {
+            return '';
+        }
+
+        return \preg_replace(
+            '/\p{Mn}+/u',
+            '',
+            $str
+        );
+    }
+
+    /**
+     * @param int|string $input
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    private static function to_utf8_convert_helper($input)
+    {
+        // init
+        $buf = '';
+
+        if (self::$ORD === null) {
+            self::$ORD = self::getData('ord');
+        }
+
+        if (self::$CHR === null) {
+            self::$CHR = self::getData('chr');
+        }
+
+        if (self::$WIN1252_TO_UTF8 === null) {
+            self::$WIN1252_TO_UTF8 = self::getData('win1252_to_utf8');
+        }
+
+        $ordC1 = self::$ORD[$input];
+        if (isset(self::$WIN1252_TO_UTF8[$ordC1])) { // found in Windows-1252 special cases
+            $buf .= self::$WIN1252_TO_UTF8[$ordC1];
+        } else {
+            $cc1 = self::$CHR[$ordC1 / 64] | "\xC0";
+            $cc2 = ((string) $input & "\x3F") | "\x80";
+            $buf .= $cc1 . $cc2;
+        }
+
+        return $buf;
+    }
+
+    /**
+     * @param string $str
+     *
+     * @psalm-pure
+     *
+     * @return string
+     */
+    private static function urldecode_unicode_helper(string $str)
+    {
+        if (\strpos($str, '%u') === false) {
+            return $str;
+        }
+
+        $pattern = '/%u([0-9a-fA-F]{3,4})/';
+        if (\preg_match($pattern, $str)) {
+            $str = (string) \preg_replace($pattern, '&#x\\1;', $str);
+        }
+
+        return $str;
+    }
+}
\ No newline at end of file
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_by_languages.php b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_by_languages.php
new file mode 100644
index 000000000..68c3f9d25
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_by_languages.php
@@ -0,0 +1,2950 @@
+<?php
+
+// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+
+return [
+    // Dutch (Flemish)
+    'nl' => [
+        'Á' => 'A',
+        'á' => 'a',
+        'Ä' => 'A',
+        'ä' => 'a',
+        'À' => 'A',
+        'à' => 'a',
+        'Â' => 'A',
+        'â' => 'a',
+        'É' => 'E',
+        'é' => 'e',
+        'Ë' => 'E',
+        'ë' => 'e',
+        'È' => 'E',
+        'è' => 'e',
+        'Ê' => 'E',
+        'ê' => 'e',
+        'Í' => 'I',
+        'í' => 'i',
+        'Ï' => 'I',
+        'ï' => 'i',
+        'Ì' => 'I',
+        'ì' => 'i',
+        'Î' => 'I',
+        'î' => 'i',
+        'Ó' => 'O',
+        'ó' => 'o',
+        'Ö' => 'O',
+        'ö' => 'o',
+        'Ò' => 'O',
+        'ò' => 'o',
+        'Ô' => 'O',
+        'ô' => 'o',
+        'Ú' => 'U',
+        'ú' => 'u',
+        'Ü' => 'U',
+        'ü' => 'u',
+        'Ù' => 'U',
+        'ù' => 'u',
+        'Û' => 'U',
+        'û' => 'u',
+        'Ý' => 'Y',
+        'ý' => 'y',
+        'Ÿ' => 'Y',
+    ],
+    // Italian
+    'it' => [
+        'à' => 'a',
+        'À' => 'A',
+        'é' => 'e',
+        'É' => 'E',
+        'è' => 'e',
+        'È' => 'E',
+        'ì' => 'i',
+        'Ì' => 'I',
+        'Ò' => 'O',
+        'ò' => 'o',
+        'ù' => 'u',
+        'Ù' => 'U',
+    ],
+    // Macedonian
+    'mk' => [
+        'А' => 'A',
+        'Б' => 'B',
+        'В' => 'V',
+        'Г' => 'G',
+        'Д' => 'D',
+        'Ѓ' => 'Gj',
+        'Е' => 'E',
+        'Ж' => 'Zh',
+        'З' => 'Z',
+        'Ѕ' => 'Dz',
+        'И' => 'I',
+        'Ј' => 'J',
+        'К' => 'K',
+        'Л' => 'L',
+        'Љ' => 'Lj',
+        'М' => 'M',
+        'Н' => 'N',
+        'Њ' => 'Nj',
+        'О' => 'O',
+        'П' => 'P',
+        'Р' => 'R',
+        'С' => 'S',
+        'Т' => 'T',
+        'Ќ' => 'Kj',
+        'У' => 'U',
+        'Ф' => 'F',
+        'Х' => 'H',
+        'Ц' => 'C',
+        'Ч' => 'Ch',
+        'Џ' => 'Dj',
+        'Ш' => 'Sh',
+        'а' => 'a',
+        'б' => 'b',
+        'в' => 'v',
+        'г' => 'g',
+        'д' => 'd',
+        'ѓ' => 'gj',
+        'е' => 'e',
+        'ж' => 'zh',
+        'з' => 'z',
+        'ѕ' => 'dz',
+        'и' => 'i',
+        'ј' => 'j',
+        'к' => 'k',
+        'л' => 'l',
+        'љ' => 'lj',
+        'м' => 'm',
+        'н' => 'n',
+        'њ' => 'nj',
+        'о' => 'o',
+        'п' => 'p',
+        'р' => 'r',
+        'с' => 's',
+        'т' => 't',
+        'ќ' => 'kj',
+        'у' => 'u',
+        'ф' => 'f',
+        'х' => 'h',
+        'ц' => 'c',
+        'ч' => 'ch',
+        'џ' => 'dj',
+        'ш' => 'sh',
+    ],
+    // Portuguese (Brazil)
+    'pt' => [
+        'æ' => 'ae',
+        'ǽ' => 'ae',
+        'À' => 'A',
+        'Á' => 'A',
+        'Â' => 'A',
+        'Ã' => 'A',
+        'Å' => 'AA',
+        'Ǻ' => 'A',
+        'Ă' => 'A',
+        'Ǎ' => 'A',
+        'Æ' => 'AE',
+        'Ǽ' => 'AE',
+        'à' => 'a',
+        'á' => 'a',
+        'â' => 'a',
+        'ã' => 'a',
+        'å' => 'aa',
+        'ǻ' => 'a',
+        'ă' => 'a',
+        'ǎ' => 'a',
+        'ª' => 'a',
+        'Ĉ' => 'C',
+        'Ċ' => 'C',
+        'Ç' => 'C',
+        'ç' => 'c',
+        'ĉ' => 'c',
+        'ċ' => 'c',
+        'Ð' => 'Dj',
+        'Đ' => 'D',
+        'ð' => 'dj',
+        'đ' => 'd',
+        'È' => 'E',
+        'É' => 'E',
+        'Ê' => 'E',
+        'Ë' => 'E',
+        'Ĕ' => 'E',
+        'Ė' => 'E',
+        'è' => 'e',
+        'é' => 'e',
+        'ê' => 'e',
+        'ë' => 'e',
+        'ĕ' => 'e',
+        'ė' => 'e',
+        'ƒ' => 'f',
+        'Ĝ' => 'G',
+        'Ġ' => 'G',
+        'ĝ' => 'g',
+        'ġ' => 'g',
+        'Ĥ' => 'H',
+        'Ħ' => 'H',
+        'ĥ' => 'h',
+        'ħ' => 'h',
+        'Ì' => 'I',
+        'Í' => 'I',
+        'Î' => 'I',
+        'Ï' => 'I',
+        'Ĩ' => 'I',
+        'Ĭ' => 'I',
+        'Ǐ' => 'I',
+        'Į' => 'I',
+        'Ĳ' => 'IJ',
+        'ì' => 'i',
+        'í' => 'i',
+        'î' => 'i',
+        'ï' => 'i',
+        'ĩ' => 'i',
+        'ĭ' => 'i',
+        'ǐ' => 'i',
+        'į' => 'i',
+        'ĳ' => 'ij',
+        'Ĵ' => 'J',
+        'ĵ' => 'j',
+        'Ĺ' => 'L',
+        'Ľ' => 'L',
+        'Ŀ' => 'L',
+        'ĺ' => 'l',
+        'ľ' => 'l',
+        'ŀ' => 'l',
+        'Ñ' => 'N',
+        'ñ' => 'n',
+        'ŉ' => 'n',
+        'Ò' => 'O',
+        'Ó' => 'O',
+        'Ô' => 'O',
+        'Õ' => 'O',
+        'Ō' => 'O',
+        'Ŏ' => 'O',
+        'Ǒ' => 'O',
+        'Ő' => 'O',
+        'Ơ' => 'O',
+        'Ø' => 'OE',
+        'Ǿ' => 'O',
+        'Œ' => 'OE',
+        'ò' => 'o',
+        'ó' => 'o',
+        'ô' => 'o',
+        'õ' => 'o',
+        'ō' => 'o',
+        'ŏ' => 'o',
+        'ǒ' => 'o',
+        'ő' => 'o',
+        'ơ' => 'o',
+        'ø' => 'oe',
+        'ǿ' => 'o',
+        'º' => 'o',
+        'œ' => 'oe',
+        'Ŕ' => 'R',
+        'Ŗ' => 'R',
+        'ŕ' => 'r',
+        'ŗ' => 'r',
+        'Ŝ' => 'S',
+        'Ș' => 'S',
+        'ŝ' => 's',
+        'ș' => 's',
+        'ſ' => 's',
+        'Ţ' => 'T',
+        'Ț' => 'T',
+        'Ŧ' => 'T',
+        'Þ' => 'TH',
+        'ţ' => 't',
+        'ț' => 't',
+        'ŧ' => 't',
+        'þ' => 'th',
+        'Ù' => 'U',
+        'Ú' => 'U',
+        'Û' => 'U',
+        'Ü' => 'U',
+        'Ũ' => 'U',
+        'Ŭ' => 'U',
+        'Ű' => 'U',
+        'Ų' => 'U',
+        'Ư' => 'U',
+        'Ǔ' => 'U',
+        'Ǖ' => 'U',
+        'Ǘ' => 'U',
+        'Ǚ' => 'U',
+        'Ǜ' => 'U',
+        'ù' => 'u',
+        'ú' => 'u',
+        'û' => 'u',
+        'ü' => 'u',
+        'ũ' => 'u',
+        'ŭ' => 'u',
+        'ű' => 'u',
+        'ų' => 'u',
+        'ư' => 'u',
+        'ǔ' => 'u',
+        'ǖ' => 'u',
+        'ǘ' => 'u',
+        'ǚ' => 'u',
+        'ǜ' => 'u',
+        'Ŵ' => 'W',
+        'ŵ' => 'w',
+        'Ý' => 'Y',
+        'Ÿ' => 'Y',
+        'Ŷ' => 'Y',
+        'ý' => 'y',
+        'ÿ' => 'y',
+        'ŷ' => 'y',
+    ],
+    // Greek(lish) (Elláda)
+    'el__greeklish' => [
+        'ΑΥ' => 'AU',
+        'ΑΎ' => 'AU',
+        'Αυ' => 'Au',
+        'Αύ' => 'Au',
+        'ΕΊ' => 'EI',
+        'ΕΙ' => 'EI',
+        'Ει' => 'EI',
+        'ΕΥ' => 'EU',
+        'ΕΎ' => 'EU',
+        'Εί' => 'Ei',
+        'Ευ' => 'Eu',
+        'Εύ' => 'Eu',
+        'ΟΙ' => 'OI',
+        'ΟΊ' => 'OI',
+        'ΟΥ' => 'OU',
+        'ΟΎ' => 'OU',
+        'Οι' => 'Oi',
+        'Οί' => 'Oi',
+        'Ου' => 'Ou',
+        'Ού' => 'Ou',
+        'ΥΙ' => 'YI',
+        'ΎΙ' => 'YI',
+        'Υι' => 'Yi',
+        'Ύι' => 'Yi',
+        'ΥΊ' => 'Yi',
+        'Υί' => 'Yi',
+        'αυ' => 'au',
+        'αύ' => 'au',
+        'εί' => 'ei',
+        'ει' => 'ei',
+        'ευ' => 'eu',
+        'εύ' => 'eu',
+        'οι' => 'oi',
+        'οί' => 'oi',
+        'ου' => 'ou',
+        'ού' => 'ou',
+        'υι' => 'yi',
+        'ύι' => 'yi',
+        'υί' => 'yi',
+        'Α'  => 'A',
+        'Ά'  => 'A',
+        'Β'  => 'B',
+        'Δ'  => 'D',
+        'Ε'  => 'E',
+        'Έ'  => 'E',
+        'Φ'  => 'F',
+        'Γ'  => 'G',
+        'Η'  => 'H',
+        'Ή'  => 'H',
+        'Ι'  => 'I',
+        'Ί'  => 'I',
+        'Ϊ'  => 'I',
+        'Κ'  => 'K',
+        'Ξ'  => 'Ks',
+        'Λ'  => 'L',
+        'Μ'  => 'M',
+        'Ν'  => 'N',
+        'Π'  => 'N',
+        'Ο'  => 'O',
+        'Ό'  => 'O',
+        'Ψ'  => 'Ps',
+        'Ρ'  => 'R',
+        'Σ'  => 'S',
+        'Τ'  => 'T',
+        'Θ'  => 'Th',
+        'Ω'  => 'W',
+        'Ώ'  => 'W',
+        'Χ'  => 'X',
+        'ϒ'  => 'Y',
+        'Υ'  => 'Y',
+        'Ύ'  => 'Y',
+        'Ϋ'  => 'Y',
+        'Ζ'  => 'Z',
+        'α'  => 'a',
+        'ά'  => 'a',
+        'β'  => 'b',
+        'δ'  => 'd',
+        'ε'  => 'e',
+        'έ'  => 'e',
+        'φ'  => 'f',
+        'γ'  => 'g',
+        'η'  => 'h',
+        'ή'  => 'h',
+        'ι'  => 'i',
+        'ί'  => 'i',
+        'ϊ'  => 'i',
+        'ΐ'  => 'i',
+        'κ'  => 'k',
+        'ξ'  => 'ks',
+        'λ'  => 'l',
+        'μ'  => 'm',
+        'ν'  => 'n',
+        'ο'  => 'o',
+        'ό'  => 'o',
+        'π'  => 'p',
+        'ψ'  => 'ps',
+        'ρ'  => 'r',
+        'σ'  => 's',
+        'ς'  => 's',
+        'τ'  => 't',
+        'ϑ'  => 'th',
+        'θ'  => 'th',
+        'ϐ'  => 'v',
+        'ω'  => 'w',
+        'ώ'  => 'w',
+        'χ'  => 'x',
+        'υ'  => 'y',
+        'ύ'  => 'y',
+        'ΰ'  => 'y',
+        'ϋ'  => 'y',
+        'ζ'  => 'z',
+    ],
+    // Greek (Elláda)
+    'el' => [
+        'ΑΥ' => 'AU',
+        'Αυ' => 'Au',
+        'ΟΥ' => 'U',
+        'Ου' => 'u',
+        'ΕΥ' => 'EF',
+        'Ευ' => 'Ef',
+        'ΕΙ' => 'I',
+        'Ει' => 'I',
+        'ΟΙ' => 'I',
+        'Οι' => 'I',
+        'ΥΙ' => 'I',
+        'Υι' => 'I',
+        'ΑΎ' => 'AU',
+        'Αύ' => 'Au',
+        'ΟΎ' => 'OU',
+        'Ού' => 'Ou',
+        'ΕΎ' => 'EU',
+        'Εύ' => 'Eu',
+        'ΕΊ' => 'I',
+        'Εί' => 'I',
+        'ΟΊ' => 'I',
+        'Οί' => 'I',
+        'ΎΙ' => 'I',
+        'Ύι' => 'I',
+        'ΥΊ' => 'I',
+        'Υί' => 'I',
+        'αυ' => 'au',
+        'ου' => 'u',
+        'ευ' => 'ef',
+        'ει' => 'i',
+        'οι' => 'i',
+        'υι' => 'i',
+        'αύ' => 'au',
+        'ού' => 'ou',
+        'εύ' => 'eu',
+        'εί' => 'i',
+        'οί' => 'i',
+        'ύι' => 'i',
+        'υί' => 'i',
+        'α'  => 'a',
+        'β'  => 'v',
+        'γ'  => 'gh',
+        'δ'  => 'd',
+        'ε'  => 'e',
+        'ζ'  => 'z',
+        'η'  => 'i',
+        'θ'  => 'th',
+        'ι'  => 'i',
+        'κ'  => 'k',
+        'λ'  => 'l',
+        'μ'  => 'm',
+        'ν'  => 'n',
+        'ξ'  => 'ks',
+        'ο'  => 'o',
+        'π'  => 'p',
+        'ρ'  => 'r',
+        'σ'  => 's',
+        'τ'  => 't',
+        'υ'  => 'i',
+        'φ'  => 'f',
+        'χ'  => 'kh',
+        'ψ'  => 'ps',
+        'ω'  => 'o',
+        'ά'  => 'a',
+        'έ'  => 'e',
+        'ί'  => 'i',
+        'ό'  => 'o',
+        'ϒ'  => 'Y',
+        'ύ'  => 'y',
+        'ή'  => 'i',
+        'ώ'  => 'w',
+        'ς'  => 's',
+        'ϊ'  => 'i',
+        'ΰ'  => 'y',
+        'ϋ'  => 'y',
+        'ΐ'  => 'i',
+        'Α'  => 'A',
+        'Β'  => 'B',
+        'Γ'  => 'G',
+        'Δ'  => 'D',
+        'Ε'  => 'E',
+        'Ζ'  => 'Z',
+        'Η'  => 'H',
+        'Θ'  => 'Th',
+        'Ι'  => 'I',
+        'Κ'  => 'K',
+        'Λ'  => 'L',
+        'Μ'  => 'M',
+        'Ν'  => 'N',
+        'Ξ'  => 'Ks',
+        'Ο'  => 'O',
+        'Π'  => 'P',
+        'Ρ'  => 'R',
+        'Σ'  => 'S',
+        'Τ'  => 'T',
+        'Υ'  => 'Y',
+        'Φ'  => 'F',
+        'Χ'  => 'X',
+        'Ψ'  => 'Ps',
+        'Ω'  => 'O',
+        'Ά'  => 'A',
+        'Έ'  => 'E',
+        'Ί'  => 'I',
+        'Ό'  => 'O',
+        'Ύ'  => 'Y',
+        'Ή'  => 'I',
+        'Ώ'  => 'W',
+        'Ϊ'  => 'I',
+        'Ϋ'  => 'Y',
+        'ϐ'  => 'v',
+        'ϑ'  => 'th',
+    ],
+    // Hindi
+    'hi' => [
+        'अ'  => 'a',
+        'आ'  => 'aa',
+        'ए'  => 'e',
+        'ई'  => 'ii',
+        'ऍ'  => 'ei',
+        'ऎ'  => 'ae',
+        'ऐ'  => 'ai',
+        'इ'  => 'i',
+        'ओ'  => 'o',
+        'ऑ'  => 'oi',
+        'ऒ'  => 'oii',
+        'ऊ'  => 'uu',
+        'औ'  => 'ou',
+        'उ'  => 'u',
+        'ब'  => 'B',
+        'भ'  => 'Bha',
+        'च'  => 'Ca',
+        'छ'  => 'Chha',
+        'ड'  => 'Da',
+        'ढ'  => 'Dha',
+        'फ'  => 'Fa',
+        'फ़' => 'Fi',
+        'ग'  => 'Ga',
+        'घ'  => 'Gha',
+        'ग़' => 'Ghi',
+        'ह'  => 'Ha',
+        'ज'  => 'Ja',
+        'झ'  => 'Jha',
+        'क'  => 'Ka',
+        'ख'  => 'Kha',
+        'ख़' => 'Khi',
+        'ल'  => 'L',
+        'ळ'  => 'Li',
+        'ऌ'  => 'Li',
+        'ऴ'  => 'Lii',
+        'ॡ'  => 'Lii',
+        'म'  => 'Ma',
+        'न'  => 'Na',
+        'ङ'  => 'Na',
+        'ञ'  => 'Nia',
+        'ण'  => 'Nae',
+        'ऩ'  => 'Ni',
+        'ॐ'  => 'oms',
+        'प'  => 'Pa',
+        'क़' => 'Qi',
+        'र'  => 'Ra',
+        'ऋ'  => 'Ri',
+        'ॠ'  => 'Ri',
+        'ऱ'  => 'Ri',
+        'स'  => 'Sa',
+        'श'  => 'Sha',
+        'ष'  => 'Shha',
+        'ट'  => 'Ta',
+        'त'  => 'Ta',
+        'ठ'  => 'Tha',
+        'द'  => 'Tha',
+        'थ'  => 'Tha',
+        'ध'  => 'Thha',
+        'ड़' => 'ugDha',
+        'ढ़' => 'ugDhha',
+        'व'  => 'Va',
+        'य'  => 'Ya',
+        'य़' => 'Yi',
+        'ज़' => 'Za',
+    ],
+    // Armenian
+    'hy' => [
+        'Ա' => 'A',
+        'Բ' => 'B',
+        'Գ' => 'G',
+        'Դ' => 'D',
+        'Ե' => 'E',
+        'Զ' => 'Z',
+        'Է' => 'E',
+        'Ը' => 'Y',
+        'Թ' => 'Th',
+        'Ժ' => 'Zh',
+        'Ի' => 'I',
+        'Լ' => 'L',
+        'Խ' => 'Kh',
+        'Ծ' => 'Ts',
+        'Կ' => 'K',
+        'Հ' => 'H',
+        'Ձ' => 'Dz',
+        'Ղ' => 'Gh',
+        'Ճ' => 'Tch',
+        'Մ' => 'M',
+        'Յ' => 'Y',
+        'Ն' => 'N',
+        'Շ' => 'Sh',
+        'Ո' => 'Vo',
+        'Չ' => 'Ch',
+        'Պ' => 'P',
+        'Ջ' => 'J',
+        'Ռ' => 'R',
+        'Ս' => 'S',
+        'Վ' => 'V',
+        'Տ' => 'T',
+        'Ր' => 'R',
+        'Ց' => 'C',
+        'Ւ' => 'u',
+        'Փ' => 'Ph',
+        'Ք' => 'Q',
+        'և' => 'ev',
+        'Օ' => 'O',
+        'Ֆ' => 'F',
+        'ա' => 'a',
+        'բ' => 'b',
+        'գ' => 'g',
+        'դ' => 'd',
+        'ե' => 'e',
+        'զ' => 'z',
+        'է' => 'e',
+        'ը' => 'y',
+        'թ' => 'th',
+        'ժ' => 'zh',
+        'ի' => 'i',
+        'լ' => 'l',
+        'խ' => 'kh',
+        'ծ' => 'ts',
+        'կ' => 'k',
+        'հ' => 'h',
+        'ձ' => 'dz',
+        'ղ' => 'gh',
+        'ճ' => 'tch',
+        'մ' => 'm',
+        'յ' => 'y',
+        'ն' => 'n',
+        'շ' => 'sh',
+        'ո' => 'vo',
+        'չ' => 'ch',
+        'պ' => 'p',
+        'ջ' => 'j',
+        'ռ' => 'r',
+        'ս' => 's',
+        'վ' => 'v',
+        'տ' => 't',
+        'ր' => 'r',
+        'ց' => 'c',
+        'ւ' => 'u',
+        'փ' => 'ph',
+        'ք' => 'q',
+        'օ' => 'o',
+        'ֆ' => 'f',
+    ],
+    // Swedish
+    'sv' => [
+        'Ä' => 'A',
+        'ä' => 'a',
+        'Å' => 'A',
+        'å' => 'a',
+        'Ö' => 'O',
+        'ö' => 'o',
+    ],
+    // Turkmen
+    'tk' => [
+        'Ç' => 'C',
+        'Ä' => 'A',
+        'Ž' => 'Z',
+        'Ň' => 'N',
+        'Ö' => 'O',
+        'Ş' => 'S',
+        'Ü' => 'U',
+        'Ý' => 'Y',
+        'ç' => 'c',
+        'ä' => 'a',
+        'ž' => 'z',
+        'ň' => 'n',
+        'ö' => 'o',
+        'ş' => 's',
+        'ü' => 'u',
+        'ý' => 'y',
+    ],
+    // Turkish
+    'tr' => [
+        'ň' => 'n',
+        'Ň' => 'N',
+        'ş' => 's',
+        'Ş' => 'S',
+        'ı' => 'i',
+        'İ' => 'I',
+        'ç' => 'c',
+        'Ç' => 'C',
+        'ä' => 'a',
+        'Ä' => 'A',
+        'ü' => 'u',
+        'Ü' => 'U',
+        'ö' => 'o',
+        'Ö' => 'O',
+        'ğ' => 'g',
+        'Ğ' => 'G',
+        'ý' => 'y',
+        'Ý' => 'Y',
+        'ž' => 'z',
+        'Ž' => 'Z',
+    ],
+    // Bulgarian
+    'bg' => [
+        'ьо' => 'yo',
+        'А'  => 'A',
+        'Б'  => 'B',
+        'В'  => 'V',
+        'Г'  => 'G',
+        'Д'  => 'D',
+        'Е'  => 'E',
+        'Ж'  => 'Zh',
+        'З'  => 'Z',
+        'И'  => 'I',
+        'Й'  => 'Y',
+        'К'  => 'K',
+        'Л'  => 'L',
+        'М'  => 'M',
+        'Н'  => 'N',
+        'О'  => 'O',
+        'П'  => 'P',
+        'Р'  => 'R',
+        'С'  => 'S',
+        'Т'  => 'T',
+        'У'  => 'U',
+        'Ф'  => 'F',
+        'Х'  => 'H',
+        'Ц'  => 'C',
+        'Ч'  => 'Ch',
+        'Ш'  => 'Sh',
+        'Щ'  => 'Sht',
+        'Ъ'  => 'A',
+        'Ь'  => '',
+        'Ю'  => 'Yu',
+        'Я'  => 'Ya',
+        'а'  => 'a',
+        'б'  => 'b',
+        'в'  => 'v',
+        'г'  => 'g',
+        'д'  => 'd',
+        'е'  => 'e',
+        'ж'  => 'zh',
+        'з'  => 'z',
+        'и'  => 'i',
+        'й'  => 'y',
+        'к'  => 'k',
+        'л'  => 'l',
+        'м'  => 'm',
+        'н'  => 'n',
+        'о'  => 'o',
+        'п'  => 'p',
+        'р'  => 'r',
+        'с'  => 's',
+        'т'  => 't',
+        'у'  => 'u',
+        'ф'  => 'f',
+        'х'  => 'h',
+        'ц'  => 'c',
+        'ч'  => 'ch',
+        'ш'  => 'sh',
+        'щ'  => 'sht',
+        'ъ'  => 'a',
+        'ь'  => '',
+        'ю'  => 'yu',
+        'я'  => 'ya',
+    ],
+    // Hungarian
+    'hu' => [
+        'Á' => 'A',
+        'Ē' => 'E',
+        'É' => 'E',
+        'Í' => 'I',
+        'Ó' => 'O',
+        'Ö' => 'O',
+        'Ő' => 'O',
+        'Ú' => 'U',
+        'Ü' => 'U',
+        'Ű' => 'U',
+        'á' => 'a',
+        'ē' => 'e',
+        'é' => 'e',
+        'í' => 'i',
+        'ó' => 'o',
+        'ö' => 'o',
+        'ő' => 'o',
+        'ú' => 'u',
+        'ü' => 'u',
+        'ű' => 'u',
+    ],
+    // Myanmar (Burmese)
+    'my' => [
+        'န်ုပ်' => 'nub',
+        'ောင်'  => 'aung',
+        'ိုက်'  => 'aik',
+        'ိုဒ်'  => 'ok',
+        'ိုင်'  => 'aing',
+        'ိုလ်'  => 'ol',
+        'ေါင်'  => 'aung',
+        'သြော'  => 'aw',
+        'ောက်'  => 'auk',
+        'ိတ်'   => 'eik',
+        'ုတ်'   => 'ok',
+        'ုန်'   => 'on',
+        'ေတ်'   => 'it',
+        'ုဒ်'   => 'ait',
+        'ာန်'   => 'an',
+        'ိန်'   => 'ein',
+        'ွတ်'   => 'ut',
+        'ေါ်'   => 'aw',
+        'ွန်'   => 'un',
+        'ိပ်'   => 'eik',
+        'ုပ်'   => 'ok',
+        'ွပ်'   => 'ut',
+        'ိမ်'   => 'ein',
+        'ုမ်'   => 'on',
+        'ော်'   => 'aw',
+        'ွမ်'   => 'un',
+        'က်'    => 'et',
+        'ေါ'    => 'aw',
+        'ော'    => 'aw',
+        'ျွ'    => 'ywa',
+        'ြွ'    => 'yw',
+        'ို'    => 'o',
+        'ုံ'    => 'on',
+        'တ်'    => 'at',
+        'င်'    => 'in',
+        'ည်'    => 'i',
+        'ဒ်'    => 'd',
+        'န်'    => 'an',
+        'ပ်'    => 'at',
+        'မ်'    => 'an',
+        'စျ'    => 'za',
+        'ယ်'    => 'e',
+        'ဉ်'    => 'in',
+        'စ်'    => 'it',
+        'ိံ'    => 'ein',
+        'ဲ'     => 'e',
+        'း'     => '',
+        'ာ'     => 'a',
+        'ါ'     => 'a',
+        'ေ'     => 'e',
+        'ံ'     => 'an',
+        'ိ'     => 'i',
+        'ီ'     => 'i',
+        'ု'     => 'u',
+        'ူ'     => 'u',
+        '်'     => 'at',
+        '္'     => '',
+        '့'     => '',
+        'က'     => 'k',
+        '၉'     => '9',
+        'တ'     => 't',
+        'ရ'     => 'ya',
+        'ယ'     => 'y',
+        'မ'     => 'm',
+        'ဘ'     => 'ba',
+        'ဗ'     => 'b',
+        'ဖ'     => 'pa',
+        'ပ'     => 'p',
+        'န'     => 'n',
+        'ဓ'     => 'da',
+        'ဒ'     => 'd',
+        'ထ'     => 'ta',
+        'ဏ'     => 'na',
+        'ဝ'     => 'w',
+        'ဎ'     => 'da',
+        'ဍ'     => 'd',
+        'ဌ'     => 'ta',
+        'ဋ'     => 't',
+        'ည'     => 'ny',
+        'ဇ'     => 'z',
+        'ဆ'     => 'sa',
+        'စ'     => 's',
+        'င'     => 'ng',
+        'ဃ'     => 'ga',
+        'ဂ'     => 'g',
+        'လ'     => 'l',
+        'သ'     => 'th',
+        '၈'     => '8',
+        'ဩ'     => 'aw',
+        'ခ'     => 'kh',
+        '၆'     => '6',
+        '၅'     => '5',
+        '၄'     => '4',
+        '၃'     => '3',
+        '၂'     => '2',
+        '၁'     => '1',
+        '၀'     => '0',
+        '၌'     => 'hnaik',
+        '၍'     => 'ywae',
+        'ဪ'     => 'aw',
+        'ဦ'     => '-u',
+        'ဟ'     => 'h',
+        'ဉ'     => 'u',
+        'ဤ'     => '-i',
+        'ဣ'     => 'i',
+        '၏'     => '-e',
+        'ဧ'     => 'e',
+        'ှ'     => 'h',
+        'ွ'     => 'w',
+        'ျ'     => 'ya',
+        'ြ'     => 'y',
+        'အ'     => 'a',
+        'ဠ'     => 'la',
+        '၇'     => '7',
+    ],
+    // Croatian (Hrvatska)
+    'hr' => [
+        'DŽ' => 'DZ',
+        'Dž' => 'Dz',
+        'dž' => 'dz',
+        'Ǳ'  => 'DZ',
+        'ǲ'  => 'Dz',
+        'ǳ'  => 'dz',
+        'Ĳ'  => 'IJ',
+        'ĳ'  => 'ij',
+        'Ǉ'  => 'LJ',
+        'ǈ'  => 'Lj',
+        'ǉ'  => 'lj',
+        'Ǌ'  => 'NJ',
+        'ǋ'  => 'Nj',
+        'ǌ'  => 'nj',
+        'ž'  => 'z',
+        'Ž'  => 'Z',
+        'đ'  => 'dj',
+        'Đ'  => 'Dj',
+        'č'  => 'c',
+        'Č'  => 'C',
+        'ć'  => 'c',
+        'Ć'  => 'C',
+        'š'  => 's',
+        'Š'  => 'S',
+    ],
+    // Finnish
+    'fi' => [
+        'Ä' => 'A',
+        'Ö' => 'O',
+        'ä' => 'a',
+        'ö' => 'o',
+    ],
+    // Georgian (Kartvelian)
+    'ka' => [
+        'ა' => 'a',
+        'ბ' => 'b',
+        'გ' => 'g',
+        'დ' => 'd',
+        'ე' => 'e',
+        'ვ' => 'v',
+        'ზ' => 'z',
+        'თ' => 't',
+        'ი' => 'i',
+        'კ' => 'k',
+        'ლ' => 'l',
+        'მ' => 'm',
+        'ნ' => 'n',
+        'ო' => 'o',
+        'პ' => 'p',
+        'ჟ' => 'zh',
+        'რ' => 'r',
+        'ს' => 's',
+        'ტ' => 't',
+        'უ' => 'u',
+        'ფ' => 'f',
+        'ქ' => 'q',
+        'ღ' => 'gh',
+        'ყ' => 'y',
+        'შ' => 'sh',
+        'ჩ' => 'ch',
+        'ც' => 'ts',
+        'ძ' => 'dz',
+        'წ' => 'ts',
+        'ჭ' => 'ch',
+        'ხ' => 'kh',
+        'ჯ' => 'j',
+        'ჰ' => 'h',
+    ],
+    // Russian
+    'ru' => [
+        'А' => 'A',
+        'а' => 'a',
+        'Б' => 'B',
+        'б' => 'b',
+        'В' => 'V',
+        'в' => 'v',
+        'Г' => 'G',
+        'г' => 'g',
+        'Д' => 'D',
+        'д' => 'd',
+        'Е' => 'E',
+        'е' => 'e',
+        'Ё' => 'Yo',
+        'ё' => 'yo',
+        'Ж' => 'Zh',
+        'ж' => 'zh',
+        'З' => 'Z',
+        'з' => 'z',
+        'И' => 'I',
+        'и' => 'i',
+        'Й' => 'Y',
+        'й' => 'y',
+        'К' => 'K',
+        'к' => 'k',
+        'Л' => 'L',
+        'л' => 'l',
+        'М' => 'M',
+        'м' => 'm',
+        'Н' => 'N',
+        'н' => 'n',
+        'О' => 'O',
+        'о' => 'o',
+        'П' => 'P',
+        'п' => 'p',
+        'Р' => 'R',
+        'р' => 'r',
+        'С' => 'S',
+        'с' => 's',
+        'Т' => 'T',
+        'т' => 't',
+        'У' => 'U',
+        'у' => 'u',
+        'Ф' => 'F',
+        'ф' => 'f',
+        'Х' => 'H',
+        'х' => 'h',
+        'Ц' => 'Ts',
+        'ц' => 'ts',
+        'Ч' => 'Ch',
+        'ч' => 'ch',
+        'ш' => 'sh',
+        'Ш' => 'Sh',
+        'Щ' => 'Sch',
+        'щ' => 'sch',
+        'Ъ' => '',
+        'ъ' => '',
+        'Ы' => 'Y',
+        'ы' => 'y',
+        'Ь' => '',
+        'ь' => '',
+        'Э' => 'E',
+        'э' => 'e',
+        'Ю' => 'Yu',
+        'ю' => 'yu',
+        'Я' => 'Ya',
+        'я' => 'ya',
+    ],
+    // Russian - GOST 7.79-2000(B)
+    // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1
+    'ru__gost_2000_b' => [
+        'А' => 'A',
+        'а' => 'a',
+        'Б' => 'B',
+        'б' => 'b',
+        'В' => 'V',
+        'в' => 'v',
+        'Г' => 'G',
+        'г' => 'g',
+        'Д' => 'D',
+        'д' => 'd',
+        'Е' => 'E',
+        'е' => 'e',
+        'Ё' => 'Yo',
+        'ё' => 'yo',
+        'Ж' => 'Zh',
+        'ж' => 'zh',
+        'З' => 'Z',
+        'з' => 'z',
+        'И' => 'i',
+        'и' => 'i',
+        'Й' => 'i',
+        'й' => 'i',
+        'К' => 'K',
+        'к' => 'k',
+        'Л' => 'L',
+        'л' => 'l',
+        'М' => 'M',
+        'м' => 'm',
+        'Н' => 'N',
+        'н' => 'n',
+        'О' => 'O',
+        'о' => 'o',
+        'П' => 'P',
+        'п' => 'p',
+        'Р' => 'R',
+        'р' => 'r',
+        'С' => 'S',
+        'с' => 's',
+        'Т' => 'T',
+        'т' => 't',
+        'У' => 'U',
+        'у' => 'u',
+        'Ф' => 'F',
+        'ф' => 'f',
+        'Х' => 'X',
+        'х' => 'x',
+        'Ц' => 'Cz',
+        'ц' => 'cz',
+        'Ч' => 'Ch',
+        'ч' => 'ch',
+        'ш' => 'sh',
+        'Ш' => 'Sh',
+        'Щ' => 'Shh',
+        'щ' => 'shh',
+        'Ъ' => '',
+        'ъ' => '',
+        'Ы' => 'Y\'',
+        'ы' => 'y\'',
+        'Ь' => '',
+        'ь' => '',
+        'Э' => 'E\'',
+        'э' => 'e\'',
+        'Ю' => 'Yu',
+        'ю' => 'yu',
+        'Я' => 'Ya',
+        'я' => 'ya',
+        'І' => 'I',
+        'і' => 'i',
+        'Ѳ' => 'Fh',
+        'ѳ' => 'fh',
+        'Ѣ' => 'Ye',
+        'ѣ' => 'ye',
+        'Ѵ' => 'Yh',
+        'ѵ' => 'yh',
+        'Є' => '',
+        'є' => '',
+        'Ѥ' => '',
+        'ѥ' => '',
+        'Ѕ' => 'Js',
+        'ѕ' => 'js',
+        'Ꙋ' => '',
+        'ꙋ' => '',
+        'Ѡ' => '',
+        'ѡ' => '',
+        'Ѿ' => '',
+        'ѿ' => '',
+        'Ѫ' => '',
+        'ѫ' => '',
+        'Ѧ' => '',
+        'ѧ' => '',
+        'Ѭ' => '',
+        'ѭ' => '',
+        'Ѩ' => '',
+        'ѩ' => '',
+        'Ѯ' => '',
+        'ѯ' => '',
+        'Ѱ' => '',
+        'ѱ' => '',
+    ],
+    // Russian - Passport (2013), ICAO
+    // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1
+    'ru__passport_2013' => [
+        'А' => 'A',
+        'а' => 'a',
+        'Б' => 'B',
+        'б' => 'b',
+        'В' => 'V',
+        'в' => 'v',
+        'Г' => 'G',
+        'г' => 'g',
+        'Д' => 'D',
+        'д' => 'd',
+        'Е' => 'E',
+        'е' => 'e',
+        'Ё' => 'E',
+        'ё' => 'e',
+        'Ж' => 'Zh',
+        'ж' => 'zh',
+        'З' => 'Z',
+        'з' => 'z',
+        'И' => 'i',
+        'и' => 'i',
+        'Й' => 'i',
+        'й' => 'i',
+        'К' => 'K',
+        'к' => 'k',
+        'Л' => 'L',
+        'л' => 'l',
+        'М' => 'M',
+        'м' => 'm',
+        'Н' => 'N',
+        'н' => 'n',
+        'О' => 'O',
+        'о' => 'o',
+        'П' => 'P',
+        'п' => 'p',
+        'Р' => 'R',
+        'р' => 'r',
+        'С' => 'S',
+        'с' => 's',
+        'Т' => 'T',
+        'т' => 't',
+        'У' => 'U',
+        'у' => 'u',
+        'Ф' => 'F',
+        'ф' => 'f',
+        'Х' => 'Kh',
+        'х' => 'kh',
+        'Ц' => 'Ts',
+        'ц' => 'ts',
+        'Ч' => 'Ch',
+        'ч' => 'ch',
+        'ш' => 'sh',
+        'Ш' => 'Sh',
+        'Щ' => 'Shch',
+        'щ' => 'shch',
+        'Ъ' => 'Ie',
+        'ъ' => 'ie',
+        'Ы' => 'Y',
+        'ы' => 'y',
+        'Ь' => '',
+        'ь' => '',
+        'Э' => 'E',
+        'э' => 'e',
+        'Ю' => 'Iu',
+        'ю' => 'iu',
+        'Я' => 'Ia',
+        'я' => 'ia',
+        'І' => '',
+        'і' => '',
+        'Ѳ' => '',
+        'ѳ' => '',
+        'Ѣ' => '',
+        'ѣ' => '',
+        'Ѵ' => '',
+        'ѵ' => '',
+        'Є' => '',
+        'є' => '',
+        'Ѥ' => '',
+        'ѥ' => '',
+        'Ѕ' => '',
+        'ѕ' => '',
+        'Ꙋ' => '',
+        'ꙋ' => '',
+        'Ѡ' => '',
+        'ѡ' => '',
+        'Ѿ' => '',
+        'ѿ' => '',
+        'Ѫ' => '',
+        'ѫ' => '',
+        'Ѧ' => '',
+        'ѧ' => '',
+        'Ѭ' => '',
+        'ѭ' => '',
+        'Ѩ' => '',
+        'ѩ' => '',
+        'Ѯ' => '',
+        'ѯ' => '',
+        'Ѱ' => '',
+        'ѱ' => '',
+    ],
+    // Ukrainian
+    // -> https://zakon.rada.gov.ua/laws/show/55-2010-%D0%BF?lang=en
+    'uk' => [
+        'Г' => 'H',
+        'г' => 'h',
+        'Ґ' => 'G',
+        'ґ' => 'g',
+        'Є' => 'Ye',
+        'є' => 'ye',
+        'И' => 'Y',
+        'и' => 'y',
+        'І' => 'I',
+        'і' => 'i',
+        'Ї' => 'Yi',
+        'ї' => 'yi',
+        'Й' => 'Y',
+        'й' => 'y',
+        'Х' => 'Kh',
+        'х' => 'kh',
+        'Ц' => 'Ts',
+        'ц' => 'ts',
+        'Ч' => 'Ch',
+        'ч' => 'ch',
+        'Ш' => 'Sh',
+        'ш' => 'sh',
+        'Щ' => 'Shch',
+        'щ' => 'shch',
+    ],
+    // Kazakh
+    'kk' => [
+        'Ә' => 'A',
+        'Ғ' => 'G',
+        'Қ' => 'Q',
+        'Ң' => 'N',
+        'Ө' => 'O',
+        'Ұ' => 'U',
+        'Ү' => 'U',
+        'Һ' => 'H',
+        'ә' => 'a',
+        'ғ' => 'g',
+        'қ' => 'q',
+        'ң' => 'n',
+        'ө' => 'o',
+        'ұ' => 'u',
+        'ү' => 'u',
+        'һ' => 'h',
+    ],
+    // Czech
+    'cs' => [
+        'á' => 'a',
+        'Á' => 'A',
+        'č' => 'c',
+        'Č' => 'C',
+        'ď' => 'd',
+        'Ď' => 'D',
+        'é' => 'e',
+        'É' => 'E',
+        'ě' => 'e',
+        'Ě' => 'E',
+        'í' => 'i',
+        'Í' => 'I',
+        'ň' => 'n',
+        'Ň' => 'N',
+        'ó' => 'o',
+        'Ó' => 'O',
+        'ř' => 'r',
+        'Ř' => 'R',
+        'š' => 's',
+        'Š' => 'S',
+        'ť' => 't',
+        'Ť' => 'T',
+        'ú' => 'u',
+        'Ú' => 'U',
+        'ů' => 'u',
+        'Ů' => 'U',
+        'ý' => 'y',
+        'Ý' => 'Y',
+        'ž' => 'z',
+        'Ž' => 'Z',
+    ],
+    // Danish
+    'da' => [
+        'Æ' => 'Ae',
+        'æ' => 'ae',
+        'Ø' => 'Oe',
+        'ø' => 'oe',
+        'Å' => 'Aa',
+        'å' => 'aa',
+        'É' => 'E',
+        'é' => 'e',
+    ],
+    // Polish
+    'pl' => [
+        'ą' => 'a',
+        'ć' => 'c',
+        'ę' => 'e',
+        'ł' => 'l',
+        'ń' => 'n',
+        'ó' => 'o',
+        'ś' => 's',
+        'ź' => 'z',
+        'ż' => 'z',
+        'Ą' => 'A',
+        'Ć' => 'C',
+        'Ę' => 'E',
+        'Ł' => 'L',
+        'Ń' => 'N',
+        'Ó' => 'O',
+        'Ś' => 'S',
+        'Ź' => 'Z',
+        'Ż' => 'Z',
+    ],
+    // Romanian
+    'ro' => [
+        'ă' => 'a',
+        'â' => 'a',
+        'Ă' => 'A',
+        'Â' => 'A',
+        'î' => 'i',
+        'Î' => 'I',
+        'ș' => 's',
+        'ş' => 's',
+        'Ş' => 'S',
+        'Ș' => 'S',
+        'ț' => 't',
+        'ţ' => 't',
+        'Ţ' => 'T',
+        'Ț' => 'T',
+    ],
+    // Esperanto
+    'eo' => [
+        'ĉ' => 'cx',
+        'ĝ' => 'gx',
+        'ĥ' => 'hx',
+        'ĵ' => 'jx',
+        'ŝ' => 'sx',
+        'ŭ' => 'ux',
+        'Ĉ' => 'CX',
+        'Ĝ' => 'GX',
+        'Ĥ' => 'HX',
+        'Ĵ' => 'JX',
+        'Ŝ' => 'SX',
+        'Ŭ' => 'UX',
+    ],
+    // Estonian
+    'et' => [
+        'Š' => 'S',
+        'Ž' => 'Z',
+        'Õ' => 'O',
+        'Ä' => 'A',
+        'Ö' => 'O',
+        'Ü' => 'U',
+        'š' => 's',
+        'ž' => 'z',
+        'õ' => 'o',
+        'ä' => 'a',
+        'ö' => 'o',
+        'ü' => 'u',
+    ],
+    // Latvian
+    'lv' => [
+        'ā' => 'a',
+        'č' => 'c',
+        'ē' => 'e',
+        'ģ' => 'g',
+        'ī' => 'i',
+        'ķ' => 'k',
+        'ļ' => 'l',
+        'ņ' => 'n',
+        'š' => 's',
+        'ū' => 'u',
+        'ž' => 'z',
+        'Ā' => 'A',
+        'Č' => 'C',
+        'Ē' => 'E',
+        'Ģ' => 'G',
+        'Ī' => 'i',
+        'Ķ' => 'k',
+        'Ļ' => 'L',
+        'Ņ' => 'N',
+        'Š' => 'S',
+        'Ū' => 'u',
+        'Ž' => 'Z',
+    ],
+    // Lithuanian
+    'lt' => [
+        'ą' => 'a',
+        'č' => 'c',
+        'ę' => 'e',
+        'ė' => 'e',
+        'į' => 'i',
+        'š' => 's',
+        'ų' => 'u',
+        'ū' => 'u',
+        'ž' => 'z',
+        'Ą' => 'A',
+        'Č' => 'C',
+        'Ę' => 'E',
+        'Ė' => 'E',
+        'Į' => 'I',
+        'Š' => 'S',
+        'Ų' => 'U',
+        'Ū' => 'U',
+        'Ž' => 'Z',
+    ],
+    // Norwegian
+    'no' => [
+        'Æ' => 'AE',
+        'æ' => 'ae',
+        'Ø' => 'OE',
+        'ø' => 'oe',
+        'Å' => 'AA',
+        'å' => 'aa',
+    ],
+    // Vietnamese
+    'vi' => [
+        'Á' => 'A',
+        'À' => 'A',
+        'Ả' => 'A',
+        'Ã' => 'A',
+        'Ạ' => 'A',
+        'Ă' => 'A',
+        'Ắ' => 'A',
+        'Ằ' => 'A',
+        'Ẳ' => 'A',
+        'Ẵ' => 'A',
+        'Ặ' => 'A',
+        'Â' => 'A',
+        'Ấ' => 'A',
+        'Ầ' => 'A',
+        'Ẩ' => 'A',
+        'Ẫ' => 'A',
+        'Ậ' => 'A',
+        'á' => 'a',
+        'à' => 'a',
+        'ả' => 'a',
+        'ã' => 'a',
+        'ạ' => 'a',
+        'ă' => 'a',
+        'ắ' => 'a',
+        'ằ' => 'a',
+        'ẳ' => 'a',
+        'ẵ' => 'a',
+        'ặ' => 'a',
+        'â' => 'a',
+        'ấ' => 'a',
+        'ầ' => 'a',
+        'ẩ' => 'a',
+        'ẫ' => 'a',
+        'ậ' => 'a',
+        'É' => 'E',
+        'È' => 'E',
+        'Ẻ' => 'E',
+        'Ẽ' => 'E',
+        'Ẹ' => 'E',
+        'Ê' => 'E',
+        'Ế' => 'E',
+        'Ề' => 'E',
+        'Ể' => 'E',
+        'Ễ' => 'E',
+        'Ệ' => 'E',
+        'é' => 'e',
+        'è' => 'e',
+        'ẻ' => 'e',
+        'ẽ' => 'e',
+        'ẹ' => 'e',
+        'ê' => 'e',
+        'ế' => 'e',
+        'ề' => 'e',
+        'ể' => 'e',
+        'ễ' => 'e',
+        'ệ' => 'e',
+        'Í' => 'I',
+        'Ì' => 'I',
+        'Ỉ' => 'I',
+        'Ĩ' => 'I',
+        'Ị' => 'I',
+        'í' => 'i',
+        'ì' => 'i',
+        'ỉ' => 'i',
+        'ĩ' => 'i',
+        'ị' => 'i',
+        'Ó' => 'O',
+        'Ò' => 'O',
+        'Ỏ' => 'O',
+        'Õ' => 'O',
+        'Ọ' => 'O',
+        'Ô' => 'O',
+        'Ố' => 'O',
+        'Ồ' => 'O',
+        'Ổ' => 'O',
+        'Ỗ' => 'O',
+        'Ộ' => 'O',
+        'Ơ' => 'O',
+        'Ớ' => 'O',
+        'Ờ' => 'O',
+        'Ở' => 'O',
+        'Ỡ' => 'O',
+        'Ợ' => 'O',
+        'ó' => 'o',
+        'ò' => 'o',
+        'ỏ' => 'o',
+        'õ' => 'o',
+        'ọ' => 'o',
+        'ô' => 'o',
+        'ố' => 'o',
+        'ồ' => 'o',
+        'ổ' => 'o',
+        'ỗ' => 'o',
+        'ộ' => 'o',
+        'ơ' => 'o',
+        'ớ' => 'o',
+        'ờ' => 'o',
+        'ở' => 'o',
+        'ỡ' => 'o',
+        'ợ' => 'o',
+        'Ú' => 'U',
+        'Ù' => 'U',
+        'Ủ' => 'U',
+        'Ũ' => 'U',
+        'Ụ' => 'U',
+        'Ư' => 'U',
+        'Ứ' => 'U',
+        'Ừ' => 'U',
+        'Ử' => 'U',
+        'Ữ' => 'U',
+        'Ự' => 'U',
+        'ú' => 'u',
+        'ù' => 'u',
+        'ủ' => 'u',
+        'ũ' => 'u',
+        'ụ' => 'u',
+        'ư' => 'u',
+        'ứ' => 'u',
+        'ừ' => 'u',
+        'ử' => 'u',
+        'ữ' => 'u',
+        'ự' => 'u',
+        'Ý' => 'Y',
+        'Ỳ' => 'Y',
+        'Ỷ' => 'Y',
+        'Ỹ' => 'Y',
+        'Ỵ' => 'Y',
+        'ý' => 'y',
+        'ỳ' => 'y',
+        'ỷ' => 'y',
+        'ỹ' => 'y',
+        'ỵ' => 'y',
+        'Đ' => 'D',
+        'đ' => 'd',
+    ],
+    // Persian (Farsi)
+    'fa' => [
+        'ا' => 'a',
+        'ب' => 'b',
+        'پ' => 'p',
+        'ت' => 't',
+        'ث' => 's',
+        'ج' => 'j',
+        'چ' => 'ch',
+        'ح' => 'h',
+        'خ' => 'kh',
+        'د' => 'd',
+        'ذ' => 'z',
+        'ر' => 'r',
+        'ز' => 'z',
+        'س' => 's',
+        'ش' => 'sh',
+        'ص' => 's',
+        'ض' => 'z',
+        'ط' => 't',
+        'ظ' => 'z',
+        'ع' => 'a',
+        'غ' => 'gh',
+        'ف' => 'f',
+        'ق' => 'gh',
+        'ک' => 'k',
+        'گ' => 'g',
+        'ل' => 'l',
+        'ژ' => 'zh',
+        'ك' => 'k',
+        'م' => 'm',
+        'ن' => 'n',
+        'ه' => 'h',
+        'و' => 'o',
+        'ی' => 'y',
+        'آ' => 'a',
+        '٠' => '0',
+        '١' => '1',
+        '٢' => '2',
+        '٣' => '3',
+        '٤' => '4',
+        '٥' => '5',
+        '٦' => '6',
+        '٧' => '7',
+        '٨' => '8',
+        '٩' => '9',
+    ],
+    // Arabic
+    'ar' => [
+        'أ' => 'a',
+        'ب' => 'b',
+        'ت' => 't',
+        'ث' => 'th',
+        'ج' => 'g',
+        'ح' => 'h',
+        'خ' => 'kh',
+        'د' => 'd',
+        'ذ' => 'th',
+        'ر' => 'r',
+        'ز' => 'z',
+        'س' => 's',
+        'ش' => 'sh',
+        'ص' => 's',
+        'ض' => 'd',
+        'ط' => 't',
+        'ظ' => 'th',
+        'ع' => 'aa',
+        'غ' => 'gh',
+        'ف' => 'f',
+        'ق' => 'k',
+        'ك' => 'k',
+        'ل' => 'l',
+        'م' => 'm',
+        'ن' => 'n',
+        'ه' => 'h',
+        'و' => 'o',
+        'ي' => 'y',
+        'ا' => 'a',
+        'إ' => 'a',
+        'آ' => 'a',
+        'ؤ' => 'o',
+        'ئ' => 'y',
+        'ء' => 'aa',
+        '٠' => '0',
+        '١' => '1',
+        '٢' => '2',
+        '٣' => '3',
+        '٤' => '4',
+        '٥' => '5',
+        '٦' => '6',
+        '٧' => '7',
+        '٨' => '8',
+        '٩' => '9',
+    ],
+    // Serbian
+    'sr' => [
+        'đ' => 'dj',
+        'ž' => 'z',
+        'ć' => 'c',
+        'č' => 'c',
+        'š' => 's',
+        'Đ' => 'Dj',
+        'Ž' => 'Z',
+        'Ć' => 'C',
+        'Č' => 'C',
+        'Š' => 'S',
+        'а' => 'a',
+        'б' => 'b',
+        'в' => 'v',
+        'г' => 'g',
+        'д' => 'd',
+        'ђ' => 'dj',
+        'е' => 'e',
+        'ж' => 'z',
+        'з' => 'z',
+        'и' => 'i',
+        'ј' => 'j',
+        'к' => 'k',
+        'л' => 'l',
+        'љ' => 'lj',
+        'м' => 'm',
+        'н' => 'n',
+        'њ' => 'nj',
+        'о' => 'o',
+        'п' => 'p',
+        'р' => 'r',
+        'с' => 's',
+        'т' => 't',
+        'ћ' => 'c',
+        'у' => 'u',
+        'ф' => 'f',
+        'х' => 'h',
+        'ц' => 'c',
+        'ч' => 'c',
+        'џ' => 'dz',
+        'ш' => 's',
+        'А' => 'A',
+        'Б' => 'B',
+        'В' => 'V',
+        'Г' => 'G',
+        'Д' => 'D',
+        'Ђ' => 'Dj',
+        'Е' => 'E',
+        'Ж' => 'Z',
+        'З' => 'Z',
+        'И' => 'I',
+        'Ј' => 'j',
+        'К' => 'K',
+        'Л' => 'L',
+        'Љ' => 'Lj',
+        'М' => 'M',
+        'Н' => 'N',
+        'Њ' => 'Nj',
+        'О' => 'O',
+        'П' => 'P',
+        'Р' => 'R',
+        'С' => 'S',
+        'Т' => 'T',
+        'Ћ' => 'C',
+        'У' => 'U',
+        'Ф' => 'F',
+        'Х' => 'H',
+        'Ц' => 'C',
+        'Ч' => 'C',
+        'Џ' => 'Dz',
+        'Ш' => 'S',
+    ],
+    // Serbian - Cyrillic
+    'sr__cyr' => [
+        'а' => 'a',
+        'б' => 'b',
+        'в' => 'v',
+        'г' => 'g',
+        'д' => 'd',
+        'ђ' => 'dj',
+        'е' => 'e',
+        'ж' => 'z',
+        'з' => 'z',
+        'и' => 'i',
+        'ј' => 'j',
+        'к' => 'k',
+        'л' => 'l',
+        'љ' => 'lj',
+        'м' => 'm',
+        'н' => 'n',
+        'њ' => 'nj',
+        'о' => 'o',
+        'п' => 'p',
+        'р' => 'r',
+        'с' => 's',
+        'т' => 't',
+        'ћ' => 'c',
+        'у' => 'u',
+        'ф' => 'f',
+        'х' => 'h',
+        'ц' => 'c',
+        'ч' => 'c',
+        'џ' => 'dz',
+        'ш' => 's',
+        'А' => 'A',
+        'Б' => 'B',
+        'В' => 'V',
+        'Г' => 'G',
+        'Д' => 'D',
+        'Ђ' => 'Dj',
+        'Е' => 'E',
+        'Ж' => 'Z',
+        'З' => 'Z',
+        'И' => 'I',
+        'Ј' => 'j',
+        'К' => 'K',
+        'Л' => 'L',
+        'Љ' => 'Lj',
+        'М' => 'M',
+        'Н' => 'N',
+        'Њ' => 'Nj',
+        'О' => 'O',
+        'П' => 'P',
+        'Р' => 'R',
+        'С' => 'S',
+        'Т' => 'T',
+        'Ћ' => 'C',
+        'У' => 'U',
+        'Ф' => 'F',
+        'Х' => 'H',
+        'Ц' => 'C',
+        'Ч' => 'C',
+        'Џ' => 'Dz',
+        'Ш' => 'S',
+    ],
+    // Serbian - Latin
+    'sr__lat' => [
+        'đ' => 'dj',
+        'ž' => 'z',
+        'ć' => 'c',
+        'č' => 'c',
+        'š' => 's',
+        'Đ' => 'Dj',
+        'Ž' => 'Z',
+        'Ć' => 'C',
+        'Č' => 'C',
+        'Š' => 'S',
+    ],
+    // Azerbaijani
+    'az' => [
+        'ç' => 'c',
+        'ə' => 'e',
+        'ğ' => 'g',
+        'ı' => 'i',
+        'ö' => 'o',
+        'ş' => 's',
+        'ü' => 'u',
+        'Ç' => 'C',
+        'Ə' => 'E',
+        'Ğ' => 'G',
+        'İ' => 'I',
+        'Ö' => 'O',
+        'Ş' => 'S',
+        'Ü' => 'U',
+    ],
+    // Slovak
+    'sk' => [
+        'á' => 'a',
+        'ä' => 'a',
+        'č' => 'c',
+        'ď' => 'd',
+        'é' => 'e',
+        'í' => 'i',
+        'ľ' => 'l',
+        'ĺ' => 'l',
+        'ň' => 'n',
+        'ó' => 'o',
+        'ô' => 'o',
+        'ŕ' => 'r',
+        'š' => 's',
+        'ť' => 't',
+        'ú' => 'u',
+        'ý' => 'y',
+        'ž' => 'z',
+        'Á' => 'A',
+        'Ä' => 'A',
+        'Č' => 'C',
+        'Ď' => 'D',
+        'É' => 'E',
+        'Í' => 'I',
+        'Ľ' => 'L',
+        'Ĺ' => 'L',
+        'Ň' => 'N',
+        'Ó' => 'O',
+        'Ô' => 'O',
+        'Ŕ' => 'R',
+        'Š' => 'S',
+        'Ť' => 'T',
+        'Ú' => 'U',
+        'Ý' => 'Y',
+        'Ž' => 'Z',
+    ],
+    // French
+    'fr' => [
+        'Æ' => 'AE',
+        'æ' => 'ae',
+        'Œ' => 'OE',
+        'œ' => 'oe',
+        'â' => 'a',
+        'Â' => 'A',
+        'à' => 'a',
+        'À' => 'A',
+        'ä' => 'a',
+        'Ä' => 'A',
+        'ç' => 'c',
+        'Ç' => 'C',
+        'é' => 'e',
+        'É' => 'E',
+        'ê' => 'e',
+        'Ê' => 'E',
+        'ë' => 'e',
+        'Ë' => 'E',
+        'è' => 'e',
+        'È' => 'E',
+        'ï' => 'i',
+        'î' => 'i',
+        'Ï' => 'I',
+        'Î' => 'I',
+        'ÿ' => 'y',
+        'Ÿ' => 'Y',
+        'ô' => 'o',
+        'Ô' => 'O',
+        'ö' => 'o',
+        'Ö' => 'O',
+        'û' => 'u',
+        'Û' => 'U',
+        'ù' => 'u',
+        'Ù' => 'U',
+        'ü' => 'u',
+        'Ü' => 'U',
+    ],
+    // Austrian (French)
+    'fr_at' => [
+        'ß' => 'sz',
+        'ẞ' => 'SZ',
+        'Æ' => 'AE',
+        'æ' => 'ae',
+        'Œ' => 'OE',
+        'œ' => 'oe',
+        'â' => 'a',
+        'Â' => 'A',
+        'à' => 'a',
+        'À' => 'A',
+        'ä' => 'a',
+        'Ä' => 'A',
+        'ç' => 'c',
+        'Ç' => 'C',
+        'é' => 'e',
+        'É' => 'E',
+        'ê' => 'e',
+        'Ê' => 'E',
+        'ë' => 'e',
+        'Ë' => 'E',
+        'è' => 'e',
+        'È' => 'E',
+        'ï' => 'i',
+        'î' => 'i',
+        'Ï' => 'I',
+        'Î' => 'I',
+        'ÿ' => 'y',
+        'Ÿ' => 'Y',
+        'ô' => 'o',
+        'Ô' => 'O',
+        'ö' => 'o',
+        'Ö' => 'O',
+        'û' => 'u',
+        'Û' => 'U',
+        'ù' => 'u',
+        'Ù' => 'U',
+        'ü' => 'u',
+        'Ü' => 'U',
+    ],
+    // Switzerland (French)
+    'fr_ch' => [
+        'ß' => 'ss',
+        'ẞ' => 'SS',
+        'Æ' => 'AE',
+        'æ' => 'ae',
+        'Œ' => 'OE',
+        'œ' => 'oe',
+        'â' => 'a',
+        'Â' => 'A',
+        'à' => 'a',
+        'À' => 'A',
+        'ä' => 'a',
+        'Ä' => 'A',
+        'ç' => 'c',
+        'Ç' => 'C',
+        'é' => 'e',
+        'É' => 'E',
+        'ê' => 'e',
+        'Ê' => 'E',
+        'ë' => 'e',
+        'Ë' => 'E',
+        'è' => 'e',
+        'È' => 'E',
+        'ï' => 'i',
+        'î' => 'i',
+        'Ï' => 'I',
+        'Î' => 'I',
+        'ÿ' => 'y',
+        'Ÿ' => 'Y',
+        'ô' => 'o',
+        'Ô' => 'O',
+        'ö' => 'o',
+        'Ö' => 'O',
+        'û' => 'u',
+        'Û' => 'U',
+        'ù' => 'u',
+        'Ù' => 'U',
+        'ü' => 'u',
+        'Ü' => 'U',
+    ],
+    // German
+    'de' => [
+        'Ä' => 'Ae',
+        'Ö' => 'Oe',
+        'Ü' => 'Ue',
+        'ä' => 'ae',
+        'ö' => 'oe',
+        'ü' => 'ue',
+        'ß' => 'ss',
+        'ẞ' => 'SS',
+    ],
+    // Austrian (German)
+    'de_at' => [
+        'Ä' => 'Ae',
+        'Ö' => 'Oe',
+        'Ü' => 'Ue',
+        'ä' => 'ae',
+        'ö' => 'oe',
+        'ü' => 'ue',
+        'ß' => 'sz',
+        'ẞ' => 'SZ',
+    ],
+    // Switzerland (German)
+    'de_ch' => [
+        'Ä' => 'Ae',
+        'Ö' => 'Oe',
+        'Ü' => 'Ue',
+        'ä' => 'ae',
+        'ö' => 'oe',
+        'ü' => 'ue',
+        'ß' => 'ss',
+        'ẞ' => 'SS',
+    ],
+    // Bengali (Bangla)
+    'bn' => [
+        'ভ্ল'   => 'vl',
+        'পশ'    => 'psh',
+        'ব্ধ'   => 'bdh',
+        'ব্জ'   => 'bj',
+        'ব্দ'   => 'bd',
+        'ব্ব'   => 'bb',
+        'ব্ল'   => 'bl',
+        'ভ'     => 'v',
+        'ব'     => 'b',
+        'চ্ঞ'   => 'cNG',
+        'চ্ছ'   => 'cch',
+        'চ্চ'   => 'cc',
+        'ছ'     => 'ch',
+        'চ'     => 'c',
+        'ধ্ন'   => 'dhn',
+        'ধ্ম'   => 'dhm',
+        'দ্ঘ'   => 'dgh',
+        'দ্ধ'   => 'ddh',
+        'দ্ভ'   => 'dv',
+        'দ্ম'   => 'dm',
+        'ড্ড'   => 'DD',
+        'ঢ'     => 'Dh',
+        'ধ'     => 'dh',
+        'দ্গ'   => 'dg',
+        'দ্দ'   => 'dd',
+        'ড'     => 'D',
+        'দ'     => 'd',
+        '।'     => '.',
+        'ঘ্ন'   => 'Ghn',
+        'গ্ধ'   => 'Gdh',
+        'গ্ণ'   => 'GN',
+        'গ্ন'   => 'Gn',
+        'গ্ম'   => 'Gm',
+        'গ্ল'   => 'Gl',
+        'জ্ঞ'   => 'jNG',
+        'ঘ'     => 'Gh',
+        'গ'     => 'g',
+        'হ্ণ'   => 'hN',
+        'হ্ন'   => 'hn',
+        'হ্ম'   => 'hm',
+        'হ্ল'   => 'hl',
+        'হ'     => 'h',
+        'জ্ঝ'   => 'jjh',
+        'ঝ'     => 'jh',
+        'জ্জ'   => 'jj',
+        'জ'     => 'j',
+        'ক্ষ্ণ' => 'kxN',
+        'ক্ষ্ম' => 'kxm',
+        'ক্ষ'   => 'ksh',
+        'কশ'    => 'ksh',
+        'ক্ক'   => 'kk',
+        'ক্ট'   => 'kT',
+        'ক্ত'   => 'kt',
+        'ক্ল'   => 'kl',
+        'ক্স'   => 'ks',
+        'খ'     => 'kh',
+        'ক'     => 'k',
+        'ল্ভ'   => 'lv',
+        'ল্ধ'   => 'ldh',
+        'লখ'    => 'lkh',
+        'লঘ'    => 'lgh',
+        'লফ'    => 'lph',
+        'ল্ক'   => 'lk',
+        'ল্গ'   => 'lg',
+        'ল্ট'   => 'lT',
+        'ল্ড'   => 'lD',
+        'ল্প'   => 'lp',
+        'ল্ম'   => 'lm',
+        'ল্ল'   => 'll',
+        'ল্ব'   => 'lb',
+        'ল'     => 'l',
+        'ম্থ'   => 'mth',
+        'ম্ফ'   => 'mf',
+        'ম্ভ'   => 'mv',
+        'মপ্ল'  => 'mpl',
+        'ম্ন'   => 'mn',
+        'ম্প'   => 'mp',
+        'ম্ম'   => 'mm',
+        'ম্ল'   => 'ml',
+        'ম্ব'   => 'mb',
+        'ম'     => 'm',
+        '০'     => '0',
+        '১'     => '1',
+        '২'     => '2',
+        '৩'     => '3',
+        '৪'     => '4',
+        '৫'     => '5',
+        '৬'     => '6',
+        '৭'     => '7',
+        '৮'     => '8',
+        '৯'     => '9',
+        'ঙ্ক্ষ' => 'Ngkx',
+        'ঞ্ছ'   => 'nch',
+        'ঙ্ঘ'   => 'ngh',
+        'ঙ্খ'   => 'nkh',
+        'ঞ্ঝ'   => 'njh',
+        'ঙ্গৌ'  => 'ngOU',
+        'ঙ্গৈ'  => 'ngOI',
+        'ঞ্চ'   => 'nc',
+        'ঙ্ক'   => 'nk',
+        'ঙ্ষ'   => 'Ngx',
+        'ঙ্গ'   => 'ngo',
+        'ঙ্ম'   => 'Ngm',
+        'ঞ্জ'   => 'nj',
+        'ন্ধ'   => 'ndh',
+        'ন্ঠ'   => 'nTh',
+        'ণ্ঠ'   => 'NTh',
+        'ন্থ'   => 'nth',
+        'ঙ্গা'  => 'nga',
+        'ঙ্গি'  => 'ngi',
+        'ঙ্গী'  => 'ngI',
+        'ঙ্গু'  => 'ngu',
+        'ঙ্গূ'  => 'ngU',
+        'ঙ্গে'  => 'nge',
+        'ঙ্গো'  => 'ngO',
+        'ণ্ঢ'   => 'NDh',
+        'নশ'    => 'nsh',
+        'ঙর'    => 'Ngr',
+        'ঞর'    => 'NGr',
+        'ংর'    => 'ngr',
+        'ঙ'     => 'Ng',
+        'ঞ'     => 'NG',
+        'ং'     => 'ng',
+        'ন্ন'   => 'nn',
+        'ণ্ণ'   => 'NN',
+        'ণ্ন'   => 'Nn',
+        'ন্ম'   => 'nm',
+        'ণ্ম'   => 'Nm',
+        'ন্দ'   => 'nd',
+        'ন্ট'   => 'nT',
+        'ণ্ট'   => 'NT',
+        'ন্ড'   => 'nD',
+        'ণ্ড'   => 'ND',
+        'ন্ত'   => 'nt',
+        'ন্স'   => 'ns',
+        'ন'     => 'n',
+        'ণ'     => 'N',
+        'ৈ'     => 'OI',
+        'ৌ'     => 'OU',
+        'ো'     => 'O',
+        'ঐ'     => 'OI',
+        'ঔ'     => 'OU',
+        'অ'     => 'o',
+        'ও'     => 'oo',
+        'ফ্ল'   => 'fl',
+        'প্ট'   => 'pT',
+        'প্ত'   => 'pt',
+        'প্ন'   => 'pn',
+        'প্প'   => 'pp',
+        'প্ল'   => 'pl',
+        'প্স'   => 'ps',
+        'ফ'     => 'f',
+        'প'     => 'p',
+        'ৃ'     => 'rri',
+        'ঋ'     => 'rri',
+        'রর‍্য' => 'rry',
+        '্র্য'  => 'ry',
+        '্রর'   => 'rr',
+        'ড়্গ'   => 'Rg',
+        'ঢ়'     => 'Rh',
+        'ড়'     => 'R',
+        'র'     => 'r',
+        '্র'    => 'r',
+        'শ্ছ'   => 'Sch',
+        'ষ্ঠ'   => 'ShTh',
+        'ষ্ফ'   => 'Shf',
+        'স্ক্ল' => 'skl',
+        'স্খ'   => 'skh',
+        'স্থ'   => 'sth',
+        'স্ফ'   => 'sf',
+        'শ্চ'   => 'Sc',
+        'শ্ত'   => 'St',
+        'শ্ন'   => 'Sn',
+        'শ্ম'   => 'Sm',
+        'শ্ল'   => 'Sl',
+        'ষ্ক'   => 'Shk',
+        'ষ্ট'   => 'ShT',
+        'ষ্ণ'   => 'ShN',
+        'ষ্প'   => 'Shp',
+        'ষ্ম'   => 'Shm',
+        'স্প্ল' => 'spl',
+        'স্ক'   => 'sk',
+        'স্ট'   => 'sT',
+        'স্ত'   => 'st',
+        'স্ন'   => 'sn',
+        'স্প'   => 'sp',
+        'স্ম'   => 'sm',
+        'স্ল'   => 'sl',
+        'শ'     => 'S',
+        'ষ'     => 'Sh',
+        'স'     => 's',
+        'ু'     => 'u',
+        'উ'     => 'u',
+        'অ্য'   => 'oZ',
+        'ত্থ'   => 'tth',
+        'ৎ'     => 'tt',
+        'ট্ট'   => 'TT',
+        'ট্ম'   => 'Tm',
+        'ঠ'     => 'Th',
+        'ত্ন'   => 'tn',
+        'ত্ম'   => 'tm',
+        'থ'     => 'th',
+        'ত্ত'   => 'tt',
+        'ট'     => 'T',
+        'ত'     => 't',
+        'অ্যা'  => 'AZ',
+        'া'     => 'a',
+        'আ'     => 'a',
+        'য়া'    => 'ya',
+        'য়'     => 'y',
+        'ি'     => 'i',
+        'ই'     => 'i',
+        'ী'     => 'ee',
+        'ঈ'     => 'ee',
+        'ূ'     => 'uu',
+        'ঊ'     => 'uu',
+        'ে'     => 'e',
+        'এ'     => 'e',
+        'য'     => 'z',
+        '্য'    => 'Z',
+        'ইয়'    => 'y',
+        'ওয়'    => 'w',
+        '্ব'    => 'w',
+        'এক্স'  => 'x',
+        'ঃ'     => ':',
+        'ঁ'     => 'nn',
+        '্‌'    => '',
+    ],
+    // English
+    'en' => [
+    ],
+    // Latin (+ Cyrillic ?) chars
+    //
+    // -> Mix of languages, but we need to keep this here, so that different languages can handle there own behavior.
+    'latin' => [
+        '˚'   => '0',
+        '¹'   => '1',
+        '²'   => '2',
+        '³'   => '3',
+        '⁴'   => '4',
+        '⁵'   => '5',
+        '⁶'   => '6',
+        '⁷'   => '7',
+        '⁸'   => '8',
+        '⁹'   => '9',
+        '₀'   => '0',
+        '₁'   => '1',
+        '₂'   => '2',
+        '₃'   => '3',
+        '₄'   => '4',
+        '₅'   => '5',
+        '₆'   => '6',
+        '₇'   => '7',
+        '₈'   => '8',
+        '₉'   => '9',
+        '௦'   => '0',
+        '௧'   => '1',
+        '௨'   => '2',
+        '௩'   => '3',
+        '௪'   => '4',
+        '௫'   => '5',
+        '௬'   => '6',
+        '௭'   => '7',
+        '௮'   => '8',
+        '௯'   => '9',
+        '௰'   => '10',
+        '௱'   => '100',
+        '௲'   => '1000',
+        'Ꜳ'   => 'AA',
+        'ꜳ'   => 'aa',
+        'Æ'   => 'AE',
+        'æ'   => 'ae',
+        'Ǽ'   => 'AE',
+        'ǽ'   => 'ae',
+        'Ꜵ'   => 'AO',
+        'ꜵ'   => 'ao',
+        'Ꜷ'   => 'AU',
+        'ꜷ'   => 'au',
+        'Ꜹ'   => 'AV',
+        'ꜹ'   => 'av',
+        'Ꜻ'   => 'av',
+        'ꜻ'   => 'av',
+        'Ꜽ'   => 'AY',
+        'ꜽ'   => 'ay',
+        'ȸ'   => 'db',
+        'ʣ'   => 'dz',
+        'ʥ'   => 'dz',
+        'ʤ'   => 'dezh',
+        '🙰'   => 'et',
+        'ﬀ'   => 'ff',
+        'ﬃ'   => 'ffi',
+        'ﬄ'   => 'ffl',
+        'ﬁ'   => 'fi',
+        'ﬂ'   => 'fl',
+        'ʩ'   => 'feng',
+        'Ĳ'   => 'IJ',
+        'ĳ'   => 'ij',
+        'ʪ'   => 'ls',
+        'ʫ'   => 'lz',
+        'ɮ'   => 'lezh',
+        'ȹ'   => 'qp',
+        'ʨ'   => 'tc',
+        'ʦ'   => 'ts',
+        'ʧ'   => 'tesh',
+        'Œ'   => 'OE',
+        'œ'   => 'oe',
+        'Ꝏ'   => 'OO',
+        'ꝏ'   => 'oo',
+        'ẞ'   => 'SS',
+        'ß'   => 'ss',
+        'ﬆ'   => 'st',
+        'ﬅ'   => 'st',
+        'Ꜩ'   => 'TZ',
+        'ꜩ'   => 'tz',
+        'ᵫ'   => 'ue',
+        'Aι'  => 'Ai',
+        'αι'  => 'ai',
+        'Ει'  => 'Ei',
+        'ει'  => 'ei',
+        'Οι'  => 'Oi',
+        'οι'  => 'oi',
+        'Ου'  => 'Oy',
+        'ου'  => 'oy',
+        'Υι'  => 'Yi',
+        'υι'  => 'yi',
+        'ἀ'   => 'a',
+        'ἁ'   => 'a',
+        'ἂ'   => 'a',
+        'ἃ'   => 'a',
+        'ἄ'   => 'a',
+        'ἅ'   => 'a',
+        'ἆ'   => 'a',
+        'ἇ'   => 'a',
+        'Ἀ'   => 'A',
+        'Ἁ'   => 'A',
+        'Ἂ'   => 'A',
+        'Ἃ'   => 'A',
+        'Ἄ'   => 'A',
+        'Ἅ'   => 'A',
+        'Ἆ'   => 'A',
+        'Ἇ'   => 'A',
+        'ᾰ'   => 'a',
+        'ᾱ'   => 'a',
+        'ᾲ'   => 'a',
+        'ᾳ'   => 'a',
+        'ᾴ'   => 'a',
+        'ᾶ'   => 'a',
+        'ᾷ'   => 'a',
+        'Ᾰ'   => 'A',
+        'Ᾱ'   => 'A',
+        'Ὰ'   => 'A',
+        'Ά'   => 'A',
+        'ᾼ'   => 'A',
+        'Ä'   => 'A',
+        'ä'   => 'a',
+        'À'   => 'A',
+        'à'   => 'a',
+        'Á'   => 'A',
+        'á'   => 'a',
+        'Â'   => 'A',
+        'â'   => 'a',
+        'Ã'   => 'A',
+        'ã'   => 'a',
+        'A̧'  => 'A',
+        'a̧'  => 'a',
+        'Ą'   => 'A',
+        'ą'   => 'a',
+        'Ⱥ'   => 'A',
+        'ⱥ'   => 'a',
+        'Å'   => 'A',
+        'å'   => 'a',
+        'Ǻ'   => 'A',
+        'ǻ'   => 'a',
+        'Ă'   => 'A',
+        'ă'   => 'a',
+        'Ǎ'   => 'A',
+        'ǎ'   => 'a',
+        'Ȧ'   => 'A',
+        'ȧ'   => 'a',
+        'Ạ'   => 'A',
+        'ạ'   => 'a',
+        'Ā'   => 'A',
+        'ā'   => 'a',
+        'ª'   => 'a',
+        'Ɓ'   => 'B',
+        'Ѣ'   => 'E',
+        'ѣ'   => 'e',
+        'Ç'   => 'C',
+        'ç'   => 'c',
+        'Ĉ'   => 'C',
+        'ĉ'   => 'c',
+        'C̈'  => 'C',
+        'c̈'  => 'c',
+        'C̨'  => 'C',
+        'c̨'  => 'c',
+        'Ȼ'   => 'C',
+        'ȼ'   => 'c',
+        'Č'   => 'C',
+        'č'   => 'c',
+        'Ć'   => 'C',
+        'ć'   => 'c',
+        'C̀'  => 'C',
+        'c̀'  => 'c',
+        'Ċ'   => 'C',
+        'ċ'   => 'c',
+        'C̣'  => 'C',
+        'c̣'  => 'c',
+        'C̄'  => 'C',
+        'c̄'  => 'c',
+        'C̃'  => 'C',
+        'c̃'  => 'c',
+        'Ð'   => 'D',
+        'Đ'   => 'D',
+        'ð'   => 'd',
+        'đ'   => 'd',
+        'È'   => 'E',
+        'É'   => 'E',
+        'Ê'   => 'E',
+        'Ë'   => 'E',
+        'Ĕ'   => 'E',
+        'Ė'   => 'E',
+        'Ȩ'   => 'E',
+        'ȩ'   => 'e',
+        'Ę'   => 'E',
+        'ę'   => 'e',
+        'Ɇ'   => 'E',
+        'ɇ'   => 'e',
+        'Ě'   => 'E',
+        'ě'   => 'e',
+        'Ẹ'   => 'E',
+        'ẹ'   => 'e',
+        'Ē'   => 'E',
+        'ē'   => 'e',
+        'Ẽ'   => 'E',
+        'ẽ'   => 'e',
+        'è'   => 'e',
+        'é'   => 'e',
+        'ê'   => 'e',
+        'ë'   => 'e',
+        'ĕ'   => 'e',
+        'ė'   => 'e',
+        'ƒ'   => 'f',
+        'Ѳ'   => 'F',
+        'ѳ'   => 'f',
+        'Ĝ'   => 'G',
+        'Ġ'   => 'G',
+        'ĝ'   => 'g',
+        'ġ'   => 'g',
+        'Ĥ'   => 'H',
+        'Ħ'   => 'H',
+        'ĥ'   => 'h',
+        'ħ'   => 'h',
+        'Ì'   => 'I',
+        'Í'   => 'I',
+        'Î'   => 'I',
+        'Ï'   => 'I',
+        'Ĩ'   => 'I',
+        'Ĭ'   => 'I',
+        'Ǐ'   => 'I',
+        'Į'   => 'I',
+        'ì'   => 'i',
+        'í'   => 'i',
+        'î'   => 'i',
+        'ï'   => 'i',
+        'ĩ'   => 'i',
+        'ĭ'   => 'i',
+        'ǐ'   => 'i',
+        'į'   => 'i',
+        'І'   => 'I',
+        'і'   => 'i',
+        'I̧'  => 'I',
+        'i̧'  => 'i',
+        'Ɨ'   => 'I',
+        'ɨ'   => 'i',
+        'İ'   => 'I',
+        'i'   => 'i',
+        'Ị'   => 'I',
+        'ị'   => 'i',
+        'Ī'   => 'I',
+        'ī'   => 'i',
+        'Ĵ'   => 'J',
+        'ĵ'   => 'j',
+        'J́́' => 'J',
+        'j́'  => 'j',
+        'J̀̀' => 'J',
+        'j̀'  => 'j',
+        'J̈'  => 'J',
+        'j̈'  => 'j',
+        'J̧'  => 'J',
+        'j̧'  => 'j',
+        'J̨'  => 'J',
+        'j̨'  => 'j',
+        'Ɉ'   => 'J',
+        'ɉ'   => 'j',
+        'J̌'  => 'J',
+        'ǰ'   => 'j',
+        'J̇'  => 'J',
+        'j'   => 'j',
+        'J̣'  => 'J',
+        'j̣'  => 'j',
+        'J̄'  => 'J',
+        'j̄'  => 'j',
+        'J̃'  => 'J',
+        'j̃'  => 'j',
+        'Й' => 'i',
+        'й' => 'i',
+        'ĸ'   => 'k',
+        'Ĺ'   => 'L',
+        'Ľ'   => 'L',
+        'Ŀ'   => 'L',
+        'ĺ'   => 'l',
+        'ľ'   => 'l',
+        'ŀ'   => 'l',
+        'L̀'  => 'L',
+        'l̀'  => 'l',
+        'L̂'  => 'L',
+        'l̂'  => 'l',
+        'L̈'  => 'L',
+        'l̈'  => 'l',
+        'Ļ'   => 'L',
+        'ļ'   => 'l',
+        'L̨'  => 'L',
+        'l̨'  => 'l',
+        'Ł'   => 'L',
+        'ł'   => 'l',
+        'Ƚ'   => 'L',
+        'ƚ'   => 'l',
+        'L̇'  => 'L',
+        'l̇'  => 'l',
+        'Ḷ'   => 'L',
+        'ḷ'   => 'l',
+        'L̄'  => 'L',
+        'l̄'  => 'l',
+        'L̃'  => 'L',
+        'l̃'  => 'l',
+        'Ñ'   => 'N',
+        'ñ'   => 'n',
+        'Ŋ'   => 'N',
+        'ŋ'   => 'n',
+        'ŉ'   => 'n',
+        'Ń'   => 'N',
+        'ń'   => 'n',
+        'Ǹ'   => 'N',
+        'ǹ'   => 'n',
+        'N̂'  => 'N',
+        'n̂'  => 'n',
+        'N̈'  => 'N',
+        'n̈'  => 'n',
+        'Ņ'   => 'N',
+        'ņ'   => 'n',
+        'N̨'  => 'N',
+        'n̨'  => 'n',
+        'Ꞥ'   => 'N',
+        'ꞥ'   => 'n',
+        'Ň'   => 'N',
+        'ň'   => 'n',
+        'Ṅ'   => 'N',
+        'ṅ'   => 'n',
+        'Ṇ'   => 'N',
+        'ṇ'   => 'n',
+        'N̄'  => 'N',
+        'n̄'  => 'n',
+        'Ö'   => 'O',
+        'Ò'   => 'O',
+        'Ó'   => 'O',
+        'Ô'   => 'O',
+        'Õ'   => 'O',
+        'Ō'   => 'O',
+        'Ŏ'   => 'O',
+        'Ǒ'   => 'O',
+        'Ő'   => 'O',
+        'Ơ'   => 'O',
+        'Ø'   => 'O',
+        'Ǿ'   => 'O',
+        'ö'   => 'o',
+        'ò'   => 'o',
+        'ó'   => 'o',
+        'ô'   => 'o',
+        'õ'   => 'o',
+        'ō'   => 'o',
+        'ŏ'   => 'o',
+        'ǒ'   => 'o',
+        'ő'   => 'o',
+        'ơ'   => 'o',
+        'ø'   => 'o',
+        'ǿ'   => 'o',
+        'º'   => 'o',
+        'O̧'  => 'O',
+        'o̧'  => 'o',
+        'Ǫ'   => 'O',
+        'ǫ'   => 'o',
+        'Ɵ'   => 'O',
+        'ɵ'   => 'o',
+        'Ȯ'   => 'O',
+        'ȯ'   => 'o',
+        'Ọ'   => 'O',
+        'ọ'   => 'o',
+        'Ŕ'   => 'R',
+        'Ŗ'   => 'R',
+        'ŕ'   => 'r',
+        'ŗ'   => 'r',
+        'Ŝ'   => 'S',
+        'Ș'   => 'S',
+        'ș'   => 's',
+        'Ś'   => 'S',
+        'ś'   => 's',
+        'S̀'  => 'S',
+        's̀'  => 's',
+        'Ŝ̀'  => 'S',
+        'ŝ'   => 's',
+        'S̈'  => 'S',
+        's̈'  => 's',
+        'Ş'   => 'S',
+        'ş'   => 's',
+        'S̨'  => 'S',
+        's̨'  => 's',
+        'Ꞩ'   => 'S',
+        'ꞩ'   => 's',
+        'Š'   => 'S',
+        'š'   => 's',
+        'Ṡ'   => 'S',
+        'ṡ'   => 's',
+        'Ṣ'   => 'S',
+        'ṣ'   => 's',
+        'S̄'  => 'S',
+        's̄'  => 's',
+        'S̃'  => 'S',
+        's̃'  => 's',
+        'ſ'   => 's',
+        'Ţ'   => 'T',
+        'Ț'   => 'T',
+        'Ŧ'   => 'T',
+        'Þ'   => 'TH',
+        'ţ'   => 't',
+        'ț'   => 't',
+        'ŧ'   => 't',
+        'þ'   => 'th',
+        'T́'  => 'T',
+        't́'  => 't',
+        'T̀'  => 'T',
+        't̀'  => 't',
+        'T̂'  => 'T',
+        't̂'  => 't',
+        'T̈'  => 'T',
+        'ẗ'   => 't',
+        'T̨'  => 'T',
+        't̨'  => 't',
+        'Ⱦ'   => 'T',
+        'ⱦ'   => 't',
+        'Ť'   => 'T',
+        'ť'   => 't',
+        'Ṫ'   => 'T',
+        'ṫ'   => 't',
+        'Ṭ'   => 'T',
+        'ṭ'   => 't',
+        'T̄'  => 'T',
+        't̄'  => 't',
+        'T̃'  => 'T',
+        't̃'  => 't',
+        'Ü'   => 'U',
+        'Ù'   => 'U',
+        'Ú'   => 'U',
+        'Û'   => 'U',
+        'Ũ'   => 'U',
+        'Ŭ'   => 'U',
+        'Ű'   => 'U',
+        'Ų'   => 'U',
+        'Ư'   => 'U',
+        'Ǔ'   => 'U',
+        'Ǖ'   => 'U',
+        'Ǘ'   => 'U',
+        'Ǚ'   => 'U',
+        'Ǜ'   => 'U',
+        'ü'   => 'u',
+        'ù'   => 'u',
+        'ú'   => 'u',
+        'û'   => 'u',
+        'ũ'   => 'u',
+        'ŭ'   => 'u',
+        'ű'   => 'u',
+        'ų'   => 'u',
+        'ư'   => 'u',
+        'ǔ'   => 'u',
+        'ǖ'   => 'u',
+        'ǘ'   => 'u',
+        'ǚ'   => 'u',
+        'ǜ'   => 'u',
+        'U̧'  => 'U',
+        'u̧'  => 'u',
+        'Ʉ'   => 'U',
+        'ʉ'   => 'u',
+        'U̇'  => 'U',
+        'u̇'  => 'u',
+        'Ụ'   => 'U',
+        'ụ'   => 'u',
+        'Ū'   => 'U',
+        'ū'   => 'u',
+        'Ʊ'   => 'U',
+        'ʊ'   => 'u',
+        'Ŵ'   => 'W',
+        'ŵ'   => 'w',
+        'Ẁ'   => 'W',
+        'ẁ'   => 'w',
+        'Ẃ'   => 'W',
+        'ẃ'   => 'w',
+        'Ẅ'   => 'W',
+        'ẅ'   => 'w',
+        'Ѵ'   => 'I',
+        'ѵ'   => 'i',
+        'Ꙗ'   => 'Ja',
+        'ꙗ'   => 'ja',
+        'Є'   => 'Je',
+        'є'   => 'je',
+        'Ѥ'   => 'Je',
+        'ѥ'   => 'je',
+        'Ѕ'   => 'Dz',
+        'ѕ'   => 'dz',
+        'Ꙋ'   => 'U',
+        'ꙋ'   => 'u',
+        'Ѡ'   => 'O',
+        'ѡ'   => 'o',
+        'Ѿ'   => 'Ot',
+        'ѿ'   => 'ot',
+        'Ѫ'   => 'U',
+        'ѫ'   => 'u',
+        'Ѧ'   => 'Ja',
+        'ѧ'   => 'ja',
+        'Ѭ'   => 'Ju',
+        'ѭ'   => 'ju',
+        'Ѩ'   => 'Ja',
+        'ѩ'   => 'Ja',
+        'Ѯ'   => 'Ks',
+        'ѯ'   => 'ks',
+        'Ѱ'   => 'Ps',
+        'ѱ'   => 'ps',
+        'Х'   => 'X',
+        'х'   => 'x',
+        'Ý'   => 'Y',
+        'Ÿ'   => 'Y',
+        'Ŷ'   => 'Y',
+        'ý'   => 'y',
+        'ÿ'   => 'y',
+        'ŷ'   => 'y',
+        'Ỳ'   => 'Y',
+        'ỳ'   => 'y',
+        'Y̧'  => 'Y',
+        'y̧'  => 'y',
+        'Y̨'  => 'Y',
+        'y̨'  => 'y',
+        'Ɏ'   => 'Y',
+        'ɏ'   => 'y',
+        'Y̌'  => 'Y',
+        'y̌'  => 'y',
+        'Ẏ'   => 'Y',
+        'ẏ'   => 'y',
+        'Ỵ'   => 'Y',
+        'ỵ'   => 'y',
+        'Ȳ'   => 'Y',
+        'ȳ'   => 'y',
+        'Ỹ'   => 'Y',
+        'ỹ'   => 'y',
+        'Щ' => 'Shh',
+        'щ' => 'shh',
+        'Ź'   => 'Z',
+        'ź'   => 'z',
+        'Z̀'  => 'Z',
+        'z̀'  => 'z',
+        'Ẑ'   => 'Z',
+        'ẑ'   => 'z',
+        'Z̈'  => 'Z',
+        'z̈'  => 'z',
+        'Z̧'  => 'Z',
+        'z̧'  => 'z',
+        'Z̨'  => 'Z',
+        'z̨'  => 'z',
+        'Ƶ'   => 'Z',
+        'ƶ'   => 'z',
+        'Ž'   => 'Z',
+        'ž'   => 'z',
+        'Ż'   => 'Z',
+        'ż'   => 'z',
+        'Ẓ'   => 'Z',
+        'ẓ'   => 'z',
+        'Z̄'  => 'Z',
+        'z̄'  => 'z',
+        'Z̃'  => 'Z',
+        'z̃'  => 'z',
+    ],
+    // whitespace chars
+    ' ' => [
+        "\xc2\xa0"     => ' ', // 'NO-BREAK SPACE'
+        "\xe1\x9a\x80" => ' ', // 'OGHAM SPACE MARK'
+        "\xe2\x80\x80" => ' ', // 'EN QUAD'
+        "\xe2\x80\x81" => ' ', // 'EM QUAD'
+        "\xe2\x80\x82" => ' ', // 'EN SPACE'
+        "\xe2\x80\x83" => ' ', // 'EM SPACE'
+        "\xe2\x80\x84" => ' ', // 'THREE-PER-EM SPACE'
+        "\xe2\x80\x85" => ' ', // 'FOUR-PER-EM SPACE'
+        "\xe2\x80\x86" => ' ', // 'SIX-PER-EM SPACE'
+        "\xe2\x80\x87" => ' ', // 'FIGURE SPACE'
+        "\xe2\x80\x88" => ' ', // 'PUNCTUATION SPACE'
+        "\xe2\x80\x89" => ' ', // 'THIN SPACE'
+        "\xe2\x80\x8a" => ' ', // 'HAIR SPACE'
+        "\xe2\x80\xa8" => ' ', // 'LINE SEPARATOR'
+        "\xe2\x80\xa9" => ' ', // 'PARAGRAPH SEPARATOR'
+        "\xe2\x80\x8b" => ' ', // 'ZERO WIDTH SPACE'
+        "\xe2\x80\xaf" => ' ', // 'NARROW NO-BREAK SPACE'
+        "\xe2\x81\x9f" => ' ', // 'MEDIUM MATHEMATICAL SPACE'
+        "\xe3\x80\x80" => ' ', // 'IDEOGRAPHIC SPACE'
+        "\xef\xbe\xa0" => ' ', // 'HALFWIDTH HANGUL FILLER'
+    ],
+    // commonly used in Word documents
+    'msword' => [
+        "\xc2\xab"     => '<<', // « (U+00AB) in UTF-8
+        "\xc2\xbb"     => '>>', // » (U+00BB) in UTF-8
+        "\xe2\x80\x98" => "'", // ‘ (U+2018) in UTF-8
+        "\xe2\x80\x99" => "'", // ’ (U+2019) in UTF-8
+        "\xe2\x80\x9a" => "'", // ‚ (U+201A) in UTF-8
+        "\xe2\x80\x9b" => "'", // ‛ (U+201B) in UTF-8
+        "\xe2\x80\x9c" => '"', // “ (U+201C) in UTF-8
+        "\xe2\x80\x9d" => '"', // ” (U+201D) in UTF-8
+        "\xe2\x80\x9e" => '"', // „ (U+201E) in UTF-8
+        "\xe2\x80\x9f" => '"', // ‟ (U+201F) in UTF-8
+        "\xe2\x80\xb9" => "'", // ‹ (U+2039) in UTF-8
+        "\xe2\x80\xba" => "'", // › (U+203A) in UTF-8
+        "\xe2\x80\x93" => '-', // – (U+2013) in UTF-8
+        "\xe2\x80\x94" => '-', // — (U+2014) in UTF-8
+        "\xe2\x80\xa6" => '...', // … (U+2026) in UTF-8
+    ],
+    // Currency
+    //
+    // url => https://en.wikipedia.org/wiki/Currency_symbol
+    'currency_short' => [
+        '€'  => 'EUR',
+        '$'  => '$',
+        '₢'  => 'Cr',
+        '₣'  => 'Fr.',
+        '£'  => 'PS',
+        '₤'  => 'L.',
+        'ℳ'  => 'M',
+        '₥'  => 'mil',
+        '₦'  => 'N',
+        '₧'  => 'Pts',
+        '₨'  => 'Rs',
+        'රු' => 'LKR',
+        'ரூ' => 'LKR',
+        '௹'  => 'Rs',
+        'रू' => 'NPR',
+        '₹'  => 'Rs',
+        '૱'  => 'Rs',
+        '₩'  => 'W',
+        '₪'  => 'NS',
+        '₸'  => 'KZT',
+        '₫'  => 'D',
+        '֏'  => 'AMD',
+        '₭'  => 'K',
+        '₺'  => 'TL',
+        '₼'  => 'AZN',
+        '₮'  => 'T',
+        '₯'  => 'Dr',
+        '₲'  => 'PYG',
+        '₾'  => 'GEL',
+        '₳'  => 'ARA',
+        '₴'  => 'UAH',
+        '₽'  => 'RUB',
+        '₵'  => 'GHS',
+        '₡'  => 'CL',
+        '¢'  => 'c',
+        '¥'  => 'YEN',
+        '円'  => 'JPY',
+        '৳'  => 'BDT',
+        '元'  => 'CNY',
+        '﷼'  => 'SAR',
+        '៛'  => 'KR',
+        '₠'  => 'ECU',
+        '¤'  => '$?',
+        '฿'  => 'THB',
+        '؋'  => 'AFN',
+    ],
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_extras_by_languages.php b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_extras_by_languages.php
new file mode 100644
index 000000000..afe31ae2c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_extras_by_languages.php
@@ -0,0 +1,759 @@
+<?php
+
+return [
+    // Dutch (Flemish)
+    'nl' => [
+        '=' => ' gelijk ',
+        '%' => ' procent ',
+        '∑' => ' som ',
+        '∆' => ' delta ',
+        '∞' => ' oneindig ',
+        '♥' => ' love ',
+        '&' => ' en ',
+        '+' => ' plus ',
+    ],
+    // Italian
+    'it' => [
+        '=' => ' uguale ',
+        '%' => ' percent ',
+        '∑' => ' somma ',
+        '∆' => ' delta ',
+        '∞' => ' infinito ',
+        '♥' => ' amore ',
+        '&' => ' e ',
+        '+' => ' piu ',
+    ],
+    // Macedonian
+    'mk' => [
+        '=' => ' ednakva ',
+        '%' => ' procenti ',
+        '∑' => ' zbir ',
+        '∆' => ' delta ',
+        '∞' => ' beskonecnost ',
+        '♥' => ' loveubov ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Portuguese (Brazil)
+    'pt' => [
+        '=' => ' igual ',
+        '%' => ' por cento ',
+        '∑' => ' soma ',
+        '∆' => ' delta ',
+        '∞' => ' infinito ',
+        '♥' => ' amor ',
+        '&' => ' e ',
+        '+' => ' mais ',
+    ],
+    // Greek(lish) (Elláda)
+    'el__greeklish' => [
+        '=' => ' isos ',
+        '%' => ' tois ekato ',
+        '∑' => ' athroisma ',
+        '∆' => ' delta ',
+        '∞' => ' apeiro ',
+        '♥' => ' agape ',
+        '&' => ' kai ',
+        '+' => ' syn ',
+    ],
+    // Greek (Elláda)
+    'el' => [
+        '=' => ' isos ',
+        '%' => ' tois ekato ',
+        '∑' => ' athroisma ',
+        '∆' => ' delta ',
+        '∞' => ' apeiro ',
+        '♥' => ' agape ',
+        '&' => ' kai ',
+        '+' => ' syn ',
+    ],
+    // Hindi
+    'hi' => [
+        '=' => ' samana ',
+        '%' => ' paratisata ',
+        '∑' => ' yoga ',
+        '∆' => ' dalata ',
+        '∞' => ' anata ',
+        '♥' => ' payara ',
+        '&' => ' aura ',
+        '+' => ' palasa ',
+    ],
+    // Armenian
+    'hy' => [
+        '=' => ' havasar ',
+        '%' => ' tvokvos ',
+        '∑' => ' gvoumar ',
+        '∆' => ' delta ',
+        '∞' => ' ansahmanvouthyvoun ',
+        '♥' => ' ser ',
+        '&' => ' ev ',
+        '+' => ' gvoumarats ',
+    ],
+    // Swedish
+    'sv' => [
+        '=' => ' lika ',
+        '%' => ' procent ',
+        '∑' => ' summa ',
+        '∆' => ' delta ',
+        '∞' => ' oandlighet ',
+        '♥' => ' alskar ',
+        '&' => ' och ',
+        '+' => ' plus ',
+    ],
+    // Turkmen
+    'tk' => [
+        '=' => ' den ',
+        '%' => ' yuzde ',
+        '∑' => ' jem ',
+        '∆' => ' delta ',
+        '∞' => ' mudimilik ',
+        '♥' => ' soygi ',
+        '&' => ' we ',
+        '+' => ' yzy ',
+    ],
+    // Turkish
+    'tr' => [
+        '=' => ' esit ',
+        '%' => ' yuzde ',
+        '∑' => ' Toplam ',
+        '∆' => ' delta ',
+        '∞' => ' sonsuzluk ',
+        '♥' => ' ask ',
+        '&' => ' ve ',
+        '+' => ' arti ',
+    ],
+    // Bulgarian
+    'bg' => [
+        '=' => ' raven ',
+        '%' => ' na sto ',
+        '∑' => ' suma ',
+        '∆' => ' delta ',
+        '∞' => ' bezkrajnost ',
+        '♥' => ' obicam ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Hungarian
+    'hu' => [
+        '=' => ' Egyenlo ',
+        '%' => ' Szazalek ',
+        '∑' => ' osszeg ',
+        '∆' => ' delta ',
+        '∞' => ' vegtelenitett ',
+        '♥' => ' love ',
+        '&' => ' Es ',
+        '+' => ' Plusz ',
+    ],
+    // Myanmar (Burmese)
+    'my' => [
+        '=' => ' ttn:ttnnym? ',
+        '%' => ' raakhngnn:k ',
+        '∑' => ' ld ',
+        '∆' => ' m?cwk?n:pe? ',
+        '∞' => ' ach:m ',
+        '♥' => ' mettttaa ',
+        '&' => ' n ',
+        '+' => ' ape?ng: ',
+    ],
+    // Croatian (Hrvatska)
+    'hr' => [
+        '=' => ' Jednaki ',
+        '%' => ' Posto ',
+        '∑' => ' zbroj ',
+        '∆' => ' Delta ',
+        '∞' => ' beskonacno ',
+        '♥' => ' ljubav ',
+        '&' => ' I ',
+        '+' => ' Plus ',
+    ],
+    // Finnish
+    'fi' => [
+        '=' => ' Sama ',
+        '%' => ' Prosenttia ',
+        '∑' => ' sum ',
+        '∆' => ' delta ',
+        '∞' => ' aareton ',
+        '♥' => ' rakkautta ',
+        '&' => ' Ja ',
+        '+' => ' Plus ',
+    ],
+    // Georgian (Kartvelian)
+    'ka' => [
+        '=' => ' tanasts\'ori ',
+        '%' => ' p\'rotsent\'i ',
+        '∑' => ' tankha ',
+        '∆' => ' delt\'a ',
+        '∞' => ' usasrulo ',
+        '♥' => ' siq\'varuli ',
+        '&' => ' da ',
+        '+' => ' p\'lus ',
+    ],
+    // Russian
+    'ru' => [
+        '=' => ' ravnyj ',
+        '%' => ' procent ',
+        '∑' => ' summa ',
+        '∆' => ' del\'ta ',
+        '∞' => ' beskonecnost\' ',
+        '♥' => ' lublu ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Russian - GOST 7.79-2000(B)
+    'ru__gost_2000_b' => [
+        '=' => ' ravnyj ',
+        '%' => ' procent ',
+        '∑' => ' summa ',
+        '∆' => ' del\'ta ',
+        '∞' => ' beskonecnost\' ',
+        '♥' => ' lublu ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Russian - Passport (2013), ICAO
+    'ru__passport_2013' => [
+        '=' => ' ravnyj ',
+        '%' => ' procent ',
+        '∑' => ' summa ',
+        '∆' => ' del\'ta ',
+        '∞' => ' beskonecnost\' ',
+        '♥' => ' lublu ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Ukrainian
+    'uk' => [
+        '=' => ' rivnij ',
+        '%' => ' vidsotkiv ',
+        '∑' => ' suma ',
+        '∆' => ' del\'ta ',
+        '∞' => ' neskincennist\' ',
+        '♥' => ' lubov ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Kazakh
+    'kk' => [
+        '=' => ' ten\' ',
+        '%' => ' Pajyzdar ',
+        '∑' => ' zalpy ',
+        '∆' => ' ajyrmasylyk, ',
+        '∞' => ' seksiz ',
+        '♥' => ' mahabbat ',
+        '&' => ' z@ne ',
+        '+' => ' plus ',
+    ],
+    // Czech
+    'cs' => [
+        '=' => ' rovnat se ',
+        '%' => ' procento ',
+        '∑' => ' soucet ',
+        '∆' => ' delta ',
+        '∞' => ' nekonecno ',
+        '♥' => ' laska ',
+        '&' => ' a ',
+        '+' => ' plus ',
+    ],
+    // Danish
+    'da' => [
+        '=' => ' Lige ',
+        '%' => ' Prozent ',
+        '∑' => ' sum ',
+        '∆' => ' delta ',
+        '∞' => ' uendelig ',
+        '♥' => ' kaerlighed ',
+        '&' => ' Og ',
+        '+' => ' Plus ',
+    ],
+    // Polish
+    'pl' => [
+        '=' => ' rowny ',
+        '%' => ' procent ',
+        '∑' => ' suma ',
+        '∆' => ' delta ',
+        '∞' => ' nieskonczonosc ',
+        '♥' => ' milosc ',
+        '&' => ' i ',
+        '+' => ' plus ',
+    ],
+    // Romanian
+    'ro' => [
+        '=' => ' egal ',
+        '%' => ' la suta ',
+        '∑' => ' suma ',
+        '∆' => ' delta ',
+        '∞' => ' infinit ',
+        '♥' => ' dragoste ',
+        '&' => ' si ',
+        '+' => ' la care se adauga ',
+    ],
+    // Esperanto
+    'eo' => [
+        '=' => ' Egalaj ',
+        '%' => ' Procento ',
+        '∑' => ' sumo ',
+        '∆' => ' delto ',
+        '∞' => ' senfina ',
+        '♥' => ' amo ',
+        '&' => ' Kaj ',
+        '+' => ' Pli ',
+    ],
+    // Estonian
+    'et' => [
+        '=' => ' Vordsed ',
+        '%' => ' Protsenti ',
+        '∑' => ' summa ',
+        '∆' => ' o ',
+        '∞' => ' loputut ',
+        '♥' => ' armastus ',
+        '&' => ' Ja ',
+        '+' => ' Pluss ',
+    ],
+    // Latvian
+    'lv' => [
+        '=' => ' vienads ',
+        '%' => ' procents ',
+        '∑' => ' summa ',
+        '∆' => ' delta ',
+        '∞' => ' bezgaliba ',
+        '♥' => ' milestiba ',
+        '&' => ' un ',
+        '+' => ' pluss ',
+    ],
+    // Lithuanian
+    'lt' => [
+        '=' => ' lygus ',
+        '%' => ' procentu ',
+        '∑' => ' suma ',
+        '∆' => ' delta ',
+        '∞' => ' begalybe ',
+        '♥' => ' meile ',
+        '&' => ' ir ',
+        '+' => ' plius ',
+    ],
+    // Norwegian
+    'no' => [
+        '=' => ' Lik ',
+        '%' => ' Prosent ',
+        '∑' => ' sum ',
+        '∆' => ' delta ',
+        '∞' => ' uendelig ',
+        '♥' => ' kjaerlighet ',
+        '&' => ' Og ',
+        '+' => ' Pluss ',
+    ],
+    // Vietnamese
+    'vi' => [
+        '=' => ' cong bang ',
+        '%' => ' phan tram ',
+        '∑' => ' tong so ',
+        '∆' => ' dong bang ',
+        '∞' => ' vo cuc ',
+        '♥' => ' Yeu ',
+        '&' => ' va ',
+        '+' => ' them ',
+    ],
+    // Arabic
+    'ar' => [
+        '=' => ' mtsawy ',
+        '%' => ' nsbh mywyh ',
+        '∑' => ' mjmw\' ',
+        '∆' => ' dlta ',
+        '∞' => ' ma la nhayt ',
+        '♥' => ' hb ',
+        '&' => ' w ',
+        '+' => ' zayd ',
+    ],
+    // Persian (Farsi)
+    'fa' => [
+        '=' => ' brabr ',
+        '%' => ' dr sd ',
+        '∑' => ' mjmw\' ',
+        '∆' => ' dlta ',
+        '∞' => ' by nhayt ',
+        '♥' => ' \'shq ',
+        '&' => ' w ',
+        '+' => ' bh \'lawh ',
+    ],
+    // Serbian
+    'sr' => [
+        '=' => ' jednak ',
+        '%' => ' procenat ',
+        '∑' => ' zbir ',
+        '∆' => ' delta ',
+        '∞' => ' beskraj ',
+        '♥' => ' lubav ',
+        '&' => ' i ',
+        '+' => ' vise ',
+    ],
+    // Serbian - Cyrillic
+    'sr__cyr' => [
+        '=' => ' jednak ',
+        '%' => ' procenat ',
+        '∑' => ' zbir ',
+        '∆' => ' delta ',
+        '∞' => ' beskraj ',
+        '♥' => ' lubav ',
+        '&' => ' i ',
+        '+' => ' vise ',
+    ],
+    // Serbian - Latin
+    'sr__lat' => [
+        '=' => ' jednak ',
+        '%' => ' procenat ',
+        '∑' => ' zbir ',
+        '∆' => ' delta ',
+        '∞' => ' beskraj ',
+        '♥' => ' lubav ',
+        '&' => ' i ',
+        '+' => ' vise ',
+    ],
+    // Azerbaijani
+    'az' => [
+        '=' => ' b@rab@r ',
+        '%' => ' faiz ',
+        '∑' => ' m@bl@g ',
+        '∆' => ' delta ',
+        '∞' => ' sonsuzluq ',
+        '♥' => ' sevgi ',
+        '&' => ' v@ ',
+        '+' => ' plus ',
+    ],
+    // Slovak
+    'sk' => [
+        '=' => ' rovny ',
+        '%' => ' percento ',
+        '∑' => ' sucet ',
+        '∆' => ' delta ',
+        '∞' => ' infinity ',
+        '♥' => ' milovat ',
+        '&' => ' a ',
+        '+' => ' viac ',
+    ],
+    // French
+    'fr' => [
+        '=' => ' Egal ',
+        '%' => ' Pourcentage ',
+        '∑' => ' somme ',
+        '∆' => ' delta ',
+        '∞' => ' infini ',
+        '♥' => ' amour ',
+        '&' => ' Et ',
+        '+' => ' Plus ',
+    ],
+    // Austrian (French)
+    'fr_at' => [
+        '=' => ' Egal ',
+        '%' => ' Pourcentage ',
+        '∑' => ' somme ',
+        '∆' => ' delta ',
+        '∞' => ' infini ',
+        '♥' => ' amour ',
+        '&' => ' Et ',
+        '+' => ' Plus ',
+    ],
+    // Switzerland (French)
+    'fr_ch' => [
+        '=' => ' Egal ',
+        '%' => ' Pourcentage ',
+        '∑' => ' somme ',
+        '∆' => ' delta ',
+        '∞' => ' infini ',
+        '♥' => ' amour ',
+        '&' => ' Et ',
+        '+' => ' Plus ',
+    ],
+    // German
+    'de' => [
+        '=' => ' gleich ',
+        '%' => ' Prozent ',
+        '∑' => ' gesamt ',
+        '∆' => ' Unterschied ',
+        '∞' => ' undendlich ',
+        '♥' => ' liebe ',
+        '&' => ' und ',
+        '+' => ' plus ',
+    ],
+    // Austrian (German)
+    'de_at' => [
+        '=' => ' gleich ',
+        '%' => ' Prozent ',
+        '∑' => ' gesamt ',
+        '∆' => ' Unterschied ',
+        '∞' => ' undendlich ',
+        '♥' => ' liebe ',
+        '&' => ' und ',
+        '+' => ' plus ',
+    ],
+    // Switzerland (German)
+    'de_ch' => [
+        '=' => ' gleich ',
+        '%' => ' Prozent ',
+        '∑' => ' gesamt ',
+        '∆' => ' Unterschied ',
+        '∞' => ' undendlich ',
+        '♥' => ' liebe ',
+        '&' => ' und ',
+        '+' => ' plus ',
+    ],
+    // Bengali (Bangla)
+    'bn' => [
+        '=' => ' Saman ',
+        '%' => ' Satakora ',
+        '∑' => ' Samasti ',
+        '∆' => ' Badhip ',
+        '∞' => ' Ananta ',
+        '♥' => ' Valobasa ',
+        '&' => ' Abong ',
+        '+' => ' Songzojon ',
+    ],
+    // English
+    'en' => [
+        '=' => ' equal ',
+        '%' => ' percent ',
+        '∑' => ' sum ',
+        '∆' => ' delta ',
+        '∞' => ' infinity ',
+        '♥' => ' love ',
+        '&' => ' and ',
+        '+' => ' plus ',
+    ],
+    // Currency
+    //
+    // url: https://en.wikipedia.org/wiki/Currency_symbol
+    'currency' => [
+        '€'  => ' Euro ',
+        '$'  => ' Dollar ',
+        '₢'  => ' cruzeiro ',
+        '₣'  => ' French franc ',
+        '£'  => ' pound ',
+        '₤'  => ' lira ', // Italian
+        '₶'  => ' livre tournois ',
+        'ℳ'  => ' mark ',
+        '₥'  => ' mill ',
+        '₦'  => ' naira ',
+        '₧'  => ' peseta ',
+        '₨'  => ' rupee ',
+        'රු' => ' rupee ', // Sri Lankan
+        'ரூ' => ' rupee ', // Sri Lankan
+        '௹'  => ' rupee ', // Tamil
+        'रू' => ' rupee ', // Nepalese
+        '₹'  => ' rupee ', // Indian
+        '૱'  => ' rupee ', // Gujarat
+        '₩'  => ' won ',
+        '₪'  => ' new shequel ',
+        '₸'  => ' tenge ',
+        '₫'  => ' dong ',
+        '֏'  => ' dram ',
+        '₭'  => ' kip ',
+        '₺'  => ' lira ', // Turkish
+        '₼'  => ' manat ',
+        '₮'  => ' tugrik ',
+        '₯'  => ' drachma ',
+        '₰'  => ' pfennig ',
+        '₷'  => ' spesmilo ',
+        '₱'  => ' peso ', // Philippine
+        '﷼‎' => ' riyal ',
+        '₲'  => ' guarani ',
+        '₾'  => ' lari ',
+        '₳'  => ' austral ',
+        '₴'  => ' hryvnia ',
+        '₽'  => ' ruble ',
+        '₵'  => ' cedi ',
+        '₡'  => ' colon ',
+        '¢'  => ' cent ',
+        '¥'  => ' yen ',
+        '円'  => ' yen ',
+        '৳'  => ' taka ',
+        '元'  => ' yuan ',
+        '﷼'  => ' riyal ',
+        '៛'  => ' riel ',
+        '₠'  => ' European Currency ',
+        '¤'  => ' currency ',
+        '฿'  => ' baht ',
+        '؋'  => ' afghani ',
+    ],
+    // Temperature
+    //
+    // url: https://en.wikipedia.org/wiki/Conversion_of_units_of_temperature
+    'temperature' => [
+        '°De' => ' Delisle ',
+        '°Re' => ' Reaumur ', // Réaumur
+        '°Ro' => ' Romer ', // Rømer
+        '°R'  => ' Rankine ',
+        '°C'  => ' Celsius ',
+        '°F'  => ' Fahrenheit ',
+        '°N'  => ' Newton ',
+    ],
+    'latin_symbols' => [
+        '=' => '=',
+        '%' => '%',
+        '∑' => '∑',
+        '∆' => '∆',
+        '∞' => '∞',
+        '♥' => '♥',
+        '&' => '&',
+        '+' => '+',
+        // ---
+        '©' => ' (c) ',
+        '®' => ' (r) ',
+        '@' => ' (at) ',
+        '№' => ' No. ',
+        '℞' => ' Rx ',
+        '［' => '[',
+        '＼' => '\\',
+        '］' => ']',
+        '＾' => '^',
+        '＿' => '_',
+        '｀' => '`',
+        '‐' => '-',
+        '‑' => '-',
+        '‒' => '-',
+        '–' => '-',
+        '−' => '-',
+        '—' => '-',
+        '―' => '-',
+        '﹘' => '-',
+        '│' => '|',
+        '∖' => '\\',
+        '∕' => '/',
+        '⁄' => '/',
+        '￩' => '<-',
+        '￫' => '->',
+        '￪' => '|',
+        '￬' => '|',
+        '⁅' => '[',
+        '⁆' => ']',
+        '⁎' => '*',
+        '、' => ',',
+        '。' => '.',
+        '〈' => '<',
+        '〉' => '>',
+        '《' => '<<',
+        '》' => '>>',
+        '〔' => '[',
+        '〕' => ']',
+        '〘' => '[',
+        '〙' => ']',
+        '〚' => '[',
+        '〛' => ']',
+        '﹝' => '[',
+        '﹞' => ']',
+        '︹' => '[',
+        '︺' => ']',
+        '﹇' => '[',
+        '﹈' => ']',
+        '︐' => ',',
+        '︑' => ',',
+        '︒' => '.',
+        '︓' => ':',
+        '︔' => ';',
+        '︕' => '!',
+        '︖' => '?',
+        '︙' => '...',
+        '︰' => '..',
+        '︵' => '(',
+        '︶' => ')',
+        '﹙' => '(',
+        '﹚' => ')',
+        '︷' => '{',
+        '︸' => '}',
+        '﹛' => '{',
+        '﹜' => '}',
+        '︽' => '<<',
+        '︾' => '>>',
+        '︿' => '<',
+        '﹀' => '>',
+        '×' => '*',
+        '÷' => '/',
+        '≪' => '<<',
+        '≫' => '>>',
+        '⦅' => '((',
+        '⦆' => '))',
+        '〇' => '0',
+        '′' => '\'',
+        '〝' => '"',
+        '〞' => '"',
+        '«' => '<<',
+        '»' => '>>',
+        '‘' => "'",
+        '’' => "'",
+        '‚' => ',',
+        '‛' => "'",
+        '“' => '"',
+        '”' => '"',
+        '„' => '"',
+        '‟' => '"',
+        '‹' => '<',
+        '›' => '>',
+        '․' => '.',
+        '‥' => '..',
+        '…' => '...',
+        '″' => '"',
+        '‴' => '\'\'\'',
+        '‶' => '``',
+        '‷' => '```',
+        '‼' => '!!',
+        '⁇' => '??',
+        '⁈' => '?!',
+        '⁉' => '!?',
+        '⁗' => '````',
+        '⩴' => '::=',
+        '⩵' => '==',
+        '⩶' => '===',
+        '﹔' => ';',
+        '﹕' => ':',
+        '﹖' => '?',
+        '﹗' => '!',
+        '﹍' => '_',
+        '﹎' => '_',
+        '﹏' => '_',
+        '﹐' => ',',
+        '﹑' => ',',
+        '﹒' => '.',
+        '﹟' => '#',
+        '﹠' => '&',
+        '﹡' => '*',
+        '﹢' => '+',
+        '﹣' => '-',
+        '﹤' => '<',
+        '﹥' => '>',
+        '﹦' => '=',
+        '﹨' => '\\',
+        '﹩' => '$',
+        '﹪' => '%',
+        '﹫' => '@',
+        '！' => '!',
+        '＂' => '"',
+        '＃' => '#',
+        '＄' => '$',
+        '％' => '%',
+        '＆' => '&',
+        '＇' => '\'',
+        '（' => '(',
+        '）' => ')',
+        '＊' => '*',
+        '＋' => '+',
+        '，' => ',',
+        '－' => '-',
+        '．' => '.',
+        '／' => '/',
+        '：' => ':',
+        '；' => ';',
+        '＜' => '<',
+        '＝' => '=',
+        '＞' => '>',
+        '？' => '?',
+        '＠' => '@',
+        '｛' => '{',
+        '｜' => '|',
+        '｝' => '}',
+        '～' => '~',
+        '｟' => '((',
+        '｠' => '))',
+        '￢' => '!',
+        '￣' => '-',
+        '￤' => '|',
+        '￭' => '#',
+    ],
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_language_max_key.php b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_language_max_key.php
new file mode 100644
index 000000000..da81ae236
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_language_max_key.php
@@ -0,0 +1,65 @@
+<?php
+
+return [
+    'uz'                => 0,
+    'tk'                => 1,
+    'th'                => 0,
+    'ps'                => 0,
+    'or'                => 0,
+    'mn'                => 0,
+    'ko'                => 0,
+    'ky'                => 0,
+    'hy'                => 1,
+    'bn'                => 5,
+    'be'                => 0,
+    'am'                => 0,
+    'ja'                => 0,
+    'zh'                => 0,
+    'nl'                => 1,
+    'it'                => 1,
+    'mk'                => 1,
+    'pt'                => 1,
+    'el__greeklish'     => 2,
+    'el'                => 2,
+    'hi'                => 2,
+    'sv'                => 1,
+    'tr'                => 1,
+    'bg'                => 2,
+    'hu'                => 1,
+    'my'                => 5,
+    'hr'                => 2,
+    'fi'                => 1,
+    'ka'                => 1,
+    'ru'                => 1,
+    'ru__gost_2000_b'   => 1,
+    'ru__passport_2013' => 1,
+    'uk'                => 1,
+    'kk'                => 1,
+    'cs'                => 1,
+    'da'                => 1,
+    'pl'                => 1,
+    'ro'                => 1,
+    'eo'                => 1,
+    'et'                => 1,
+    'lv'                => 1,
+    'lt'                => 1,
+    'no'                => 1,
+    'vi'                => 1,
+    'ar'                => 1,
+    'fa'                => 1,
+    'sr'                => 1,
+    'sr__cyr'           => 1,
+    'sr__lat'           => 1,
+    'az'                => 1,
+    'sk'                => 1,
+    'fr'                => 1,
+    'fr_at'             => 1,
+    'fr_ch'             => 1,
+    'de'                => 1,
+    'de_at'             => 1,
+    'de_ch'             => 1,
+    'en'                => 0,
+    'latin'             => 3,
+    ' '                 => 1,
+    'msword'            => 1,
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_ord.php b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_ord.php
new file mode 100644
index 000000000..142318c33
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/ascii_ord.php
@@ -0,0 +1 @@
+<?php return ['' => 0, "\x00" => 0, "\x01" => 1, "\x02" => 2, "\x03" => 3, "\x04" => 4, "\x05" => 5, "\x06" => 6, "\x07" => 7, "\x08" => 8, "\x09" => 9, "\x0A" => 10, "\x0B" => 11, "\x0C" => 12, "\x0D" => 13, "\x0E" => 14, "\x0F" => 15, "\x10" => 16, "\x11" => 17, "\x12" => 18, "\x13" => 19, "\x14" => 20, "\x15" => 21, "\x16" => 22, "\x17" => 23, "\x18" => 24, "\x19" => 25, "\x1A" => 26, "\x1B" => 27, "\x1C" => 28, "\x1D" => 29, "\x1E" => 30, "\x1F" => 31, "\x20" => 32, "\x21" => 33, "\x22" => 34, "\x23" => 35, "\x24" => 36, "\x25" => 37, "\x26" => 38, "\x27" => 39, "\x28" => 40, "\x29" => 41, "\x2A" => 42, "\x2B" => 43, "\x2C" => 44, "\x2D" => 45, "\x2E" => 46, "\x2F" => 47, "\x30" => 48, "\x31" => 49, "\x32" => 50, "\x33" => 51, "\x34" => 52, "\x35" => 53, "\x36" => 54, "\x37" => 55, "\x38" => 56, "\x39" => 57, "\x3A" => 58, "\x3B" => 59, "\x3C" => 60, "\x3D" => 61, "\x3E" => 62, "\x3F" => 63, "\x40" => 64, "\x41" => 65, "\x42" => 66, "\x43" => 67, "\x44" => 68, "\x45" => 69, "\x46" => 70, "\x47" => 71, "\x48" => 72, "\x49" => 73, "\x4A" => 74, "\x4B" => 75, "\x4C" => 76, "\x4D" => 77, "\x4E" => 78, "\x4F" => 79, "\x50" => 80, "\x51" => 81, "\x52" => 82, "\x53" => 83, "\x54" => 84, "\x55" => 85, "\x56" => 86, "\x57" => 87, "\x58" => 88, "\x59" => 89, "\x5A" => 90, "\x5B" => 91, "\x5C" => 92, "\x5D" => 93, "\x5E" => 94, "\x5F" => 95, "\x60" => 96, "\x61" => 97, "\x62" => 98, "\x63" => 99, "\x64" => 100, "\x65" => 101, "\x66" => 102, "\x67" => 103, "\x68" => 104, "\x69" => 105, "\x6A" => 106, "\x6B" => 107, "\x6C" => 108, "\x6D" => 109, "\x6E" => 110, "\x6F" => 111, "\x70" => 112, "\x71" => 113, "\x72" => 114, "\x73" => 115, "\x74" => 116, "\x75" => 117, "\x76" => 118, "\x77" => 119, "\x78" => 120, "\x79" => 121, "\x7A" => 122, "\x7B" => 123, "\x7C" => 124, "\x7D" => 125, "\x7E" => 126, "\x7F" => 127, "\x80" => 128, "\x81" => 129, "\x82" => 130, "\x83" => 131, "\x84" => 132, "\x85" => 133, "\x86" => 134, "\x87" => 135, "\x88" => 136, "\x89" => 137, "\x8A" => 138, "\x8B" => 139, "\x8C" => 140, "\x8D" => 141, "\x8E" => 142, "\x8F" => 143, "\x90" => 144, "\x91" => 145, "\x92" => 146, "\x93" => 147, "\x94" => 148, "\x95" => 149, "\x96" => 150, "\x97" => 151, "\x98" => 152, "\x99" => 153, "\x9A" => 154, "\x9B" => 155, "\x9C" => 156, "\x9D" => 157, "\x9E" => 158, "\x9F" => 159, "\xA0" => 160, "\xA1" => 161, "\xA2" => 162, "\xA3" => 163, "\xA4" => 164, "\xA5" => 165, "\xA6" => 166, "\xA7" => 167, "\xA8" => 168, "\xA9" => 169, "\xAA" => 170, "\xAB" => 171, "\xAC" => 172, "\xAD" => 173, "\xAE" => 174, "\xAF" => 175, "\xB0" => 176, "\xB1" => 177, "\xB2" => 178, "\xB3" => 179, "\xB4" => 180, "\xB5" => 181, "\xB6" => 182, "\xB7" => 183, "\xB8" => 184, "\xB9" => 185, "\xBA" => 186, "\xBB" => 187, "\xBC" => 188, "\xBD" => 189, "\xBE" => 190, "\xBF" => 191, "\xC0" => 192, "\xC1" => 193, "\xC2" => 194, "\xC3" => 195, "\xC4" => 196, "\xC5" => 197, "\xC6" => 198, "\xC7" => 199, "\xC8" => 200, "\xC9" => 201, "\xCA" => 202, "\xCB" => 203, "\xCC" => 204, "\xCD" => 205, "\xCE" => 206, "\xCF" => 207, "\xD0" => 208, "\xD1" => 209, "\xD2" => 210, "\xD3" => 211, "\xD4" => 212, "\xD5" => 213, "\xD6" => 214, "\xD7" => 215, "\xD8" => 216, "\xD9" => 217, "\xDA" => 218, "\xDB" => 219, "\xDC" => 220, "\xDD" => 221, "\xDE" => 222, "\xDF" => 223, "\xE0" => 224, "\xE1" => 225, "\xE2" => 226, "\xE3" => 227, "\xE4" => 228, "\xE5" => 229, "\xE6" => 230, "\xE7" => 231, "\xE8" => 232, "\xE9" => 233, "\xEA" => 234, "\xEB" => 235, "\xEC" => 236, "\xED" => 237, "\xEE" => 238, "\xEF" => 239, "\xF0" => 240, "\xF1" => 241, "\xF2" => 242, "\xF3" => 243, "\xF4" => 244, "\xF5" => 245, "\xF6" => 246, "\xF7" => 247, "\xF8" => 248, "\xF9" => 249, "\xFA" => 250, "\xFB" => 251, "\xFC" => 252, "\xFD" => 253, "\xFE" => 254, "\xFF" => 255];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/caseFolding_full.php b/includes/libraries/anti-xss-master/src/voku/helper/data/caseFolding_full.php
new file mode 100644
index 000000000..258104597
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/caseFolding_full.php
@@ -0,0 +1,218 @@
+<?php
+
+return [
+    0 => [
+        0   => 'ß',
+        1   => 'İ',
+        2   => 'ŉ',
+        3   => 'ǰ',
+        4   => 'ΐ',
+        5   => 'ΰ',
+        6   => 'և',
+        7   => 'ẖ',
+        8   => 'ẗ',
+        9   => 'ẘ',
+        10  => 'ẙ',
+        11  => 'ẚ',
+        12  => 'ẞ',
+        13  => 'ὐ',
+        14  => 'ὒ',
+        15  => 'ὔ',
+        16  => 'ὖ',
+        17  => 'ᾀ',
+        18  => 'ᾁ',
+        19  => 'ᾂ',
+        20  => 'ᾃ',
+        21  => 'ᾄ',
+        22  => 'ᾅ',
+        23  => 'ᾆ',
+        24  => 'ᾇ',
+        25  => 'ᾈ',
+        26  => 'ᾉ',
+        27  => 'ᾊ',
+        28  => 'ᾋ',
+        29  => 'ᾌ',
+        30  => 'ᾍ',
+        31  => 'ᾎ',
+        32  => 'ᾏ',
+        33  => 'ᾐ',
+        34  => 'ᾑ',
+        35  => 'ᾒ',
+        36  => 'ᾓ',
+        37  => 'ᾔ',
+        38  => 'ᾕ',
+        39  => 'ᾖ',
+        40  => 'ᾗ',
+        41  => 'ᾘ',
+        42  => 'ᾙ',
+        43  => 'ᾚ',
+        44  => 'ᾛ',
+        45  => 'ᾜ',
+        46  => 'ᾝ',
+        47  => 'ᾞ',
+        48  => 'ᾟ',
+        49  => 'ᾠ',
+        50  => 'ᾡ',
+        51  => 'ᾢ',
+        52  => 'ᾣ',
+        53  => 'ᾤ',
+        54  => 'ᾥ',
+        55  => 'ᾦ',
+        56  => 'ᾧ',
+        57  => 'ᾨ',
+        58  => 'ᾩ',
+        59  => 'ᾪ',
+        60  => 'ᾫ',
+        61  => 'ᾬ',
+        62  => 'ᾭ',
+        63  => 'ᾮ',
+        64  => 'ᾯ',
+        65  => 'ᾲ',
+        66  => 'ᾳ',
+        67  => 'ᾴ',
+        68  => 'ᾶ',
+        69  => 'ᾷ',
+        70  => 'ᾼ',
+        71  => 'ῂ',
+        72  => 'ῃ',
+        73  => 'ῄ',
+        74  => 'ῆ',
+        75  => 'ῇ',
+        76  => 'ῌ',
+        77  => 'ῒ',
+        78  => 'ΐ',
+        79  => 'ῖ',
+        80  => 'ῗ',
+        81  => 'ῢ',
+        82  => 'ΰ',
+        83  => 'ῤ',
+        84  => 'ῦ',
+        85  => 'ῧ',
+        86  => 'ῲ',
+        87  => 'ῳ',
+        88  => 'ῴ',
+        89  => 'ῶ',
+        90  => 'ῷ',
+        91  => 'ῼ',
+        92  => 'ﬀ',
+        93  => 'ﬁ',
+        94  => 'ﬂ',
+        95  => 'ﬃ',
+        96  => 'ﬄ',
+        97  => 'ﬅ',
+        98  => 'ﬆ',
+        99  => 'ﬓ',
+        100 => 'ﬔ',
+        101 => 'ﬕ',
+        102 => 'ﬖ',
+        103 => 'ﬗ',
+        104 => 'J̌̌',
+    ],
+    1 => [
+        0   => 'ss',
+        1   => 'i̇',
+        2   => 'ʼn',
+        3   => 'ǰ',
+        4   => 'ΐ',
+        5   => 'ΰ',
+        6   => 'եւ',
+        7   => 'ẖ',
+        8   => 'ẗ',
+        9   => 'ẘ',
+        10  => 'ẙ',
+        11  => 'aʾ',
+        12  => 'ss',
+        13  => 'ὐ',
+        14  => 'ὒ',
+        15  => 'ὔ',
+        16  => 'ὖ',
+        17  => 'ἀι',
+        18  => 'ἁι',
+        19  => 'ἂι',
+        20  => 'ἃι',
+        21  => 'ἄι',
+        22  => 'ἅι',
+        23  => 'ἆι',
+        24  => 'ἇι',
+        25  => 'ἀι',
+        26  => 'ἁι',
+        27  => 'ἂι',
+        28  => 'ἃι',
+        29  => 'ἄι',
+        30  => 'ἅι',
+        31  => 'ἆι',
+        32  => 'ἇι',
+        33  => 'ἠι',
+        34  => 'ἡι',
+        35  => 'ἢι',
+        36  => 'ἣι',
+        37  => 'ἤι',
+        38  => 'ἥι',
+        39  => 'ἦι',
+        40  => 'ἧι',
+        41  => 'ἠι',
+        42  => 'ἡι',
+        43  => 'ἢι',
+        44  => 'ἣι',
+        45  => 'ἤι',
+        46  => 'ἥι',
+        47  => 'ἦι',
+        48  => 'ἧι',
+        49  => 'ὠι',
+        50  => 'ὡι',
+        51  => 'ὢι',
+        52  => 'ὣι',
+        53  => 'ὤι',
+        54  => 'ὥι',
+        55  => 'ὦι',
+        56  => 'ὧι',
+        57  => 'ὠι',
+        58  => 'ὡι',
+        59  => 'ὢι',
+        60  => 'ὣι',
+        61  => 'ὤι',
+        62  => 'ὥι',
+        63  => 'ὦι',
+        64  => 'ὧι',
+        65  => 'ὰι',
+        66  => 'αι',
+        67  => 'άι',
+        68  => 'ᾶ',
+        69  => 'ᾶι',
+        70  => 'αι',
+        71  => 'ὴι',
+        72  => 'ηι',
+        73  => 'ήι',
+        74  => 'ῆ',
+        75  => 'ῆι',
+        76  => 'ηι',
+        77  => 'ῒ',
+        78  => 'ΐ',
+        79  => 'ῖ',
+        80  => 'ῗ',
+        81  => 'ῢ',
+        82  => 'ΰ',
+        83  => 'ῤ',
+        84  => 'ῦ',
+        85  => 'ῧ',
+        86  => 'ὼι',
+        87  => 'ωι',
+        88  => 'ώι',
+        89  => 'ῶ',
+        90  => 'ῶι',
+        91  => 'ωι',
+        92  => 'ff',
+        93  => 'fi',
+        94  => 'fl',
+        95  => 'ffi',
+        96  => 'ffl',
+        97  => 'st',
+        98  => 'st',
+        99  => 'մն',
+        100 => 'մե',
+        101 => 'մի',
+        102 => 'վն',
+        103 => 'մխ',
+        104 => 'ǰ',
+    ],
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/chr.php b/includes/libraries/anti-xss-master/src/voku/helper/data/chr.php
new file mode 100644
index 000000000..e20ffa647
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/chr.php
@@ -0,0 +1 @@
+<?php return [0 => "\x00", 1 => "\x01", 2 => "\x02", 3 => "\x03", 4 => "\x04", 5 => "\x05", 6 => "\x06", 7 => "\x07", 8 => "\x08", 9 => "\x09", 10 => "\x0A", 11 => "\x0B", 12 => "\x0C", 13 => "\x0D", 14 => "\x0E", 15 => "\x0F", 16 => "\x10", 17 => "\x11", 18 => "\x12", 19 => "\x13", 20 => "\x14", 21 => "\x15", 22 => "\x16", 23 => "\x17", 24 => "\x18", 25 => "\x19", 26 => "\x1A", 27 => "\x1B", 28 => "\x1C", 29 => "\x1D", 30 => "\x1E", 31 => "\x1F", 32 => "\x20", 33 => "\x21", 34 => "\x22", 35 => "\x23", 36 => "\x24", 37 => "\x25", 38 => "\x26", 39 => "\x27", 40 => "\x28", 41 => "\x29", 42 => "\x2A", 43 => "\x2B", 44 => "\x2C", 45 => "\x2D", 46 => "\x2E", 47 => "\x2F", 48 => "\x30", 49 => "\x31", 50 => "\x32", 51 => "\x33", 52 => "\x34", 53 => "\x35", 54 => "\x36", 55 => "\x37", 56 => "\x38", 57 => "\x39", 58 => "\x3A", 59 => "\x3B", 60 => "\x3C", 61 => "\x3D", 62 => "\x3E", 63 => "\x3F", 64 => "\x40", 65 => "\x41", 66 => "\x42", 67 => "\x43", 68 => "\x44", 69 => "\x45", 70 => "\x46", 71 => "\x47", 72 => "\x48", 73 => "\x49", 74 => "\x4A", 75 => "\x4B", 76 => "\x4C", 77 => "\x4D", 78 => "\x4E", 79 => "\x4F", 80 => "\x50", 81 => "\x51", 82 => "\x52", 83 => "\x53", 84 => "\x54", 85 => "\x55", 86 => "\x56", 87 => "\x57", 88 => "\x58", 89 => "\x59", 90 => "\x5A", 91 => "\x5B", 92 => "\x5C", 93 => "\x5D", 94 => "\x5E", 95 => "\x5F", 96 => "\x60", 97 => "\x61", 98 => "\x62", 99 => "\x63", 100 => "\x64", 101 => "\x65", 102 => "\x66", 103 => "\x67", 104 => "\x68", 105 => "\x69", 106 => "\x6A", 107 => "\x6B", 108 => "\x6C", 109 => "\x6D", 110 => "\x6E", 111 => "\x6F", 112 => "\x70", 113 => "\x71", 114 => "\x72", 115 => "\x73", 116 => "\x74", 117 => "\x75", 118 => "\x76", 119 => "\x77", 120 => "\x78", 121 => "\x79", 122 => "\x7A", 123 => "\x7B", 124 => "\x7C", 125 => "\x7D", 126 => "\x7E", 127 => "\x7F", 128 => "\x80", 129 => "\x81", 130 => "\x82", 131 => "\x83", 132 => "\x84", 133 => "\x85", 134 => "\x86", 135 => "\x87", 136 => "\x88", 137 => "\x89", 138 => "\x8A", 139 => "\x8B", 140 => "\x8C", 141 => "\x8D", 142 => "\x8E", 143 => "\x8F", 144 => "\x90", 145 => "\x91", 146 => "\x92", 147 => "\x93", 148 => "\x94", 149 => "\x95", 150 => "\x96", 151 => "\x97", 152 => "\x98", 153 => "\x99", 154 => "\x9A", 155 => "\x9B", 156 => "\x9C", 157 => "\x9D", 158 => "\x9E", 159 => "\x9F", 160 => "\xA0", 161 => "\xA1", 162 => "\xA2", 163 => "\xA3", 164 => "\xA4", 165 => "\xA5", 166 => "\xA6", 167 => "\xA7", 168 => "\xA8", 169 => "\xA9", 170 => "\xAA", 171 => "\xAB", 172 => "\xAC", 173 => "\xAD", 174 => "\xAE", 175 => "\xAF", 176 => "\xB0", 177 => "\xB1", 178 => "\xB2", 179 => "\xB3", 180 => "\xB4", 181 => "\xB5", 182 => "\xB6", 183 => "\xB7", 184 => "\xB8", 185 => "\xB9", 186 => "\xBA", 187 => "\xBB", 188 => "\xBC", 189 => "\xBD", 190 => "\xBE", 191 => "\xBF", 192 => "\xC0", 193 => "\xC1", 194 => "\xC2", 195 => "\xC3", 196 => "\xC4", 197 => "\xC5", 198 => "\xC6", 199 => "\xC7", 200 => "\xC8", 201 => "\xC9", 202 => "\xCA", 203 => "\xCB", 204 => "\xCC", 205 => "\xCD", 206 => "\xCE", 207 => "\xCF", 208 => "\xD0", 209 => "\xD1", 210 => "\xD2", 211 => "\xD3", 212 => "\xD4", 213 => "\xD5", 214 => "\xD6", 215 => "\xD7", 216 => "\xD8", 217 => "\xD9", 218 => "\xDA", 219 => "\xDB", 220 => "\xDC", 221 => "\xDD", 222 => "\xDE", 223 => "\xDF", 224 => "\xE0", 225 => "\xE1", 226 => "\xE2", 227 => "\xE3", 228 => "\xE4", 229 => "\xE5", 230 => "\xE6", 231 => "\xE7", 232 => "\xE8", 233 => "\xE9", 234 => "\xEA", 235 => "\xEB", 236 => "\xEC", 237 => "\xED", 238 => "\xEE", 239 => "\xEF", 240 => "\xF0", 241 => "\xF1", 242 => "\xF2", 243 => "\xF3", 244 => "\xF4", 245 => "\xF5", 246 => "\xF6", 247 => "\xF7", 248 => "\xF8", 249 => "\xF9", 250 => "\xFA", 251 => "\xFB", 252 => "\xFC", 253 => "\xFD", 254 => "\xFE", 255 => "\xFF"];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/emoji.php b/includes/libraries/anti-xss-master/src/voku/helper/data/emoji.php
new file mode 100644
index 000000000..ae10b33ef
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/emoji.php
@@ -0,0 +1,7 @@
+<?php
+
+// ########## Unicode Emoji v11.0 ##########
+// ##### Emoji group: Smileys & People #####
+// ##### Emoji subgroup: Face-positive #####
+
+return ['CHARACTER_GRINNING_FACE' => "\u{1F600}", 'CHARACTER_BEAMING_FACE_WITH_SMILING_EYES' => "\u{1F601}", 'CHARACTER_FACE_WITH_TEARS_OF_JOY' => "\u{1F602}", 'CHARACTER_ROLLING_ON_THE_FLOOR_LAUGHING' => "\u{1F923}", 'CHARACTER_GRINNING_FACE_WITH_BIG_EYES' => "\u{1F603}", 'CHARACTER_GRINNING_FACE_WITH_SMILING_EYES' => "\u{1F604}", 'CHARACTER_GRINNING_FACE_WITH_SWEAT' => "\u{1F605}", 'CHARACTER_GRINNING_SQUINTING_FACE' => "\u{1F606}", 'CHARACTER_WINKING_FACE' => "\u{1F609}", 'CHARACTER_SMILING_FACE_WITH_SMILING_EYES' => "\u{1F60A}", 'CHARACTER_FACE_SAVORING_FOOD' => "\u{1F60B}", 'CHARACTER_SMILING_FACE_WITH_SUNGLASSES' => "\u{1F60E}", 'CHARACTER_SMILING_FACE_WITH_HEART_EYES' => "\u{1F60D}", 'CHARACTER_FACE_BLOWING_A_KISS' => "\u{1F618}", 'CHARACTER_SMILING_FACE_WITH_3_HEARTS' => "\u{1F970}", 'CHARACTER_KISSING_FACE' => "\u{1F617}", 'CHARACTER_KISSING_FACE_WITH_SMILING_EYES' => "\u{1F619}", 'CHARACTER_KISSING_FACE_WITH_CLOSED_EYES' => "\u{1F61A}", 'CHARACTER_SMILING_FACE' => "\u{263A}\u{FE0F}", 'CHARACTER_SLIGHTLY_SMILING_FACE' => "\u{1F642}", 'CHARACTER_HUGGING_FACE' => "\u{1F917}", 'CHARACTER_STAR_STRUCK' => "\u{1F929}", 'CHARACTER_THINKING_FACE' => "\u{1F914}", 'CHARACTER_FACE_WITH_RAISED_EYEBROW' => "\u{1F928}", 'CHARACTER_NEUTRAL_FACE' => "\u{1F610}", 'CHARACTER_EXPRESSIONLESS_FACE' => "\u{1F611}", 'CHARACTER_FACE_WITHOUT_MOUTH' => "\u{1F636}", 'CHARACTER_FACE_WITH_ROLLING_EYES' => "\u{1F644}", 'CHARACTER_SMIRKING_FACE' => "\u{1F60F}", 'CHARACTER_PERSEVERING_FACE' => "\u{1F623}", 'CHARACTER_SAD_BUT_RELIEVED_FACE' => "\u{1F625}", 'CHARACTER_FACE_WITH_OPEN_MOUTH' => "\u{1F62E}", 'CHARACTER_ZIPPER_MOUTH_FACE' => "\u{1F910}", 'CHARACTER_HUSHED_FACE' => "\u{1F62F}", 'CHARACTER_SLEEPY_FACE' => "\u{1F62A}", 'CHARACTER_TIRED_FACE' => "\u{1F62B}", 'CHARACTER_SLEEPING_FACE' => "\u{1F634}", 'CHARACTER_RELIEVED_FACE' => "\u{1F60C}", 'CHARACTER_FACE_WITH_TONGUE' => "\u{1F61B}", 'CHARACTER_WINKING_FACE_WITH_TONGUE' => "\u{1F61C}", 'CHARACTER_SQUINTING_FACE_WITH_TONGUE' => "\u{1F61D}", 'CHARACTER_DROOLING_FACE' => "\u{1F924}", 'CHARACTER_UNAMUSED_FACE' => "\u{1F612}", 'CHARACTER_DOWNCAST_FACE_WITH_SWEAT' => "\u{1F613}", 'CHARACTER_PENSIVE_FACE' => "\u{1F614}", 'CHARACTER_CONFUSED_FACE' => "\u{1F615}", 'CHARACTER_UPSIDE_DOWN_FACE' => "\u{1F643}", 'CHARACTER_MONEY_MOUTH_FACE' => "\u{1F911}", 'CHARACTER_ASTONISHED_FACE' => "\u{1F632}", 'CHARACTER_FROWNING_FACE' => "\u{2639}\u{FE0F}", 'CHARACTER_SLIGHTLY_FROWNING_FACE' => "\u{1F641}", 'CHARACTER_CONFOUNDED_FACE' => "\u{1F616}", 'CHARACTER_DISAPPOINTED_FACE' => "\u{1F61E}", 'CHARACTER_WORRIED_FACE' => "\u{1F61F}", 'CHARACTER_FACE_WITH_STEAM_FROM_NOSE' => "\u{1F624}", 'CHARACTER_CRYING_FACE' => "\u{1F622}", 'CHARACTER_LOUDLY_CRYING_FACE' => "\u{1F62D}", 'CHARACTER_FROWNING_FACE_WITH_OPEN_MOUTH' => "\u{1F626}", 'CHARACTER_ANGUISHED_FACE' => "\u{1F627}", 'CHARACTER_FEARFUL_FACE' => "\u{1F628}", 'CHARACTER_WEARY_FACE' => "\u{1F629}", 'CHARACTER_EXPLODING_HEAD' => "\u{1F92F}", 'CHARACTER_GRIMACING_FACE' => "\u{1F62C}", 'CHARACTER_ANXIOUS_FACE_WITH_SWEAT' => "\u{1F630}", 'CHARACTER_FACE_SCREAMING_IN_FEAR' => "\u{1F631}", 'CHARACTER_HOT_FACE' => "\u{1F975}", 'CHARACTER_COLD_FACE' => "\u{1F976}", 'CHARACTER_FLUSHED_FACE' => "\u{1F633}", 'CHARACTER_ZANY_FACE' => "\u{1F92A}", 'CHARACTER_DIZZY_FACE' => "\u{1F635}", 'CHARACTER_POUTING_FACE' => "\u{1F621}", 'CHARACTER_ANGRY_FACE' => "\u{1F620}", 'CHARACTER_FACE_WITH_SYMBOLS_ON_MOUTH' => "\u{1F92C}", 'CHARACTER_FACE_WITH_MEDICAL_MASK' => "\u{1F637}", 'CHARACTER_FACE_WITH_THERMOMETER' => "\u{1F912}", 'CHARACTER_FACE_WITH_HEAD_BANDAGE' => "\u{1F915}", 'CHARACTER_NAUSEATED_FACE' => "\u{1F922}", 'CHARACTER_FACE_VOMITING' => "\u{1F92E}", 'CHARACTER_SNEEZING_FACE' => "\u{1F927}", 'CHARACTER_SMILING_FACE_WITH_HALO' => "\u{1F607}", 'CHARACTER_COWBOY_HAT_FACE' => "\u{1F920}", 'CHARACTER_PARTYING_FACE' => "\u{1F973}", 'CHARACTER_WOOZY_FACE' => "\u{1F974}", 'CHARACTER_PLEADING_FACE' => "\u{1F97A}", 'CHARACTER_LYING_FACE' => "\u{1F925}", 'CHARACTER_SHUSHING_FACE' => "\u{1F92B}", 'CHARACTER_FACE_WITH_HAND_OVER_MOUTH' => "\u{1F92D}", 'CHARACTER_FACE_WITH_MONOCLE' => "\u{1F9D0}", 'CHARACTER_NERD_FACE' => "\u{1F913}", 'CHARACTER_SMILING_FACE_WITH_HORNS' => "\u{1F608}", 'CHARACTER_ANGRY_FACE_WITH_HORNS' => "\u{1F47F}", 'CHARACTER_CLOWN_FACE' => "\u{1F921}", 'CHARACTER_OGRE' => "\u{1F479}", 'CHARACTER_GOBLIN' => "\u{1F47A}", 'CHARACTER_SKULL' => "\u{1F480}", 'CHARACTER_SKULL_AND_CROSSBONES' => "\u{2620}\u{FE0F}", 'CHARACTER_GHOST' => "\u{1F47B}", 'CHARACTER_ALIEN' => "\u{1F47D}", 'CHARACTER_ALIEN_MONSTER' => "\u{1F47E}", 'CHARACTER_ROBOT_FACE' => "\u{1F916}", 'CHARACTER_PILE_OF_POO' => "\u{1F4A9}", 'CHARACTER_GRINNING_CAT_FACE' => "\u{1F63A}", 'CHARACTER_GRINNING_CAT_FACE_WITH_SMILING_EYES' => "\u{1F638}", 'CHARACTER_CAT_FACE_WITH_TEARS_OF_JOY' => "\u{1F639}", 'CHARACTER_SMILING_CAT_FACE_WITH_HEART_EYES' => "\u{1F63B}", 'CHARACTER_CAT_FACE_WITH_WRY_SMILE' => "\u{1F63C}", 'CHARACTER_KISSING_CAT_FACE' => "\u{1F63D}", 'CHARACTER_WEARY_CAT_FACE' => "\u{1F640}", 'CHARACTER_CRYING_CAT_FACE' => "\u{1F63F}", 'CHARACTER_POUTING_CAT_FACE' => "\u{1F63E}", 'CHARACTER_SEE_NO_EVIL_MONKEY' => "\u{1F648}", 'CHARACTER_HEAR_NO_EVIL_MONKEY' => "\u{1F649}", 'CHARACTER_SPEAK_NO_EVIL_MONKEY' => "\u{1F64A}", 'CHARACTER_LIGHT_SKIN_TONE' => "\u{1F3FB}", 'CHARACTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3FC}", 'CHARACTER_MEDIUM_SKIN_TONE' => "\u{1F3FD}", 'CHARACTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F3FE}", 'CHARACTER_DARK_SKIN_TONE' => "\u{1F3FF}", 'CHARACTER_BABY' => "\u{1F476}", 'CHARACTER_BABY_LIGHT_SKIN_TONE' => "\u{1F476}\u{1F3FB}", 'CHARACTER_BABY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F476}\u{1F3FC}", 'CHARACTER_BABY_MEDIUM_SKIN_TONE' => "\u{1F476}\u{1F3FD}", 'CHARACTER_BABY_MEDIUM_DARK_SKIN_TONE' => "\u{1F476}\u{1F3FE}", 'CHARACTER_BABY_DARK_SKIN_TONE' => "\u{1F476}\u{1F3FF}", 'CHARACTER_CHILD' => "\u{1F9D2}", 'CHARACTER_CHILD_LIGHT_SKIN_TONE' => "\u{1F9D2}\u{1F3FB}", 'CHARACTER_CHILD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D2}\u{1F3FC}", 'CHARACTER_CHILD_MEDIUM_SKIN_TONE' => "\u{1F9D2}\u{1F3FD}", 'CHARACTER_CHILD_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D2}\u{1F3FE}", 'CHARACTER_CHILD_DARK_SKIN_TONE' => "\u{1F9D2}\u{1F3FF}", 'CHARACTER_BOY' => "\u{1F466}", 'CHARACTER_BOY_LIGHT_SKIN_TONE' => "\u{1F466}\u{1F3FB}", 'CHARACTER_BOY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F466}\u{1F3FC}", 'CHARACTER_BOY_MEDIUM_SKIN_TONE' => "\u{1F466}\u{1F3FD}", 'CHARACTER_BOY_MEDIUM_DARK_SKIN_TONE' => "\u{1F466}\u{1F3FE}", 'CHARACTER_BOY_DARK_SKIN_TONE' => "\u{1F466}\u{1F3FF}", 'CHARACTER_GIRL' => "\u{1F467}", 'CHARACTER_GIRL_LIGHT_SKIN_TONE' => "\u{1F467}\u{1F3FB}", 'CHARACTER_GIRL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F467}\u{1F3FC}", 'CHARACTER_GIRL_MEDIUM_SKIN_TONE' => "\u{1F467}\u{1F3FD}", 'CHARACTER_GIRL_MEDIUM_DARK_SKIN_TONE' => "\u{1F467}\u{1F3FE}", 'CHARACTER_GIRL_DARK_SKIN_TONE' => "\u{1F467}\u{1F3FF}", 'CHARACTER_ADULT' => "\u{1F9D1}", 'CHARACTER_ADULT_LIGHT_SKIN_TONE' => "\u{1F9D1}\u{1F3FB}", 'CHARACTER_ADULT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D1}\u{1F3FC}", 'CHARACTER_ADULT_MEDIUM_SKIN_TONE' => "\u{1F9D1}\u{1F3FD}", 'CHARACTER_ADULT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D1}\u{1F3FE}", 'CHARACTER_ADULT_DARK_SKIN_TONE' => "\u{1F9D1}\u{1F3FF}", 'CHARACTER_MAN' => "\u{1F468}", 'CHARACTER_MAN_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}", 'CHARACTER_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}", 'CHARACTER_MAN_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}", 'CHARACTER_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}", 'CHARACTER_MAN_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}", 'CHARACTER_WOMAN' => "\u{1F469}", 'CHARACTER_WOMAN_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}", 'CHARACTER_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}", 'CHARACTER_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}", 'CHARACTER_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}", 'CHARACTER_WOMAN_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}", 'CHARACTER_OLDER_ADULT' => "\u{1F9D3}", 'CHARACTER_OLDER_ADULT_LIGHT_SKIN_TONE' => "\u{1F9D3}\u{1F3FB}", 'CHARACTER_OLDER_ADULT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D3}\u{1F3FC}", 'CHARACTER_OLDER_ADULT_MEDIUM_SKIN_TONE' => "\u{1F9D3}\u{1F3FD}", 'CHARACTER_OLDER_ADULT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D3}\u{1F3FE}", 'CHARACTER_OLDER_ADULT_DARK_SKIN_TONE' => "\u{1F9D3}\u{1F3FF}", 'CHARACTER_OLD_MAN' => "\u{1F474}", 'CHARACTER_OLD_MAN_LIGHT_SKIN_TONE' => "\u{1F474}\u{1F3FB}", 'CHARACTER_OLD_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F474}\u{1F3FC}", 'CHARACTER_OLD_MAN_MEDIUM_SKIN_TONE' => "\u{1F474}\u{1F3FD}", 'CHARACTER_OLD_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F474}\u{1F3FE}", 'CHARACTER_OLD_MAN_DARK_SKIN_TONE' => "\u{1F474}\u{1F3FF}", 'CHARACTER_OLD_WOMAN' => "\u{1F475}", 'CHARACTER_OLD_WOMAN_LIGHT_SKIN_TONE' => "\u{1F475}\u{1F3FB}", 'CHARACTER_OLD_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F475}\u{1F3FC}", 'CHARACTER_OLD_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F475}\u{1F3FD}", 'CHARACTER_OLD_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F475}\u{1F3FE}", 'CHARACTER_OLD_WOMAN_DARK_SKIN_TONE' => "\u{1F475}\u{1F3FF}", 'CHARACTER_MAN_HEALTH_WORKER' => "\u{1F468}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER' => "\u{1F469}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_STUDENT' => "\u{1F468}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT' => "\u{1F469}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F393}", 'CHARACTER_MAN_TEACHER' => "\u{1F468}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER' => "\u{1F469}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_JUDGE' => "\u{1F468}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE' => "\u{1F469}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_FARMER' => "\u{1F468}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER' => "\u{1F469}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F33E}", 'CHARACTER_MAN_COOK' => "\u{1F468}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK' => "\u{1F469}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F373}", 'CHARACTER_MAN_MECHANIC' => "\u{1F468}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC' => "\u{1F469}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F527}", 'CHARACTER_MAN_FACTORY_WORKER' => "\u{1F468}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER' => "\u{1F469}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_OFFICE_WORKER' => "\u{1F468}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER' => "\u{1F469}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_SCIENTIST' => "\u{1F468}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST' => "\u{1F469}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F52C}", 'CHARACTER_MAN_TECHNOLOGIST' => "\u{1F468}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST' => "\u{1F469}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_SINGER' => "\u{1F468}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER' => "\u{1F469}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_ARTIST' => "\u{1F468}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST' => "\u{1F469}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_PILOT' => "\u{1F468}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT' => "\u{1F469}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_ASTRONAUT' => "\u{1F468}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT' => "\u{1F469}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F680}", 'CHARACTER_MAN_FIREFIGHTER' => "\u{1F468}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER' => "\u{1F469}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F692}", 'CHARACTER_POLICE_OFFICER' => "\u{1F46E}", 'CHARACTER_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}", 'CHARACTER_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}", 'CHARACTER_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}", 'CHARACTER_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}", 'CHARACTER_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}", 'CHARACTER_MAN_POLICE_OFFICER' => "\u{1F46E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER' => "\u{1F46E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_DETECTIVE' => "\u{1F575}\u{FE0F}", 'CHARACTER_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}", 'CHARACTER_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}", 'CHARACTER_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}", 'CHARACTER_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}", 'CHARACTER_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}", 'CHARACTER_MAN_DETECTIVE' => "\u{1F575}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE' => "\u{1F575}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_GUARD' => "\u{1F482}", 'CHARACTER_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}", 'CHARACTER_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}", 'CHARACTER_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}", 'CHARACTER_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}", 'CHARACTER_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}", 'CHARACTER_MAN_GUARD' => "\u{1F482}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GUARD' => "\u{1F482}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_CONSTRUCTION_WORKER' => "\u{1F477}", 'CHARACTER_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}", 'CHARACTER_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}", 'CHARACTER_MAN_CONSTRUCTION_WORKER' => "\u{1F477}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER' => "\u{1F477}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PRINCE' => "\u{1F934}", 'CHARACTER_PRINCE_LIGHT_SKIN_TONE' => "\u{1F934}\u{1F3FB}", 'CHARACTER_PRINCE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F934}\u{1F3FC}", 'CHARACTER_PRINCE_MEDIUM_SKIN_TONE' => "\u{1F934}\u{1F3FD}", 'CHARACTER_PRINCE_MEDIUM_DARK_SKIN_TONE' => "\u{1F934}\u{1F3FE}", 'CHARACTER_PRINCE_DARK_SKIN_TONE' => "\u{1F934}\u{1F3FF}", 'CHARACTER_PRINCESS' => "\u{1F478}", 'CHARACTER_PRINCESS_LIGHT_SKIN_TONE' => "\u{1F478}\u{1F3FB}", 'CHARACTER_PRINCESS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F478}\u{1F3FC}", 'CHARACTER_PRINCESS_MEDIUM_SKIN_TONE' => "\u{1F478}\u{1F3FD}", 'CHARACTER_PRINCESS_MEDIUM_DARK_SKIN_TONE' => "\u{1F478}\u{1F3FE}", 'CHARACTER_PRINCESS_DARK_SKIN_TONE' => "\u{1F478}\u{1F3FF}", 'CHARACTER_PERSON_WEARING_TURBAN' => "\u{1F473}", 'CHARACTER_PERSON_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}", 'CHARACTER_PERSON_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}", 'CHARACTER_MAN_WEARING_TURBAN' => "\u{1F473}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN' => "\u{1F473}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_WITH_CHINESE_CAP' => "\u{1F472}", 'CHARACTER_MAN_WITH_CHINESE_CAP_LIGHT_SKIN_TONE' => "\u{1F472}\u{1F3FB}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F472}\u{1F3FC}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_SKIN_TONE' => "\u{1F472}\u{1F3FD}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_DARK_SKIN_TONE' => "\u{1F472}\u{1F3FE}", 'CHARACTER_MAN_WITH_CHINESE_CAP_DARK_SKIN_TONE' => "\u{1F472}\u{1F3FF}", 'CHARACTER_WOMAN_WITH_HEADSCARF' => "\u{1F9D5}", 'CHARACTER_WOMAN_WITH_HEADSCARF_LIGHT_SKIN_TONE' => "\u{1F9D5}\u{1F3FB}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D5}\u{1F3FC}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE' => "\u{1F9D5}\u{1F3FD}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D5}\u{1F3FE}", 'CHARACTER_WOMAN_WITH_HEADSCARF_DARK_SKIN_TONE' => "\u{1F9D5}\u{1F3FF}", 'CHARACTER_BEARDED_PERSON' => "\u{1F9D4}", 'CHARACTER_BEARDED_PERSON_LIGHT_SKIN_TONE' => "\u{1F9D4}\u{1F3FB}", 'CHARACTER_BEARDED_PERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D4}\u{1F3FC}", 'CHARACTER_BEARDED_PERSON_MEDIUM_SKIN_TONE' => "\u{1F9D4}\u{1F3FD}", 'CHARACTER_BEARDED_PERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D4}\u{1F3FE}", 'CHARACTER_BEARDED_PERSON_DARK_SKIN_TONE' => "\u{1F9D4}\u{1F3FF}", 'CHARACTER_BLOND_HAIRED_PERSON' => "\u{1F471}", 'CHARACTER_BLOND_HAIRED_PERSON_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}", 'CHARACTER_BLOND_HAIRED_PERSON_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}", 'CHARACTER_BLOND_HAIRED_MAN' => "\u{1F471}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN' => "\u{1F471}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_RED_HAIRED' => "\u{1F468}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED' => "\u{1F469}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_CURLY_HAIRED' => "\u{1F468}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED' => "\u{1F469}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_BALD' => "\u{1F468}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD' => "\u{1F469}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_WHITE_HAIRED' => "\u{1F468}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED' => "\u{1F469}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_IN_TUXEDO' => "\u{1F935}", 'CHARACTER_MAN_IN_TUXEDO_LIGHT_SKIN_TONE' => "\u{1F935}\u{1F3FB}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F935}\u{1F3FC}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_SKIN_TONE' => "\u{1F935}\u{1F3FD}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_DARK_SKIN_TONE' => "\u{1F935}\u{1F3FE}", 'CHARACTER_MAN_IN_TUXEDO_DARK_SKIN_TONE' => "\u{1F935}\u{1F3FF}", 'CHARACTER_BRIDE_WITH_VEIL' => "\u{1F470}", 'CHARACTER_BRIDE_WITH_VEIL_LIGHT_SKIN_TONE' => "\u{1F470}\u{1F3FB}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F470}\u{1F3FC}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_SKIN_TONE' => "\u{1F470}\u{1F3FD}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_DARK_SKIN_TONE' => "\u{1F470}\u{1F3FE}", 'CHARACTER_BRIDE_WITH_VEIL_DARK_SKIN_TONE' => "\u{1F470}\u{1F3FF}", 'CHARACTER_PREGNANT_WOMAN' => "\u{1F930}", 'CHARACTER_PREGNANT_WOMAN_LIGHT_SKIN_TONE' => "\u{1F930}\u{1F3FB}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F930}\u{1F3FC}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F930}\u{1F3FD}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F930}\u{1F3FE}", 'CHARACTER_PREGNANT_WOMAN_DARK_SKIN_TONE' => "\u{1F930}\u{1F3FF}", 'CHARACTER_BREAST_FEEDING' => "\u{1F931}", 'CHARACTER_BREAST_FEEDING_LIGHT_SKIN_TONE' => "\u{1F931}\u{1F3FB}", 'CHARACTER_BREAST_FEEDING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F931}\u{1F3FC}", 'CHARACTER_BREAST_FEEDING_MEDIUM_SKIN_TONE' => "\u{1F931}\u{1F3FD}", 'CHARACTER_BREAST_FEEDING_MEDIUM_DARK_SKIN_TONE' => "\u{1F931}\u{1F3FE}", 'CHARACTER_BREAST_FEEDING_DARK_SKIN_TONE' => "\u{1F931}\u{1F3FF}", 'CHARACTER_BABY_ANGEL' => "\u{1F47C}", 'CHARACTER_BABY_ANGEL_LIGHT_SKIN_TONE' => "\u{1F47C}\u{1F3FB}", 'CHARACTER_BABY_ANGEL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F47C}\u{1F3FC}", 'CHARACTER_BABY_ANGEL_MEDIUM_SKIN_TONE' => "\u{1F47C}\u{1F3FD}", 'CHARACTER_BABY_ANGEL_MEDIUM_DARK_SKIN_TONE' => "\u{1F47C}\u{1F3FE}", 'CHARACTER_BABY_ANGEL_DARK_SKIN_TONE' => "\u{1F47C}\u{1F3FF}", 'CHARACTER_SANTA_CLAUS' => "\u{1F385}", 'CHARACTER_SANTA_CLAUS_LIGHT_SKIN_TONE' => "\u{1F385}\u{1F3FB}", 'CHARACTER_SANTA_CLAUS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F385}\u{1F3FC}", 'CHARACTER_SANTA_CLAUS_MEDIUM_SKIN_TONE' => "\u{1F385}\u{1F3FD}", 'CHARACTER_SANTA_CLAUS_MEDIUM_DARK_SKIN_TONE' => "\u{1F385}\u{1F3FE}", 'CHARACTER_SANTA_CLAUS_DARK_SKIN_TONE' => "\u{1F385}\u{1F3FF}", 'CHARACTER_MRS_CLAUS' => "\u{1F936}", 'CHARACTER_MRS_CLAUS_LIGHT_SKIN_TONE' => "\u{1F936}\u{1F3FB}", 'CHARACTER_MRS_CLAUS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F936}\u{1F3FC}", 'CHARACTER_MRS_CLAUS_MEDIUM_SKIN_TONE' => "\u{1F936}\u{1F3FD}", 'CHARACTER_MRS_CLAUS_MEDIUM_DARK_SKIN_TONE' => "\u{1F936}\u{1F3FE}", 'CHARACTER_MRS_CLAUS_DARK_SKIN_TONE' => "\u{1F936}\u{1F3FF}", 'CHARACTER_SUPERHERO' => "\u{1F9B8}", 'CHARACTER_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}", 'CHARACTER_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}", 'CHARACTER_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}", 'CHARACTER_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}", 'CHARACTER_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}", 'CHARACTER_WOMAN_SUPERHERO' => "\u{1F9B8}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO' => "\u{1F9B8}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_SUPERVILLAIN' => "\u{1F9B9}", 'CHARACTER_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}", 'CHARACTER_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}", 'CHARACTER_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}", 'CHARACTER_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}", 'CHARACTER_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}", 'CHARACTER_WOMAN_SUPERVILLAIN' => "\u{1F9B9}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN' => "\u{1F9B9}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAGE' => "\u{1F9D9}", 'CHARACTER_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}", 'CHARACTER_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}", 'CHARACTER_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}", 'CHARACTER_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}", 'CHARACTER_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}", 'CHARACTER_WOMAN_MAGE' => "\u{1F9D9}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_MAGE' => "\u{1F9D9}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_FAIRY' => "\u{1F9DA}", 'CHARACTER_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}", 'CHARACTER_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}", 'CHARACTER_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}", 'CHARACTER_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}", 'CHARACTER_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}", 'CHARACTER_WOMAN_FAIRY' => "\u{1F9DA}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_FAIRY' => "\u{1F9DA}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_VAMPIRE' => "\u{1F9DB}", 'CHARACTER_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}", 'CHARACTER_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}", 'CHARACTER_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}", 'CHARACTER_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}", 'CHARACTER_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}", 'CHARACTER_WOMAN_VAMPIRE' => "\u{1F9DB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE' => "\u{1F9DB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERPERSON' => "\u{1F9DC}", 'CHARACTER_MERPERSON_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}", 'CHARACTER_MERPERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}", 'CHARACTER_MERPERSON_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}", 'CHARACTER_MERPERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}", 'CHARACTER_MERPERSON_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}", 'CHARACTER_MERMAID' => "\u{1F9DC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAN' => "\u{1F9DC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_ELF' => "\u{1F9DD}", 'CHARACTER_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}", 'CHARACTER_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}", 'CHARACTER_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}", 'CHARACTER_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}", 'CHARACTER_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}", 'CHARACTER_WOMAN_ELF' => "\u{1F9DD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_ELF' => "\u{1F9DD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_GENIE' => "\u{1F9DE}", 'CHARACTER_WOMAN_GENIE' => "\u{1F9DE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_GENIE' => "\u{1F9DE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_ZOMBIE' => "\u{1F9DF}", 'CHARACTER_WOMAN_ZOMBIE' => "\u{1F9DF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_ZOMBIE' => "\u{1F9DF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_FROWNING' => "\u{1F64D}", 'CHARACTER_PERSON_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}", 'CHARACTER_PERSON_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}", 'CHARACTER_PERSON_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}", 'CHARACTER_PERSON_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}", 'CHARACTER_PERSON_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}", 'CHARACTER_MAN_FROWNING' => "\u{1F64D}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING' => "\u{1F64D}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_POUTING' => "\u{1F64E}", 'CHARACTER_PERSON_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}", 'CHARACTER_PERSON_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}", 'CHARACTER_PERSON_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}", 'CHARACTER_PERSON_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}", 'CHARACTER_PERSON_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}", 'CHARACTER_MAN_POUTING' => "\u{1F64E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_POUTING' => "\u{1F64E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GESTURING_NO' => "\u{1F645}", 'CHARACTER_PERSON_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}", 'CHARACTER_PERSON_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}", 'CHARACTER_MAN_GESTURING_NO' => "\u{1F645}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO' => "\u{1F645}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GESTURING_OK' => "\u{1F646}", 'CHARACTER_PERSON_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}", 'CHARACTER_PERSON_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}", 'CHARACTER_MAN_GESTURING_OK' => "\u{1F646}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK' => "\u{1F646}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_TIPPING_HAND' => "\u{1F481}", 'CHARACTER_PERSON_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}", 'CHARACTER_PERSON_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}", 'CHARACTER_MAN_TIPPING_HAND' => "\u{1F481}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND' => "\u{1F481}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_RAISING_HAND' => "\u{1F64B}", 'CHARACTER_PERSON_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}", 'CHARACTER_PERSON_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}", 'CHARACTER_MAN_RAISING_HAND' => "\u{1F64B}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND' => "\u{1F64B}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BOWING' => "\u{1F647}", 'CHARACTER_PERSON_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}", 'CHARACTER_PERSON_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}", 'CHARACTER_PERSON_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}", 'CHARACTER_PERSON_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}", 'CHARACTER_PERSON_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}", 'CHARACTER_MAN_BOWING' => "\u{1F647}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BOWING' => "\u{1F647}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_FACEPALMING' => "\u{1F926}", 'CHARACTER_PERSON_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}", 'CHARACTER_PERSON_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}", 'CHARACTER_MAN_FACEPALMING' => "\u{1F926}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING' => "\u{1F926}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SHRUGGING' => "\u{1F937}", 'CHARACTER_PERSON_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}", 'CHARACTER_PERSON_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}", 'CHARACTER_MAN_SHRUGGING' => "\u{1F937}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING' => "\u{1F937}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GETTING_MASSAGE' => "\u{1F486}", 'CHARACTER_PERSON_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}", 'CHARACTER_PERSON_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}", 'CHARACTER_MAN_GETTING_MASSAGE' => "\u{1F486}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE' => "\u{1F486}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GETTING_HAIRCUT' => "\u{1F487}", 'CHARACTER_PERSON_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}", 'CHARACTER_PERSON_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}", 'CHARACTER_MAN_GETTING_HAIRCUT' => "\u{1F487}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT' => "\u{1F487}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_WALKING' => "\u{1F6B6}", 'CHARACTER_PERSON_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}", 'CHARACTER_PERSON_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}", 'CHARACTER_PERSON_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}", 'CHARACTER_PERSON_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}", 'CHARACTER_PERSON_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}", 'CHARACTER_MAN_WALKING' => "\u{1F6B6}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_WALKING' => "\u{1F6B6}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_RUNNING' => "\u{1F3C3}", 'CHARACTER_PERSON_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}", 'CHARACTER_PERSON_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}", 'CHARACTER_PERSON_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}", 'CHARACTER_PERSON_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}", 'CHARACTER_PERSON_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}", 'CHARACTER_MAN_RUNNING' => "\u{1F3C3}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING' => "\u{1F3C3}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DANCING' => "\u{1F483}", 'CHARACTER_WOMAN_DANCING_LIGHT_SKIN_TONE' => "\u{1F483}\u{1F3FB}", 'CHARACTER_WOMAN_DANCING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F483}\u{1F3FC}", 'CHARACTER_WOMAN_DANCING_MEDIUM_SKIN_TONE' => "\u{1F483}\u{1F3FD}", 'CHARACTER_WOMAN_DANCING_MEDIUM_DARK_SKIN_TONE' => "\u{1F483}\u{1F3FE}", 'CHARACTER_WOMAN_DANCING_DARK_SKIN_TONE' => "\u{1F483}\u{1F3FF}", 'CHARACTER_MAN_DANCING' => "\u{1F57A}", 'CHARACTER_MAN_DANCING_LIGHT_SKIN_TONE' => "\u{1F57A}\u{1F3FB}", 'CHARACTER_MAN_DANCING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F57A}\u{1F3FC}", 'CHARACTER_MAN_DANCING_MEDIUM_SKIN_TONE' => "\u{1F57A}\u{1F3FD}", 'CHARACTER_MAN_DANCING_MEDIUM_DARK_SKIN_TONE' => "\u{1F57A}\u{1F3FE}", 'CHARACTER_MAN_DANCING_DARK_SKIN_TONE' => "\u{1F57A}\u{1F3FF}", 'CHARACTER_PEOPLE_WITH_BUNNY_EARS' => "\u{1F46F}", 'CHARACTER_MEN_WITH_BUNNY_EARS' => "\u{1F46F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMEN_WITH_BUNNY_EARS' => "\u{1F46F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_IN_STEAMY_ROOM' => "\u{1F9D6}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM' => "\u{1F9D6}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM' => "\u{1F9D6}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_CLIMBING' => "\u{1F9D7}", 'CHARACTER_PERSON_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}", 'CHARACTER_PERSON_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}", 'CHARACTER_WOMAN_CLIMBING' => "\u{1F9D7}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_CLIMBING' => "\u{1F9D7}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_IN_LOTUS_POSITION' => "\u{1F9D8}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION' => "\u{1F9D8}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION' => "\u{1F9D8}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_TAKING_BATH' => "\u{1F6C0}", 'CHARACTER_PERSON_TAKING_BATH_LIGHT_SKIN_TONE' => "\u{1F6C0}\u{1F3FB}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6C0}\u{1F3FC}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_SKIN_TONE' => "\u{1F6C0}\u{1F3FD}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_DARK_SKIN_TONE' => "\u{1F6C0}\u{1F3FE}", 'CHARACTER_PERSON_TAKING_BATH_DARK_SKIN_TONE' => "\u{1F6C0}\u{1F3FF}", 'CHARACTER_PERSON_IN_BED' => "\u{1F6CC}", 'CHARACTER_PERSON_IN_BED_LIGHT_SKIN_TONE' => "\u{1F6CC}\u{1F3FB}", 'CHARACTER_PERSON_IN_BED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6CC}\u{1F3FC}", 'CHARACTER_PERSON_IN_BED_MEDIUM_SKIN_TONE' => "\u{1F6CC}\u{1F3FD}", 'CHARACTER_PERSON_IN_BED_MEDIUM_DARK_SKIN_TONE' => "\u{1F6CC}\u{1F3FE}", 'CHARACTER_PERSON_IN_BED_DARK_SKIN_TONE' => "\u{1F6CC}\u{1F3FF}", 'CHARACTER_MAN_IN_SUIT_LEVITATING' => "\u{1F574}\u{FE0F}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_LIGHT_SKIN_TONE' => "\u{1F574}\u{1F3FB}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F574}\u{1F3FC}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_SKIN_TONE' => "\u{1F574}\u{1F3FD}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_DARK_SKIN_TONE' => "\u{1F574}\u{1F3FE}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_DARK_SKIN_TONE' => "\u{1F574}\u{1F3FF}", 'CHARACTER_SPEAKING_HEAD' => "\u{1F5E3}\u{FE0F}", 'CHARACTER_BUST_IN_SILHOUETTE' => "\u{1F464}", 'CHARACTER_BUSTS_IN_SILHOUETTE' => "\u{1F465}", 'CHARACTER_PERSON_FENCING' => "\u{1F93A}", 'CHARACTER_HORSE_RACING' => "\u{1F3C7}", 'CHARACTER_HORSE_RACING_LIGHT_SKIN_TONE' => "\u{1F3C7}\u{1F3FB}", 'CHARACTER_HORSE_RACING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C7}\u{1F3FC}", 'CHARACTER_HORSE_RACING_MEDIUM_SKIN_TONE' => "\u{1F3C7}\u{1F3FD}", 'CHARACTER_HORSE_RACING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C7}\u{1F3FE}", 'CHARACTER_HORSE_RACING_DARK_SKIN_TONE' => "\u{1F3C7}\u{1F3FF}", 'CHARACTER_SKIER' => "\u{26F7}\u{FE0F}", 'CHARACTER_SNOWBOARDER' => "\u{1F3C2}", 'CHARACTER_SNOWBOARDER_LIGHT_SKIN_TONE' => "\u{1F3C2}\u{1F3FB}", 'CHARACTER_SNOWBOARDER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C2}\u{1F3FC}", 'CHARACTER_SNOWBOARDER_MEDIUM_SKIN_TONE' => "\u{1F3C2}\u{1F3FD}", 'CHARACTER_SNOWBOARDER_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C2}\u{1F3FE}", 'CHARACTER_SNOWBOARDER_DARK_SKIN_TONE' => "\u{1F3C2}\u{1F3FF}", 'CHARACTER_PERSON_GOLFING' => "\u{1F3CC}\u{FE0F}", 'CHARACTER_PERSON_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}", 'CHARACTER_PERSON_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}", 'CHARACTER_PERSON_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}", 'CHARACTER_PERSON_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}", 'CHARACTER_PERSON_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}", 'CHARACTER_MAN_GOLFING' => "\u{1F3CC}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING' => "\u{1F3CC}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SURFING' => "\u{1F3C4}", 'CHARACTER_PERSON_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}", 'CHARACTER_PERSON_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}", 'CHARACTER_PERSON_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}", 'CHARACTER_PERSON_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}", 'CHARACTER_PERSON_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}", 'CHARACTER_MAN_SURFING' => "\u{1F3C4}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SURFING' => "\u{1F3C4}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_ROWING_BOAT' => "\u{1F6A3}", 'CHARACTER_PERSON_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}", 'CHARACTER_PERSON_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}", 'CHARACTER_MAN_ROWING_BOAT' => "\u{1F6A3}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT' => "\u{1F6A3}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SWIMMING' => "\u{1F3CA}", 'CHARACTER_PERSON_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}", 'CHARACTER_PERSON_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}", 'CHARACTER_MAN_SWIMMING' => "\u{1F3CA}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING' => "\u{1F3CA}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BOUNCING_BALL' => "\u{26F9}\u{FE0F}", 'CHARACTER_PERSON_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}", 'CHARACTER_PERSON_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}", 'CHARACTER_MAN_BOUNCING_BALL' => "\u{26F9}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL' => "\u{26F9}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}", 'CHARACTER_MAN_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BIKING' => "\u{1F6B4}", 'CHARACTER_PERSON_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}", 'CHARACTER_PERSON_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}", 'CHARACTER_PERSON_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}", 'CHARACTER_PERSON_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}", 'CHARACTER_PERSON_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}", 'CHARACTER_MAN_BIKING' => "\u{1F6B4}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BIKING' => "\u{1F6B4}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_MOUNTAIN_BIKING' => "\u{1F6B5}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}", 'CHARACTER_MAN_MOUNTAIN_BIKING' => "\u{1F6B5}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING' => "\u{1F6B5}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_RACING_CAR' => "\u{1F3CE}\u{FE0F}", 'CHARACTER_MOTORCYCLE' => "\u{1F3CD}\u{FE0F}", 'CHARACTER_PERSON_CARTWHEELING' => "\u{1F938}", 'CHARACTER_PERSON_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}", 'CHARACTER_PERSON_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}", 'CHARACTER_MAN_CARTWHEELING' => "\u{1F938}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING' => "\u{1F938}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PEOPLE_WRESTLING' => "\u{1F93C}", 'CHARACTER_MEN_WRESTLING' => "\u{1F93C}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMEN_WRESTLING' => "\u{1F93C}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_PLAYING_WATER_POLO' => "\u{1F93D}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}", 'CHARACTER_MAN_PLAYING_WATER_POLO' => "\u{1F93D}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO' => "\u{1F93D}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_PLAYING_HANDBALL' => "\u{1F93E}", 'CHARACTER_PERSON_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}", 'CHARACTER_PERSON_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}", 'CHARACTER_MAN_PLAYING_HANDBALL' => "\u{1F93E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL' => "\u{1F93E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_JUGGLING' => "\u{1F939}", 'CHARACTER_PERSON_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}", 'CHARACTER_PERSON_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}", 'CHARACTER_MAN_JUGGLING' => "\u{1F939}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING' => "\u{1F939}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_AND_WOMAN_HOLDING_HANDS' => "\u{1F46B}", 'CHARACTER_TWO_MEN_HOLDING_HANDS' => "\u{1F46C}", 'CHARACTER_TWO_WOMEN_HOLDING_HANDS' => "\u{1F46D}", 'CHARACTER_KISS' => "\u{1F48F}", 'CHARACTER_KISS_WOMAN_MAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F468}", 'CHARACTER_KISS_MAN_MAN' => "\u{1F468}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F468}", 'CHARACTER_KISS_WOMAN_WOMAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F469}", 'CHARACTER_COUPLE_WITH_HEART' => "\u{1F491}", 'CHARACTER_COUPLE_WITH_HEART_WOMAN_MAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F468}", 'CHARACTER_COUPLE_WITH_HEART_MAN_MAN' => "\u{1F468}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F468}", 'CHARACTER_COUPLE_WITH_HEART_WOMAN_WOMAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F469}", 'CHARACTER_FAMILY' => "\u{1F46A}", 'CHARACTER_FAMILY_MAN_WOMAN_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_MAN_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_GIRL' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_MAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_WOMAN_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_BOY_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL_GIRL' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_BOY' => "\u{1F468}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_GIRL' => "\u{1F468}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_BOY' => "\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_BOY_BOY' => "\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_GIRL' => "\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_GIRL_BOY' => "\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_GIRL_GIRL' => "\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_SELFIE' => "\u{1F933}", 'CHARACTER_SELFIE_LIGHT_SKIN_TONE' => "\u{1F933}\u{1F3FB}", 'CHARACTER_SELFIE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F933}\u{1F3FC}", 'CHARACTER_SELFIE_MEDIUM_SKIN_TONE' => "\u{1F933}\u{1F3FD}", 'CHARACTER_SELFIE_MEDIUM_DARK_SKIN_TONE' => "\u{1F933}\u{1F3FE}", 'CHARACTER_SELFIE_DARK_SKIN_TONE' => "\u{1F933}\u{1F3FF}", 'CHARACTER_FLEXED_BICEPS' => "\u{1F4AA}", 'CHARACTER_FLEXED_BICEPS_LIGHT_SKIN_TONE' => "\u{1F4AA}\u{1F3FB}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F4AA}\u{1F3FC}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_SKIN_TONE' => "\u{1F4AA}\u{1F3FD}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_DARK_SKIN_TONE' => "\u{1F4AA}\u{1F3FE}", 'CHARACTER_FLEXED_BICEPS_DARK_SKIN_TONE' => "\u{1F4AA}\u{1F3FF}", 'CHARACTER_LEG' => "\u{1F9B5}", 'CHARACTER_LEG_LIGHT_SKIN_TONE' => "\u{1F9B5}\u{1F3FB}", 'CHARACTER_LEG_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B5}\u{1F3FC}", 'CHARACTER_LEG_MEDIUM_SKIN_TONE' => "\u{1F9B5}\u{1F3FD}", 'CHARACTER_LEG_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B5}\u{1F3FE}", 'CHARACTER_LEG_DARK_SKIN_TONE' => "\u{1F9B5}\u{1F3FF}", 'CHARACTER_FOOT' => "\u{1F9B6}", 'CHARACTER_FOOT_LIGHT_SKIN_TONE' => "\u{1F9B6}\u{1F3FB}", 'CHARACTER_FOOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B6}\u{1F3FC}", 'CHARACTER_FOOT_MEDIUM_SKIN_TONE' => "\u{1F9B6}\u{1F3FD}", 'CHARACTER_FOOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B6}\u{1F3FE}", 'CHARACTER_FOOT_DARK_SKIN_TONE' => "\u{1F9B6}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT' => "\u{1F448}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_LIGHT_SKIN_TONE' => "\u{1F448}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F448}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_SKIN_TONE' => "\u{1F448}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_DARK_SKIN_TONE' => "\u{1F448}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_DARK_SKIN_TONE' => "\u{1F448}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT' => "\u{1F449}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_LIGHT_SKIN_TONE' => "\u{1F449}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F449}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_SKIN_TONE' => "\u{1F449}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_DARK_SKIN_TONE' => "\u{1F449}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_DARK_SKIN_TONE' => "\u{1F449}\u{1F3FF}", 'CHARACTER_INDEX_POINTING_UP' => "\u{261D}\u{FE0F}", 'CHARACTER_INDEX_POINTING_UP_LIGHT_SKIN_TONE' => "\u{261D}\u{1F3FB}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{261D}\u{1F3FC}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_SKIN_TONE' => "\u{261D}\u{1F3FD}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_DARK_SKIN_TONE' => "\u{261D}\u{1F3FE}", 'CHARACTER_INDEX_POINTING_UP_DARK_SKIN_TONE' => "\u{261D}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP' => "\u{1F446}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_LIGHT_SKIN_TONE' => "\u{1F446}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F446}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_SKIN_TONE' => "\u{1F446}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_DARK_SKIN_TONE' => "\u{1F446}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_DARK_SKIN_TONE' => "\u{1F446}\u{1F3FF}", 'CHARACTER_MIDDLE_FINGER' => "\u{1F595}", 'CHARACTER_MIDDLE_FINGER_LIGHT_SKIN_TONE' => "\u{1F595}\u{1F3FB}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F595}\u{1F3FC}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_SKIN_TONE' => "\u{1F595}\u{1F3FD}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F595}\u{1F3FE}", 'CHARACTER_MIDDLE_FINGER_DARK_SKIN_TONE' => "\u{1F595}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN' => "\u{1F447}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_LIGHT_SKIN_TONE' => "\u{1F447}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F447}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_SKIN_TONE' => "\u{1F447}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_DARK_SKIN_TONE' => "\u{1F447}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_DARK_SKIN_TONE' => "\u{1F447}\u{1F3FF}", 'CHARACTER_VICTORY_HAND' => "\u{270C}\u{FE0F}", 'CHARACTER_VICTORY_HAND_LIGHT_SKIN_TONE' => "\u{270C}\u{1F3FB}", 'CHARACTER_VICTORY_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270C}\u{1F3FC}", 'CHARACTER_VICTORY_HAND_MEDIUM_SKIN_TONE' => "\u{270C}\u{1F3FD}", 'CHARACTER_VICTORY_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270C}\u{1F3FE}", 'CHARACTER_VICTORY_HAND_DARK_SKIN_TONE' => "\u{270C}\u{1F3FF}", 'CHARACTER_CROSSED_FINGERS' => "\u{1F91E}", 'CHARACTER_CROSSED_FINGERS_LIGHT_SKIN_TONE' => "\u{1F91E}\u{1F3FB}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91E}\u{1F3FC}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_SKIN_TONE' => "\u{1F91E}\u{1F3FD}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_DARK_SKIN_TONE' => "\u{1F91E}\u{1F3FE}", 'CHARACTER_CROSSED_FINGERS_DARK_SKIN_TONE' => "\u{1F91E}\u{1F3FF}", 'CHARACTER_VULCAN_SALUTE' => "\u{1F596}", 'CHARACTER_VULCAN_SALUTE_LIGHT_SKIN_TONE' => "\u{1F596}\u{1F3FB}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F596}\u{1F3FC}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_SKIN_TONE' => "\u{1F596}\u{1F3FD}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_DARK_SKIN_TONE' => "\u{1F596}\u{1F3FE}", 'CHARACTER_VULCAN_SALUTE_DARK_SKIN_TONE' => "\u{1F596}\u{1F3FF}", 'CHARACTER_SIGN_OF_THE_HORNS' => "\u{1F918}", 'CHARACTER_SIGN_OF_THE_HORNS_LIGHT_SKIN_TONE' => "\u{1F918}\u{1F3FB}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F918}\u{1F3FC}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_SKIN_TONE' => "\u{1F918}\u{1F3FD}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_DARK_SKIN_TONE' => "\u{1F918}\u{1F3FE}", 'CHARACTER_SIGN_OF_THE_HORNS_DARK_SKIN_TONE' => "\u{1F918}\u{1F3FF}", 'CHARACTER_CALL_ME_HAND' => "\u{1F919}", 'CHARACTER_CALL_ME_HAND_LIGHT_SKIN_TONE' => "\u{1F919}\u{1F3FB}", 'CHARACTER_CALL_ME_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F919}\u{1F3FC}", 'CHARACTER_CALL_ME_HAND_MEDIUM_SKIN_TONE' => "\u{1F919}\u{1F3FD}", 'CHARACTER_CALL_ME_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F919}\u{1F3FE}", 'CHARACTER_CALL_ME_HAND_DARK_SKIN_TONE' => "\u{1F919}\u{1F3FF}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED' => "\u{1F590}\u{FE0F}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_LIGHT_SKIN_TONE' => "\u{1F590}\u{1F3FB}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F590}\u{1F3FC}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_SKIN_TONE' => "\u{1F590}\u{1F3FD}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_DARK_SKIN_TONE' => "\u{1F590}\u{1F3FE}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_DARK_SKIN_TONE' => "\u{1F590}\u{1F3FF}", 'CHARACTER_RAISED_HAND' => "\u{270B}", 'CHARACTER_RAISED_HAND_LIGHT_SKIN_TONE' => "\u{270B}\u{1F3FB}", 'CHARACTER_RAISED_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270B}\u{1F3FC}", 'CHARACTER_RAISED_HAND_MEDIUM_SKIN_TONE' => "\u{270B}\u{1F3FD}", 'CHARACTER_RAISED_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270B}\u{1F3FE}", 'CHARACTER_RAISED_HAND_DARK_SKIN_TONE' => "\u{270B}\u{1F3FF}", 'CHARACTER_OK_HAND' => "\u{1F44C}", 'CHARACTER_OK_HAND_LIGHT_SKIN_TONE' => "\u{1F44C}\u{1F3FB}", 'CHARACTER_OK_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44C}\u{1F3FC}", 'CHARACTER_OK_HAND_MEDIUM_SKIN_TONE' => "\u{1F44C}\u{1F3FD}", 'CHARACTER_OK_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F44C}\u{1F3FE}", 'CHARACTER_OK_HAND_DARK_SKIN_TONE' => "\u{1F44C}\u{1F3FF}", 'CHARACTER_THUMBS_UP' => "\u{1F44D}", 'CHARACTER_THUMBS_UP_LIGHT_SKIN_TONE' => "\u{1F44D}\u{1F3FB}", 'CHARACTER_THUMBS_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44D}\u{1F3FC}", 'CHARACTER_THUMBS_UP_MEDIUM_SKIN_TONE' => "\u{1F44D}\u{1F3FD}", 'CHARACTER_THUMBS_UP_MEDIUM_DARK_SKIN_TONE' => "\u{1F44D}\u{1F3FE}", 'CHARACTER_THUMBS_UP_DARK_SKIN_TONE' => "\u{1F44D}\u{1F3FF}", 'CHARACTER_THUMBS_DOWN' => "\u{1F44E}", 'CHARACTER_THUMBS_DOWN_LIGHT_SKIN_TONE' => "\u{1F44E}\u{1F3FB}", 'CHARACTER_THUMBS_DOWN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44E}\u{1F3FC}", 'CHARACTER_THUMBS_DOWN_MEDIUM_SKIN_TONE' => "\u{1F44E}\u{1F3FD}", 'CHARACTER_THUMBS_DOWN_MEDIUM_DARK_SKIN_TONE' => "\u{1F44E}\u{1F3FE}", 'CHARACTER_THUMBS_DOWN_DARK_SKIN_TONE' => "\u{1F44E}\u{1F3FF}", 'CHARACTER_RAISED_FIST' => "\u{270A}", 'CHARACTER_RAISED_FIST_LIGHT_SKIN_TONE' => "\u{270A}\u{1F3FB}", 'CHARACTER_RAISED_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{270A}\u{1F3FC}", 'CHARACTER_RAISED_FIST_MEDIUM_SKIN_TONE' => "\u{270A}\u{1F3FD}", 'CHARACTER_RAISED_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{270A}\u{1F3FE}", 'CHARACTER_RAISED_FIST_DARK_SKIN_TONE' => "\u{270A}\u{1F3FF}", 'CHARACTER_ONCOMING_FIST' => "\u{1F44A}", 'CHARACTER_ONCOMING_FIST_LIGHT_SKIN_TONE' => "\u{1F44A}\u{1F3FB}", 'CHARACTER_ONCOMING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44A}\u{1F3FC}", 'CHARACTER_ONCOMING_FIST_MEDIUM_SKIN_TONE' => "\u{1F44A}\u{1F3FD}", 'CHARACTER_ONCOMING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F44A}\u{1F3FE}", 'CHARACTER_ONCOMING_FIST_DARK_SKIN_TONE' => "\u{1F44A}\u{1F3FF}", 'CHARACTER_LEFT_FACING_FIST' => "\u{1F91B}", 'CHARACTER_LEFT_FACING_FIST_LIGHT_SKIN_TONE' => "\u{1F91B}\u{1F3FB}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91B}\u{1F3FC}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_SKIN_TONE' => "\u{1F91B}\u{1F3FD}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F91B}\u{1F3FE}", 'CHARACTER_LEFT_FACING_FIST_DARK_SKIN_TONE' => "\u{1F91B}\u{1F3FF}", 'CHARACTER_RIGHT_FACING_FIST' => "\u{1F91C}", 'CHARACTER_RIGHT_FACING_FIST_LIGHT_SKIN_TONE' => "\u{1F91C}\u{1F3FB}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91C}\u{1F3FC}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_SKIN_TONE' => "\u{1F91C}\u{1F3FD}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F91C}\u{1F3FE}", 'CHARACTER_RIGHT_FACING_FIST_DARK_SKIN_TONE' => "\u{1F91C}\u{1F3FF}", 'CHARACTER_RAISED_BACK_OF_HAND' => "\u{1F91A}", 'CHARACTER_RAISED_BACK_OF_HAND_LIGHT_SKIN_TONE' => "\u{1F91A}\u{1F3FB}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91A}\u{1F3FC}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_SKIN_TONE' => "\u{1F91A}\u{1F3FD}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F91A}\u{1F3FE}", 'CHARACTER_RAISED_BACK_OF_HAND_DARK_SKIN_TONE' => "\u{1F91A}\u{1F3FF}", 'CHARACTER_WAVING_HAND' => "\u{1F44B}", 'CHARACTER_WAVING_HAND_LIGHT_SKIN_TONE' => "\u{1F44B}\u{1F3FB}", 'CHARACTER_WAVING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44B}\u{1F3FC}", 'CHARACTER_WAVING_HAND_MEDIUM_SKIN_TONE' => "\u{1F44B}\u{1F3FD}", 'CHARACTER_WAVING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F44B}\u{1F3FE}", 'CHARACTER_WAVING_HAND_DARK_SKIN_TONE' => "\u{1F44B}\u{1F3FF}", 'CHARACTER_LOVE_YOU_GESTURE' => "\u{1F91F}", 'CHARACTER_LOVE_YOU_GESTURE_LIGHT_SKIN_TONE' => "\u{1F91F}\u{1F3FB}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91F}\u{1F3FC}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_SKIN_TONE' => "\u{1F91F}\u{1F3FD}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_DARK_SKIN_TONE' => "\u{1F91F}\u{1F3FE}", 'CHARACTER_LOVE_YOU_GESTURE_DARK_SKIN_TONE' => "\u{1F91F}\u{1F3FF}", 'CHARACTER_WRITING_HAND' => "\u{270D}\u{FE0F}", 'CHARACTER_WRITING_HAND_LIGHT_SKIN_TONE' => "\u{270D}\u{1F3FB}", 'CHARACTER_WRITING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270D}\u{1F3FC}", 'CHARACTER_WRITING_HAND_MEDIUM_SKIN_TONE' => "\u{270D}\u{1F3FD}", 'CHARACTER_WRITING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270D}\u{1F3FE}", 'CHARACTER_WRITING_HAND_DARK_SKIN_TONE' => "\u{270D}\u{1F3FF}", 'CHARACTER_CLAPPING_HANDS' => "\u{1F44F}", 'CHARACTER_CLAPPING_HANDS_LIGHT_SKIN_TONE' => "\u{1F44F}\u{1F3FB}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44F}\u{1F3FC}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_SKIN_TONE' => "\u{1F44F}\u{1F3FD}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F44F}\u{1F3FE}", 'CHARACTER_CLAPPING_HANDS_DARK_SKIN_TONE' => "\u{1F44F}\u{1F3FF}", 'CHARACTER_OPEN_HANDS' => "\u{1F450}", 'CHARACTER_OPEN_HANDS_LIGHT_SKIN_TONE' => "\u{1F450}\u{1F3FB}", 'CHARACTER_OPEN_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F450}\u{1F3FC}", 'CHARACTER_OPEN_HANDS_MEDIUM_SKIN_TONE' => "\u{1F450}\u{1F3FD}", 'CHARACTER_OPEN_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F450}\u{1F3FE}", 'CHARACTER_OPEN_HANDS_DARK_SKIN_TONE' => "\u{1F450}\u{1F3FF}", 'CHARACTER_RAISING_HANDS' => "\u{1F64C}", 'CHARACTER_RAISING_HANDS_LIGHT_SKIN_TONE' => "\u{1F64C}\u{1F3FB}", 'CHARACTER_RAISING_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64C}\u{1F3FC}", 'CHARACTER_RAISING_HANDS_MEDIUM_SKIN_TONE' => "\u{1F64C}\u{1F3FD}", 'CHARACTER_RAISING_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F64C}\u{1F3FE}", 'CHARACTER_RAISING_HANDS_DARK_SKIN_TONE' => "\u{1F64C}\u{1F3FF}", 'CHARACTER_PALMS_UP_TOGETHER' => "\u{1F932}", 'CHARACTER_PALMS_UP_TOGETHER_LIGHT_SKIN_TONE' => "\u{1F932}\u{1F3FB}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F932}\u{1F3FC}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_SKIN_TONE' => "\u{1F932}\u{1F3FD}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F932}\u{1F3FE}", 'CHARACTER_PALMS_UP_TOGETHER_DARK_SKIN_TONE' => "\u{1F932}\u{1F3FF}", 'CHARACTER_FOLDED_HANDS' => "\u{1F64F}", 'CHARACTER_FOLDED_HANDS_LIGHT_SKIN_TONE' => "\u{1F64F}\u{1F3FB}", 'CHARACTER_FOLDED_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64F}\u{1F3FC}", 'CHARACTER_FOLDED_HANDS_MEDIUM_SKIN_TONE' => "\u{1F64F}\u{1F3FD}", 'CHARACTER_FOLDED_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F64F}\u{1F3FE}", 'CHARACTER_FOLDED_HANDS_DARK_SKIN_TONE' => "\u{1F64F}\u{1F3FF}", 'CHARACTER_HANDSHAKE' => "\u{1F91D}", 'CHARACTER_NAIL_POLISH' => "\u{1F485}", 'CHARACTER_NAIL_POLISH_LIGHT_SKIN_TONE' => "\u{1F485}\u{1F3FB}", 'CHARACTER_NAIL_POLISH_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F485}\u{1F3FC}", 'CHARACTER_NAIL_POLISH_MEDIUM_SKIN_TONE' => "\u{1F485}\u{1F3FD}", 'CHARACTER_NAIL_POLISH_MEDIUM_DARK_SKIN_TONE' => "\u{1F485}\u{1F3FE}", 'CHARACTER_NAIL_POLISH_DARK_SKIN_TONE' => "\u{1F485}\u{1F3FF}", 'CHARACTER_EAR' => "\u{1F442}", 'CHARACTER_EAR_LIGHT_SKIN_TONE' => "\u{1F442}\u{1F3FB}", 'CHARACTER_EAR_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F442}\u{1F3FC}", 'CHARACTER_EAR_MEDIUM_SKIN_TONE' => "\u{1F442}\u{1F3FD}", 'CHARACTER_EAR_MEDIUM_DARK_SKIN_TONE' => "\u{1F442}\u{1F3FE}", 'CHARACTER_EAR_DARK_SKIN_TONE' => "\u{1F442}\u{1F3FF}", 'CHARACTER_NOSE' => "\u{1F443}", 'CHARACTER_NOSE_LIGHT_SKIN_TONE' => "\u{1F443}\u{1F3FB}", 'CHARACTER_NOSE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F443}\u{1F3FC}", 'CHARACTER_NOSE_MEDIUM_SKIN_TONE' => "\u{1F443}\u{1F3FD}", 'CHARACTER_NOSE_MEDIUM_DARK_SKIN_TONE' => "\u{1F443}\u{1F3FE}", 'CHARACTER_NOSE_DARK_SKIN_TONE' => "\u{1F443}\u{1F3FF}", 'CHARACTER_RED_HAIRED' => "\u{1F9B0}", 'CHARACTER_CURLY_HAIRED' => "\u{1F9B1}", 'CHARACTER_BALD' => "\u{1F9B2}", 'CHARACTER_WHITE_HAIRED' => "\u{1F9B3}", 'CHARACTER_FOOTPRINTS' => "\u{1F463}", 'CHARACTER_EYES' => "\u{1F440}", 'CHARACTER_EYE' => "\u{1F441}\u{FE0F}", 'CHARACTER_EYE_IN_SPEECH_BUBBLE' => "\u{1F441}\u{FE0F}\u{200D}\u{1F5E8}\u{FE0F}", 'CHARACTER_BRAIN' => "\u{1F9E0}", 'CHARACTER_BONE' => "\u{1F9B4}", 'CHARACTER_TOOTH' => "\u{1F9B7}", 'CHARACTER_TONGUE' => "\u{1F445}", 'CHARACTER_MOUTH' => "\u{1F444}", 'CHARACTER_KISS_MARK' => "\u{1F48B}", 'CHARACTER_HEART_WITH_ARROW' => "\u{1F498}", 'CHARACTER_RED_HEART' => "\u{2764}\u{FE0F}", 'CHARACTER_BEATING_HEART' => "\u{1F493}", 'CHARACTER_BROKEN_HEART' => "\u{1F494}", 'CHARACTER_TWO_HEARTS' => "\u{1F495}", 'CHARACTER_SPARKLING_HEART' => "\u{1F496}", 'CHARACTER_GROWING_HEART' => "\u{1F497}", 'CHARACTER_BLUE_HEART' => "\u{1F499}", 'CHARACTER_GREEN_HEART' => "\u{1F49A}", 'CHARACTER_YELLOW_HEART' => "\u{1F49B}", 'CHARACTER_ORANGE_HEART' => "\u{1F9E1}", 'CHARACTER_PURPLE_HEART' => "\u{1F49C}", 'CHARACTER_BLACK_HEART' => "\u{1F5A4}", 'CHARACTER_HEART_WITH_RIBBON' => "\u{1F49D}", 'CHARACTER_REVOLVING_HEARTS' => "\u{1F49E}", 'CHARACTER_HEART_DECORATION' => "\u{1F49F}", 'CHARACTER_HEAVY_HEART_EXCLAMATION' => "\u{2763}\u{FE0F}", 'CHARACTER_LOVE_LETTER' => "\u{1F48C}", 'CHARACTER_ZZZ' => "\u{1F4A4}", 'CHARACTER_ANGER_SYMBOL' => "\u{1F4A2}", 'CHARACTER_BOMB' => "\u{1F4A3}", 'CHARACTER_COLLISION' => "\u{1F4A5}", 'CHARACTER_SWEAT_DROPLETS' => "\u{1F4A6}", 'CHARACTER_DASHING_AWAY' => "\u{1F4A8}", 'CHARACTER_DIZZY' => "\u{1F4AB}", 'CHARACTER_SPEECH_BALLOON' => "\u{1F4AC}", 'CHARACTER_LEFT_SPEECH_BUBBLE' => "\u{1F5E8}\u{FE0F}", 'CHARACTER_RIGHT_ANGER_BUBBLE' => "\u{1F5EF}\u{FE0F}", 'CHARACTER_THOUGHT_BALLOON' => "\u{1F4AD}", 'CHARACTER_HOLE' => "\u{1F573}\u{FE0F}", 'CHARACTER_GLASSES' => "\u{1F453}", 'CHARACTER_SUNGLASSES' => "\u{1F576}\u{FE0F}", 'CHARACTER_GOGGLES' => "\u{1F97D}", 'CHARACTER_LAB_COAT' => "\u{1F97C}", 'CHARACTER_NECKTIE' => "\u{1F454}", 'CHARACTER_T_SHIRT' => "\u{1F455}", 'CHARACTER_JEANS' => "\u{1F456}", 'CHARACTER_SCARF' => "\u{1F9E3}", 'CHARACTER_GLOVES' => "\u{1F9E4}", 'CHARACTER_COAT' => "\u{1F9E5}", 'CHARACTER_SOCKS' => "\u{1F9E6}", 'CHARACTER_DRESS' => "\u{1F457}", 'CHARACTER_KIMONO' => "\u{1F458}", 'CHARACTER_BIKINI' => "\u{1F459}", 'CHARACTER_WOMAN_S_CLOTHES' => "\u{1F45A}", 'CHARACTER_PURSE' => "\u{1F45B}", 'CHARACTER_HANDBAG' => "\u{1F45C}", 'CHARACTER_CLUTCH_BAG' => "\u{1F45D}", 'CHARACTER_SHOPPING_BAGS' => "\u{1F6CD}\u{FE0F}", 'CHARACTER_SCHOOL_BACKPACK' => "\u{1F392}", 'CHARACTER_MAN_S_SHOE' => "\u{1F45E}", 'CHARACTER_RUNNING_SHOE' => "\u{1F45F}", 'CHARACTER_HIKING_BOOT' => "\u{1F97E}", 'CHARACTER_WOMAN_S_FLAT_SHOE' => "\u{1F97F}", 'CHARACTER_HIGH_HEELED_SHOE' => "\u{1F460}", 'CHARACTER_WOMAN_S_SANDAL' => "\u{1F461}", 'CHARACTER_WOMAN_S_BOOT' => "\u{1F462}", 'CHARACTER_CROWN' => "\u{1F451}", 'CHARACTER_WOMAN_S_HAT' => "\u{1F452}", 'CHARACTER_TOP_HAT' => "\u{1F3A9}", 'CHARACTER_GRADUATION_CAP' => "\u{1F393}", 'CHARACTER_BILLED_CAP' => "\u{1F9E2}", 'CHARACTER_RESCUE_WORKER_S_HELMET' => "\u{26D1}\u{FE0F}", 'CHARACTER_PRAYER_BEADS' => "\u{1F4FF}", 'CHARACTER_LIPSTICK' => "\u{1F484}", 'CHARACTER_RING' => "\u{1F48D}", 'CHARACTER_GEM_STONE' => "\u{1F48E}", 'CHARACTER_MONKEY_FACE' => "\u{1F435}", 'CHARACTER_MONKEY' => "\u{1F412}", 'CHARACTER_GORILLA' => "\u{1F98D}", 'CHARACTER_DOG_FACE' => "\u{1F436}", 'CHARACTER_DOG' => "\u{1F415}", 'CHARACTER_POODLE' => "\u{1F429}", 'CHARACTER_WOLF_FACE' => "\u{1F43A}", 'CHARACTER_FOX_FACE' => "\u{1F98A}", 'CHARACTER_RACCOON' => "\u{1F99D}", 'CHARACTER_CAT_FACE' => "\u{1F431}", 'CHARACTER_CAT' => "\u{1F408}", 'CHARACTER_LION_FACE' => "\u{1F981}", 'CHARACTER_TIGER_FACE' => "\u{1F42F}", 'CHARACTER_TIGER' => "\u{1F405}", 'CHARACTER_LEOPARD' => "\u{1F406}", 'CHARACTER_HORSE_FACE' => "\u{1F434}", 'CHARACTER_HORSE' => "\u{1F40E}", 'CHARACTER_UNICORN_FACE' => "\u{1F984}", 'CHARACTER_ZEBRA' => "\u{1F993}", 'CHARACTER_DEER' => "\u{1F98C}", 'CHARACTER_COW_FACE' => "\u{1F42E}", 'CHARACTER_OX' => "\u{1F402}", 'CHARACTER_WATER_BUFFALO' => "\u{1F403}", 'CHARACTER_COW' => "\u{1F404}", 'CHARACTER_PIG_FACE' => "\u{1F437}", 'CHARACTER_PIG' => "\u{1F416}", 'CHARACTER_BOAR' => "\u{1F417}", 'CHARACTER_PIG_NOSE' => "\u{1F43D}", 'CHARACTER_RAM' => "\u{1F40F}", 'CHARACTER_EWE' => "\u{1F411}", 'CHARACTER_GOAT' => "\u{1F410}", 'CHARACTER_CAMEL' => "\u{1F42A}", 'CHARACTER_TWO_HUMP_CAMEL' => "\u{1F42B}", 'CHARACTER_LLAMA' => "\u{1F999}", 'CHARACTER_GIRAFFE' => "\u{1F992}", 'CHARACTER_ELEPHANT' => "\u{1F418}", 'CHARACTER_RHINOCEROS' => "\u{1F98F}", 'CHARACTER_HIPPOPOTAMUS' => "\u{1F99B}", 'CHARACTER_MOUSE_FACE' => "\u{1F42D}", 'CHARACTER_MOUSE' => "\u{1F401}", 'CHARACTER_RAT' => "\u{1F400}", 'CHARACTER_HAMSTER_FACE' => "\u{1F439}", 'CHARACTER_RABBIT_FACE' => "\u{1F430}", 'CHARACTER_RABBIT' => "\u{1F407}", 'CHARACTER_CHIPMUNK' => "\u{1F43F}\u{FE0F}", 'CHARACTER_HEDGEHOG' => "\u{1F994}", 'CHARACTER_BAT' => "\u{1F987}", 'CHARACTER_BEAR_FACE' => "\u{1F43B}", 'CHARACTER_KOALA' => "\u{1F428}", 'CHARACTER_PANDA_FACE' => "\u{1F43C}", 'CHARACTER_KANGAROO' => "\u{1F998}", 'CHARACTER_BADGER' => "\u{1F9A1}", 'CHARACTER_PAW_PRINTS' => "\u{1F43E}", 'CHARACTER_TURKEY' => "\u{1F983}", 'CHARACTER_CHICKEN' => "\u{1F414}", 'CHARACTER_ROOSTER' => "\u{1F413}", 'CHARACTER_HATCHING_CHICK' => "\u{1F423}", 'CHARACTER_BABY_CHICK' => "\u{1F424}", 'CHARACTER_FRONT_FACING_BABY_CHICK' => "\u{1F425}", 'CHARACTER_BIRD' => "\u{1F426}", 'CHARACTER_PENGUIN' => "\u{1F427}", 'CHARACTER_DOVE' => "\u{1F54A}\u{FE0F}", 'CHARACTER_EAGLE' => "\u{1F985}", 'CHARACTER_DUCK' => "\u{1F986}", 'CHARACTER_SWAN' => "\u{1F9A2}", 'CHARACTER_OWL' => "\u{1F989}", 'CHARACTER_PEACOCK' => "\u{1F99A}", 'CHARACTER_PARROT' => "\u{1F99C}", 'CHARACTER_FROG_FACE' => "\u{1F438}", 'CHARACTER_CROCODILE' => "\u{1F40A}", 'CHARACTER_TURTLE' => "\u{1F422}", 'CHARACTER_LIZARD' => "\u{1F98E}", 'CHARACTER_SNAKE' => "\u{1F40D}", 'CHARACTER_DRAGON_FACE' => "\u{1F432}", 'CHARACTER_DRAGON' => "\u{1F409}", 'CHARACTER_SAUROPOD' => "\u{1F995}", 'CHARACTER_T_REX' => "\u{1F996}", 'CHARACTER_SPOUTING_WHALE' => "\u{1F433}", 'CHARACTER_WHALE' => "\u{1F40B}", 'CHARACTER_DOLPHIN' => "\u{1F42C}", 'CHARACTER_FISH' => "\u{1F41F}", 'CHARACTER_TROPICAL_FISH' => "\u{1F420}", 'CHARACTER_BLOWFISH' => "\u{1F421}", 'CHARACTER_SHARK' => "\u{1F988}", 'CHARACTER_OCTOPUS' => "\u{1F419}", 'CHARACTER_SPIRAL_SHELL' => "\u{1F41A}", 'CHARACTER_CRAB' => "\u{1F980}", 'CHARACTER_LOBSTER' => "\u{1F99E}", 'CHARACTER_SHRIMP' => "\u{1F990}", 'CHARACTER_SQUID' => "\u{1F991}", 'CHARACTER_SNAIL' => "\u{1F40C}", 'CHARACTER_BUTTERFLY' => "\u{1F98B}", 'CHARACTER_BUG' => "\u{1F41B}", 'CHARACTER_ANT' => "\u{1F41C}", 'CHARACTER_HONEYBEE' => "\u{1F41D}", 'CHARACTER_LADY_BEETLE' => "\u{1F41E}", 'CHARACTER_CRICKET' => "\u{1F997}", 'CHARACTER_SPIDER' => "\u{1F577}\u{FE0F}", 'CHARACTER_SPIDER_WEB' => "\u{1F578}\u{FE0F}", 'CHARACTER_SCORPION' => "\u{1F982}", 'CHARACTER_MOSQUITO' => "\u{1F99F}", 'CHARACTER_MICROBE' => "\u{1F9A0}", 'CHARACTER_BOUQUET' => "\u{1F490}", 'CHARACTER_CHERRY_BLOSSOM' => "\u{1F338}", 'CHARACTER_WHITE_FLOWER' => "\u{1F4AE}", 'CHARACTER_ROSETTE' => "\u{1F3F5}\u{FE0F}", 'CHARACTER_ROSE' => "\u{1F339}", 'CHARACTER_WILTED_FLOWER' => "\u{1F940}", 'CHARACTER_HIBISCUS' => "\u{1F33A}", 'CHARACTER_SUNFLOWER' => "\u{1F33B}", 'CHARACTER_BLOSSOM' => "\u{1F33C}", 'CHARACTER_TULIP' => "\u{1F337}", 'CHARACTER_SEEDLING' => "\u{1F331}", 'CHARACTER_EVERGREEN_TREE' => "\u{1F332}", 'CHARACTER_DECIDUOUS_TREE' => "\u{1F333}", 'CHARACTER_PALM_TREE' => "\u{1F334}", 'CHARACTER_CACTUS' => "\u{1F335}", 'CHARACTER_SHEAF_OF_RICE' => "\u{1F33E}", 'CHARACTER_HERB' => "\u{1F33F}", 'CHARACTER_SHAMROCK' => "\u{2618}\u{FE0F}", 'CHARACTER_FOUR_LEAF_CLOVER' => "\u{1F340}", 'CHARACTER_MAPLE_LEAF' => "\u{1F341}", 'CHARACTER_FALLEN_LEAF' => "\u{1F342}", 'CHARACTER_LEAF_FLUTTERING_IN_WIND' => "\u{1F343}", 'CHARACTER_GRAPES' => "\u{1F347}", 'CHARACTER_MELON' => "\u{1F348}", 'CHARACTER_WATERMELON' => "\u{1F349}", 'CHARACTER_TANGERINE' => "\u{1F34A}", 'CHARACTER_LEMON' => "\u{1F34B}", 'CHARACTER_BANANA' => "\u{1F34C}", 'CHARACTER_PINEAPPLE' => "\u{1F34D}", 'CHARACTER_MANGO' => "\u{1F96D}", 'CHARACTER_RED_APPLE' => "\u{1F34E}", 'CHARACTER_GREEN_APPLE' => "\u{1F34F}", 'CHARACTER_PEAR' => "\u{1F350}", 'CHARACTER_PEACH' => "\u{1F351}", 'CHARACTER_CHERRIES' => "\u{1F352}", 'CHARACTER_STRAWBERRY' => "\u{1F353}", 'CHARACTER_KIWI_FRUIT' => "\u{1F95D}", 'CHARACTER_TOMATO' => "\u{1F345}", 'CHARACTER_COCONUT' => "\u{1F965}", 'CHARACTER_AVOCADO' => "\u{1F951}", 'CHARACTER_EGGPLANT' => "\u{1F346}", 'CHARACTER_POTATO' => "\u{1F954}", 'CHARACTER_CARROT' => "\u{1F955}", 'CHARACTER_EAR_OF_CORN' => "\u{1F33D}", 'CHARACTER_HOT_PEPPER' => "\u{1F336}\u{FE0F}", 'CHARACTER_CUCUMBER' => "\u{1F952}", 'CHARACTER_LEAFY_GREEN' => "\u{1F96C}", 'CHARACTER_BROCCOLI' => "\u{1F966}", 'CHARACTER_MUSHROOM' => "\u{1F344}", 'CHARACTER_PEANUTS' => "\u{1F95C}", 'CHARACTER_CHESTNUT' => "\u{1F330}", 'CHARACTER_BREAD' => "\u{1F35E}", 'CHARACTER_CROISSANT' => "\u{1F950}", 'CHARACTER_BAGUETTE_BREAD' => "\u{1F956}", 'CHARACTER_PRETZEL' => "\u{1F968}", 'CHARACTER_BAGEL' => "\u{1F96F}", 'CHARACTER_PANCAKES' => "\u{1F95E}", 'CHARACTER_CHEESE_WEDGE' => "\u{1F9C0}", 'CHARACTER_MEAT_ON_BONE' => "\u{1F356}", 'CHARACTER_POULTRY_LEG' => "\u{1F357}", 'CHARACTER_CUT_OF_MEAT' => "\u{1F969}", 'CHARACTER_BACON' => "\u{1F953}", 'CHARACTER_HAMBURGER' => "\u{1F354}", 'CHARACTER_FRENCH_FRIES' => "\u{1F35F}", 'CHARACTER_PIZZA' => "\u{1F355}", 'CHARACTER_HOT_DOG' => "\u{1F32D}", 'CHARACTER_SANDWICH' => "\u{1F96A}", 'CHARACTER_TACO' => "\u{1F32E}", 'CHARACTER_BURRITO' => "\u{1F32F}", 'CHARACTER_STUFFED_FLATBREAD' => "\u{1F959}", 'CHARACTER_EGG' => "\u{1F95A}", 'CHARACTER_COOKING' => "\u{1F373}", 'CHARACTER_SHALLOW_PAN_OF_FOOD' => "\u{1F958}", 'CHARACTER_POT_OF_FOOD' => "\u{1F372}", 'CHARACTER_BOWL_WITH_SPOON' => "\u{1F963}", 'CHARACTER_GREEN_SALAD' => "\u{1F957}", 'CHARACTER_POPCORN' => "\u{1F37F}", 'CHARACTER_SALT' => "\u{1F9C2}", 'CHARACTER_CANNED_FOOD' => "\u{1F96B}", 'CHARACTER_BENTO_BOX' => "\u{1F371}", 'CHARACTER_RICE_CRACKER' => "\u{1F358}", 'CHARACTER_RICE_BALL' => "\u{1F359}", 'CHARACTER_COOKED_RICE' => "\u{1F35A}", 'CHARACTER_CURRY_RICE' => "\u{1F35B}", 'CHARACTER_STEAMING_BOWL' => "\u{1F35C}", 'CHARACTER_SPAGHETTI' => "\u{1F35D}", 'CHARACTER_ROASTED_SWEET_POTATO' => "\u{1F360}", 'CHARACTER_ODEN' => "\u{1F362}", 'CHARACTER_SUSHI' => "\u{1F363}", 'CHARACTER_FRIED_SHRIMP' => "\u{1F364}", 'CHARACTER_FISH_CAKE_WITH_SWIRL' => "\u{1F365}", 'CHARACTER_MOON_CAKE' => "\u{1F96E}", 'CHARACTER_DANGO' => "\u{1F361}", 'CHARACTER_DUMPLING' => "\u{1F95F}", 'CHARACTER_FORTUNE_COOKIE' => "\u{1F960}", 'CHARACTER_TAKEOUT_BOX' => "\u{1F961}", 'CHARACTER_SOFT_ICE_CREAM' => "\u{1F366}", 'CHARACTER_SHAVED_ICE' => "\u{1F367}", 'CHARACTER_ICE_CREAM' => "\u{1F368}", 'CHARACTER_DOUGHNUT' => "\u{1F369}", 'CHARACTER_COOKIE' => "\u{1F36A}", 'CHARACTER_BIRTHDAY_CAKE' => "\u{1F382}", 'CHARACTER_SHORTCAKE' => "\u{1F370}", 'CHARACTER_CUPCAKE' => "\u{1F9C1}", 'CHARACTER_PIE' => "\u{1F967}", 'CHARACTER_CHOCOLATE_BAR' => "\u{1F36B}", 'CHARACTER_CANDY' => "\u{1F36C}", 'CHARACTER_LOLLIPOP' => "\u{1F36D}", 'CHARACTER_CUSTARD' => "\u{1F36E}", 'CHARACTER_HONEY_POT' => "\u{1F36F}", 'CHARACTER_BABY_BOTTLE' => "\u{1F37C}", 'CHARACTER_GLASS_OF_MILK' => "\u{1F95B}", 'CHARACTER_HOT_BEVERAGE' => "\u{2615}", 'CHARACTER_TEACUP_WITHOUT_HANDLE' => "\u{1F375}", 'CHARACTER_SAKE' => "\u{1F376}", 'CHARACTER_BOTTLE_WITH_POPPING_CORK' => "\u{1F37E}", 'CHARACTER_WINE_GLASS' => "\u{1F377}", 'CHARACTER_COCKTAIL_GLASS' => "\u{1F378}", 'CHARACTER_TROPICAL_DRINK' => "\u{1F379}", 'CHARACTER_BEER_MUG' => "\u{1F37A}", 'CHARACTER_CLINKING_BEER_MUGS' => "\u{1F37B}", 'CHARACTER_CLINKING_GLASSES' => "\u{1F942}", 'CHARACTER_TUMBLER_GLASS' => "\u{1F943}", 'CHARACTER_CUP_WITH_STRAW' => "\u{1F964}", 'CHARACTER_CHOPSTICKS' => "\u{1F962}", 'CHARACTER_FORK_AND_KNIFE_WITH_PLATE' => "\u{1F37D}\u{FE0F}", 'CHARACTER_FORK_AND_KNIFE' => "\u{1F374}", 'CHARACTER_SPOON' => "\u{1F944}", 'CHARACTER_KITCHEN_KNIFE' => "\u{1F52A}", 'CHARACTER_AMPHORA' => "\u{1F3FA}", 'CHARACTER_GLOBE_SHOWING_EUROPE_AFRICA' => "\u{1F30D}", 'CHARACTER_GLOBE_SHOWING_AMERICAS' => "\u{1F30E}", 'CHARACTER_GLOBE_SHOWING_ASIA_AUSTRALIA' => "\u{1F30F}", 'CHARACTER_GLOBE_WITH_MERIDIANS' => "\u{1F310}", 'CHARACTER_WORLD_MAP' => "\u{1F5FA}\u{FE0F}", 'CHARACTER_MAP_OF_JAPAN' => "\u{1F5FE}", 'CHARACTER_COMPASS' => "\u{1F9ED}", 'CHARACTER_SNOW_CAPPED_MOUNTAIN' => "\u{1F3D4}\u{FE0F}", 'CHARACTER_MOUNTAIN' => "\u{26F0}\u{FE0F}", 'CHARACTER_VOLCANO' => "\u{1F30B}", 'CHARACTER_MOUNT_FUJI' => "\u{1F5FB}", 'CHARACTER_CAMPING' => "\u{1F3D5}\u{FE0F}", 'CHARACTER_BEACH_WITH_UMBRELLA' => "\u{1F3D6}\u{FE0F}", 'CHARACTER_DESERT' => "\u{1F3DC}\u{FE0F}", 'CHARACTER_DESERT_ISLAND' => "\u{1F3DD}\u{FE0F}", 'CHARACTER_NATIONAL_PARK' => "\u{1F3DE}\u{FE0F}", 'CHARACTER_STADIUM' => "\u{1F3DF}\u{FE0F}", 'CHARACTER_CLASSICAL_BUILDING' => "\u{1F3DB}\u{FE0F}", 'CHARACTER_BUILDING_CONSTRUCTION' => "\u{1F3D7}\u{FE0F}", 'CHARACTER_BRICKS' => "\u{1F9F1}", 'CHARACTER_HOUSES' => "\u{1F3D8}\u{FE0F}", 'CHARACTER_DERELICT_HOUSE' => "\u{1F3DA}\u{FE0F}", 'CHARACTER_HOUSE' => "\u{1F3E0}", 'CHARACTER_HOUSE_WITH_GARDEN' => "\u{1F3E1}", 'CHARACTER_OFFICE_BUILDING' => "\u{1F3E2}", 'CHARACTER_JAPANESE_POST_OFFICE' => "\u{1F3E3}", 'CHARACTER_POST_OFFICE' => "\u{1F3E4}", 'CHARACTER_HOSPITAL' => "\u{1F3E5}", 'CHARACTER_BANK' => "\u{1F3E6}", 'CHARACTER_HOTEL' => "\u{1F3E8}", 'CHARACTER_LOVE_HOTEL' => "\u{1F3E9}", 'CHARACTER_CONVENIENCE_STORE' => "\u{1F3EA}", 'CHARACTER_SCHOOL' => "\u{1F3EB}", 'CHARACTER_DEPARTMENT_STORE' => "\u{1F3EC}", 'CHARACTER_FACTORY' => "\u{1F3ED}", 'CHARACTER_JAPANESE_CASTLE' => "\u{1F3EF}", 'CHARACTER_CASTLE' => "\u{1F3F0}", 'CHARACTER_WEDDING' => "\u{1F492}", 'CHARACTER_TOKYO_TOWER' => "\u{1F5FC}", 'CHARACTER_STATUE_OF_LIBERTY' => "\u{1F5FD}", 'CHARACTER_CHURCH' => "\u{26EA}", 'CHARACTER_MOSQUE' => "\u{1F54C}", 'CHARACTER_SYNAGOGUE' => "\u{1F54D}", 'CHARACTER_SHINTO_SHRINE' => "\u{26E9}\u{FE0F}", 'CHARACTER_KAABA' => "\u{1F54B}", 'CHARACTER_FOUNTAIN' => "\u{26F2}", 'CHARACTER_TENT' => "\u{26FA}", 'CHARACTER_FOGGY' => "\u{1F301}", 'CHARACTER_NIGHT_WITH_STARS' => "\u{1F303}", 'CHARACTER_CITYSCAPE' => "\u{1F3D9}\u{FE0F}", 'CHARACTER_SUNRISE_OVER_MOUNTAINS' => "\u{1F304}", 'CHARACTER_SUNRISE' => "\u{1F305}", 'CHARACTER_CITYSCAPE_AT_DUSK' => "\u{1F306}", 'CHARACTER_SUNSET' => "\u{1F307}", 'CHARACTER_BRIDGE_AT_NIGHT' => "\u{1F309}", 'CHARACTER_HOT_SPRINGS' => "\u{2668}\u{FE0F}", 'CHARACTER_MILKY_WAY' => "\u{1F30C}", 'CHARACTER_CAROUSEL_HORSE' => "\u{1F3A0}", 'CHARACTER_FERRIS_WHEEL' => "\u{1F3A1}", 'CHARACTER_ROLLER_COASTER' => "\u{1F3A2}", 'CHARACTER_BARBER_POLE' => "\u{1F488}", 'CHARACTER_CIRCUS_TENT' => "\u{1F3AA}", 'CHARACTER_LOCOMOTIVE' => "\u{1F682}", 'CHARACTER_RAILWAY_CAR' => "\u{1F683}", 'CHARACTER_HIGH_SPEED_TRAIN' => "\u{1F684}", 'CHARACTER_BULLET_TRAIN' => "\u{1F685}", 'CHARACTER_TRAIN' => "\u{1F686}", 'CHARACTER_METRO' => "\u{1F687}", 'CHARACTER_LIGHT_RAIL' => "\u{1F688}", 'CHARACTER_STATION' => "\u{1F689}", 'CHARACTER_TRAM' => "\u{1F68A}", 'CHARACTER_MONORAIL' => "\u{1F69D}", 'CHARACTER_MOUNTAIN_RAILWAY' => "\u{1F69E}", 'CHARACTER_TRAM_CAR' => "\u{1F68B}", 'CHARACTER_BUS' => "\u{1F68C}", 'CHARACTER_ONCOMING_BUS' => "\u{1F68D}", 'CHARACTER_TROLLEYBUS' => "\u{1F68E}", 'CHARACTER_MINIBUS' => "\u{1F690}", 'CHARACTER_AMBULANCE' => "\u{1F691}", 'CHARACTER_FIRE_ENGINE' => "\u{1F692}", 'CHARACTER_POLICE_CAR' => "\u{1F693}", 'CHARACTER_ONCOMING_POLICE_CAR' => "\u{1F694}", 'CHARACTER_TAXI' => "\u{1F695}", 'CHARACTER_ONCOMING_TAXI' => "\u{1F696}", 'CHARACTER_AUTOMOBILE' => "\u{1F697}", 'CHARACTER_ONCOMING_AUTOMOBILE' => "\u{1F698}", 'CHARACTER_SPORT_UTILITY_VEHICLE' => "\u{1F699}", 'CHARACTER_DELIVERY_TRUCK' => "\u{1F69A}", 'CHARACTER_ARTICULATED_LORRY' => "\u{1F69B}", 'CHARACTER_TRACTOR' => "\u{1F69C}", 'CHARACTER_BICYCLE' => "\u{1F6B2}", 'CHARACTER_KICK_SCOOTER' => "\u{1F6F4}", 'CHARACTER_SKATEBOARD' => "\u{1F6F9}", 'CHARACTER_MOTOR_SCOOTER' => "\u{1F6F5}", 'CHARACTER_BUS_STOP' => "\u{1F68F}", 'CHARACTER_MOTORWAY' => "\u{1F6E3}\u{FE0F}", 'CHARACTER_RAILWAY_TRACK' => "\u{1F6E4}\u{FE0F}", 'CHARACTER_OIL_DRUM' => "\u{1F6E2}\u{FE0F}", 'CHARACTER_FUEL_PUMP' => "\u{26FD}", 'CHARACTER_POLICE_CAR_LIGHT' => "\u{1F6A8}", 'CHARACTER_HORIZONTAL_TRAFFIC_LIGHT' => "\u{1F6A5}", 'CHARACTER_VERTICAL_TRAFFIC_LIGHT' => "\u{1F6A6}", 'CHARACTER_STOP_SIGN' => "\u{1F6D1}", 'CHARACTER_CONSTRUCTION' => "\u{1F6A7}", 'CHARACTER_ANCHOR' => "\u{2693}", 'CHARACTER_SAILBOAT' => "\u{26F5}", 'CHARACTER_CANOE' => "\u{1F6F6}", 'CHARACTER_SPEEDBOAT' => "\u{1F6A4}", 'CHARACTER_PASSENGER_SHIP' => "\u{1F6F3}\u{FE0F}", 'CHARACTER_FERRY' => "\u{26F4}\u{FE0F}", 'CHARACTER_MOTOR_BOAT' => "\u{1F6E5}\u{FE0F}", 'CHARACTER_SHIP' => "\u{1F6A2}", 'CHARACTER_AIRPLANE' => "\u{2708}\u{FE0F}", 'CHARACTER_SMALL_AIRPLANE' => "\u{1F6E9}\u{FE0F}", 'CHARACTER_AIRPLANE_DEPARTURE' => "\u{1F6EB}", 'CHARACTER_AIRPLANE_ARRIVAL' => "\u{1F6EC}", 'CHARACTER_SEAT' => "\u{1F4BA}", 'CHARACTER_HELICOPTER' => "\u{1F681}", 'CHARACTER_SUSPENSION_RAILWAY' => "\u{1F69F}", 'CHARACTER_MOUNTAIN_CABLEWAY' => "\u{1F6A0}", 'CHARACTER_AERIAL_TRAMWAY' => "\u{1F6A1}", 'CHARACTER_SATELLITE' => "\u{1F6F0}\u{FE0F}", 'CHARACTER_ROCKET' => "\u{1F680}", 'CHARACTER_FLYING_SAUCER' => "\u{1F6F8}", 'CHARACTER_BELLHOP_BELL' => "\u{1F6CE}\u{FE0F}", 'CHARACTER_LUGGAGE' => "\u{1F9F3}", 'CHARACTER_HOURGLASS_DONE' => "\u{231B}", 'CHARACTER_HOURGLASS_NOT_DONE' => "\u{23F3}", 'CHARACTER_WATCH' => "\u{231A}", 'CHARACTER_ALARM_CLOCK' => "\u{23F0}", 'CHARACTER_STOPWATCH' => "\u{23F1}\u{FE0F}", 'CHARACTER_TIMER_CLOCK' => "\u{23F2}\u{FE0F}", 'CHARACTER_MANTELPIECE_CLOCK' => "\u{1F570}\u{FE0F}", 'CHARACTER_TWELVE_O_CLOCK' => "\u{1F55B}", 'CHARACTER_TWELVE_THIRTY' => "\u{1F567}", 'CHARACTER_ONE_O_CLOCK' => "\u{1F550}", 'CHARACTER_ONE_THIRTY' => "\u{1F55C}", 'CHARACTER_TWO_O_CLOCK' => "\u{1F551}", 'CHARACTER_TWO_THIRTY' => "\u{1F55D}", 'CHARACTER_THREE_O_CLOCK' => "\u{1F552}", 'CHARACTER_THREE_THIRTY' => "\u{1F55E}", 'CHARACTER_FOUR_O_CLOCK' => "\u{1F553}", 'CHARACTER_FOUR_THIRTY' => "\u{1F55F}", 'CHARACTER_FIVE_O_CLOCK' => "\u{1F554}", 'CHARACTER_FIVE_THIRTY' => "\u{1F560}", 'CHARACTER_SIX_O_CLOCK' => "\u{1F555}", 'CHARACTER_SIX_THIRTY' => "\u{1F561}", 'CHARACTER_SEVEN_O_CLOCK' => "\u{1F556}", 'CHARACTER_SEVEN_THIRTY' => "\u{1F562}", 'CHARACTER_EIGHT_O_CLOCK' => "\u{1F557}", 'CHARACTER_EIGHT_THIRTY' => "\u{1F563}", 'CHARACTER_NINE_O_CLOCK' => "\u{1F558}", 'CHARACTER_NINE_THIRTY' => "\u{1F564}", 'CHARACTER_TEN_O_CLOCK' => "\u{1F559}", 'CHARACTER_TEN_THIRTY' => "\u{1F565}", 'CHARACTER_ELEVEN_O_CLOCK' => "\u{1F55A}", 'CHARACTER_ELEVEN_THIRTY' => "\u{1F566}", 'CHARACTER_NEW_MOON' => "\u{1F311}", 'CHARACTER_WAXING_CRESCENT_MOON' => "\u{1F312}", 'CHARACTER_FIRST_QUARTER_MOON' => "\u{1F313}", 'CHARACTER_WAXING_GIBBOUS_MOON' => "\u{1F314}", 'CHARACTER_FULL_MOON' => "\u{1F315}", 'CHARACTER_WANING_GIBBOUS_MOON' => "\u{1F316}", 'CHARACTER_LAST_QUARTER_MOON' => "\u{1F317}", 'CHARACTER_WANING_CRESCENT_MOON' => "\u{1F318}", 'CHARACTER_CRESCENT_MOON' => "\u{1F319}", 'CHARACTER_NEW_MOON_FACE' => "\u{1F31A}", 'CHARACTER_FIRST_QUARTER_MOON_FACE' => "\u{1F31B}", 'CHARACTER_LAST_QUARTER_MOON_FACE' => "\u{1F31C}", 'CHARACTER_THERMOMETER' => "\u{1F321}\u{FE0F}", 'CHARACTER_SUN' => "\u{2600}\u{FE0F}", 'CHARACTER_FULL_MOON_FACE' => "\u{1F31D}", 'CHARACTER_SUN_WITH_FACE' => "\u{1F31E}", 'CHARACTER_STAR' => "\u{2B50}", 'CHARACTER_GLOWING_STAR' => "\u{1F31F}", 'CHARACTER_SHOOTING_STAR' => "\u{1F320}", 'CHARACTER_CLOUD' => "\u{2601}\u{FE0F}", 'CHARACTER_SUN_BEHIND_CLOUD' => "\u{26C5}", 'CHARACTER_CLOUD_WITH_LIGHTNING_AND_RAIN' => "\u{26C8}\u{FE0F}", 'CHARACTER_SUN_BEHIND_SMALL_CLOUD' => "\u{1F324}\u{FE0F}", 'CHARACTER_SUN_BEHIND_LARGE_CLOUD' => "\u{1F325}\u{FE0F}", 'CHARACTER_SUN_BEHIND_RAIN_CLOUD' => "\u{1F326}\u{FE0F}", 'CHARACTER_CLOUD_WITH_RAIN' => "\u{1F327}\u{FE0F}", 'CHARACTER_CLOUD_WITH_SNOW' => "\u{1F328}\u{FE0F}", 'CHARACTER_CLOUD_WITH_LIGHTNING' => "\u{1F329}\u{FE0F}", 'CHARACTER_TORNADO' => "\u{1F32A}\u{FE0F}", 'CHARACTER_FOG' => "\u{1F32B}\u{FE0F}", 'CHARACTER_WIND_FACE' => "\u{1F32C}\u{FE0F}", 'CHARACTER_CYCLONE' => "\u{1F300}", 'CHARACTER_RAINBOW' => "\u{1F308}", 'CHARACTER_CLOSED_UMBRELLA' => "\u{1F302}", 'CHARACTER_UMBRELLA' => "\u{2602}\u{FE0F}", 'CHARACTER_UMBRELLA_WITH_RAIN_DROPS' => "\u{2614}", 'CHARACTER_UMBRELLA_ON_GROUND' => "\u{26F1}\u{FE0F}", 'CHARACTER_HIGH_VOLTAGE' => "\u{26A1}", 'CHARACTER_SNOWFLAKE' => "\u{2744}\u{FE0F}", 'CHARACTER_SNOWMAN' => "\u{2603}\u{FE0F}", 'CHARACTER_SNOWMAN_WITHOUT_SNOW' => "\u{26C4}", 'CHARACTER_COMET' => "\u{2604}\u{FE0F}", 'CHARACTER_FIRE' => "\u{1F525}", 'CHARACTER_DROPLET' => "\u{1F4A7}", 'CHARACTER_WATER_WAVE' => "\u{1F30A}", 'CHARACTER_JACK_O_LANTERN' => "\u{1F383}", 'CHARACTER_CHRISTMAS_TREE' => "\u{1F384}", 'CHARACTER_FIREWORKS' => "\u{1F386}", 'CHARACTER_SPARKLER' => "\u{1F387}", 'CHARACTER_FIRECRACKER' => "\u{1F9E8}", 'CHARACTER_SPARKLES' => "\u{2728}", 'CHARACTER_BALLOON' => "\u{1F388}", 'CHARACTER_PARTY_POPPER' => "\u{1F389}", 'CHARACTER_CONFETTI_BALL' => "\u{1F38A}", 'CHARACTER_TANABATA_TREE' => "\u{1F38B}", 'CHARACTER_PINE_DECORATION' => "\u{1F38D}", 'CHARACTER_JAPANESE_DOLLS' => "\u{1F38E}", 'CHARACTER_CARP_STREAMER' => "\u{1F38F}", 'CHARACTER_WIND_CHIME' => "\u{1F390}", 'CHARACTER_MOON_VIEWING_CEREMONY' => "\u{1F391}", 'CHARACTER_RED_ENVELOPE' => "\u{1F9E7}", 'CHARACTER_RIBBON' => "\u{1F380}", 'CHARACTER_WRAPPED_GIFT' => "\u{1F381}", 'CHARACTER_REMINDER_RIBBON' => "\u{1F397}\u{FE0F}", 'CHARACTER_ADMISSION_TICKETS' => "\u{1F39F}\u{FE0F}", 'CHARACTER_TICKET' => "\u{1F3AB}", 'CHARACTER_MILITARY_MEDAL' => "\u{1F396}\u{FE0F}", 'CHARACTER_TROPHY' => "\u{1F3C6}", 'CHARACTER_SPORTS_MEDAL' => "\u{1F3C5}", 'CHARACTER_1ST_PLACE_MEDAL' => "\u{1F947}", 'CHARACTER_2ND_PLACE_MEDAL' => "\u{1F948}", 'CHARACTER_3RD_PLACE_MEDAL' => "\u{1F949}", 'CHARACTER_SOCCER_BALL' => "\u{26BD}", 'CHARACTER_BASEBALL' => "\u{26BE}", 'CHARACTER_SOFTBALL' => "\u{1F94E}", 'CHARACTER_BASKETBALL' => "\u{1F3C0}", 'CHARACTER_VOLLEYBALL' => "\u{1F3D0}", 'CHARACTER_AMERICAN_FOOTBALL' => "\u{1F3C8}", 'CHARACTER_RUGBY_FOOTBALL' => "\u{1F3C9}", 'CHARACTER_TENNIS' => "\u{1F3BE}", 'CHARACTER_FLYING_DISC' => "\u{1F94F}", 'CHARACTER_BOWLING' => "\u{1F3B3}", 'CHARACTER_CRICKET_GAME' => "\u{1F3CF}", 'CHARACTER_FIELD_HOCKEY' => "\u{1F3D1}", 'CHARACTER_ICE_HOCKEY' => "\u{1F3D2}", 'CHARACTER_LACROSSE' => "\u{1F94D}", 'CHARACTER_PING_PONG' => "\u{1F3D3}", 'CHARACTER_BADMINTON' => "\u{1F3F8}", 'CHARACTER_BOXING_GLOVE' => "\u{1F94A}", 'CHARACTER_MARTIAL_ARTS_UNIFORM' => "\u{1F94B}", 'CHARACTER_GOAL_NET' => "\u{1F945}", 'CHARACTER_FLAG_IN_HOLE' => "\u{26F3}", 'CHARACTER_ICE_SKATE' => "\u{26F8}\u{FE0F}", 'CHARACTER_FISHING_POLE' => "\u{1F3A3}", 'CHARACTER_RUNNING_SHIRT' => "\u{1F3BD}", 'CHARACTER_SKIS' => "\u{1F3BF}", 'CHARACTER_SLED' => "\u{1F6F7}", 'CHARACTER_CURLING_STONE' => "\u{1F94C}", 'CHARACTER_DIRECT_HIT' => "\u{1F3AF}", 'CHARACTER_POOL_8_BALL' => "\u{1F3B1}", 'CHARACTER_CRYSTAL_BALL' => "\u{1F52E}", 'CHARACTER_NAZAR_AMULET' => "\u{1F9FF}", 'CHARACTER_VIDEO_GAME' => "\u{1F3AE}", 'CHARACTER_JOYSTICK' => "\u{1F579}\u{FE0F}", 'CHARACTER_SLOT_MACHINE' => "\u{1F3B0}", 'CHARACTER_GAME_DIE' => "\u{1F3B2}", 'CHARACTER_JIGSAW' => "\u{1F9E9}", 'CHARACTER_TEDDY_BEAR' => "\u{1F9F8}", 'CHARACTER_SPADE_SUIT' => "\u{2660}\u{FE0F}", 'CHARACTER_HEART_SUIT' => "\u{2665}\u{FE0F}", 'CHARACTER_DIAMOND_SUIT' => "\u{2666}\u{FE0F}", 'CHARACTER_CLUB_SUIT' => "\u{2663}\u{FE0F}", 'CHARACTER_CHESS_PAWN' => "\u{265F}\u{FE0F}", 'CHARACTER_JOKER' => "\u{1F0CF}", 'CHARACTER_MAHJONG_RED_DRAGON' => "\u{1F004}", 'CHARACTER_FLOWER_PLAYING_CARDS' => "\u{1F3B4}", 'CHARACTER_PERFORMING_ARTS' => "\u{1F3AD}", 'CHARACTER_FRAMED_PICTURE' => "\u{1F5BC}\u{FE0F}", 'CHARACTER_ARTIST_PALETTE' => "\u{1F3A8}", 'CHARACTER_THREAD' => "\u{1F9F5}", 'CHARACTER_YARN' => "\u{1F9F6}", 'CHARACTER_MUTED_SPEAKER' => "\u{1F507}", 'CHARACTER_SPEAKER_LOW_VOLUME' => "\u{1F508}", 'CHARACTER_SPEAKER_MEDIUM_VOLUME' => "\u{1F509}", 'CHARACTER_SPEAKER_HIGH_VOLUME' => "\u{1F50A}", 'CHARACTER_LOUDSPEAKER' => "\u{1F4E2}", 'CHARACTER_MEGAPHONE' => "\u{1F4E3}", 'CHARACTER_POSTAL_HORN' => "\u{1F4EF}", 'CHARACTER_BELL' => "\u{1F514}", 'CHARACTER_BELL_WITH_SLASH' => "\u{1F515}", 'CHARACTER_MUSICAL_SCORE' => "\u{1F3BC}", 'CHARACTER_MUSICAL_NOTE' => "\u{1F3B5}", 'CHARACTER_MUSICAL_NOTES' => "\u{1F3B6}", 'CHARACTER_STUDIO_MICROPHONE' => "\u{1F399}\u{FE0F}", 'CHARACTER_LEVEL_SLIDER' => "\u{1F39A}\u{FE0F}", 'CHARACTER_CONTROL_KNOBS' => "\u{1F39B}\u{FE0F}", 'CHARACTER_MICROPHONE' => "\u{1F3A4}", 'CHARACTER_HEADPHONE' => "\u{1F3A7}", 'CHARACTER_RADIO' => "\u{1F4FB}", 'CHARACTER_SAXOPHONE' => "\u{1F3B7}", 'CHARACTER_GUITAR' => "\u{1F3B8}", 'CHARACTER_MUSICAL_KEYBOARD' => "\u{1F3B9}", 'CHARACTER_TRUMPET' => "\u{1F3BA}", 'CHARACTER_VIOLIN' => "\u{1F3BB}", 'CHARACTER_DRUM' => "\u{1F941}", 'CHARACTER_MOBILE_PHONE' => "\u{1F4F1}", 'CHARACTER_MOBILE_PHONE_WITH_ARROW' => "\u{1F4F2}", 'CHARACTER_TELEPHONE' => "\u{260E}\u{FE0F}", 'CHARACTER_TELEPHONE_RECEIVER' => "\u{1F4DE}", 'CHARACTER_PAGER' => "\u{1F4DF}", 'CHARACTER_FAX_MACHINE' => "\u{1F4E0}", 'CHARACTER_BATTERY' => "\u{1F50B}", 'CHARACTER_ELECTRIC_PLUG' => "\u{1F50C}", 'CHARACTER_LAPTOP_COMPUTER' => "\u{1F4BB}", 'CHARACTER_DESKTOP_COMPUTER' => "\u{1F5A5}\u{FE0F}", 'CHARACTER_PRINTER' => "\u{1F5A8}\u{FE0F}", 'CHARACTER_KEYBOARD' => "\u{2328}\u{FE0F}", 'CHARACTER_COMPUTER_MOUSE' => "\u{1F5B1}\u{FE0F}", 'CHARACTER_TRACKBALL' => "\u{1F5B2}\u{FE0F}", 'CHARACTER_COMPUTER_DISK' => "\u{1F4BD}", 'CHARACTER_FLOPPY_DISK' => "\u{1F4BE}", 'CHARACTER_OPTICAL_DISK' => "\u{1F4BF}", 'CHARACTER_DVD' => "\u{1F4C0}", 'CHARACTER_ABACUS' => "\u{1F9EE}", 'CHARACTER_MOVIE_CAMERA' => "\u{1F3A5}", 'CHARACTER_FILM_FRAMES' => "\u{1F39E}\u{FE0F}", 'CHARACTER_FILM_PROJECTOR' => "\u{1F4FD}\u{FE0F}", 'CHARACTER_CLAPPER_BOARD' => "\u{1F3AC}", 'CHARACTER_TELEVISION' => "\u{1F4FA}", 'CHARACTER_CAMERA' => "\u{1F4F7}", 'CHARACTER_CAMERA_WITH_FLASH' => "\u{1F4F8}", 'CHARACTER_VIDEO_CAMERA' => "\u{1F4F9}", 'CHARACTER_VIDEOCASSETTE' => "\u{1F4FC}", 'CHARACTER_MAGNIFYING_GLASS_TILTED_LEFT' => "\u{1F50D}", 'CHARACTER_MAGNIFYING_GLASS_TILTED_RIGHT' => "\u{1F50E}", 'CHARACTER_CANDLE' => "\u{1F56F}\u{FE0F}", 'CHARACTER_LIGHT_BULB' => "\u{1F4A1}", 'CHARACTER_FLASHLIGHT' => "\u{1F526}", 'CHARACTER_RED_PAPER_LANTERN' => "\u{1F3EE}", 'CHARACTER_NOTEBOOK_WITH_DECORATIVE_COVER' => "\u{1F4D4}", 'CHARACTER_CLOSED_BOOK' => "\u{1F4D5}", 'CHARACTER_OPEN_BOOK' => "\u{1F4D6}", 'CHARACTER_GREEN_BOOK' => "\u{1F4D7}", 'CHARACTER_BLUE_BOOK' => "\u{1F4D8}", 'CHARACTER_ORANGE_BOOK' => "\u{1F4D9}", 'CHARACTER_BOOKS' => "\u{1F4DA}", 'CHARACTER_NOTEBOOK' => "\u{1F4D3}", 'CHARACTER_LEDGER' => "\u{1F4D2}", 'CHARACTER_PAGE_WITH_CURL' => "\u{1F4C3}", 'CHARACTER_SCROLL' => "\u{1F4DC}", 'CHARACTER_PAGE_FACING_UP' => "\u{1F4C4}", 'CHARACTER_NEWSPAPER' => "\u{1F4F0}", 'CHARACTER_ROLLED_UP_NEWSPAPER' => "\u{1F5DE}\u{FE0F}", 'CHARACTER_BOOKMARK_TABS' => "\u{1F4D1}", 'CHARACTER_BOOKMARK' => "\u{1F516}", 'CHARACTER_LABEL' => "\u{1F3F7}\u{FE0F}", 'CHARACTER_MONEY_BAG' => "\u{1F4B0}", 'CHARACTER_YEN_BANKNOTE' => "\u{1F4B4}", 'CHARACTER_DOLLAR_BANKNOTE' => "\u{1F4B5}", 'CHARACTER_EURO_BANKNOTE' => "\u{1F4B6}", 'CHARACTER_POUND_BANKNOTE' => "\u{1F4B7}", 'CHARACTER_MONEY_WITH_WINGS' => "\u{1F4B8}", 'CHARACTER_CREDIT_CARD' => "\u{1F4B3}", 'CHARACTER_RECEIPT' => "\u{1F9FE}", 'CHARACTER_CHART_INCREASING_WITH_YEN' => "\u{1F4B9}", 'CHARACTER_CURRENCY_EXCHANGE' => "\u{1F4B1}", 'CHARACTER_HEAVY_DOLLAR_SIGN' => "\u{1F4B2}", 'CHARACTER_ENVELOPE' => "\u{2709}\u{FE0F}", 'CHARACTER_E_MAIL' => "\u{1F4E7}", 'CHARACTER_INCOMING_ENVELOPE' => "\u{1F4E8}", 'CHARACTER_ENVELOPE_WITH_ARROW' => "\u{1F4E9}", 'CHARACTER_OUTBOX_TRAY' => "\u{1F4E4}", 'CHARACTER_INBOX_TRAY' => "\u{1F4E5}", 'CHARACTER_PACKAGE' => "\u{1F4E6}", 'CHARACTER_CLOSED_MAILBOX_WITH_RAISED_FLAG' => "\u{1F4EB}", 'CHARACTER_CLOSED_MAILBOX_WITH_LOWERED_FLAG' => "\u{1F4EA}", 'CHARACTER_OPEN_MAILBOX_WITH_RAISED_FLAG' => "\u{1F4EC}", 'CHARACTER_OPEN_MAILBOX_WITH_LOWERED_FLAG' => "\u{1F4ED}", 'CHARACTER_POSTBOX' => "\u{1F4EE}", 'CHARACTER_BALLOT_BOX_WITH_BALLOT' => "\u{1F5F3}\u{FE0F}", 'CHARACTER_PENCIL' => "\u{270F}\u{FE0F}", 'CHARACTER_BLACK_NIB' => "\u{2712}\u{FE0F}", 'CHARACTER_FOUNTAIN_PEN' => "\u{1F58B}\u{FE0F}", 'CHARACTER_PEN' => "\u{1F58A}\u{FE0F}", 'CHARACTER_PAINTBRUSH' => "\u{1F58C}\u{FE0F}", 'CHARACTER_CRAYON' => "\u{1F58D}\u{FE0F}", 'CHARACTER_MEMO' => "\u{1F4DD}", 'CHARACTER_BRIEFCASE' => "\u{1F4BC}", 'CHARACTER_FILE_FOLDER' => "\u{1F4C1}", 'CHARACTER_OPEN_FILE_FOLDER' => "\u{1F4C2}", 'CHARACTER_CARD_INDEX_DIVIDERS' => "\u{1F5C2}\u{FE0F}", 'CHARACTER_CALENDAR' => "\u{1F4C5}", 'CHARACTER_TEAR_OFF_CALENDAR' => "\u{1F4C6}", 'CHARACTER_SPIRAL_NOTEPAD' => "\u{1F5D2}\u{FE0F}", 'CHARACTER_SPIRAL_CALENDAR' => "\u{1F5D3}\u{FE0F}", 'CHARACTER_CARD_INDEX' => "\u{1F4C7}", 'CHARACTER_CHART_INCREASING' => "\u{1F4C8}", 'CHARACTER_CHART_DECREASING' => "\u{1F4C9}", 'CHARACTER_BAR_CHART' => "\u{1F4CA}", 'CHARACTER_CLIPBOARD' => "\u{1F4CB}", 'CHARACTER_PUSHPIN' => "\u{1F4CC}", 'CHARACTER_ROUND_PUSHPIN' => "\u{1F4CD}", 'CHARACTER_PAPERCLIP' => "\u{1F4CE}", 'CHARACTER_LINKED_PAPERCLIPS' => "\u{1F587}\u{FE0F}", 'CHARACTER_STRAIGHT_RULER' => "\u{1F4CF}", 'CHARACTER_TRIANGULAR_RULER' => "\u{1F4D0}", 'CHARACTER_SCISSORS' => "\u{2702}\u{FE0F}", 'CHARACTER_CARD_FILE_BOX' => "\u{1F5C3}\u{FE0F}", 'CHARACTER_FILE_CABINET' => "\u{1F5C4}\u{FE0F}", 'CHARACTER_WASTEBASKET' => "\u{1F5D1}\u{FE0F}", 'CHARACTER_LOCKED' => "\u{1F512}", 'CHARACTER_UNLOCKED' => "\u{1F513}", 'CHARACTER_LOCKED_WITH_PEN' => "\u{1F50F}", 'CHARACTER_LOCKED_WITH_KEY' => "\u{1F510}", 'CHARACTER_KEY' => "\u{1F511}", 'CHARACTER_OLD_KEY' => "\u{1F5DD}\u{FE0F}", 'CHARACTER_HAMMER' => "\u{1F528}", 'CHARACTER_PICK' => "\u{26CF}\u{FE0F}", 'CHARACTER_HAMMER_AND_PICK' => "\u{2692}\u{FE0F}", 'CHARACTER_HAMMER_AND_WRENCH' => "\u{1F6E0}\u{FE0F}", 'CHARACTER_DAGGER' => "\u{1F5E1}\u{FE0F}", 'CHARACTER_CROSSED_SWORDS' => "\u{2694}\u{FE0F}", 'CHARACTER_PISTOL' => "\u{1F52B}", 'CHARACTER_BOW_AND_ARROW' => "\u{1F3F9}", 'CHARACTER_SHIELD' => "\u{1F6E1}\u{FE0F}", 'CHARACTER_WRENCH' => "\u{1F527}", 'CHARACTER_NUT_AND_BOLT' => "\u{1F529}", 'CHARACTER_GEAR' => "\u{2699}\u{FE0F}", 'CHARACTER_CLAMP' => "\u{1F5DC}\u{FE0F}", 'CHARACTER_BALANCE_SCALE' => "\u{2696}\u{FE0F}", 'CHARACTER_LINK' => "\u{1F517}", 'CHARACTER_CHAINS' => "\u{26D3}\u{FE0F}", 'CHARACTER_TOOLBOX' => "\u{1F9F0}", 'CHARACTER_MAGNET' => "\u{1F9F2}", 'CHARACTER_ALEMBIC' => "\u{2697}\u{FE0F}", 'CHARACTER_TEST_TUBE' => "\u{1F9EA}", 'CHARACTER_PETRI_DISH' => "\u{1F9EB}", 'CHARACTER_DNA' => "\u{1F9EC}", 'CHARACTER_MICROSCOPE' => "\u{1F52C}", 'CHARACTER_TELESCOPE' => "\u{1F52D}", 'CHARACTER_SATELLITE_ANTENNA' => "\u{1F4E1}", 'CHARACTER_SYRINGE' => "\u{1F489}", 'CHARACTER_PILL' => "\u{1F48A}", 'CHARACTER_DOOR' => "\u{1F6AA}", 'CHARACTER_BED' => "\u{1F6CF}\u{FE0F}", 'CHARACTER_COUCH_AND_LAMP' => "\u{1F6CB}\u{FE0F}", 'CHARACTER_TOILET' => "\u{1F6BD}", 'CHARACTER_SHOWER' => "\u{1F6BF}", 'CHARACTER_BATHTUB' => "\u{1F6C1}", 'CHARACTER_LOTION_BOTTLE' => "\u{1F9F4}", 'CHARACTER_SAFETY_PIN' => "\u{1F9F7}", 'CHARACTER_BROOM' => "\u{1F9F9}", 'CHARACTER_BASKET' => "\u{1F9FA}", 'CHARACTER_ROLL_OF_PAPER' => "\u{1F9FB}", 'CHARACTER_SOAP' => "\u{1F9FC}", 'CHARACTER_SPONGE' => "\u{1F9FD}", 'CHARACTER_FIRE_EXTINGUISHER' => "\u{1F9EF}", 'CHARACTER_SHOPPING_CART' => "\u{1F6D2}", 'CHARACTER_CIGARETTE' => "\u{1F6AC}", 'CHARACTER_COFFIN' => "\u{26B0}\u{FE0F}", 'CHARACTER_FUNERAL_URN' => "\u{26B1}\u{FE0F}", 'CHARACTER_MOAI' => "\u{1F5FF}", 'CHARACTER_ATM_SIGN' => "\u{1F3E7}", 'CHARACTER_LITTER_IN_BIN_SIGN' => "\u{1F6AE}", 'CHARACTER_POTABLE_WATER' => "\u{1F6B0}", 'CHARACTER_WHEELCHAIR_SYMBOL' => "\u{267F}", 'CHARACTER_MEN_S_ROOM' => "\u{1F6B9}", 'CHARACTER_WOMEN_S_ROOM' => "\u{1F6BA}", 'CHARACTER_RESTROOM' => "\u{1F6BB}", 'CHARACTER_BABY_SYMBOL' => "\u{1F6BC}", 'CHARACTER_WATER_CLOSET' => "\u{1F6BE}", 'CHARACTER_PASSPORT_CONTROL' => "\u{1F6C2}", 'CHARACTER_CUSTOMS' => "\u{1F6C3}", 'CHARACTER_BAGGAGE_CLAIM' => "\u{1F6C4}", 'CHARACTER_LEFT_LUGGAGE' => "\u{1F6C5}", 'CHARACTER_WARNING' => "\u{26A0}\u{FE0F}", 'CHARACTER_CHILDREN_CROSSING' => "\u{1F6B8}", 'CHARACTER_NO_ENTRY' => "\u{26D4}", 'CHARACTER_PROHIBITED' => "\u{1F6AB}", 'CHARACTER_NO_BICYCLES' => "\u{1F6B3}", 'CHARACTER_NO_SMOKING' => "\u{1F6AD}", 'CHARACTER_NO_LITTERING' => "\u{1F6AF}", 'CHARACTER_NON_POTABLE_WATER' => "\u{1F6B1}", 'CHARACTER_NO_PEDESTRIANS' => "\u{1F6B7}", 'CHARACTER_NO_MOBILE_PHONES' => "\u{1F4F5}", 'CHARACTER_NO_ONE_UNDER_EIGHTEEN' => "\u{1F51E}", 'CHARACTER_RADIOACTIVE' => "\u{2622}\u{FE0F}", 'CHARACTER_BIOHAZARD' => "\u{2623}\u{FE0F}", 'CHARACTER_UP_ARROW' => "\u{2B06}\u{FE0F}", 'CHARACTER_UP_RIGHT_ARROW' => "\u{2197}\u{FE0F}", 'CHARACTER_RIGHT_ARROW' => "\u{27A1}\u{FE0F}", 'CHARACTER_DOWN_RIGHT_ARROW' => "\u{2198}\u{FE0F}", 'CHARACTER_DOWN_ARROW' => "\u{2B07}\u{FE0F}", 'CHARACTER_DOWN_LEFT_ARROW' => "\u{2199}\u{FE0F}", 'CHARACTER_LEFT_ARROW' => "\u{2B05}\u{FE0F}", 'CHARACTER_UP_LEFT_ARROW' => "\u{2196}\u{FE0F}", 'CHARACTER_UP_DOWN_ARROW' => "\u{2195}\u{FE0F}", 'CHARACTER_LEFT_RIGHT_ARROW' => "\u{2194}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_LEFT' => "\u{21A9}\u{FE0F}", 'CHARACTER_LEFT_ARROW_CURVING_RIGHT' => "\u{21AA}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_UP' => "\u{2934}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_DOWN' => "\u{2935}\u{FE0F}", 'CHARACTER_CLOCKWISE_VERTICAL_ARROWS' => "\u{1F503}", 'CHARACTER_COUNTERCLOCKWISE_ARROWS_BUTTON' => "\u{1F504}", 'CHARACTER_BACK_ARROW' => "\u{1F519}", 'CHARACTER_END_ARROW' => "\u{1F51A}", 'CHARACTER_ON_ARROW' => "\u{1F51B}", 'CHARACTER_SOON_ARROW' => "\u{1F51C}", 'CHARACTER_TOP_ARROW' => "\u{1F51D}", 'CHARACTER_PLACE_OF_WORSHIP' => "\u{1F6D0}", 'CHARACTER_ATOM_SYMBOL' => "\u{269B}\u{FE0F}", 'CHARACTER_OM' => "\u{1F549}\u{FE0F}", 'CHARACTER_STAR_OF_DAVID' => "\u{2721}\u{FE0F}", 'CHARACTER_WHEEL_OF_DHARMA' => "\u{2638}\u{FE0F}", 'CHARACTER_YIN_YANG' => "\u{262F}\u{FE0F}", 'CHARACTER_LATIN_CROSS' => "\u{271D}\u{FE0F}", 'CHARACTER_ORTHODOX_CROSS' => "\u{2626}\u{FE0F}", 'CHARACTER_STAR_AND_CRESCENT' => "\u{262A}\u{FE0F}", 'CHARACTER_PEACE_SYMBOL' => "\u{262E}\u{FE0F}", 'CHARACTER_MENORAH' => "\u{1F54E}", 'CHARACTER_DOTTED_SIX_POINTED_STAR' => "\u{1F52F}", 'CHARACTER_ARIES' => "\u{2648}", 'CHARACTER_TAURUS' => "\u{2649}", 'CHARACTER_GEMINI' => "\u{264A}", 'CHARACTER_CANCER' => "\u{264B}", 'CHARACTER_LEO' => "\u{264C}", 'CHARACTER_VIRGO' => "\u{264D}", 'CHARACTER_LIBRA' => "\u{264E}", 'CHARACTER_SCORPIO' => "\u{264F}", 'CHARACTER_SAGITTARIUS' => "\u{2650}", 'CHARACTER_CAPRICORN' => "\u{2651}", 'CHARACTER_AQUARIUS' => "\u{2652}", 'CHARACTER_PISCES' => "\u{2653}", 'CHARACTER_OPHIUCHUS' => "\u{26CE}", 'CHARACTER_SHUFFLE_TRACKS_BUTTON' => "\u{1F500}", 'CHARACTER_REPEAT_BUTTON' => "\u{1F501}", 'CHARACTER_REPEAT_SINGLE_BUTTON' => "\u{1F502}", 'CHARACTER_PLAY_BUTTON' => "\u{25B6}\u{FE0F}", 'CHARACTER_FAST_FORWARD_BUTTON' => "\u{23E9}", 'CHARACTER_NEXT_TRACK_BUTTON' => "\u{23ED}\u{FE0F}", 'CHARACTER_PLAY_OR_PAUSE_BUTTON' => "\u{23EF}\u{FE0F}", 'CHARACTER_REVERSE_BUTTON' => "\u{25C0}\u{FE0F}", 'CHARACTER_FAST_REVERSE_BUTTON' => "\u{23EA}", 'CHARACTER_LAST_TRACK_BUTTON' => "\u{23EE}\u{FE0F}", 'CHARACTER_UPWARDS_BUTTON' => "\u{1F53C}", 'CHARACTER_FAST_UP_BUTTON' => "\u{23EB}", 'CHARACTER_DOWNWARDS_BUTTON' => "\u{1F53D}", 'CHARACTER_FAST_DOWN_BUTTON' => "\u{23EC}", 'CHARACTER_PAUSE_BUTTON' => "\u{23F8}\u{FE0F}", 'CHARACTER_STOP_BUTTON' => "\u{23F9}\u{FE0F}", 'CHARACTER_RECORD_BUTTON' => "\u{23FA}\u{FE0F}", 'CHARACTER_EJECT_BUTTON' => "\u{23CF}\u{FE0F}", 'CHARACTER_CINEMA' => "\u{1F3A6}", 'CHARACTER_DIM_BUTTON' => "\u{1F505}", 'CHARACTER_BRIGHT_BUTTON' => "\u{1F506}", 'CHARACTER_ANTENNA_BARS' => "\u{1F4F6}", 'CHARACTER_VIBRATION_MODE' => "\u{1F4F3}", 'CHARACTER_MOBILE_PHONE_OFF' => "\u{1F4F4}", 'CHARACTER_FEMALE_SIGN' => "\u{2640}\u{FE0F}", 'CHARACTER_MALE_SIGN' => "\u{2642}\u{FE0F}", 'CHARACTER_MEDICAL_SYMBOL' => "\u{2695}\u{FE0F}", 'CHARACTER_INFINITY' => "\u{267E}\u{FE0F}", 'CHARACTER_RECYCLING_SYMBOL' => "\u{267B}\u{FE0F}", 'CHARACTER_FLEUR_DE_LIS' => "\u{269C}\u{FE0F}", 'CHARACTER_TRIDENT_EMBLEM' => "\u{1F531}", 'CHARACTER_NAME_BADGE' => "\u{1F4DB}", 'CHARACTER_JAPANESE_SYMBOL_FOR_BEGINNER' => "\u{1F530}", 'CHARACTER_HEAVY_LARGE_CIRCLE' => "\u{2B55}", 'CHARACTER_WHITE_HEAVY_CHECK_MARK' => "\u{2705}", 'CHARACTER_BALLOT_BOX_WITH_CHECK' => "\u{2611}\u{FE0F}", 'CHARACTER_HEAVY_CHECK_MARK' => "\u{2714}\u{FE0F}", 'CHARACTER_HEAVY_MULTIPLICATION_X' => "\u{2716}\u{FE0F}", 'CHARACTER_CROSS_MARK' => "\u{274C}", 'CHARACTER_CROSS_MARK_BUTTON' => "\u{274E}", 'CHARACTER_HEAVY_PLUS_SIGN' => "\u{2795}", 'CHARACTER_HEAVY_MINUS_SIGN' => "\u{2796}", 'CHARACTER_HEAVY_DIVISION_SIGN' => "\u{2797}", 'CHARACTER_CURLY_LOOP' => "\u{27B0}", 'CHARACTER_DOUBLE_CURLY_LOOP' => "\u{27BF}", 'CHARACTER_PART_ALTERNATION_MARK' => "\u{303D}\u{FE0F}", 'CHARACTER_EIGHT_SPOKED_ASTERISK' => "\u{2733}\u{FE0F}", 'CHARACTER_EIGHT_POINTED_STAR' => "\u{2734}\u{FE0F}", 'CHARACTER_SPARKLE' => "\u{2747}\u{FE0F}", 'CHARACTER_DOUBLE_EXCLAMATION_MARK' => "\u{203C}\u{FE0F}", 'CHARACTER_EXCLAMATION_QUESTION_MARK' => "\u{2049}\u{FE0F}", 'CHARACTER_QUESTION_MARK' => "\u{2753}", 'CHARACTER_WHITE_QUESTION_MARK' => "\u{2754}", 'CHARACTER_WHITE_EXCLAMATION_MARK' => "\u{2755}", 'CHARACTER_EXCLAMATION_MARK' => "\u{2757}", 'CHARACTER_WAVY_DASH' => "\u{3030}\u{FE0F}", 'CHARACTER_COPYRIGHT' => "\u{00A9}\u{FE0F}", 'CHARACTER_REGISTERED' => "\u{00AE}\u{FE0F}", 'CHARACTER_TRADE_MARK' => "\u{2122}\u{FE0F}", 'CHARACTER_KEYCAP_HASH' => "\u{0023}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_ASTERISK' => "\u{002A}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_0' => "\u{0030}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_1' => "\u{0031}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_2' => "\u{0032}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_3' => "\u{0033}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_4' => "\u{0034}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_5' => "\u{0035}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_6' => "\u{0036}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_7' => "\u{0037}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_8' => "\u{0038}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_9' => "\u{0039}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_10' => "\u{1F51F}", 'CHARACTER_HUNDRED_POINTS' => "\u{1F4AF}", 'CHARACTER_INPUT_LATIN_UPPERCASE' => "\u{1F520}", 'CHARACTER_INPUT_LATIN_LOWERCASE' => "\u{1F521}", 'CHARACTER_INPUT_NUMBERS' => "\u{1F522}", 'CHARACTER_INPUT_SYMBOLS' => "\u{1F523}", 'CHARACTER_INPUT_LATIN_LETTERS' => "\u{1F524}", 'CHARACTER_A_BUTTON_BLOOD_TYPE' => "\u{1F170}\u{FE0F}", 'CHARACTER_AB_BUTTON_BLOOD_TYPE' => "\u{1F18E}", 'CHARACTER_B_BUTTON_BLOOD_TYPE' => "\u{1F171}\u{FE0F}", 'CHARACTER_CL_BUTTON' => "\u{1F191}", 'CHARACTER_COOL_BUTTON' => "\u{1F192}", 'CHARACTER_FREE_BUTTON' => "\u{1F193}", 'CHARACTER_INFORMATION' => "\u{2139}\u{FE0F}", 'CHARACTER_ID_BUTTON' => "\u{1F194}", 'CHARACTER_CIRCLED_M' => "\u{24C2}\u{FE0F}", 'CHARACTER_NEW_BUTTON' => "\u{1F195}", 'CHARACTER_NG_BUTTON' => "\u{1F196}", 'CHARACTER_O_BUTTON_BLOOD_TYPE' => "\u{1F17E}\u{FE0F}", 'CHARACTER_OK_BUTTON' => "\u{1F197}", 'CHARACTER_P_BUTTON' => "\u{1F17F}\u{FE0F}", 'CHARACTER_SOS_BUTTON' => "\u{1F198}", 'CHARACTER_UP_BUTTON' => "\u{1F199}", 'CHARACTER_VS_BUTTON' => "\u{1F19A}", 'CHARACTER_JAPANESE_HERE_BUTTON' => "\u{1F201}", 'CHARACTER_JAPANESE_SERVICE_CHARGE_BUTTON' => "\u{1F202}\u{FE0F}", 'CHARACTER_JAPANESE_MONTHLY_AMOUNT_BUTTON' => "\u{1F237}\u{FE0F}", 'CHARACTER_JAPANESE_NOT_FREE_OF_CHARGE_BUTTON' => "\u{1F236}", 'CHARACTER_JAPANESE_RESERVED_BUTTON' => "\u{1F22F}", 'CHARACTER_JAPANESE_BARGAIN_BUTTON' => "\u{1F250}", 'CHARACTER_JAPANESE_DISCOUNT_BUTTON' => "\u{1F239}", 'CHARACTER_JAPANESE_FREE_OF_CHARGE_BUTTON' => "\u{1F21A}", 'CHARACTER_JAPANESE_PROHIBITED_BUTTON' => "\u{1F232}", 'CHARACTER_JAPANESE_ACCEPTABLE_BUTTON' => "\u{1F251}", 'CHARACTER_JAPANESE_APPLICATION_BUTTON' => "\u{1F238}", 'CHARACTER_JAPANESE_PASSING_GRADE_BUTTON' => "\u{1F234}", 'CHARACTER_JAPANESE_VACANCY_BUTTON' => "\u{1F233}", 'CHARACTER_JAPANESE_CONGRATULATIONS_BUTTON' => "\u{3297}\u{FE0F}", 'CHARACTER_JAPANESE_SECRET_BUTTON' => "\u{3299}\u{FE0F}", 'CHARACTER_JAPANESE_OPEN_FOR_BUSINESS_BUTTON' => "\u{1F23A}", 'CHARACTER_JAPANESE_NO_VACANCY_BUTTON' => "\u{1F235}", 'CHARACTER_BLACK_SMALL_SQUARE' => "\u{25AA}\u{FE0F}", 'CHARACTER_WHITE_SMALL_SQUARE' => "\u{25AB}\u{FE0F}", 'CHARACTER_WHITE_MEDIUM_SQUARE' => "\u{25FB}\u{FE0F}", 'CHARACTER_BLACK_MEDIUM_SQUARE' => "\u{25FC}\u{FE0F}", 'CHARACTER_WHITE_MEDIUM_SMALL_SQUARE' => "\u{25FD}", 'CHARACTER_BLACK_MEDIUM_SMALL_SQUARE' => "\u{25FE}", 'CHARACTER_BLACK_LARGE_SQUARE' => "\u{2B1B}", 'CHARACTER_WHITE_LARGE_SQUARE' => "\u{2B1C}", 'CHARACTER_LARGE_ORANGE_DIAMOND' => "\u{1F536}", 'CHARACTER_LARGE_BLUE_DIAMOND' => "\u{1F537}", 'CHARACTER_SMALL_ORANGE_DIAMOND' => "\u{1F538}", 'CHARACTER_SMALL_BLUE_DIAMOND' => "\u{1F539}", 'CHARACTER_RED_TRIANGLE_POINTED_UP' => "\u{1F53A}", 'CHARACTER_RED_TRIANGLE_POINTED_DOWN' => "\u{1F53B}", 'CHARACTER_DIAMOND_WITH_A_DOT' => "\u{1F4A0}", 'CHARACTER_RADIO_BUTTON' => "\u{1F518}", 'CHARACTER_BLACK_SQUARE_BUTTON' => "\u{1F532}", 'CHARACTER_WHITE_SQUARE_BUTTON' => "\u{1F533}", 'CHARACTER_WHITE_CIRCLE' => "\u{26AA}", 'CHARACTER_BLACK_CIRCLE' => "\u{26AB}", 'CHARACTER_RED_CIRCLE' => "\u{1F534}", 'CHARACTER_BLUE_CIRCLE' => "\u{1F535}", 'CHARACTER_CHEQUERED_FLAG' => "\u{1F3C1}", 'CHARACTER_TRIANGULAR_FLAG' => "\u{1F6A9}", 'CHARACTER_CROSSED_FLAGS' => "\u{1F38C}", 'CHARACTER_BLACK_FLAG' => "\u{1F3F4}", 'CHARACTER_WHITE_FLAG' => "\u{1F3F3}\u{FE0F}", 'CHARACTER_RAINBOW_FLAG' => "\u{1F3F3}\u{FE0F}\u{200D}\u{1F308}", 'CHARACTER_PIRATE_FLAG' => "\u{1F3F4}\u{200D}\u{2620}\u{FE0F}", 'CHARACTER_FLAGS_FOR_ASCENSION_ISLAND' => "\u{1F1E6}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_ANDORRA' => "\u{1F1E6}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_UNITED_ARAB_EMIRATES' => "\u{1F1E6}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_AFGHANISTAN' => "\u{1F1E6}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_ANTIGUA_AND_BARBUDA' => "\u{1F1E6}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_ANGUILLA' => "\u{1F1E6}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_ALBANIA' => "\u{1F1E6}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ARMENIA' => "\u{1F1E6}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ANGOLA' => "\u{1F1E6}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_ANTARCTICA' => "\u{1F1E6}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_ARGENTINA' => "\u{1F1E6}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_AMERICAN_SAMOA' => "\u{1F1E6}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_AUSTRIA' => "\u{1F1E6}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_AUSTRALIA' => "\u{1F1E6}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_ARUBA' => "\u{1F1E6}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_ALAND_ISLANDS' => "\u{1F1E6}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_AZERBAIJAN' => "\u{1F1E6}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_BOSNIA_AND_HERZEGOVINA' => "\u{1F1E7}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_BARBADOS' => "\u{1F1E7}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_BANGLADESH' => "\u{1F1E7}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_BELGIUM' => "\u{1F1E7}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_BURKINA_FASO' => "\u{1F1E7}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_BULGARIA' => "\u{1F1E7}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_BAHRAIN' => "\u{1F1E7}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_BURUNDI' => "\u{1F1E7}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_BENIN' => "\u{1F1E7}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_ST_BARTHELEMY' => "\u{1F1E7}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_BERMUDA' => "\u{1F1E7}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_BRUNEI' => "\u{1F1E7}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_BOLIVIA' => "\u{1F1E7}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_CARIBBEAN_NETHERLANDS' => "\u{1F1E7}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_BRAZIL' => "\u{1F1E7}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_BAHAMAS' => "\u{1F1E7}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_BHUTAN' => "\u{1F1E7}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_BOUVET_ISLAND' => "\u{1F1E7}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_BOTSWANA' => "\u{1F1E7}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_BELARUS' => "\u{1F1E7}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_BELIZE' => "\u{1F1E7}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_CANADA' => "\u{1F1E8}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_COCOS_KEELING_ISLANDS' => "\u{1F1E8}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_CONGO_KINSHASA' => "\u{1F1E8}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_CENTRAL_AFRICAN_REPUBLIC' => "\u{1F1E8}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_CONGO_BRAZZAVILLE' => "\u{1F1E8}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_SWITZERLAND' => "\u{1F1E8}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_COTE_D_IVOIRE' => "\u{1F1E8}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_COOK_ISLANDS' => "\u{1F1E8}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_CHILE' => "\u{1F1E8}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_CAMEROON' => "\u{1F1E8}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_CHINA' => "\u{1F1E8}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_COLOMBIA' => "\u{1F1E8}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_CLIPPERTON_ISLAND' => "\u{1F1E8}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_COSTA_RICA' => "\u{1F1E8}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_CUBA' => "\u{1F1E8}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_CAPE_VERDE' => "\u{1F1E8}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_CURACAO' => "\u{1F1E8}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_CHRISTMAS_ISLAND' => "\u{1F1E8}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_CYPRUS' => "\u{1F1E8}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_CZECHIA' => "\u{1F1E8}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_GERMANY' => "\u{1F1E9}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_DIEGO_GARCIA' => "\u{1F1E9}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_DJIBOUTI' => "\u{1F1E9}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_DENMARK' => "\u{1F1E9}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_DOMINICA' => "\u{1F1E9}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_DOMINICAN_REPUBLIC' => "\u{1F1E9}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_ALGERIA' => "\u{1F1E9}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_CEUTA_AND_MELILLA' => "\u{1F1EA}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ECUADOR' => "\u{1F1EA}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_ESTONIA' => "\u{1F1EA}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_EGYPT' => "\u{1F1EA}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_WESTERN_SAHARA' => "\u{1F1EA}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_ERITREA' => "\u{1F1EA}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SPAIN' => "\u{1F1EA}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_ETHIOPIA' => "\u{1F1EA}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_EUROPEAN_UNION' => "\u{1F1EA}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_FINLAND' => "\u{1F1EB}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_FIJI' => "\u{1F1EB}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_FALKLAND_ISLANDS' => "\u{1F1EB}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_MICRONESIA' => "\u{1F1EB}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_FAROE_ISLANDS' => "\u{1F1EB}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_FRANCE' => "\u{1F1EB}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_GABON' => "\u{1F1EC}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_UNITED_KINGDOM' => "\u{1F1EC}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_GRENADA' => "\u{1F1EC}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_GEORGIA' => "\u{1F1EC}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_FRENCH_GUIANA' => "\u{1F1EC}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_GUERNSEY' => "\u{1F1EC}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_GHANA' => "\u{1F1EC}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_GIBRALTAR' => "\u{1F1EC}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_GREENLAND' => "\u{1F1EC}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_GAMBIA' => "\u{1F1EC}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_GUINEA' => "\u{1F1EC}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_GUADELOUPE' => "\u{1F1EC}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_EQUATORIAL_GUINEA' => "\u{1F1EC}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_GREECE' => "\u{1F1EC}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SOUTH_GEORGIA_AND_SOUTH_SANDWICH_ISLANDS' => "\u{1F1EC}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_GUATEMALA' => "\u{1F1EC}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_GUAM' => "\u{1F1EC}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_GUINEA_BISSAU' => "\u{1F1EC}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_GUYANA' => "\u{1F1EC}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_HONG_KONG_SAR_CHINA' => "\u{1F1ED}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_HEARD_AND_MCDONALD_ISLANDS' => "\u{1F1ED}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_HONDURAS' => "\u{1F1ED}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_CROATIA' => "\u{1F1ED}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_HAITI' => "\u{1F1ED}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_HUNGARY' => "\u{1F1ED}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_CANARY_ISLANDS' => "\u{1F1EE}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_INDONESIA' => "\u{1F1EE}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_IRELAND' => "\u{1F1EE}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ISRAEL' => "\u{1F1EE}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ISLE_OF_MAN' => "\u{1F1EE}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_INDIA' => "\u{1F1EE}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_BRITISH_INDIAN_OCEAN_TERRITORY' => "\u{1F1EE}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_IRAQ' => "\u{1F1EE}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_IRAN' => "\u{1F1EE}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_ICELAND' => "\u{1F1EE}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_ITALY' => "\u{1F1EE}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_JERSEY' => "\u{1F1EF}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_JAMAICA' => "\u{1F1EF}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_JORDAN' => "\u{1F1EF}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_JAPAN' => "\u{1F1EF}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_KENYA' => "\u{1F1F0}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_KYRGYZSTAN' => "\u{1F1F0}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_CAMBODIA' => "\u{1F1F0}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_KIRIBATI' => "\u{1F1F0}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_COMOROS' => "\u{1F1F0}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ST_KITTS_AND_NEVIS' => "\u{1F1F0}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_NORTH_KOREA' => "\u{1F1F0}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_SOUTH_KOREA' => "\u{1F1F0}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_KUWAIT' => "\u{1F1F0}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_CAYMAN_ISLANDS' => "\u{1F1F0}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_KAZAKHSTAN' => "\u{1F1F0}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_LAOS' => "\u{1F1F1}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_LEBANON' => "\u{1F1F1}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_ST_LUCIA' => "\u{1F1F1}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_LIECHTENSTEIN' => "\u{1F1F1}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_SRI_LANKA' => "\u{1F1F1}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_LIBERIA' => "\u{1F1F1}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_LESOTHO' => "\u{1F1F1}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_LITHUANIA' => "\u{1F1F1}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_LUXEMBOURG' => "\u{1F1F1}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_LATVIA' => "\u{1F1F1}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_LIBYA' => "\u{1F1F1}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_MOROCCO' => "\u{1F1F2}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_MONACO' => "\u{1F1F2}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_MOLDOVA' => "\u{1F1F2}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_MONTENEGRO' => "\u{1F1F2}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ST_MARTIN' => "\u{1F1F2}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_MADAGASCAR' => "\u{1F1F2}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_MARSHALL_ISLANDS' => "\u{1F1F2}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_MACEDONIA' => "\u{1F1F2}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_MALI' => "\u{1F1F2}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_MYANMAR_BURMA' => "\u{1F1F2}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_MONGOLIA' => "\u{1F1F2}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_MACAU_SAR_CHINA' => "\u{1F1F2}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_NORTHERN_MARIANA_ISLANDS' => "\u{1F1F2}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_MARTINIQUE' => "\u{1F1F2}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_MAURITANIA' => "\u{1F1F2}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_MONTSERRAT' => "\u{1F1F2}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_MALTA' => "\u{1F1F2}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_MAURITIUS' => "\u{1F1F2}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_MALDIVES' => "\u{1F1F2}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_MALAWI' => "\u{1F1F2}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_MEXICO' => "\u{1F1F2}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_MALAYSIA' => "\u{1F1F2}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_MOZAMBIQUE' => "\u{1F1F2}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_NAMIBIA' => "\u{1F1F3}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_NEW_CALEDONIA' => "\u{1F1F3}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_NIGER' => "\u{1F1F3}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_NORFOLK_ISLAND' => "\u{1F1F3}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_NIGERIA' => "\u{1F1F3}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_NICARAGUA' => "\u{1F1F3}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_NETHERLANDS' => "\u{1F1F3}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_NORWAY' => "\u{1F1F3}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_NEPAL' => "\u{1F1F3}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_NAURU' => "\u{1F1F3}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_NIUE' => "\u{1F1F3}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_NEW_ZEALAND' => "\u{1F1F3}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_OMAN' => "\u{1F1F4}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_PANAMA' => "\u{1F1F5}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_PERU' => "\u{1F1F5}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_FRENCH_POLYNESIA' => "\u{1F1F5}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_PAPUA_NEW_GUINEA' => "\u{1F1F5}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_PHILIPPINES' => "\u{1F1F5}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_PAKISTAN' => "\u{1F1F5}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_POLAND' => "\u{1F1F5}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ST_PIERRE_AND_MIQUELON' => "\u{1F1F5}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_PITCAIRN_ISLANDS' => "\u{1F1F5}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_PUERTO_RICO' => "\u{1F1F5}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_PALESTINIAN_TERRITORIES' => "\u{1F1F5}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_PORTUGAL' => "\u{1F1F5}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_PALAU' => "\u{1F1F5}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_PARAGUAY' => "\u{1F1F5}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_QATAR' => "\u{1F1F6}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_REUNION' => "\u{1F1F7}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ROMANIA' => "\u{1F1F7}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_SERBIA' => "\u{1F1F7}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_RUSSIA' => "\u{1F1F7}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_RWANDA' => "\u{1F1F7}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_SAUDI_ARABIA' => "\u{1F1F8}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_SOLOMON_ISLANDS' => "\u{1F1F8}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_SEYCHELLES' => "\u{1F1F8}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_SUDAN' => "\u{1F1F8}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_SWEDEN' => "\u{1F1F8}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_SINGAPORE' => "\u{1F1F8}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_ST_HELENA' => "\u{1F1F8}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_SLOVENIA' => "\u{1F1F8}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_SVALBARD_AND_JAN_MAYEN' => "\u{1F1F8}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_SLOVAKIA' => "\u{1F1F8}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_SIERRA_LEONE' => "\u{1F1F8}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_SAN_MARINO' => "\u{1F1F8}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_SENEGAL' => "\u{1F1F8}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_SOMALIA' => "\u{1F1F8}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_SURINAME' => "\u{1F1F8}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SOUTH_SUDAN' => "\u{1F1F8}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_SAO_TOME_AND_PRINCIPE' => "\u{1F1F8}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_EL_SALVADOR' => "\u{1F1F8}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_SINT_MAARTEN' => "\u{1F1F8}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_SYRIA' => "\u{1F1F8}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_SWAZILAND' => "\u{1F1F8}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_TRISTAN_DA_CUNHA' => "\u{1F1F9}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_TURKS_AND_CAICOS_ISLANDS' => "\u{1F1F9}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_CHAD' => "\u{1F1F9}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_FRENCH_SOUTHERN_TERRITORIES' => "\u{1F1F9}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_TOGO' => "\u{1F1F9}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_THAILAND' => "\u{1F1F9}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_TAJIKISTAN' => "\u{1F1F9}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_TOKELAU' => "\u{1F1F9}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_TIMOR_LESTE' => "\u{1F1F9}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_TURKMENISTAN' => "\u{1F1F9}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_TUNISIA' => "\u{1F1F9}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_TONGA' => "\u{1F1F9}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_TURKEY' => "\u{1F1F9}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_TRINIDAD_AND_TOBAGO' => "\u{1F1F9}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_TUVALU' => "\u{1F1F9}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_TAIWAN' => "\u{1F1F9}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_TANZANIA' => "\u{1F1F9}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_UKRAINE' => "\u{1F1FA}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_UGANDA' => "\u{1F1FA}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_US_OUTLYING_ISLANDS' => "\u{1F1FA}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_UNITED_NATIONS' => "\u{1F1FA}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_UNITED_STATES' => "\u{1F1FA}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_URUGUAY' => "\u{1F1FA}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_UZBEKISTAN' => "\u{1F1FA}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_VATICAN_CITY' => "\u{1F1FB}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ST_VINCENT_AND_GRENADINES' => "\u{1F1FB}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_VENEZUELA' => "\u{1F1FB}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_BRITISH_VIRGIN_ISLANDS' => "\u{1F1FB}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_US_VIRGIN_ISLANDS' => "\u{1F1FB}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_VIETNAM' => "\u{1F1FB}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_VANUATU' => "\u{1F1FB}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_WALLIS_AND_FUTUNA' => "\u{1F1FC}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_SAMOA' => "\u{1F1FC}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_KOSOVO' => "\u{1F1FD}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_YEMEN' => "\u{1F1FE}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_MAYOTTE' => "\u{1F1FE}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_SOUTH_AFRICA' => "\u{1F1FF}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ZAMBIA' => "\u{1F1FF}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ZIMBABWE' => "\u{1F1FF}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_ENGLAND' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}", 'CHARACTER_FLAGS_FOR_SCOTLAND' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}", 'CHARACTER_FLAGS_FOR_WALES' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/encodings.php b/includes/libraries/anti-xss-master/src/voku/helper/data/encodings.php
new file mode 100644
index 000000000..87d907048
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/encodings.php
@@ -0,0 +1 @@
+<?php return ['ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16', 'WINDOWS-1251', 'WINDOWS-1252', 'WINDOWS-1254', 'CP932', 'CP936', 'CP950', 'CP866', 'CP850', 'CP51932', 'CP50220', 'CP50221', 'CP50222', 'ISO-2022-JP', 'ISO-2022-KR', 'JIS', 'JIS-ms', 'EUC-CN', 'EUC-JP', 'ANSI_X3.4-1968', 'ANSI_X3.4-1986', 'ASCII', 'CP367', 'IBM367', 'ISO-IR-6', 'ISO646-US', 'ISO_646.IRV:1991', 'US', 'US-ASCII', 'CSASCII', 'UTF-8', 'ISO-10646-UCS-2', 'UCS-2', 'CSUNICODE', 'UCS-2BE', 'UNICODE-1-1', 'UNICODEBIG', 'CSUNICODE11', 'UCS-2LE', 'UNICODELITTLE', 'ISO-10646-UCS-4', 'UCS-4', 'CSUCS4', 'UCS-4BE', 'UCS-4LE', 'UTF-16', 'UTF-16BE', 'UTF-16LE', 'UTF-32', 'UTF-32BE', 'UTF-32LE', 'UNICODE-1-1-UTF-7', 'UTF-7', 'CSUNICODE11UTF7', 'UCS-2-INTERNAL', 'UCS-2-SWAPPED', 'UCS-4-INTERNAL', 'UCS-4-SWAPPED', 'C99', 'JAVA', 'CP819', 'IBM819', 'ISO-IR-100', 'ISO8859-1', 'ISO_8859-1', 'ISO_8859-1:1987', 'L1', 'LATIN1', 'CSISOLATIN1', 'ISO-IR-101', 'ISO8859-2', 'ISO_8859-2', 'ISO_8859-2:1987', 'L2', 'LATIN2', 'CSISOLATIN2', 'ISO-IR-109', 'ISO8859-3', 'ISO_8859-3', 'ISO_8859-3:1988', 'L3', 'LATIN3', 'CSISOLATIN3', 'ISO-IR-110', 'ISO8859-4', 'ISO_8859-4', 'ISO_8859-4:1988', 'L4', 'LATIN4', 'CSISOLATIN4', 'CYRILLIC', 'ISO-IR-144', 'ISO8859-5', 'ISO_8859-5', 'ISO_8859-5:1988', 'CSISOLATINCYRILLIC', 'ARABIC', 'ASMO-708', 'ECMA-114', 'ISO-IR-127', 'ISO8859-6', 'ISO_8859-6', 'ISO_8859-6:1987', 'CSISOLATINARABIC', 'ECMA-118', 'ELOT_928', 'GREEK', 'GREEK8', 'ISO-IR-126', 'ISO8859-7', 'ISO_8859-7', 'ISO_8859-7:1987', 'ISO_8859-7:2003', 'CSISOLATINGREEK', 'HEBREW', 'ISO-IR-138', 'ISO8859-8', 'ISO_8859-8', 'ISO_8859-8:1988', 'CSISOLATINHEBREW', 'ISO-IR-148', 'ISO8859-9', 'ISO_8859-9', 'ISO_8859-9:1989', 'L5', 'LATIN5', 'CSISOLATIN5', 'ISO-IR-157', 'ISO8859-10', 'ISO_8859-10', 'ISO_8859-10:1992', 'L6', 'LATIN6', 'CSISOLATIN6', 'ISO-8859-11', 'ISO8859-11', 'ISO_8859-11', 'ISO-IR-179', 'ISO8859-13', 'ISO_8859-13', 'L7', 'LATIN7', 'ISO-CELTIC', 'ISO-IR-199', 'ISO8859-14', 'ISO_8859-14', 'ISO_8859-14:1998', 'L8', 'LATIN8', 'ISO-IR-203', 'ISO8859-15', 'ISO_8859-15', 'ISO_8859-15:1998', 'LATIN-9', 'ISO-IR-226', 'ISO8859-16', 'ISO_8859-16', 'ISO_8859-16:2001', 'L10', 'LATIN10', 'KOI8-R', 'CSKOI8R', 'KOI8-U', 'KOI8-RU', 'CP1250', 'MS-EE', 'WINDOWS-1250', 'CP1251', 'MS-CYRL', 'CP1252', 'MS-ANSI', 'CP1253', 'MS-GREEK', 'WINDOWS-1253', 'CP1254', 'MS-TURK', 'CP1255', 'MS-HEBR', 'WINDOWS-1255', 'CP1256', 'MS-ARAB', 'WINDOWS-1256', 'CP1257', 'WINBALTRIM', 'WINDOWS-1257', 'CP1258', 'WINDOWS-1258', '850', 'IBM850', 'CSPC850MULTILINGUAL', '862', 'CP862', 'IBM862', 'CSPC862LATINHEBREW', '866', 'IBM866', 'CSIBM866', 'MAC', 'MACINTOSH', 'MACROMAN', 'CSMACINTOSH', 'MACCENTRALEUROPE', 'MACICELAND', 'MACCROATIAN', 'MACROMANIA', 'MACCYRILLIC', 'MACUKRAINE', 'MACGREEK', 'MACTURKISH', 'MACHEBREW', 'MACARABIC', 'MACTHAI', 'HP-ROMAN8', 'R8', 'ROMAN8', 'CSHPROMAN8', 'NEXTSTEP', 'ARMSCII-8', 'GEORGIAN-ACADEMY', 'GEORGIAN-PS', 'KOI8-T', 'CP154', 'CYRILLIC-ASIAN', 'PT154', 'PTCP154', 'CSPTCP154', 'KZ-1048', 'RK1048', 'STRK1048-2002', 'CSKZ1048', 'MULELAO-1', 'CP1133', 'IBM-CP1133', 'ISO-IR-166', 'TIS-620', 'TIS620', 'TIS620-0', 'TIS620.2529-1', 'TIS620.2533-0', 'TIS620.2533-1', 'CP874', 'WINDOWS-874', 'VISCII', 'VISCII1.1-1', 'CSVISCII', 'TCVN', 'TCVN-5712', 'TCVN5712-1', 'TCVN5712-1:1993', 'ISO-IR-14', 'ISO646-JP', 'JIS_C6220-1969-RO', 'JP', 'CSISO14JISC6220RO', 'JISX0201-1976', 'JIS_X0201', 'X0201', 'CSHALFWIDTHKATAKANA', 'ISO-IR-87', 'JIS0208', 'JIS_C6226-1983', 'JIS_X0208', 'JIS_X0208-1983', 'JIS_X0208-1990', 'X0208', 'CSISO87JISX0208', 'ISO-IR-159', 'JIS_X0212', 'JIS_X0212-1990', 'JIS_X0212.1990-0', 'X0212', 'CSISO159JISX02121990', 'CN', 'GB_1988-80', 'ISO-IR-57', 'ISO646-CN', 'CSISO57GB1988', 'CHINESE', 'GB_2312-80', 'ISO-IR-58', 'CSISO58GB231280', 'CN-GB-ISOIR165', 'ISO-IR-165', 'ISO-IR-149', 'KOREAN', 'KSC_5601', 'KS_C_5601-1987', 'KS_C_5601-1989', 'CSKSC56011987', 'EUCJP', 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE', 'CSEUCPKDFMTJAPANESE', 'MS_KANJI', 'SHIFT-JIS', 'SHIFT_JIS', 'SJIS', 'CSSHIFTJIS', 'CSISO2022JP', 'ISO-2022-JP-1', 'ISO-2022-JP-2', 'CSISO2022JP2', 'CN-GB', 'EUCCN', 'GB2312', 'CSGB2312', 'GBK', 'MS936', 'WINDOWS-936', 'GB18030', 'ISO-2022-CN', 'CSISO2022CN', 'ISO-2022-CN-EXT', 'HZ', 'HZ-GB-2312', 'EUC-TW', 'EUCTW', 'CSEUCTW', 'BIG-5', 'BIG-FIVE', 'BIG5', 'BIGFIVE', 'CN-BIG5', 'CSBIG5', 'BIG5-HKSCS:1999', 'BIG5-HKSCS:2001', 'BIG5-HKSCS', 'BIG5-HKSCS:2004', 'BIG5HKSCS', 'EUC-KR', 'EUCKR', 'CSEUCKR', 'CP949', 'UHC', 'CP1361', 'JOHAB', 'CSISO2022KR', 'CP856', 'CP922', 'CP943', 'CP1046', 'CP1124', 'CP1129', 'CP1161', 'IBM-1161', 'IBM1161', 'CSIBM1161', 'CP1162', 'IBM-1162', 'IBM1162', 'CSIBM1162', 'CP1163', 'IBM-1163', 'IBM1163', 'CSIBM1163', 'DEC-KANJI', 'DEC-HANYU', '437', 'CP437', 'IBM437', 'CSPC8CODEPAGE437', 'CP737', 'CP775', 'IBM775', 'CSPC775BALTIC', '852', 'CP852', 'IBM852', 'CSPCP852', 'CP853', '855', 'CP855', 'IBM855', 'CSIBM855', '857', 'CP857', 'IBM857', 'CSIBM857', 'CP858', '860', 'CP860', 'IBM860', 'CSIBM860', '861', 'CP-IS', 'CP861', 'IBM861', 'CSIBM861', '863', 'CP863', 'IBM863', 'CSIBM863', 'CP864', 'IBM864', 'CSIBM864', '865', 'CP865', 'IBM865', 'CSIBM865', '869', 'CP-GR', 'CP869', 'IBM869', 'CSIBM869', 'CP1125', 'EUC-JISX0213', 'SHIFT_JISX0213', 'ISO-2022-JP-3', 'BIG5-2003', 'ISO-IR-230', 'TDS565', 'ATARI', 'ATARIST', 'RISCOS-LATIN1'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/ord.php b/includes/libraries/anti-xss-master/src/voku/helper/data/ord.php
new file mode 100644
index 000000000..8f8f19a7a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/ord.php
@@ -0,0 +1 @@
+<?php return ['' => 0, "\x00" => 0, "\x01" => 1, "\x02" => 2, "\x03" => 3, "\x04" => 4, "\x05" => 5, "\x06" => 6, "\x07" => 7, "\x08" => 8, "\x09" => 9, "\x0A" => 10, "\x0B" => 11, "\x0C" => 12, "\x0D" => 13, "\x0E" => 14, "\x0F" => 15, "\x10" => 16, "\x11" => 17, "\x12" => 18, "\x13" => 19, "\x14" => 20, "\x15" => 21, "\x16" => 22, "\x17" => 23, "\x18" => 24, "\x19" => 25, "\x1A" => 26, "\x1B" => 27, "\x1C" => 28, "\x1D" => 29, "\x1E" => 30, "\x1F" => 31, "\x20" => 32, "\x21" => 33, "\x22" => 34, "\x23" => 35, "\x24" => 36, "\x25" => 37, "\x26" => 38, "\x27" => 39, "\x28" => 40, "\x29" => 41, "\x2A" => 42, "\x2B" => 43, "\x2C" => 44, "\x2D" => 45, "\x2E" => 46, "\x2F" => 47, "\x30" => 48, "\x31" => 49, "\x32" => 50, "\x33" => 51, "\x34" => 52, "\x35" => 53, "\x36" => 54, "\x37" => 55, "\x38" => 56, "\x39" => 57, "\x3A" => 58, "\x3B" => 59, "\x3C" => 60, "\x3D" => 61, "\x3E" => 62, "\x3F" => 63, "\x40" => 64, "\x41" => 65, "\x42" => 66,  "\x43" => 67,  "\x44" => 68,  "\x45" => 69,  "\x46" => 70,  "\x47" => 71,  "\x48" => 72,  "\x49" => 73,  "\x4A" => 74,  "\x4B" => 75,  "\x4C" => 76,  "\x4D" => 77,  "\x4E" => 78,  "\x4F" => 79,  "\x50" => 80,  "\x51" => 81,  "\x52" => 82,  "\x53" => 83,  "\x54" => 84,  "\x55" => 85,  "\x56" => 86,  "\x57" => 87,  "\x58" => 88,  "\x59" => 89,  "\x5A" => 90,  "\x5B" => 91,  "\x5C" => 92,  "\x5D" => 93,  "\x5E" => 94,  "\x5F" => 95,  "\x60" => 96,  "\x61" => 97,  "\x62" => 98,  "\x63" => 99,  "\x64" => 100,  "\x65" => 101,  "\x66" => 102,  "\x67" => 103,  "\x68" => 104,  "\x69" => 105,  "\x6A" => 106,  "\x6B" => 107,  "\x6C" => 108,  "\x6D" => 109,  "\x6E" => 110,  "\x6F" => 111,  "\x70" => 112,  "\x71" => 113,  "\x72" => 114,  "\x73" => 115,  "\x74" => 116,  "\x75" => 117,  "\x76" => 118,  "\x77" => 119,  "\x78" => 120,  "\x79" => 121,  "\x7A" => 122,  "\x7B" => 123,  "\x7C" => 124,  "\x7D" => 125,  "\x7E" => 126,  "\x7F" => 127,  "\x80" => 128,  "\x81" => 129,  "\x82" => 130,  "\x83" => 131,  "\x84" => 132,  "\x85" => 133,  "\x86" => 134,  "\x87" => 135,  "\x88" => 136,  "\x89" => 137,  "\x8A" => 138,  "\x8B" => 139,  "\x8C" => 140,  "\x8D" => 141,  "\x8E" => 142,  "\x8F" => 143,  "\x90" => 144,  "\x91" => 145,  "\x92" => 146,  "\x93" => 147,  "\x94" => 148,  "\x95" => 149,  "\x96" => 150,  "\x97" => 151,  "\x98" => 152,  "\x99" => 153,  "\x9A" => 154,  "\x9B" => 155,  "\x9C" => 156,  "\x9D" => 157,  "\x9E" => 158,  "\x9F" => 159,  "\xA0" => 160,  "\xA1" => 161,  "\xA2" => 162,  "\xA3" => 163,  "\xA4" => 164,  "\xA5" => 165,  "\xA6" => 166,  "\xA7" => 167,  "\xA8" => 168,  "\xA9" => 169,  "\xAA" => 170,  "\xAB" => 171,  "\xAC" => 172,  "\xAD" => 173,  "\xAE" => 174,  "\xAF" => 175,  "\xB0" => 176,  "\xB1" => 177,  "\xB2" => 178,  "\xB3" => 179,  "\xB4" => 180,  "\xB5" => 181,  "\xB6" => 182,  "\xB7" => 183,  "\xB8" => 184,  "\xB9" => 185,  "\xBA" => 186,  "\xBB" => 187,  "\xBC" => 188,  "\xBD" => 189,  "\xBE" => 190,  "\xBF" => 191,  "\xC0" => 192,  "\xC1" => 193,  "\xC2" => 194,  "\xC3" => 195,  "\xC4" => 196,  "\xC5" => 197,  "\xC6" => 198,  "\xC7" => 199,  "\xC8" => 200,  "\xC9" => 201,  "\xCA" => 202,  "\xCB" => 203,  "\xCC" => 204,  "\xCD" => 205,  "\xCE" => 206,  "\xCF" => 207,  "\xD0" => 208,  "\xD1" => 209,  "\xD2" => 210,  "\xD3" => 211,  "\xD4" => 212,  "\xD5" => 213,  "\xD6" => 214,  "\xD7" => 215,  "\xD8" => 216,  "\xD9" => 217,  "\xDA" => 218,  "\xDB" => 219,  "\xDC" => 220,  "\xDD" => 221,  "\xDE" => 222,  "\xDF" => 223,  "\xE0" => 224,  "\xE1" => 225,  "\xE2" => 226,  "\xE3" => 227,  "\xE4" => 228,  "\xE5" => 229,  "\xE6" => 230,  "\xE7" => 231,  "\xE8" => 232,  "\xE9" => 233,  "\xEA" => 234,  "\xEB" => 235,  "\xEC" => 236,  "\xED" => 237,  "\xEE" => 238,  "\xEF" => 239,  "\xF0" => 240,  "\xF1" => 241,  "\xF2" => 242,  "\xF3" => 243,  "\xF4" => 244,  "\xF5" => 245,  "\xF6" => 246,  "\xF7" => 247,  "\xF8" => 248,  "\xF9" => 249,  "\xFA" => 250,  "\xFB" => 251,  "\xFC" => 252,  "\xFD" => 253,  "\xFE" => 254,  "\xFF" => 255];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/transliterator_list.php b/includes/libraries/anti-xss-master/src/voku/helper/data/transliterator_list.php
new file mode 100644
index 000000000..91ddf13c6
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/transliterator_list.php
@@ -0,0 +1 @@
+<?php return [0 => 'ASCII-Latin', 1 => 'Accents-Any', 2 => 'Amharic-Latin/BGN', 3 => 'Any-Accents', 4 => 'Any-Publishing', 5 => 'Arab-Latn', 6 => 'Arabic-Latin', 7 => 'Arabic-Latin/BGN', 8 => 'Armenian-Latin', 9 => 'Armenian-Latin/BGN', 10 => 'Armn-Latn', 11 => 'Azerbaijani-Latin/BGN', 12 => 'Belarusian-Latin/BGN', 13 => 'Beng-Arab', 14 => 'Beng-Deva', 15 => 'Beng-Gujr', 16 => 'Beng-Guru', 17 => 'Beng-Knda', 18 => 'Beng-Latn', 19 => 'Beng-Mlym', 20 => 'Beng-Orya', 21 => 'Beng-Taml', 22 => 'Beng-Telu', 23 => 'Beng-ur', 24 => 'Bengali-Arabic', 25 => 'Bengali-Devanagari', 26 => 'Bengali-Gujarati', 27 => 'Bengali-Gurmukhi', 28 => 'Bengali-Kannada', 29 => 'Bengali-Latin', 30 => 'Bengali-Malayalam', 31 => 'Bengali-Oriya', 32 => 'Bengali-Tamil', 33 => 'Bengali-Telugu', 34 => 'Bopo-Latn', 35 => 'Bopomofo-Latin', 36 => 'Bulgarian-Latin/BGN', 37 => 'Cyrillic-Latin', 38 => 'Cyrl-Latn', 39 => 'Deva-Arab', 40 => 'Deva-Beng', 41 => 'Deva-Gujr', 42 => 'Deva-Guru', 43 => 'Deva-Knda', 44 => 'Deva-Latn', 45 => 'Deva-Mlym', 46 => 'Deva-Orya', 47 => 'Deva-Taml', 48 => 'Deva-Telu', 49 => 'Deva-ur', 50 => 'Devanagari-Arabic', 51 => 'Devanagari-Bengali', 52 => 'Devanagari-Gujarati', 53 => 'Devanagari-Gurmukhi', 54 => 'Devanagari-Kannada', 55 => 'Devanagari-Latin', 56 => 'Devanagari-Malayalam', 57 => 'Devanagari-Oriya', 58 => 'Devanagari-Tamil', 59 => 'Devanagari-Telugu', 60 => 'Digit-Tone', 61 => 'Fullwidth-Halfwidth', 62 => 'Geor-Latn', 63 => 'Georgian-Latin', 64 => 'Georgian-Latin/BGN', 65 => 'Greek-Latin', 66 => 'Greek-Latin/BGN', 67 => 'Greek-Latin/UNGEGN', 68 => 'Grek-Latn', 69 => 'Grek-Latn/UNGEGN', 70 => 'Gujarati-Arabic', 71 => 'Gujarati-Bengali', 72 => 'Gujarati-Devanagari', 73 => 'Gujarati-Gurmukhi', 74 => 'Gujarati-Kannada', 75 => 'Gujarati-Latin', 76 => 'Gujarati-Malayalam', 77 => 'Gujarati-Oriya', 78 => 'Gujarati-Tamil', 79 => 'Gujarati-Telugu', 80 => 'Gujr-Arab', 81 => 'Gujr-Beng', 82 => 'Gujr-Deva', 83 => 'Gujr-Guru', 84 => 'Gujr-Knda', 85 => 'Gujr-Latn', 86 => 'Gujr-Mlym', 87 => 'Gujr-Orya', 88 => 'Gujr-Taml', 89 => 'Gujr-Telu', 90 => 'Gujr-ur', 91 => 'Gurmukhi-Arabic', 92 => 'Gurmukhi-Bengali', 93 => 'Gurmukhi-Devanagari', 94 => 'Gurmukhi-Gujarati', 95 => 'Gurmukhi-Kannada', 96 => 'Gurmukhi-Latin', 97 => 'Gurmukhi-Malayalam', 98 => 'Gurmukhi-Oriya', 99 => 'Gurmukhi-Tamil', 100 => 'Gurmukhi-Telugu', 101 => 'Guru-Arab', 102 => 'Guru-Beng', 103 => 'Guru-Deva', 104 => 'Guru-Gujr', 105 => 'Guru-Knda', 106 => 'Guru-Latn', 107 => 'Guru-Mlym', 108 => 'Guru-Orya', 109 => 'Guru-Taml', 110 => 'Guru-Telu', 111 => 'Guru-ur', 112 => 'Halfwidth-Fullwidth', 113 => 'Han-Latin', 114 => 'Han-Latin/Names', 115 => 'Hang-Latn', 116 => 'Hangul-Latin', 117 => 'Hani-Latn', 118 => 'Hans-Hant', 119 => 'Hant-Hans', 120 => 'Hebr-Latn', 121 => 'Hebrew-Latin', 122 => 'Hebrew-Latin/BGN', 123 => 'Hira-Kana', 124 => 'Hira-Latn', 125 => 'Hiragana-Katakana', 126 => 'Hiragana-Latin', 127 => 'IPA-XSampa', 128 => 'Jamo-Latin', 129 => 'Jamo-Latn', 130 => 'Kana-Hira', 131 => 'Kana-Latn', 132 => 'Kannada-Arabic', 133 => 'Kannada-Bengali', 134 => 'Kannada-Devanagari', 135 => 'Kannada-Gujarati', 136 => 'Kannada-Gurmukhi', 137 => 'Kannada-Latin', 138 => 'Kannada-Malayalam', 139 => 'Kannada-Oriya', 140 => 'Kannada-Tamil', 141 => 'Kannada-Telugu', 142 => 'Katakana-Hiragana', 143 => 'Katakana-Latin', 144 => 'Katakana-Latin/BGN', 145 => 'Kazakh-Latin/BGN', 146 => 'Kirghiz-Latin/BGN', 147 => 'Knda-Arab', 148 => 'Knda-Beng', 149 => 'Knda-Deva', 150 => 'Knda-Gujr', 151 => 'Knda-Guru', 152 => 'Knda-Latn', 153 => 'Knda-Mlym', 154 => 'Knda-Orya', 155 => 'Knda-Taml', 156 => 'Knda-Telu', 157 => 'Knda-ur', 158 => 'Korean-Latin/BGN', 159 => 'Latin-ASCII', 160 => 'Latin-Arabic', 161 => 'Latin-Armenian', 162 => 'Latin-Bengali', 163 => 'Latin-Bopomofo', 164 => 'Latin-Cyrillic', 165 => 'Latin-Devanagari', 166 => 'Latin-Georgian', 167 => 'Latin-Greek', 168 => 'Latin-Greek/UNGEGN', 169 => 'Latin-Gujarati', 170 => 'Latin-Gurmukhi', 171 => 'Latin-Hangul', 172 => 'Latin-Hebrew', 173 => 'Latin-Hiragana', 174 => 'Latin-Jamo', 175 => 'Latin-Kannada', 176 => 'Latin-Katakana', 177 => 'Latin-Malayalam', 178 => 'Latin-NumericPinyin', 179 => 'Latin-Oriya', 180 => 'Latin-Russian/BGN', 181 => 'Latin-Syriac', 182 => 'Latin-Tamil', 183 => 'Latin-Telugu', 184 => 'Latin-Thaana', 185 => 'Latin-Thai', 186 => 'Latn-Arab', 187 => 'Latn-Armn', 188 => 'Latn-Beng', 189 => 'Latn-Bopo', 190 => 'Latn-Cyrl', 191 => 'Latn-Deva', 192 => 'Latn-Geor', 193 => 'Latn-Grek', 194 => 'Latn-Grek/UNGEGN', 195 => 'Latn-Gujr', 196 => 'Latn-Guru', 197 => 'Latn-Hang', 198 => 'Latn-Hebr', 199 => 'Latn-Hira', 200 => 'Latn-Jamo', 201 => 'Latn-Kana', 202 => 'Latn-Knda', 203 => 'Latn-Mlym', 204 => 'Latn-Orya', 205 => 'Latn-Syrc', 206 => 'Latn-Taml', 207 => 'Latn-Telu', 208 => 'Latn-Thaa', 209 => 'Latn-Thai', 210 => 'Macedonian-Latin/BGN', 211 => 'Malayalam-Arabic', 212 => 'Malayalam-Bengali', 213 => 'Malayalam-Devanagari', 214 => 'Malayalam-Gujarati', 215 => 'Malayalam-Gurmukhi', 216 => 'Malayalam-Kannada', 217 => 'Malayalam-Latin', 218 => 'Malayalam-Oriya', 219 => 'Malayalam-Tamil', 220 => 'Malayalam-Telugu', 221 => 'Maldivian-Latin/BGN', 222 => 'Mlym-Arab', 223 => 'Mlym-Beng', 224 => 'Mlym-Deva', 225 => 'Mlym-Gujr', 226 => 'Mlym-Guru', 227 => 'Mlym-Knda', 228 => 'Mlym-Latn', 229 => 'Mlym-Orya', 230 => 'Mlym-Taml', 231 => 'Mlym-Telu', 232 => 'Mlym-ur', 233 => 'Mongolian-Latin/BGN', 234 => 'NumericPinyin-Latin', 235 => 'NumericPinyin-Pinyin', 236 => 'Oriya-Arabic', 237 => 'Oriya-Bengali', 238 => 'Oriya-Devanagari', 239 => 'Oriya-Gujarati', 240 => 'Oriya-Gurmukhi', 241 => 'Oriya-Kannada', 242 => 'Oriya-Latin', 243 => 'Oriya-Malayalam', 244 => 'Oriya-Tamil', 245 => 'Oriya-Telugu', 246 => 'Orya-Arab', 247 => 'Orya-Beng', 248 => 'Orya-Deva', 249 => 'Orya-Gujr', 250 => 'Orya-Guru', 251 => 'Orya-Knda', 252 => 'Orya-Latn', 253 => 'Orya-Mlym', 254 => 'Orya-Taml', 255 => 'Orya-Telu', 256 => 'Orya-ur', 257 => 'Pashto-Latin/BGN', 258 => 'Persian-Latin/BGN', 259 => 'Pinyin-NumericPinyin', 260 => 'Publishing-Any', 261 => 'Russian-Latin/BGN', 262 => 'Serbian-Latin/BGN', 263 => 'Simplified-Traditional', 264 => 'Syrc-Latn', 265 => 'Syriac-Latin', 266 => 'Tamil-Arabic', 267 => 'Tamil-Bengali', 268 => 'Tamil-Devanagari', 269 => 'Tamil-Gujarati', 270 => 'Tamil-Gurmukhi', 271 => 'Tamil-Kannada', 272 => 'Tamil-Latin', 273 => 'Tamil-Malayalam', 274 => 'Tamil-Oriya', 275 => 'Tamil-Telugu', 276 => 'Taml-Arab', 277 => 'Taml-Beng', 278 => 'Taml-Deva', 279 => 'Taml-Gujr', 280 => 'Taml-Guru', 281 => 'Taml-Knda', 282 => 'Taml-Latn', 283 => 'Taml-Mlym', 284 => 'Taml-Orya', 285 => 'Taml-Telu', 286 => 'Taml-ur', 287 => 'Telu-Arab', 288 => 'Telu-Beng', 289 => 'Telu-Deva', 290 => 'Telu-Gujr', 291 => 'Telu-Guru', 292 => 'Telu-Knda', 293 => 'Telu-Latn', 294 => 'Telu-Mlym', 295 => 'Telu-Orya', 296 => 'Telu-Taml', 297 => 'Telu-ur', 298 => 'Telugu-Arabic', 299 => 'Telugu-Bengali', 300 => 'Telugu-Devanagari', 301 => 'Telugu-Gujarati', 302 => 'Telugu-Gurmukhi', 303 => 'Telugu-Kannada', 304 => 'Telugu-Latin', 305 => 'Telugu-Malayalam', 306 => 'Telugu-Oriya', 307 => 'Telugu-Tamil', 308 => 'Thaa-Latn', 309 => 'Thaana-Latin', 310 => 'Thai-Latin', 311 => 'Thai-Latn', 312 => 'Tone-Digit', 313 => 'Traditional-Simplified', 314 => 'Turkmen-Latin/BGN', 315 => 'Ukrainian-Latin/BGN', 316 => 'Uzbek-Latin/BGN', 317 => 'XSampa-IPA', 318 => 'Zawgyi-my', 319 => 'am-am_FONIPA', 320 => 'am-am_Latn/BGN', 321 => 'am-ar', 322 => 'am-chr', 323 => 'am-fa', 324 => 'am_FONIPA-am', 325 => 'ar-ar_Latn/BGN', 326 => 'az-Lower', 327 => 'az-Title', 328 => 'az-Upper', 329 => 'az_Cyrl-az/BGN', 330 => 'be-be_Latn/BGN', 331 => 'bg-bg_Latn/BGN', 332 => 'blt-blt_FONIPA', 333 => 'ch-am', 334 => 'ch-ar', 335 => 'ch-ch_FONIPA', 336 => 'ch-chr', 337 => 'ch-fa', 338 => 'chr-chr_FONIPA', 339 => 'cs-am', 340 => 'cs-ar', 341 => 'cs-chr', 342 => 'cs-cs_FONIPA', 343 => 'cs-fa', 344 => 'cs-ja', 345 => 'cs-ko', 346 => 'cs_FONIPA-ja', 347 => 'cs_FONIPA-ko', 348 => 'cy-cy_FONIPA', 349 => 'de-ASCII', 350 => 'dsb-dsb_FONIPA', 351 => 'dv-dv_Latn/BGN', 352 => 'el-Lower', 353 => 'el-Title', 354 => 'el-Upper', 355 => 'el-el_Latn/BGN', 356 => 'eo-am', 357 => 'eo-ar', 358 => 'eo-chr', 359 => 'eo-eo_FONIPA', 360 => 'eo-fa', 361 => 'es-am', 362 => 'es-ar', 363 => 'es-chr', 364 => 'es-es_FONIPA', 365 => 'es-fa', 366 => 'es-ja', 367 => 'es-zh', 368 => 'es_419-am', 369 => 'es_419-ar', 370 => 'es_419-chr', 371 => 'es_419-fa', 372 => 'es_419-ja', 373 => 'es_419-zh', 374 => 'es_FONIPA-am', 375 => 'es_FONIPA-es_419_FONIPA', 376 => 'es_FONIPA-ja', 377 => 'es_FONIPA-zh', 378 => 'fa-fa_FONIPA', 379 => 'fa-fa_Latn/BGN', 380 => 'ha-ha_NE', 381 => 'he-he_Latn/BGN', 382 => 'hy-am', 383 => 'hy-ar', 384 => 'hy-chr', 385 => 'hy-fa', 386 => 'hy-hy_FONIPA', 387 => 'hy-hy_Latn/BGN', 388 => 'hy_AREVMDA-am', 389 => 'hy_AREVMDA-ar', 390 => 'hy_AREVMDA-chr', 391 => 'hy_AREVMDA-fa', 392 => 'hy_AREVMDA-hy_AREVMDA_FONIPA', 393 => 'ia-am', 394 => 'ia-ar', 395 => 'ia-chr', 396 => 'ia-fa', 397 => 'ia-ia_FONIPA', 398 => 'it-am', 399 => 'it-ja', 400 => 'ja_Hrkt-ja_Latn/BGN', 401 => 'ja_Latn-ko', 402 => 'ja_Latn-ru', 403 => 'ka-ka_Latn/BGN', 404 => 'ka-ka_Latn/BGN_1981', 405 => 'kk-am', 406 => 'kk-ar', 407 => 'kk-chr', 408 => 'kk-fa', 409 => 'kk-kk_FONIPA', 410 => 'kk-kk_Latn/BGN', 411 => 'ko-ko_Latn/BGN', 412 => 'ky-am', 413 => 'ky-ar', 414 => 'ky-chr', 415 => 'ky-fa', 416 => 'ky-ky_FONIPA', 417 => 'ky-ky_Latn/BGN', 418 => 'la-la_FONIPA', 419 => 'lt-Lower', 420 => 'lt-Title', 421 => 'lt-Upper', 422 => 'mk-mk_Latn/BGN', 423 => 'mn-mn_Latn/BGN', 424 => 'mn-mn_Latn/MNS', 425 => 'my-Zawgyi', 426 => 'my-am', 427 => 'my-ar', 428 => 'my-chr', 429 => 'my-fa', 430 => 'my-my_FONIPA', 431 => 'nl-Title', 432 => 'nv-nv_FONIPA', 433 => 'pl-am', 434 => 'pl-ar', 435 => 'pl-chr', 436 => 'pl-fa', 437 => 'pl-ja', 438 => 'pl-pl_FONIPA', 439 => 'pl_FONIPA-ja', 440 => 'ps-ps_Latn/BGN', 441 => 'rm_SURSILV-am', 442 => 'rm_SURSILV-ar', 443 => 'rm_SURSILV-chr', 444 => 'rm_SURSILV-fa', 445 => 'rm_SURSILV-rm_FONIPA_SURSILV', 446 => 'ro-am', 447 => 'ro-ar', 448 => 'ro-chr', 449 => 'ro-fa', 450 => 'ro-ja', 451 => 'ro-ro_FONIPA', 452 => 'ro_FONIPA-ja', 453 => 'ru-ja', 454 => 'ru-ru_Latn/BGN', 455 => 'ru-zh', 456 => 'ru_Latn-ru/BGN', 457 => 'sat-am', 458 => 'sat-ar', 459 => 'sat-chr', 460 => 'sat-fa', 461 => 'sat_Olck-sat_FONIPA', 462 => 'si-am', 463 => 'si-ar', 464 => 'si-chr', 465 => 'si-fa', 466 => 'si-si_FONIPA', 467 => 'si-si_Latn', 468 => 'sk-am', 469 => 'sk-ar', 470 => 'sk-chr', 471 => 'sk-fa', 472 => 'sk-ja', 473 => 'sk-sk_FONIPA', 474 => 'sk_FONIPA-ja', 475 => 'sr-sr_Latn/BGN', 476 => 'ta-ta_FONIPA', 477 => 'tk_Cyrl-tk/BGN', 478 => 'tlh-am', 479 => 'tlh-ar', 480 => 'tlh-chr', 481 => 'tlh-fa', 482 => 'tlh-tlh_FONIPA', 483 => 'tr-Lower', 484 => 'tr-Title', 485 => 'tr-Upper', 486 => 'ug-ug_FONIPA', 487 => 'uk-uk_Latn/BGN', 488 => 'und_FONIPA-ar', 489 => 'und_FONIPA-chr', 490 => 'und_FONIPA-fa', 491 => 'und_FONIPA-und_FONXSAMP', 492 => 'und_FONXSAMP-und_FONIPA', 493 => 'uz_Cyrl-uz/BGN', 494 => 'uz_Cyrl-uz_Latn', 495 => 'uz_Latn-uz_Cyrl', 496 => 'vec-vec_FONIPA', 497 => 'xh-am', 498 => 'xh-ar', 499 => 'xh-chr', 500 => 'xh-fa', 501 => 'xh-xh_FONIPA', 502 => 'yo-yo_BJ', 503 => 'zh_Latn_PINYIN-ru', 504 => 'zu-am', 505 => 'zu-ar', 506 => 'zu-chr', 507 => 'zu-fa', 508 => 'zu-zu_FONIPA', 509 => 'Any-Null', 510 => 'Any-Lower', 511 => 'Any-Upper', 512 => 'Any-Title', 513 => 'Any-Name', 514 => 'Name-Any', 515 => 'Any-Remove', 516 => 'Any-Hex/Unicode', 517 => 'Any-Hex/Java', 518 => 'Any-Hex/C', 519 => 'Any-Hex/XML', 520 => 'Any-Hex/XML10', 521 => 'Any-Hex/Perl', 522 => 'Any-Hex', 523 => 'Hex-Any/Unicode', 524 => 'Hex-Any/Java', 525 => 'Hex-Any/C', 526 => 'Hex-Any/XML', 527 => 'Hex-Any/XML10', 528 => 'Hex-Any/Perl', 529 => 'Hex-Any', 530 => 'Any-NFC', 531 => 'Any-NFKC', 532 => 'Any-NFD', 533 => 'Any-NFKD', 534 => 'Any-FCD', 535 => 'Any-FCC', 536 => 'Any-fa', 537 => 'Any-ar', 538 => 'Any-chr', 539 => 'Any-rm_FONIPA_SURSILV', 540 => 'Any-am', 541 => 'Any-Latn', 542 => 'Any-dv_Latn/BGN', 543 => 'Any-ro_FONIPA', 544 => 'Any-dsb_FONIPA', 545 => 'Any-Latin', 546 => 'Any-he_Latn/BGN', 547 => 'Any-el_Latn/BGN', 548 => 'Any-eo_FONIPA', 549 => 'Any-si_Latn', 550 => 'Any-si_FONIPA', 551 => 'Any-zh', 552 => 'Any-es_FONIPA', 553 => 'Any-sk_FONIPA', 554 => 'Any-und_FONIPA', 555 => 'Any-und_FONXSAMP', 556 => 'Any-az/BGN', 557 => 'Any-Deva', 558 => 'Any-Arab', 559 => 'Any-Telu', 560 => 'Any-Beng', 561 => 'Any-ur', 562 => 'Any-Orya', 563 => 'Any-Guru', 564 => 'Any-Taml', 565 => 'Any-Gujr', 566 => 'Any-Knda', 567 => 'Any-Armenian', 568 => 'Any-Thaana', 569 => 'Any-Hiragana', 570 => 'Any-Syriac', 571 => 'Any-Jamo', 572 => 'Any-Hangul', 573 => 'Any-Kannada', 574 => 'Any-Georgian', 575 => 'Any-Telugu', 576 => 'Any-Cyrillic', 577 => 'Any-Thai', 578 => 'Any-Oriya', 579 => 'Any-Bopomofo', 580 => 'Any-Malayalam', 581 => 'Any-Gurmukhi', 582 => 'Any-Gujarati', 583 => 'Any-Tamil', 584 => 'Any-Katakana', 585 => 'Any-Hebrew', 586 => 'Any-Bengali', 587 => 'Any-Arabic', 588 => 'Any-Greek', 589 => 'Any-Greek/UNGEGN', 590 => 'Any-Devanagari', 591 => 'Any-fa_FONIPA', 592 => 'Any-fa_Latn/BGN', 593 => 'Any-ta_FONIPA', 594 => 'Any-Mlym', 595 => 'Any-Any', 596 => 'Any-Hant', 597 => 'Any-Hans', 598 => 'Any-uz_Cyrl', 599 => 'Any-blt_FONIPA', 600 => 'Any-ug_FONIPA', 601 => 'Any-uk_Latn/BGN', 602 => 'Any-ha_NE', 603 => 'Any-hy_AREVMDA_FONIPA', 604 => 'Any-hy_FONIPA', 605 => 'Any-hy_Latn/BGN', 606 => 'Any-ia_FONIPA', 607 => 'Any-uz/BGN', 608 => 'Any-uz_Latn', 609 => 'Any-vec_FONIPA', 610 => 'Any-xh_FONIPA', 611 => 'Any-ka_Latn/BGN', 612 => 'Any-ka_Latn/BGN_1981', 613 => 'Any-kk_FONIPA', 614 => 'Any-kk_Latn/BGN', 615 => 'Any-yo_BJ', 616 => 'Any-ky_FONIPA', 617 => 'Any-ky_Latn/BGN', 618 => 'Any-la_FONIPA', 619 => 'Any-ru_Latn/BGN', 620 => 'Any-chr_FONIPA', 621 => 'Any-zu_FONIPA', 622 => 'Any-ru', 623 => 'Any-Geor', 624 => 'Any-Cyrl', 625 => 'Any-Armn', 626 => 'Any-Thaa', 627 => 'Any-Hebr', 628 => 'Any-Grek', 629 => 'Any-Grek/UNGEGN', 630 => 'Any-Syrc', 631 => 'Any-Hira', 632 => 'Any-Hang', 633 => 'Any-Kana', 634 => 'Any-Bopo', 635 => 'Any-mn_Latn/BGN', 636 => 'Any-mn_Latn/MNS', 637 => 'Any-my_FONIPA', 638 => 'Any-sr_Latn/BGN', 639 => 'Any-nv_FONIPA', 640 => 'Any-sat_FONIPA', 641 => 'Any-my', 642 => 'Any-am_FONIPA', 643 => 'Any-am_Latn/BGN', 644 => 'Any-ar_Latn/BGN', 645 => 'Any-mk_Latn/BGN', 646 => 'Any-be_Latn/BGN', 647 => 'Any-bg_Latn/BGN', 648 => 'Any-es_419_FONIPA', 649 => 'Any-pl_FONIPA', 650 => 'Any-ps_Latn/BGN', 651 => 'Any-tk/BGN', 652 => 'Any-ch_FONIPA', 653 => 'Any-cs_FONIPA', 654 => 'Any-cy_FONIPA'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/utf8_fix.php b/includes/libraries/anti-xss-master/src/voku/helper/data/utf8_fix.php
new file mode 100644
index 000000000..e61623f29
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/utf8_fix.php
@@ -0,0 +1,152 @@
+<?php
+
+// code source:  https://github.com/devgeniem/wp-sanitize-accented-uploads/blob/master/plugin.php#L152
+// table source: http://www.i18nqa.com/debug/utf8-debug.html
+
+return [
+    // 3 char errors
+    'â€š' => '‚',
+    'â€ž' => '„',
+    'â€¦' => '…',
+    'â€¡' => '‡',
+    'â€°' => '‰',
+    'â€¹' => '‹',
+    'â€˜' => '‘',
+    'â€™' => '’',
+    'â€œ' => '“',
+    'â€¢' => '•',
+    'â€“' => '–',
+    'â€”' => '—',
+    'â„¢' => '™',
+    'â€º' => '›',
+    'â‚¬' => '€',
+    // 2 char errors
+    "\xc2\x80" => "\xe2\x82\xac", // EURO SIGN
+    "\xc2\x82" => "\xe2\x80\x9a", // SINGLE LOW-9 QUOTATION MARK
+    "\xc2\x83" => "\xc6\x92", // LATIN SMALL LETTER F WITH HOOK
+    "\xc2\x84" => "\xe2\x80\x9e", // DOUBLE LOW-9 QUOTATION MARK
+    "\xc2\x85" => "\xe2\x80\xa6", // HORIZONTAL ELLIPSIS
+    "\xc2\x86" => "\xe2\x80\xa0", // DAGGER
+    "\xc2\x87" => "\xe2\x80\xa1", // DOUBLE DAGGER
+    "\xc2\x88" => "\xcb\x86", // MODIFIER LETTER CIRCUMFLEX ACCENT
+    "\xc2\x89" => "\xe2\x80\xb0", // PER MILLE SIGN
+    "\xc2\x8a" => "\xc5\xa0", // LATIN CAPITAL LETTER S WITH CARON
+    "\xc2\x8b" => "\xe2\x80\xb9", // SINGLE LEFT-POINTING ANGLE QUOTE
+    "\xc2\x8c" => "\xc5\x92", // LATIN CAPITAL LIGATURE OE
+    "\xc2\x8e" => "\xc5\xbd", // LATIN CAPITAL LETTER Z WITH CARON
+    "\xc2\x91" => "\xe2\x80\x98", // LEFT SINGLE QUOTATION MARK
+    "\xc2\x92" => "\xe2\x80\x99", // RIGHT SINGLE QUOTATION MARK
+    "\xc2\x93" => "\xe2\x80\x9c", // LEFT DOUBLE QUOTATION MARK
+    "\xc2\x94" => "\xe2\x80\x9d", // RIGHT DOUBLE QUOTATION MARK
+    "\xc2\x95" => "\xe2\x80\xa2", // BULLET
+    "\xc2\x96" => "\xe2\x80\x93", // EN DASH
+    "\xc2\x97" => "\xe2\x80\x94", // EM DASH
+    "\xc2\x98" => "\xcb\x9c", // SMALL TILDE
+    'Ã‚'       => 'Â',
+    'Æ’'       => 'ƒ',
+    'Ãƒ'       => 'Ã',
+    'Ã„'       => 'Ä',
+    'Ã…'       => 'Å',
+    //'â€'       => '†', // duplicate key
+    'Ã†' => 'Æ',
+    'Ã‡' => 'Ç',
+    'Ë†' => 'ˆ',
+    'Ãˆ' => 'È',
+    'Ã‰' => 'É',
+    'ÃŠ' => 'Ê',
+    'Ã‹' => 'Ë',
+    'Å’' => 'Œ',
+    'ÃŒ' => 'Ì',
+    'Å½' => 'Ž',
+    'ÃŽ' => 'Î',
+    'Ã‘' => 'Ñ',
+    'Ã’' => 'Ò',
+    'Ã“' => 'Ó',
+    'â€' => '”',
+    'Ã”' => 'Ô',
+    'Ã•' => 'Õ',
+    'Ã–' => 'Ö',
+    'Ã—' => '×',
+    'Ëœ' => '˜',
+    'Ã˜' => 'Ø',
+    'Ã™' => 'Ù',
+    'Å¡' => 'š',
+    'Ãš' => 'Ú',
+    'Ã›' => 'Û',
+    'Å“' => 'œ',
+    'Ãœ' => 'Ü',
+    'Å¾' => 'ž',
+    'Ãž' => 'Þ',
+    'Å¸' => 'Ÿ',
+    'ÃŸ' => 'ß',
+    'Â¡' => '¡',
+    'Ã¡' => 'á',
+    'Â¢' => '¢',
+    'Ã¢' => 'â',
+    'Â£' => '£',
+    'Ã£' => 'ã',
+    'Â¤' => '¤',
+    'Ã¤' => 'ä',
+    'Â¥' => '¥',
+    'Ã¥' => 'å',
+    'Â¦' => '¦',
+    'Ã¦' => 'æ',
+    'Â§' => '§',
+    'Ã§' => 'ç',
+    'Â¨' => '¨',
+    'Ã¨' => 'è',
+    'Â©' => '©',
+    'Ã©' => 'é',
+    'Âª' => 'ª',
+    'Ãª' => 'ê',
+    'Â«' => '«',
+    'Ã«' => 'ë',
+    'Â¬' => '¬',
+    'Ã¬' => 'ì',
+    'Â®' => '®',
+    'Ã®' => 'î',
+    'Â¯' => '¯',
+    'Ã¯' => 'ï',
+    'Â°' => '°',
+    'Ã°' => 'ð',
+    'Â±' => '±',
+    'Ã±' => 'ñ',
+    'Â²' => '²',
+    'Ã²' => 'ò',
+    'Â³' => '³',
+    'Ã³' => 'ó',
+    'Â´' => '´',
+    'Ã´' => 'ô',
+    'Âµ' => 'µ',
+    'Ãµ' => 'õ',
+    'Â¶' => '¶',
+    'Ã¶' => 'ö',
+    'Â·' => '·',
+    'Ã·' => '÷',
+    'Â¸' => '¸',
+    'Ã¸' => 'ø',
+    'Â¹' => '¹',
+    'Ã¹' => 'ù',
+    'Âº' => 'º',
+    'Ãº' => 'ú',
+    'Â»' => '»',
+    'Ã»' => 'û',
+    'Â¼' => '¼',
+    'Ã¼' => 'ü',
+    'Â½' => '½',
+    'Ã½' => 'ý',
+    'Â¾' => '¾',
+    'Ã¾' => 'þ',
+    'Â¿' => '¿',
+    'Ã¿' => 'ÿ',
+    'Ã€' => 'À',
+    // 1 char errors last (don't use them, because of false-positives)
+    //'Ã'        => 'Á',
+    //'Å'        => 'Š',
+    //'Ã'        => 'Í',
+    //'Ã'        => 'Ï',
+    //'Ã'        => 'Ð',
+    //'Ã'        => 'Ý',
+    //'Ã'        => 'à',
+    //'Ã'        => 'í',
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/win1252_to_utf8.php b/includes/libraries/anti-xss-master/src/voku/helper/data/win1252_to_utf8.php
new file mode 100644
index 000000000..46ad53c6c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/win1252_to_utf8.php
@@ -0,0 +1,126 @@
+<?php
+
+return [
+    0x80 => "\xe2\x82\xac", // €
+    0x82 => "\xe2\x80\x9a", // ‚
+    0x83 => "\xc6\x92",     // ƒ
+    0x84 => "\xe2\x80\x9e", // „
+    0x85 => "\xe2\x80\xa6", // …
+    0x86 => "\xe2\x80\xa0", // †
+    0x87 => "\xe2\x80\xa1", // ‡
+    0x88 => "\xcb\x86",     // ˆ
+    0x89 => "\xe2\x80\xb0", // ‰
+    0x8a => "\xc5\xa0",     // Š
+    0x8b => "\xe2\x80\xb9", // ‹
+    0x8c => "\xc5\x92",     // Œ
+    0x8e => "\xc5\xbd",     // Ž
+    0x91 => "\xe2\x80\x98", // ‘
+    0x92 => "\xe2\x80\x99", // ’
+    0x93 => "\xe2\x80\x9c", // “
+    0x94 => "\xe2\x80\x9d", // ”
+    0x95 => "\xe2\x80\xa2", // •
+    0x96 => "\xe2\x80\x93", // –
+    0x97 => "\xe2\x80\x94", // —
+    0x98 => "\xcb\x9c",     // ˜
+    0x99 => "\xe2\x84\xa2", // ™
+    0x9a => "\xc5\xa1",     // š
+    0x9b => "\xe2\x80\xba", // ›
+    0x9c => "\xc5\x93",     // œ
+    0x9e => "\xc5\xbe",     // ž
+    0x9f => "\xc5\xb8",     // Ÿ
+    0xa0 => "\xc2\xa0",
+    0xa1 => "\xc2\xa1",     // ¡
+    0xa2 => "\xc2\xa2",     // ¢
+    0xa3 => "\xc2\xa3",     // £
+    0xa4 => "\xc2\xa4",     // ¤
+    0xa5 => "\xc2\xa5",     // ¥
+    0xa6 => "\xc2\xa6",     // ¦
+    0xa7 => "\xc2\xa7",     // §
+    0xa8 => "\xc2\xa8",     // ¨
+    0xa9 => "\xc2\xa9",     // ©
+    0xaa => "\xc2\xaa",     // ª
+    0xab => "\xc2\xab",     // «
+    0xac => "\xc2\xac",     // ¬
+    0xad => "\xc2\xad",     // ­
+    0xae => "\xc2\xae",     // ®
+    0xaf => "\xc2\xaf",     // ¯
+    0xb0 => "\xc2\xb0",     // °
+    0xb1 => "\xc2\xb1",     // ±
+    0xb2 => "\xc2\xb2",     // ²
+    0xb3 => "\xc2\xb3",     // ³
+    0xb4 => "\xc2\xb4",     // ´
+    0xb5 => "\xc2\xb5",     // µ
+    0xb6 => "\xc2\xb6",     // ¶
+    0xb7 => "\xc2\xb7",     // ·
+    0xb8 => "\xc2\xb8",     // ¸
+    0xb9 => "\xc2\xb9",     // ¹
+    0xba => "\xc2\xba",     // º
+    0xbb => "\xc2\xbb",     // »
+    0xbc => "\xc2\xbc",     // ¼
+    0xbd => "\xc2\xbd",     // ½
+    0xbe => "\xc2\xbe",     // ¾
+    0xbf => "\xc2\xbf",     // ¿
+    0xc0 => "\xc3\x80",     // À
+    0xc1 => "\xc3\x81",     // Á
+    0xc2 => "\xc3\x82",     // Â
+    0xc3 => "\xc3\x83",     // Ã
+    0xc4 => "\xc3\x84",     // Ä
+    0xc5 => "\xc3\x85",     // Å
+    0xc6 => "\xc3\x86",     // Æ
+    0xc7 => "\xc3\x87",     // Ç
+    0xc8 => "\xc3\x88",     // È
+    0xc9 => "\xc3\x89",     // É
+    0xca => "\xc3\x8a",     // Ê
+    0xcb => "\xc3\x8b",     // Ë
+    0xcc => "\xc3\x8c",     // Ì
+    0xcd => "\xc3\x8d",     // Í
+    0xce => "\xc3\x8e",     // Î
+    0xcf => "\xc3\x8f",     // Ï
+    0xd0 => "\xc3\x90",     // Ð
+    0xd1 => "\xc3\x91",     // Ñ
+    0xd2 => "\xc3\x92",     // Ò
+    0xd3 => "\xc3\x93",     // Ó
+    0xd4 => "\xc3\x94",     // Ô
+    0xd5 => "\xc3\x95",     // Õ
+    0xd6 => "\xc3\x96",     // Ö
+    0xd7 => "\xc3\x97",     // ×
+    0xd8 => "\xc3\x98",     // Ø
+    0xd9 => "\xc3\x99",     // Ù
+    0xda => "\xc3\x9a",     // Ú
+    0xdb => "\xc3\x9b",     // Û
+    0xdc => "\xc3\x9c",     // Ü
+    0xdd => "\xc3\x9d",     // Ý
+    0xde => "\xc3\x9e",     // Þ
+    0xdf => "\xc3\x9f",     // ß
+    0xe0 => "\xc3\xa0",     // à
+    0xe1 => "\xc3\xa1",     // á
+    0xe2 => "\xc3\xa2",     // â
+    0xe3 => "\xc3\xa3",     // ã
+    0xe4 => "\xc3\xa4",     // ä
+    0xe5 => "\xc3\xa5",     // å
+    0xe6 => "\xc3\xa6",     // æ
+    0xe7 => "\xc3\xa7",     // ç
+    0xe8 => "\xc3\xa8",     // è
+    0xe9 => "\xc3\xa9",     // é
+    0xea => "\xc3\xaa",     // ê
+    0xeb => "\xc3\xab",     // ë
+    0xec => "\xc3\xac",     // ì
+    0xed => "\xc3\xad",     // í
+    0xee => "\xc3\xae",     // î
+    0xef => "\xc3\xaf",     // ï
+    0xf0 => "\xc3\xb0",     // ð
+    0xf1 => "\xc3\xb1",     // ñ
+    0xf2 => "\xc3\xb2",     // ò
+    0xf3 => "\xc3\xb3",     // ó
+    0xf4 => "\xc3\xb4",     // ô
+    0xf5 => "\xc3\xb5",     // õ
+    0xf6 => "\xc3\xb6",     // ö
+    0xf7 => "\xc3\xb7",     // ÷
+    0xf8 => "\xc3\xb8",     // ø
+    0xf9 => "\xc3\xb9",     // ù
+    0xfa => "\xc3\xba",     // ú
+    0xfb => "\xc3\xbb",     // û
+    0xfc => "\xc3\xbc",     // ü
+    0xfd => "\xc3\xbd",     // ý
+    0xfe => "\xc3\xbe",     // þ
+];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x000.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x000.php
new file mode 100644
index 000000000..6c9d81f9d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x000.php
@@ -0,0 +1,16 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '', 'EUR',  // "\xc2\x80" => "\xe2\x82\xac" => EURO SIGN
+    '', ',', 'f', ',,',   // "\xc2\x84" => "\xe2\x80\x9e" => DOUBLE LOW-9 QUOTATION MARK
+    '...',  // "\xc2\x85" => "\xe2\x80\xa6" =>  HORIZONTAL ELLIPSIS
+    '+', '++',   // "\xc2\x87" => "\xe2\x80\xa1" => DOUBLE DAGGER
+    '^', '%0',   // "\xc2\x89" => "\xe2\x80\xb0" => PER MILLE SIGN
+    'S', '<', 'OE',   // "\xc2\x8c" => "\xc5\x92" => LATIN CAPITAL LIGATURE OE
+    '', 'Z', '', '', '\'',   // "\xc2\x91" => "\xe2\x80\x98" => LEFT SINGLE QUOTATION MARK
+    '\'',   // "\xc2\x92" => "\xe2\x80\x99" => RIGHT SINGLE QUOTATION MARK
+    '"', '"', '*', '-', '--',   // "\xc2\x97" => "\xe2\x80\x94" => EM DASH
+    '~', 'tm', 's', '>', 'oe', '', 'z', 'Y', ' ', '!', 'C/', 'PS', '$?', 'Y=', '|', 'SS', '"', '(c)', 'a', '<<', '!', '', '(r)', '-', 'deg', '+-', '2', '3', '\'', 'u', 'P', '*', ',', '1', 'o', '>>', '1/4', '1/2', '3/4', '?', 'A', 'A', 'A', 'A', // Not "AE" - used in languages other than German
+    'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', // Not "OE" - used in languages other than German
+    'O', 'x', 'O', 'U', 'U', 'U', // Not "UE" - used in languages other than German
+    'U', 'Y', 'Th', 'ss', 'a', 'a', 'a', 'a', // Not "ae" - used in languages other than German
+    'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'd', 'n', 'o', 'o', 'o', 'o', // Not "oe" - used in languages other than German
+    'o', '/', 'o', 'u', 'u', 'u', // Not "ue" - used in languages other than German
+    'u', 'y', 'th', 'y', ];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x001.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x001.php
new file mode 100644
index 000000000..87fb12fb9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x001.php
@@ -0,0 +1 @@
+<?php return ['A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '\'n', 'ng', 'NG', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'b', 'B', 'B', 'b', '6', '6', 'O', 'C', 'c', 'D', 'D', 'D', 'd', 'd', '3', '@', 'E', 'F', 'f', 'G', 'G', 'hv', 'I', 'I', 'K', 'k', 'l', 'l', 'W', 'N', 'n', 'O', 'O', 'o', 'OI', 'oi', 'P', 'p', 'YR', '2', '2', 'SH', 'sh', 't', 'T', 't', 'T', 'U', 'u', 'Y', 'V', 'Y', 'y', 'Z', 'z', 'ZH', 'ZH', 'zh', 'zh', '2', '5', '5', 'ts', 'w', '|', '||', '|=', '!', 'DZ', 'Dz', 'dz', 'LJ', 'Lj', 'lj', 'NJ', 'Nj', 'nj', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '@', 'A', 'a', 'A', 'a', 'AE', 'ae', 'G', 'g', 'G', 'g', 'K', 'k', 'O', 'o', 'O', 'o', 'ZH', 'zh', 'j', 'DZ', 'Dz', 'dz', 'G', 'g', 'HV', 'W', 'N', 'n', 'A', 'a', 'AE', 'ae', 'O', 'o'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x002.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x002.php
new file mode 100644
index 000000000..680e8690e
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x002.php
@@ -0,0 +1 @@
+<?php return ['A', 'a', 'A', 'a', 'E', 'e', 'E', 'e', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'R', 'r', 'R', 'r', 'U', 'u', 'U', 'u', 'S', 's', 'T', 't', 'Y', 'y', 'H', 'h', 'N', 'd', 'OU', 'ou', 'Z', 'z', 'A', 'a', 'E', 'e', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'Y', 'y', 'l', 'n', 't', 'j', 'db', 'qp', 'A', 'C', 'c', 'L', 'T', 's', 'z', '[?]', '[?]', 'B', 'U', '^', 'E', 'e', 'J', 'j', 'q', 'q', 'R', 'r', 'Y', 'y', 'a', 'a', 'a', 'b', 'o', 'c', 'd', 'd', 'e', '@', '@', 'e', 'e', 'e', 'e', 'j', 'g', 'g', 'g', 'g', 'u', 'Y', 'h', 'h', 'i', 'i', 'I', 'l', 'l', 'l', 'lZ', 'W', 'W', 'm', 'n', 'n', 'n', 'o', 'OE', 'O', 'F', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'R', 'R', 's', 'S', 'j', 'S', 'S', 't', 't', 'u', 'U', 'v', '^', 'w', 'y', 'Y', 'z', 'z', 'Z', 'Z', '?', '?', '?', 'C', '@', 'B', 'E', 'G', 'H', 'j', 'k', 'L', 'q', '?', '?', 'dz', 'dZ', 'dz', 'ts', 'tS', 'tC', 'fN', 'ls', 'lz', 'WW', ']]', 'h', 'h', 'h', 'h', 'j', 'r', 'r', 'r', 'r', 'w', 'y', '\'', '"', '`', '\'', '`', '`', '\'', '?', '?', '<', '>', '^', 'V', '^', 'V', '\'', '-', '/', '\\', ',', '_', '\\', '/', ':', '.', '`', '\'', '^', 'V', '+', '-', 'V', '.', '@', ',', '~', '"', 'R', 'X', 'G', 'l', 's', 'x', '?', '', '', '', '', '', '', '', 'V', '=', '"', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x003.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x003.php
new file mode 100644
index 000000000..3d02b86e2
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x003.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', 'a', 'e', 'i', 'o', 'u', 'c', 'd', 'h', 'm', 'r', 't', 'v', 'x', '[?]', '[?]', '[?]', '[?]', '\'', ',', '[?]', '[?]', '[?]', '[?]', '', '[?]', '[?]', '[?]', '?', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', 'A', ';', 'E', 'E', 'I', '[?]', 'O', '[?]', 'U', 'O', 'I', 'A', 'B', 'G', 'D', 'E', 'Z', 'E', 'Th', 'I', 'K', 'L', 'M', 'N', 'Ks', 'O', 'P', 'R', '[?]', 'S', 'T', 'U', 'Ph', 'Kh', 'Ps', 'O', 'I', 'U', 'a', 'e', 'e', 'i', 'u', 'a', 'b', 'g', 'd', 'e', 'z', 'e', 'th', 'i', 'k', 'l', 'm', 'n', 'x', 'o', 'p', 'r', 's', 's', 't', 'u', 'ph', 'kh', 'ps', 'o', 'i', 'u', 'o', 'u', 'o', '[?]', 'b', 'th', 'U', 'U', 'U', 'ph', 'p', '&', '[?]', '[?]', 'St', 'st', 'W', 'w', 'Q', 'q', 'Sp', 'sp', 'Sh', 'sh', 'F', 'f', 'Kh', 'kh', 'H', 'h', 'G', 'g', 'CH', 'ch', 'Ti', 'ti', 'k', 'r', 'c', 'j', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x004.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x004.php
new file mode 100644
index 000000000..ee92a0ca7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x004.php
@@ -0,0 +1 @@
+<?php return ['Ie', 'Io', 'Dj', 'Gj', 'Ie', 'Dz', 'I', 'Yi', 'J', 'Lj', 'Nj', 'Tsh', 'Kj', 'I', 'U', 'Dzh', 'A', 'B', 'V', 'G', 'D', 'E', 'Zh', 'Z', 'I', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'Kh', 'Ts', 'Ch', 'Sh', 'Shch', '\'', 'Y', '\'', 'E', 'Iu', 'Ia', 'a', 'b', 'v', 'g', 'd', 'e', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'kh', 'ts', 'ch', 'sh', 'shch', '\'', 'y', '\'', 'e', 'iu', 'ia', 'ie', 'io', 'dj', 'gj', 'ie', 'dz', 'i', 'yi', 'j', 'lj', 'nj', 'tsh', 'kj', 'i', 'u', 'dzh', 'O', 'o', 'E', 'e', 'Ie', 'ie', 'E', 'e', 'Ie', 'ie', 'O', 'o', 'Io', 'io', 'Ks', 'ks', 'Ps', 'ps', 'F', 'f', 'Y', 'y', 'Y', 'y', 'u', 'u', 'O', 'o', 'O', 'o', 'Ot', 'ot', 'Q', 'q', '*1000*', '', '', '', '', '[?]', '*100.000*', '*1.000.000*', '[?]', '[?]', '"', '"', 'R\'', 'r\'', 'G\'', 'g\'', 'G\'', 'g\'', 'G\'', 'g\'', 'Zh\'', 'zh\'', 'Z\'', 'z\'', 'K\'', 'k\'', 'K\'', 'k\'', 'K\'', 'k\'', 'K\'', 'k\'', 'N\'', 'n\'', 'Ng', 'ng', 'P\'', 'p\'', 'Kh', 'kh', 'S\'', 's\'', 'T\'', 't\'', 'U', 'u', 'U\'', 'u\'', 'Kh\'', 'kh\'', 'Tts', 'tts', 'Ch\'', 'ch\'', 'Ch\'', 'ch\'', 'H', 'h', 'Ch', 'ch', 'Ch\'', 'ch\'', '`', 'Zh', 'zh', 'K\'', 'k\'', '[?]', '[?]', 'N\'', 'n\'', '[?]', '[?]', 'Ch', 'ch', '[?]', '[?]', '[?]', 'a', 'a', 'A', 'a', 'Ae', 'ae', 'Ie', 'ie', '@', '@', '@', '@', 'Zh', 'zh', 'Z', 'z', 'Dz', 'dz', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'O', 'o', 'E', 'e', 'U', 'u', 'U', 'u', 'U', 'u', 'Ch', 'ch', '[?]', '[?]', 'Y', 'y', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x005.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x005.php
new file mode 100644
index 000000000..2a2ccdf8c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x005.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'B', 'G', 'D', 'E', 'Z', 'E', 'E', 'T`', 'Zh', 'I', 'L', 'Kh', 'Ts', 'K', 'H', 'Dz', 'Gh', 'Ch', 'M', 'Y', 'N', 'Sh', 'O', 'Ch`', 'P', 'J', 'Rh', 'S', 'V', 'T', 'R', 'Ts`', 'W', 'P`', 'K`', 'O', 'F', '[?]', '[?]', '<', '\'', '/', '!', ',', '?', '.', '[?]', 'a', 'b', 'g', 'd', 'e', 'z', 'e', 'e', 't`', 'zh', 'i', 'l', 'kh', 'ts', 'k', 'h', 'dz', 'gh', 'ch', 'm', 'y', 'n', 'sh', 'o', 'ch`', 'p', 'j', 'rh', 's', 'v', 't', 'r', 'ts`', 'w', 'p`', 'k`', 'o', 'f', 'ew', '[?]', ':', '-', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '@', 'e', 'a', 'o', 'i', 'e', 'e', 'a', 'a', 'o', 'o', 'u', '\'', '', '-', '-', '|', '', '', ':', '', '', 'n', 'o', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'b', 'g', 'd', 'h', 'v', 'z', 'KH', 't', 'y', 'k', 'k', 'l', 'm', 'm', 'n', 'n', 's', '`', 'p', 'p', 'TS', 'TS', 'q', 'r', 'SH', 't', '[?]', '[?]', '[?]', '[?]', '[?]', 'V', 'OY', 'i', '\'', '"', 'v', 'n', 'q', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x006.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x006.php
new file mode 100644
index 000000000..a49ed21f1
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x006.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ',', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ';', '[?]', '[?]', '[?]', '?', '[?]', '', 'a', 'a', 'w\'', '', 'y\'', '', 'b', '@', 't', 'th', 'j', 'H', 'kh', 'd', 'dh', 'r', 'z', 's', 'sh', 'S', 'D', 'T', 'Z', '`', 'G', '[?]', '[?]', '[?]', '[?]', '[?]', '', 'f', 'q', 'k', 'l', 'm', 'n', 'h', 'w', '~', 'y', 'an', 'un', 'in', 'a', 'u', 'i', 'W', '', '', '\'', '\'', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '%', '.', ',', '*', '[?]', '[?]', '', '\'', '\'', '\'', '', '\'', '\'w', '\'u', '\'y', 'tt', 'tth', 'b', 't', 'T', 'p', 'th', 'bh', '\'h', 'H', 'ny', 'dy', 'H', 'ch', 'cch', 'dd', 'D', 'D', 'Dt', 'dh', 'ddh', 'd', 'D', 'D', 'rr', 'R', 'R', 'R', 'R', 'R', 'R', 'j', 'R', 'S', 'S', 'S', 'S', 'S', 'T', 'GH', 'F', 'F', 'F', 'v', 'f', 'ph', 'Q', 'Q', 'kh', 'k', 'K', 'K', 'ng', 'K', 'g', 'G', 'N', 'G', 'G', 'G', 'L', 'L', 'L', 'L', 'N', 'N', 'N', 'N', 'N', 'h', 'Ch', 'hy', 'h', 'H', '@', 'W', 'oe', 'oe', 'u', 'yu', 'yu', 'W', 'v', 'y', 'Y', 'Y', 'W', '', '', 'y', 'y\'', '.', 'ae', '', '', '', '', '', '', '', '@', '#', '', '', '', '', '', '', '', '', '', '', '^', '', '', '', '', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'Sh', 'D', 'Gh', '&', '+m', 'h'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x007.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x007.php
new file mode 100644
index 000000000..7e6f3df45
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x007.php
@@ -0,0 +1 @@
+<?php return ['//', '/', ',', '!', '!', '-', ',', ',', ';', '?', '~', '{', '}', '*', '[?]', '', '\'', '', 'b', 'g', 'g', 'd', 'd', 'h', 'w', 'z', 'H', 't', 't', 'y', 'yh', 'k', 'l', 'm', 'n', 's', 's', '`', 'p', 'p', 'S', 'q', 'r', 'sh', 't', '[?]', '[?]', '[?]', 'a', 'a', 'a', 'A', 'A', 'A', 'e', 'e', 'e', 'E', 'i', 'i', 'u', 'u', 'u', 'o', '', '`', '\'', '', '', 'X', 'Q', '@', '@', '|', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'h', 'sh', 'n', 'r', 'b', 'L', 'k', '\'', 'v', 'm', 'f', 'dh', 'th', 'l', 'g', 'ny', 's', 'd', 'z', 't', 'y', 'p', 'j', 'ch', 'tt', 'hh', 'kh', 'th', 'z', 'sh', 's', 'd', 't', 'z', '`', 'gh', 'q', 'w', 'a', 'aa', 'i', 'ee', 'u', 'oo', 'e', 'ey', 'o', 'oa', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x009.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x009.php
new file mode 100644
index 000000000..47a9c49e9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x009.php
@@ -0,0 +1 @@
+<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', 'eN', 'e', 'e', 'ai', 'oN', 'o', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'nnn', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'l', 'lll', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'eN', 'e', 'e', 'ai', 'oN', 'o', 'o', 'au', '', '[?]', '[?]', 'AUM', '\'', '\'', '`', '\'', '[?]', '[?]', '[?]', 'q', 'khh', 'ghh', 'z', 'dddh', 'rh', 'f', 'yy', 'RR', 'LL', 'L', 'LL', ' / ', ' // ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', '[?]', 'l', '[?]', '[?]', '[?]', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', 'rr', 'rh', '[?]', 'yy', 'RR', 'LL', 'L', 'LL', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'r\'', 'r`', 'Rs', 'Rs', '1/', '2/', '3/', '4/', ' 1 - 1/', '/16', '', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00a.php
new file mode 100644
index 000000000..ed73cc63a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00a.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', 'N', '[?]', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', '[?]', 'ee', 'ai', '[?]', '[?]', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bb', 'm', 'y', 'r', '[?]', 'l', 'll', '[?]', 'v', 'sh', '[?]', 's', 'h', '[?]', '[?]', '\'', '[?]', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', '[?]', 'ee', 'ai', '[?]', '[?]', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'khh', 'ghh', 'z', 'rr', '[?]', 'f', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'N', 'H', '', '', 'G.E.O.', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', 'eN', '[?]', 'e', 'ai', 'oN', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'ya', 'r', '[?]', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'eN', '[?]', 'e', 'ai', 'oN', '[?]', 'o', 'au', '', '[?]', '[?]', 'AUM', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00b.php
new file mode 100644
index 000000000..68d1ab70b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00b.php
@@ -0,0 +1 @@
+<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', '[?]', 'l', 'll', '[?]', '', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', 'rr', 'rh', '[?]', 'yy', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', '[?]', '[?]', '[?]', 'ng', 'c', '[?]', 'j', '[?]', 'ny', 'tt', '[?]', '[?]', '[?]', 'nn', 't', '[?]', '[?]', '[?]', 'n', 'nnn', 'p', '[?]', '[?]', '[?]', 'm', 'y', 'r', 'rr', 'l', 'll', 'lll', 'v', '[?]', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+10+', '+100+', '+1000+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00c.php
new file mode 100644
index 000000000..96b0d1faf
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00c.php
@@ -0,0 +1 @@
+<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'lll', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00d.php
new file mode 100644
index 000000000..a8722bbbd
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00d.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', 'lll', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', '[?]', 'e', 'ee', 'ai', '', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'ae', 'aae', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'L', 'LL', 'e', 'ee', 'ai', 'o', 'oo', 'au', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'nng', 'c', 'ch', 'j', 'jh', 'ny', 'jny', 'nyj', 'tt', 'tth', 'dd', 'ddh', 'nn', 'nndd', 't', 'th', 'd', 'dh', 'n', '[?]', 'nd', 'p', 'ph', 'b', 'bh', 'm', 'mb', 'y', 'r', '[?]', 'l', '[?]', '[?]', 'v', 'sh', 'ss', 's', 'h', 'll', 'f', '[?]', '[?]', '[?]', '', '[?]', '[?]', '[?]', '[?]', 'aa', 'ae', 'aae', 'i', 'ii', 'u', '[?]', 'uu', '[?]', 'R', 'e', 'ee', 'ai', 'o', 'oo', 'au', 'L', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', ' . ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00e.php
new file mode 100644
index 000000000..d48ef5ee2
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00e.php
@@ -0,0 +1 @@
+<?php return ['[?]', 'k', 'kh', 'kh', 'kh', 'kh', 'kh', 'ng', 'cch', 'ch', 'ch', 'ch', 'ch', 'y', 'd', 't', 'th', 'th', 'th', 'n', 'd', 't', 'th', 'th', 'th', 'n', 'b', 'p', 'ph', 'f', 'ph', 'f', 'ph', 'm', 'y', 'r', 'R', 'l', 'L', 'w', 's', 's', 's', 'h', 'l', '`', 'h', '~', 'a', 'a', 'aa', 'am', 'i', 'ii', 'ue', 'uue', 'u', 'uu', '\'', '[?]', '[?]', '[?]', '[?]', 'Bh.', 'e', 'ae', 'o', 'ai', 'ai', 'ao', '+', '', '', '', '', '', '', 'M', '', ' * ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' // ', ' /// ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', '[?]', 'kh', '[?]', '[?]', 'ng', 'ch', '[?]', 's', '[?]', '[?]', 'ny', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'd', 'h', 'th', 'th', '[?]', 'n', 'b', 'p', 'ph', 'f', 'ph', 'f', '[?]', 'm', 'y', 'r', '[?]', 'l', '[?]', 'w', '[?]', '[?]', 's', 'h', '[?]', '`', '', '~', 'a', '', 'aa', 'am', 'i', 'ii', 'y', 'yy', 'u', 'uu', '[?]', 'o', 'l', 'ny', '[?]', '[?]', 'e', 'ei', 'o', 'ay', 'ai', '[?]', '+', '[?]', '', '', '', '', '', 'M', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', 'hn', 'hm', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x00f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x00f.php
new file mode 100644
index 000000000..1b16ca78d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x00f.php
@@ -0,0 +1 @@
+<?php return ['AUM', '', '', '', '', '', '', '', ' // ', ' * ', '', '-', ' / ', ' / ', ' // ', ' -/ ', ' +/ ', ' X/ ', ' /XX/ ', ' /X/ ', ', ', '', '', '', '', '', '', '', '', '', '', '', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.5', '1.5', '2.5', '3.5', '4.5', '5.5', '6.5', '7.5', '8.5', '-.5', '+', '*', '^', '_', '', '~', '[?]', ']', '[[', ']]', '', '', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', '[?]', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'ts', 'tsh', 'dz', 'dzh', 'w', 'zh', 'z', '\'', 'y', 'r', 'l', 'sh', 'ssh', 's', 'h', 'a', 'kss', 'r', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'L', 'LL', 'e', 'ee', 'o', 'oo', 'M', 'H', 'i', 'ii', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', '[?]', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'ts', 'tsh', 'dz', 'dzh', 'w', 'zh', 'z', '\'', 'y', 'r', 'l', 'sh', 'ss', 's', 'h', 'a', 'kss', 'w', 'y', 'r', '[?]', 'X', ' :X: ', ' /O/ ', ' /o/ ', ' \\o\\ ', ' (O) ', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x010.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x010.php
new file mode 100644
index 000000000..b9c3a65b1
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x010.php
@@ -0,0 +1 @@
+<?php return ['k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'nny', 'tt', 'tth', 'dd', 'ddh', 'nn', 'tt', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'l', 'w', 's', 'h', 'll', 'a', '[?]', 'i', 'ii', 'u', 'uu', 'e', '[?]', 'o', 'au', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'e', 'ai', '[?]', '[?]', '[?]', 'N', '\'', ':', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' / ', ' // ', 'n*', 'r*', 'l*', 'e*', 'sh', 'ss', 'R', 'RR', 'L', 'LL', 'R', 'RR', 'L', 'LL', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'B', 'G', 'D', 'E', 'V', 'Z', 'T`', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Zh', 'R', 'S', 'T', 'U', 'P`', 'K`', 'G\'', 'Q', 'Sh', 'Ch`', 'C`', 'Z\'', 'C', 'Ch', 'X', 'J', 'H', 'E', 'Y', 'W', 'Xh', 'OE', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'b', 'g', 'd', 'e', 'v', 'z', 't`', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'zh', 'r', 's', 't', 'u', 'p`', 'k`', 'g\'', 'q', 'sh', 'ch`', 'c`', 'z\'', 'c', 'ch', 'x', 'j', 'h', 'e', 'y', 'w', 'xh', 'oe', 'f', '[?]', '[?]', '[?]', '[?]', ' // ', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x011.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x011.php
new file mode 100644
index 000000000..32bdb8cdb
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x011.php
@@ -0,0 +1 @@
+<?php return ['g', 'gg', 'n', 'd', 'dd', 'r', 'm', 'b', 'bb', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', 'ng', 'nn', 'nd', 'nb', 'dg', 'rn', 'rr', 'rh', 'rN', 'mb', 'mN', 'bg', 'bn', '', 'bs', 'bsg', 'bst', 'bsb', 'bss', 'bsj', 'bj', 'bc', 'bt', 'bp', 'bN', 'bbN', 'sg', 'sn', 'sd', 'sr', 'sm', 'sb', 'sbg', 'sss', 's', 'sj', 'sc', 'sk', 'st', 'sp', 'sh', '', '', '', '', 'Z', 'g', 'd', 'm', 'b', 's', 'Z', '', 'j', 'c', 't', 'p', 'N', 'j', '', '', '', '', 'ck', 'ch', '', '', 'pb', 'pN', 'hh', 'Q', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', 'a', 'ae', 'ya', 'yae', 'eo', 'e', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', 'yo', 'u', 'weo', 'we', 'wi', 'yu', 'eu', 'yi', 'i', 'a-o', 'a-u', 'ya-o', 'ya-yo', 'eo-o', 'eo-u', 'eo-eu', 'yeo-o', 'yeo-u', 'o-eo', 'o-e', 'o-ye', 'o-o', 'o-u', 'yo-ya', 'yo-yae', 'yo-yeo', 'yo-o', 'yo-i', 'u-a', 'u-ae', 'u-eo-eu', 'u-ye', 'u-u', 'yu-a', 'yu-eo', 'yu-e', 'yu-yeo', 'yu-ye', 'yu-u', 'yu-i', 'eu-u', 'eu-eu', 'yi-u', 'i-a', 'i-ya', 'i-o', 'i-u', 'i-eu', 'i-U', 'U', 'U-eo', 'U-u', 'U-i', 'UU', '[?]', '[?]', '[?]', '[?]', '[?]', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'l', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'lh', 'm', 'b', 'bs', 's', 'ss', 'ng', 'j', 'c', 'k', 't', 'p', 'h', 'gl', 'gsg', 'ng', 'nd', 'ns', 'nZ', 'nt', 'dg', 'tl', 'lgs', 'ln', 'ld', 'lth', 'll', 'lmg', 'lms', 'lbs', 'lbh', 'rNp', 'lss', 'lZ', 'lk', 'lQ', 'mg', 'ml', 'mb', 'ms', 'mss', 'mZ', 'mc', 'mh', 'mN', 'bl', 'bp', 'ph', 'pN', 'sg', 'sd', 'sl', 'sb', 'Z', 'g', 'ss', '', 'kh', 'N', 'Ns', 'NZ', 'pb', 'pN', 'hn', 'hl', 'hm', 'hb', 'Q', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x012.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x012.php
new file mode 100644
index 000000000..3eeb30aa5
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x012.php
@@ -0,0 +1 @@
+<?php return ['ha', 'hu', 'hi', 'haa', 'hee', 'he', 'ho', '[?]', 'la', 'lu', 'li', 'laa', 'lee', 'le', 'lo', 'lwa', 'hha', 'hhu', 'hhi', 'hhaa', 'hhee', 'hhe', 'hho', 'hhwa', 'ma', 'mu', 'mi', 'maa', 'mee', 'me', 'mo', 'mwa', 'sza', 'szu', 'szi', 'szaa', 'szee', 'sze', 'szo', 'szwa', 'ra', 'ru', 'ri', 'raa', 'ree', 're', 'ro', 'rwa', 'sa', 'su', 'si', 'saa', 'see', 'se', 'so', 'swa', 'sha', 'shu', 'shi', 'shaa', 'shee', 'she', 'sho', 'shwa', 'qa', 'qu', 'qi', 'qaa', 'qee', 'qe', 'qo', '[?]', 'qwa', '[?]', 'qwi', 'qwaa', 'qwee', 'qwe', '[?]', '[?]', 'qha', 'qhu', 'qhi', 'qhaa', 'qhee', 'qhe', 'qho', '[?]', 'qhwa', '[?]', 'qhwi', 'qhwaa', 'qhwee', 'qhwe', '[?]', '[?]', 'ba', 'bu', 'bi', 'baa', 'bee', 'be', 'bo', 'bwa', 'va', 'vu', 'vi', 'vaa', 'vee', 've', 'vo', 'vwa', 'ta', 'tu', 'ti', 'taa', 'tee', 'te', 'to', 'twa', 'ca', 'cu', 'ci', 'caa', 'cee', 'ce', 'co', 'cwa', 'xa', 'xu', 'xi', 'xaa', 'xee', 'xe', 'xo', '[?]', 'xwa', '[?]', 'xwi', 'xwaa', 'xwee', 'xwe', '[?]', '[?]', 'na', 'nu', 'ni', 'naa', 'nee', 'ne', 'no', 'nwa', 'nya', 'nyu', 'nyi', 'nyaa', 'nyee', 'nye', 'nyo', 'nywa', '\'a', '\'u', '[?]', '\'aa', '\'ee', '\'e', '\'o', '\'wa', 'ka', 'ku', 'ki', 'kaa', 'kee', 'ke', 'ko', '[?]', 'kwa', '[?]', 'kwi', 'kwaa', 'kwee', 'kwe', '[?]', '[?]', 'kxa', 'kxu', 'kxi', 'kxaa', 'kxee', 'kxe', 'kxo', '[?]', 'kxwa', '[?]', 'kxwi', 'kxwaa', 'kxwee', 'kxwe', '[?]', '[?]', 'wa', 'wu', 'wi', 'waa', 'wee', 'we', 'wo', '[?]', '`a', '`u', '`i', '`aa', '`ee', '`e', '`o', '[?]', 'za', 'zu', 'zi', 'zaa', 'zee', 'ze', 'zo', 'zwa', 'zha', 'zhu', 'zhi', 'zhaa', 'zhee', 'zhe', 'zho', 'zhwa', 'ya', 'yu', 'yi', 'yaa', 'yee', 'ye', 'yo', '[?]', 'da', 'du', 'di', 'daa', 'dee', 'de', 'do', 'dwa', 'dda', 'ddu', 'ddi', 'ddaa', 'ddee', 'dde', 'ddo', 'ddwa'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x013.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x013.php
new file mode 100644
index 000000000..67d59528d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x013.php
@@ -0,0 +1 @@
+<?php return ['ja', 'ju', 'ji', 'jaa', 'jee', 'je', 'jo', 'jwa', 'ga', 'gu', 'gi', 'gaa', 'gee', 'ge', 'go', '[?]', 'gwa', '[?]', 'gwi', 'gwaa', 'gwee', 'gwe', '[?]', '[?]', 'gga', 'ggu', 'ggi', 'ggaa', 'ggee', 'gge', 'ggo', '[?]', 'tha', 'thu', 'thi', 'thaa', 'thee', 'the', 'tho', 'thwa', 'cha', 'chu', 'chi', 'chaa', 'chee', 'che', 'cho', 'chwa', 'pha', 'phu', 'phi', 'phaa', 'phee', 'phe', 'pho', 'phwa', 'tsa', 'tsu', 'tsi', 'tsaa', 'tsee', 'tse', 'tso', 'tswa', 'tza', 'tzu', 'tzi', 'tzaa', 'tzee', 'tze', 'tzo', '[?]', 'fa', 'fu', 'fi', 'faa', 'fee', 'fe', 'fo', 'fwa', 'pa', 'pu', 'pi', 'paa', 'pee', 'pe', 'po', 'pwa', 'rya', 'mya', 'fya', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', '.', ',', ';', ':', ':: ', '?', '//', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10+', '20+', '30+', '40+', '50+', '60+', '70+', '80+', '90+', '100+', '10,000+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'e', 'i', 'o', 'u', 'v', 'ga', 'ka', 'ge', 'gi', 'go', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hu', 'hv', 'la', 'le', 'li', 'lo', 'lu', 'lv', 'ma', 'me', 'mi', 'mo', 'mu', 'na', 'hna', 'nah', 'ne', 'ni', 'no', 'nu', 'nv', 'qua', 'que', 'qui', 'quo', 'quu', 'quv', 'sa', 's', 'se', 'si', 'so', 'su', 'sv', 'da', 'ta', 'de', 'te', 'di', 'ti', 'do', 'du', 'dv', 'dla', 'tla', 'tle', 'tli', 'tlo', 'tlu', 'tlv', 'tsa', 'tse', 'tsi', 'tso', 'tsu', 'tsv', 'wa', 'we', 'wi', 'wo', 'wu', 'wv', 'ya', 'ye', 'yi', 'yo', 'yu', 'yv', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x014.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x014.php
new file mode 100644
index 000000000..6a9c8862a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x014.php
@@ -0,0 +1 @@
+<?php return ['[?]', 'e', 'aai', 'i', 'ii', 'o', 'oo', 'oo', 'ee', 'i', 'a', 'aa', 'we', 'we', 'wi', 'wi', 'wii', 'wii', 'wo', 'wo', 'woo', 'woo', 'woo', 'wa', 'wa', 'waa', 'waa', 'waa', 'ai', 'w', '\'', 't', 'k', 'sh', 's', 'n', 'w', 'n', '[?]', 'w', 'c', '?', 'l', 'en', 'in', 'on', 'an', 'pe', 'paai', 'pi', 'pii', 'po', 'poo', 'poo', 'hee', 'hi', 'pa', 'paa', 'pwe', 'pwe', 'pwi', 'pwi', 'pwii', 'pwii', 'pwo', 'pwo', 'pwoo', 'pwoo', 'pwa', 'pwa', 'pwaa', 'pwaa', 'pwaa', 'p', 'p', 'h', 'te', 'taai', 'ti', 'tii', 'to', 'too', 'too', 'dee', 'di', 'ta', 'taa', 'twe', 'twe', 'twi', 'twi', 'twii', 'twii', 'two', 'two', 'twoo', 'twoo', 'twa', 'twa', 'twaa', 'twaa', 'twaa', 't', 'tte', 'tti', 'tto', 'tta', 'ke', 'kaai', 'ki', 'kii', 'ko', 'koo', 'koo', 'ka', 'kaa', 'kwe', 'kwe', 'kwi', 'kwi', 'kwii', 'kwii', 'kwo', 'kwo', 'kwoo', 'kwoo', 'kwa', 'kwa', 'kwaa', 'kwaa', 'kwaa', 'k', 'kw', 'keh', 'kih', 'koh', 'kah', 'ce', 'caai', 'ci', 'cii', 'co', 'coo', 'coo', 'ca', 'caa', 'cwe', 'cwe', 'cwi', 'cwi', 'cwii', 'cwii', 'cwo', 'cwo', 'cwoo', 'cwoo', 'cwa', 'cwa', 'cwaa', 'cwaa', 'cwaa', 'c', 'th', 'me', 'maai', 'mi', 'mii', 'mo', 'moo', 'moo', 'ma', 'maa', 'mwe', 'mwe', 'mwi', 'mwi', 'mwii', 'mwii', 'mwo', 'mwo', 'mwoo', 'mwoo', 'mwa', 'mwa', 'mwaa', 'mwaa', 'mwaa', 'm', 'm', 'mh', 'm', 'm', 'ne', 'naai', 'ni', 'nii', 'no', 'noo', 'noo', 'na', 'naa', 'nwe', 'nwe', 'nwa', 'nwa', 'nwaa', 'nwaa', 'nwaa', 'n', 'ng', 'nh', 'le', 'laai', 'li', 'lii', 'lo', 'loo', 'loo', 'la', 'laa', 'lwe', 'lwe', 'lwi', 'lwi', 'lwii', 'lwii', 'lwo', 'lwo', 'lwoo', 'lwoo', 'lwa', 'lwa', 'lwaa', 'lwaa', 'l', 'l', 'l', 'se', 'saai', 'si', 'sii', 'so', 'soo', 'soo', 'sa', 'saa', 'swe', 'swe', 'swi', 'swi', 'swii', 'swii', 'swo', 'swo', 'swoo', 'swoo'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x015.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x015.php
new file mode 100644
index 000000000..5a9b0bf12
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x015.php
@@ -0,0 +1 @@
+<?php return ['swa', 'swa', 'swaa', 'swaa', 'swaa', 's', 's', 'sw', 's', 'sk', 'skw', 'sW', 'spwa', 'stwa', 'skwa', 'scwa', 'she', 'shi', 'shii', 'sho', 'shoo', 'sha', 'shaa', 'shwe', 'shwe', 'shwi', 'shwi', 'shwii', 'shwii', 'shwo', 'shwo', 'shwoo', 'shwoo', 'shwa', 'shwa', 'shwaa', 'shwaa', 'sh', 'ye', 'yaai', 'yi', 'yii', 'yo', 'yoo', 'yoo', 'ya', 'yaa', 'ywe', 'ywe', 'ywi', 'ywi', 'ywii', 'ywii', 'ywo', 'ywo', 'ywoo', 'ywoo', 'ywa', 'ywa', 'ywaa', 'ywaa', 'ywaa', 'y', 'y', 'y', 'yi', 're', 're', 'le', 'raai', 'ri', 'rii', 'ro', 'roo', 'lo', 'ra', 'raa', 'la', 'rwaa', 'rwaa', 'r', 'r', 'r', 'fe', 'faai', 'fi', 'fii', 'fo', 'foo', 'fa', 'faa', 'fwaa', 'fwaa', 'f', 'the', 'the', 'thi', 'thi', 'thii', 'thii', 'tho', 'thoo', 'tha', 'thaa', 'thwaa', 'thwaa', 'th', 'tthe', 'tthi', 'ttho', 'ttha', 'tth', 'tye', 'tyi', 'tyo', 'tya', 'he', 'hi', 'hii', 'ho', 'hoo', 'ha', 'haa', 'h', 'h', 'hk', 'qaai', 'qi', 'qii', 'qo', 'qoo', 'qa', 'qaa', 'q', 'tlhe', 'tlhi', 'tlho', 'tlha', 're', 'ri', 'ro', 'ra', 'ngaai', 'ngi', 'ngii', 'ngo', 'ngoo', 'nga', 'ngaa', 'ng', 'nng', 'she', 'shi', 'sho', 'sha', 'the', 'thi', 'tho', 'tha', 'th', 'lhi', 'lhii', 'lho', 'lhoo', 'lha', 'lhaa', 'lh', 'the', 'thi', 'thii', 'tho', 'thoo', 'tha', 'thaa', 'th', 'b', 'e', 'i', 'o', 'a', 'we', 'wi', 'wo', 'wa', 'ne', 'ni', 'no', 'na', 'ke', 'ki', 'ko', 'ka', 'he', 'hi', 'ho', 'ha', 'ghu', 'gho', 'ghe', 'ghee', 'ghi', 'gha', 'ru', 'ro', 're', 'ree', 'ri', 'ra', 'wu', 'wo', 'we', 'wee', 'wi', 'wa', 'hwu', 'hwo', 'hwe', 'hwee', 'hwi', 'hwa', 'thu', 'tho', 'the', 'thee', 'thi', 'tha', 'ttu', 'tto', 'tte', 'ttee', 'tti', 'tta', 'pu', 'po', 'pe', 'pee', 'pi', 'pa', 'p', 'gu', 'go', 'ge', 'gee', 'gi', 'ga', 'khu', 'kho', 'khe', 'khee', 'khi', 'kha', 'kku', 'kko', 'kke', 'kkee', 'kki'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x016.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x016.php
new file mode 100644
index 000000000..49b4b937e
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x016.php
@@ -0,0 +1 @@
+<?php return ['kka', 'kk', 'nu', 'no', 'ne', 'nee', 'ni', 'na', 'mu', 'mo', 'me', 'mee', 'mi', 'ma', 'yu', 'yo', 'ye', 'yee', 'yi', 'ya', 'ju', 'ju', 'jo', 'je', 'jee', 'ji', 'ji', 'ja', 'jju', 'jjo', 'jje', 'jjee', 'jji', 'jja', 'lu', 'lo', 'le', 'lee', 'li', 'la', 'dlu', 'dlo', 'dle', 'dlee', 'dli', 'dla', 'lhu', 'lho', 'lhe', 'lhee', 'lhi', 'lha', 'tlhu', 'tlho', 'tlhe', 'tlhee', 'tlhi', 'tlha', 'tlu', 'tlo', 'tle', 'tlee', 'tli', 'tla', 'zu', 'zo', 'ze', 'zee', 'zi', 'za', 'z', 'z', 'dzu', 'dzo', 'dze', 'dzee', 'dzi', 'dza', 'su', 'so', 'se', 'see', 'si', 'sa', 'shu', 'sho', 'she', 'shee', 'shi', 'sha', 'sh', 'tsu', 'tso', 'tse', 'tsee', 'tsi', 'tsa', 'chu', 'cho', 'che', 'chee', 'chi', 'cha', 'ttsu', 'ttso', 'ttse', 'ttsee', 'ttsi', 'ttsa', 'X', '.', 'qai', 'ngai', 'nngi', 'nngii', 'nngo', 'nngoo', 'nnga', 'nngaa', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', 'b', 'l', 'f', 's', 'n', 'h', 'd', 't', 'c', 'q', 'm', 'g', 'ng', 'z', 'r', 'a', 'o', 'u', 'e', 'i', 'ch', 'th', 'ph', 'p', 'x', 'p', '<', '>', '[?]', '[?]', '[?]', 'f', 'v', 'u', 'yr', 'y', 'w', 'th', 'th', 'a', 'o', 'ac', 'ae', 'o', 'o', 'o', 'oe', 'on', 'r', 'k', 'c', 'k', 'g', 'ng', 'g', 'g', 'w', 'h', 'h', 'h', 'h', 'n', 'n', 'n', 'i', 'e', 'j', 'g', 'ae', 'a', 'eo', 'p', 'z', 's', 's', 's', 'c', 'z', 't', 't', 'd', 'b', 'b', 'p', 'p', 'e', 'm', 'm', 'm', 'l', 'l', 'ng', 'ng', 'd', 'o', 'ear', 'ior', 'qu', 'qu', 'qu', 's', 'yr', 'yr', 'yr', 'q', 'x', '.', ':', '+', '17', '18', '19', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x017.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x017.php
new file mode 100644
index 000000000..8f2a7cac1
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x017.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 't', 'tth', 'd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'l', 'v', 'sh', 'ss', 's', 'h', 'l', 'q', 'a', 'aa', 'i', 'ii', 'u', 'uk', 'uu', 'uuv', 'ry', 'ryy', 'ly', 'lyy', 'e', 'ai', 'oo', 'oo', 'au', 'a', 'aa', 'aa', 'i', 'ii', 'y', 'yy', 'u', 'uu', 'ua', 'oe', 'ya', 'ie', 'e', 'ae', 'ai', 'oo', 'au', 'M', 'H', 'a`', '', '', '', 'r', '', '!', '', '', '', '', '', '.', ' // ', ':', '+', '++', ' * ', ' /// ', 'KR', '\'', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x018.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x018.php
new file mode 100644
index 000000000..d4a1350f5
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x018.php
@@ -0,0 +1 @@
+<?php return [' @ ', ' ... ', ', ', '. ', ': ', ' // ', '', '-', ', ', '. ', '', '', '', '', '', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'e', 'i', 'o', 'u', 'O', 'U', 'ee', 'n', 'ng', 'b', 'p', 'q', 'g', 'm', 'l', 's', 'sh', 't', 'd', 'ch', 'j', 'y', 'r', 'w', 'f', 'k', 'kha', 'ts', 'z', 'h', 'zr', 'lh', 'zh', 'ch', '-', 'e', 'i', 'o', 'u', 'O', 'U', 'ng', 'b', 'p', 'q', 'g', 'm', 't', 'd', 'ch', 'j', 'ts', 'y', 'w', 'k', 'g', 'h', 'jy', 'ny', 'dz', 'e', 'i', 'iy', 'U', 'u', 'ng', 'k', 'g', 'h', 'p', 'sh', 't', 'd', 'j', 'f', 'g', 'h', 'ts', 'z', 'r', 'ch', 'zh', 'i', 'k', 'r', 'f', 'zh', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'H', 'X', 'W', 'M', ' 3 ', ' 333 ', 'a', 'i', 'k', 'ng', 'c', 'tt', 'tth', 'dd', 'nn', 't', 'd', 'p', 'ph', 'ss', 'zh', 'z', 'a', 't', 'zh', 'gh', 'ng', 'c', 'jh', 'tta', 'ddh', 't', 'dh', 'ss', 'cy', 'zh', 'z', 'u', 'y', 'bh', '\'', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x01d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x01d.php
new file mode 100644
index 000000000..2842a4d64
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x01d.php
@@ -0,0 +1 @@
+<?php return ['A', 'AE', 'ae', 'B', 'C', 'D', 'D', 'E', 'e', 'i', 'J', 'K', 'L', 'M', 'N', 'O', '', 'O', '', 'O', 'Oe', 'Ou', '', '', 'P', 'R', 'R', 'T', 'U', 'u', 'u', 'm', 'V', 'W', 'Z', '', '', '', '', '', '', '', '', '', 'A', 'AE', 'B', 'B', 'D', 'E', 'E', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'N', 'O', 'Ou', 'P', 'R', 'T', 'U', 'W', 'a', 'a', 'a', 'ae', 'b', 'd', 'e', '', 'e', 'e', 'g', 'i', 'k', 'm', '', 'o', '', '', '', 'p', 't', 'u', 'u', 'm', 'v', '', 'b', 'g', 'd', 'f', '', 'i', 'r', 'u', 'v', 'b', 'g', 'r', 'f', '', '', 'b', 'd', 'f', 'm', 'n', 'p', 'r', 'r', 's', 't', 'z', 'g', '', '', '', '', '', 'p', '', '', 'b', 'd', 'f', 'g', 'k', 'l', 'm', 'n', 'p', 'r', 's', '', 'v', 'x', 'z', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x01e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x01e.php
new file mode 100644
index 000000000..24ca9f470
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x01e.php
@@ -0,0 +1 @@
+<?php return ['A', 'a', 'B', 'b', 'B', 'b', 'B', 'b', 'C', 'c', 'D', 'd', 'D', 'd', 'D', 'd', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'H', 'h', 'H', 'h', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'K', 'k', 'K', 'k', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'M', 'm', 'M', 'm', 'M', 'm', 'N', 'n', 'N', 'n', 'N', 'n', 'N', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'P', 'p', 'P', 'p', 'R', 'r', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'V', 'v', 'V', 'v', 'W', 'w', 'W', 'w', 'W', 'w', 'W', 'w', 'W', 'w', 'X', 'x', 'X', 'x', 'Y', 'y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 'h', 't', 'w', 'y', 'a', 's', 's', 's', 'Ss', 'd', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'Y', 'y', 'Y', 'y', 'Y', 'y', 'Y', 'y', 'LL', 'll', 'V', 'v', 'Y', 'y'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x01f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x01f.php
new file mode 100644
index 000000000..490dd5d9e
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x01f.php
@@ -0,0 +1 @@
+<?php return ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'e', 'e', 'e', 'e', 'e', 'e', '[?]', '[?]', 'E', 'E', 'E', 'E', 'E', 'E', '[?]', '[?]', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'o', 'o', 'o', 'o', 'o', 'o', '[?]', '[?]', 'O', 'O', 'O', 'O', 'O', 'O', '[?]', '[?]', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', '[?]', 'U', '[?]', 'U', '[?]', 'U', '[?]', 'U', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'o', 'o', '[?]', '[?]', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'a', 'a', 'a', 'a', 'a', '[?]', 'a', 'a', 'A', 'A', 'A', 'A', 'A', '\'', 'i', '\'', '~', '"~', 'e', 'e', 'e', '[?]', 'e', 'e', 'E', 'E', 'E', 'E', 'E', '\'`', '\'\'', '\'~', 'i', 'i', 'i', 'i', '[?]', '[?]', 'i', 'i', 'I', 'I', 'I', 'I', '[?]', '`\'', '`\'', '`~', 'u', 'u', 'u', 'u', 'R', 'R', 'u', 'u', 'U', 'U', 'U', 'U', 'R', '"`', '"\'', '`', '[?]', '[?]', 'o', 'o', 'o', '[?]', 'o', 'o', 'O', 'O', 'O', 'O', 'O', '\'', '`', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x020.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x020.php
new file mode 100644
index 000000000..3e8495145
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x020.php
@@ -0,0 +1,4 @@
+<?php return [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '-', '-', '-', '-', '--', '--', '||', '_', '\'', '\'', ',', '\'', '"', '"', ',,', '"', '+', '++', '*', '*>', '.', '..', '...', '.', "\n",
+    "\n\n",
+    '', '', '', '', '', ' ', '%0', '%00', '\'', '\'\'', '\'\'\'', '`', '``', '```', '^', '<', '>', '*', '!!', '!?', '-', '_', '-', '^', '***', '--', '/', '-[', ']-', '??', '?!', '!?', '7', 'PP', '(]', '[)', '*', '[?]', '[?]', '[?]', '%', '~', '[?]', '[?]', '[?]', "''''",    // 0x57
+    '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '0', 'i', '', '', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', 'n', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', '[?]', 'a', 'e', 'o', 'x', '[?]', 'h', 'k', 'l', 'm', 'n', 'p', 's', 't', '[?]', '[?]', '[?]', 'ECU', 'CL', 'Cr', 'Fr.', 'L.', 'mil', 'N', 'Pts', 'Rs', 'W', 'NS', 'D', 'EUR', 'K', 'T', 'Dr', 'Pf', 'P', 'G', 'A', 'UAH', 'C|', 'L', 'Sm', 'T', 'Rs', 'L', 'M', 'm', 'R', 'l', 'BTC', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x021.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x021.php
new file mode 100644
index 000000000..1643d67dc
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x021.php
@@ -0,0 +1 @@
+<?php return [' a/c ', ' a/s ', 'C', '', '', ' c/o ', ' c/u ', '', '', '', 'g', 'H', 'H', 'H', 'h', '', 'I', 'I', 'L', 'l', '', 'N', 'No. ', '', '', 'P', 'Q', 'R', 'R', 'R', '', '', '(sm)', 'TEL', '(tm)', '', 'Z', '', '', '', 'Z', '', 'K', 'A', 'B', 'C', 'e', 'e', 'E', 'F', 'F', 'M', 'o', '', '', '', '', 'i', '', 'FAX', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', 'D', 'd', 'e', 'i', 'j', '[?]', '[?]', '[?]', '[?]', 'F', '[?]', ' 1/7 ', ' 1/9 ', ' 1/10 ', ' 1/3 ', ' 2/3 ', ' 1/5 ', ' 2/5 ', ' 3/5 ', ' 4/5 ', ' 1/6 ', ' 5/6 ', ' 1/8 ', ' 3/8 ', ' 5/8 ', ' 7/8 ', ' 1/', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'L', 'C', 'D', 'M', 'i', 'ii', 'iii', 'iv', 'v', 'vi', 'vii', 'viii', 'ix', 'x', 'xi', 'xii', 'l', 'c', 'd', 'm', '(D', 'D)', '((|))', ')', '[?]', '[?]', '[?]', '[?]', '[?]', ' 0/3 ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '-', '|', '-', '|', '-', '|', '\\', '/', '\\', '/', '-', '-', '~', '~', '-', '|', '-', '|', '-', '-', '-', '|', '-', '|', '|', '-', '-', '-', '-', '-', '-', '|', '|', '|', '|', '|', '|', '|', '^', 'V', '\\', '=', 'V', '^', '-', '-', '|', '|', '-', '-', '|', '|', '=', '|', '=', '=', '|', '=', '|', '=', '=', '=', '=', '=', '=', '|', '=', '|', '=', '|', '\\', '/', '\\', '/', '=', '=', '~', '~', '|', '|', '-', '|', '-', '|', '-', '-', '-', '|', '-', '|', '|', '|', '|', '|', '|', '|', '-', '\\', '\\', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x022.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x022.php
new file mode 100644
index 000000000..4a6763e79
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x022.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '-', '[?]', '[?]', '/', '\\', '*', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ':', '[?]', '[?]', '[?]', '[?]', '[?]', '~', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '<=', '>=', '<=', '>=', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x023.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x023.php
new file mode 100644
index 000000000..b8f4ca0d2
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x023.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '^', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '<', '> ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x024.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x024.php
new file mode 100644
index 000000000..26abcc69a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x024.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '(1)', '(2)', '(3)', '(4)', '(5)', '(6)', '(7)', '(8)', '(9)', '(10)', '(11)', '(12)', '(13)', '(14)', '(15)', '(16)', '(17)', '(18)', '(19)', '(20)', '1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.', '13.', '14.', '15.', '16.', '17.', '18.', '19.', '20.', '(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)', '(k)', '(l)', '(m)', '(n)', '(o)', '(p)', '(q)', '(r)', '(s)', '(t)', '(u)', '(v)', '(w)', '(x)', '(y)', '(z)', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '0'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x025.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x025.php
new file mode 100644
index 000000000..7826f84e7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x025.php
@@ -0,0 +1 @@
+<?php return ['-', '-', '|', '|', '-', '-', '|', '|', '-', '-', '|', '|', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '-', '-', '|', '|', '-', '|', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '/', '\\', 'X', '-', '|', '-', '|', '-', '|', '-', '|', '-', '|', '-', '|', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '^', '^', '^', '^', '>', '>', '>', '>', '>', '>', 'V', 'V', 'V', 'V', '<', '<', '<', '<', '<', '<', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '#', '#', '#', '#', '#', '^', '^', '^', 'O', '#', '#', '#', '#', 'O', 'O', 'O', 'O', '/', '\\\\', '\\\\', '#', '#', '#', '#', '/'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x026.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x026.php
new file mode 100644
index 000000000..0c97de3f8
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x026.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '#', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x027.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x027.php
new file mode 100644
index 000000000..d24e4401a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x027.php
@@ -0,0 +1 @@
+<?php return ['[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '*', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '|', '', '', '', '', '', '', '[?]', '[?]', '', '!', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[', '[?]', '<', '> ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x028.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x028.php
new file mode 100644
index 000000000..9585d9149
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x028.php
@@ -0,0 +1 @@
+<?php return [' ', 'a', '1', 'b', '\'', 'k', '2', 'l', '@', 'c', 'i', 'f', '/', 'm', 's', 'p', '"', 'e', '3', 'h', '9', 'o', '6', 'r', '^', 'd', 'j', 'g', '>', 'n', 't', 'q', ',', '*', '5', '<', '-', 'u', '8', 'v', '.', '%', '[', '$', '+', 'x', '!', '&', ';', ':', '4', '\\', '0', 'z', '7', '(', '_', '?', 'w', ']', '#', 'y', ')', '=', '[d7]', '[d17]', '[d27]', '[d127]', '[d37]', '[d137]', '[d237]', '[d1237]', '[d47]', '[d147]', '[d247]', '[d1247]', '[d347]', '[d1347]', '[d2347]', '[d12347]', '[d57]', '[d157]', '[d257]', '[d1257]', '[d357]', '[d1357]', '[d2357]', '[d12357]', '[d457]', '[d1457]', '[d2457]', '[d12457]', '[d3457]', '[d13457]', '[d23457]', '[d123457]', '[d67]', '[d167]', '[d267]', '[d1267]', '[d367]', '[d1367]', '[d2367]', '[d12367]', '[d467]', '[d1467]', '[d2467]', '[d12467]', '[d3467]', '[d13467]', '[d23467]', '[d123467]', '[d567]', '[d1567]', '[d2567]', '[d12567]', '[d3567]', '[d13567]', '[d23567]', '[d123567]', '[d4567]', '[d14567]', '[d24567]', '[d124567]', '[d34567]', '[d134567]', '[d234567]', '[d1234567]', '[d8]', '[d18]', '[d28]', '[d128]', '[d38]', '[d138]', '[d238]', '[d1238]', '[d48]', '[d148]', '[d248]', '[d1248]', '[d348]', '[d1348]', '[d2348]', '[d12348]', '[d58]', '[d158]', '[d258]', '[d1258]', '[d358]', '[d1358]', '[d2358]', '[d12358]', '[d458]', '[d1458]', '[d2458]', '[d12458]', '[d3458]', '[d13458]', '[d23458]', '[d123458]', '[d68]', '[d168]', '[d268]', '[d1268]', '[d368]', '[d1368]', '[d2368]', '[d12368]', '[d468]', '[d1468]', '[d2468]', '[d12468]', '[d3468]', '[d13468]', '[d23468]', '[d123468]', '[d568]', '[d1568]', '[d2568]', '[d12568]', '[d3568]', '[d13568]', '[d23568]', '[d123568]', '[d4568]', '[d14568]', '[d24568]', '[d124568]', '[d34568]', '[d134568]', '[d234568]', '[d1234568]', '[d78]', '[d178]', '[d278]', '[d1278]', '[d378]', '[d1378]', '[d2378]', '[d12378]', '[d478]', '[d1478]', '[d2478]', '[d12478]', '[d3478]', '[d13478]', '[d23478]', '[d123478]', '[d578]', '[d1578]', '[d2578]', '[d12578]', '[d3578]', '[d13578]', '[d23578]', '[d123578]', '[d4578]', '[d14578]', '[d24578]', '[d124578]', '[d34578]', '[d134578]', '[d234578]', '[d1234578]', '[d678]', '[d1678]', '[d2678]', '[d12678]', '[d3678]', '[d13678]', '[d23678]', '[d123678]', '[d4678]', '[d14678]', '[d24678]', '[d124678]', '[d34678]', '[d134678]', '[d234678]', '[d1234678]', '[d5678]', '[d15678]', '[d25678]', '[d125678]', '[d35678]', '[d135678]', '[d235678]', '[d1235678]', '[d45678]', '[d145678]', '[d245678]', '[d1245678]', '[d345678]', '[d1345678]', '[d2345678]', '[d12345678]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x029.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x029.php
new file mode 100644
index 000000000..5162de386
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x029.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '{', '} ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x02a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x02a.php
new file mode 100644
index 000000000..e3ca5520b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x02a.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '::=', '==', '===', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x02c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x02c.php
new file mode 100644
index 000000000..31f84d814
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x02c.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'L', 'l', 'L', 'P', 'R', 'a', 't', 'H', 'h', 'K', 'k', 'Z', 'z', '', 'M', 'A', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x02e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x02e.php
new file mode 100644
index 000000000..b45c47093
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x02e.php
@@ -0,0 +1 @@
+<?php return ['r', 'r.', '[?]', '[?]', '[?]', '[?]', 'T', 'T.', '[?]', 's', '[?]', '[]', '\\', '/', '[?]', '__', '[?]', '[?]', '>', '%', '[?]', '[?]', '>', '=', '[?]', '/', '-', '~', '\\', '/', '~', '~', '|-', '-|', '[?]', '[?]', '[?]', '[?]', '<=', '=>', '((', '))', '[?]', '[?]', '::', '[?]', '?', '\'', 'o', '.', ',', '.', ',', ';', '[?]', '[?]', '[?]', '[?]', '----', '------', 'x', '|', '[?]', '[?]', '=', ',', '"', '`--', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x02f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x02f.php
new file mode 100644
index 000000000..5147b5740
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x02f.php
@@ -0,0 +1 @@
+<?php return ['[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x030.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x030.php
new file mode 100644
index 000000000..5880d768b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x030.php
@@ -0,0 +1,9 @@
+<?php return [' ', ', ', '. ', '"', '[JIS]', '"', '/', '0', '<', '> ', '<<', '>> ', '[', '] ', '{', '} ', '[(', ')] ', '@', 'X ', '[', '] ', '[[', ']] ', '((', ')) ', '[[', ']] ', '~ ', '``', '\'\'', ',,', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '', '', '', '', '', '', '~', '+', '+', '+', '+', '', '@', ' // ', '+10+', '+20+', '+30+', '[?]', '[?]', '[?]', '', '', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi',   // 0x57
+    'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi',   // 0x61
+    'di', 'tsu',   // 0x63
+    'tsu',   // 0x64
+    'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '"', '"', '[?]', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi',   // 0xb7
+    'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi',   // 0xc1
+    'di', 'tsu',   // 0xc3
+    'tsu',   // 0xc4
+    'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', 'ka', 'ke', 'va', 'vi', 've', 'vo', '', '', '"', '"', ];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x031.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x031.php
new file mode 100644
index 000000000..72c0260cf
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x031.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', 'B', 'P', 'M', 'F', 'D', 'T', 'N', 'L', 'G', 'K', 'H', 'J', 'Q', 'X', 'ZH', 'CH', 'SH', 'R', 'Z', 'C', 'S', 'A', 'O', 'E', 'EH', 'AI', 'EI', 'AU', 'OU', 'AN', 'EN', 'ANG', 'ENG', 'ER', 'I', 'U', 'IU', 'V', 'NG', 'GN', '[?]', '[?]', '[?]', '[?]', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'dd', 'r', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'rh', 'm', 'b', 'bb', 'bs', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', 'a', 'ae', 'ya', 'yae', 'eo', 'e', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', 'yo', 'u', 'weo', 'we', 'wi', 'yu', 'eu', 'yi', 'i', '', 'nn', 'nd', 'ns', 'nZ', 'lgs', 'ld', 'lbs', 'lZ', 'lQ', 'mb', 'ms', 'mZ', 'mN', 'bg', '', 'bsg', 'bst', 'bj', 'bt', 'bN', 'bbN', 'sg', 'sn', 'sd', 'sb', 'sj', 'Z', '', 'N', 'Ns', 'NZ', 'pN', 'hh', 'Q', 'yo-ya', 'yo-yae', 'yo-i', 'yu-yeo', 'yu-ye', 'yu-i', 'U', 'U-i', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'BU', 'ZI', 'JI', 'GU', 'EE', 'ENN', 'OO', 'ONN', 'IR', 'ANN', 'INN', 'UNN', 'IM', 'NGG', 'AINN', 'AUNN', 'AM', 'OM', 'ONG', 'INNN', 'P', 'T', 'K', 'H', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x032.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x032.php
new file mode 100644
index 000000000..f5df8c8b2
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x032.php
@@ -0,0 +1 @@
+<?php return ['(g)', '(n)', '(d)', '(r)', '(m)', '(b)', '(s)', '()', '(j)', '(c)', '(k)', '(t)', '(p)', '(h)', '(ga)', '(na)', '(da)', '(ra)', '(ma)', '(ba)', '(sa)', '(a)', '(ja)', '(ca)', '(ka)', '(ta)', '(pa)', '(ha)', '(ju)', '[?]', '[?]', '[?]', '(1) ', '(2) ', '(3) ', '(4) ', '(5) ', '(6) ', '(7) ', '(8) ', '(9) ', '(10) ', '(Yue) ', '(Huo) ', '(Shui) ', '(Mu) ', '(Jin) ', '(Tu) ', '(Ri) ', '(Zhu) ', '(You) ', '(She) ', '(Ming) ', '(Te) ', '(Cai) ', '(Zhu) ', '(Lao) ', '(Dai) ', '(Hu) ', '(Xue) ', '(Jian) ', '(Qi) ', '(Zi) ', '(Xie) ', '(Ji) ', '(Xiu) ', '<<', '>>', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '(g)', '(n)', '(d)', '(r)', '(m)', '(b)', '(s)', '()', '(j)', '(c)', '(k)', '(t)', '(p)', '(h)', '(ga)', '(na)', '(da)', '(ra)', '(ma)', '(ba)', '(sa)', '(a)', '(ja)', '(ca)', '(ka)', '(ta)', '(pa)', '(ha)', '[?]', '[?]', '[?]', 'KIS ', '(1) ', '(2) ', '(3) ', '(4) ', '(5) ', '(6) ', '(7) ', '(8) ', '(9) ', '(10) ', '(Yue) ', '(Huo) ', '(Shui) ', '(Mu) ', '(Jin) ', '(Tu) ', '(Ri) ', '(Zhu) ', '(You) ', '(She) ', '(Ming) ', '(Te) ', '(Cai) ', '(Zhu) ', '(Lao) ', '(Mi) ', '(Nan) ', '(Nu) ', '(Shi) ', '(You) ', '(Yin) ', '(Zhu) ', '(Xiang) ', '(Xiu) ', '(Xie) ', '(Zheng) ', '(Shang) ', '(Zhong) ', '(Xia) ', '(Zuo) ', '(You) ', '(Yi) ', '(Zong) ', '(Xue) ', '(Jian) ', '(Qi) ', '(Zi) ', '(Xie) ', '(Ye) ', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '1M', '2M', '3M', '4M', '5M', '6M', '7M', '8M', '9M', '10M', '11M', '12M', 'Hg', 'erg', 'eV', 'LTD', 'a', 'i', 'u', 'u', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wi', 'we', 'wo'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x033.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x033.php
new file mode 100644
index 000000000..8505337e3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x033.php
@@ -0,0 +1 @@
+<?php return ['apartment', 'alpha', 'ampere', 'are', 'inning', 'inch', 'won', 'escudo', 'acre', 'ounce', 'ohm', 'kai-ri', 'carat', 'calorie', 'gallon', 'gamma', 'giga', 'guinea', 'curie', 'guilder', 'kilo', 'kilogram', 'kilometer', 'kilowatt', 'gram', 'gram ton', 'cruzeiro', 'krone', 'case', 'koruna', 'co-op', 'cycle', 'centime', 'shilling', 'centi', 'cent', 'dozen', 'desi', 'dollar', 'ton', 'nano', 'knot', 'heights', 'percent', 'parts', 'barrel', 'piaster', 'picul', 'pico', 'building', 'farad', 'feet', 'bushel', 'franc', 'hectare', 'peso', 'pfennig', 'hertz', 'pence', 'page', 'beta', 'point', 'volt', 'hon', 'pound', 'hall', 'horn', 'micro', 'mile', 'mach', 'mark', 'mansion', 'micron', 'milli', 'millibar', 'mega', 'megaton', 'meter', 'yard', 'yard', 'yuan', 'liter', 'lira', 'rupee', 'ruble', 'rem', 'roentgen', 'watt', '0h', '1h', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', '10h', '11h', '12h', '13h', '14h', '15h', '16h', '17h', '18h', '19h', '20h', '21h', '22h', '23h', '24h', 'hPa', 'da', 'AU', 'bar', 'oV', 'pc', 'dm', 'dm^2', 'dm^3', 'IU', 'Heisei', 'Syouwa', 'Taisyou', 'Meiji', 'Inc.', 'pA', 'nA', 'microamp', 'mA', 'kA', 'kB', 'MB', 'GB', 'cal', 'kcal', 'pF', 'nF', 'microFarad', 'microgram', 'mg', 'kg', 'Hz', 'kHz', 'MHz', 'GHz', 'THz', 'microliter', 'ml', 'dl', 'kl', 'fm', 'nm', 'micrometer', 'mm', 'cm', 'km', 'mm^2', 'cm^2', 'm^2', 'km^2', 'mm^3', 'cm^3', 'm^3', 'km^3', 'm/s', 'm/s^2', 'Pa', 'kPa', 'MPa', 'GPa', 'rad', 'rad/s', 'rad/s^2', 'ps', 'ns', 'microsecond', 'ms', 'pV', 'nV', 'microvolt', 'mV', 'kV', 'MV', 'pW', 'nW', 'microwatt', 'mW', 'kW', 'MW', 'kOhm', 'MOhm', 'a.m.', 'Bq', 'cc', 'cd', 'C/kg', 'Co.', 'dB', 'Gy', 'ha', 'HP', 'in', 'K.K.', 'KM', 'kt', 'lm', 'ln', 'log', 'lx', 'mb', 'mil', 'mol', 'pH', 'p.m.', 'PPM', 'PR', 'sr', 'Sv', 'Wb', '[?]', '[?]', '1d', '2d', '3d', '4d', '5d', '6d', '7d', '8d', '9d', '10d', '11d', '12d', '13d', '14d', '15d', '16d', '17d', '18d', '19d', '20d', '21d', '22d', '23d', '24d', '25d', '26d', '27d', '28d', '29d', '30d', '31d', 'gal'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x04d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x04d.php
new file mode 100644
index 000000000..59b23f524
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x04d.php
@@ -0,0 +1 @@
+<?php return ['[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x04e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x04e.php
new file mode 100644
index 000000000..ae51afcca
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x04e.php
@@ -0,0 +1 @@
+<?php return ['Yi ', 'Ding ', 'Kao ', 'Qi ', 'Shang ', 'Xia ', '[?] ', 'Mo ', 'Zhang ', 'San ', 'Shang ', 'Xia ', 'Ji ', 'Bu ', 'Yu ', 'Mian ', 'Gai ', 'Chou ', 'Chou ', 'Zhuan ', 'Qie ', 'Pi ', 'Shi ', 'Shi ', 'Qiu ', 'Bing ', 'Ye ', 'Cong ', 'Dong ', 'Si ', 'Cheng ', 'Diu ', 'Qiu ', 'Liang ', 'Diu ', 'You ', 'Liang ', 'Yan ', 'Bing ', 'Sang ', 'Gun ', 'Jiu ', 'Ge ', 'Ya ', 'Qiang ', 'Zhong ', 'Ji ', 'Jie ', 'Feng ', 'Guan ', 'Chuan ', 'Chan ', 'Lin ', 'Zhuo ', 'Zhu ', 'Ha ', 'Wan ', 'Dan ', 'Wei ', 'Zhu ', 'Jing ', 'Li ', 'Ju ', 'Pie ', 'Fu ', 'Yi ', 'Yi ', 'Nai ', 'Shime ', 'Jiu ', 'Jiu ', 'Zhe ', 'Yao ', 'Yi ', '[?] ', 'Zhi ', 'Wu ', 'Zha ', 'Hu ', 'Fa ', 'Le ', 'Zhong ', 'Ping ', 'Pang ', 'Qiao ', 'Hu ', 'Guai ', 'Cheng ', 'Cheng ', 'Yi ', 'Yin ', '[?] ', 'Mie ', 'Jiu ', 'Qi ', 'Ye ', 'Xi ', 'Xiang ', 'Gai ', 'Diu ', 'Hal ', '[?] ', 'Shu ', 'Twul ', 'Shi ', 'Ji ', 'Nang ', 'Jia ', 'Kel ', 'Shi ', '[?] ', 'Ol ', 'Mai ', 'Luan ', 'Cal ', 'Ru ', 'Xue ', 'Yan ', 'Fu ', 'Sha ', 'Na ', 'Gan ', 'Sol ', 'El ', 'Cwul ', '[?] ', 'Gan ', 'Chi ', 'Gui ', 'Gan ', 'Luan ', 'Lin ', 'Yi ', 'Jue ', 'Liao ', 'Ma ', 'Yu ', 'Zheng ', 'Shi ', 'Shi ', 'Er ', 'Chu ', 'Yu ', 'Yu ', 'Yu ', 'Yun ', 'Hu ', 'Qi ', 'Wu ', 'Jing ', 'Si ', 'Sui ', 'Gen ', 'Gen ', 'Ya ', 'Xie ', 'Ya ', 'Qi ', 'Ya ', 'Ji ', 'Tou ', 'Wang ', 'Kang ', 'Ta ', 'Jiao ', 'Hai ', 'Yi ', 'Chan ', 'Heng ', 'Mu ', '[?] ', 'Xiang ', 'Jing ', 'Ting ', 'Liang ', 'Xiang ', 'Jing ', 'Ye ', 'Qin ', 'Bo ', 'You ', 'Xie ', 'Dan ', 'Lian ', 'Duo ', 'Wei ', 'Ren ', 'Ren ', 'Ji ', 'La ', 'Wang ', 'Yi ', 'Shi ', 'Ren ', 'Le ', 'Ding ', 'Ze ', 'Jin ', 'Pu ', 'Chou ', 'Ba ', 'Zhang ', 'Jin ', 'Jie ', 'Bing ', 'Reng ', 'Cong ', 'Fo ', 'San ', 'Lun ', 'Sya ', 'Cang ', 'Zi ', 'Shi ', 'Ta ', 'Zhang ', 'Fu ', 'Xian ', 'Xian ', 'Tuo ', 'Hong ', 'Tong ', 'Ren ', 'Qian ', 'Gan ', 'Yi ', 'Di ', 'Dai ', 'Ling ', 'Yi ', 'Chao ', 'Chang ', 'Sa ', '[?] ', 'Yi ', 'Mu ', 'Men ', 'Ren ', 'Jia ', 'Chao ', 'Yang ', 'Qian ', 'Zhong ', 'Pi ', 'Wan ', 'Wu ', 'Jian ', 'Jie ', 'Yao ', 'Feng ', 'Cang ', 'Ren ', 'Wang ', 'Fen ', 'Di ', 'Fang '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x04f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x04f.php
new file mode 100644
index 000000000..a42bb3e74
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x04f.php
@@ -0,0 +1 @@
+<?php return ['Zhong ', 'Qi ', 'Pei ', 'Yu ', 'Diao ', 'Dun ', 'Wen ', 'Yi ', 'Xin ', 'Kang ', 'Yi ', 'Ji ', 'Ai ', 'Wu ', 'Ji ', 'Fu ', 'Fa ', 'Xiu ', 'Jin ', 'Bei ', 'Dan ', 'Fu ', 'Tang ', 'Zhong ', 'You ', 'Huo ', 'Hui ', 'Yu ', 'Cui ', 'Chuan ', 'San ', 'Wei ', 'Chuan ', 'Che ', 'Ya ', 'Xian ', 'Shang ', 'Chang ', 'Lun ', 'Cang ', 'Xun ', 'Xin ', 'Wei ', 'Zhu ', '[?] ', 'Xuan ', 'Nu ', 'Bo ', 'Gu ', 'Ni ', 'Ni ', 'Xie ', 'Ban ', 'Xu ', 'Ling ', 'Zhou ', 'Shen ', 'Qu ', 'Si ', 'Beng ', 'Si ', 'Jia ', 'Pi ', 'Yi ', 'Si ', 'Ai ', 'Zheng ', 'Dian ', 'Han ', 'Mai ', 'Dan ', 'Zhu ', 'Bu ', 'Qu ', 'Bi ', 'Shao ', 'Ci ', 'Wei ', 'Di ', 'Zhu ', 'Zuo ', 'You ', 'Yang ', 'Ti ', 'Zhan ', 'He ', 'Bi ', 'Tuo ', 'She ', 'Yu ', 'Yi ', 'Fo ', 'Zuo ', 'Kou ', 'Ning ', 'Tong ', 'Ni ', 'Xuan ', 'Qu ', 'Yong ', 'Wa ', 'Qian ', '[?] ', 'Ka ', '[?] ', 'Pei ', 'Huai ', 'He ', 'Lao ', 'Xiang ', 'Ge ', 'Yang ', 'Bai ', 'Fa ', 'Ming ', 'Jia ', 'Er ', 'Bing ', 'Ji ', 'Hen ', 'Huo ', 'Gui ', 'Quan ', 'Tiao ', 'Jiao ', 'Ci ', 'Yi ', 'Shi ', 'Xing ', 'Shen ', 'Tuo ', 'Kan ', 'Zhi ', 'Gai ', 'Lai ', 'Yi ', 'Chi ', 'Kua ', 'Guang ', 'Li ', 'Yin ', 'Shi ', 'Mi ', 'Zhu ', 'Xu ', 'You ', 'An ', 'Lu ', 'Mou ', 'Er ', 'Lun ', 'Tong ', 'Cha ', 'Chi ', 'Xun ', 'Gong ', 'Zhou ', 'Yi ', 'Ru ', 'Jian ', 'Xia ', 'Jia ', 'Zai ', 'Lu ', 'Ko ', 'Jiao ', 'Zhen ', 'Ce ', 'Qiao ', 'Kuai ', 'Chai ', 'Ning ', 'Nong ', 'Jin ', 'Wu ', 'Hou ', 'Jiong ', 'Cheng ', 'Zhen ', 'Zuo ', 'Chou ', 'Qin ', 'Lu ', 'Ju ', 'Shu ', 'Ting ', 'Shen ', 'Tuo ', 'Bo ', 'Nan ', 'Hao ', 'Bian ', 'Tui ', 'Yu ', 'Xi ', 'Cu ', 'E ', 'Qiu ', 'Xu ', 'Kuang ', 'Ku ', 'Wu ', 'Jun ', 'Yi ', 'Fu ', 'Lang ', 'Zu ', 'Qiao ', 'Li ', 'Yong ', 'Hun ', 'Jing ', 'Xian ', 'San ', 'Pai ', 'Su ', 'Fu ', 'Xi ', 'Li ', 'Fu ', 'Ping ', 'Bao ', 'Yu ', 'Si ', 'Xia ', 'Xin ', 'Xiu ', 'Yu ', 'Ti ', 'Che ', 'Chou ', '[?] ', 'Yan ', 'Lia ', 'Li ', 'Lai ', '[?] ', 'Jian ', 'Xiu ', 'Fu ', 'He ', 'Ju ', 'Xiao ', 'Pai ', 'Jian ', 'Biao ', 'Chu ', 'Fei ', 'Feng ', 'Ya ', 'An ', 'Bei ', 'Yu ', 'Xin ', 'Bi ', 'Jian '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x050.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x050.php
new file mode 100644
index 000000000..14db069b3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x050.php
@@ -0,0 +1 @@
+<?php return ['Chang ', 'Chi ', 'Bing ', 'Zan ', 'Yao ', 'Cui ', 'Lia ', 'Wan ', 'Lai ', 'Cang ', 'Zong ', 'Ge ', 'Guan ', 'Bei ', 'Tian ', 'Shu ', 'Shu ', 'Men ', 'Dao ', 'Tan ', 'Jue ', 'Chui ', 'Xing ', 'Peng ', 'Tang ', 'Hou ', 'Yi ', 'Qi ', 'Ti ', 'Gan ', 'Jing ', 'Jie ', 'Sui ', 'Chang ', 'Jie ', 'Fang ', 'Zhi ', 'Kong ', 'Juan ', 'Zong ', 'Ju ', 'Qian ', 'Ni ', 'Lun ', 'Zhuo ', 'Wei ', 'Luo ', 'Song ', 'Leng ', 'Hun ', 'Dong ', 'Zi ', 'Ben ', 'Wu ', 'Ju ', 'Nai ', 'Cai ', 'Jian ', 'Zhai ', 'Ye ', 'Zhi ', 'Sha ', 'Qing ', '[?] ', 'Ying ', 'Cheng ', 'Jian ', 'Yan ', 'Nuan ', 'Zhong ', 'Chun ', 'Jia ', 'Jie ', 'Wei ', 'Yu ', 'Bing ', 'Ruo ', 'Ti ', 'Wei ', 'Pian ', 'Yan ', 'Feng ', 'Tang ', 'Wo ', 'E ', 'Xie ', 'Che ', 'Sheng ', 'Kan ', 'Di ', 'Zuo ', 'Cha ', 'Ting ', 'Bei ', 'Ye ', 'Huang ', 'Yao ', 'Zhan ', 'Chou ', 'Yan ', 'You ', 'Jian ', 'Xu ', 'Zha ', 'Ci ', 'Fu ', 'Bi ', 'Zhi ', 'Zong ', 'Mian ', 'Ji ', 'Yi ', 'Xie ', 'Xun ', 'Si ', 'Duan ', 'Ce ', 'Zhen ', 'Ou ', 'Tou ', 'Tou ', 'Bei ', 'Za ', 'Lu ', 'Jie ', 'Wei ', 'Fen ', 'Chang ', 'Gui ', 'Sou ', 'Zhi ', 'Su ', 'Xia ', 'Fu ', 'Yuan ', 'Rong ', 'Li ', 'Ru ', 'Yun ', 'Gou ', 'Ma ', 'Bang ', 'Dian ', 'Tang ', 'Hao ', 'Jie ', 'Xi ', 'Shan ', 'Qian ', 'Jue ', 'Cang ', 'Chu ', 'San ', 'Bei ', 'Xiao ', 'Yong ', 'Yao ', 'Tan ', 'Suo ', 'Yang ', 'Fa ', 'Bing ', 'Jia ', 'Dai ', 'Zai ', 'Tang ', '[?] ', 'Bin ', 'Chu ', 'Nuo ', 'Can ', 'Lei ', 'Cui ', 'Yong ', 'Zao ', 'Zong ', 'Peng ', 'Song ', 'Ao ', 'Chuan ', 'Yu ', 'Zhai ', 'Cou ', 'Shang ', 'Qiang ', 'Jing ', 'Chi ', 'Sha ', 'Han ', 'Zhang ', 'Qing ', 'Yan ', 'Di ', 'Xi ', 'Lu ', 'Bei ', 'Piao ', 'Jin ', 'Lian ', 'Lu ', 'Man ', 'Qian ', 'Xian ', 'Tan ', 'Ying ', 'Dong ', 'Zhuan ', 'Xiang ', 'Shan ', 'Qiao ', 'Jiong ', 'Tui ', 'Zun ', 'Pu ', 'Xi ', 'Lao ', 'Chang ', 'Guang ', 'Liao ', 'Qi ', 'Deng ', 'Chan ', 'Wei ', 'Ji ', 'Fan ', 'Hui ', 'Chuan ', 'Jian ', 'Dan ', 'Jiao ', 'Jiu ', 'Seng ', 'Fen ', 'Xian ', 'Jue ', 'E ', 'Jiao ', 'Jian ', 'Tong ', 'Lin ', 'Bo ', 'Gu ', '[?] ', 'Su ', 'Xian ', 'Jiang ', 'Min ', 'Ye ', 'Jin ', 'Jia ', 'Qiao ', 'Pi ', 'Feng ', 'Zhou ', 'Ai ', 'Sai '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x051.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x051.php
new file mode 100644
index 000000000..a5dec8103
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x051.php
@@ -0,0 +1 @@
+<?php return ['Yi ', 'Jun ', 'Nong ', 'Chan ', 'Yi ', 'Dang ', 'Jing ', 'Xuan ', 'Kuai ', 'Jian ', 'Chu ', 'Dan ', 'Jiao ', 'Sha ', 'Zai ', '[?] ', 'Bin ', 'An ', 'Ru ', 'Tai ', 'Chou ', 'Chai ', 'Lan ', 'Ni ', 'Jin ', 'Qian ', 'Meng ', 'Wu ', 'Ning ', 'Qiong ', 'Ni ', 'Chang ', 'Lie ', 'Lei ', 'Lu ', 'Kuang ', 'Bao ', 'Du ', 'Biao ', 'Zan ', 'Zhi ', 'Si ', 'You ', 'Hao ', 'Chen ', 'Chen ', 'Li ', 'Teng ', 'Wei ', 'Long ', 'Chu ', 'Chan ', 'Rang ', 'Shu ', 'Hui ', 'Li ', 'Luo ', 'Zan ', 'Nuo ', 'Tang ', 'Yan ', 'Lei ', 'Nang ', 'Er ', 'Wu ', 'Yun ', 'Zan ', 'Yuan ', 'Xiong ', 'Chong ', 'Zhao ', 'Xiong ', 'Xian ', 'Guang ', 'Dui ', 'Ke ', 'Dui ', 'Mian ', 'Tu ', 'Chang ', 'Er ', 'Dui ', 'Er ', 'Xin ', 'Tu ', 'Si ', 'Yan ', 'Yan ', 'Shi ', 'Shi ', 'Dang ', 'Qian ', 'Dou ', 'Fen ', 'Mao ', 'Shen ', 'Dou ', 'Bai ', 'Jing ', 'Li ', 'Huang ', 'Ru ', 'Wang ', 'Nei ', 'Quan ', 'Liang ', 'Yu ', 'Ba ', 'Gong ', 'Liu ', 'Xi ', '[?] ', 'Lan ', 'Gong ', 'Tian ', 'Guan ', 'Xing ', 'Bing ', 'Qi ', 'Ju ', 'Dian ', 'Zi ', 'Ppwun ', 'Yang ', 'Jian ', 'Shou ', 'Ji ', 'Yi ', 'Ji ', 'Chan ', 'Jiong ', 'Mao ', 'Ran ', 'Nei ', 'Yuan ', 'Mao ', 'Gang ', 'Ran ', 'Ce ', 'Jiong ', 'Ce ', 'Zai ', 'Gua ', 'Jiong ', 'Mao ', 'Zhou ', 'Mou ', 'Gou ', 'Xu ', 'Mian ', 'Mi ', 'Rong ', 'Yin ', 'Xie ', 'Kan ', 'Jun ', 'Nong ', 'Yi ', 'Mi ', 'Shi ', 'Guan ', 'Meng ', 'Zhong ', 'Ju ', 'Yuan ', 'Ming ', 'Kou ', 'Lam ', 'Fu ', 'Xie ', 'Mi ', 'Bing ', 'Dong ', 'Tai ', 'Gang ', 'Feng ', 'Bing ', 'Hu ', 'Chong ', 'Jue ', 'Hu ', 'Kuang ', 'Ye ', 'Leng ', 'Pan ', 'Fu ', 'Min ', 'Dong ', 'Xian ', 'Lie ', 'Xia ', 'Jian ', 'Jing ', 'Shu ', 'Mei ', 'Tu ', 'Qi ', 'Gu ', 'Zhun ', 'Song ', 'Jing ', 'Liang ', 'Qing ', 'Diao ', 'Ling ', 'Dong ', 'Gan ', 'Jian ', 'Yin ', 'Cou ', 'Yi ', 'Li ', 'Cang ', 'Ming ', 'Zhuen ', 'Cui ', 'Si ', 'Duo ', 'Jin ', 'Lin ', 'Lin ', 'Ning ', 'Xi ', 'Du ', 'Ji ', 'Fan ', 'Fan ', 'Fan ', 'Feng ', 'Ju ', 'Chu ', 'Tako ', 'Feng ', 'Mok ', 'Ci ', 'Fu ', 'Feng ', 'Ping ', 'Feng ', 'Kai ', 'Huang ', 'Kai ', 'Gan ', 'Deng ', 'Ping ', 'Qu ', 'Xiong ', 'Kuai ', 'Tu ', 'Ao ', 'Chu ', 'Ji ', 'Dang ', 'Han ', 'Han ', 'Zao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x052.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x052.php
new file mode 100644
index 000000000..91d904530
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x052.php
@@ -0,0 +1 @@
+<?php return ['Dao ', 'Diao ', 'Dao ', 'Ren ', 'Ren ', 'Chuang ', 'Fen ', 'Qie ', 'Yi ', 'Ji ', 'Kan ', 'Qian ', 'Cun ', 'Chu ', 'Wen ', 'Ji ', 'Dan ', 'Xing ', 'Hua ', 'Wan ', 'Jue ', 'Li ', 'Yue ', 'Lie ', 'Liu ', 'Ze ', 'Gang ', 'Chuang ', 'Fu ', 'Chu ', 'Qu ', 'Ju ', 'Shan ', 'Min ', 'Ling ', 'Zhong ', 'Pan ', 'Bie ', 'Jie ', 'Jie ', 'Bao ', 'Li ', 'Shan ', 'Bie ', 'Chan ', 'Jing ', 'Gua ', 'Gen ', 'Dao ', 'Chuang ', 'Kui ', 'Ku ', 'Duo ', 'Er ', 'Zhi ', 'Shua ', 'Quan ', 'Cha ', 'Ci ', 'Ke ', 'Jie ', 'Gui ', 'Ci ', 'Gui ', 'Kai ', 'Duo ', 'Ji ', 'Ti ', 'Jing ', 'Lou ', 'Gen ', 'Ze ', 'Yuan ', 'Cuo ', 'Xue ', 'Ke ', 'La ', 'Qian ', 'Cha ', 'Chuang ', 'Gua ', 'Jian ', 'Cuo ', 'Li ', 'Ti ', 'Fei ', 'Pou ', 'Chan ', 'Qi ', 'Chuang ', 'Zi ', 'Gang ', 'Wan ', 'Bo ', 'Ji ', 'Duo ', 'Qing ', 'Yan ', 'Zhuo ', 'Jian ', 'Ji ', 'Bo ', 'Yan ', 'Ju ', 'Huo ', 'Sheng ', 'Jian ', 'Duo ', 'Duan ', 'Wu ', 'Gua ', 'Fu ', 'Sheng ', 'Jian ', 'Ge ', 'Zha ', 'Kai ', 'Chuang ', 'Juan ', 'Chan ', 'Tuan ', 'Lu ', 'Li ', 'Fou ', 'Shan ', 'Piao ', 'Kou ', 'Jiao ', 'Gua ', 'Qiao ', 'Jue ', 'Hua ', 'Zha ', 'Zhuo ', 'Lian ', 'Ju ', 'Pi ', 'Liu ', 'Gui ', 'Jiao ', 'Gui ', 'Jian ', 'Jian ', 'Tang ', 'Huo ', 'Ji ', 'Jian ', 'Yi ', 'Jian ', 'Zhi ', 'Chan ', 'Cuan ', 'Mo ', 'Li ', 'Zhu ', 'Li ', 'Ya ', 'Quan ', 'Ban ', 'Gong ', 'Jia ', 'Wu ', 'Mai ', 'Lie ', 'Jin ', 'Keng ', 'Xie ', 'Zhi ', 'Dong ', 'Zhu ', 'Nu ', 'Jie ', 'Qu ', 'Shao ', 'Yi ', 'Zhu ', 'Miao ', 'Li ', 'Jing ', 'Lao ', 'Lao ', 'Juan ', 'Kou ', 'Yang ', 'Wa ', 'Xiao ', 'Mou ', 'Kuang ', 'Jie ', 'Lie ', 'He ', 'Shi ', 'Ke ', 'Jing ', 'Hao ', 'Bo ', 'Min ', 'Chi ', 'Lang ', 'Yong ', 'Yong ', 'Mian ', 'Ke ', 'Xun ', 'Juan ', 'Qing ', 'Lu ', 'Pou ', 'Meng ', 'Lai ', 'Le ', 'Kai ', 'Mian ', 'Dong ', 'Xu ', 'Xu ', 'Kan ', 'Wu ', 'Yi ', 'Xun ', 'Weng ', 'Sheng ', 'Lao ', 'Mu ', 'Lu ', 'Piao ', 'Shi ', 'Ji ', 'Qin ', 'Qiang ', 'Jiao ', 'Quan ', 'Yang ', 'Yi ', 'Jue ', 'Fan ', 'Juan ', 'Tong ', 'Ju ', 'Dan ', 'Xie ', 'Mai ', 'Xun ', 'Xun ', 'Lu ', 'Li ', 'Che ', 'Rang ', 'Quan ', 'Bao ', 'Shao ', 'Yun ', 'Jiu ', 'Bao ', 'Gou ', 'Wu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x053.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x053.php
new file mode 100644
index 000000000..ffb671fc4
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x053.php
@@ -0,0 +1 @@
+<?php return ['Yun ', 'Mwun ', 'Nay ', 'Gai ', 'Gai ', 'Bao ', 'Cong ', '[?] ', 'Xiong ', 'Peng ', 'Ju ', 'Tao ', 'Ge ', 'Pu ', 'An ', 'Pao ', 'Fu ', 'Gong ', 'Da ', 'Jiu ', 'Qiong ', 'Bi ', 'Hua ', 'Bei ', 'Nao ', 'Chi ', 'Fang ', 'Jiu ', 'Yi ', 'Za ', 'Jiang ', 'Kang ', 'Jiang ', 'Kuang ', 'Hu ', 'Xia ', 'Qu ', 'Bian ', 'Gui ', 'Qie ', 'Zang ', 'Kuang ', 'Fei ', 'Hu ', 'Tou ', 'Gui ', 'Gui ', 'Hui ', 'Dan ', 'Gui ', 'Lian ', 'Lian ', 'Suan ', 'Du ', 'Jiu ', 'Qu ', 'Xi ', 'Pi ', 'Qu ', 'Yi ', 'Qia ', 'Yan ', 'Bian ', 'Ni ', 'Qu ', 'Shi ', 'Xin ', 'Qian ', 'Nian ', 'Sa ', 'Zu ', 'Sheng ', 'Wu ', 'Hui ', 'Ban ', 'Shi ', 'Xi ', 'Wan ', 'Hua ', 'Xie ', 'Wan ', 'Bei ', 'Zu ', 'Zhuo ', 'Xie ', 'Dan ', 'Mai ', 'Nan ', 'Dan ', 'Ji ', 'Bo ', 'Shuai ', 'Bu ', 'Kuang ', 'Bian ', 'Bu ', 'Zhan ', 'Qia ', 'Lu ', 'You ', 'Lu ', 'Xi ', 'Gua ', 'Wo ', 'Xie ', 'Jie ', 'Jie ', 'Wei ', 'Ang ', 'Qiong ', 'Zhi ', 'Mao ', 'Yin ', 'Wei ', 'Shao ', 'Ji ', 'Que ', 'Luan ', 'Shi ', 'Juan ', 'Xie ', 'Xu ', 'Jin ', 'Que ', 'Wu ', 'Ji ', 'E ', 'Qing ', 'Xi ', '[?] ', 'Han ', 'Zhan ', 'E ', 'Ting ', 'Li ', 'Zhe ', 'Han ', 'Li ', 'Ya ', 'Ya ', 'Yan ', 'She ', 'Zhi ', 'Zha ', 'Pang ', '[?] ', 'He ', 'Ya ', 'Zhi ', 'Ce ', 'Pang ', 'Ti ', 'Li ', 'She ', 'Hou ', 'Ting ', 'Zui ', 'Cuo ', 'Fei ', 'Yuan ', 'Ce ', 'Yuan ', 'Xiang ', 'Yan ', 'Li ', 'Jue ', 'Sha ', 'Dian ', 'Chu ', 'Jiu ', 'Qin ', 'Ao ', 'Gui ', 'Yan ', 'Si ', 'Li ', 'Chang ', 'Lan ', 'Li ', 'Yan ', 'Yan ', 'Yuan ', 'Si ', 'Gong ', 'Lin ', 'Qiu ', 'Qu ', 'Qu ', 'Uk ', 'Lei ', 'Du ', 'Xian ', 'Zhuan ', 'San ', 'Can ', 'Can ', 'Can ', 'Can ', 'Ai ', 'Dai ', 'You ', 'Cha ', 'Ji ', 'You ', 'Shuang ', 'Fan ', 'Shou ', 'Guai ', 'Ba ', 'Fa ', 'Ruo ', 'Shi ', 'Shu ', 'Zhuo ', 'Qu ', 'Shou ', 'Bian ', 'Xu ', 'Jia ', 'Pan ', 'Sou ', 'Gao ', 'Wei ', 'Sou ', 'Die ', 'Rui ', 'Cong ', 'Kou ', 'Gu ', 'Ju ', 'Ling ', 'Gua ', 'Tao ', 'Kou ', 'Zhi ', 'Jiao ', 'Zhao ', 'Ba ', 'Ding ', 'Ke ', 'Tai ', 'Chi ', 'Shi ', 'You ', 'Qiu ', 'Po ', 'Xie ', 'Hao ', 'Si ', 'Tan ', 'Chi ', 'Le ', 'Diao ', 'Ji ', '[?] ', 'Hong '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x054.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x054.php
new file mode 100644
index 000000000..c90148fe5
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x054.php
@@ -0,0 +1 @@
+<?php return ['Mie ', 'Xu ', 'Mang ', 'Chi ', 'Ge ', 'Xuan ', 'Yao ', 'Zi ', 'He ', 'Ji ', 'Diao ', 'Cun ', 'Tong ', 'Ming ', 'Hou ', 'Li ', 'Tu ', 'Xiang ', 'Zha ', 'Xia ', 'Ye ', 'Lu ', 'A ', 'Ma ', 'Ou ', 'Xue ', 'Yi ', 'Jun ', 'Chou ', 'Lin ', 'Tun ', 'Yin ', 'Fei ', 'Bi ', 'Qin ', 'Qin ', 'Jie ', 'Bu ', 'Fou ', 'Ba ', 'Dun ', 'Fen ', 'E ', 'Han ', 'Ting ', 'Hang ', 'Shun ', 'Qi ', 'Hong ', 'Zhi ', 'Shen ', 'Wu ', 'Wu ', 'Chao ', 'Ne ', 'Xue ', 'Xi ', 'Chui ', 'Dou ', 'Wen ', 'Hou ', 'Ou ', 'Wu ', 'Gao ', 'Ya ', 'Jun ', 'Lu ', 'E ', 'Ge ', 'Mei ', 'Ai ', 'Qi ', 'Cheng ', 'Wu ', 'Gao ', 'Fu ', 'Jiao ', 'Hong ', 'Chi ', 'Sheng ', 'Ne ', 'Tun ', 'Fu ', 'Yi ', 'Dai ', 'Ou ', 'Li ', 'Bai ', 'Yuan ', 'Kuai ', '[?] ', 'Qiang ', 'Wu ', 'E ', 'Shi ', 'Quan ', 'Pen ', 'Wen ', 'Ni ', 'M ', 'Ling ', 'Ran ', 'You ', 'Di ', 'Zhou ', 'Shi ', 'Zhou ', 'Tie ', 'Xi ', 'Yi ', 'Qi ', 'Ping ', 'Zi ', 'Gu ', 'Zi ', 'Wei ', 'Xu ', 'He ', 'Nao ', 'Xia ', 'Pei ', 'Yi ', 'Xiao ', 'Shen ', 'Hu ', 'Ming ', 'Da ', 'Qu ', 'Ju ', 'Gem ', 'Za ', 'Tuo ', 'Duo ', 'Pou ', 'Pao ', 'Bi ', 'Fu ', 'Yang ', 'He ', 'Zha ', 'He ', 'Hai ', 'Jiu ', 'Yong ', 'Fu ', 'Que ', 'Zhou ', 'Wa ', 'Ka ', 'Gu ', 'Ka ', 'Zuo ', 'Bu ', 'Long ', 'Dong ', 'Ning ', 'Tha ', 'Si ', 'Xian ', 'Huo ', 'Qi ', 'Er ', 'E ', 'Guang ', 'Zha ', 'Xi ', 'Yi ', 'Lie ', 'Zi ', 'Mie ', 'Mi ', 'Zhi ', 'Yao ', 'Ji ', 'Zhou ', 'Ge ', 'Shuai ', 'Zan ', 'Xiao ', 'Ke ', 'Hui ', 'Kua ', 'Huai ', 'Tao ', 'Xian ', 'E ', 'Xuan ', 'Xiu ', 'Wai ', 'Yan ', 'Lao ', 'Yi ', 'Ai ', 'Pin ', 'Shen ', 'Tong ', 'Hong ', 'Xiong ', 'Chi ', 'Wa ', 'Ha ', 'Zai ', 'Yu ', 'Di ', 'Pai ', 'Xiang ', 'Ai ', 'Hen ', 'Kuang ', 'Ya ', 'Da ', 'Xiao ', 'Bi ', 'Yue ', '[?] ', 'Hua ', 'Sasou ', 'Kuai ', 'Duo ', '[?] ', 'Ji ', 'Nong ', 'Mou ', 'Yo ', 'Hao ', 'Yuan ', 'Long ', 'Pou ', 'Mang ', 'Ge ', 'E ', 'Chi ', 'Shao ', 'Li ', 'Na ', 'Zu ', 'He ', 'Ku ', 'Xiao ', 'Xian ', 'Lao ', 'Bo ', 'Zhe ', 'Zha ', 'Liang ', 'Ba ', 'Mie ', 'Le ', 'Sui ', 'Fou ', 'Bu ', 'Han ', 'Heng ', 'Geng ', 'Shuo ', 'Ge '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x055.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x055.php
new file mode 100644
index 000000000..0aa75ca60
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x055.php
@@ -0,0 +1 @@
+<?php return ['You ', 'Yan ', 'Gu ', 'Gu ', 'Bai ', 'Han ', 'Suo ', 'Chun ', 'Yi ', 'Ai ', 'Jia ', 'Tu ', 'Xian ', 'Huan ', 'Li ', 'Xi ', 'Tang ', 'Zuo ', 'Qiu ', 'Che ', 'Wu ', 'Zao ', 'Ya ', 'Dou ', 'Qi ', 'Di ', 'Qin ', 'Ma ', 'Mal ', 'Hong ', 'Dou ', 'Kes ', 'Lao ', 'Liang ', 'Suo ', 'Zao ', 'Huan ', 'Lang ', 'Sha ', 'Ji ', 'Zuo ', 'Wo ', 'Feng ', 'Yin ', 'Hu ', 'Qi ', 'Shou ', 'Wei ', 'Shua ', 'Chang ', 'Er ', 'Li ', 'Qiang ', 'An ', 'Jie ', 'Yo ', 'Nian ', 'Yu ', 'Tian ', 'Lai ', 'Sha ', 'Xi ', 'Tuo ', 'Hu ', 'Ai ', 'Zhou ', 'Nou ', 'Ken ', 'Zhuo ', 'Zhuo ', 'Shang ', 'Di ', 'Heng ', 'Lan ', 'A ', 'Xiao ', 'Xiang ', 'Tun ', 'Wu ', 'Wen ', 'Cui ', 'Sha ', 'Hu ', 'Qi ', 'Qi ', 'Tao ', 'Dan ', 'Dan ', 'Ye ', 'Zi ', 'Bi ', 'Cui ', 'Chuo ', 'He ', 'Ya ', 'Qi ', 'Zhe ', 'Pei ', 'Liang ', 'Xian ', 'Pi ', 'Sha ', 'La ', 'Ze ', 'Qing ', 'Gua ', 'Pa ', 'Zhe ', 'Se ', 'Zhuan ', 'Nie ', 'Guo ', 'Luo ', 'Yan ', 'Di ', 'Quan ', 'Tan ', 'Bo ', 'Ding ', 'Lang ', 'Xiao ', '[?] ', 'Tang ', 'Chi ', 'Ti ', 'An ', 'Jiu ', 'Dan ', 'Ke ', 'Yong ', 'Wei ', 'Nan ', 'Shan ', 'Yu ', 'Zhe ', 'La ', 'Jie ', 'Hou ', 'Han ', 'Die ', 'Zhou ', 'Chai ', 'Wai ', 'Re ', 'Yu ', 'Yin ', 'Zan ', 'Yao ', 'Wo ', 'Mian ', 'Hu ', 'Yun ', 'Chuan ', 'Hui ', 'Huan ', 'Huan ', 'Xi ', 'He ', 'Ji ', 'Kui ', 'Zhong ', 'Wei ', 'Sha ', 'Xu ', 'Huang ', 'Du ', 'Nie ', 'Xuan ', 'Liang ', 'Yu ', 'Sang ', 'Chi ', 'Qiao ', 'Yan ', 'Dan ', 'Pen ', 'Can ', 'Li ', 'Yo ', 'Zha ', 'Wei ', 'Miao ', 'Ying ', 'Pen ', 'Phos ', 'Kui ', 'Xi ', 'Yu ', 'Jie ', 'Lou ', 'Ku ', 'Sao ', 'Huo ', 'Ti ', 'Yao ', 'He ', 'A ', 'Xiu ', 'Qiang ', 'Se ', 'Yong ', 'Su ', 'Hong ', 'Xie ', 'Yi ', 'Suo ', 'Ma ', 'Cha ', 'Hai ', 'Ke ', 'Ta ', 'Sang ', 'Tian ', 'Ru ', 'Sou ', 'Wa ', 'Ji ', 'Pang ', 'Wu ', 'Xian ', 'Shi ', 'Ge ', 'Zi ', 'Jie ', 'Luo ', 'Weng ', 'Wa ', 'Si ', 'Chi ', 'Hao ', 'Suo ', 'Jia ', 'Hai ', 'Suo ', 'Qin ', 'Nie ', 'He ', 'Cis ', 'Sai ', 'Ng ', 'Ge ', 'Na ', 'Dia ', 'Ai ', '[?] ', 'Tong ', 'Bi ', 'Ao ', 'Ao ', 'Lian ', 'Cui ', 'Zhe ', 'Mo ', 'Sou ', 'Sou ', 'Tan '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x056.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x056.php
new file mode 100644
index 000000000..157e4a0ce
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x056.php
@@ -0,0 +1 @@
+<?php return ['Di ', 'Qi ', 'Jiao ', 'Chong ', 'Jiao ', 'Kai ', 'Tan ', 'San ', 'Cao ', 'Jia ', 'Ai ', 'Xiao ', 'Piao ', 'Lou ', 'Ga ', 'Gu ', 'Xiao ', 'Hu ', 'Hui ', 'Guo ', 'Ou ', 'Xian ', 'Ze ', 'Chang ', 'Xu ', 'Po ', 'De ', 'Ma ', 'Ma ', 'Hu ', 'Lei ', 'Du ', 'Ga ', 'Tang ', 'Ye ', 'Beng ', 'Ying ', 'Saai ', 'Jiao ', 'Mi ', 'Xiao ', 'Hua ', 'Mai ', 'Ran ', 'Zuo ', 'Peng ', 'Lao ', 'Xiao ', 'Ji ', 'Zhu ', 'Chao ', 'Kui ', 'Zui ', 'Xiao ', 'Si ', 'Hao ', 'Fu ', 'Liao ', 'Qiao ', 'Xi ', 'Xiu ', 'Tan ', 'Tan ', 'Mo ', 'Xun ', 'E ', 'Zun ', 'Fan ', 'Chi ', 'Hui ', 'Zan ', 'Chuang ', 'Cu ', 'Dan ', 'Yu ', 'Tun ', 'Cheng ', 'Jiao ', 'Ye ', 'Xi ', 'Qi ', 'Hao ', 'Lian ', 'Xu ', 'Deng ', 'Hui ', 'Yin ', 'Pu ', 'Jue ', 'Qin ', 'Xun ', 'Nie ', 'Lu ', 'Si ', 'Yan ', 'Ying ', 'Da ', 'Dan ', 'Yu ', 'Zhou ', 'Jin ', 'Nong ', 'Yue ', 'Hui ', 'Qi ', 'E ', 'Zao ', 'Yi ', 'Shi ', 'Jiao ', 'Yuan ', 'Ai ', 'Yong ', 'Jue ', 'Kuai ', 'Yu ', 'Pen ', 'Dao ', 'Ge ', 'Xin ', 'Dun ', 'Dang ', 'Sin ', 'Sai ', 'Pi ', 'Pi ', 'Yin ', 'Zui ', 'Ning ', 'Di ', 'Lan ', 'Ta ', 'Huo ', 'Ru ', 'Hao ', 'Xia ', 'Ya ', 'Duo ', 'Xi ', 'Chou ', 'Ji ', 'Jin ', 'Hao ', 'Ti ', 'Chang ', '[?] ', '[?] ', 'Ca ', 'Ti ', 'Lu ', 'Hui ', 'Bo ', 'You ', 'Nie ', 'Yin ', 'Hu ', 'Mo ', 'Huang ', 'Zhe ', 'Li ', 'Liu ', 'Haai ', 'Nang ', 'Xiao ', 'Mo ', 'Yan ', 'Li ', 'Lu ', 'Long ', 'Fu ', 'Dan ', 'Chen ', 'Pin ', 'Pi ', 'Xiang ', 'Huo ', 'Mo ', 'Xi ', 'Duo ', 'Ku ', 'Yan ', 'Chan ', 'Ying ', 'Rang ', 'Dian ', 'La ', 'Ta ', 'Xiao ', 'Jiao ', 'Chuo ', 'Huan ', 'Huo ', 'Zhuan ', 'Nie ', 'Xiao ', 'Ca ', 'Li ', 'Chan ', 'Chai ', 'Li ', 'Yi ', 'Luo ', 'Nang ', 'Zan ', 'Su ', 'Xi ', 'So ', 'Jian ', 'Za ', 'Zhu ', 'Lan ', 'Nie ', 'Nang ', '[?] ', '[?] ', 'Wei ', 'Hui ', 'Yin ', 'Qiu ', 'Si ', 'Nin ', 'Jian ', 'Hui ', 'Xin ', 'Yin ', 'Nan ', 'Tuan ', 'Tuan ', 'Dun ', 'Kang ', 'Yuan ', 'Jiong ', 'Pian ', 'Yun ', 'Cong ', 'Hu ', 'Hui ', 'Yuan ', 'You ', 'Guo ', 'Kun ', 'Cong ', 'Wei ', 'Tu ', 'Wei ', 'Lun ', 'Guo ', 'Qun ', 'Ri ', 'Ling ', 'Gu ', 'Guo ', 'Tai ', 'Guo ', 'Tu ', 'You '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x057.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x057.php
new file mode 100644
index 000000000..ead2e2b48
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x057.php
@@ -0,0 +1 @@
+<?php return ['Guo ', 'Yin ', 'Hun ', 'Pu ', 'Yu ', 'Han ', 'Yuan ', 'Lun ', 'Quan ', 'Yu ', 'Qing ', 'Guo ', 'Chuan ', 'Wei ', 'Yuan ', 'Quan ', 'Ku ', 'Fu ', 'Yuan ', 'Yuan ', 'E ', 'Tu ', 'Tu ', 'Tu ', 'Tuan ', 'Lue ', 'Hui ', 'Yi ', 'Yuan ', 'Luan ', 'Luan ', 'Tu ', 'Ya ', 'Tu ', 'Ting ', 'Sheng ', 'Pu ', 'Lu ', 'Iri ', 'Ya ', 'Zai ', 'Wei ', 'Ge ', 'Yu ', 'Wu ', 'Gui ', 'Pi ', 'Yi ', 'Di ', 'Qian ', 'Qian ', 'Zhen ', 'Zhuo ', 'Dang ', 'Qia ', 'Akutsu ', 'Yama ', 'Kuang ', 'Chang ', 'Qi ', 'Nie ', 'Mo ', 'Ji ', 'Jia ', 'Zhi ', 'Zhi ', 'Ban ', 'Xun ', 'Tou ', 'Qin ', 'Fen ', 'Jun ', 'Keng ', 'Tun ', 'Fang ', 'Fen ', 'Ben ', 'Tan ', 'Kan ', 'Pi ', 'Zuo ', 'Keng ', 'Bi ', 'Xing ', 'Di ', 'Jing ', 'Ji ', 'Kuai ', 'Di ', 'Jing ', 'Jian ', 'Tan ', 'Li ', 'Ba ', 'Wu ', 'Fen ', 'Zhui ', 'Po ', 'Pan ', 'Tang ', 'Kun ', 'Qu ', 'Tan ', 'Zhi ', 'Tuo ', 'Gan ', 'Ping ', 'Dian ', 'Gua ', 'Ni ', 'Tai ', 'Pi ', 'Jiong ', 'Yang ', 'Fo ', 'Ao ', 'Liu ', 'Qiu ', 'Mu ', 'Ke ', 'Gou ', 'Xue ', 'Ba ', 'Chi ', 'Che ', 'Ling ', 'Zhu ', 'Fu ', 'Hu ', 'Zhi ', 'Chui ', 'La ', 'Long ', 'Long ', 'Lu ', 'Ao ', 'Tay ', 'Pao ', '[?] ', 'Xing ', 'Dong ', 'Ji ', 'Ke ', 'Lu ', 'Ci ', 'Chi ', 'Lei ', 'Gai ', 'Yin ', 'Hou ', 'Dui ', 'Zhao ', 'Fu ', 'Guang ', 'Yao ', 'Duo ', 'Duo ', 'Gui ', 'Cha ', 'Yang ', 'Yin ', 'Fa ', 'Gou ', 'Yuan ', 'Die ', 'Xie ', 'Ken ', 'Jiong ', 'Shou ', 'E ', 'Ha ', 'Dian ', 'Hong ', 'Wu ', 'Kua ', '[?] ', 'Tao ', 'Dang ', 'Kai ', 'Gake ', 'Nao ', 'An ', 'Xing ', 'Xian ', 'Huan ', 'Bang ', 'Pei ', 'Ba ', 'Yi ', 'Yin ', 'Han ', 'Xu ', 'Chui ', 'Cen ', 'Geng ', 'Ai ', 'Peng ', 'Fang ', 'Que ', 'Yong ', 'Xun ', 'Jia ', 'Di ', 'Mai ', 'Lang ', 'Xuan ', 'Cheng ', 'Yan ', 'Jin ', 'Zhe ', 'Lei ', 'Lie ', 'Bu ', 'Cheng ', 'Gomi ', 'Bu ', 'Shi ', 'Xun ', 'Guo ', 'Jiong ', 'Ye ', 'Nian ', 'Di ', 'Yu ', 'Bu ', 'Ya ', 'Juan ', 'Sui ', 'Pi ', 'Cheng ', 'Wan ', 'Ju ', 'Lun ', 'Zheng ', 'Kong ', 'Chong ', 'Dong ', 'Dai ', 'Tan ', 'An ', 'Cai ', 'Shu ', 'Beng ', 'Kan ', 'Zhi ', 'Duo ', 'Yi ', 'Zhi ', 'Yi ', 'Pei ', 'Ji ', 'Zhun ', 'Qi ', 'Sao ', 'Ju ', 'Ni '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x058.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x058.php
new file mode 100644
index 000000000..00f2ac4e7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x058.php
@@ -0,0 +1 @@
+<?php return ['Ku ', 'Ke ', 'Tang ', 'Kun ', 'Ni ', 'Jian ', 'Dui ', 'Jin ', 'Gang ', 'Yu ', 'E ', 'Peng ', 'Gu ', 'Tu ', 'Leng ', '[?] ', 'Ya ', 'Qian ', '[?] ', 'An ', '[?] ', 'Duo ', 'Nao ', 'Tu ', 'Cheng ', 'Yin ', 'Hun ', 'Bi ', 'Lian ', 'Guo ', 'Die ', 'Zhuan ', 'Hou ', 'Bao ', 'Bao ', 'Yu ', 'Di ', 'Mao ', 'Jie ', 'Ruan ', 'E ', 'Geng ', 'Kan ', 'Zong ', 'Yu ', 'Huang ', 'E ', 'Yao ', 'Yan ', 'Bao ', 'Ji ', 'Mei ', 'Chang ', 'Du ', 'Tuo ', 'Yin ', 'Feng ', 'Zhong ', 'Jie ', 'Zhen ', 'Feng ', 'Gang ', 'Chuan ', 'Jian ', 'Pyeng ', 'Toride ', 'Xiang ', 'Huang ', 'Leng ', 'Duan ', '[?] ', 'Xuan ', 'Ji ', 'Ji ', 'Kuai ', 'Ying ', 'Ta ', 'Cheng ', 'Yong ', 'Kai ', 'Su ', 'Su ', 'Shi ', 'Mi ', 'Ta ', 'Weng ', 'Cheng ', 'Tu ', 'Tang ', 'Que ', 'Zhong ', 'Li ', 'Peng ', 'Bang ', 'Sai ', 'Zang ', 'Dui ', 'Tian ', 'Wu ', 'Cheng ', 'Xun ', 'Ge ', 'Zhen ', 'Ai ', 'Gong ', 'Yan ', 'Kan ', 'Tian ', 'Yuan ', 'Wen ', 'Xie ', 'Liu ', 'Ama ', 'Lang ', 'Chang ', 'Peng ', 'Beng ', 'Chen ', 'Cu ', 'Lu ', 'Ou ', 'Qian ', 'Mei ', 'Mo ', 'Zhuan ', 'Shuang ', 'Shu ', 'Lou ', 'Chi ', 'Man ', 'Biao ', 'Jing ', 'Qi ', 'Shu ', 'Di ', 'Zhang ', 'Kan ', 'Yong ', 'Dian ', 'Chen ', 'Zhi ', 'Xi ', 'Guo ', 'Qiang ', 'Jin ', 'Di ', 'Shang ', 'Mu ', 'Cui ', 'Yan ', 'Ta ', 'Zeng ', 'Qi ', 'Qiang ', 'Liang ', '[?] ', 'Zhui ', 'Qiao ', 'Zeng ', 'Xu ', 'Shan ', 'Shan ', 'Ba ', 'Pu ', 'Kuai ', 'Dong ', 'Fan ', 'Que ', 'Mo ', 'Dun ', 'Dun ', 'Dun ', 'Di ', 'Sheng ', 'Duo ', 'Duo ', 'Tan ', 'Deng ', 'Wu ', 'Fen ', 'Huang ', 'Tan ', 'Da ', 'Ye ', 'Sho ', 'Mama ', 'Yu ', 'Qiang ', 'Ji ', 'Qiao ', 'Ken ', 'Yi ', 'Pi ', 'Bi ', 'Dian ', 'Jiang ', 'Ye ', 'Yong ', 'Bo ', 'Tan ', 'Lan ', 'Ju ', 'Huai ', 'Dang ', 'Rang ', 'Qian ', 'Xun ', 'Lan ', 'Xi ', 'He ', 'Ai ', 'Ya ', 'Dao ', 'Hao ', 'Ruan ', 'Mama ', 'Lei ', 'Kuang ', 'Lu ', 'Yan ', 'Tan ', 'Wei ', 'Huai ', 'Long ', 'Long ', 'Rui ', 'Li ', 'Lin ', 'Rang ', 'Ten ', 'Xun ', 'Yan ', 'Lei ', 'Ba ', '[?] ', 'Shi ', 'Ren ', '[?] ', 'Zhuang ', 'Zhuang ', 'Sheng ', 'Yi ', 'Mai ', 'Ke ', 'Zhu ', 'Zhuang ', 'Hu ', 'Hu ', 'Kun ', 'Yi ', 'Hu ', 'Xu ', 'Kun ', 'Shou ', 'Mang ', 'Zun '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x059.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x059.php
new file mode 100644
index 000000000..f093af0e2
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x059.php
@@ -0,0 +1 @@
+<?php return ['Shou ', 'Yi ', 'Zhi ', 'Gu ', 'Chu ', 'Jiang ', 'Feng ', 'Bei ', 'Cay ', 'Bian ', 'Sui ', 'Qun ', 'Ling ', 'Fu ', 'Zuo ', 'Xia ', 'Xiong ', '[?] ', 'Nao ', 'Xia ', 'Kui ', 'Xi ', 'Wai ', 'Yuan ', 'Mao ', 'Su ', 'Duo ', 'Duo ', 'Ye ', 'Qing ', 'Uys ', 'Gou ', 'Gou ', 'Qi ', 'Meng ', 'Meng ', 'Yin ', 'Huo ', 'Chen ', 'Da ', 'Ze ', 'Tian ', 'Tai ', 'Fu ', 'Guai ', 'Yao ', 'Yang ', 'Hang ', 'Gao ', 'Shi ', 'Ben ', 'Tai ', 'Tou ', 'Yan ', 'Bi ', 'Yi ', 'Kua ', 'Jia ', 'Duo ', 'Kwu ', 'Kuang ', 'Yun ', 'Jia ', 'Pa ', 'En ', 'Lian ', 'Huan ', 'Di ', 'Yan ', 'Pao ', 'Quan ', 'Qi ', 'Nai ', 'Feng ', 'Xie ', 'Fen ', 'Dian ', '[?] ', 'Kui ', 'Zou ', 'Huan ', 'Qi ', 'Kai ', 'Zha ', 'Ben ', 'Yi ', 'Jiang ', 'Tao ', 'Zang ', 'Ben ', 'Xi ', 'Xiang ', 'Fei ', 'Diao ', 'Xun ', 'Keng ', 'Dian ', 'Ao ', 'She ', 'Weng ', 'Pan ', 'Ao ', 'Wu ', 'Ao ', 'Jiang ', 'Lian ', 'Duo ', 'Yun ', 'Jiang ', 'Shi ', 'Fen ', 'Huo ', 'Bi ', 'Lian ', 'Duo ', 'Nu ', 'Nu ', 'Ding ', 'Nai ', 'Qian ', 'Jian ', 'Ta ', 'Jiu ', 'Nan ', 'Cha ', 'Hao ', 'Xian ', 'Fan ', 'Ji ', 'Shuo ', 'Ru ', 'Fei ', 'Wang ', 'Hong ', 'Zhuang ', 'Fu ', 'Ma ', 'Dan ', 'Ren ', 'Fu ', 'Jing ', 'Yan ', 'Xie ', 'Wen ', 'Zhong ', 'Pa ', 'Du ', 'Ji ', 'Keng ', 'Zhong ', 'Yao ', 'Jin ', 'Yun ', 'Miao ', 'Pei ', 'Shi ', 'Yue ', 'Zhuang ', 'Niu ', 'Yan ', 'Na ', 'Xin ', 'Fen ', 'Bi ', 'Yu ', 'Tuo ', 'Feng ', 'Yuan ', 'Fang ', 'Wu ', 'Yu ', 'Gui ', 'Du ', 'Ba ', 'Ni ', 'Zhou ', 'Zhuo ', 'Zhao ', 'Da ', 'Nai ', 'Yuan ', 'Tou ', 'Xuan ', 'Zhi ', 'E ', 'Mei ', 'Mo ', 'Qi ', 'Bi ', 'Shen ', 'Qie ', 'E ', 'He ', 'Xu ', 'Fa ', 'Zheng ', 'Min ', 'Ban ', 'Mu ', 'Fu ', 'Ling ', 'Zi ', 'Zi ', 'Shi ', 'Ran ', 'Shan ', 'Yang ', 'Man ', 'Jie ', 'Gu ', 'Si ', 'Xing ', 'Wei ', 'Zi ', 'Ju ', 'Shan ', 'Pin ', 'Ren ', 'Yao ', 'Tong ', 'Jiang ', 'Shu ', 'Ji ', 'Gai ', 'Shang ', 'Kuo ', 'Juan ', 'Jiao ', 'Gou ', 'Mu ', 'Jian ', 'Jian ', 'Yi ', 'Nian ', 'Zhi ', 'Ji ', 'Ji ', 'Xian ', 'Heng ', 'Guang ', 'Jun ', 'Kua ', 'Yan ', 'Ming ', 'Lie ', 'Pei ', 'Yan ', 'You ', 'Yan ', 'Cha ', 'Shen ', 'Yin ', 'Chi ', 'Gui ', 'Quan ', 'Zi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05a.php
new file mode 100644
index 000000000..565202141
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05a.php
@@ -0,0 +1 @@
+<?php return ['Song ', 'Wei ', 'Hong ', 'Wa ', 'Lou ', 'Ya ', 'Rao ', 'Jiao ', 'Luan ', 'Ping ', 'Xian ', 'Shao ', 'Li ', 'Cheng ', 'Xiao ', 'Mang ', 'Fu ', 'Suo ', 'Wu ', 'Wei ', 'Ke ', 'Lai ', 'Chuo ', 'Ding ', 'Niang ', 'Xing ', 'Nan ', 'Yu ', 'Nuo ', 'Pei ', 'Nei ', 'Juan ', 'Shen ', 'Zhi ', 'Han ', 'Di ', 'Zhuang ', 'E ', 'Pin ', 'Tui ', 'Han ', 'Mian ', 'Wu ', 'Yan ', 'Wu ', 'Xi ', 'Yan ', 'Yu ', 'Si ', 'Yu ', 'Wa ', '[?] ', 'Xian ', 'Ju ', 'Qu ', 'Shui ', 'Qi ', 'Xian ', 'Zhui ', 'Dong ', 'Chang ', 'Lu ', 'Ai ', 'E ', 'E ', 'Lou ', 'Mian ', 'Cong ', 'Pou ', 'Ju ', 'Po ', 'Cai ', 'Ding ', 'Wan ', 'Biao ', 'Xiao ', 'Shu ', 'Qi ', 'Hui ', 'Fu ', 'E ', 'Wo ', 'Tan ', 'Fei ', 'Wei ', 'Jie ', 'Tian ', 'Ni ', 'Quan ', 'Jing ', 'Hun ', 'Jing ', 'Qian ', 'Dian ', 'Xing ', 'Hu ', 'Wa ', 'Lai ', 'Bi ', 'Yin ', 'Chou ', 'Chuo ', 'Fu ', 'Jing ', 'Lun ', 'Yan ', 'Lan ', 'Kun ', 'Yin ', 'Ya ', 'Ju ', 'Li ', 'Dian ', 'Xian ', 'Hwa ', 'Hua ', 'Ying ', 'Chan ', 'Shen ', 'Ting ', 'Dang ', 'Yao ', 'Wu ', 'Nan ', 'Ruo ', 'Jia ', 'Tou ', 'Xu ', 'Yu ', 'Wei ', 'Ti ', 'Rou ', 'Mei ', 'Dan ', 'Ruan ', 'Qin ', 'Hui ', 'Wu ', 'Qian ', 'Chun ', 'Mao ', 'Fu ', 'Jie ', 'Duan ', 'Xi ', 'Zhong ', 'Mei ', 'Huang ', 'Mian ', 'An ', 'Ying ', 'Xuan ', 'Jie ', 'Wei ', 'Mei ', 'Yuan ', 'Zhen ', 'Qiu ', 'Ti ', 'Xie ', 'Tuo ', 'Lian ', 'Mao ', 'Ran ', 'Si ', 'Pian ', 'Wei ', 'Wa ', 'Jiu ', 'Hu ', 'Ao ', '[?] ', 'Bou ', 'Xu ', 'Tou ', 'Gui ', 'Zou ', 'Yao ', 'Pi ', 'Xi ', 'Yuan ', 'Ying ', 'Rong ', 'Ru ', 'Chi ', 'Liu ', 'Mei ', 'Pan ', 'Ao ', 'Ma ', 'Gou ', 'Kui ', 'Qin ', 'Jia ', 'Sao ', 'Zhen ', 'Yuan ', 'Cha ', 'Yong ', 'Ming ', 'Ying ', 'Ji ', 'Su ', 'Niao ', 'Xian ', 'Tao ', 'Pang ', 'Lang ', 'Nao ', 'Bao ', 'Ai ', 'Pi ', 'Pin ', 'Yi ', 'Piao ', 'Yu ', 'Lei ', 'Xuan ', 'Man ', 'Yi ', 'Zhang ', 'Kang ', 'Yong ', 'Ni ', 'Li ', 'Di ', 'Gui ', 'Yan ', 'Jin ', 'Zhuan ', 'Chang ', 'Ce ', 'Han ', 'Nen ', 'Lao ', 'Mo ', 'Zhe ', 'Hu ', 'Hu ', 'Ao ', 'Nen ', 'Qiang ', 'Ma ', 'Pie ', 'Gu ', 'Wu ', 'Jiao ', 'Tuo ', 'Zhan ', 'Mao ', 'Xian ', 'Xian ', 'Mo ', 'Liao ', 'Lian ', 'Hua '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05b.php
new file mode 100644
index 000000000..6d59d163d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05b.php
@@ -0,0 +1 @@
+<?php return ['Gui ', 'Deng ', 'Zhi ', 'Xu ', 'Yi ', 'Hua ', 'Xi ', 'Hui ', 'Rao ', 'Xi ', 'Yan ', 'Chan ', 'Jiao ', 'Mei ', 'Fan ', 'Fan ', 'Xian ', 'Yi ', 'Wei ', 'Jiao ', 'Fu ', 'Shi ', 'Bi ', 'Shan ', 'Sui ', 'Qiang ', 'Lian ', 'Huan ', 'Xin ', 'Niao ', 'Dong ', 'Yi ', 'Can ', 'Ai ', 'Niang ', 'Neng ', 'Ma ', 'Tiao ', 'Chou ', 'Jin ', 'Ci ', 'Yu ', 'Pin ', 'Yong ', 'Xu ', 'Nai ', 'Yan ', 'Tai ', 'Ying ', 'Can ', 'Niao ', 'Wo ', 'Ying ', 'Mian ', 'Kaka ', 'Ma ', 'Shen ', 'Xing ', 'Ni ', 'Du ', 'Liu ', 'Yuan ', 'Lan ', 'Yan ', 'Shuang ', 'Ling ', 'Jiao ', 'Niang ', 'Lan ', 'Xian ', 'Ying ', 'Shuang ', 'Shuai ', 'Quan ', 'Mi ', 'Li ', 'Luan ', 'Yan ', 'Zhu ', 'Lan ', 'Zi ', 'Jie ', 'Jue ', 'Jue ', 'Kong ', 'Yun ', 'Zi ', 'Zi ', 'Cun ', 'Sun ', 'Fu ', 'Bei ', 'Zi ', 'Xiao ', 'Xin ', 'Meng ', 'Si ', 'Tai ', 'Bao ', 'Ji ', 'Gu ', 'Nu ', 'Xue ', '[?] ', 'Zhuan ', 'Hai ', 'Luan ', 'Sun ', 'Huai ', 'Mie ', 'Cong ', 'Qian ', 'Shu ', 'Chan ', 'Ya ', 'Zi ', 'Ni ', 'Fu ', 'Zi ', 'Li ', 'Xue ', 'Bo ', 'Ru ', 'Lai ', 'Nie ', 'Nie ', 'Ying ', 'Luan ', 'Mian ', 'Zhu ', 'Rong ', 'Ta ', 'Gui ', 'Zhai ', 'Qiong ', 'Yu ', 'Shou ', 'An ', 'Tu ', 'Song ', 'Wan ', 'Rou ', 'Yao ', 'Hong ', 'Yi ', 'Jing ', 'Zhun ', 'Mi ', 'Zhu ', 'Dang ', 'Hong ', 'Zong ', 'Guan ', 'Zhou ', 'Ding ', 'Wan ', 'Yi ', 'Bao ', 'Shi ', 'Shi ', 'Chong ', 'Shen ', 'Ke ', 'Xuan ', 'Shi ', 'You ', 'Huan ', 'Yi ', 'Tiao ', 'Shi ', 'Xian ', 'Gong ', 'Cheng ', 'Qun ', 'Gong ', 'Xiao ', 'Zai ', 'Zha ', 'Bao ', 'Hai ', 'Yan ', 'Xiao ', 'Jia ', 'Shen ', 'Chen ', 'Rong ', 'Huang ', 'Mi ', 'Kou ', 'Kuan ', 'Bin ', 'Su ', 'Cai ', 'Zan ', 'Ji ', 'Yuan ', 'Ji ', 'Yin ', 'Mi ', 'Kou ', 'Qing ', 'Que ', 'Zhen ', 'Jian ', 'Fu ', 'Ning ', 'Bing ', 'Huan ', 'Mei ', 'Qin ', 'Han ', 'Yu ', 'Shi ', 'Ning ', 'Qin ', 'Ning ', 'Zhi ', 'Yu ', 'Bao ', 'Kuan ', 'Ning ', 'Qin ', 'Mo ', 'Cha ', 'Ju ', 'Gua ', 'Qin ', 'Hu ', 'Wu ', 'Liao ', 'Shi ', 'Zhu ', 'Zhai ', 'Shen ', 'Wei ', 'Xie ', 'Kuan ', 'Hui ', 'Liao ', 'Jun ', 'Huan ', 'Yi ', 'Yi ', 'Bao ', 'Qin ', 'Chong ', 'Bao ', 'Feng ', 'Cun ', 'Dui ', 'Si ', 'Xun ', 'Dao ', 'Lu ', 'Dui ', 'Shou '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05c.php
new file mode 100644
index 000000000..f66996280
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05c.php
@@ -0,0 +1 @@
+<?php return ['Po ', 'Feng ', 'Zhuan ', 'Fu ', 'She ', 'Ke ', 'Jiang ', 'Jiang ', 'Zhuan ', 'Wei ', 'Zun ', 'Xun ', 'Shu ', 'Dui ', 'Dao ', 'Xiao ', 'Ji ', 'Shao ', 'Er ', 'Er ', 'Er ', 'Ga ', 'Jian ', 'Shu ', 'Chen ', 'Shang ', 'Shang ', 'Mo ', 'Ga ', 'Chang ', 'Liao ', 'Xian ', 'Xian ', '[?] ', 'Wang ', 'Wang ', 'You ', 'Liao ', 'Liao ', 'Yao ', 'Mang ', 'Wang ', 'Wang ', 'Wang ', 'Ga ', 'Yao ', 'Duo ', 'Kui ', 'Zhong ', 'Jiu ', 'Gan ', 'Gu ', 'Gan ', 'Tui ', 'Gan ', 'Gan ', 'Shi ', 'Yin ', 'Chi ', 'Kao ', 'Ni ', 'Jin ', 'Wei ', 'Niao ', 'Ju ', 'Pi ', 'Ceng ', 'Xi ', 'Bi ', 'Ju ', 'Jie ', 'Tian ', 'Qu ', 'Ti ', 'Jie ', 'Wu ', 'Diao ', 'Shi ', 'Shi ', 'Ping ', 'Ji ', 'Xie ', 'Chen ', 'Xi ', 'Ni ', 'Zhan ', 'Xi ', '[?] ', 'Man ', 'E ', 'Lou ', 'Ping ', 'Ti ', 'Fei ', 'Shu ', 'Xie ', 'Tu ', 'Lu ', 'Lu ', 'Xi ', 'Ceng ', 'Lu ', 'Ju ', 'Xie ', 'Ju ', 'Jue ', 'Liao ', 'Jue ', 'Shu ', 'Xi ', 'Che ', 'Tun ', 'Ni ', 'Shan ', '[?] ', 'Xian ', 'Li ', 'Xue ', 'Nata ', '[?] ', 'Long ', 'Yi ', 'Qi ', 'Ren ', 'Wu ', 'Han ', 'Shen ', 'Yu ', 'Chu ', 'Sui ', 'Qi ', '[?] ', 'Yue ', 'Ban ', 'Yao ', 'Ang ', 'Ya ', 'Wu ', 'Jie ', 'E ', 'Ji ', 'Qian ', 'Fen ', 'Yuan ', 'Qi ', 'Cen ', 'Qian ', 'Qi ', 'Cha ', 'Jie ', 'Qu ', 'Gang ', 'Xian ', 'Ao ', 'Lan ', 'Dao ', 'Ba ', 'Zuo ', 'Zuo ', 'Yang ', 'Ju ', 'Gang ', 'Ke ', 'Gou ', 'Xue ', 'Bei ', 'Li ', 'Tiao ', 'Ju ', 'Yan ', 'Fu ', 'Xiu ', 'Jia ', 'Ling ', 'Tuo ', 'Pei ', 'You ', 'Dai ', 'Kuang ', 'Yue ', 'Qu ', 'Hu ', 'Po ', 'Min ', 'An ', 'Tiao ', 'Ling ', 'Chi ', 'Yuri ', 'Dong ', 'Cem ', 'Kui ', 'Xiu ', 'Mao ', 'Tong ', 'Xue ', 'Yi ', 'Kura ', 'He ', 'Ke ', 'Luo ', 'E ', 'Fu ', 'Xun ', 'Die ', 'Lu ', 'An ', 'Er ', 'Gai ', 'Quan ', 'Tong ', 'Yi ', 'Mu ', 'Shi ', 'An ', 'Wei ', 'Hu ', 'Zhi ', 'Mi ', 'Li ', 'Ji ', 'Tong ', 'Wei ', 'You ', 'Sang ', 'Xia ', 'Li ', 'Yao ', 'Jiao ', 'Zheng ', 'Luan ', 'Jiao ', 'E ', 'E ', 'Yu ', 'Ye ', 'Bu ', 'Qiao ', 'Qun ', 'Feng ', 'Feng ', 'Nao ', 'Li ', 'You ', 'Xian ', 'Hong ', 'Dao ', 'Shen ', 'Cheng ', 'Tu ', 'Geng ', 'Jun ', 'Hao ', 'Xia ', 'Yin ', 'Yu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05d.php
new file mode 100644
index 000000000..a0b7062a8
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05d.php
@@ -0,0 +1 @@
+<?php return ['Lang ', 'Kan ', 'Lao ', 'Lai ', 'Xian ', 'Que ', 'Kong ', 'Chong ', 'Chong ', 'Ta ', 'Lin ', 'Hua ', 'Ju ', 'Lai ', 'Qi ', 'Min ', 'Kun ', 'Kun ', 'Zu ', 'Gu ', 'Cui ', 'Ya ', 'Ya ', 'Gang ', 'Lun ', 'Lun ', 'Leng ', 'Jue ', 'Duo ', 'Zheng ', 'Guo ', 'Yin ', 'Dong ', 'Han ', 'Zheng ', 'Wei ', 'Yao ', 'Pi ', 'Yan ', 'Song ', 'Jie ', 'Beng ', 'Zu ', 'Jue ', 'Dong ', 'Zhan ', 'Gu ', 'Yin ', '[?] ', 'Ze ', 'Huang ', 'Yu ', 'Wei ', 'Yang ', 'Feng ', 'Qiu ', 'Dun ', 'Ti ', 'Yi ', 'Zhi ', 'Shi ', 'Zai ', 'Yao ', 'E ', 'Zhu ', 'Kan ', 'Lu ', 'Yan ', 'Mei ', 'Gan ', 'Ji ', 'Ji ', 'Huan ', 'Ting ', 'Sheng ', 'Mei ', 'Qian ', 'Wu ', 'Yu ', 'Zong ', 'Lan ', 'Jue ', 'Yan ', 'Yan ', 'Wei ', 'Zong ', 'Cha ', 'Sui ', 'Rong ', 'Yamashina ', 'Qin ', 'Yu ', 'Kewashii ', 'Lou ', 'Tu ', 'Dui ', 'Xi ', 'Weng ', 'Cang ', 'Dang ', 'Hong ', 'Jie ', 'Ai ', 'Liu ', 'Wu ', 'Song ', 'Qiao ', 'Zi ', 'Wei ', 'Beng ', 'Dian ', 'Cuo ', 'Qian ', 'Yong ', 'Nie ', 'Cuo ', 'Ji ', '[?] ', 'Tao ', 'Song ', 'Zong ', 'Jiang ', 'Liao ', 'Kang ', 'Chan ', 'Die ', 'Cen ', 'Ding ', 'Tu ', 'Lou ', 'Zhang ', 'Zhan ', 'Zhan ', 'Ao ', 'Cao ', 'Qu ', 'Qiang ', 'Zui ', 'Zui ', 'Dao ', 'Dao ', 'Xi ', 'Yu ', 'Bo ', 'Long ', 'Xiang ', 'Ceng ', 'Bo ', 'Qin ', 'Jiao ', 'Yan ', 'Lao ', 'Zhan ', 'Lin ', 'Liao ', 'Liao ', 'Jin ', 'Deng ', 'Duo ', 'Zun ', 'Jiao ', 'Gui ', 'Yao ', 'Qiao ', 'Yao ', 'Jue ', 'Zhan ', 'Yi ', 'Xue ', 'Nao ', 'Ye ', 'Ye ', 'Yi ', 'E ', 'Xian ', 'Ji ', 'Xie ', 'Ke ', 'Xi ', 'Di ', 'Ao ', 'Zui ', '[?] ', 'Ni ', 'Rong ', 'Dao ', 'Ling ', 'Za ', 'Yu ', 'Yue ', 'Yin ', '[?] ', 'Jie ', 'Li ', 'Sui ', 'Long ', 'Long ', 'Dian ', 'Ying ', 'Xi ', 'Ju ', 'Chan ', 'Ying ', 'Kui ', 'Yan ', 'Wei ', 'Nao ', 'Quan ', 'Chao ', 'Cuan ', 'Luan ', 'Dian ', 'Dian ', '[?] ', 'Yan ', 'Yan ', 'Yan ', 'Nao ', 'Yan ', 'Chuan ', 'Gui ', 'Chuan ', 'Zhou ', 'Huang ', 'Jing ', 'Xun ', 'Chao ', 'Chao ', 'Lie ', 'Gong ', 'Zuo ', 'Qiao ', 'Ju ', 'Gong ', 'Kek ', 'Wu ', 'Pwu ', 'Pwu ', 'Chai ', 'Qiu ', 'Qiu ', 'Ji ', 'Yi ', 'Si ', 'Ba ', 'Zhi ', 'Zhao ', 'Xiang ', 'Yi ', 'Jin ', 'Xun ', 'Juan ', 'Phas ', 'Xun ', 'Jin ', 'Fu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05e.php
new file mode 100644
index 000000000..2ebbc3406
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05e.php
@@ -0,0 +1 @@
+<?php return ['Za ', 'Bi ', 'Shi ', 'Bu ', 'Ding ', 'Shuai ', 'Fan ', 'Nie ', 'Shi ', 'Fen ', 'Pa ', 'Zhi ', 'Xi ', 'Hu ', 'Dan ', 'Wei ', 'Zhang ', 'Tang ', 'Dai ', 'Ma ', 'Pei ', 'Pa ', 'Tie ', 'Fu ', 'Lian ', 'Zhi ', 'Zhou ', 'Bo ', 'Zhi ', 'Di ', 'Mo ', 'Yi ', 'Yi ', 'Ping ', 'Qia ', 'Juan ', 'Ru ', 'Shuai ', 'Dai ', 'Zheng ', 'Shui ', 'Qiao ', 'Zhen ', 'Shi ', 'Qun ', 'Xi ', 'Bang ', 'Dai ', 'Gui ', 'Chou ', 'Ping ', 'Zhang ', 'Sha ', 'Wan ', 'Dai ', 'Wei ', 'Chang ', 'Sha ', 'Qi ', 'Ze ', 'Guo ', 'Mao ', 'Du ', 'Hou ', 'Zheng ', 'Xu ', 'Mi ', 'Wei ', 'Wo ', 'Fu ', 'Yi ', 'Bang ', 'Ping ', 'Tazuna ', 'Gong ', 'Pan ', 'Huang ', 'Dao ', 'Mi ', 'Jia ', 'Teng ', 'Hui ', 'Zhong ', 'Shan ', 'Man ', 'Mu ', 'Biao ', 'Guo ', 'Ze ', 'Mu ', 'Bang ', 'Zhang ', 'Jiong ', 'Chan ', 'Fu ', 'Zhi ', 'Hu ', 'Fan ', 'Chuang ', 'Bi ', 'Hei ', '[?] ', 'Mi ', 'Qiao ', 'Chan ', 'Fen ', 'Meng ', 'Bang ', 'Chou ', 'Mie ', 'Chu ', 'Jie ', 'Xian ', 'Lan ', 'Gan ', 'Ping ', 'Nian ', 'Qian ', 'Bing ', 'Bing ', 'Xing ', 'Gan ', 'Yao ', 'Huan ', 'You ', 'You ', 'Ji ', 'Yan ', 'Pi ', 'Ting ', 'Ze ', 'Guang ', 'Zhuang ', 'Mo ', 'Qing ', 'Bi ', 'Qin ', 'Dun ', 'Chuang ', 'Gui ', 'Ya ', 'Bai ', 'Jie ', 'Xu ', 'Lu ', 'Wu ', '[?] ', 'Ku ', 'Ying ', 'Di ', 'Pao ', 'Dian ', 'Ya ', 'Miao ', 'Geng ', 'Ci ', 'Fu ', 'Tong ', 'Pang ', 'Fei ', 'Xiang ', 'Yi ', 'Zhi ', 'Tiao ', 'Zhi ', 'Xiu ', 'Du ', 'Zuo ', 'Xiao ', 'Tu ', 'Gui ', 'Ku ', 'Pang ', 'Ting ', 'You ', 'Bu ', 'Ding ', 'Cheng ', 'Lai ', 'Bei ', 'Ji ', 'An ', 'Shu ', 'Kang ', 'Yong ', 'Tuo ', 'Song ', 'Shu ', 'Qing ', 'Yu ', 'Yu ', 'Miao ', 'Sou ', 'Ce ', 'Xiang ', 'Fei ', 'Jiu ', 'He ', 'Hui ', 'Liu ', 'Sha ', 'Lian ', 'Lang ', 'Sou ', 'Jian ', 'Pou ', 'Qing ', 'Jiu ', 'Jiu ', 'Qin ', 'Ao ', 'Kuo ', 'Lou ', 'Yin ', 'Liao ', 'Dai ', 'Lu ', 'Yi ', 'Chu ', 'Chan ', 'Tu ', 'Si ', 'Xin ', 'Miao ', 'Chang ', 'Wu ', 'Fei ', 'Guang ', 'Koc ', 'Kuai ', 'Bi ', 'Qiang ', 'Xie ', 'Lin ', 'Lin ', 'Liao ', 'Lu ', '[?] ', 'Ying ', 'Xian ', 'Ting ', 'Yong ', 'Li ', 'Ting ', 'Yin ', 'Xun ', 'Yan ', 'Ting ', 'Di ', 'Po ', 'Jian ', 'Hui ', 'Nai ', 'Hui ', 'Gong ', 'Nian '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x05f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x05f.php
new file mode 100644
index 000000000..aee88eac1
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x05f.php
@@ -0,0 +1 @@
+<?php return ['Kai ', 'Bian ', 'Yi ', 'Qi ', 'Nong ', 'Fen ', 'Ju ', 'Yan ', 'Yi ', 'Zang ', 'Bi ', 'Yi ', 'Yi ', 'Er ', 'San ', 'Shi ', 'Er ', 'Shi ', 'Shi ', 'Gong ', 'Diao ', 'Yin ', 'Hu ', 'Fu ', 'Hong ', 'Wu ', 'Tui ', 'Chi ', 'Jiang ', 'Ba ', 'Shen ', 'Di ', 'Zhang ', 'Jue ', 'Tao ', 'Fu ', 'Di ', 'Mi ', 'Xian ', 'Hu ', 'Chao ', 'Nu ', 'Jing ', 'Zhen ', 'Yi ', 'Mi ', 'Quan ', 'Wan ', 'Shao ', 'Ruo ', 'Xuan ', 'Jing ', 'Dun ', 'Zhang ', 'Jiang ', 'Qiang ', 'Peng ', 'Dan ', 'Qiang ', 'Bi ', 'Bi ', 'She ', 'Dan ', 'Jian ', 'Gou ', 'Sei ', 'Fa ', 'Bi ', 'Kou ', 'Nagi ', 'Bie ', 'Xiao ', 'Dan ', 'Kuo ', 'Qiang ', 'Hong ', 'Mi ', 'Kuo ', 'Wan ', 'Jue ', 'Ji ', 'Ji ', 'Gui ', 'Dang ', 'Lu ', 'Lu ', 'Tuan ', 'Hui ', 'Zhi ', 'Hui ', 'Hui ', 'Yi ', 'Yi ', 'Yi ', 'Yi ', 'Huo ', 'Huo ', 'Shan ', 'Xing ', 'Wen ', 'Tong ', 'Yan ', 'Yan ', 'Yu ', 'Chi ', 'Cai ', 'Biao ', 'Diao ', 'Bin ', 'Peng ', 'Yong ', 'Piao ', 'Zhang ', 'Ying ', 'Chi ', 'Chi ', 'Zhuo ', 'Tuo ', 'Ji ', 'Pang ', 'Zhong ', 'Yi ', 'Wang ', 'Che ', 'Bi ', 'Chi ', 'Ling ', 'Fu ', 'Wang ', 'Zheng ', 'Cu ', 'Wang ', 'Jing ', 'Dai ', 'Xi ', 'Xun ', 'Hen ', 'Yang ', 'Huai ', 'Lu ', 'Hou ', 'Wa ', 'Cheng ', 'Zhi ', 'Xu ', 'Jing ', 'Tu ', 'Cong ', '[?] ', 'Lai ', 'Cong ', 'De ', 'Pai ', 'Xi ', '[?] ', 'Qi ', 'Chang ', 'Zhi ', 'Cong ', 'Zhou ', 'Lai ', 'Yu ', 'Xie ', 'Jie ', 'Jian ', 'Chi ', 'Jia ', 'Bian ', 'Huang ', 'Fu ', 'Xun ', 'Wei ', 'Pang ', 'Yao ', 'Wei ', 'Xi ', 'Zheng ', 'Piao ', 'Chi ', 'De ', 'Zheng ', 'Zheng ', 'Bie ', 'De ', 'Chong ', 'Che ', 'Jiao ', 'Wei ', 'Jiao ', 'Hui ', 'Mei ', 'Long ', 'Xiang ', 'Bao ', 'Qu ', 'Xin ', 'Shu ', 'Bi ', 'Yi ', 'Le ', 'Ren ', 'Dao ', 'Ding ', 'Gai ', 'Ji ', 'Ren ', 'Ren ', 'Chan ', 'Tan ', 'Te ', 'Te ', 'Gan ', 'Qi ', 'Shi ', 'Cun ', 'Zhi ', 'Wang ', 'Mang ', 'Xi ', 'Fan ', 'Ying ', 'Tian ', 'Min ', 'Min ', 'Zhong ', 'Chong ', 'Wu ', 'Ji ', 'Wu ', 'Xi ', 'Ye ', 'You ', 'Wan ', 'Cong ', 'Zhong ', 'Kuai ', 'Yu ', 'Bian ', 'Zhi ', 'Qi ', 'Cui ', 'Chen ', 'Tai ', 'Tun ', 'Qian ', 'Nian ', 'Hun ', 'Xiong ', 'Niu ', 'Wang ', 'Xian ', 'Xin ', 'Kang ', 'Hu ', 'Kai ', 'Fen '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x060.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x060.php
new file mode 100644
index 000000000..91122b6a3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x060.php
@@ -0,0 +1 @@
+<?php return ['Huai ', 'Tai ', 'Song ', 'Wu ', 'Ou ', 'Chang ', 'Chuang ', 'Ju ', 'Yi ', 'Bao ', 'Chao ', 'Min ', 'Pei ', 'Zuo ', 'Zen ', 'Yang ', 'Kou ', 'Ban ', 'Nu ', 'Nao ', 'Zheng ', 'Pa ', 'Bu ', 'Tie ', 'Gu ', 'Hu ', 'Ju ', 'Da ', 'Lian ', 'Si ', 'Chou ', 'Di ', 'Dai ', 'Yi ', 'Tu ', 'You ', 'Fu ', 'Ji ', 'Peng ', 'Xing ', 'Yuan ', 'Ni ', 'Guai ', 'Fu ', 'Xi ', 'Bi ', 'You ', 'Qie ', 'Xuan ', 'Cong ', 'Bing ', 'Huang ', 'Xu ', 'Chu ', 'Pi ', 'Xi ', 'Xi ', 'Tan ', 'Koraeru ', 'Zong ', 'Dui ', '[?] ', 'Ki ', 'Yi ', 'Chi ', 'Ren ', 'Xun ', 'Shi ', 'Xi ', 'Lao ', 'Heng ', 'Kuang ', 'Mu ', 'Zhi ', 'Xie ', 'Lian ', 'Tiao ', 'Huang ', 'Die ', 'Hao ', 'Kong ', 'Gui ', 'Heng ', 'Xi ', 'Xiao ', 'Shu ', 'S ', 'Kua ', 'Qiu ', 'Yang ', 'Hui ', 'Hui ', 'Chi ', 'Jia ', 'Yi ', 'Xiong ', 'Guai ', 'Lin ', 'Hui ', 'Zi ', 'Xu ', 'Chi ', 'Xiang ', 'Nu ', 'Hen ', 'En ', 'Ke ', 'Tong ', 'Tian ', 'Gong ', 'Quan ', 'Xi ', 'Qia ', 'Yue ', 'Peng ', 'Ken ', 'De ', 'Hui ', 'E ', 'Kyuu ', 'Tong ', 'Yan ', 'Kai ', 'Ce ', 'Nao ', 'Yun ', 'Mang ', 'Yong ', 'Yong ', 'Yuan ', 'Pi ', 'Kun ', 'Qiao ', 'Yue ', 'Yu ', 'Yu ', 'Jie ', 'Xi ', 'Zhe ', 'Lin ', 'Ti ', 'Han ', 'Hao ', 'Qie ', 'Ti ', 'Bu ', 'Yi ', 'Qian ', 'Hui ', 'Xi ', 'Bei ', 'Man ', 'Yi ', 'Heng ', 'Song ', 'Quan ', 'Cheng ', 'Hui ', 'Wu ', 'Wu ', 'You ', 'Li ', 'Liang ', 'Huan ', 'Cong ', 'Yi ', 'Yue ', 'Li ', 'Nin ', 'Nao ', 'E ', 'Que ', 'Xuan ', 'Qian ', 'Wu ', 'Min ', 'Cong ', 'Fei ', 'Bei ', 'Duo ', 'Cui ', 'Chang ', 'Men ', 'Li ', 'Ji ', 'Guan ', 'Guan ', 'Xing ', 'Dao ', 'Qi ', 'Kong ', 'Tian ', 'Lun ', 'Xi ', 'Kan ', 'Kun ', 'Ni ', 'Qing ', 'Chou ', 'Dun ', 'Guo ', 'Chan ', 'Liang ', 'Wan ', 'Yuan ', 'Jin ', 'Ji ', 'Lin ', 'Yu ', 'Huo ', 'He ', 'Quan ', 'Tan ', 'Ti ', 'Ti ', 'Nie ', 'Wang ', 'Chuo ', 'Bu ', 'Hun ', 'Xi ', 'Tang ', 'Xin ', 'Wei ', 'Hui ', 'E ', 'Rui ', 'Zong ', 'Jian ', 'Yong ', 'Dian ', 'Ju ', 'Can ', 'Cheng ', 'De ', 'Bei ', 'Qie ', 'Can ', 'Dan ', 'Guan ', 'Duo ', 'Nao ', 'Yun ', 'Xiang ', 'Zhui ', 'Die ', 'Huang ', 'Chun ', 'Qiong ', 'Re ', 'Xing ', 'Ce ', 'Bian ', 'Hun ', 'Zong ', 'Ti '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x061.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x061.php
new file mode 100644
index 000000000..b2d25d81a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x061.php
@@ -0,0 +1 @@
+<?php return ['Qiao ', 'Chou ', 'Bei ', 'Xuan ', 'Wei ', 'Ge ', 'Qian ', 'Wei ', 'Yu ', 'Yu ', 'Bi ', 'Xuan ', 'Huan ', 'Min ', 'Bi ', 'Yi ', 'Mian ', 'Yong ', 'Kai ', 'Dang ', 'Yin ', 'E ', 'Chen ', 'Mou ', 'Ke ', 'Ke ', 'Yu ', 'Ai ', 'Qie ', 'Yan ', 'Nuo ', 'Gan ', 'Yun ', 'Zong ', 'Sai ', 'Leng ', 'Fen ', '[?] ', 'Kui ', 'Kui ', 'Que ', 'Gong ', 'Yun ', 'Su ', 'Su ', 'Qi ', 'Yao ', 'Song ', 'Huang ', 'Ji ', 'Gu ', 'Ju ', 'Chuang ', 'Ni ', 'Xie ', 'Kai ', 'Zheng ', 'Yong ', 'Cao ', 'Sun ', 'Shen ', 'Bo ', 'Kai ', 'Yuan ', 'Xie ', 'Hun ', 'Yong ', 'Yang ', 'Li ', 'Sao ', 'Tao ', 'Yin ', 'Ci ', 'Xu ', 'Qian ', 'Tai ', 'Huang ', 'Yun ', 'Shen ', 'Ming ', '[?] ', 'She ', 'Cong ', 'Piao ', 'Mo ', 'Mu ', 'Guo ', 'Chi ', 'Can ', 'Can ', 'Can ', 'Cui ', 'Min ', 'Te ', 'Zhang ', 'Tong ', 'Ao ', 'Shuang ', 'Man ', 'Guan ', 'Que ', 'Zao ', 'Jiu ', 'Hui ', 'Kai ', 'Lian ', 'Ou ', 'Song ', 'Jin ', 'Yin ', 'Lu ', 'Shang ', 'Wei ', 'Tuan ', 'Man ', 'Qian ', 'She ', 'Yong ', 'Qing ', 'Kang ', 'Di ', 'Zhi ', 'Lou ', 'Juan ', 'Qi ', 'Qi ', 'Yu ', 'Ping ', 'Liao ', 'Cong ', 'You ', 'Chong ', 'Zhi ', 'Tong ', 'Cheng ', 'Qi ', 'Qu ', 'Peng ', 'Bei ', 'Bie ', 'Chun ', 'Jiao ', 'Zeng ', 'Chi ', 'Lian ', 'Ping ', 'Kui ', 'Hui ', 'Qiao ', 'Cheng ', 'Yin ', 'Yin ', 'Xi ', 'Xi ', 'Dan ', 'Tan ', 'Duo ', 'Dui ', 'Dui ', 'Su ', 'Jue ', 'Ce ', 'Xiao ', 'Fan ', 'Fen ', 'Lao ', 'Lao ', 'Chong ', 'Han ', 'Qi ', 'Xian ', 'Min ', 'Jing ', 'Liao ', 'Wu ', 'Can ', 'Jue ', 'Cu ', 'Xian ', 'Tan ', 'Sheng ', 'Pi ', 'Yi ', 'Chu ', 'Xian ', 'Nao ', 'Dan ', 'Tan ', 'Jing ', 'Song ', 'Han ', 'Jiao ', 'Wai ', 'Huan ', 'Dong ', 'Qin ', 'Qin ', 'Qu ', 'Cao ', 'Ken ', 'Xie ', 'Ying ', 'Ao ', 'Mao ', 'Yi ', 'Lin ', 'Se ', 'Jun ', 'Huai ', 'Men ', 'Lan ', 'Ai ', 'Lin ', 'Yan ', 'Gua ', 'Xia ', 'Chi ', 'Yu ', 'Yin ', 'Dai ', 'Meng ', 'Ai ', 'Meng ', 'Dui ', 'Qi ', 'Mo ', 'Lan ', 'Men ', 'Chou ', 'Zhi ', 'Nuo ', 'Nuo ', 'Yan ', 'Yang ', 'Bo ', 'Zhi ', 'Kuang ', 'Kuang ', 'You ', 'Fu ', 'Liu ', 'Mie ', 'Cheng ', '[?] ', 'Chan ', 'Meng ', 'Lan ', 'Huai ', 'Xuan ', 'Rang ', 'Chan ', 'Ji ', 'Ju ', 'Huan ', 'She ', 'Yi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x062.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x062.php
new file mode 100644
index 000000000..b8808e7e6
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x062.php
@@ -0,0 +1 @@
+<?php return ['Lian ', 'Nan ', 'Mi ', 'Tang ', 'Jue ', 'Gang ', 'Gang ', 'Gang ', 'Ge ', 'Yue ', 'Wu ', 'Jian ', 'Xu ', 'Shu ', 'Rong ', 'Xi ', 'Cheng ', 'Wo ', 'Jie ', 'Ge ', 'Jian ', 'Qiang ', 'Huo ', 'Qiang ', 'Zhan ', 'Dong ', 'Qi ', 'Jia ', 'Die ', 'Zei ', 'Jia ', 'Ji ', 'Shi ', 'Kan ', 'Ji ', 'Kui ', 'Gai ', 'Deng ', 'Zhan ', 'Chuang ', 'Ge ', 'Jian ', 'Jie ', 'Yu ', 'Jian ', 'Yan ', 'Lu ', 'Xi ', 'Zhan ', 'Xi ', 'Xi ', 'Chuo ', 'Dai ', 'Qu ', 'Hu ', 'Hu ', 'Hu ', 'E ', 'Shi ', 'Li ', 'Mao ', 'Hu ', 'Li ', 'Fang ', 'Suo ', 'Bian ', 'Dian ', 'Jiong ', 'Shang ', 'Yi ', 'Yi ', 'Shan ', 'Hu ', 'Fei ', 'Yan ', 'Shou ', 'T ', 'Cai ', 'Zha ', 'Qiu ', 'Le ', 'Bu ', 'Ba ', 'Da ', 'Reng ', 'Fu ', 'Hameru ', 'Zai ', 'Tuo ', 'Zhang ', 'Diao ', 'Kang ', 'Yu ', 'Ku ', 'Han ', 'Shen ', 'Cha ', 'Yi ', 'Gu ', 'Kou ', 'Wu ', 'Tuo ', 'Qian ', 'Zhi ', 'Ren ', 'Kuo ', 'Men ', 'Sao ', 'Yang ', 'Niu ', 'Ban ', 'Che ', 'Rao ', 'Xi ', 'Qian ', 'Ban ', 'Jia ', 'Yu ', 'Fu ', 'Ao ', 'Xi ', 'Pi ', 'Zhi ', 'Zi ', 'E ', 'Dun ', 'Zhao ', 'Cheng ', 'Ji ', 'Yan ', 'Kuang ', 'Bian ', 'Chao ', 'Ju ', 'Wen ', 'Hu ', 'Yue ', 'Jue ', 'Ba ', 'Qin ', 'Zhen ', 'Zheng ', 'Yun ', 'Wan ', 'Nu ', 'Yi ', 'Shu ', 'Zhua ', 'Pou ', 'Tou ', 'Dou ', 'Kang ', 'Zhe ', 'Pou ', 'Fu ', 'Pao ', 'Ba ', 'Ao ', 'Ze ', 'Tuan ', 'Kou ', 'Lun ', 'Qiang ', '[?] ', 'Hu ', 'Bao ', 'Bing ', 'Zhi ', 'Peng ', 'Tan ', 'Pu ', 'Pi ', 'Tai ', 'Yao ', 'Zhen ', 'Zha ', 'Yang ', 'Bao ', 'He ', 'Ni ', 'Yi ', 'Di ', 'Chi ', 'Pi ', 'Za ', 'Mo ', 'Mo ', 'Shen ', 'Ya ', 'Chou ', 'Qu ', 'Min ', 'Chu ', 'Jia ', 'Fu ', 'Zhan ', 'Zhu ', 'Dan ', 'Chai ', 'Mu ', 'Nian ', 'La ', 'Fu ', 'Pao ', 'Ban ', 'Pai ', 'Ling ', 'Na ', 'Guai ', 'Qian ', 'Ju ', 'Tuo ', 'Ba ', 'Tuo ', 'Tuo ', 'Ao ', 'Ju ', 'Zhuo ', 'Pan ', 'Zhao ', 'Bai ', 'Bai ', 'Di ', 'Ni ', 'Ju ', 'Kuo ', 'Long ', 'Jian ', '[?] ', 'Yong ', 'Lan ', 'Ning ', 'Bo ', 'Ze ', 'Qian ', 'Hen ', 'Gua ', 'Shi ', 'Jie ', 'Zheng ', 'Nin ', 'Gong ', 'Gong ', 'Quan ', 'Shuan ', 'Cun ', 'Zan ', 'Kao ', 'Chi ', 'Xie ', 'Ce ', 'Hui ', 'Pin ', 'Zhuai ', 'Shi ', 'Na '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x063.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x063.php
new file mode 100644
index 000000000..5702c45cc
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x063.php
@@ -0,0 +1 @@
+<?php return ['Bo ', 'Chi ', 'Gua ', 'Zhi ', 'Kuo ', 'Duo ', 'Duo ', 'Zhi ', 'Qie ', 'An ', 'Nong ', 'Zhen ', 'Ge ', 'Jiao ', 'Ku ', 'Dong ', 'Ru ', 'Tiao ', 'Lie ', 'Zha ', 'Lu ', 'Die ', 'Wa ', 'Jue ', 'Mushiru ', 'Ju ', 'Zhi ', 'Luan ', 'Ya ', 'Zhua ', 'Ta ', 'Xie ', 'Nao ', 'Dang ', 'Jiao ', 'Zheng ', 'Ji ', 'Hui ', 'Xun ', 'Ku ', 'Ai ', 'Tuo ', 'Nuo ', 'Cuo ', 'Bo ', 'Geng ', 'Ti ', 'Zhen ', 'Cheng ', 'Suo ', 'Suo ', 'Keng ', 'Mei ', 'Long ', 'Ju ', 'Peng ', 'Jian ', 'Yi ', 'Ting ', 'Shan ', 'Nuo ', 'Wan ', 'Xie ', 'Cha ', 'Feng ', 'Jiao ', 'Wu ', 'Jun ', 'Jiu ', 'Tong ', 'Kun ', 'Huo ', 'Tu ', 'Zhuo ', 'Pou ', 'Le ', 'Ba ', 'Han ', 'Shao ', 'Nie ', 'Juan ', 'Ze ', 'Song ', 'Ye ', 'Jue ', 'Bu ', 'Huan ', 'Bu ', 'Zun ', 'Yi ', 'Zhai ', 'Lu ', 'Sou ', 'Tuo ', 'Lao ', 'Sun ', 'Bang ', 'Jian ', 'Huan ', 'Dao ', '[?] ', 'Wan ', 'Qin ', 'Peng ', 'She ', 'Lie ', 'Min ', 'Men ', 'Fu ', 'Bai ', 'Ju ', 'Dao ', 'Wo ', 'Ai ', 'Juan ', 'Yue ', 'Zong ', 'Chen ', 'Chui ', 'Jie ', 'Tu ', 'Ben ', 'Na ', 'Nian ', 'Nuo ', 'Zu ', 'Wo ', 'Xi ', 'Xian ', 'Cheng ', 'Dian ', 'Sao ', 'Lun ', 'Qing ', 'Gang ', 'Duo ', 'Shou ', 'Diao ', 'Pou ', 'Di ', 'Zhang ', 'Gun ', 'Ji ', 'Tao ', 'Qia ', 'Qi ', 'Pai ', 'Shu ', 'Qian ', 'Ling ', 'Yi ', 'Ya ', 'Jue ', 'Zheng ', 'Liang ', 'Gua ', 'Yi ', 'Huo ', 'Shan ', 'Zheng ', 'Lue ', 'Cai ', 'Tan ', 'Che ', 'Bing ', 'Jie ', 'Ti ', 'Kong ', 'Tui ', 'Yan ', 'Cuo ', 'Zou ', 'Ju ', 'Tian ', 'Qian ', 'Ken ', 'Bai ', 'Shou ', 'Jie ', 'Lu ', 'Guo ', 'Haba ', '[?] ', 'Zhi ', 'Dan ', 'Mang ', 'Xian ', 'Sao ', 'Guan ', 'Peng ', 'Yuan ', 'Nuo ', 'Jian ', 'Zhen ', 'Jiu ', 'Jian ', 'Yu ', 'Yan ', 'Kui ', 'Nan ', 'Hong ', 'Rou ', 'Pi ', 'Wei ', 'Sai ', 'Zou ', 'Xuan ', 'Miao ', 'Ti ', 'Nie ', 'Cha ', 'Shi ', 'Zong ', 'Zhen ', 'Yi ', 'Shun ', 'Heng ', 'Bian ', 'Yang ', 'Huan ', 'Yan ', 'Zuan ', 'An ', 'Xu ', 'Ya ', 'Wo ', 'Ke ', 'Chuai ', 'Ji ', 'Ti ', 'La ', 'La ', 'Cheng ', 'Kai ', 'Jiu ', 'Jiu ', 'Tu ', 'Jie ', 'Hui ', 'Geng ', 'Chong ', 'Shuo ', 'She ', 'Xie ', 'Yuan ', 'Qian ', 'Ye ', 'Cha ', 'Zha ', 'Bei ', 'Yao ', '[?] ', '[?] ', 'Lan ', 'Wen ', 'Qin '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x064.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x064.php
new file mode 100644
index 000000000..ceaefdc88
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x064.php
@@ -0,0 +1 @@
+<?php return ['Chan ', 'Ge ', 'Lou ', 'Zong ', 'Geng ', 'Jiao ', 'Gou ', 'Qin ', 'Yong ', 'Que ', 'Chou ', 'Chi ', 'Zhan ', 'Sun ', 'Sun ', 'Bo ', 'Chu ', 'Rong ', 'Beng ', 'Cuo ', 'Sao ', 'Ke ', 'Yao ', 'Dao ', 'Zhi ', 'Nu ', 'Xie ', 'Jian ', 'Sou ', 'Qiu ', 'Gao ', 'Xian ', 'Shuo ', 'Sang ', 'Jin ', 'Mie ', 'E ', 'Chui ', 'Nuo ', 'Shan ', 'Ta ', 'Jie ', 'Tang ', 'Pan ', 'Ban ', 'Da ', 'Li ', 'Tao ', 'Hu ', 'Zhi ', 'Wa ', 'Xia ', 'Qian ', 'Wen ', 'Qiang ', 'Tian ', 'Zhen ', 'E ', 'Xi ', 'Nuo ', 'Quan ', 'Cha ', 'Zha ', 'Ge ', 'Wu ', 'En ', 'She ', 'Kang ', 'She ', 'Shu ', 'Bai ', 'Yao ', 'Bin ', 'Sou ', 'Tan ', 'Sa ', 'Chan ', 'Suo ', 'Liao ', 'Chong ', 'Chuang ', 'Guo ', 'Bing ', 'Feng ', 'Shuai ', 'Di ', 'Qi ', 'Sou ', 'Zhai ', 'Lian ', 'Tang ', 'Chi ', 'Guan ', 'Lu ', 'Luo ', 'Lou ', 'Zong ', 'Gai ', 'Hu ', 'Zha ', 'Chuang ', 'Tang ', 'Hua ', 'Cui ', 'Nai ', 'Mo ', 'Jiang ', 'Gui ', 'Ying ', 'Zhi ', 'Ao ', 'Zhi ', 'Nie ', 'Man ', 'Shan ', 'Kou ', 'Shu ', 'Suo ', 'Tuan ', 'Jiao ', 'Mo ', 'Mo ', 'Zhe ', 'Xian ', 'Keng ', 'Piao ', 'Jiang ', 'Yin ', 'Gou ', 'Qian ', 'Lue ', 'Ji ', 'Ying ', 'Jue ', 'Pie ', 'Pie ', 'Lao ', 'Dun ', 'Xian ', 'Ruan ', 'Kui ', 'Zan ', 'Yi ', 'Xun ', 'Cheng ', 'Cheng ', 'Sa ', 'Nao ', 'Heng ', 'Si ', 'Qian ', 'Huang ', 'Da ', 'Zun ', 'Nian ', 'Lin ', 'Zheng ', 'Hui ', 'Zhuang ', 'Jiao ', 'Ji ', 'Cao ', 'Dan ', 'Dan ', 'Che ', 'Bo ', 'Che ', 'Jue ', 'Xiao ', 'Liao ', 'Ben ', 'Fu ', 'Qiao ', 'Bo ', 'Cuo ', 'Zhuo ', 'Zhuan ', 'Tuo ', 'Pu ', 'Qin ', 'Dun ', 'Nian ', '[?] ', 'Xie ', 'Lu ', 'Jiao ', 'Cuan ', 'Ta ', 'Han ', 'Qiao ', 'Zhua ', 'Jian ', 'Gan ', 'Yong ', 'Lei ', 'Kuo ', 'Lu ', 'Shan ', 'Zhuo ', 'Ze ', 'Pu ', 'Chuo ', 'Ji ', 'Dang ', 'Suo ', 'Cao ', 'Qing ', 'Jing ', 'Huan ', 'Jie ', 'Qin ', 'Kuai ', 'Dan ', 'Xi ', 'Ge ', 'Pi ', 'Bo ', 'Ao ', 'Ju ', 'Ye ', '[?] ', 'Mang ', 'Sou ', 'Mi ', 'Ji ', 'Tai ', 'Zhuo ', 'Dao ', 'Xing ', 'Lan ', 'Ca ', 'Ju ', 'Ye ', 'Ru ', 'Ye ', 'Ye ', 'Ni ', 'Hu ', 'Ji ', 'Bin ', 'Ning ', 'Ge ', 'Zhi ', 'Jie ', 'Kuo ', 'Mo ', 'Jian ', 'Xie ', 'Lie ', 'Tan ', 'Bai ', 'Sou ', 'Lu ', 'Lue ', 'Rao ', 'Zhi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x065.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x065.php
new file mode 100644
index 000000000..da927615a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x065.php
@@ -0,0 +1 @@
+<?php return ['Pan ', 'Yang ', 'Lei ', 'Sa ', 'Shu ', 'Zan ', 'Nian ', 'Xian ', 'Jun ', 'Huo ', 'Li ', 'La ', 'Han ', 'Ying ', 'Lu ', 'Long ', 'Qian ', 'Qian ', 'Zan ', 'Qian ', 'Lan ', 'San ', 'Ying ', 'Mei ', 'Rang ', 'Chan ', '[?] ', 'Cuan ', 'Xi ', 'She ', 'Luo ', 'Jun ', 'Mi ', 'Li ', 'Zan ', 'Luan ', 'Tan ', 'Zuan ', 'Li ', 'Dian ', 'Wa ', 'Dang ', 'Jiao ', 'Jue ', 'Lan ', 'Li ', 'Nang ', 'Zhi ', 'Gui ', 'Gui ', 'Qi ', 'Xin ', 'Pu ', 'Sui ', 'Shou ', 'Kao ', 'You ', 'Gai ', 'Yi ', 'Gong ', 'Gan ', 'Ban ', 'Fang ', 'Zheng ', 'Bo ', 'Dian ', 'Kou ', 'Min ', 'Wu ', 'Gu ', 'He ', 'Ce ', 'Xiao ', 'Mi ', 'Chu ', 'Ge ', 'Di ', 'Xu ', 'Jiao ', 'Min ', 'Chen ', 'Jiu ', 'Zhen ', 'Duo ', 'Yu ', 'Chi ', 'Ao ', 'Bai ', 'Xu ', 'Jiao ', 'Duo ', 'Lian ', 'Nie ', 'Bi ', 'Chang ', 'Dian ', 'Duo ', 'Yi ', 'Gan ', 'San ', 'Ke ', 'Yan ', 'Dun ', 'Qi ', 'Dou ', 'Xiao ', 'Duo ', 'Jiao ', 'Jing ', 'Yang ', 'Xia ', 'Min ', 'Shu ', 'Ai ', 'Qiao ', 'Ai ', 'Zheng ', 'Di ', 'Zhen ', 'Fu ', 'Shu ', 'Liao ', 'Qu ', 'Xiong ', 'Xi ', 'Jiao ', 'Sen ', 'Jiao ', 'Zhuo ', 'Yi ', 'Lian ', 'Bi ', 'Li ', 'Xiao ', 'Xiao ', 'Wen ', 'Xue ', 'Qi ', 'Qi ', 'Zhai ', 'Bin ', 'Jue ', 'Zhai ', '[?] ', 'Fei ', 'Ban ', 'Ban ', 'Lan ', 'Yu ', 'Lan ', 'Wei ', 'Dou ', 'Sheng ', 'Liao ', 'Jia ', 'Hu ', 'Xie ', 'Jia ', 'Yu ', 'Zhen ', 'Jiao ', 'Wo ', 'Tou ', 'Chu ', 'Jin ', 'Chi ', 'Yin ', 'Fu ', 'Qiang ', 'Zhan ', 'Qu ', 'Zhuo ', 'Zhan ', 'Duan ', 'Zhuo ', 'Si ', 'Xin ', 'Zhuo ', 'Zhuo ', 'Qin ', 'Lin ', 'Zhuo ', 'Chu ', 'Duan ', 'Zhu ', 'Fang ', 'Xie ', 'Hang ', 'Yu ', 'Shi ', 'Pei ', 'You ', 'Mye ', 'Pang ', 'Qi ', 'Zhan ', 'Mao ', 'Lu ', 'Pei ', 'Pi ', 'Liu ', 'Fu ', 'Fang ', 'Xuan ', 'Jing ', 'Jing ', 'Ni ', 'Zu ', 'Zhao ', 'Yi ', 'Liu ', 'Shao ', 'Jian ', 'Es ', 'Yi ', 'Qi ', 'Zhi ', 'Fan ', 'Piao ', 'Fan ', 'Zhan ', 'Guai ', 'Sui ', 'Yu ', 'Wu ', 'Ji ', 'Ji ', 'Ji ', 'Huo ', 'Ri ', 'Dan ', 'Jiu ', 'Zhi ', 'Zao ', 'Xie ', 'Tiao ', 'Xun ', 'Xu ', 'Xu ', 'Xu ', 'Gan ', 'Han ', 'Tai ', 'Di ', 'Xu ', 'Chan ', 'Shi ', 'Kuang ', 'Yang ', 'Shi ', 'Wang ', 'Min ', 'Min ', 'Tun ', 'Chun ', 'Wu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x066.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x066.php
new file mode 100644
index 000000000..dfae09bad
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x066.php
@@ -0,0 +1 @@
+<?php return ['Yun ', 'Bei ', 'Ang ', 'Ze ', 'Ban ', 'Jie ', 'Kun ', 'Sheng ', 'Hu ', 'Fang ', 'Hao ', 'Gui ', 'Chang ', 'Xuan ', 'Ming ', 'Hun ', 'Fen ', 'Qin ', 'Hu ', 'Yi ', 'Xi ', 'Xin ', 'Yan ', 'Ze ', 'Fang ', 'Tan ', 'Shen ', 'Ju ', 'Yang ', 'Zan ', 'Bing ', 'Xing ', 'Ying ', 'Xuan ', 'Pei ', 'Zhen ', 'Ling ', 'Chun ', 'Hao ', 'Mei ', 'Zuo ', 'Mo ', 'Bian ', 'Xu ', 'Hun ', 'Zhao ', 'Zong ', 'Shi ', 'Shi ', 'Yu ', 'Fei ', 'Die ', 'Mao ', 'Ni ', 'Chang ', 'Wen ', 'Dong ', 'Ai ', 'Bing ', 'Ang ', 'Zhou ', 'Long ', 'Xian ', 'Kuang ', 'Tiao ', 'Chao ', 'Shi ', 'Huang ', 'Huang ', 'Xuan ', 'Kui ', 'Xu ', 'Jiao ', 'Jin ', 'Zhi ', 'Jin ', 'Shang ', 'Tong ', 'Hong ', 'Yan ', 'Gai ', 'Xiang ', 'Shai ', 'Xiao ', 'Ye ', 'Yun ', 'Hui ', 'Han ', 'Han ', 'Jun ', 'Wan ', 'Xian ', 'Kun ', 'Zhou ', 'Xi ', 'Cheng ', 'Sheng ', 'Bu ', 'Zhe ', 'Zhe ', 'Wu ', 'Han ', 'Hui ', 'Hao ', 'Chen ', 'Wan ', 'Tian ', 'Zhuo ', 'Zui ', 'Zhou ', 'Pu ', 'Jing ', 'Xi ', 'Shan ', 'Yi ', 'Xi ', 'Qing ', 'Qi ', 'Jing ', 'Gui ', 'Zhen ', 'Yi ', 'Zhi ', 'An ', 'Wan ', 'Lin ', 'Liang ', 'Chang ', 'Wang ', 'Xiao ', 'Zan ', 'Hi ', 'Xuan ', 'Xuan ', 'Yi ', 'Xia ', 'Yun ', 'Hui ', 'Fu ', 'Min ', 'Kui ', 'He ', 'Ying ', 'Du ', 'Wei ', 'Shu ', 'Qing ', 'Mao ', 'Nan ', 'Jian ', 'Nuan ', 'An ', 'Yang ', 'Chun ', 'Yao ', 'Suo ', 'Jin ', 'Ming ', 'Jiao ', 'Kai ', 'Gao ', 'Weng ', 'Chang ', 'Qi ', 'Hao ', 'Yan ', 'Li ', 'Ai ', 'Ji ', 'Gui ', 'Men ', 'Zan ', 'Xie ', 'Hao ', 'Mu ', 'Mo ', 'Cong ', 'Ni ', 'Zhang ', 'Hui ', 'Bao ', 'Han ', 'Xuan ', 'Chuan ', 'Liao ', 'Xian ', 'Dan ', 'Jing ', 'Pie ', 'Lin ', 'Tun ', 'Xi ', 'Yi ', 'Ji ', 'Huang ', 'Tai ', 'Ye ', 'Ye ', 'Li ', 'Tan ', 'Tong ', 'Xiao ', 'Fei ', 'Qin ', 'Zhao ', 'Hao ', 'Yi ', 'Xiang ', 'Xing ', 'Sen ', 'Jiao ', 'Bao ', 'Jing ', 'Yian ', 'Ai ', 'Ye ', 'Ru ', 'Shu ', 'Meng ', 'Xun ', 'Yao ', 'Pu ', 'Li ', 'Chen ', 'Kuang ', 'Die ', '[?] ', 'Yan ', 'Huo ', 'Lu ', 'Xi ', 'Rong ', 'Long ', 'Nang ', 'Luo ', 'Luan ', 'Shai ', 'Tang ', 'Yan ', 'Chu ', 'Yue ', 'Yue ', 'Qu ', 'Yi ', 'Geng ', 'Ye ', 'Hu ', 'He ', 'Shu ', 'Cao ', 'Cao ', 'Noboru ', 'Man ', 'Ceng ', 'Ceng ', 'Ti '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x067.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x067.php
new file mode 100644
index 000000000..01bedf802
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x067.php
@@ -0,0 +1 @@
+<?php return ['Zui ', 'Can ', 'Xu ', 'Hui ', 'Yin ', 'Qie ', 'Fen ', 'Pi ', 'Yue ', 'You ', 'Ruan ', 'Peng ', 'Ban ', 'Fu ', 'Ling ', 'Fei ', 'Qu ', '[?] ', 'Nu ', 'Tiao ', 'Shuo ', 'Zhen ', 'Lang ', 'Lang ', 'Juan ', 'Ming ', 'Huang ', 'Wang ', 'Tun ', 'Zhao ', 'Ji ', 'Qi ', 'Ying ', 'Zong ', 'Wang ', 'Tong ', 'Lang ', '[?] ', 'Meng ', 'Long ', 'Mu ', 'Deng ', 'Wei ', 'Mo ', 'Ben ', 'Zha ', 'Zhu ', 'Zhu ', '[?] ', 'Zhu ', 'Ren ', 'Ba ', 'Po ', 'Duo ', 'Duo ', 'Dao ', 'Li ', 'Qiu ', 'Ji ', 'Jiu ', 'Bi ', 'Xiu ', 'Ting ', 'Ci ', 'Sha ', 'Eburi ', 'Za ', 'Quan ', 'Qian ', 'Yu ', 'Gan ', 'Wu ', 'Cha ', 'Shan ', 'Xun ', 'Fan ', 'Wu ', 'Zi ', 'Li ', 'Xing ', 'Cai ', 'Cun ', 'Ren ', 'Shao ', 'Tuo ', 'Di ', 'Zhang ', 'Mang ', 'Chi ', 'Yi ', 'Gu ', 'Gong ', 'Du ', 'Yi ', 'Qi ', 'Shu ', 'Gang ', 'Tiao ', 'Moku ', 'Soma ', 'Tochi ', 'Lai ', 'Sugi ', 'Mang ', 'Yang ', 'Ma ', 'Miao ', 'Si ', 'Yuan ', 'Hang ', 'Fei ', 'Bei ', 'Jie ', 'Dong ', 'Gao ', 'Yao ', 'Xian ', 'Chu ', 'Qun ', 'Pa ', 'Shu ', 'Hua ', 'Xin ', 'Chou ', 'Zhu ', 'Chou ', 'Song ', 'Ban ', 'Song ', 'Ji ', 'Yue ', 'Jin ', 'Gou ', 'Ji ', 'Mao ', 'Pi ', 'Bi ', 'Wang ', 'Ang ', 'Fang ', 'Fen ', 'Yi ', 'Fu ', 'Nan ', 'Xi ', 'Hu ', 'Ya ', 'Dou ', 'Xun ', 'Zhen ', 'Yao ', 'Lin ', 'Rui ', 'E ', 'Mei ', 'Zhao ', 'Guo ', 'Zhi ', 'Cong ', 'Yun ', 'Waku ', 'Dou ', 'Shu ', 'Zao ', '[?] ', 'Li ', 'Haze ', 'Jian ', 'Cheng ', 'Matsu ', 'Qiang ', 'Feng ', 'Nan ', 'Xiao ', 'Xian ', 'Ku ', 'Ping ', 'Yi ', 'Xi ', 'Zhi ', 'Guai ', 'Xiao ', 'Jia ', 'Jia ', 'Gou ', 'Fu ', 'Mo ', 'Yi ', 'Ye ', 'Ye ', 'Shi ', 'Nie ', 'Bi ', 'Duo ', 'Yi ', 'Ling ', 'Bing ', 'Ni ', 'La ', 'He ', 'Pan ', 'Fan ', 'Zhong ', 'Dai ', 'Ci ', 'Yang ', 'Fu ', 'Bo ', 'Mou ', 'Gan ', 'Qi ', 'Ran ', 'Rou ', 'Mao ', 'Zhao ', 'Song ', 'Zhe ', 'Xia ', 'You ', 'Shen ', 'Ju ', 'Tuo ', 'Zuo ', 'Nan ', 'Ning ', 'Yong ', 'Di ', 'Zhi ', 'Zha ', 'Cha ', 'Dan ', 'Gu ', 'Pu ', 'Jiu ', 'Ao ', 'Fu ', 'Jian ', 'Bo ', 'Duo ', 'Ke ', 'Nai ', 'Zhu ', 'Bi ', 'Liu ', 'Chai ', 'Zha ', 'Si ', 'Zhu ', 'Pei ', 'Shi ', 'Guai ', 'Cha ', 'Yao ', 'Jue ', 'Jiu ', 'Shi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x068.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x068.php
new file mode 100644
index 000000000..eee5c80dc
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x068.php
@@ -0,0 +1 @@
+<?php return ['Zhi ', 'Liu ', 'Mei ', 'Hoy ', 'Rong ', 'Zha ', '[?] ', 'Biao ', 'Zhan ', 'Jie ', 'Long ', 'Dong ', 'Lu ', 'Sayng ', 'Li ', 'Lan ', 'Yong ', 'Shu ', 'Xun ', 'Shuan ', 'Qi ', 'Zhen ', 'Qi ', 'Li ', 'Yi ', 'Xiang ', 'Zhen ', 'Li ', 'Su ', 'Gua ', 'Kan ', 'Bing ', 'Ren ', 'Xiao ', 'Bo ', 'Ren ', 'Bing ', 'Zi ', 'Chou ', 'Yi ', 'Jie ', 'Xu ', 'Zhu ', 'Jian ', 'Zui ', 'Er ', 'Er ', 'You ', 'Fa ', 'Gong ', 'Kao ', 'Lao ', 'Zhan ', 'Li ', 'Yin ', 'Yang ', 'He ', 'Gen ', 'Zhi ', 'Chi ', 'Ge ', 'Zai ', 'Luan ', 'Fu ', 'Jie ', 'Hang ', 'Gui ', 'Tao ', 'Guang ', 'Wei ', 'Kuang ', 'Ru ', 'An ', 'An ', 'Juan ', 'Yi ', 'Zhuo ', 'Ku ', 'Zhi ', 'Qiong ', 'Tong ', 'Sang ', 'Sang ', 'Huan ', 'Jie ', 'Jiu ', 'Xue ', 'Duo ', 'Zhui ', 'Yu ', 'Zan ', 'Kasei ', 'Ying ', 'Masu ', '[?] ', 'Zhan ', 'Ya ', 'Nao ', 'Zhen ', 'Dang ', 'Qi ', 'Qiao ', 'Hua ', 'Kuai ', 'Jiang ', 'Zhuang ', 'Xun ', 'Suo ', 'Sha ', 'Zhen ', 'Bei ', 'Ting ', 'Gua ', 'Jing ', 'Bo ', 'Ben ', 'Fu ', 'Rui ', 'Tong ', 'Jue ', 'Xi ', 'Lang ', 'Liu ', 'Feng ', 'Qi ', 'Wen ', 'Jun ', 'Gan ', 'Cu ', 'Liang ', 'Qiu ', 'Ting ', 'You ', 'Mei ', 'Bang ', 'Long ', 'Peng ', 'Zhuang ', 'Di ', 'Xuan ', 'Tu ', 'Zao ', 'Ao ', 'Gu ', 'Bi ', 'Di ', 'Han ', 'Zi ', 'Zhi ', 'Ren ', 'Bei ', 'Geng ', 'Jian ', 'Huan ', 'Wan ', 'Nuo ', 'Jia ', 'Tiao ', 'Ji ', 'Xiao ', 'Lu ', 'Huan ', 'Shao ', 'Cen ', 'Fen ', 'Song ', 'Meng ', 'Wu ', 'Li ', 'Li ', 'Dou ', 'Cen ', 'Ying ', 'Suo ', 'Ju ', 'Ti ', 'Jie ', 'Kun ', 'Zhuo ', 'Shu ', 'Chan ', 'Fan ', 'Wei ', 'Jing ', 'Li ', 'Bing ', 'Fumoto ', 'Shikimi ', 'Tao ', 'Zhi ', 'Lai ', 'Lian ', 'Jian ', 'Zhuo ', 'Ling ', 'Li ', 'Qi ', 'Bing ', 'Zhun ', 'Cong ', 'Qian ', 'Mian ', 'Qi ', 'Qi ', 'Cai ', 'Gun ', 'Chan ', 'Te ', 'Fei ', 'Pai ', 'Bang ', 'Pou ', 'Hun ', 'Zong ', 'Cheng ', 'Zao ', 'Ji ', 'Li ', 'Peng ', 'Yu ', 'Yu ', 'Gu ', 'Hun ', 'Dong ', 'Tang ', 'Gang ', 'Wang ', 'Di ', 'Xi ', 'Fan ', 'Cheng ', 'Zhan ', 'Qi ', 'Yuan ', 'Yan ', 'Yu ', 'Quan ', 'Yi ', 'Sen ', 'Ren ', 'Chui ', 'Leng ', 'Qi ', 'Zhuo ', 'Fu ', 'Ke ', 'Lai ', 'Zou ', 'Zou ', 'Zhuo ', 'Guan ', 'Fen ', 'Fen ', 'Chen ', 'Qiong ', 'Nie '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x069.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x069.php
new file mode 100644
index 000000000..cf8d1d2e3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x069.php
@@ -0,0 +1 @@
+<?php return ['Wan ', 'Guo ', 'Lu ', 'Hao ', 'Jie ', 'Yi ', 'Chou ', 'Ju ', 'Ju ', 'Cheng ', 'Zuo ', 'Liang ', 'Qiang ', 'Zhi ', 'Zhui ', 'Ya ', 'Ju ', 'Bei ', 'Jiao ', 'Zhuo ', 'Zi ', 'Bin ', 'Peng ', 'Ding ', 'Chu ', 'Chang ', 'Kunugi ', 'Momiji ', 'Jian ', 'Gui ', 'Xi ', 'Du ', 'Qian ', 'Kunugi ', 'Soko ', 'Shide ', 'Luo ', 'Zhi ', 'Ken ', 'Myeng ', 'Tafu ', '[?] ', 'Peng ', 'Zhan ', '[?] ', 'Tuo ', 'Sen ', 'Duo ', 'Ye ', 'Fou ', 'Wei ', 'Wei ', 'Duan ', 'Jia ', 'Zong ', 'Jian ', 'Yi ', 'Shen ', 'Xi ', 'Yan ', 'Yan ', 'Chuan ', 'Zhan ', 'Chun ', 'Yu ', 'He ', 'Zha ', 'Wo ', 'Pian ', 'Bi ', 'Yao ', 'Huo ', 'Xu ', 'Ruo ', 'Yang ', 'La ', 'Yan ', 'Ben ', 'Hun ', 'Kui ', 'Jie ', 'Kui ', 'Si ', 'Feng ', 'Xie ', 'Tuo ', 'Zhi ', 'Jian ', 'Mu ', 'Mao ', 'Chu ', 'Hu ', 'Hu ', 'Lian ', 'Leng ', 'Ting ', 'Nan ', 'Yu ', 'You ', 'Mei ', 'Song ', 'Xuan ', 'Xuan ', 'Ying ', 'Zhen ', 'Pian ', 'Ye ', 'Ji ', 'Jie ', 'Ye ', 'Chu ', 'Shun ', 'Yu ', 'Cou ', 'Wei ', 'Mei ', 'Di ', 'Ji ', 'Jie ', 'Kai ', 'Qiu ', 'Ying ', 'Rou ', 'Heng ', 'Lou ', 'Le ', 'Hazou ', 'Katsura ', 'Pin ', 'Muro ', 'Gai ', 'Tan ', 'Lan ', 'Yun ', 'Yu ', 'Chen ', 'Lu ', 'Ju ', 'Sakaki ', '[?] ', 'Pi ', 'Xie ', 'Jia ', 'Yi ', 'Zhan ', 'Fu ', 'Nai ', 'Mi ', 'Lang ', 'Rong ', 'Gu ', 'Jian ', 'Ju ', 'Ta ', 'Yao ', 'Zhen ', 'Bang ', 'Sha ', 'Yuan ', 'Zi ', 'Ming ', 'Su ', 'Jia ', 'Yao ', 'Jie ', 'Huang ', 'Gan ', 'Fei ', 'Zha ', 'Qian ', 'Ma ', 'Sun ', 'Yuan ', 'Xie ', 'Rong ', 'Shi ', 'Zhi ', 'Cui ', 'Yun ', 'Ting ', 'Liu ', 'Rong ', 'Tang ', 'Que ', 'Zhai ', 'Si ', 'Sheng ', 'Ta ', 'Ke ', 'Xi ', 'Gu ', 'Qi ', 'Kao ', 'Gao ', 'Sun ', 'Pan ', 'Tao ', 'Ge ', 'Xun ', 'Dian ', 'Nou ', 'Ji ', 'Shuo ', 'Gou ', 'Chui ', 'Qiang ', 'Cha ', 'Qian ', 'Huai ', 'Mei ', 'Xu ', 'Gang ', 'Gao ', 'Zhuo ', 'Tuo ', 'Hashi ', 'Yang ', 'Dian ', 'Jia ', 'Jian ', 'Zui ', 'Kashi ', 'Ori ', 'Bin ', 'Zhu ', '[?] ', 'Xi ', 'Qi ', 'Lian ', 'Hui ', 'Yong ', 'Qian ', 'Guo ', 'Gai ', 'Gai ', 'Tuan ', 'Hua ', 'Cu ', 'Sen ', 'Cui ', 'Beng ', 'You ', 'Hu ', 'Jiang ', 'Hu ', 'Huan ', 'Kui ', 'Yi ', 'Nie ', 'Gao ', 'Kang ', 'Gui ', 'Gui ', 'Cao ', 'Man ', 'Jin '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06a.php
new file mode 100644
index 000000000..07aa2ec48
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06a.php
@@ -0,0 +1 @@
+<?php return ['Di ', 'Zhuang ', 'Le ', 'Lang ', 'Chen ', 'Cong ', 'Li ', 'Xiu ', 'Qing ', 'Shuang ', 'Fan ', 'Tong ', 'Guan ', 'Ji ', 'Suo ', 'Lei ', 'Lu ', 'Liang ', 'Mi ', 'Lou ', 'Chao ', 'Su ', 'Ke ', 'Shu ', 'Tang ', 'Biao ', 'Lu ', 'Jiu ', 'Shu ', 'Zha ', 'Shu ', 'Zhang ', 'Men ', 'Mo ', 'Niao ', 'Yang ', 'Tiao ', 'Peng ', 'Zhu ', 'Sha ', 'Xi ', 'Quan ', 'Heng ', 'Jian ', 'Cong ', '[?] ', 'Hokuso ', 'Qiang ', 'Tara ', 'Ying ', 'Er ', 'Xin ', 'Zhi ', 'Qiao ', 'Zui ', 'Cong ', 'Pu ', 'Shu ', 'Hua ', 'Kui ', 'Zhen ', 'Zun ', 'Yue ', 'Zhan ', 'Xi ', 'Xun ', 'Dian ', 'Fa ', 'Gan ', 'Mo ', 'Wu ', 'Qiao ', 'Nao ', 'Lin ', 'Liu ', 'Qiao ', 'Xian ', 'Run ', 'Fan ', 'Zhan ', 'Tuo ', 'Lao ', 'Yun ', 'Shun ', 'Tui ', 'Cheng ', 'Tang ', 'Meng ', 'Ju ', 'Cheng ', 'Su ', 'Jue ', 'Jue ', 'Tan ', 'Hui ', 'Ji ', 'Nuo ', 'Xiang ', 'Tuo ', 'Ning ', 'Rui ', 'Zhu ', 'Chuang ', 'Zeng ', 'Fen ', 'Qiong ', 'Ran ', 'Heng ', 'Cen ', 'Gu ', 'Liu ', 'Lao ', 'Gao ', 'Chu ', 'Zusa ', 'Nude ', 'Ca ', 'San ', 'Ji ', 'Dou ', 'Shou ', 'Lu ', '[?] ', '[?] ', 'Yuan ', 'Ta ', 'Shu ', 'Jiang ', 'Tan ', 'Lin ', 'Nong ', 'Yin ', 'Xi ', 'Sui ', 'Shan ', 'Zui ', 'Xuan ', 'Cheng ', 'Gan ', 'Ju ', 'Zui ', 'Yi ', 'Qin ', 'Pu ', 'Yan ', 'Lei ', 'Feng ', 'Hui ', 'Dang ', 'Ji ', 'Sui ', 'Bo ', 'Bi ', 'Ding ', 'Chu ', 'Zhua ', 'Kuai ', 'Ji ', 'Jie ', 'Jia ', 'Qing ', 'Zhe ', 'Jian ', 'Qiang ', 'Dao ', 'Yi ', 'Biao ', 'Song ', 'She ', 'Lin ', 'Kunugi ', 'Cha ', 'Meng ', 'Yin ', 'Tao ', 'Tai ', 'Mian ', 'Qi ', 'Toan ', 'Bin ', 'Huo ', 'Ji ', 'Qian ', 'Mi ', 'Ning ', 'Yi ', 'Gao ', 'Jian ', 'Yin ', 'Er ', 'Qing ', 'Yan ', 'Qi ', 'Mi ', 'Zhao ', 'Gui ', 'Chun ', 'Ji ', 'Kui ', 'Po ', 'Deng ', 'Chu ', '[?] ', 'Mian ', 'You ', 'Zhi ', 'Guang ', 'Qian ', 'Lei ', 'Lei ', 'Sa ', 'Lu ', 'Li ', 'Cuan ', 'Lu ', 'Mie ', 'Hui ', 'Ou ', 'Lu ', 'Jie ', 'Gao ', 'Du ', 'Yuan ', 'Li ', 'Fei ', 'Zhuo ', 'Sou ', 'Lian ', 'Tamo ', 'Chu ', '[?] ', 'Zhu ', 'Lu ', 'Yan ', 'Li ', 'Zhu ', 'Chen ', 'Jie ', 'E ', 'Su ', 'Huai ', 'Nie ', 'Yu ', 'Long ', 'Lai ', '[?] ', 'Xian ', 'Kwi ', 'Ju ', 'Xiao ', 'Ling ', 'Ying ', 'Jian ', 'Yin ', 'You ', 'Ying '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06b.php
new file mode 100644
index 000000000..560afa370
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06b.php
@@ -0,0 +1 @@
+<?php return ['Xiang ', 'Nong ', 'Bo ', 'Chan ', 'Lan ', 'Ju ', 'Shuang ', 'She ', 'Wei ', 'Cong ', 'Quan ', 'Qu ', 'Cang ', '[?] ', 'Yu ', 'Luo ', 'Li ', 'Zan ', 'Luan ', 'Dang ', 'Jue ', 'Em ', 'Lan ', 'Lan ', 'Zhu ', 'Lei ', 'Li ', 'Ba ', 'Nang ', 'Yu ', 'Ling ', 'Tsuki ', 'Qian ', 'Ci ', 'Huan ', 'Xin ', 'Yu ', 'Yu ', 'Qian ', 'Ou ', 'Xu ', 'Chao ', 'Chu ', 'Chi ', 'Kai ', 'Yi ', 'Jue ', 'Xi ', 'Xu ', 'Xia ', 'Yu ', 'Kuai ', 'Lang ', 'Kuan ', 'Shuo ', 'Xi ', 'Ai ', 'Yi ', 'Qi ', 'Hu ', 'Chi ', 'Qin ', 'Kuan ', 'Kan ', 'Kuan ', 'Kan ', 'Chuan ', 'Sha ', 'Gua ', 'Yin ', 'Xin ', 'Xie ', 'Yu ', 'Qian ', 'Xiao ', 'Yi ', 'Ge ', 'Wu ', 'Tan ', 'Jin ', 'Ou ', 'Hu ', 'Ti ', 'Huan ', 'Xu ', 'Pen ', 'Xi ', 'Xiao ', 'Xu ', 'Xi ', 'Sen ', 'Lian ', 'Chu ', 'Yi ', 'Kan ', 'Yu ', 'Chuo ', 'Huan ', 'Zhi ', 'Zheng ', 'Ci ', 'Bu ', 'Wu ', 'Qi ', 'Bu ', 'Bu ', 'Wai ', 'Ju ', 'Qian ', 'Chi ', 'Se ', 'Chi ', 'Se ', 'Zhong ', 'Sui ', 'Sui ', 'Li ', 'Cuo ', 'Yu ', 'Li ', 'Gui ', 'Dai ', 'Dai ', 'Si ', 'Jian ', 'Zhe ', 'Mo ', 'Mo ', 'Yao ', 'Mo ', 'Cu ', 'Yang ', 'Tian ', 'Sheng ', 'Dai ', 'Shang ', 'Xu ', 'Xun ', 'Shu ', 'Can ', 'Jue ', 'Piao ', 'Qia ', 'Qiu ', 'Su ', 'Qing ', 'Yun ', 'Lian ', 'Yi ', 'Fou ', 'Zhi ', 'Ye ', 'Can ', 'Hun ', 'Dan ', 'Ji ', 'Ye ', 'Zhen ', 'Yun ', 'Wen ', 'Chou ', 'Bin ', 'Ti ', 'Jin ', 'Shang ', 'Yin ', 'Diao ', 'Cu ', 'Hui ', 'Cuan ', 'Yi ', 'Dan ', 'Du ', 'Jiang ', 'Lian ', 'Bin ', 'Du ', 'Tsukusu ', 'Jian ', 'Shu ', 'Ou ', 'Duan ', 'Zhu ', 'Yin ', 'Qing ', 'Yi ', 'Sha ', 'Que ', 'Ke ', 'Yao ', 'Jun ', 'Dian ', 'Hui ', 'Hui ', 'Gu ', 'Que ', 'Ji ', 'Yi ', 'Ou ', 'Hui ', 'Duan ', 'Yi ', 'Xiao ', 'Wu ', 'Guan ', 'Mu ', 'Mei ', 'Mei ', 'Ai ', 'Zuo ', 'Du ', 'Yu ', 'Bi ', 'Bi ', 'Bi ', 'Pi ', 'Pi ', 'Bi ', 'Chan ', 'Mao ', '[?] ', '[?] ', 'Pu ', 'Mushiru ', 'Jia ', 'Zhan ', 'Sai ', 'Mu ', 'Tuo ', 'Xun ', 'Er ', 'Rong ', 'Xian ', 'Ju ', 'Mu ', 'Hao ', 'Qiu ', 'Dou ', 'Mushiru ', 'Tan ', 'Pei ', 'Ju ', 'Duo ', 'Cui ', 'Bi ', 'San ', '[?] ', 'Mao ', 'Sui ', 'Yu ', 'Yu ', 'Tuo ', 'He ', 'Jian ', 'Ta ', 'San '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06c.php
new file mode 100644
index 000000000..78f502caf
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06c.php
@@ -0,0 +1 @@
+<?php return ['Lu ', 'Mu ', 'Li ', 'Tong ', 'Rong ', 'Chang ', 'Pu ', 'Luo ', 'Zhan ', 'Sao ', 'Zhan ', 'Meng ', 'Luo ', 'Qu ', 'Die ', 'Shi ', 'Di ', 'Min ', 'Jue ', 'Mang ', 'Qi ', 'Pie ', 'Nai ', 'Qi ', 'Dao ', 'Xian ', 'Chuan ', 'Fen ', 'Ri ', 'Nei ', '[?] ', 'Fu ', 'Shen ', 'Dong ', 'Qing ', 'Qi ', 'Yin ', 'Xi ', 'Hai ', 'Yang ', 'An ', 'Ya ', 'Ke ', 'Qing ', 'Ya ', 'Dong ', 'Dan ', 'Lu ', 'Qing ', 'Yang ', 'Yun ', 'Yun ', 'Shui ', 'San ', 'Zheng ', 'Bing ', 'Yong ', 'Dang ', 'Shitamizu ', 'Le ', 'Ni ', 'Tun ', 'Fan ', 'Gui ', 'Ting ', 'Zhi ', 'Qiu ', 'Bin ', 'Ze ', 'Mian ', 'Cuan ', 'Hui ', 'Diao ', 'Yi ', 'Cha ', 'Zhuo ', 'Chuan ', 'Wan ', 'Fan ', 'Dai ', 'Xi ', 'Tuo ', 'Mang ', 'Qiu ', 'Qi ', 'Shan ', 'Pai ', 'Han ', 'Qian ', 'Wu ', 'Wu ', 'Xun ', 'Si ', 'Ru ', 'Gong ', 'Jiang ', 'Chi ', 'Wu ', 'Tsuchi ', '[?] ', 'Tang ', 'Zhi ', 'Chi ', 'Qian ', 'Mi ', 'Yu ', 'Wang ', 'Qing ', 'Jing ', 'Rui ', 'Jun ', 'Hong ', 'Tai ', 'Quan ', 'Ji ', 'Bian ', 'Bian ', 'Gan ', 'Wen ', 'Zhong ', 'Fang ', 'Xiong ', 'Jue ', 'Hang ', 'Niou ', 'Qi ', 'Fen ', 'Xu ', 'Xu ', 'Qin ', 'Yi ', 'Wo ', 'Yun ', 'Yuan ', 'Hang ', 'Yan ', 'Chen ', 'Chen ', 'Dan ', 'You ', 'Dun ', 'Hu ', 'Huo ', 'Qie ', 'Mu ', 'Rou ', 'Mei ', 'Ta ', 'Mian ', 'Wu ', 'Chong ', 'Tian ', 'Bi ', 'Sha ', 'Zhi ', 'Pei ', 'Pan ', 'Zhui ', 'Za ', 'Gou ', 'Liu ', 'Mei ', 'Ze ', 'Feng ', 'Ou ', 'Li ', 'Lun ', 'Cang ', 'Feng ', 'Wei ', 'Hu ', 'Mo ', 'Mei ', 'Shu ', 'Ju ', 'Zan ', 'Tuo ', 'Tuo ', 'Tuo ', 'He ', 'Li ', 'Mi ', 'Yi ', 'Fa ', 'Fei ', 'You ', 'Tian ', 'Zhi ', 'Zhao ', 'Gu ', 'Zhan ', 'Yan ', 'Si ', 'Kuang ', 'Jiong ', 'Ju ', 'Xie ', 'Qiu ', 'Yi ', 'Jia ', 'Zhong ', 'Quan ', 'Bo ', 'Hui ', 'Mi ', 'Ben ', 'Zhuo ', 'Chu ', 'Le ', 'You ', 'Gu ', 'Hong ', 'Gan ', 'Fa ', 'Mao ', 'Si ', 'Hu ', 'Ping ', 'Ci ', 'Fan ', 'Chi ', 'Su ', 'Ning ', 'Cheng ', 'Ling ', 'Pao ', 'Bo ', 'Qi ', 'Si ', 'Ni ', 'Ju ', 'Yue ', 'Zhu ', 'Sheng ', 'Lei ', 'Xuan ', 'Xue ', 'Fu ', 'Pan ', 'Min ', 'Tai ', 'Yang ', 'Ji ', 'Yong ', 'Guan ', 'Beng ', 'Xue ', 'Long ', 'Lu ', '[?] ', 'Bo ', 'Xie ', 'Po ', 'Ze ', 'Jing ', 'Yin '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06d.php
new file mode 100644
index 000000000..799cb252a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06d.php
@@ -0,0 +1 @@
+<?php return ['Zhou ', 'Ji ', 'Yi ', 'Hui ', 'Hui ', 'Zui ', 'Cheng ', 'Yin ', 'Wei ', 'Hou ', 'Jian ', 'Yang ', 'Lie ', 'Si ', 'Ji ', 'Er ', 'Xing ', 'Fu ', 'Sa ', 'Suo ', 'Zhi ', 'Yin ', 'Wu ', 'Xi ', 'Kao ', 'Zhu ', 'Jiang ', 'Luo ', '[?] ', 'An ', 'Dong ', 'Yi ', 'Mou ', 'Lei ', 'Yi ', 'Mi ', 'Quan ', 'Jin ', 'Mo ', 'Wei ', 'Xiao ', 'Xie ', 'Hong ', 'Xu ', 'Shuo ', 'Kuang ', 'Tao ', 'Qie ', 'Ju ', 'Er ', 'Zhou ', 'Ru ', 'Ping ', 'Xun ', 'Xiong ', 'Zhi ', 'Guang ', 'Huan ', 'Ming ', 'Huo ', 'Wa ', 'Qia ', 'Pai ', 'Wu ', 'Qu ', 'Liu ', 'Yi ', 'Jia ', 'Jing ', 'Qian ', 'Jiang ', 'Jiao ', 'Cheng ', 'Shi ', 'Zhuo ', 'Ce ', 'Pal ', 'Kuai ', 'Ji ', 'Liu ', 'Chan ', 'Hun ', 'Hu ', 'Nong ', 'Xun ', 'Jin ', 'Lie ', 'Qiu ', 'Wei ', 'Zhe ', 'Jun ', 'Han ', 'Bang ', 'Mang ', 'Zhuo ', 'You ', 'Xi ', 'Bo ', 'Dou ', 'Wan ', 'Hong ', 'Yi ', 'Pu ', 'Ying ', 'Lan ', 'Hao ', 'Lang ', 'Han ', 'Li ', 'Geng ', 'Fu ', 'Wu ', 'Lian ', 'Chun ', 'Feng ', 'Yi ', 'Yu ', 'Tong ', 'Lao ', 'Hai ', 'Jin ', 'Jia ', 'Chong ', 'Weng ', 'Mei ', 'Sui ', 'Cheng ', 'Pei ', 'Xian ', 'Shen ', 'Tu ', 'Kun ', 'Pin ', 'Nie ', 'Han ', 'Jing ', 'Xiao ', 'She ', 'Nian ', 'Tu ', 'Yong ', 'Xiao ', 'Xian ', 'Ting ', 'E ', 'Su ', 'Tun ', 'Juan ', 'Cen ', 'Ti ', 'Li ', 'Shui ', 'Si ', 'Lei ', 'Shui ', 'Tao ', 'Du ', 'Lao ', 'Lai ', 'Lian ', 'Wei ', 'Wo ', 'Yun ', 'Huan ', 'Di ', '[?] ', 'Run ', 'Jian ', 'Zhang ', 'Se ', 'Fu ', 'Guan ', 'Xing ', 'Shou ', 'Shuan ', 'Ya ', 'Chuo ', 'Zhang ', 'Ye ', 'Kong ', 'Wo ', 'Han ', 'Tuo ', 'Dong ', 'He ', 'Wo ', 'Ju ', 'Gan ', 'Liang ', 'Hun ', 'Ta ', 'Zhuo ', 'Dian ', 'Qie ', 'De ', 'Juan ', 'Zi ', 'Xi ', 'Yao ', 'Qi ', 'Gu ', 'Guo ', 'Han ', 'Lin ', 'Tang ', 'Zhou ', 'Peng ', 'Hao ', 'Chang ', 'Shu ', 'Qi ', 'Fang ', 'Chi ', 'Lu ', 'Nao ', 'Ju ', 'Tao ', 'Cong ', 'Lei ', 'Zhi ', 'Peng ', 'Fei ', 'Song ', 'Tian ', 'Pi ', 'Dan ', 'Yu ', 'Ni ', 'Yu ', 'Lu ', 'Gan ', 'Mi ', 'Jing ', 'Ling ', 'Lun ', 'Yin ', 'Cui ', 'Qu ', 'Huai ', 'Yu ', 'Nian ', 'Shen ', 'Piao ', 'Chun ', 'Wa ', 'Yuan ', 'Lai ', 'Hun ', 'Qing ', 'Yan ', 'Qian ', 'Tian ', 'Miao ', 'Zhi ', 'Yin ', 'Mi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06e.php
new file mode 100644
index 000000000..3f0f40147
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06e.php
@@ -0,0 +1 @@
+<?php return ['Ben ', 'Yuan ', 'Wen ', 'Re ', 'Fei ', 'Qing ', 'Yuan ', 'Ke ', 'Ji ', 'She ', 'Yuan ', 'Shibui ', 'Lu ', 'Zi ', 'Du ', '[?] ', 'Jian ', 'Min ', 'Pi ', 'Tani ', 'Yu ', 'Yuan ', 'Shen ', 'Shen ', 'Rou ', 'Huan ', 'Zhu ', 'Jian ', 'Nuan ', 'Yu ', 'Qiu ', 'Ting ', 'Qu ', 'Du ', 'Feng ', 'Zha ', 'Bo ', 'Wo ', 'Wo ', 'Di ', 'Wei ', 'Wen ', 'Ru ', 'Xie ', 'Ce ', 'Wei ', 'Ge ', 'Gang ', 'Yan ', 'Hong ', 'Xuan ', 'Mi ', 'Ke ', 'Mao ', 'Ying ', 'Yan ', 'You ', 'Hong ', 'Miao ', 'Xing ', 'Mei ', 'Zai ', 'Hun ', 'Nai ', 'Kui ', 'Shi ', 'E ', 'Pai ', 'Mei ', 'Lian ', 'Qi ', 'Qi ', 'Mei ', 'Tian ', 'Cou ', 'Wei ', 'Can ', 'Tuan ', 'Mian ', 'Hui ', 'Mo ', 'Xu ', 'Ji ', 'Pen ', 'Jian ', 'Jian ', 'Hu ', 'Feng ', 'Xiang ', 'Yi ', 'Yin ', 'Zhan ', 'Shi ', 'Jie ', 'Cheng ', 'Huang ', 'Tan ', 'Yu ', 'Bi ', 'Min ', 'Shi ', 'Tu ', 'Sheng ', 'Yong ', 'Qu ', 'Zhong ', 'Suei ', 'Jiu ', 'Jiao ', 'Qiou ', 'Yin ', 'Tang ', 'Long ', 'Huo ', 'Yuan ', 'Nan ', 'Ban ', 'You ', 'Quan ', 'Chui ', 'Liang ', 'Chan ', 'Yan ', 'Chun ', 'Nie ', 'Zi ', 'Wan ', 'Shi ', 'Man ', 'Ying ', 'Ratsu ', 'Kui ', '[?] ', 'Jian ', 'Xu ', 'Lu ', 'Gui ', 'Gai ', '[?] ', '[?] ', 'Po ', 'Jin ', 'Gui ', 'Tang ', 'Yuan ', 'Suo ', 'Yuan ', 'Lian ', 'Yao ', 'Meng ', 'Zhun ', 'Sheng ', 'Ke ', 'Tai ', 'Da ', 'Wa ', 'Liu ', 'Gou ', 'Sao ', 'Ming ', 'Zha ', 'Shi ', 'Yi ', 'Lun ', 'Ma ', 'Pu ', 'Wei ', 'Li ', 'Cai ', 'Wu ', 'Xi ', 'Wen ', 'Qiang ', 'Ze ', 'Shi ', 'Su ', 'Yi ', 'Zhen ', 'Sou ', 'Yun ', 'Xiu ', 'Yin ', 'Rong ', 'Hun ', 'Su ', 'Su ', 'Ni ', 'Ta ', 'Shi ', 'Ru ', 'Wei ', 'Pan ', 'Chu ', 'Chu ', 'Pang ', 'Weng ', 'Cang ', 'Mie ', 'He ', 'Dian ', 'Hao ', 'Huang ', 'Xi ', 'Zi ', 'Di ', 'Zhi ', 'Ying ', 'Fu ', 'Jie ', 'Hua ', 'Ge ', 'Zi ', 'Tao ', 'Teng ', 'Sui ', 'Bi ', 'Jiao ', 'Hui ', 'Gun ', 'Yin ', 'Gao ', 'Long ', 'Zhi ', 'Yan ', 'She ', 'Man ', 'Ying ', 'Chun ', 'Lu ', 'Lan ', 'Luan ', '[?] ', 'Bin ', 'Tan ', 'Yu ', 'Sou ', 'Hu ', 'Bi ', 'Biao ', 'Zhi ', 'Jiang ', 'Kou ', 'Shen ', 'Shang ', 'Di ', 'Mi ', 'Ao ', 'Lu ', 'Hu ', 'Hu ', 'You ', 'Chan ', 'Fan ', 'Yong ', 'Gun ', 'Man '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x06f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x06f.php
new file mode 100644
index 000000000..8a824a2e4
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x06f.php
@@ -0,0 +1 @@
+<?php return ['Qing ', 'Yu ', 'Piao ', 'Ji ', 'Ya ', 'Jiao ', 'Qi ', 'Xi ', 'Ji ', 'Lu ', 'Lu ', 'Long ', 'Jin ', 'Guo ', 'Cong ', 'Lou ', 'Zhi ', 'Gai ', 'Qiang ', 'Li ', 'Yan ', 'Cao ', 'Jiao ', 'Cong ', 'Qun ', 'Tuan ', 'Ou ', 'Teng ', 'Ye ', 'Xi ', 'Mi ', 'Tang ', 'Mo ', 'Shang ', 'Han ', 'Lian ', 'Lan ', 'Wa ', 'Li ', 'Qian ', 'Feng ', 'Xuan ', 'Yi ', 'Man ', 'Zi ', 'Mang ', 'Kang ', 'Lei ', 'Peng ', 'Shu ', 'Zhang ', 'Zhang ', 'Chong ', 'Xu ', 'Huan ', 'Kuo ', 'Jian ', 'Yan ', 'Chuang ', 'Liao ', 'Cui ', 'Ti ', 'Yang ', 'Jiang ', 'Cong ', 'Ying ', 'Hong ', 'Xun ', 'Shu ', 'Guan ', 'Ying ', 'Xiao ', '[?] ', '[?] ', 'Xu ', 'Lian ', 'Zhi ', 'Wei ', 'Pi ', 'Jue ', 'Jiao ', 'Po ', 'Dang ', 'Hui ', 'Jie ', 'Wu ', 'Pa ', 'Ji ', 'Pan ', 'Gui ', 'Xiao ', 'Qian ', 'Qian ', 'Xi ', 'Lu ', 'Xi ', 'Xuan ', 'Dun ', 'Huang ', 'Min ', 'Run ', 'Su ', 'Liao ', 'Zhen ', 'Zhong ', 'Yi ', 'Di ', 'Wan ', 'Dan ', 'Tan ', 'Chao ', 'Xun ', 'Kui ', 'Yie ', 'Shao ', 'Tu ', 'Zhu ', 'San ', 'Hei ', 'Bi ', 'Shan ', 'Chan ', 'Chan ', 'Shu ', 'Tong ', 'Pu ', 'Lin ', 'Wei ', 'Se ', 'Se ', 'Cheng ', 'Jiong ', 'Cheng ', 'Hua ', 'Jiao ', 'Lao ', 'Che ', 'Gan ', 'Cun ', 'Heng ', 'Si ', 'Shu ', 'Peng ', 'Han ', 'Yun ', 'Liu ', 'Hong ', 'Fu ', 'Hao ', 'He ', 'Xian ', 'Jian ', 'Shan ', 'Xi ', 'Oki ', '[?] ', 'Lan ', '[?] ', 'Yu ', 'Lin ', 'Min ', 'Zao ', 'Dang ', 'Wan ', 'Ze ', 'Xie ', 'Yu ', 'Li ', 'Shi ', 'Xue ', 'Ling ', 'Man ', 'Zi ', 'Yong ', 'Kuai ', 'Can ', 'Lian ', 'Dian ', 'Ye ', 'Ao ', 'Huan ', 'Zhen ', 'Chan ', 'Man ', 'Dan ', 'Dan ', 'Yi ', 'Sui ', 'Pi ', 'Ju ', 'Ta ', 'Qin ', 'Ji ', 'Zhuo ', 'Lian ', 'Nong ', 'Guo ', 'Jin ', 'Fen ', 'Se ', 'Ji ', 'Sui ', 'Hui ', 'Chu ', 'Ta ', 'Song ', 'Ding ', '[?] ', 'Zhu ', 'Lai ', 'Bin ', 'Lian ', 'Mi ', 'Shi ', 'Shu ', 'Mi ', 'Ning ', 'Ying ', 'Ying ', 'Meng ', 'Jin ', 'Qi ', 'Pi ', 'Ji ', 'Hao ', 'Ru ', 'Zui ', 'Wo ', 'Tao ', 'Yin ', 'Yin ', 'Dui ', 'Ci ', 'Huo ', 'Jing ', 'Lan ', 'Jun ', 'Ai ', 'Pu ', 'Zhuo ', 'Wei ', 'Bin ', 'Gu ', 'Qian ', 'Xing ', 'Hama ', 'Kuo ', 'Fei ', '[?] ', 'Boku ', 'Jian ', 'Wei ', 'Luo ', 'Zan ', 'Lu ', 'Li '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x070.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x070.php
new file mode 100644
index 000000000..1c9e8d197
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x070.php
@@ -0,0 +1 @@
+<?php return ['You ', 'Yang ', 'Lu ', 'Si ', 'Jie ', 'Ying ', 'Du ', 'Wang ', 'Hui ', 'Xie ', 'Pan ', 'Shen ', 'Biao ', 'Chan ', 'Mo ', 'Liu ', 'Jian ', 'Pu ', 'Se ', 'Cheng ', 'Gu ', 'Bin ', 'Huo ', 'Xian ', 'Lu ', 'Qin ', 'Han ', 'Ying ', 'Yong ', 'Li ', 'Jing ', 'Xiao ', 'Ying ', 'Sui ', 'Wei ', 'Xie ', 'Huai ', 'Hao ', 'Zhu ', 'Long ', 'Lai ', 'Dui ', 'Fan ', 'Hu ', 'Lai ', '[?] ', '[?] ', 'Ying ', 'Mi ', 'Ji ', 'Lian ', 'Jian ', 'Ying ', 'Fen ', 'Lin ', 'Yi ', 'Jian ', 'Yue ', 'Chan ', 'Dai ', 'Rang ', 'Jian ', 'Lan ', 'Fan ', 'Shuang ', 'Yuan ', 'Zhuo ', 'Feng ', 'She ', 'Lei ', 'Lan ', 'Cong ', 'Qu ', 'Yong ', 'Qian ', 'Fa ', 'Guan ', 'Que ', 'Yan ', 'Hao ', 'Hyeng ', 'Sa ', 'Zan ', 'Luan ', 'Yan ', 'Li ', 'Mi ', 'Shan ', 'Tan ', 'Dang ', 'Jiao ', 'Chan ', '[?] ', 'Hao ', 'Ba ', 'Zhu ', 'Lan ', 'Lan ', 'Nang ', 'Wan ', 'Luan ', 'Xun ', 'Xian ', 'Yan ', 'Gan ', 'Yan ', 'Yu ', 'Huo ', 'Si ', 'Mie ', 'Guang ', 'Deng ', 'Hui ', 'Xiao ', 'Xiao ', 'Hu ', 'Hong ', 'Ling ', 'Zao ', 'Zhuan ', 'Jiu ', 'Zha ', 'Xie ', 'Chi ', 'Zhuo ', 'Zai ', 'Zai ', 'Can ', 'Yang ', 'Qi ', 'Zhong ', 'Fen ', 'Niu ', 'Jiong ', 'Wen ', 'Po ', 'Yi ', 'Lu ', 'Chui ', 'Pi ', 'Kai ', 'Pan ', 'Yan ', 'Kai ', 'Pang ', 'Mu ', 'Chao ', 'Liao ', 'Gui ', 'Kang ', 'Tun ', 'Guang ', 'Xin ', 'Zhi ', 'Guang ', 'Guang ', 'Wei ', 'Qiang ', '[?] ', 'Da ', 'Xia ', 'Zheng ', 'Zhu ', 'Ke ', 'Zhao ', 'Fu ', 'Ba ', 'Duo ', 'Duo ', 'Ling ', 'Zhuo ', 'Xuan ', 'Ju ', 'Tan ', 'Pao ', 'Jiong ', 'Pao ', 'Tai ', 'Tai ', 'Bing ', 'Yang ', 'Tong ', 'Han ', 'Zhu ', 'Zha ', 'Dian ', 'Wei ', 'Shi ', 'Lian ', 'Chi ', 'Huang ', '[?] ', 'Hu ', 'Shuo ', 'Lan ', 'Jing ', 'Jiao ', 'Xu ', 'Xing ', 'Quan ', 'Lie ', 'Huan ', 'Yang ', 'Xiao ', 'Xiu ', 'Xian ', 'Yin ', 'Wu ', 'Zhou ', 'Yao ', 'Shi ', 'Wei ', 'Tong ', 'Xue ', 'Zai ', 'Kai ', 'Hong ', 'Luo ', 'Xia ', 'Zhu ', 'Xuan ', 'Zheng ', 'Po ', 'Yan ', 'Hui ', 'Guang ', 'Zhe ', 'Hui ', 'Kao ', '[?] ', 'Fan ', 'Shao ', 'Ye ', 'Hui ', '[?] ', 'Tang ', 'Jin ', 'Re ', '[?] ', 'Xi ', 'Fu ', 'Jiong ', 'Che ', 'Pu ', 'Jing ', 'Zhuo ', 'Ting ', 'Wan ', 'Hai ', 'Peng ', 'Lang ', 'Shan ', 'Hu ', 'Feng ', 'Chi ', 'Rong '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x071.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x071.php
new file mode 100644
index 000000000..daadfe81d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x071.php
@@ -0,0 +1 @@
+<?php return ['Hu ', 'Xi ', 'Shu ', 'He ', 'Xun ', 'Ku ', 'Jue ', 'Xiao ', 'Xi ', 'Yan ', 'Han ', 'Zhuang ', 'Jun ', 'Di ', 'Xie ', 'Ji ', 'Wu ', '[?] ', '[?] ', 'Han ', 'Yan ', 'Huan ', 'Men ', 'Ju ', 'Chou ', 'Bei ', 'Fen ', 'Lin ', 'Kun ', 'Hun ', 'Tun ', 'Xi ', 'Cui ', 'Wu ', 'Hong ', 'Ju ', 'Fu ', 'Wo ', 'Jiao ', 'Cong ', 'Feng ', 'Ping ', 'Qiong ', 'Ruo ', 'Xi ', 'Qiong ', 'Xin ', 'Zhuo ', 'Yan ', 'Yan ', 'Yi ', 'Jue ', 'Yu ', 'Gang ', 'Ran ', 'Pi ', 'Gu ', '[?] ', 'Sheng ', 'Chang ', 'Shao ', '[?] ', '[?] ', '[?] ', '[?] ', 'Chen ', 'He ', 'Kui ', 'Zhong ', 'Duan ', 'Xia ', 'Hui ', 'Feng ', 'Lian ', 'Xuan ', 'Xing ', 'Huang ', 'Jiao ', 'Jian ', 'Bi ', 'Ying ', 'Zhu ', 'Wei ', 'Tuan ', 'Tian ', 'Xi ', 'Nuan ', 'Nuan ', 'Chan ', 'Yan ', 'Jiong ', 'Jiong ', 'Yu ', 'Mei ', 'Sha ', 'Wei ', 'Ye ', 'Xin ', 'Qiong ', 'Rou ', 'Mei ', 'Huan ', 'Xu ', 'Zhao ', 'Wei ', 'Fan ', 'Qiu ', 'Sui ', 'Yang ', 'Lie ', 'Zhu ', 'Jie ', 'Gao ', 'Gua ', 'Bao ', 'Hu ', 'Yun ', 'Xia ', '[?] ', '[?] ', 'Bian ', 'Gou ', 'Tui ', 'Tang ', 'Chao ', 'Shan ', 'N ', 'Bo ', 'Huang ', 'Xie ', 'Xi ', 'Wu ', 'Xi ', 'Yun ', 'He ', 'He ', 'Xi ', 'Yun ', 'Xiong ', 'Nai ', 'Shan ', 'Qiong ', 'Yao ', 'Xun ', 'Mi ', 'Lian ', 'Ying ', 'Wen ', 'Rong ', 'Oozutsu ', '[?] ', 'Qiang ', 'Liu ', 'Xi ', 'Bi ', 'Biao ', 'Zong ', 'Lu ', 'Jian ', 'Shou ', 'Yi ', 'Lou ', 'Feng ', 'Sui ', 'Yi ', 'Tong ', 'Jue ', 'Zong ', 'Yun ', 'Hu ', 'Yi ', 'Zhi ', 'Ao ', 'Wei ', 'Liao ', 'Han ', 'Ou ', 'Re ', 'Jiong ', 'Man ', '[?] ', 'Shang ', 'Cuan ', 'Zeng ', 'Jian ', 'Xi ', 'Xi ', 'Xi ', 'Yi ', 'Xiao ', 'Chi ', 'Huang ', 'Chan ', 'Ye ', 'Qian ', 'Ran ', 'Yan ', 'Xian ', 'Qiao ', 'Zun ', 'Deng ', 'Dun ', 'Shen ', 'Jiao ', 'Fen ', 'Si ', 'Liao ', 'Yu ', 'Lin ', 'Tong ', 'Shao ', 'Fen ', 'Fan ', 'Yan ', 'Xun ', 'Lan ', 'Mei ', 'Tang ', 'Yi ', 'Jing ', 'Men ', '[?] ', '[?] ', 'Ying ', 'Yu ', 'Yi ', 'Xue ', 'Lan ', 'Tai ', 'Zao ', 'Can ', 'Sui ', 'Xi ', 'Que ', 'Cong ', 'Lian ', 'Hui ', 'Zhu ', 'Xie ', 'Ling ', 'Wei ', 'Yi ', 'Xie ', 'Zhao ', 'Hui ', 'Tatsu ', 'Nung ', 'Lan ', 'Ru ', 'Xian ', 'Kao ', 'Xun ', 'Jin ', 'Chou ', 'Chou ', 'Yao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x072.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x072.php
new file mode 100644
index 000000000..f62cfcac0
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x072.php
@@ -0,0 +1 @@
+<?php return ['He ', 'Lan ', 'Biao ', 'Rong ', 'Li ', 'Mo ', 'Bao ', 'Ruo ', 'Lu ', 'La ', 'Ao ', 'Xun ', 'Kuang ', 'Shuo ', '[?] ', 'Li ', 'Lu ', 'Jue ', 'Liao ', 'Yan ', 'Xi ', 'Xie ', 'Long ', 'Ye ', '[?] ', 'Rang ', 'Yue ', 'Lan ', 'Cong ', 'Jue ', 'Tong ', 'Guan ', '[?] ', 'Che ', 'Mi ', 'Tang ', 'Lan ', 'Zhu ', '[?] ', 'Ling ', 'Cuan ', 'Yu ', 'Zhua ', 'Tsumekanmuri ', 'Pa ', 'Zheng ', 'Pao ', 'Cheng ', 'Yuan ', 'Ai ', 'Wei ', '[?] ', 'Jue ', 'Jue ', 'Fu ', 'Ye ', 'Ba ', 'Die ', 'Ye ', 'Yao ', 'Zu ', 'Shuang ', 'Er ', 'Qiang ', 'Chuang ', 'Ge ', 'Zang ', 'Die ', 'Qiang ', 'Yong ', 'Qiang ', 'Pian ', 'Ban ', 'Pan ', 'Shao ', 'Jian ', 'Pai ', 'Du ', 'Chuang ', 'Tou ', 'Zha ', 'Bian ', 'Die ', 'Bang ', 'Bo ', 'Chuang ', 'You ', '[?] ', 'Du ', 'Ya ', 'Cheng ', 'Niu ', 'Ushihen ', 'Pin ', 'Jiu ', 'Mou ', 'Tuo ', 'Mu ', 'Lao ', 'Ren ', 'Mang ', 'Fang ', 'Mao ', 'Mu ', 'Gang ', 'Wu ', 'Yan ', 'Ge ', 'Bei ', 'Si ', 'Jian ', 'Gu ', 'You ', 'Ge ', 'Sheng ', 'Mu ', 'Di ', 'Qian ', 'Quan ', 'Quan ', 'Zi ', 'Te ', 'Xi ', 'Mang ', 'Keng ', 'Qian ', 'Wu ', 'Gu ', 'Xi ', 'Li ', 'Li ', 'Pou ', 'Ji ', 'Gang ', 'Zhi ', 'Ben ', 'Quan ', 'Run ', 'Du ', 'Ju ', 'Jia ', 'Jian ', 'Feng ', 'Pian ', 'Ke ', 'Ju ', 'Kao ', 'Chu ', 'Xi ', 'Bei ', 'Luo ', 'Jie ', 'Ma ', 'San ', 'Wei ', 'Li ', 'Dun ', 'Tong ', '[?] ', 'Jiang ', 'Ikenie ', 'Li ', 'Du ', 'Lie ', 'Pi ', 'Piao ', 'Bao ', 'Xi ', 'Chou ', 'Wei ', 'Kui ', 'Chou ', 'Quan ', 'Fan ', 'Ba ', 'Fan ', 'Qiu ', 'Ji ', 'Cai ', 'Chuo ', 'An ', 'Jie ', 'Zhuang ', 'Guang ', 'Ma ', 'You ', 'Kang ', 'Bo ', 'Hou ', 'Ya ', 'Yin ', 'Huan ', 'Zhuang ', 'Yun ', 'Kuang ', 'Niu ', 'Di ', 'Qing ', 'Zhong ', 'Mu ', 'Bei ', 'Pi ', 'Ju ', 'Ni ', 'Sheng ', 'Pao ', 'Xia ', 'Tuo ', 'Hu ', 'Ling ', 'Fei ', 'Pi ', 'Ni ', 'Ao ', 'You ', 'Gou ', 'Yue ', 'Ju ', 'Dan ', 'Po ', 'Gu ', 'Xian ', 'Ning ', 'Huan ', 'Hen ', 'Jiao ', 'He ', 'Zhao ', 'Ji ', 'Xun ', 'Shan ', 'Ta ', 'Rong ', 'Shou ', 'Tong ', 'Lao ', 'Du ', 'Xia ', 'Shi ', 'Hua ', 'Zheng ', 'Yu ', 'Sun ', 'Yu ', 'Bi ', 'Mang ', 'Xi ', 'Juan ', 'Li ', 'Xia ', 'Yin ', 'Suan ', 'Lang ', 'Bei ', 'Zhi ', 'Yan '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x073.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x073.php
new file mode 100644
index 000000000..d276c6cc8
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x073.php
@@ -0,0 +1 @@
+<?php return ['Sha ', 'Li ', 'Han ', 'Xian ', 'Jing ', 'Pai ', 'Fei ', 'Yao ', 'Ba ', 'Qi ', 'Ni ', 'Biao ', 'Yin ', 'Lai ', 'Xi ', 'Jian ', 'Qiang ', 'Kun ', 'Yan ', 'Guo ', 'Zong ', 'Mi ', 'Chang ', 'Yi ', 'Zhi ', 'Zheng ', 'Ya ', 'Meng ', 'Cai ', 'Cu ', 'She ', 'Kari ', 'Cen ', 'Luo ', 'Hu ', 'Zong ', 'Ji ', 'Wei ', 'Feng ', 'Wo ', 'Yuan ', 'Xing ', 'Zhu ', 'Mao ', 'Wei ', 'Yuan ', 'Xian ', 'Tuan ', 'Ya ', 'Nao ', 'Xie ', 'Jia ', 'Hou ', 'Bian ', 'You ', 'You ', 'Mei ', 'Zha ', 'Yao ', 'Sun ', 'Bo ', 'Ming ', 'Hua ', 'Yuan ', 'Sou ', 'Ma ', 'Yuan ', 'Dai ', 'Yu ', 'Shi ', 'Hao ', '[?] ', 'Yi ', 'Zhen ', 'Chuang ', 'Hao ', 'Man ', 'Jing ', 'Jiang ', 'Mu ', 'Zhang ', 'Chan ', 'Ao ', 'Ao ', 'Hao ', 'Cui ', 'Fen ', 'Jue ', 'Bi ', 'Bi ', 'Huang ', 'Pu ', 'Lin ', 'Yu ', 'Tong ', 'Yao ', 'Liao ', 'Shuo ', 'Xiao ', 'Swu ', 'Ton ', 'Xi ', 'Ge ', 'Juan ', 'Du ', 'Hui ', 'Kuai ', 'Xian ', 'Xie ', 'Ta ', 'Xian ', 'Xun ', 'Ning ', 'Pin ', 'Huo ', 'Nou ', 'Meng ', 'Lie ', 'Nao ', 'Guang ', 'Shou ', 'Lu ', 'Ta ', 'Xian ', 'Mi ', 'Rang ', 'Huan ', 'Nao ', 'Luo ', 'Xian ', 'Qi ', 'Jue ', 'Xuan ', 'Miao ', 'Zi ', 'Lu ', 'Lu ', 'Yu ', 'Su ', 'Wang ', 'Qiu ', 'Ga ', 'Ding ', 'Le ', 'Ba ', 'Ji ', 'Hong ', 'Di ', 'Quan ', 'Gan ', 'Jiu ', 'Yu ', 'Ji ', 'Yu ', 'Yang ', 'Ma ', 'Gong ', 'Wu ', 'Fu ', 'Wen ', 'Jie ', 'Ya ', 'Fen ', 'Bian ', 'Beng ', 'Yue ', 'Jue ', 'Yun ', 'Jue ', 'Wan ', 'Jian ', 'Mei ', 'Dan ', 'Pi ', 'Wei ', 'Huan ', 'Xian ', 'Qiang ', 'Ling ', 'Dai ', 'Yi ', 'An ', 'Ping ', 'Dian ', 'Fu ', 'Xuan ', 'Xi ', 'Bo ', 'Ci ', 'Gou ', 'Jia ', 'Shao ', 'Po ', 'Ci ', 'Ke ', 'Ran ', 'Sheng ', 'Shen ', 'Yi ', 'Zu ', 'Jia ', 'Min ', 'Shan ', 'Liu ', 'Bi ', 'Zhen ', 'Zhen ', 'Jue ', 'Fa ', 'Long ', 'Jin ', 'Jiao ', 'Jian ', 'Li ', 'Guang ', 'Xian ', 'Zhou ', 'Gong ', 'Yan ', 'Xiu ', 'Yang ', 'Xu ', 'Luo ', 'Su ', 'Zhu ', 'Qin ', 'Ken ', 'Xun ', 'Bao ', 'Er ', 'Xiang ', 'Yao ', 'Xia ', 'Heng ', 'Gui ', 'Chong ', 'Xu ', 'Ban ', 'Pei ', '[?] ', 'Dang ', 'Ei ', 'Hun ', 'Wen ', 'E ', 'Cheng ', 'Ti ', 'Wu ', 'Wu ', 'Cheng ', 'Jun ', 'Mei ', 'Bei ', 'Ting ', 'Xian ', 'Chuo '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x074.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x074.php
new file mode 100644
index 000000000..70ed06807
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x074.php
@@ -0,0 +1 @@
+<?php return ['Han ', 'Xuan ', 'Yan ', 'Qiu ', 'Quan ', 'Lang ', 'Li ', 'Xiu ', 'Fu ', 'Liu ', 'Ye ', 'Xi ', 'Ling ', 'Li ', 'Jin ', 'Lian ', 'Suo ', 'Chiisai ', '[?] ', 'Wan ', 'Dian ', 'Pin ', 'Zhan ', 'Cui ', 'Min ', 'Yu ', 'Ju ', 'Chen ', 'Lai ', 'Wen ', 'Sheng ', 'Wei ', 'Dian ', 'Chu ', 'Zhuo ', 'Pei ', 'Cheng ', 'Hu ', 'Qi ', 'E ', 'Kun ', 'Chang ', 'Qi ', 'Beng ', 'Wan ', 'Lu ', 'Cong ', 'Guan ', 'Yan ', 'Diao ', 'Bei ', 'Lin ', 'Qin ', 'Pi ', 'Pa ', 'Que ', 'Zhuo ', 'Qin ', 'Fa ', '[?] ', 'Qiong ', 'Du ', 'Jie ', 'Hun ', 'Yu ', 'Mao ', 'Mei ', 'Chun ', 'Xuan ', 'Ti ', 'Xing ', 'Dai ', 'Rou ', 'Min ', 'Zhen ', 'Wei ', 'Ruan ', 'Huan ', 'Jie ', 'Chuan ', 'Jian ', 'Zhuan ', 'Yang ', 'Lian ', 'Quan ', 'Xia ', 'Duan ', 'Yuan ', 'Ye ', 'Nao ', 'Hu ', 'Ying ', 'Yu ', 'Huang ', 'Rui ', 'Se ', 'Liu ', 'Shi ', 'Rong ', 'Suo ', 'Yao ', 'Wen ', 'Wu ', 'Jin ', 'Jin ', 'Ying ', 'Ma ', 'Tao ', 'Liu ', 'Tang ', 'Li ', 'Lang ', 'Gui ', 'Zhen ', 'Qiang ', 'Cuo ', 'Jue ', 'Zhao ', 'Yao ', 'Ai ', 'Bin ', 'Tu ', 'Chang ', 'Kun ', 'Zhuan ', 'Cong ', 'Jin ', 'Yi ', 'Cui ', 'Cong ', 'Qi ', 'Li ', 'Ying ', 'Suo ', 'Qiu ', 'Xuan ', 'Ao ', 'Lian ', 'Man ', 'Zhang ', 'Yin ', '[?] ', 'Ying ', 'Zhi ', 'Lu ', 'Wu ', 'Deng ', 'Xiou ', 'Zeng ', 'Xun ', 'Qu ', 'Dang ', 'Lin ', 'Liao ', 'Qiong ', 'Su ', 'Huang ', 'Gui ', 'Pu ', 'Jing ', 'Fan ', 'Jin ', 'Liu ', 'Ji ', '[?] ', 'Jing ', 'Ai ', 'Bi ', 'Can ', 'Qu ', 'Zao ', 'Dang ', 'Jiao ', 'Gun ', 'Tan ', 'Hui ', 'Huan ', 'Se ', 'Sui ', 'Tian ', '[?] ', 'Yu ', 'Jin ', 'Lu ', 'Bin ', 'Shou ', 'Wen ', 'Zui ', 'Lan ', 'Xi ', 'Ji ', 'Xuan ', 'Ruan ', 'Huo ', 'Gai ', 'Lei ', 'Du ', 'Li ', 'Zhi ', 'Rou ', 'Li ', 'Zan ', 'Qiong ', 'Zhe ', 'Gui ', 'Sui ', 'La ', 'Long ', 'Lu ', 'Li ', 'Zan ', 'Lan ', 'Ying ', 'Mi ', 'Xiang ', 'Xi ', 'Guan ', 'Dao ', 'Zan ', 'Huan ', 'Gua ', 'Bo ', 'Die ', 'Bao ', 'Hu ', 'Zhi ', 'Piao ', 'Ban ', 'Rang ', 'Li ', 'Wa ', 'Dekaguramu ', 'Jiang ', 'Qian ', 'Fan ', 'Pen ', 'Fang ', 'Dan ', 'Weng ', 'Ou ', 'Deshiguramu ', 'Miriguramu ', 'Thon ', 'Hu ', 'Ling ', 'Yi ', 'Ping ', 'Ci ', 'Hekutogura ', 'Juan ', 'Chang ', 'Chi ', 'Sarake ', 'Dang ', 'Meng ', 'Pou '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x075.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x075.php
new file mode 100644
index 000000000..e20463390
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x075.php
@@ -0,0 +1 @@
+<?php return ['Zhui ', 'Ping ', 'Bian ', 'Zhou ', 'Zhen ', 'Senchigura ', 'Ci ', 'Ying ', 'Qi ', 'Xian ', 'Lou ', 'Di ', 'Ou ', 'Meng ', 'Zhuan ', 'Peng ', 'Lin ', 'Zeng ', 'Wu ', 'Pi ', 'Dan ', 'Weng ', 'Ying ', 'Yan ', 'Gan ', 'Dai ', 'Shen ', 'Tian ', 'Tian ', 'Han ', 'Chang ', 'Sheng ', 'Qing ', 'Sheng ', 'Chan ', 'Chan ', 'Rui ', 'Sheng ', 'Su ', 'Sen ', 'Yong ', 'Shuai ', 'Lu ', 'Fu ', 'Yong ', 'Beng ', 'Feng ', 'Ning ', 'Tian ', 'You ', 'Jia ', 'Shen ', 'Zha ', 'Dian ', 'Fu ', 'Nan ', 'Dian ', 'Ping ', 'Ting ', 'Hua ', 'Ting ', 'Quan ', 'Zi ', 'Meng ', 'Bi ', 'Qi ', 'Liu ', 'Xun ', 'Liu ', 'Chang ', 'Mu ', 'Yun ', 'Fan ', 'Fu ', 'Geng ', 'Tian ', 'Jie ', 'Jie ', 'Quan ', 'Wei ', 'Fu ', 'Tian ', 'Mu ', 'Tap ', 'Pan ', 'Jiang ', 'Wa ', 'Da ', 'Nan ', 'Liu ', 'Ben ', 'Zhen ', 'Chu ', 'Mu ', 'Mu ', 'Ce ', 'Cen ', 'Gai ', 'Bi ', 'Da ', 'Zhi ', 'Lue ', 'Qi ', 'Lue ', 'Pan ', 'Kesa ', 'Fan ', 'Hua ', 'Yu ', 'Yu ', 'Mu ', 'Jun ', 'Yi ', 'Liu ', 'Yu ', 'Die ', 'Chou ', 'Hua ', 'Dang ', 'Chuo ', 'Ji ', 'Wan ', 'Jiang ', 'Sheng ', 'Chang ', 'Tuan ', 'Lei ', 'Ji ', 'Cha ', 'Liu ', 'Tatamu ', 'Tuan ', 'Lin ', 'Jiang ', 'Jiang ', 'Chou ', 'Bo ', 'Die ', 'Die ', 'Pi ', 'Nie ', 'Dan ', 'Shu ', 'Shu ', 'Zhi ', 'Yi ', 'Chuang ', 'Nai ', 'Ding ', 'Bi ', 'Jie ', 'Liao ', 'Gong ', 'Ge ', 'Jiu ', 'Zhou ', 'Xia ', 'Shan ', 'Xu ', 'Nue ', 'Li ', 'Yang ', 'Chen ', 'You ', 'Ba ', 'Jie ', 'Jue ', 'Zhi ', 'Xia ', 'Cui ', 'Bi ', 'Yi ', 'Li ', 'Zong ', 'Chuang ', 'Feng ', 'Zhu ', 'Pao ', 'Pi ', 'Gan ', 'Ke ', 'Ci ', 'Xie ', 'Qi ', 'Dan ', 'Zhen ', 'Fa ', 'Zhi ', 'Teng ', 'Ju ', 'Ji ', 'Fei ', 'Qu ', 'Dian ', 'Jia ', 'Xian ', 'Cha ', 'Bing ', 'Ni ', 'Zheng ', 'Yong ', 'Jing ', 'Quan ', 'Chong ', 'Tong ', 'Yi ', 'Kai ', 'Wei ', 'Hui ', 'Duo ', 'Yang ', 'Chi ', 'Zhi ', 'Hen ', 'Ya ', 'Mei ', 'Dou ', 'Jing ', 'Xiao ', 'Tong ', 'Tu ', 'Mang ', 'Pi ', 'Xiao ', 'Suan ', 'Pu ', 'Li ', 'Zhi ', 'Cuo ', 'Duo ', 'Wu ', 'Sha ', 'Lao ', 'Shou ', 'Huan ', 'Xian ', 'Yi ', 'Peng ', 'Zhang ', 'Guan ', 'Tan ', 'Fei ', 'Ma ', 'Lin ', 'Chi ', 'Ji ', 'Dian ', 'An ', 'Chi ', 'Bi ', 'Bei ', 'Min ', 'Gu ', 'Dui ', 'E ', 'Wei '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x076.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x076.php
new file mode 100644
index 000000000..f55cb583f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x076.php
@@ -0,0 +1 @@
+<?php return ['Yu ', 'Cui ', 'Ya ', 'Zhu ', 'Cu ', 'Dan ', 'Shen ', 'Zhung ', 'Ji ', 'Yu ', 'Hou ', 'Feng ', 'La ', 'Yang ', 'Shen ', 'Tu ', 'Yu ', 'Gua ', 'Wen ', 'Huan ', 'Ku ', 'Jia ', 'Yin ', 'Yi ', 'Lu ', 'Sao ', 'Jue ', 'Chi ', 'Xi ', 'Guan ', 'Yi ', 'Wen ', 'Ji ', 'Chuang ', 'Ban ', 'Lei ', 'Liu ', 'Chai ', 'Shou ', 'Nue ', 'Dian ', 'Da ', 'Pie ', 'Tan ', 'Zhang ', 'Biao ', 'Shen ', 'Cu ', 'Luo ', 'Yi ', 'Zong ', 'Chou ', 'Zhang ', 'Zhai ', 'Sou ', 'Suo ', 'Que ', 'Diao ', 'Lou ', 'Lu ', 'Mo ', 'Jin ', 'Yin ', 'Ying ', 'Huang ', 'Fu ', 'Liao ', 'Long ', 'Qiao ', 'Liu ', 'Lao ', 'Xian ', 'Fei ', 'Dan ', 'Yin ', 'He ', 'Yan ', 'Ban ', 'Xian ', 'Guan ', 'Guai ', 'Nong ', 'Yu ', 'Wei ', 'Yi ', 'Yong ', 'Pi ', 'Lei ', 'Li ', 'Shu ', 'Dan ', 'Lin ', 'Dian ', 'Lin ', 'Lai ', 'Pie ', 'Ji ', 'Chi ', 'Yang ', 'Xian ', 'Jie ', 'Zheng ', '[?] ', 'Li ', 'Huo ', 'Lai ', 'Shaku ', 'Dian ', 'Xian ', 'Ying ', 'Yin ', 'Qu ', 'Yong ', 'Tan ', 'Dian ', 'Luo ', 'Luan ', 'Luan ', 'Bo ', '[?] ', 'Gui ', 'Po ', 'Fa ', 'Deng ', 'Fa ', 'Bai ', 'Bai ', 'Qie ', 'Bi ', 'Zao ', 'Zao ', 'Mao ', 'De ', 'Pa ', 'Jie ', 'Huang ', 'Gui ', 'Ci ', 'Ling ', 'Gao ', 'Mo ', 'Ji ', 'Jiao ', 'Peng ', 'Gao ', 'Ai ', 'E ', 'Hao ', 'Han ', 'Bi ', 'Wan ', 'Chou ', 'Qian ', 'Xi ', 'Ai ', 'Jiong ', 'Hao ', 'Huang ', 'Hao ', 'Ze ', 'Cui ', 'Hao ', 'Xiao ', 'Ye ', 'Po ', 'Hao ', 'Jiao ', 'Ai ', 'Xing ', 'Huang ', 'Li ', 'Piao ', 'He ', 'Jiao ', 'Pi ', 'Gan ', 'Pao ', 'Zhou ', 'Jun ', 'Qiu ', 'Cun ', 'Que ', 'Zha ', 'Gu ', 'Jun ', 'Jun ', 'Zhou ', 'Zha ', 'Gu ', 'Zhan ', 'Du ', 'Min ', 'Qi ', 'Ying ', 'Yu ', 'Bei ', 'Zhao ', 'Zhong ', 'Pen ', 'He ', 'Ying ', 'He ', 'Yi ', 'Bo ', 'Wan ', 'He ', 'Ang ', 'Zhan ', 'Yan ', 'Jian ', 'He ', 'Yu ', 'Kui ', 'Fan ', 'Gai ', 'Dao ', 'Pan ', 'Fu ', 'Qiu ', 'Sheng ', 'Dao ', 'Lu ', 'Zhan ', 'Meng ', 'Li ', 'Jin ', 'Xu ', 'Jian ', 'Pan ', 'Guan ', 'An ', 'Lu ', 'Shu ', 'Zhou ', 'Dang ', 'An ', 'Gu ', 'Li ', 'Mu ', 'Cheng ', 'Gan ', 'Xu ', 'Mang ', 'Mang ', 'Zhi ', 'Qi ', 'Ruan ', 'Tian ', 'Xiang ', 'Dun ', 'Xin ', 'Xi ', 'Pan ', 'Feng ', 'Dun ', 'Min '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x077.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x077.php
new file mode 100644
index 000000000..4b3bdb427
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x077.php
@@ -0,0 +1 @@
+<?php return ['Ming ', 'Sheng ', 'Shi ', 'Yun ', 'Mian ', 'Pan ', 'Fang ', 'Miao ', 'Dan ', 'Mei ', 'Mao ', 'Kan ', 'Xian ', 'Ou ', 'Shi ', 'Yang ', 'Zheng ', 'Yao ', 'Shen ', 'Huo ', 'Da ', 'Zhen ', 'Kuang ', 'Ju ', 'Shen ', 'Chi ', 'Sheng ', 'Mei ', 'Mo ', 'Zhu ', 'Zhen ', 'Zhen ', 'Mian ', 'Di ', 'Yuan ', 'Die ', 'Yi ', 'Zi ', 'Zi ', 'Chao ', 'Zha ', 'Xuan ', 'Bing ', 'Mi ', 'Long ', 'Sui ', 'Dong ', 'Mi ', 'Die ', 'Yi ', 'Er ', 'Ming ', 'Xuan ', 'Chi ', 'Kuang ', 'Juan ', 'Mou ', 'Zhen ', 'Tiao ', 'Yang ', 'Yan ', 'Mo ', 'Zhong ', 'Mai ', 'Zhao ', 'Zheng ', 'Mei ', 'Jun ', 'Shao ', 'Han ', 'Huan ', 'Di ', 'Cheng ', 'Cuo ', 'Juan ', 'E ', 'Wan ', 'Xian ', 'Xi ', 'Kun ', 'Lai ', 'Jian ', 'Shan ', 'Tian ', 'Hun ', 'Wan ', 'Ling ', 'Shi ', 'Qiong ', 'Lie ', 'Yai ', 'Jing ', 'Zheng ', 'Li ', 'Lai ', 'Sui ', 'Juan ', 'Shui ', 'Sui ', 'Du ', 'Bi ', 'Bi ', 'Mu ', 'Hun ', 'Ni ', 'Lu ', 'Yi ', 'Jie ', 'Cai ', 'Zhou ', 'Yu ', 'Hun ', 'Ma ', 'Xia ', 'Xing ', 'Xi ', 'Gun ', 'Cai ', 'Chun ', 'Jian ', 'Mei ', 'Du ', 'Hou ', 'Xuan ', 'Ti ', 'Kui ', 'Gao ', 'Rui ', 'Mou ', 'Xu ', 'Fa ', 'Wen ', 'Miao ', 'Chou ', 'Kui ', 'Mi ', 'Weng ', 'Kou ', 'Dang ', 'Chen ', 'Ke ', 'Sou ', 'Xia ', 'Qiong ', 'Mao ', 'Ming ', 'Man ', 'Shui ', 'Ze ', 'Zhang ', 'Yi ', 'Diao ', 'Ou ', 'Mo ', 'Shun ', 'Cong ', 'Lou ', 'Chi ', 'Man ', 'Piao ', 'Cheng ', 'Ji ', 'Meng ', '[?] ', 'Run ', 'Pie ', 'Xi ', 'Qiao ', 'Pu ', 'Zhu ', 'Deng ', 'Shen ', 'Shun ', 'Liao ', 'Che ', 'Xian ', 'Kan ', 'Ye ', 'Xu ', 'Tong ', 'Mou ', 'Lin ', 'Kui ', 'Xian ', 'Ye ', 'Ai ', 'Hui ', 'Zhan ', 'Jian ', 'Gu ', 'Zhao ', 'Qu ', 'Wei ', 'Chou ', 'Sao ', 'Ning ', 'Xun ', 'Yao ', 'Huo ', 'Meng ', 'Mian ', 'Bin ', 'Mian ', 'Li ', 'Kuang ', 'Jue ', 'Xuan ', 'Mian ', 'Huo ', 'Lu ', 'Meng ', 'Long ', 'Guan ', 'Man ', 'Xi ', 'Chu ', 'Tang ', 'Kan ', 'Zhu ', 'Mao ', 'Jin ', 'Lin ', 'Yu ', 'Shuo ', 'Ce ', 'Jue ', 'Shi ', 'Yi ', 'Shen ', 'Zhi ', 'Hou ', 'Shen ', 'Ying ', 'Ju ', 'Zhou ', 'Jiao ', 'Cuo ', 'Duan ', 'Ai ', 'Jiao ', 'Zeng ', 'Huo ', 'Bai ', 'Shi ', 'Ding ', 'Qi ', 'Ji ', 'Zi ', 'Gan ', 'Wu ', 'Tuo ', 'Ku ', 'Qiang ', 'Xi ', 'Fan ', 'Kuang '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x078.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x078.php
new file mode 100644
index 000000000..27597fce6
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x078.php
@@ -0,0 +1 @@
+<?php return ['Dang ', 'Ma ', 'Sha ', 'Dan ', 'Jue ', 'Li ', 'Fu ', 'Min ', 'Nuo ', 'Huo ', 'Kang ', 'Zhi ', 'Qi ', 'Kan ', 'Jie ', 'Fen ', 'E ', 'Ya ', 'Pi ', 'Zhe ', 'Yan ', 'Sui ', 'Zhuan ', 'Che ', 'Dun ', 'Pan ', 'Yan ', '[?] ', 'Feng ', 'Fa ', 'Mo ', 'Zha ', 'Qu ', 'Yu ', 'Luo ', 'Tuo ', 'Tuo ', 'Di ', 'Zhai ', 'Zhen ', 'Ai ', 'Fei ', 'Mu ', 'Zhu ', 'Li ', 'Bian ', 'Nu ', 'Ping ', 'Peng ', 'Ling ', 'Pao ', 'Le ', 'Po ', 'Bo ', 'Po ', 'Shen ', 'Za ', 'Nuo ', 'Li ', 'Long ', 'Tong ', '[?] ', 'Li ', 'Aragane ', 'Chu ', 'Keng ', 'Quan ', 'Zhu ', 'Kuang ', 'Huo ', 'E ', 'Nao ', 'Jia ', 'Lu ', 'Wei ', 'Ai ', 'Luo ', 'Ken ', 'Xing ', 'Yan ', 'Tong ', 'Peng ', 'Xi ', '[?] ', 'Hong ', 'Shuo ', 'Xia ', 'Qiao ', '[?] ', 'Wei ', 'Qiao ', '[?] ', 'Keng ', 'Xiao ', 'Que ', 'Chan ', 'Lang ', 'Hong ', 'Yu ', 'Xiao ', 'Xia ', 'Mang ', 'Long ', 'Iong ', 'Che ', 'Che ', 'E ', 'Liu ', 'Ying ', 'Mang ', 'Que ', 'Yan ', 'Sha ', 'Kun ', 'Yu ', '[?] ', 'Kaki ', 'Lu ', 'Chen ', 'Jian ', 'Nue ', 'Song ', 'Zhuo ', 'Keng ', 'Peng ', 'Yan ', 'Zhui ', 'Kong ', 'Ceng ', 'Qi ', 'Zong ', 'Qing ', 'Lin ', 'Jun ', 'Bo ', 'Ding ', 'Min ', 'Diao ', 'Jian ', 'He ', 'Lu ', 'Ai ', 'Sui ', 'Que ', 'Ling ', 'Bei ', 'Yin ', 'Dui ', 'Wu ', 'Qi ', 'Lun ', 'Wan ', 'Dian ', 'Gang ', 'Pei ', 'Qi ', 'Chen ', 'Ruan ', 'Yan ', 'Die ', 'Ding ', 'Du ', 'Tuo ', 'Jie ', 'Ying ', 'Bian ', 'Ke ', 'Bi ', 'Wei ', 'Shuo ', 'Zhen ', 'Duan ', 'Xia ', 'Dang ', 'Ti ', 'Nao ', 'Peng ', 'Jian ', 'Di ', 'Tan ', 'Cha ', 'Seki ', 'Qi ', '[?] ', 'Feng ', 'Xuan ', 'Que ', 'Que ', 'Ma ', 'Gong ', 'Nian ', 'Su ', 'E ', 'Ci ', 'Liu ', 'Si ', 'Tang ', 'Bang ', 'Hua ', 'Pi ', 'Wei ', 'Sang ', 'Lei ', 'Cuo ', 'Zhen ', 'Xia ', 'Qi ', 'Lian ', 'Pan ', 'Wei ', 'Yun ', 'Dui ', 'Zhe ', 'Ke ', 'La ', '[?] ', 'Qing ', 'Gun ', 'Zhuan ', 'Chan ', 'Qi ', 'Ao ', 'Peng ', 'Lu ', 'Lu ', 'Kan ', 'Qiang ', 'Chen ', 'Yin ', 'Lei ', 'Biao ', 'Qi ', 'Mo ', 'Qi ', 'Cui ', 'Zong ', 'Qing ', 'Chuo ', '[?] ', 'Ji ', 'Shan ', 'Lao ', 'Qu ', 'Zeng ', 'Deng ', 'Jian ', 'Xi ', 'Lin ', 'Ding ', 'Dian ', 'Huang ', 'Pan ', 'Za ', 'Qiao ', 'Di ', 'Li '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x079.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x079.php
new file mode 100644
index 000000000..f8beeecb9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x079.php
@@ -0,0 +1 @@
+<?php return ['Tani ', 'Jiao ', '[?] ', 'Zhang ', 'Qiao ', 'Dun ', 'Xian ', 'Yu ', 'Zhui ', 'He ', 'Huo ', 'Zhai ', 'Lei ', 'Ke ', 'Chu ', 'Ji ', 'Que ', 'Dang ', 'Yi ', 'Jiang ', 'Pi ', 'Pi ', 'Yu ', 'Pin ', 'Qi ', 'Ai ', 'Kai ', 'Jian ', 'Yu ', 'Ruan ', 'Meng ', 'Pao ', 'Ci ', '[?] ', '[?] ', 'Mie ', 'Ca ', 'Xian ', 'Kuang ', 'Lei ', 'Lei ', 'Zhi ', 'Li ', 'Li ', 'Fan ', 'Que ', 'Pao ', 'Ying ', 'Li ', 'Long ', 'Long ', 'Mo ', 'Bo ', 'Shuang ', 'Guan ', 'Lan ', 'Zan ', 'Yan ', 'Shi ', 'Shi ', 'Li ', 'Reng ', 'She ', 'Yue ', 'Si ', 'Qi ', 'Ta ', 'Ma ', 'Xie ', 'Xian ', 'Xian ', 'Zhi ', 'Qi ', 'Zhi ', 'Beng ', 'Dui ', 'Zhong ', '[?] ', 'Yi ', 'Shi ', 'You ', 'Zhi ', 'Tiao ', 'Fu ', 'Fu ', 'Mi ', 'Zu ', 'Zhi ', 'Suan ', 'Mei ', 'Zuo ', 'Qu ', 'Hu ', 'Zhu ', 'Shen ', 'Sui ', 'Ci ', 'Chai ', 'Mi ', 'Lu ', 'Yu ', 'Xiang ', 'Wu ', 'Tiao ', 'Piao ', 'Zhu ', 'Gui ', 'Xia ', 'Zhi ', 'Ji ', 'Gao ', 'Zhen ', 'Gao ', 'Shui ', 'Jin ', 'Chen ', 'Gai ', 'Kun ', 'Di ', 'Dao ', 'Huo ', 'Tao ', 'Qi ', 'Gu ', 'Guan ', 'Zui ', 'Ling ', 'Lu ', 'Bing ', 'Jin ', 'Dao ', 'Zhi ', 'Lu ', 'Shan ', 'Bei ', 'Zhe ', 'Hui ', 'You ', 'Xi ', 'Yin ', 'Zi ', 'Huo ', 'Zhen ', 'Fu ', 'Yuan ', 'Wu ', 'Xian ', 'Yang ', 'Ti ', 'Yi ', 'Mei ', 'Si ', 'Di ', '[?] ', 'Zhuo ', 'Zhen ', 'Yong ', 'Ji ', 'Gao ', 'Tang ', 'Si ', 'Ma ', 'Ta ', '[?] ', 'Xuan ', 'Qi ', 'Yu ', 'Xi ', 'Ji ', 'Si ', 'Chan ', 'Tan ', 'Kuai ', 'Sui ', 'Li ', 'Nong ', 'Ni ', 'Dao ', 'Li ', 'Rang ', 'Yue ', 'Ti ', 'Zan ', 'Lei ', 'Rou ', 'Yu ', 'Yu ', 'Chi ', 'Xie ', 'Qin ', 'He ', 'Tu ', 'Xiu ', 'Si ', 'Ren ', 'Tu ', 'Zi ', 'Cha ', 'Gan ', 'Yi ', 'Xian ', 'Bing ', 'Nian ', 'Qiu ', 'Qiu ', 'Chong ', 'Fen ', 'Hao ', 'Yun ', 'Ke ', 'Miao ', 'Zhi ', 'Geng ', 'Bi ', 'Zhi ', 'Yu ', 'Mi ', 'Ku ', 'Ban ', 'Pi ', 'Ni ', 'Li ', 'You ', 'Zu ', 'Pi ', 'Ba ', 'Ling ', 'Mo ', 'Cheng ', 'Nian ', 'Qin ', 'Yang ', 'Zuo ', 'Zhi ', 'Zhi ', 'Shu ', 'Ju ', 'Zi ', 'Huo ', 'Ji ', 'Cheng ', 'Tong ', 'Zhi ', 'Huo ', 'He ', 'Yin ', 'Zi ', 'Zhi ', 'Jie ', 'Ren ', 'Du ', 'Yi ', 'Zhu ', 'Hui ', 'Nong ', 'Fu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07a.php
new file mode 100644
index 000000000..0017baf99
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07a.php
@@ -0,0 +1 @@
+<?php return ['Xi ', 'Kao ', 'Lang ', 'Fu ', 'Ze ', 'Shui ', 'Lu ', 'Kun ', 'Gan ', 'Geng ', 'Ti ', 'Cheng ', 'Tu ', 'Shao ', 'Shui ', 'Ya ', 'Lun ', 'Lu ', 'Gu ', 'Zuo ', 'Ren ', 'Zhun ', 'Bang ', 'Bai ', 'Ji ', 'Zhi ', 'Zhi ', 'Kun ', 'Leng ', 'Peng ', 'Ke ', 'Bing ', 'Chou ', 'Zu ', 'Yu ', 'Su ', 'Lue ', '[?] ', 'Yi ', 'Xi ', 'Bian ', 'Ji ', 'Fu ', 'Bi ', 'Nuo ', 'Jie ', 'Zhong ', 'Zong ', 'Xu ', 'Cheng ', 'Dao ', 'Wen ', 'Lian ', 'Zi ', 'Yu ', 'Ji ', 'Xu ', 'Zhen ', 'Zhi ', 'Dao ', 'Jia ', 'Ji ', 'Gao ', 'Gao ', 'Gu ', 'Rong ', 'Sui ', 'You ', 'Ji ', 'Kang ', 'Mu ', 'Shan ', 'Men ', 'Zhi ', 'Ji ', 'Lu ', 'Su ', 'Ji ', 'Ying ', 'Wen ', 'Qiu ', 'Se ', '[?] ', 'Yi ', 'Huang ', 'Qie ', 'Ji ', 'Sui ', 'Xiao ', 'Pu ', 'Jiao ', 'Zhuo ', 'Tong ', 'Sai ', 'Lu ', 'Sui ', 'Nong ', 'Se ', 'Hui ', 'Rang ', 'Nuo ', 'Yu ', 'Bin ', 'Ji ', 'Tui ', 'Wen ', 'Cheng ', 'Huo ', 'Gong ', 'Lu ', 'Biao ', '[?] ', 'Rang ', 'Zhuo ', 'Li ', 'Zan ', 'Xue ', 'Wa ', 'Jiu ', 'Qiong ', 'Xi ', 'Qiong ', 'Kong ', 'Yu ', 'Sen ', 'Jing ', 'Yao ', 'Chuan ', 'Zhun ', 'Tu ', 'Lao ', 'Qie ', 'Zhai ', 'Yao ', 'Bian ', 'Bao ', 'Yao ', 'Bing ', 'Wa ', 'Zhu ', 'Jiao ', 'Qiao ', 'Diao ', 'Wu ', 'Gui ', 'Yao ', 'Zhi ', 'Chuang ', 'Yao ', 'Tiao ', 'Jiao ', 'Chuang ', 'Jiong ', 'Xiao ', 'Cheng ', 'Kou ', 'Cuan ', 'Wo ', 'Dan ', 'Ku ', 'Ke ', 'Zhui ', 'Xu ', 'Su ', 'Guan ', 'Kui ', 'Dou ', '[?] ', 'Yin ', 'Wo ', 'Wa ', 'Ya ', 'Yu ', 'Ju ', 'Qiong ', 'Yao ', 'Yao ', 'Tiao ', 'Chao ', 'Yu ', 'Tian ', 'Diao ', 'Ju ', 'Liao ', 'Xi ', 'Wu ', 'Kui ', 'Chuang ', 'Zhao ', '[?] ', 'Kuan ', 'Long ', 'Cheng ', 'Cui ', 'Piao ', 'Zao ', 'Cuan ', 'Qiao ', 'Qiong ', 'Dou ', 'Zao ', 'Long ', 'Qie ', 'Li ', 'Chu ', 'Shi ', 'Fou ', 'Qian ', 'Chu ', 'Hong ', 'Qi ', 'Qian ', 'Gong ', 'Shi ', 'Shu ', 'Miao ', 'Ju ', 'Zhan ', 'Zhu ', 'Ling ', 'Long ', 'Bing ', 'Jing ', 'Jing ', 'Zhang ', 'Yi ', 'Si ', 'Jun ', 'Hong ', 'Tong ', 'Song ', 'Jing ', 'Diao ', 'Yi ', 'Shu ', 'Jing ', 'Qu ', 'Jie ', 'Ping ', 'Duan ', 'Shao ', 'Zhuan ', 'Ceng ', 'Deng ', 'Cui ', 'Huai ', 'Jing ', 'Kan ', 'Jing ', 'Zhu ', 'Zhu ', 'Le ', 'Peng ', 'Yu ', 'Chi ', 'Gan '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07b.php
new file mode 100644
index 000000000..6f74b80ef
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07b.php
@@ -0,0 +1 @@
+<?php return ['Mang ', 'Zhu ', 'Utsubo ', 'Du ', 'Ji ', 'Xiao ', 'Ba ', 'Suan ', 'Ji ', 'Zhen ', 'Zhao ', 'Sun ', 'Ya ', 'Zhui ', 'Yuan ', 'Hu ', 'Gang ', 'Xiao ', 'Cen ', 'Pi ', 'Bi ', 'Jian ', 'Yi ', 'Dong ', 'Shan ', 'Sheng ', 'Xia ', 'Di ', 'Zhu ', 'Na ', 'Chi ', 'Gu ', 'Li ', 'Qie ', 'Min ', 'Bao ', 'Tiao ', 'Si ', 'Fu ', 'Ce ', 'Ben ', 'Pei ', 'Da ', 'Zi ', 'Di ', 'Ling ', 'Ze ', 'Nu ', 'Fu ', 'Gou ', 'Fan ', 'Jia ', 'Ge ', 'Fan ', 'Shi ', 'Mao ', 'Po ', 'Sey ', 'Jian ', 'Qiong ', 'Long ', 'Souke ', 'Bian ', 'Luo ', 'Gui ', 'Qu ', 'Chi ', 'Yin ', 'Yao ', 'Xian ', 'Bi ', 'Qiong ', 'Gua ', 'Deng ', 'Jiao ', 'Jin ', 'Quan ', 'Sun ', 'Ru ', 'Fa ', 'Kuang ', 'Zhu ', 'Tong ', 'Ji ', 'Da ', 'Xing ', 'Ce ', 'Zhong ', 'Kou ', 'Lai ', 'Bi ', 'Shai ', 'Dang ', 'Zheng ', 'Ce ', 'Fu ', 'Yun ', 'Tu ', 'Pa ', 'Li ', 'Lang ', 'Ju ', 'Guan ', 'Jian ', 'Han ', 'Tong ', 'Xia ', 'Zhi ', 'Cheng ', 'Suan ', 'Shi ', 'Zhu ', 'Zuo ', 'Xiao ', 'Shao ', 'Ting ', 'Ce ', 'Yan ', 'Gao ', 'Kuai ', 'Gan ', 'Chou ', 'Kago ', 'Gang ', 'Yun ', 'O ', 'Qian ', 'Xiao ', 'Jian ', 'Pu ', 'Lai ', 'Zou ', 'Bi ', 'Bi ', 'Bi ', 'Ge ', 'Chi ', 'Guai ', 'Yu ', 'Jian ', 'Zhao ', 'Gu ', 'Chi ', 'Zheng ', 'Jing ', 'Sha ', 'Zhou ', 'Lu ', 'Bo ', 'Ji ', 'Lin ', 'Suan ', 'Jun ', 'Fu ', 'Zha ', 'Gu ', 'Kong ', 'Qian ', 'Quan ', 'Jun ', 'Chui ', 'Guan ', 'Yuan ', 'Ce ', 'Ju ', 'Bo ', 'Ze ', 'Qie ', 'Tuo ', 'Luo ', 'Dan ', 'Xiao ', 'Ruo ', 'Jian ', 'Xuan ', 'Bian ', 'Sun ', 'Xiang ', 'Xian ', 'Ping ', 'Zhen ', 'Sheng ', 'Hu ', 'Shi ', 'Zhu ', 'Yue ', 'Chun ', 'Lu ', 'Wu ', 'Dong ', 'Xiao ', 'Ji ', 'Jie ', 'Huang ', 'Xing ', 'Mei ', 'Fan ', 'Chui ', 'Zhuan ', 'Pian ', 'Feng ', 'Zhu ', 'Hong ', 'Qie ', 'Hou ', 'Qiu ', 'Miao ', 'Qian ', '[?] ', 'Kui ', 'Sik ', 'Lou ', 'Yun ', 'He ', 'Tang ', 'Yue ', 'Chou ', 'Gao ', 'Fei ', 'Ruo ', 'Zheng ', 'Gou ', 'Nie ', 'Qian ', 'Xiao ', 'Cuan ', 'Gong ', 'Pang ', 'Du ', 'Li ', 'Bi ', 'Zhuo ', 'Chu ', 'Shai ', 'Chi ', 'Zhu ', 'Qiang ', 'Long ', 'Lan ', 'Jian ', 'Bu ', 'Li ', 'Hui ', 'Bi ', 'Di ', 'Cong ', 'Yan ', 'Peng ', 'Sen ', 'Zhuan ', 'Pai ', 'Piao ', 'Dou ', 'Yu ', 'Mie ', 'Zhuan '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07c.php
new file mode 100644
index 000000000..93321f844
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07c.php
@@ -0,0 +1 @@
+<?php return ['Ze ', 'Xi ', 'Guo ', 'Yi ', 'Hu ', 'Chan ', 'Kou ', 'Cu ', 'Ping ', 'Chou ', 'Ji ', 'Gui ', 'Su ', 'Lou ', 'Zha ', 'Lu ', 'Nian ', 'Suo ', 'Cuan ', 'Sasara ', 'Suo ', 'Le ', 'Duan ', 'Yana ', 'Xiao ', 'Bo ', 'Mi ', 'Si ', 'Dang ', 'Liao ', 'Dan ', 'Dian ', 'Fu ', 'Jian ', 'Min ', 'Kui ', 'Dai ', 'Qiao ', 'Deng ', 'Huang ', 'Sun ', 'Lao ', 'Zan ', 'Xiao ', 'Du ', 'Shi ', 'Zan ', '[?] ', 'Pai ', 'Hata ', 'Pai ', 'Gan ', 'Ju ', 'Du ', 'Lu ', 'Yan ', 'Bo ', 'Dang ', 'Sai ', 'Ke ', 'Long ', 'Qian ', 'Lian ', 'Bo ', 'Zhou ', 'Lai ', '[?] ', 'Lan ', 'Kui ', 'Yu ', 'Yue ', 'Hao ', 'Zhen ', 'Tai ', 'Ti ', 'Mi ', 'Chou ', 'Ji ', '[?] ', 'Hata ', 'Teng ', 'Zhuan ', 'Zhou ', 'Fan ', 'Sou ', 'Zhou ', 'Kuji ', 'Zhuo ', 'Teng ', 'Lu ', 'Lu ', 'Jian ', 'Tuo ', 'Ying ', 'Yu ', 'Lai ', 'Long ', 'Shinshi ', 'Lian ', 'Lan ', 'Qian ', 'Yue ', 'Zhong ', 'Qu ', 'Lian ', 'Bian ', 'Duan ', 'Zuan ', 'Li ', 'Si ', 'Luo ', 'Ying ', 'Yue ', 'Zhuo ', 'Xu ', 'Mi ', 'Di ', 'Fan ', 'Shen ', 'Zhe ', 'Shen ', 'Nu ', 'Xie ', 'Lei ', 'Xian ', 'Zi ', 'Ni ', 'Cun ', '[?] ', 'Qian ', 'Kume ', 'Bi ', 'Ban ', 'Wu ', 'Sha ', 'Kang ', 'Rou ', 'Fen ', 'Bi ', 'Cui ', '[?] ', 'Li ', 'Chi ', 'Nukamiso ', 'Ro ', 'Ba ', 'Li ', 'Gan ', 'Ju ', 'Po ', 'Mo ', 'Cu ', 'Nian ', 'Zhou ', 'Li ', 'Su ', 'Tiao ', 'Li ', 'Qi ', 'Su ', 'Hong ', 'Tong ', 'Zi ', 'Ce ', 'Yue ', 'Zhou ', 'Lin ', 'Zhuang ', 'Bai ', '[?] ', 'Fen ', 'Ji ', '[?] ', 'Sukumo ', 'Liang ', 'Xian ', 'Fu ', 'Liang ', 'Can ', 'Geng ', 'Li ', 'Yue ', 'Lu ', 'Ju ', 'Qi ', 'Cui ', 'Bai ', 'Zhang ', 'Lin ', 'Zong ', 'Jing ', 'Guo ', 'Kouji ', 'San ', 'San ', 'Tang ', 'Bian ', 'Rou ', 'Mian ', 'Hou ', 'Xu ', 'Zong ', 'Hu ', 'Jian ', 'Zan ', 'Ci ', 'Li ', 'Xie ', 'Fu ', 'Ni ', 'Bei ', 'Gu ', 'Xiu ', 'Gao ', 'Tang ', 'Qiu ', 'Sukumo ', 'Cao ', 'Zhuang ', 'Tang ', 'Mi ', 'San ', 'Fen ', 'Zao ', 'Kang ', 'Jiang ', 'Mo ', 'San ', 'San ', 'Nuo ', 'Xi ', 'Liang ', 'Jiang ', 'Kuai ', 'Bo ', 'Huan ', '[?] ', 'Zong ', 'Xian ', 'Nuo ', 'Tuan ', 'Nie ', 'Li ', 'Zuo ', 'Di ', 'Nie ', 'Tiao ', 'Lan ', 'Mi ', 'Jiao ', 'Jiu ', 'Xi ', 'Gong ', 'Zheng ', 'Jiu ', 'You '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07d.php
new file mode 100644
index 000000000..6d05a298a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07d.php
@@ -0,0 +1 @@
+<?php return ['Ji ', 'Cha ', 'Zhou ', 'Xun ', 'Yue ', 'Hong ', 'Yu ', 'He ', 'Wan ', 'Ren ', 'Wen ', 'Wen ', 'Qiu ', 'Na ', 'Zi ', 'Tou ', 'Niu ', 'Fou ', 'Jie ', 'Shu ', 'Chun ', 'Pi ', 'Yin ', 'Sha ', 'Hong ', 'Zhi ', 'Ji ', 'Fen ', 'Yun ', 'Ren ', 'Dan ', 'Jin ', 'Su ', 'Fang ', 'Suo ', 'Cui ', 'Jiu ', 'Zha ', 'Kinu ', 'Jin ', 'Fu ', 'Zhi ', 'Ci ', 'Zi ', 'Chou ', 'Hong ', 'Zha ', 'Lei ', 'Xi ', 'Fu ', 'Xie ', 'Shen ', 'Bei ', 'Zhu ', 'Qu ', 'Ling ', 'Zhu ', 'Shao ', 'Gan ', 'Yang ', 'Fu ', 'Tuo ', 'Zhen ', 'Dai ', 'Zhuo ', 'Shi ', 'Zhong ', 'Xian ', 'Zu ', 'Jiong ', 'Ban ', 'Ju ', 'Mo ', 'Shu ', 'Zui ', 'Wata ', 'Jing ', 'Ren ', 'Heng ', 'Xie ', 'Jie ', 'Zhu ', 'Chou ', 'Gua ', 'Bai ', 'Jue ', 'Kuang ', 'Hu ', 'Ci ', 'Geng ', 'Geng ', 'Tao ', 'Xie ', 'Ku ', 'Jiao ', 'Quan ', 'Gai ', 'Luo ', 'Xuan ', 'Bing ', 'Xian ', 'Fu ', 'Gei ', 'Tong ', 'Rong ', 'Tiao ', 'Yin ', 'Lei ', 'Xie ', 'Quan ', 'Xu ', 'Lun ', 'Die ', 'Tong ', 'Si ', 'Jiang ', 'Xiang ', 'Hui ', 'Jue ', 'Zhi ', 'Jian ', 'Juan ', 'Chi ', 'Mian ', 'Zhen ', 'Lu ', 'Cheng ', 'Qiu ', 'Shu ', 'Bang ', 'Tong ', 'Xiao ', 'Wan ', 'Qin ', 'Geng ', 'Xiu ', 'Ti ', 'Xiu ', 'Xie ', 'Hong ', 'Xi ', 'Fu ', 'Ting ', 'Sui ', 'Dui ', 'Kun ', 'Fu ', 'Jing ', 'Hu ', 'Zhi ', 'Yan ', 'Jiong ', 'Feng ', 'Ji ', 'Sok ', 'Kase ', 'Zong ', 'Lin ', 'Duo ', 'Li ', 'Lu ', 'Liang ', 'Chou ', 'Quan ', 'Shao ', 'Qi ', 'Qi ', 'Zhun ', 'Qi ', 'Wan ', 'Qian ', 'Xian ', 'Shou ', 'Wei ', 'Qi ', 'Tao ', 'Wan ', 'Gang ', 'Wang ', 'Beng ', 'Zhui ', 'Cai ', 'Guo ', 'Cui ', 'Lun ', 'Liu ', 'Qi ', 'Zhan ', 'Bei ', 'Chuo ', 'Ling ', 'Mian ', 'Qi ', 'Qie ', 'Tan ', 'Zong ', 'Gun ', 'Zou ', 'Yi ', 'Zi ', 'Xing ', 'Liang ', 'Jin ', 'Fei ', 'Rui ', 'Min ', 'Yu ', 'Zong ', 'Fan ', 'Lu ', 'Xu ', 'Yingl ', 'Zhang ', 'Kasuri ', 'Xu ', 'Xiang ', 'Jian ', 'Ke ', 'Xian ', 'Ruan ', 'Mian ', 'Qi ', 'Duan ', 'Zhong ', 'Di ', 'Min ', 'Miao ', 'Yuan ', 'Xie ', 'Bao ', 'Si ', 'Qiu ', 'Bian ', 'Huan ', 'Geng ', 'Cong ', 'Mian ', 'Wei ', 'Fu ', 'Wei ', 'Yu ', 'Gou ', 'Miao ', 'Xie ', 'Lian ', 'Zong ', 'Bian ', 'Yun ', 'Yin ', 'Ti ', 'Gua ', 'Zhi ', 'Yun ', 'Cheng ', 'Chan ', 'Dai '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07e.php
new file mode 100644
index 000000000..83a776fbd
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07e.php
@@ -0,0 +1 @@
+<?php return ['Xia ', 'Yuan ', 'Zong ', 'Xu ', 'Nawa ', 'Odoshi ', 'Geng ', 'Sen ', 'Ying ', 'Jin ', 'Yi ', 'Zhui ', 'Ni ', 'Bang ', 'Gu ', 'Pan ', 'Zhou ', 'Jian ', 'Cuo ', 'Quan ', 'Shuang ', 'Yun ', 'Xia ', 'Shuai ', 'Xi ', 'Rong ', 'Tao ', 'Fu ', 'Yun ', 'Zhen ', 'Gao ', 'Ru ', 'Hu ', 'Zai ', 'Teng ', 'Xian ', 'Su ', 'Zhen ', 'Zong ', 'Tao ', 'Horo ', 'Cai ', 'Bi ', 'Feng ', 'Cu ', 'Li ', 'Suo ', 'Yin ', 'Xi ', 'Zong ', 'Lei ', 'Zhuan ', 'Qian ', 'Man ', 'Zhi ', 'Lu ', 'Mo ', 'Piao ', 'Lian ', 'Mi ', 'Xuan ', 'Zong ', 'Ji ', 'Shan ', 'Sui ', 'Fan ', 'Shuai ', 'Beng ', 'Yi ', 'Sao ', 'Mou ', 'Zhou ', 'Qiang ', 'Hun ', 'Sem ', 'Xi ', 'Jung ', 'Xiu ', 'Ran ', 'Xuan ', 'Hui ', 'Qiao ', 'Zeng ', 'Zuo ', 'Zhi ', 'Shan ', 'San ', 'Lin ', 'Yu ', 'Fan ', 'Liao ', 'Chuo ', 'Zun ', 'Jian ', 'Rao ', 'Chan ', 'Rui ', 'Xiu ', 'Hui ', 'Hua ', 'Zuan ', 'Xi ', 'Qiang ', 'Un ', 'Da ', 'Sheng ', 'Hui ', 'Xi ', 'Se ', 'Jian ', 'Jiang ', 'Huan ', 'Zao ', 'Cong ', 'Jie ', 'Jiao ', 'Bo ', 'Chan ', 'Yi ', 'Nao ', 'Sui ', 'Yi ', 'Shai ', 'Xu ', 'Ji ', 'Bin ', 'Qian ', 'Lan ', 'Pu ', 'Xun ', 'Zuan ', 'Qi ', 'Peng ', 'Li ', 'Mo ', 'Lei ', 'Xie ', 'Zuan ', 'Kuang ', 'You ', 'Xu ', 'Lei ', 'Xian ', 'Chan ', 'Kou ', 'Lu ', 'Chan ', 'Ying ', 'Cai ', 'Xiang ', 'Xian ', 'Zui ', 'Zuan ', 'Luo ', 'Xi ', 'Dao ', 'Lan ', 'Lei ', 'Lian ', 'Si ', 'Jiu ', 'Yu ', 'Hong ', 'Zhou ', 'Xian ', 'He ', 'Yue ', 'Ji ', 'Wan ', 'Kuang ', 'Ji ', 'Ren ', 'Wei ', 'Yun ', 'Hong ', 'Chun ', 'Pi ', 'Sha ', 'Gang ', 'Na ', 'Ren ', 'Zong ', 'Lun ', 'Fen ', 'Zhi ', 'Wen ', 'Fang ', 'Zhu ', 'Yin ', 'Niu ', 'Shu ', 'Xian ', 'Gan ', 'Xie ', 'Fu ', 'Lian ', 'Zu ', 'Shen ', 'Xi ', 'Zhi ', 'Zhong ', 'Zhou ', 'Ban ', 'Fu ', 'Zhuo ', 'Shao ', 'Yi ', 'Jing ', 'Dai ', 'Bang ', 'Rong ', 'Jie ', 'Ku ', 'Rao ', 'Die ', 'Heng ', 'Hui ', 'Gei ', 'Xuan ', 'Jiang ', 'Luo ', 'Jue ', 'Jiao ', 'Tong ', 'Geng ', 'Xiao ', 'Juan ', 'Xiu ', 'Xi ', 'Sui ', 'Tao ', 'Ji ', 'Ti ', 'Ji ', 'Xu ', 'Ling ', '[?] ', 'Xu ', 'Qi ', 'Fei ', 'Chuo ', 'Zhang ', 'Gun ', 'Sheng ', 'Wei ', 'Mian ', 'Shou ', 'Beng ', 'Chou ', 'Tao ', 'Liu ', 'Quan ', 'Zong ', 'Zhan ', 'Wan ', 'Lu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x07f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x07f.php
new file mode 100644
index 000000000..22e58a9da
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x07f.php
@@ -0,0 +1 @@
+<?php return ['Zhui ', 'Zi ', 'Ke ', 'Xiang ', 'Jian ', 'Mian ', 'Lan ', 'Ti ', 'Miao ', 'Qi ', 'Yun ', 'Hui ', 'Si ', 'Duo ', 'Duan ', 'Bian ', 'Xian ', 'Gou ', 'Zhui ', 'Huan ', 'Di ', 'Lu ', 'Bian ', 'Min ', 'Yuan ', 'Jin ', 'Fu ', 'Ru ', 'Zhen ', 'Feng ', 'Shuai ', 'Gao ', 'Chan ', 'Li ', 'Yi ', 'Jian ', 'Bin ', 'Piao ', 'Man ', 'Lei ', 'Ying ', 'Suo ', 'Mou ', 'Sao ', 'Xie ', 'Liao ', 'Shan ', 'Zeng ', 'Jiang ', 'Qian ', 'Zao ', 'Huan ', 'Jiao ', 'Zuan ', 'Fou ', 'Xie ', 'Gang ', 'Fou ', 'Que ', 'Fou ', 'Kaakeru ', 'Bo ', 'Ping ', 'Hou ', '[?] ', 'Gang ', 'Ying ', 'Ying ', 'Qing ', 'Xia ', 'Guan ', 'Zun ', 'Tan ', 'Chang ', 'Qi ', 'Weng ', 'Ying ', 'Lei ', 'Tan ', 'Lu ', 'Guan ', 'Wang ', 'Wang ', 'Gang ', 'Wang ', 'Han ', '[?] ', 'Luo ', 'Fu ', 'Mi ', 'Fa ', 'Gu ', 'Zhu ', 'Ju ', 'Mao ', 'Gu ', 'Min ', 'Gang ', 'Ba ', 'Gua ', 'Ti ', 'Juan ', 'Fu ', 'Lin ', 'Yan ', 'Zhao ', 'Zui ', 'Gua ', 'Zhuo ', 'Yu ', 'Zhi ', 'An ', 'Fa ', 'Nan ', 'Shu ', 'Si ', 'Pi ', 'Ma ', 'Liu ', 'Ba ', 'Fa ', 'Li ', 'Chao ', 'Wei ', 'Bi ', 'Ji ', 'Zeng ', 'Tong ', 'Liu ', 'Ji ', 'Juan ', 'Mi ', 'Zhao ', 'Luo ', 'Pi ', 'Ji ', 'Ji ', 'Luan ', 'Yang ', 'Mie ', 'Qiang ', 'Ta ', 'Mei ', 'Yang ', 'You ', 'You ', 'Fen ', 'Ba ', 'Gao ', 'Yang ', 'Gu ', 'Qiang ', 'Zang ', 'Gao ', 'Ling ', 'Yi ', 'Zhu ', 'Di ', 'Xiu ', 'Qian ', 'Yi ', 'Xian ', 'Rong ', 'Qun ', 'Qun ', 'Qian ', 'Huan ', 'Zui ', 'Xian ', 'Yi ', 'Yashinau ', 'Qiang ', 'Xian ', 'Yu ', 'Geng ', 'Jie ', 'Tang ', 'Yuan ', 'Xi ', 'Fan ', 'Shan ', 'Fen ', 'Shan ', 'Lian ', 'Lei ', 'Geng ', 'Nou ', 'Qiang ', 'Chan ', 'Yu ', 'Gong ', 'Yi ', 'Chong ', 'Weng ', 'Fen ', 'Hong ', 'Chi ', 'Chi ', 'Cui ', 'Fu ', 'Xia ', 'Pen ', 'Yi ', 'La ', 'Yi ', 'Pi ', 'Ling ', 'Liu ', 'Zhi ', 'Qu ', 'Xi ', 'Xie ', 'Xiang ', 'Xi ', 'Xi ', 'Qi ', 'Qiao ', 'Hui ', 'Hui ', 'Xiao ', 'Se ', 'Hong ', 'Jiang ', 'Di ', 'Cui ', 'Fei ', 'Tao ', 'Sha ', 'Chi ', 'Zhu ', 'Jian ', 'Xuan ', 'Shi ', 'Pian ', 'Zong ', 'Wan ', 'Hui ', 'Hou ', 'He ', 'He ', 'Han ', 'Ao ', 'Piao ', 'Yi ', 'Lian ', 'Qu ', '[?] ', 'Lin ', 'Pen ', 'Qiao ', 'Ao ', 'Fan ', 'Yi ', 'Hui ', 'Xuan ', 'Dao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x080.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x080.php
new file mode 100644
index 000000000..8548ed89d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x080.php
@@ -0,0 +1 @@
+<?php return ['Yao ', 'Lao ', '[?] ', 'Kao ', 'Mao ', 'Zhe ', 'Qi ', 'Gou ', 'Gou ', 'Gou ', 'Die ', 'Die ', 'Er ', 'Shua ', 'Ruan ', 'Er ', 'Nai ', 'Zhuan ', 'Lei ', 'Ting ', 'Zi ', 'Geng ', 'Chao ', 'Hao ', 'Yun ', 'Pa ', 'Pi ', 'Chi ', 'Si ', 'Chu ', 'Jia ', 'Ju ', 'He ', 'Chu ', 'Lao ', 'Lun ', 'Ji ', 'Tang ', 'Ou ', 'Lou ', 'Nou ', 'Gou ', 'Pang ', 'Ze ', 'Lou ', 'Ji ', 'Lao ', 'Huo ', 'You ', 'Mo ', 'Huai ', 'Er ', 'Zhe ', 'Ting ', 'Ye ', 'Da ', 'Song ', 'Qin ', 'Yun ', 'Chi ', 'Dan ', 'Dan ', 'Hong ', 'Geng ', 'Zhi ', '[?] ', 'Nie ', 'Dan ', 'Zhen ', 'Che ', 'Ling ', 'Zheng ', 'You ', 'Wa ', 'Liao ', 'Long ', 'Zhi ', 'Ning ', 'Tiao ', 'Er ', 'Ya ', 'Die ', 'Gua ', '[?] ', 'Lian ', 'Hao ', 'Sheng ', 'Lie ', 'Pin ', 'Jing ', 'Ju ', 'Bi ', 'Di ', 'Guo ', 'Wen ', 'Xu ', 'Ping ', 'Cong ', 'Shikato ', '[?] ', 'Ting ', 'Yu ', 'Cong ', 'Kui ', 'Tsuraneru ', 'Kui ', 'Cong ', 'Lian ', 'Weng ', 'Kui ', 'Lian ', 'Lian ', 'Cong ', 'Ao ', 'Sheng ', 'Song ', 'Ting ', 'Kui ', 'Nie ', 'Zhi ', 'Dan ', 'Ning ', 'Qie ', 'Ji ', 'Ting ', 'Ting ', 'Long ', 'Yu ', 'Yu ', 'Zhao ', 'Si ', 'Su ', 'Yi ', 'Su ', 'Si ', 'Zhao ', 'Zhao ', 'Rou ', 'Yi ', 'Le ', 'Ji ', 'Qiu ', 'Ken ', 'Cao ', 'Ge ', 'Di ', 'Huan ', 'Huang ', 'Yi ', 'Ren ', 'Xiao ', 'Ru ', 'Zhou ', 'Yuan ', 'Du ', 'Gang ', 'Rong ', 'Gan ', 'Cha ', 'Wo ', 'Chang ', 'Gu ', 'Zhi ', 'Han ', 'Fu ', 'Fei ', 'Fen ', 'Pei ', 'Pang ', 'Jian ', 'Fang ', 'Zhun ', 'You ', 'Na ', 'Hang ', 'Ken ', 'Ran ', 'Gong ', 'Yu ', 'Wen ', 'Yao ', 'Jin ', 'Pi ', 'Qian ', 'Xi ', 'Xi ', 'Fei ', 'Ken ', 'Jing ', 'Tai ', 'Shen ', 'Zhong ', 'Zhang ', 'Xie ', 'Shen ', 'Wei ', 'Zhou ', 'Die ', 'Dan ', 'Fei ', 'Ba ', 'Bo ', 'Qu ', 'Tian ', 'Bei ', 'Gua ', 'Tai ', 'Zi ', 'Ku ', 'Zhi ', 'Ni ', 'Ping ', 'Zi ', 'Fu ', 'Pang ', 'Zhen ', 'Xian ', 'Zuo ', 'Pei ', 'Jia ', 'Sheng ', 'Zhi ', 'Bao ', 'Mu ', 'Qu ', 'Hu ', 'Ke ', 'Yi ', 'Yin ', 'Xu ', 'Yang ', 'Long ', 'Dong ', 'Ka ', 'Lu ', 'Jing ', 'Nu ', 'Yan ', 'Pang ', 'Kua ', 'Yi ', 'Guang ', 'Gai ', 'Ge ', 'Dong ', 'Zhi ', 'Xiao ', 'Xiong ', 'Xiong ', 'Er ', 'E ', 'Xing ', 'Pian ', 'Neng ', 'Zi ', 'Gui '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x081.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x081.php
new file mode 100644
index 000000000..daab08c15
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x081.php
@@ -0,0 +1 @@
+<?php return ['Cheng ', 'Tiao ', 'Zhi ', 'Cui ', 'Mei ', 'Xie ', 'Cui ', 'Xie ', 'Mo ', 'Mai ', 'Ji ', 'Obiyaakasu ', '[?] ', 'Kuai ', 'Sa ', 'Zang ', 'Qi ', 'Nao ', 'Mi ', 'Nong ', 'Luan ', 'Wan ', 'Bo ', 'Wen ', 'Guan ', 'Qiu ', 'Jiao ', 'Jing ', 'Rou ', 'Heng ', 'Cuo ', 'Lie ', 'Shan ', 'Ting ', 'Mei ', 'Chun ', 'Shen ', 'Xie ', 'De ', 'Zui ', 'Cu ', 'Xiu ', 'Xin ', 'Tuo ', 'Pao ', 'Cheng ', 'Nei ', 'Fu ', 'Dou ', 'Tuo ', 'Niao ', 'Noy ', 'Pi ', 'Gu ', 'Gua ', 'Li ', 'Lian ', 'Zhang ', 'Cui ', 'Jie ', 'Liang ', 'Zhou ', 'Pi ', 'Biao ', 'Lun ', 'Pian ', 'Guo ', 'Kui ', 'Chui ', 'Dan ', 'Tian ', 'Nei ', 'Jing ', 'Jie ', 'La ', 'Yi ', 'An ', 'Ren ', 'Shen ', 'Chuo ', 'Fu ', 'Fu ', 'Ju ', 'Fei ', 'Qiang ', 'Wan ', 'Dong ', 'Pi ', 'Guo ', 'Zong ', 'Ding ', 'Wu ', 'Mei ', 'Ruan ', 'Zhuan ', 'Zhi ', 'Cou ', 'Gua ', 'Ou ', 'Di ', 'An ', 'Xing ', 'Nao ', 'Yu ', 'Chuan ', 'Nan ', 'Yun ', 'Zhong ', 'Rou ', 'E ', 'Sai ', 'Tu ', 'Yao ', 'Jian ', 'Wei ', 'Jiao ', 'Yu ', 'Jia ', 'Duan ', 'Bi ', 'Chang ', 'Fu ', 'Xian ', 'Ni ', 'Mian ', 'Wa ', 'Teng ', 'Tui ', 'Bang ', 'Qian ', 'Lu ', 'Wa ', 'Sou ', 'Tang ', 'Su ', 'Zhui ', 'Ge ', 'Yi ', 'Bo ', 'Liao ', 'Ji ', 'Pi ', 'Xie ', 'Gao ', 'Lu ', 'Bin ', 'Ou ', 'Chang ', 'Lu ', 'Guo ', 'Pang ', 'Chuai ', 'Piao ', 'Jiang ', 'Fu ', 'Tang ', 'Mo ', 'Xi ', 'Zhuan ', 'Lu ', 'Jiao ', 'Ying ', 'Lu ', 'Zhi ', 'Tara ', 'Chun ', 'Lian ', 'Tong ', 'Peng ', 'Ni ', 'Zha ', 'Liao ', 'Cui ', 'Gui ', 'Xiao ', 'Teng ', 'Fan ', 'Zhi ', 'Jiao ', 'Shan ', 'Wu ', 'Cui ', 'Run ', 'Xiang ', 'Sui ', 'Fen ', 'Ying ', 'Tan ', 'Zhua ', 'Dan ', 'Kuai ', 'Nong ', 'Tun ', 'Lian ', 'Bi ', 'Yong ', 'Jue ', 'Chu ', 'Yi ', 'Juan ', 'La ', 'Lian ', 'Sao ', 'Tun ', 'Gu ', 'Qi ', 'Cui ', 'Bin ', 'Xun ', 'Ru ', 'Huo ', 'Zang ', 'Xian ', 'Biao ', 'Xing ', 'Kuan ', 'La ', 'Yan ', 'Lu ', 'Huo ', 'Zang ', 'Luo ', 'Qu ', 'Zang ', 'Luan ', 'Ni ', 'Zang ', 'Chen ', 'Qian ', 'Wo ', 'Guang ', 'Zang ', 'Lin ', 'Guang ', 'Zi ', 'Jiao ', 'Nie ', 'Chou ', 'Ji ', 'Gao ', 'Chou ', 'Mian ', 'Nie ', 'Zhi ', 'Zhi ', 'Ge ', 'Jian ', 'Die ', 'Zhi ', 'Xiu ', 'Tai ', 'Zhen ', 'Jiu ', 'Xian ', 'Yu ', 'Cha '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x082.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x082.php
new file mode 100644
index 000000000..2ac228991
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x082.php
@@ -0,0 +1 @@
+<?php return ['Yao ', 'Yu ', 'Chong ', 'Xi ', 'Xi ', 'Jiu ', 'Yu ', 'Yu ', 'Xing ', 'Ju ', 'Jiu ', 'Xin ', 'She ', 'She ', 'Yadoru ', 'Jiu ', 'Shi ', 'Tan ', 'Shu ', 'Shi ', 'Tian ', 'Dan ', 'Pu ', 'Pu ', 'Guan ', 'Hua ', 'Tan ', 'Chuan ', 'Shun ', 'Xia ', 'Wu ', 'Zhou ', 'Dao ', 'Gang ', 'Shan ', 'Yi ', '[?] ', 'Pa ', 'Tai ', 'Fan ', 'Ban ', 'Chuan ', 'Hang ', 'Fang ', 'Ban ', 'Que ', 'Hesaki ', 'Zhong ', 'Jian ', 'Cang ', 'Ling ', 'Zhu ', 'Ze ', 'Duo ', 'Bo ', 'Xian ', 'Ge ', 'Chuan ', 'Jia ', 'Lu ', 'Hong ', 'Pang ', 'Xi ', '[?] ', 'Fu ', 'Zao ', 'Feng ', 'Li ', 'Shao ', 'Yu ', 'Lang ', 'Ting ', '[?] ', 'Wei ', 'Bo ', 'Meng ', 'Nian ', 'Ju ', 'Huang ', 'Shou ', 'Zong ', 'Bian ', 'Mao ', 'Die ', '[?] ', 'Bang ', 'Cha ', 'Yi ', 'Sao ', 'Cang ', 'Cao ', 'Lou ', 'Dai ', 'Sori ', 'Yao ', 'Tong ', 'Yofune ', 'Dang ', 'Tan ', 'Lu ', 'Yi ', 'Jie ', 'Jian ', 'Huo ', 'Meng ', 'Qi ', 'Lu ', 'Lu ', 'Chan ', 'Shuang ', 'Gen ', 'Liang ', 'Jian ', 'Jian ', 'Se ', 'Yan ', 'Fu ', 'Ping ', 'Yan ', 'Yan ', 'Cao ', 'Cao ', 'Yi ', 'Le ', 'Ting ', 'Qiu ', 'Ai ', 'Nai ', 'Tiao ', 'Jiao ', 'Jie ', 'Peng ', 'Wan ', 'Yi ', 'Chai ', 'Mian ', 'Mie ', 'Gan ', 'Qian ', 'Yu ', 'Yu ', 'Shuo ', 'Qiong ', 'Tu ', 'Xia ', 'Qi ', 'Mang ', 'Zi ', 'Hui ', 'Sui ', 'Zhi ', 'Xiang ', 'Bi ', 'Fu ', 'Tun ', 'Wei ', 'Wu ', 'Zhi ', 'Qi ', 'Shan ', 'Wen ', 'Qian ', 'Ren ', 'Fou ', 'Kou ', 'Jie ', 'Lu ', 'Xu ', 'Ji ', 'Qin ', 'Qi ', 'Yuan ', 'Fen ', 'Ba ', 'Rui ', 'Xin ', 'Ji ', 'Hua ', 'Hua ', 'Fang ', 'Wu ', 'Jue ', 'Gou ', 'Zhi ', 'Yun ', 'Qin ', 'Ao ', 'Chu ', 'Mao ', 'Ya ', 'Fei ', 'Reng ', 'Hang ', 'Cong ', 'Yin ', 'You ', 'Bian ', 'Yi ', 'Susa ', 'Wei ', 'Li ', 'Pi ', 'E ', 'Xian ', 'Chang ', 'Cang ', 'Meng ', 'Su ', 'Yi ', 'Yuan ', 'Ran ', 'Ling ', 'Tai ', 'Tiao ', 'Di ', 'Miao ', 'Qiong ', 'Li ', 'Yong ', 'Ke ', 'Mu ', 'Pei ', 'Bao ', 'Gou ', 'Min ', 'Yi ', 'Yi ', 'Ju ', 'Pi ', 'Ruo ', 'Ku ', 'Zhu ', 'Ni ', 'Bo ', 'Bing ', 'Shan ', 'Qiu ', 'Yao ', 'Xian ', 'Ben ', 'Hong ', 'Ying ', 'Zha ', 'Dong ', 'Ju ', 'Die ', 'Nie ', 'Gan ', 'Hu ', 'Ping ', 'Mei ', 'Fu ', 'Sheng ', 'Gu ', 'Bi ', 'Wei '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x083.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x083.php
new file mode 100644
index 000000000..747d5877c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x083.php
@@ -0,0 +1 @@
+<?php return ['Fu ', 'Zhuo ', 'Mao ', 'Fan ', 'Qie ', 'Mao ', 'Mao ', 'Ba ', 'Zi ', 'Mo ', 'Zi ', 'Di ', 'Chi ', 'Ji ', 'Jing ', 'Long ', '[?] ', 'Niao ', '[?] ', 'Xue ', 'Ying ', 'Qiong ', 'Ge ', 'Ming ', 'Li ', 'Rong ', 'Yin ', 'Gen ', 'Qian ', 'Chai ', 'Chen ', 'Yu ', 'Xiu ', 'Zi ', 'Lie ', 'Wu ', 'Ji ', 'Kui ', 'Ce ', 'Chong ', 'Ci ', 'Gou ', 'Guang ', 'Mang ', 'Chi ', 'Jiao ', 'Jiao ', 'Fu ', 'Yu ', 'Zhu ', 'Zi ', 'Jiang ', 'Hui ', 'Yin ', 'Cha ', 'Fa ', 'Rong ', 'Ru ', 'Chong ', 'Mang ', 'Tong ', 'Zhong ', '[?] ', 'Zhu ', 'Xun ', 'Huan ', 'Kua ', 'Quan ', 'Gai ', 'Da ', 'Jing ', 'Xing ', 'Quan ', 'Cao ', 'Jing ', 'Er ', 'An ', 'Shou ', 'Chi ', 'Ren ', 'Jian ', 'Ti ', 'Huang ', 'Ping ', 'Li ', 'Jin ', 'Lao ', 'Shu ', 'Zhuang ', 'Da ', 'Jia ', 'Rao ', 'Bi ', 'Ze ', 'Qiao ', 'Hui ', 'Qi ', 'Dang ', '[?] ', 'Rong ', 'Hun ', 'Ying ', 'Luo ', 'Ying ', 'Xun ', 'Jin ', 'Sun ', 'Yin ', 'Mai ', 'Hong ', 'Zhou ', 'Yao ', 'Du ', 'Wei ', 'Chu ', 'Dou ', 'Fu ', 'Ren ', 'Yin ', 'He ', 'Bi ', 'Bu ', 'Yun ', 'Di ', 'Tu ', 'Sui ', 'Sui ', 'Cheng ', 'Chen ', 'Wu ', 'Bie ', 'Xi ', 'Geng ', 'Li ', 'Fu ', 'Zhu ', 'Mo ', 'Li ', 'Zhuang ', 'Ji ', 'Duo ', 'Qiu ', 'Sha ', 'Suo ', 'Chen ', 'Feng ', 'Ju ', 'Mei ', 'Meng ', 'Xing ', 'Jing ', 'Che ', 'Xin ', 'Jun ', 'Yan ', 'Ting ', 'Diao ', 'Cuo ', 'Wan ', 'Han ', 'You ', 'Cuo ', 'Jia ', 'Wang ', 'You ', 'Niu ', 'Shao ', 'Xian ', 'Lang ', 'Fu ', 'E ', 'Mo ', 'Wen ', 'Jie ', 'Nan ', 'Mu ', 'Kan ', 'Lai ', 'Lian ', 'Shi ', 'Wo ', 'Usagi ', 'Lian ', 'Huo ', 'You ', 'Ying ', 'Ying ', 'Nuc ', 'Chun ', 'Mang ', 'Mang ', 'Ci ', 'Wan ', 'Jing ', 'Di ', 'Qu ', 'Dong ', 'Jian ', 'Zou ', 'Gu ', 'La ', 'Lu ', 'Ju ', 'Wei ', 'Jun ', 'Nie ', 'Kun ', 'He ', 'Pu ', 'Zi ', 'Gao ', 'Guo ', 'Fu ', 'Lun ', 'Chang ', 'Chou ', 'Song ', 'Chui ', 'Zhan ', 'Men ', 'Cai ', 'Ba ', 'Li ', 'Tu ', 'Bo ', 'Han ', 'Bao ', 'Qin ', 'Juan ', 'Xi ', 'Qin ', 'Di ', 'Jie ', 'Pu ', 'Dang ', 'Jin ', 'Zhao ', 'Tai ', 'Geng ', 'Hua ', 'Gu ', 'Ling ', 'Fei ', 'Jin ', 'An ', 'Wang ', 'Beng ', 'Zhou ', 'Yan ', 'Ju ', 'Jian ', 'Lin ', 'Tan ', 'Shu ', 'Tian ', 'Dao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x084.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x084.php
new file mode 100644
index 000000000..7fd10559b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x084.php
@@ -0,0 +1 @@
+<?php return ['Hu ', 'Qi ', 'He ', 'Cui ', 'Tao ', 'Chun ', 'Bei ', 'Chang ', 'Huan ', 'Fei ', 'Lai ', 'Qi ', 'Meng ', 'Ping ', 'Wei ', 'Dan ', 'Sha ', 'Huan ', 'Yan ', 'Yi ', 'Tiao ', 'Qi ', 'Wan ', 'Ce ', 'Nai ', 'Kutabireru ', 'Tuo ', 'Jiu ', 'Tie ', 'Luo ', '[?] ', '[?] ', 'Meng ', '[?] ', 'Yaji ', '[?] ', 'Ying ', 'Ying ', 'Ying ', 'Xiao ', 'Sa ', 'Qiu ', 'Ke ', 'Xiang ', 'Wan ', 'Yu ', 'Yu ', 'Fu ', 'Lian ', 'Xuan ', 'Yuan ', 'Nan ', 'Ze ', 'Wo ', 'Chun ', 'Xiao ', 'Yu ', 'Pian ', 'Mao ', 'An ', 'E ', 'Luo ', 'Ying ', 'Huo ', 'Gua ', 'Jiang ', 'Mian ', 'Zuo ', 'Zuo ', 'Ju ', 'Bao ', 'Rou ', 'Xi ', 'Xie ', 'An ', 'Qu ', 'Jian ', 'Fu ', 'Lu ', 'Jing ', 'Pen ', 'Feng ', 'Hong ', 'Hong ', 'Hou ', 'Yan ', 'Tu ', 'Zhu ', 'Zi ', 'Xiang ', 'Shen ', 'Ge ', 'Jie ', 'Jing ', 'Mi ', 'Huang ', 'Shen ', 'Pu ', 'Gai ', 'Dong ', 'Zhou ', 'Qian ', 'Wei ', 'Bo ', 'Wei ', 'Pa ', 'Ji ', 'Hu ', 'Zang ', 'Jia ', 'Duan ', 'Yao ', 'Jun ', 'Cong ', 'Quan ', 'Wei ', 'Xian ', 'Kui ', 'Ting ', 'Hun ', 'Xi ', 'Shi ', 'Qi ', 'Lan ', 'Zong ', 'Yao ', 'Yuan ', 'Mei ', 'Yun ', 'Shu ', 'Di ', 'Zhuan ', 'Guan ', 'Sukumo ', 'Xue ', 'Chan ', 'Kai ', 'Kui ', '[?] ', 'Jiang ', 'Lou ', 'Wei ', 'Pai ', '[?] ', 'Sou ', 'Yin ', 'Shi ', 'Chun ', 'Shi ', 'Yun ', 'Zhen ', 'Lang ', 'Nu ', 'Meng ', 'He ', 'Que ', 'Suan ', 'Yuan ', 'Li ', 'Ju ', 'Xi ', 'Pang ', 'Chu ', 'Xu ', 'Tu ', 'Liu ', 'Wo ', 'Zhen ', 'Qian ', 'Zu ', 'Po ', 'Cuo ', 'Yuan ', 'Chu ', 'Yu ', 'Kuai ', 'Pan ', 'Pu ', 'Pu ', 'Na ', 'Shuo ', 'Xi ', 'Fen ', 'Yun ', 'Zheng ', 'Jian ', 'Ji ', 'Ruo ', 'Cang ', 'En ', 'Mi ', 'Hao ', 'Sun ', 'Zhen ', 'Ming ', 'Sou ', 'Xu ', 'Liu ', 'Xi ', 'Gu ', 'Lang ', 'Rong ', 'Weng ', 'Gai ', 'Cuo ', 'Shi ', 'Tang ', 'Luo ', 'Ru ', 'Suo ', 'Xian ', 'Bei ', 'Yao ', 'Gui ', 'Bi ', 'Zong ', 'Gun ', 'Za ', 'Xiu ', 'Ce ', 'Hai ', 'Lan ', '[?] ', 'Ji ', 'Li ', 'Can ', 'Lang ', 'Yu ', '[?] ', 'Ying ', 'Mo ', 'Diao ', 'Tiao ', 'Mao ', 'Tong ', 'Zhu ', 'Peng ', 'An ', 'Lian ', 'Cong ', 'Xi ', 'Ping ', 'Qiu ', 'Jin ', 'Chun ', 'Jie ', 'Wei ', 'Tui ', 'Cao ', 'Yu ', 'Yi ', 'Ji ', 'Liao ', 'Bi ', 'Lu ', 'Su '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x085.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x085.php
new file mode 100644
index 000000000..46459eb62
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x085.php
@@ -0,0 +1 @@
+<?php return ['Bu ', 'Zhang ', 'Luo ', 'Jiang ', 'Man ', 'Yan ', 'Ling ', 'Ji ', 'Piao ', 'Gun ', 'Han ', 'Di ', 'Su ', 'Lu ', 'She ', 'Shang ', 'Di ', 'Mie ', 'Xun ', 'Man ', 'Bo ', 'Di ', 'Cuo ', 'Zhe ', 'Sen ', 'Xuan ', 'Wei ', 'Hu ', 'Ao ', 'Mi ', 'Lou ', 'Cu ', 'Zhong ', 'Cai ', 'Po ', 'Jiang ', 'Mi ', 'Cong ', 'Niao ', 'Hui ', 'Jun ', 'Yin ', 'Jian ', 'Yan ', 'Shu ', 'Yin ', 'Kui ', 'Chen ', 'Hu ', 'Sha ', 'Kou ', 'Qian ', 'Ma ', 'Zang ', 'Sonoko ', 'Qiang ', 'Dou ', 'Lian ', 'Lin ', 'Kou ', 'Ai ', 'Bi ', 'Li ', 'Wei ', 'Ji ', 'Xun ', 'Sheng ', 'Fan ', 'Meng ', 'Ou ', 'Chan ', 'Dian ', 'Xun ', 'Jiao ', 'Rui ', 'Rui ', 'Lei ', 'Yu ', 'Qiao ', 'Chu ', 'Hua ', 'Jian ', 'Mai ', 'Yun ', 'Bao ', 'You ', 'Qu ', 'Lu ', 'Rao ', 'Hui ', 'E ', 'Teng ', 'Fei ', 'Jue ', 'Zui ', 'Fa ', 'Ru ', 'Fen ', 'Kui ', 'Shun ', 'Rui ', 'Ya ', 'Xu ', 'Fu ', 'Jue ', 'Dang ', 'Wu ', 'Tong ', 'Si ', 'Xiao ', 'Xi ', 'Long ', 'Yun ', '[?] ', 'Qi ', 'Jian ', 'Yun ', 'Sun ', 'Ling ', 'Yu ', 'Xia ', 'Yong ', 'Ji ', 'Hong ', 'Si ', 'Nong ', 'Lei ', 'Xuan ', 'Yun ', 'Yu ', 'Xi ', 'Hao ', 'Bo ', 'Hao ', 'Ai ', 'Wei ', 'Hui ', 'Wei ', 'Ji ', 'Ci ', 'Xiang ', 'Luan ', 'Mie ', 'Yi ', 'Leng ', 'Jiang ', 'Can ', 'Shen ', 'Qiang ', 'Lian ', 'Ke ', 'Yuan ', 'Da ', 'Ti ', 'Tang ', 'Xie ', 'Bi ', 'Zhan ', 'Sun ', 'Lian ', 'Fan ', 'Ding ', 'Jie ', 'Gu ', 'Xie ', 'Shu ', 'Jian ', 'Kao ', 'Hong ', 'Sa ', 'Xin ', 'Xun ', 'Yao ', 'Hie ', 'Sou ', 'Shu ', 'Xun ', 'Dui ', 'Pin ', 'Wei ', 'Neng ', 'Chou ', 'Mai ', 'Ru ', 'Piao ', 'Tai ', 'Qi ', 'Zao ', 'Chen ', 'Zhen ', 'Er ', 'Ni ', 'Ying ', 'Gao ', 'Cong ', 'Xiao ', 'Qi ', 'Fa ', 'Jian ', 'Xu ', 'Kui ', 'Jie ', 'Bian ', 'Diao ', 'Mi ', 'Lan ', 'Jin ', 'Cang ', 'Miao ', 'Qiong ', 'Qie ', 'Xian ', '[?] ', 'Ou ', 'Xian ', 'Su ', 'Lu ', 'Yi ', 'Xu ', 'Xie ', 'Li ', 'Yi ', 'La ', 'Lei ', 'Xiao ', 'Di ', 'Zhi ', 'Bei ', 'Teng ', 'Yao ', 'Mo ', 'Huan ', 'Piao ', 'Fan ', 'Sou ', 'Tan ', 'Tui ', 'Qiong ', 'Qiao ', 'Wei ', 'Liu ', 'Hui ', '[?] ', 'Gao ', 'Yun ', '[?] ', 'Li ', 'Shu ', 'Chu ', 'Ai ', 'Lin ', 'Zao ', 'Xuan ', 'Chen ', 'Lai ', 'Huo '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x086.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x086.php
new file mode 100644
index 000000000..159aa5c30
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x086.php
@@ -0,0 +1 @@
+<?php return ['Tuo ', 'Wu ', 'Rui ', 'Rui ', 'Qi ', 'Heng ', 'Lu ', 'Su ', 'Tui ', 'Mang ', 'Yun ', 'Pin ', 'Yu ', 'Xun ', 'Ji ', 'Jiong ', 'Xian ', 'Mo ', 'Hagi ', 'Su ', 'Jiong ', '[?] ', 'Nie ', 'Bo ', 'Rang ', 'Yi ', 'Xian ', 'Yu ', 'Ju ', 'Lian ', 'Lian ', 'Yin ', 'Qiang ', 'Ying ', 'Long ', 'Tong ', 'Wei ', 'Yue ', 'Ling ', 'Qu ', 'Yao ', 'Fan ', 'Mi ', 'Lan ', 'Kui ', 'Lan ', 'Ji ', 'Dang ', 'Katsura ', 'Lei ', 'Lei ', 'Hua ', 'Feng ', 'Zhi ', 'Wei ', 'Kui ', 'Zhan ', 'Huai ', 'Li ', 'Ji ', 'Mi ', 'Lei ', 'Huai ', 'Luo ', 'Ji ', 'Kui ', 'Lu ', 'Jian ', 'San ', '[?] ', 'Lei ', 'Quan ', 'Xiao ', 'Yi ', 'Luan ', 'Men ', 'Bie ', 'Hu ', 'Hu ', 'Lu ', 'Nue ', 'Lu ', 'Si ', 'Xiao ', 'Qian ', 'Chu ', 'Hu ', 'Xu ', 'Cuo ', 'Fu ', 'Xu ', 'Xu ', 'Lu ', 'Hu ', 'Yu ', 'Hao ', 'Jiao ', 'Ju ', 'Guo ', 'Bao ', 'Yan ', 'Zhan ', 'Zhan ', 'Kui ', 'Ban ', 'Xi ', 'Shu ', 'Chong ', 'Qiu ', 'Diao ', 'Ji ', 'Qiu ', 'Cheng ', 'Shi ', '[?] ', 'Di ', 'Zhe ', 'She ', 'Yu ', 'Gan ', 'Zi ', 'Hong ', 'Hui ', 'Meng ', 'Ge ', 'Sui ', 'Xia ', 'Chai ', 'Shi ', 'Yi ', 'Ma ', 'Xiang ', 'Fang ', 'E ', 'Pa ', 'Chi ', 'Qian ', 'Wen ', 'Wen ', 'Rui ', 'Bang ', 'Bi ', 'Yue ', 'Yue ', 'Jun ', 'Qi ', 'Ran ', 'Yin ', 'Qi ', 'Tian ', 'Yuan ', 'Jue ', 'Hui ', 'Qin ', 'Qi ', 'Zhong ', 'Ya ', 'Ci ', 'Mu ', 'Wang ', 'Fen ', 'Fen ', 'Hang ', 'Gong ', 'Zao ', 'Fu ', 'Ran ', 'Jie ', 'Fu ', 'Chi ', 'Dou ', 'Piao ', 'Xian ', 'Ni ', 'Te ', 'Qiu ', 'You ', 'Zha ', 'Ping ', 'Chi ', 'You ', 'He ', 'Han ', 'Ju ', 'Li ', 'Fu ', 'Ran ', 'Zha ', 'Gou ', 'Pi ', 'Bo ', 'Xian ', 'Zhu ', 'Diao ', 'Bie ', 'Bing ', 'Gu ', 'Ran ', 'Qu ', 'She ', 'Tie ', 'Ling ', 'Gu ', 'Dan ', 'Gu ', 'Ying ', 'Li ', 'Cheng ', 'Qu ', 'Mou ', 'Ge ', 'Ci ', 'Hui ', 'Hui ', 'Mang ', 'Fu ', 'Yang ', 'Wa ', 'Lie ', 'Zhu ', 'Yi ', 'Xian ', 'Kuo ', 'Jiao ', 'Li ', 'Yi ', 'Ping ', 'Ji ', 'Ha ', 'She ', 'Yi ', 'Wang ', 'Mo ', 'Qiong ', 'Qie ', 'Gui ', 'Gong ', 'Zhi ', 'Man ', 'Ebi ', 'Zhi ', 'Jia ', 'Rao ', 'Si ', 'Qi ', 'Xing ', 'Lie ', 'Qiu ', 'Shao ', 'Yong ', 'Jia ', 'Shui ', 'Che ', 'Bai ', 'E ', 'Han '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x087.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x087.php
new file mode 100644
index 000000000..810bbbda7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x087.php
@@ -0,0 +1 @@
+<?php return ['Shu ', 'Xuan ', 'Feng ', 'Shen ', 'Zhen ', 'Fu ', 'Xian ', 'Zhe ', 'Wu ', 'Fu ', 'Li ', 'Lang ', 'Bi ', 'Chu ', 'Yuan ', 'You ', 'Jie ', 'Dan ', 'Yan ', 'Ting ', 'Dian ', 'Shui ', 'Hui ', 'Gua ', 'Zhi ', 'Song ', 'Fei ', 'Ju ', 'Mi ', 'Qi ', 'Qi ', 'Yu ', 'Jun ', 'Zha ', 'Meng ', 'Qiang ', 'Si ', 'Xi ', 'Lun ', 'Li ', 'Die ', 'Tiao ', 'Tao ', 'Kun ', 'Gan ', 'Han ', 'Yu ', 'Bang ', 'Fei ', 'Pi ', 'Wei ', 'Dun ', 'Yi ', 'Yuan ', 'Su ', 'Quan ', 'Qian ', 'Rui ', 'Ni ', 'Qing ', 'Wei ', 'Liang ', 'Guo ', 'Wan ', 'Dong ', 'E ', 'Ban ', 'Di ', 'Wang ', 'Can ', 'Yang ', 'Ying ', 'Guo ', 'Chan ', '[?] ', 'La ', 'Ke ', 'Ji ', 'He ', 'Ting ', 'Mai ', 'Xu ', 'Mian ', 'Yu ', 'Jie ', 'Shi ', 'Xuan ', 'Huang ', 'Yan ', 'Bian ', 'Rou ', 'Wei ', 'Fu ', 'Yuan ', 'Mei ', 'Wei ', 'Fu ', 'Ruan ', 'Xie ', 'You ', 'Qiu ', 'Mao ', 'Xia ', 'Ying ', 'Shi ', 'Chong ', 'Tang ', 'Zhu ', 'Zong ', 'Ti ', 'Fu ', 'Yuan ', 'Hui ', 'Meng ', 'La ', 'Du ', 'Hu ', 'Qiu ', 'Die ', 'Li ', 'Gua ', 'Yun ', 'Ju ', 'Nan ', 'Lou ', 'Qun ', 'Rong ', 'Ying ', 'Jiang ', '[?] ', 'Lang ', 'Pang ', 'Si ', 'Xi ', 'Ci ', 'Xi ', 'Yuan ', 'Weng ', 'Lian ', 'Sou ', 'Ban ', 'Rong ', 'Rong ', 'Ji ', 'Wu ', 'Qiu ', 'Han ', 'Qin ', 'Yi ', 'Bi ', 'Hua ', 'Tang ', 'Yi ', 'Du ', 'Nai ', 'He ', 'Hu ', 'Hui ', 'Ma ', 'Ming ', 'Yi ', 'Wen ', 'Ying ', 'Teng ', 'Yu ', 'Cang ', 'So ', 'Ebi ', 'Man ', '[?] ', 'Shang ', 'Zhe ', 'Cao ', 'Chi ', 'Di ', 'Ao ', 'Lu ', 'Wei ', 'Zhi ', 'Tang ', 'Chen ', 'Piao ', 'Qu ', 'Pi ', 'Yu ', 'Jian ', 'Luo ', 'Lou ', 'Qin ', 'Zhong ', 'Yin ', 'Jiang ', 'Shuai ', 'Wen ', 'Jiao ', 'Wan ', 'Zhi ', 'Zhe ', 'Ma ', 'Ma ', 'Guo ', 'Liu ', 'Mao ', 'Xi ', 'Cong ', 'Li ', 'Man ', 'Xiao ', 'Kamakiri ', 'Zhang ', 'Mang ', 'Xiang ', 'Mo ', 'Zui ', 'Si ', 'Qiu ', 'Te ', 'Zhi ', 'Peng ', 'Peng ', 'Jiao ', 'Qu ', 'Bie ', 'Liao ', 'Pan ', 'Gui ', 'Xi ', 'Ji ', 'Zhuan ', 'Huang ', 'Fei ', 'Lao ', 'Jue ', 'Jue ', 'Hui ', 'Yin ', 'Chan ', 'Jiao ', 'Shan ', 'Rao ', 'Xiao ', 'Mou ', 'Chong ', 'Xun ', 'Si ', '[?] ', 'Cheng ', 'Dang ', 'Li ', 'Xie ', 'Shan ', 'Yi ', 'Jing ', 'Da ', 'Chan ', 'Qi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x088.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x088.php
new file mode 100644
index 000000000..1dfa03296
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x088.php
@@ -0,0 +1 @@
+<?php return ['Ci ', 'Xiang ', 'She ', 'Luo ', 'Qin ', 'Ying ', 'Chai ', 'Li ', 'Ze ', 'Xuan ', 'Lian ', 'Zhu ', 'Ze ', 'Xie ', 'Mang ', 'Xie ', 'Qi ', 'Rong ', 'Jian ', 'Meng ', 'Hao ', 'Ruan ', 'Huo ', 'Zhuo ', 'Jie ', 'Bin ', 'He ', 'Mie ', 'Fan ', 'Lei ', 'Jie ', 'La ', 'Mi ', 'Li ', 'Chun ', 'Li ', 'Qiu ', 'Nie ', 'Lu ', 'Du ', 'Xiao ', 'Zhu ', 'Long ', 'Li ', 'Long ', 'Feng ', 'Ye ', 'Beng ', 'Shang ', 'Gu ', 'Juan ', 'Ying ', '[?] ', 'Xi ', 'Can ', 'Qu ', 'Quan ', 'Du ', 'Can ', 'Man ', 'Jue ', 'Jie ', 'Zhu ', 'Zha ', 'Xie ', 'Huang ', 'Niu ', 'Pei ', 'Nu ', 'Xin ', 'Zhong ', 'Mo ', 'Er ', 'Ke ', 'Mie ', 'Xi ', 'Xing ', 'Yan ', 'Kan ', 'Yuan ', '[?] ', 'Ling ', 'Xuan ', 'Shu ', 'Xian ', 'Tong ', 'Long ', 'Jie ', 'Xian ', 'Ya ', 'Hu ', 'Wei ', 'Dao ', 'Chong ', 'Wei ', 'Dao ', 'Zhun ', 'Heng ', 'Qu ', 'Yi ', 'Yi ', 'Bu ', 'Gan ', 'Yu ', 'Biao ', 'Cha ', 'Yi ', 'Shan ', 'Chen ', 'Fu ', 'Gun ', 'Fen ', 'Shuai ', 'Jie ', 'Na ', 'Zhong ', 'Dan ', 'Ri ', 'Zhong ', 'Zhong ', 'Xie ', 'Qi ', 'Xie ', 'Ran ', 'Zhi ', 'Ren ', 'Qin ', 'Jin ', 'Jun ', 'Yuan ', 'Mei ', 'Chai ', 'Ao ', 'Niao ', 'Hui ', 'Ran ', 'Jia ', 'Tuo ', 'Ling ', 'Dai ', 'Bao ', 'Pao ', 'Yao ', 'Zuo ', 'Bi ', 'Shao ', 'Tan ', 'Ju ', 'He ', 'Shu ', 'Xiu ', 'Zhen ', 'Yi ', 'Pa ', 'Bo ', 'Di ', 'Wa ', 'Fu ', 'Gun ', 'Zhi ', 'Zhi ', 'Ran ', 'Pan ', 'Yi ', 'Mao ', 'Tuo ', 'Na ', 'Kou ', 'Xian ', 'Chan ', 'Qu ', 'Bei ', 'Gun ', 'Xi ', 'Ne ', 'Bo ', 'Horo ', 'Fu ', 'Yi ', 'Chi ', 'Ku ', 'Ren ', 'Jiang ', 'Jia ', 'Cun ', 'Mo ', 'Jie ', 'Er ', 'Luo ', 'Ru ', 'Zhu ', 'Gui ', 'Yin ', 'Cai ', 'Lie ', 'Kamishimo ', 'Yuki ', 'Zhuang ', 'Dang ', '[?] ', 'Kun ', 'Ken ', 'Niao ', 'Shu ', 'Jia ', 'Kun ', 'Cheng ', 'Li ', 'Juan ', 'Shen ', 'Pou ', 'Ge ', 'Yi ', 'Yu ', 'Zhen ', 'Liu ', 'Qiu ', 'Qun ', 'Ji ', 'Yi ', 'Bu ', 'Zhuang ', 'Shui ', 'Sha ', 'Qun ', 'Li ', 'Lian ', 'Lian ', 'Ku ', 'Jian ', 'Fou ', 'Chan ', 'Bi ', 'Gun ', 'Tao ', 'Yuan ', 'Ling ', 'Chi ', 'Chang ', 'Chou ', 'Duo ', 'Biao ', 'Liang ', 'Chang ', 'Pei ', 'Pei ', 'Fei ', 'Yuan ', 'Luo ', 'Guo ', 'Yan ', 'Du ', 'Xi ', 'Zhi ', 'Ju ', 'Qi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x089.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x089.php
new file mode 100644
index 000000000..5e2856d89
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x089.php
@@ -0,0 +1 @@
+<?php return ['Ji ', 'Zhi ', 'Gua ', 'Ken ', 'Che ', 'Ti ', 'Ti ', 'Fu ', 'Chong ', 'Xie ', 'Bian ', 'Die ', 'Kun ', 'Duan ', 'Xiu ', 'Xiu ', 'He ', 'Yuan ', 'Bao ', 'Bao ', 'Fu ', 'Yu ', 'Tuan ', 'Yan ', 'Hui ', 'Bei ', 'Chu ', 'Lu ', 'Ena ', 'Hitoe ', 'Yun ', 'Da ', 'Gou ', 'Da ', 'Huai ', 'Rong ', 'Yuan ', 'Ru ', 'Nai ', 'Jiong ', 'Suo ', 'Ban ', 'Tun ', 'Chi ', 'Sang ', 'Niao ', 'Ying ', 'Jie ', 'Qian ', 'Huai ', 'Ku ', 'Lian ', 'Bao ', 'Li ', 'Zhe ', 'Shi ', 'Lu ', 'Yi ', 'Die ', 'Xie ', 'Xian ', 'Wei ', 'Biao ', 'Cao ', 'Ji ', 'Jiang ', 'Sen ', 'Bao ', 'Xiang ', 'Chihaya ', 'Pu ', 'Jian ', 'Zhuan ', 'Jian ', 'Zui ', 'Ji ', 'Dan ', 'Za ', 'Fan ', 'Bo ', 'Xiang ', 'Xin ', 'Bie ', 'Rao ', 'Man ', 'Lan ', 'Ao ', 'Duo ', 'Gui ', 'Cao ', 'Sui ', 'Nong ', 'Chan ', 'Lian ', 'Bi ', 'Jin ', 'Dang ', 'Shu ', 'Tan ', 'Bi ', 'Lan ', 'Pu ', 'Ru ', 'Zhi ', '[?] ', 'Shu ', 'Wa ', 'Shi ', 'Bai ', 'Xie ', 'Bo ', 'Chen ', 'Lai ', 'Long ', 'Xi ', 'Xian ', 'Lan ', 'Zhe ', 'Dai ', 'Tasuki ', 'Zan ', 'Shi ', 'Jian ', 'Pan ', 'Yi ', 'Ran ', 'Ya ', 'Xi ', 'Xi ', 'Yao ', 'Feng ', 'Tan ', '[?] ', 'Biao ', 'Fu ', 'Ba ', 'He ', 'Ji ', 'Ji ', 'Jian ', 'Guan ', 'Bian ', 'Yan ', 'Gui ', 'Jue ', 'Pian ', 'Mao ', 'Mi ', 'Mi ', 'Mie ', 'Shi ', 'Si ', 'Zhan ', 'Luo ', 'Jue ', 'Mi ', 'Tiao ', 'Lian ', 'Yao ', 'Zhi ', 'Jun ', 'Xi ', 'Shan ', 'Wei ', 'Xi ', 'Tian ', 'Yu ', 'Lan ', 'E ', 'Du ', 'Qin ', 'Pang ', 'Ji ', 'Ming ', 'Ying ', 'Gou ', 'Qu ', 'Zhan ', 'Jin ', 'Guan ', 'Deng ', 'Jian ', 'Luo ', 'Qu ', 'Jian ', 'Wei ', 'Jue ', 'Qu ', 'Luo ', 'Lan ', 'Shen ', 'Di ', 'Guan ', 'Jian ', 'Guan ', 'Yan ', 'Gui ', 'Mi ', 'Shi ', 'Zhan ', 'Lan ', 'Jue ', 'Ji ', 'Xi ', 'Di ', 'Tian ', 'Yu ', 'Gou ', 'Jin ', 'Qu ', 'Jiao ', 'Jiu ', 'Jin ', 'Cu ', 'Jue ', 'Zhi ', 'Chao ', 'Ji ', 'Gu ', 'Dan ', 'Zui ', 'Di ', 'Shang ', 'Hua ', 'Quan ', 'Ge ', 'Chi ', 'Jie ', 'Gui ', 'Gong ', 'Hong ', 'Jie ', 'Hun ', 'Qiu ', 'Xing ', 'Su ', 'Ni ', 'Ji ', 'Lu ', 'Zhi ', 'Zha ', 'Bi ', 'Xing ', 'Hu ', 'Shang ', 'Gong ', 'Zhi ', 'Xue ', 'Chu ', 'Xi ', 'Yi ', 'Lu ', 'Jue ', 'Xi ', 'Yan ', 'Xi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08a.php
new file mode 100644
index 000000000..826fd753b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08a.php
@@ -0,0 +1 @@
+<?php return ['Yan ', 'Yan ', 'Ding ', 'Fu ', 'Qiu ', 'Qiu ', 'Jiao ', 'Hong ', 'Ji ', 'Fan ', 'Xun ', 'Diao ', 'Hong ', 'Cha ', 'Tao ', 'Xu ', 'Jie ', 'Yi ', 'Ren ', 'Xun ', 'Yin ', 'Shan ', 'Qi ', 'Tuo ', 'Ji ', 'Xun ', 'Yin ', 'E ', 'Fen ', 'Ya ', 'Yao ', 'Song ', 'Shen ', 'Yin ', 'Xin ', 'Jue ', 'Xiao ', 'Ne ', 'Chen ', 'You ', 'Zhi ', 'Xiong ', 'Fang ', 'Xin ', 'Chao ', 'She ', 'Xian ', 'Sha ', 'Tun ', 'Xu ', 'Yi ', 'Yi ', 'Su ', 'Chi ', 'He ', 'Shen ', 'He ', 'Xu ', 'Zhen ', 'Zhu ', 'Zheng ', 'Gou ', 'Zi ', 'Zi ', 'Zhan ', 'Gu ', 'Fu ', 'Quan ', 'Die ', 'Ling ', 'Di ', 'Yang ', 'Li ', 'Nao ', 'Pan ', 'Zhou ', 'Gan ', 'Yi ', 'Ju ', 'Ao ', 'Zha ', 'Tuo ', 'Yi ', 'Qu ', 'Zhao ', 'Ping ', 'Bi ', 'Xiong ', 'Qu ', 'Ba ', 'Da ', 'Zu ', 'Tao ', 'Zhu ', 'Ci ', 'Zhe ', 'Yong ', 'Xu ', 'Xun ', 'Yi ', 'Huang ', 'He ', 'Shi ', 'Cha ', 'Jiao ', 'Shi ', 'Hen ', 'Cha ', 'Gou ', 'Gui ', 'Quan ', 'Hui ', 'Jie ', 'Hua ', 'Gai ', 'Xiang ', 'Wei ', 'Shen ', 'Chou ', 'Tong ', 'Mi ', 'Zhan ', 'Ming ', 'E ', 'Hui ', 'Yan ', 'Xiong ', 'Gua ', 'Er ', 'Beng ', 'Tiao ', 'Chi ', 'Lei ', 'Zhu ', 'Kuang ', 'Kua ', 'Wu ', 'Yu ', 'Teng ', 'Ji ', 'Zhi ', 'Ren ', 'Su ', 'Lang ', 'E ', 'Kuang ', 'E ', 'Shi ', 'Ting ', 'Dan ', 'Bo ', 'Chan ', 'You ', 'Heng ', 'Qiao ', 'Qin ', 'Shua ', 'An ', 'Yu ', 'Xiao ', 'Cheng ', 'Jie ', 'Xian ', 'Wu ', 'Wu ', 'Gao ', 'Song ', 'Pu ', 'Hui ', 'Jing ', 'Shuo ', 'Zhen ', 'Shuo ', 'Du ', 'Yasashi ', 'Chang ', 'Shui ', 'Jie ', 'Ke ', 'Qu ', 'Cong ', 'Xiao ', 'Sui ', 'Wang ', 'Xuan ', 'Fei ', 'Chi ', 'Ta ', 'Yi ', 'Na ', 'Yin ', 'Diao ', 'Pi ', 'Chuo ', 'Chan ', 'Chen ', 'Zhun ', 'Ji ', 'Qi ', 'Tan ', 'Zhui ', 'Wei ', 'Ju ', 'Qing ', 'Jian ', 'Zheng ', 'Ze ', 'Zou ', 'Qian ', 'Zhuo ', 'Liang ', 'Jian ', 'Zhu ', 'Hao ', 'Lun ', 'Shen ', 'Biao ', 'Huai ', 'Pian ', 'Yu ', 'Die ', 'Xu ', 'Pian ', 'Shi ', 'Xuan ', 'Shi ', 'Hun ', 'Hua ', 'E ', 'Zhong ', 'Di ', 'Xie ', 'Fu ', 'Pu ', 'Ting ', 'Jian ', 'Qi ', 'Yu ', 'Zi ', 'Chuan ', 'Xi ', 'Hui ', 'Yin ', 'An ', 'Xian ', 'Nan ', 'Chen ', 'Feng ', 'Zhu ', 'Yang ', 'Yan ', 'Heng ', 'Xuan ', 'Ge ', 'Nuo ', 'Qi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08b.php
new file mode 100644
index 000000000..540258e10
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08b.php
@@ -0,0 +1 @@
+<?php return ['Mou ', 'Ye ', 'Wei ', '[?] ', 'Teng ', 'Zou ', 'Shan ', 'Jian ', 'Bo ', 'Ku ', 'Huang ', 'Huo ', 'Ge ', 'Ying ', 'Mi ', 'Xiao ', 'Mi ', 'Xi ', 'Qiang ', 'Chen ', 'Nue ', 'Ti ', 'Su ', 'Bang ', 'Chi ', 'Qian ', 'Shi ', 'Jiang ', 'Yuan ', 'Xie ', 'Xue ', 'Tao ', 'Yao ', 'Yao ', '[?] ', 'Yu ', 'Biao ', 'Cong ', 'Qing ', 'Li ', 'Mo ', 'Mo ', 'Shang ', 'Zhe ', 'Miu ', 'Jian ', 'Ze ', 'Jie ', 'Lian ', 'Lou ', 'Can ', 'Ou ', 'Guan ', 'Xi ', 'Zhuo ', 'Ao ', 'Ao ', 'Jin ', 'Zhe ', 'Yi ', 'Hu ', 'Jiang ', 'Man ', 'Chao ', 'Han ', 'Hua ', 'Chan ', 'Xu ', 'Zeng ', 'Se ', 'Xi ', 'She ', 'Dui ', 'Zheng ', 'Nao ', 'Lan ', 'E ', 'Ying ', 'Jue ', 'Ji ', 'Zun ', 'Jiao ', 'Bo ', 'Hui ', 'Zhuan ', 'Mu ', 'Zen ', 'Zha ', 'Shi ', 'Qiao ', 'Tan ', 'Zen ', 'Pu ', 'Sheng ', 'Xuan ', 'Zao ', 'Tan ', 'Dang ', 'Sui ', 'Qian ', 'Ji ', 'Jiao ', 'Jing ', 'Lian ', 'Nou ', 'Yi ', 'Ai ', 'Zhan ', 'Pi ', 'Hui ', 'Hua ', 'Yi ', 'Yi ', 'Shan ', 'Rang ', 'Nou ', 'Qian ', 'Zhui ', 'Ta ', 'Hu ', 'Zhou ', 'Hao ', 'Ye ', 'Ying ', 'Jian ', 'Yu ', 'Jian ', 'Hui ', 'Du ', 'Zhe ', 'Xuan ', 'Zan ', 'Lei ', 'Shen ', 'Wei ', 'Chan ', 'Li ', 'Yi ', 'Bian ', 'Zhe ', 'Yan ', 'E ', 'Chou ', 'Wei ', 'Chou ', 'Yao ', 'Chan ', 'Rang ', 'Yin ', 'Lan ', 'Chen ', 'Huo ', 'Zhe ', 'Huan ', 'Zan ', 'Yi ', 'Dang ', 'Zhan ', 'Yan ', 'Du ', 'Yan ', 'Ji ', 'Ding ', 'Fu ', 'Ren ', 'Ji ', 'Jie ', 'Hong ', 'Tao ', 'Rang ', 'Shan ', 'Qi ', 'Tuo ', 'Xun ', 'Yi ', 'Xun ', 'Ji ', 'Ren ', 'Jiang ', 'Hui ', 'Ou ', 'Ju ', 'Ya ', 'Ne ', 'Xu ', 'E ', 'Lun ', 'Xiong ', 'Song ', 'Feng ', 'She ', 'Fang ', 'Jue ', 'Zheng ', 'Gu ', 'He ', 'Ping ', 'Zu ', 'Shi ', 'Xiong ', 'Zha ', 'Su ', 'Zhen ', 'Di ', 'Zou ', 'Ci ', 'Qu ', 'Zhao ', 'Bi ', 'Yi ', 'Yi ', 'Kuang ', 'Lei ', 'Shi ', 'Gua ', 'Shi ', 'Jie ', 'Hui ', 'Cheng ', 'Zhu ', 'Shen ', 'Hua ', 'Dan ', 'Gou ', 'Quan ', 'Gui ', 'Xun ', 'Yi ', 'Zheng ', 'Gai ', 'Xiang ', 'Cha ', 'Hun ', 'Xu ', 'Zhou ', 'Jie ', 'Wu ', 'Yu ', 'Qiao ', 'Wu ', 'Gao ', 'You ', 'Hui ', 'Kuang ', 'Shuo ', 'Song ', 'Ai ', 'Qing ', 'Zhu ', 'Zou ', 'Nuo ', 'Du ', 'Zhuo ', 'Fei ', 'Ke ', 'Wei '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08c.php
new file mode 100644
index 000000000..1f4a849ff
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08c.php
@@ -0,0 +1 @@
+<?php return ['Yu ', 'Shui ', 'Shen ', 'Diao ', 'Chan ', 'Liang ', 'Zhun ', 'Sui ', 'Tan ', 'Shen ', 'Yi ', 'Mou ', 'Chen ', 'Die ', 'Huang ', 'Jian ', 'Xie ', 'Nue ', 'Ye ', 'Wei ', 'E ', 'Yu ', 'Xuan ', 'Chan ', 'Zi ', 'An ', 'Yan ', 'Di ', 'Mi ', 'Pian ', 'Xu ', 'Mo ', 'Dang ', 'Su ', 'Xie ', 'Yao ', 'Bang ', 'Shi ', 'Qian ', 'Mi ', 'Jin ', 'Man ', 'Zhe ', 'Jian ', 'Miu ', 'Tan ', 'Zen ', 'Qiao ', 'Lan ', 'Pu ', 'Jue ', 'Yan ', 'Qian ', 'Zhan ', 'Chen ', 'Gu ', 'Qian ', 'Hong ', 'Xia ', 'Jue ', 'Hong ', 'Han ', 'Hong ', 'Xi ', 'Xi ', 'Huo ', 'Liao ', 'Han ', 'Du ', 'Long ', 'Dou ', 'Jiang ', 'Qi ', 'Shi ', 'Li ', 'Deng ', 'Wan ', 'Bi ', 'Shu ', 'Xian ', 'Feng ', 'Zhi ', 'Zhi ', 'Yan ', 'Yan ', 'Shi ', 'Chu ', 'Hui ', 'Tun ', 'Yi ', 'Tun ', 'Yi ', 'Jian ', 'Ba ', 'Hou ', 'E ', 'Cu ', 'Xiang ', 'Huan ', 'Jian ', 'Ken ', 'Gai ', 'Qu ', 'Fu ', 'Xi ', 'Bin ', 'Hao ', 'Yu ', 'Zhu ', 'Jia ', '[?] ', 'Xi ', 'Bo ', 'Wen ', 'Huan ', 'Bin ', 'Di ', 'Zong ', 'Fen ', 'Yi ', 'Zhi ', 'Bao ', 'Chai ', 'Han ', 'Pi ', 'Na ', 'Pi ', 'Gou ', 'Na ', 'You ', 'Diao ', 'Mo ', 'Si ', 'Xiu ', 'Huan ', 'Kun ', 'He ', 'He ', 'Mo ', 'Han ', 'Mao ', 'Li ', 'Ni ', 'Bi ', 'Yu ', 'Jia ', 'Tuan ', 'Mao ', 'Pi ', 'Xi ', 'E ', 'Ju ', 'Mo ', 'Chu ', 'Tan ', 'Huan ', 'Jue ', 'Bei ', 'Zhen ', 'Yuan ', 'Fu ', 'Cai ', 'Gong ', 'Te ', 'Yi ', 'Hang ', 'Wan ', 'Pin ', 'Huo ', 'Fan ', 'Tan ', 'Guan ', 'Ze ', 'Zhi ', 'Er ', 'Zhu ', 'Shi ', 'Bi ', 'Zi ', 'Er ', 'Gui ', 'Pian ', 'Bian ', 'Mai ', 'Dai ', 'Sheng ', 'Kuang ', 'Fei ', 'Tie ', 'Yi ', 'Chi ', 'Mao ', 'He ', 'Bi ', 'Lu ', 'Ren ', 'Hui ', 'Gai ', 'Pian ', 'Zi ', 'Jia ', 'Xu ', 'Zei ', 'Jiao ', 'Gai ', 'Zang ', 'Jian ', 'Ying ', 'Xun ', 'Zhen ', 'She ', 'Bin ', 'Bin ', 'Qiu ', 'She ', 'Chuan ', 'Zang ', 'Zhou ', 'Lai ', 'Zan ', 'Si ', 'Chen ', 'Shang ', 'Tian ', 'Pei ', 'Geng ', 'Xian ', 'Mai ', 'Jian ', 'Sui ', 'Fu ', 'Tan ', 'Cong ', 'Cong ', 'Zhi ', 'Ji ', 'Zhang ', 'Du ', 'Jin ', 'Xiong ', 'Shun ', 'Yun ', 'Bao ', 'Zai ', 'Lai ', 'Feng ', 'Cang ', 'Ji ', 'Sheng ', 'Ai ', 'Zhuan ', 'Fu ', 'Gou ', 'Sai ', 'Ze ', 'Liao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08d.php
new file mode 100644
index 000000000..44b0c62cf
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08d.php
@@ -0,0 +1 @@
+<?php return ['Wei ', 'Bai ', 'Chen ', 'Zhuan ', 'Zhi ', 'Zhui ', 'Biao ', 'Yun ', 'Zeng ', 'Tan ', 'Zan ', 'Yan ', '[?] ', 'Shan ', 'Wan ', 'Ying ', 'Jin ', 'Gan ', 'Xian ', 'Zang ', 'Bi ', 'Du ', 'Shu ', 'Yan ', '[?] ', 'Xuan ', 'Long ', 'Gan ', 'Zang ', 'Bei ', 'Zhen ', 'Fu ', 'Yuan ', 'Gong ', 'Cai ', 'Ze ', 'Xian ', 'Bai ', 'Zhang ', 'Huo ', 'Zhi ', 'Fan ', 'Tan ', 'Pin ', 'Bian ', 'Gou ', 'Zhu ', 'Guan ', 'Er ', 'Jian ', 'Bi ', 'Shi ', 'Tie ', 'Gui ', 'Kuang ', 'Dai ', 'Mao ', 'Fei ', 'He ', 'Yi ', 'Zei ', 'Zhi ', 'Jia ', 'Hui ', 'Zi ', 'Ren ', 'Lu ', 'Zang ', 'Zi ', 'Gai ', 'Jin ', 'Qiu ', 'Zhen ', 'Lai ', 'She ', 'Fu ', 'Du ', 'Ji ', 'Shu ', 'Shang ', 'Si ', 'Bi ', 'Zhou ', 'Geng ', 'Pei ', 'Tan ', 'Lai ', 'Feng ', 'Zhui ', 'Fu ', 'Zhuan ', 'Sai ', 'Ze ', 'Yan ', 'Zan ', 'Yun ', 'Zeng ', 'Shan ', 'Ying ', 'Gan ', 'Chi ', 'Xi ', 'She ', 'Nan ', 'Xiong ', 'Xi ', 'Cheng ', 'He ', 'Cheng ', 'Zhe ', 'Xia ', 'Tang ', 'Zou ', 'Zou ', 'Li ', 'Jiu ', 'Fu ', 'Zhao ', 'Gan ', 'Qi ', 'Shan ', 'Qiong ', 'Qin ', 'Xian ', 'Ci ', 'Jue ', 'Qin ', 'Chi ', 'Ci ', 'Chen ', 'Chen ', 'Die ', 'Ju ', 'Chao ', 'Di ', 'Se ', 'Zhan ', 'Zhu ', 'Yue ', 'Qu ', 'Jie ', 'Chi ', 'Chu ', 'Gua ', 'Xue ', 'Ci ', 'Tiao ', 'Duo ', 'Lie ', 'Gan ', 'Suo ', 'Cu ', 'Xi ', 'Zhao ', 'Su ', 'Yin ', 'Ju ', 'Jian ', 'Que ', 'Tang ', 'Chuo ', 'Cui ', 'Lu ', 'Qu ', 'Dang ', 'Qiu ', 'Zi ', 'Ti ', 'Qu ', 'Chi ', 'Huang ', 'Qiao ', 'Qiao ', 'Yao ', 'Zao ', 'Ti ', '[?] ', 'Zan ', 'Zan ', 'Zu ', 'Pa ', 'Bao ', 'Ku ', 'Ke ', 'Dun ', 'Jue ', 'Fu ', 'Chen ', 'Jian ', 'Fang ', 'Zhi ', 'Sa ', 'Yue ', 'Pa ', 'Qi ', 'Yue ', 'Qiang ', 'Tuo ', 'Tai ', 'Yi ', 'Nian ', 'Ling ', 'Mei ', 'Ba ', 'Die ', 'Ku ', 'Tuo ', 'Jia ', 'Ci ', 'Pao ', 'Qia ', 'Zhu ', 'Ju ', 'Die ', 'Zhi ', 'Fu ', 'Pan ', 'Ju ', 'Shan ', 'Bo ', 'Ni ', 'Ju ', 'Li ', 'Gen ', 'Yi ', 'Ji ', 'Dai ', 'Xian ', 'Jiao ', 'Duo ', 'Zhu ', 'Zhuan ', 'Kua ', 'Zhuai ', 'Gui ', 'Qiong ', 'Kui ', 'Xiang ', 'Chi ', 'Lu ', 'Beng ', 'Zhi ', 'Jia ', 'Tiao ', 'Cai ', 'Jian ', 'Ta ', 'Qiao ', 'Bi ', 'Xian ', 'Duo ', 'Ji ', 'Ju ', 'Ji ', 'Shu ', 'Tu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08e.php
new file mode 100644
index 000000000..be82e7953
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08e.php
@@ -0,0 +1 @@
+<?php return ['Chu ', 'Jing ', 'Nie ', 'Xiao ', 'Bo ', 'Chi ', 'Qun ', 'Mou ', 'Shu ', 'Lang ', 'Yong ', 'Jiao ', 'Chou ', 'Qiao ', '[?] ', 'Ta ', 'Jian ', 'Qi ', 'Wo ', 'Wei ', 'Zhuo ', 'Jie ', 'Ji ', 'Nie ', 'Ju ', 'Ju ', 'Lun ', 'Lu ', 'Leng ', 'Huai ', 'Ju ', 'Chi ', 'Wan ', 'Quan ', 'Ti ', 'Bo ', 'Zu ', 'Qie ', 'Ji ', 'Cu ', 'Zong ', 'Cai ', 'Zong ', 'Peng ', 'Zhi ', 'Zheng ', 'Dian ', 'Zhi ', 'Yu ', 'Duo ', 'Dun ', 'Chun ', 'Yong ', 'Zhong ', 'Di ', 'Zhe ', 'Chen ', 'Chuai ', 'Jian ', 'Gua ', 'Tang ', 'Ju ', 'Fu ', 'Zu ', 'Die ', 'Pian ', 'Rou ', 'Nuo ', 'Ti ', 'Cha ', 'Tui ', 'Jian ', 'Dao ', 'Cuo ', 'Xi ', 'Ta ', 'Qiang ', 'Zhan ', 'Dian ', 'Ti ', 'Ji ', 'Nie ', 'Man ', 'Liu ', 'Zhan ', 'Bi ', 'Chong ', 'Lu ', 'Liao ', 'Cu ', 'Tang ', 'Dai ', 'Suo ', 'Xi ', 'Kui ', 'Ji ', 'Zhi ', 'Qiang ', 'Di ', 'Man ', 'Zong ', 'Lian ', 'Beng ', 'Zao ', 'Nian ', 'Bie ', 'Tui ', 'Ju ', 'Deng ', 'Ceng ', 'Xian ', 'Fan ', 'Chu ', 'Zhong ', 'Dun ', 'Bo ', 'Cu ', 'Zu ', 'Jue ', 'Jue ', 'Lin ', 'Ta ', 'Qiao ', 'Qiao ', 'Pu ', 'Liao ', 'Dun ', 'Cuan ', 'Kuang ', 'Zao ', 'Ta ', 'Bi ', 'Bi ', 'Zhu ', 'Ju ', 'Chu ', 'Qiao ', 'Dun ', 'Chou ', 'Ji ', 'Wu ', 'Yue ', 'Nian ', 'Lin ', 'Lie ', 'Zhi ', 'Li ', 'Zhi ', 'Chan ', 'Chu ', 'Duan ', 'Wei ', 'Long ', 'Lin ', 'Xian ', 'Wei ', 'Zuan ', 'Lan ', 'Xie ', 'Rang ', 'Xie ', 'Nie ', 'Ta ', 'Qu ', 'Jie ', 'Cuan ', 'Zuan ', 'Xi ', 'Kui ', 'Jue ', 'Lin ', 'Shen ', 'Gong ', 'Dan ', 'Segare ', 'Qu ', 'Ti ', 'Duo ', 'Duo ', 'Gong ', 'Lang ', 'Nerau ', 'Luo ', 'Ai ', 'Ji ', 'Ju ', 'Tang ', 'Utsuke ', '[?] ', 'Yan ', 'Shitsuke ', 'Kang ', 'Qu ', 'Lou ', 'Lao ', 'Tuo ', 'Zhi ', 'Yagate ', 'Ti ', 'Dao ', 'Yagate ', 'Yu ', 'Che ', 'Ya ', 'Gui ', 'Jun ', 'Wei ', 'Yue ', 'Xin ', 'Di ', 'Xuan ', 'Fan ', 'Ren ', 'Shan ', 'Qiang ', 'Shu ', 'Tun ', 'Chen ', 'Dai ', 'E ', 'Na ', 'Qi ', 'Mao ', 'Ruan ', 'Ren ', 'Fan ', 'Zhuan ', 'Hong ', 'Hu ', 'Qu ', 'Huang ', 'Di ', 'Ling ', 'Dai ', 'Ao ', 'Zhen ', 'Fan ', 'Kuang ', 'Ang ', 'Peng ', 'Bei ', 'Gu ', 'Ku ', 'Pao ', 'Zhu ', 'Rong ', 'E ', 'Ba ', 'Zhou ', 'Zhi ', 'Yao ', 'Ke ', 'Yi ', 'Qing ', 'Shi ', 'Ping '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x08f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x08f.php
new file mode 100644
index 000000000..1587cab02
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x08f.php
@@ -0,0 +1 @@
+<?php return ['Er ', 'Qiong ', 'Ju ', 'Jiao ', 'Guang ', 'Lu ', 'Kai ', 'Quan ', 'Zhou ', 'Zai ', 'Zhi ', 'She ', 'Liang ', 'Yu ', 'Shao ', 'You ', 'Huan ', 'Yun ', 'Zhe ', 'Wan ', 'Fu ', 'Qing ', 'Zhou ', 'Ni ', 'Ling ', 'Zhe ', 'Zhan ', 'Liang ', 'Zi ', 'Hui ', 'Wang ', 'Chuo ', 'Guo ', 'Kan ', 'Yi ', 'Peng ', 'Qian ', 'Gun ', 'Nian ', 'Pian ', 'Guan ', 'Bei ', 'Lun ', 'Pai ', 'Liang ', 'Ruan ', 'Rou ', 'Ji ', 'Yang ', 'Xian ', 'Chuan ', 'Cou ', 'Qun ', 'Ge ', 'You ', 'Hong ', 'Shu ', 'Fu ', 'Zi ', 'Fu ', 'Wen ', 'Ben ', 'Zhan ', 'Yu ', 'Wen ', 'Tao ', 'Gu ', 'Zhen ', 'Xia ', 'Yuan ', 'Lu ', 'Jiu ', 'Chao ', 'Zhuan ', 'Wei ', 'Hun ', 'Sori ', 'Che ', 'Jiao ', 'Zhan ', 'Pu ', 'Lao ', 'Fen ', 'Fan ', 'Lin ', 'Ge ', 'Se ', 'Kan ', 'Huan ', 'Yi ', 'Ji ', 'Dui ', 'Er ', 'Yu ', 'Xian ', 'Hong ', 'Lei ', 'Pei ', 'Li ', 'Li ', 'Lu ', 'Lin ', 'Che ', 'Ya ', 'Gui ', 'Xuan ', 'Di ', 'Ren ', 'Zhuan ', 'E ', 'Lun ', 'Ruan ', 'Hong ', 'Ku ', 'Ke ', 'Lu ', 'Zhou ', 'Zhi ', 'Yi ', 'Hu ', 'Zhen ', 'Li ', 'Yao ', 'Qing ', 'Shi ', 'Zai ', 'Zhi ', 'Jiao ', 'Zhou ', 'Quan ', 'Lu ', 'Jiao ', 'Zhe ', 'Fu ', 'Liang ', 'Nian ', 'Bei ', 'Hui ', 'Gun ', 'Wang ', 'Liang ', 'Chuo ', 'Zi ', 'Cou ', 'Fu ', 'Ji ', 'Wen ', 'Shu ', 'Pei ', 'Yuan ', 'Xia ', 'Zhan ', 'Lu ', 'Che ', 'Lin ', 'Xin ', 'Gu ', 'Ci ', 'Ci ', 'Pi ', 'Zui ', 'Bian ', 'La ', 'La ', 'Ci ', 'Xue ', 'Ban ', 'Bian ', 'Bian ', 'Bian ', '[?] ', 'Bian ', 'Ban ', 'Ci ', 'Bian ', 'Bian ', 'Chen ', 'Ru ', 'Nong ', 'Nong ', 'Zhen ', 'Chuo ', 'Chuo ', 'Suberu ', 'Reng ', 'Bian ', 'Bian ', 'Sip ', 'Ip ', 'Liao ', 'Da ', 'Chan ', 'Gan ', 'Qian ', 'Yu ', 'Yu ', 'Qi ', 'Xun ', 'Yi ', 'Guo ', 'Mai ', 'Qi ', 'Za ', 'Wang ', 'Jia ', 'Zhun ', 'Ying ', 'Ti ', 'Yun ', 'Jin ', 'Hang ', 'Ya ', 'Fan ', 'Wu ', 'Da ', 'E ', 'Huan ', 'Zhe ', 'Totemo ', 'Jin ', 'Yuan ', 'Wei ', 'Lian ', 'Chi ', 'Che ', 'Ni ', 'Tiao ', 'Zhi ', 'Yi ', 'Jiong ', 'Jia ', 'Chen ', 'Dai ', 'Er ', 'Di ', 'Po ', 'Wang ', 'Die ', 'Ze ', 'Tao ', 'Shu ', 'Tuo ', 'Kep ', 'Jing ', 'Hui ', 'Tong ', 'You ', 'Mi ', 'Beng ', 'Ji ', 'Nai ', 'Yi ', 'Jie ', 'Zhui ', 'Lie ', 'Xun '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x090.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x090.php
new file mode 100644
index 000000000..88735d01f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x090.php
@@ -0,0 +1 @@
+<?php return ['Tui ', 'Song ', 'Gua ', 'Tao ', 'Pang ', 'Hou ', 'Ni ', 'Dun ', 'Jiong ', 'Xuan ', 'Xun ', 'Bu ', 'You ', 'Xiao ', 'Qiu ', 'Tou ', 'Zhu ', 'Qiu ', 'Di ', 'Di ', 'Tu ', 'Jing ', 'Ti ', 'Dou ', 'Yi ', 'Zhe ', 'Tong ', 'Guang ', 'Wu ', 'Shi ', 'Cheng ', 'Su ', 'Zao ', 'Qun ', 'Feng ', 'Lian ', 'Suo ', 'Hui ', 'Li ', 'Sako ', 'Lai ', 'Ben ', 'Cuo ', 'Jue ', 'Beng ', 'Huan ', 'Dai ', 'Lu ', 'You ', 'Zhou ', 'Jin ', 'Yu ', 'Chuo ', 'Kui ', 'Wei ', 'Ti ', 'Yi ', 'Da ', 'Yuan ', 'Luo ', 'Bi ', 'Nuo ', 'Yu ', 'Dang ', 'Sui ', 'Dun ', 'Sui ', 'Yan ', 'Chuan ', 'Chi ', 'Ti ', 'Yu ', 'Shi ', 'Zhen ', 'You ', 'Yun ', 'E ', 'Bian ', 'Guo ', 'E ', 'Xia ', 'Huang ', 'Qiu ', 'Dao ', 'Da ', 'Wei ', 'Appare ', 'Yi ', 'Gou ', 'Yao ', 'Chu ', 'Liu ', 'Xun ', 'Ta ', 'Di ', 'Chi ', 'Yuan ', 'Su ', 'Ta ', 'Qian ', '[?] ', 'Yao ', 'Guan ', 'Zhang ', 'Ao ', 'Shi ', 'Ce ', 'Chi ', 'Su ', 'Zao ', 'Zhe ', 'Dun ', 'Di ', 'Lou ', 'Chi ', 'Cuo ', 'Lin ', 'Zun ', 'Rao ', 'Qian ', 'Xuan ', 'Yu ', 'Yi ', 'Wu ', 'Liao ', 'Ju ', 'Shi ', 'Bi ', 'Yao ', 'Mai ', 'Xie ', 'Sui ', 'Huan ', 'Zhan ', 'Teng ', 'Er ', 'Miao ', 'Bian ', 'Bian ', 'La ', 'Li ', 'Yuan ', 'Yao ', 'Luo ', 'Li ', 'Yi ', 'Ting ', 'Deng ', 'Qi ', 'Yong ', 'Shan ', 'Han ', 'Yu ', 'Mang ', 'Ru ', 'Qiong ', '[?] ', 'Kuang ', 'Fu ', 'Kang ', 'Bin ', 'Fang ', 'Xing ', 'Na ', 'Xin ', 'Shen ', 'Bang ', 'Yuan ', 'Cun ', 'Huo ', 'Xie ', 'Bang ', 'Wu ', 'Ju ', 'You ', 'Han ', 'Tai ', 'Qiu ', 'Bi ', 'Pei ', 'Bing ', 'Shao ', 'Bei ', 'Wa ', 'Di ', 'Zou ', 'Ye ', 'Lin ', 'Kuang ', 'Gui ', 'Zhu ', 'Shi ', 'Ku ', 'Yu ', 'Gai ', 'Ge ', 'Xi ', 'Zhi ', 'Ji ', 'Xun ', 'Hou ', 'Xing ', 'Jiao ', 'Xi ', 'Gui ', 'Nuo ', 'Lang ', 'Jia ', 'Kuai ', 'Zheng ', 'Otoko ', 'Yun ', 'Yan ', 'Cheng ', 'Dou ', 'Chi ', 'Lu ', 'Fu ', 'Wu ', 'Fu ', 'Gao ', 'Hao ', 'Lang ', 'Jia ', 'Geng ', 'Jun ', 'Ying ', 'Bo ', 'Xi ', 'Bei ', 'Li ', 'Yun ', 'Bu ', 'Xiao ', 'Qi ', 'Pi ', 'Qing ', 'Guo ', 'Zhou ', 'Tan ', 'Zou ', 'Ping ', 'Lai ', 'Ni ', 'Chen ', 'You ', 'Bu ', 'Xiang ', 'Dan ', 'Ju ', 'Yong ', 'Qiao ', 'Yi ', 'Du ', 'Yan ', 'Mei '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x091.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x091.php
new file mode 100644
index 000000000..372e972e3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x091.php
@@ -0,0 +1 @@
+<?php return ['Ruo ', 'Bei ', 'E ', 'Yu ', 'Juan ', 'Yu ', 'Yun ', 'Hou ', 'Kui ', 'Xiang ', 'Xiang ', 'Sou ', 'Tang ', 'Ming ', 'Xi ', 'Ru ', 'Chu ', 'Zi ', 'Zou ', 'Ju ', 'Wu ', 'Xiang ', 'Yun ', 'Hao ', 'Yong ', 'Bi ', 'Mo ', 'Chao ', 'Fu ', 'Liao ', 'Yin ', 'Zhuan ', 'Hu ', 'Qiao ', 'Yan ', 'Zhang ', 'Fan ', 'Qiao ', 'Xu ', 'Deng ', 'Bi ', 'Xin ', 'Bi ', 'Ceng ', 'Wei ', 'Zheng ', 'Mao ', 'Shan ', 'Lin ', 'Po ', 'Dan ', 'Meng ', 'Ye ', 'Cao ', 'Kuai ', 'Feng ', 'Meng ', 'Zou ', 'Kuang ', 'Lian ', 'Zan ', 'Chan ', 'You ', 'Qi ', 'Yan ', 'Chan ', 'Zan ', 'Ling ', 'Huan ', 'Xi ', 'Feng ', 'Zan ', 'Li ', 'You ', 'Ding ', 'Qiu ', 'Zhuo ', 'Pei ', 'Zhou ', 'Yi ', 'Hang ', 'Yu ', 'Jiu ', 'Yan ', 'Zui ', 'Mao ', 'Dan ', 'Xu ', 'Tou ', 'Zhen ', 'Fen ', 'Sakenomoto ', '[?] ', 'Yun ', 'Tai ', 'Tian ', 'Qia ', 'Tuo ', 'Zuo ', 'Han ', 'Gu ', 'Su ', 'Po ', 'Chou ', 'Zai ', 'Ming ', 'Luo ', 'Chuo ', 'Chou ', 'You ', 'Tong ', 'Zhi ', 'Xian ', 'Jiang ', 'Cheng ', 'Yin ', 'Tu ', 'Xiao ', 'Mei ', 'Ku ', 'Suan ', 'Lei ', 'Pu ', 'Zui ', 'Hai ', 'Yan ', 'Xi ', 'Niang ', 'Wei ', 'Lu ', 'Lan ', 'Yan ', 'Tao ', 'Pei ', 'Zhan ', 'Chun ', 'Tan ', 'Zui ', 'Chuo ', 'Cu ', 'Kun ', 'Ti ', 'Mian ', 'Du ', 'Hu ', 'Xu ', 'Xing ', 'Tan ', 'Jiu ', 'Chun ', 'Yun ', 'Po ', 'Ke ', 'Sou ', 'Mi ', 'Quan ', 'Chou ', 'Cuo ', 'Yun ', 'Yong ', 'Ang ', 'Zha ', 'Hai ', 'Tang ', 'Jiang ', 'Piao ', 'Shan ', 'Yu ', 'Li ', 'Zao ', 'Lao ', 'Yi ', 'Jiang ', 'Pu ', 'Jiao ', 'Xi ', 'Tan ', 'Po ', 'Nong ', 'Yi ', 'Li ', 'Ju ', 'Jiao ', 'Yi ', 'Niang ', 'Ru ', 'Xun ', 'Chou ', 'Yan ', 'Ling ', 'Mi ', 'Mi ', 'Niang ', 'Xin ', 'Jiao ', 'Xi ', 'Mi ', 'Yan ', 'Bian ', 'Cai ', 'Shi ', 'You ', 'Shi ', 'Shi ', 'Li ', 'Zhong ', 'Ye ', 'Liang ', 'Li ', 'Jin ', 'Jin ', 'Qiu ', 'Yi ', 'Diao ', 'Dao ', 'Zhao ', 'Ding ', 'Po ', 'Qiu ', 'He ', 'Fu ', 'Zhen ', 'Zhi ', 'Ba ', 'Luan ', 'Fu ', 'Nai ', 'Diao ', 'Shan ', 'Qiao ', 'Kou ', 'Chuan ', 'Zi ', 'Fan ', 'Yu ', 'Hua ', 'Han ', 'Gong ', 'Qi ', 'Mang ', 'Ri ', 'Di ', 'Si ', 'Xi ', 'Yi ', 'Chai ', 'Shi ', 'Tu ', 'Xi ', 'Nu ', 'Qian ', 'Ishiyumi ', 'Jian ', 'Pi ', 'Ye ', 'Yin '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x092.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x092.php
new file mode 100644
index 000000000..e9528f7a7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x092.php
@@ -0,0 +1 @@
+<?php return ['Ba ', 'Fang ', 'Chen ', 'Xing ', 'Tou ', 'Yue ', 'Yan ', 'Fu ', 'Pi ', 'Na ', 'Xin ', 'E ', 'Jue ', 'Dun ', 'Gou ', 'Yin ', 'Qian ', 'Ban ', 'Ji ', 'Ren ', 'Chao ', 'Niu ', 'Fen ', 'Yun ', 'Ji ', 'Qin ', 'Pi ', 'Guo ', 'Hong ', 'Yin ', 'Jun ', 'Shi ', 'Yi ', 'Zhong ', 'Nie ', 'Gai ', 'Ri ', 'Huo ', 'Tai ', 'Kang ', 'Habaki ', 'Irori ', 'Ngaak ', '[?] ', 'Duo ', 'Zi ', 'Ni ', 'Tu ', 'Shi ', 'Min ', 'Gu ', 'E ', 'Ling ', 'Bing ', 'Yi ', 'Gu ', 'Ba ', 'Pi ', 'Yu ', 'Si ', 'Zuo ', 'Bu ', 'You ', 'Dian ', 'Jia ', 'Zhen ', 'Shi ', 'Shi ', 'Tie ', 'Ju ', 'Zhan ', 'Shi ', 'She ', 'Xuan ', 'Zhao ', 'Bao ', 'He ', 'Bi ', 'Sheng ', 'Chu ', 'Shi ', 'Bo ', 'Zhu ', 'Chi ', 'Za ', 'Po ', 'Tong ', 'Qian ', 'Fu ', 'Zhai ', 'Liu ', 'Qian ', 'Fu ', 'Li ', 'Yue ', 'Pi ', 'Yang ', 'Ban ', 'Bo ', 'Jie ', 'Gou ', 'Shu ', 'Zheng ', 'Mu ', 'Ni ', 'Nie ', 'Di ', 'Jia ', 'Mu ', 'Dan ', 'Shen ', 'Yi ', 'Si ', 'Kuang ', 'Ka ', 'Bei ', 'Jian ', 'Tong ', 'Xing ', 'Hong ', 'Jiao ', 'Chi ', 'Er ', 'Ge ', 'Bing ', 'Shi ', 'Mou ', 'Jia ', 'Yin ', 'Jun ', 'Zhou ', 'Chong ', 'Shang ', 'Tong ', 'Mo ', 'Lei ', 'Ji ', 'Yu ', 'Xu ', 'Ren ', 'Zun ', 'Zhi ', 'Qiong ', 'Shan ', 'Chi ', 'Xian ', 'Xing ', 'Quan ', 'Pi ', 'Tie ', 'Zhu ', 'Hou ', 'Ming ', 'Kua ', 'Yao ', 'Xian ', 'Xian ', 'Xiu ', 'Jun ', 'Cha ', 'Lao ', 'Ji ', 'Pi ', 'Ru ', 'Mi ', 'Yi ', 'Yin ', 'Guang ', 'An ', 'Diou ', 'You ', 'Se ', 'Kao ', 'Qian ', 'Luan ', 'Kasugai ', 'Ai ', 'Diao ', 'Han ', 'Rui ', 'Shi ', 'Keng ', 'Qiu ', 'Xiao ', 'Zhe ', 'Xiu ', 'Zang ', 'Ti ', 'Cuo ', 'Gua ', 'Gong ', 'Zhong ', 'Dou ', 'Lu ', 'Mei ', 'Lang ', 'Wan ', 'Xin ', 'Yun ', 'Bei ', 'Wu ', 'Su ', 'Yu ', 'Chan ', 'Ting ', 'Bo ', 'Han ', 'Jia ', 'Hong ', 'Cuan ', 'Feng ', 'Chan ', 'Wan ', 'Zhi ', 'Si ', 'Xuan ', 'Wu ', 'Wu ', 'Tiao ', 'Gong ', 'Zhuo ', 'Lue ', 'Xing ', 'Qian ', 'Shen ', 'Han ', 'Lue ', 'Xie ', 'Chu ', 'Zheng ', 'Ju ', 'Xian ', 'Tie ', 'Mang ', 'Pu ', 'Li ', 'Pan ', 'Rui ', 'Cheng ', 'Gao ', 'Li ', 'Te ', 'Pyeng ', 'Zhu ', '[?] ', 'Tu ', 'Liu ', 'Zui ', 'Ju ', 'Chang ', 'Yuan ', 'Jian ', 'Gang ', 'Diao ', 'Tao ', 'Chang '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x093.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x093.php
new file mode 100644
index 000000000..564a43f27
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x093.php
@@ -0,0 +1 @@
+<?php return ['Lun ', 'Kua ', 'Ling ', 'Bei ', 'Lu ', 'Li ', 'Qiang ', 'Pou ', 'Juan ', 'Min ', 'Zui ', 'Peng ', 'An ', 'Pi ', 'Xian ', 'Ya ', 'Zhui ', 'Lei ', 'A ', 'Kong ', 'Ta ', 'Kun ', 'Du ', 'Wei ', 'Chui ', 'Zi ', 'Zheng ', 'Ben ', 'Nie ', 'Cong ', 'Qun ', 'Tan ', 'Ding ', 'Qi ', 'Qian ', 'Zhuo ', 'Qi ', 'Yu ', 'Jin ', 'Guan ', 'Mao ', 'Chang ', 'Tian ', 'Xi ', 'Lian ', 'Tao ', 'Gu ', 'Cuo ', 'Shu ', 'Zhen ', 'Lu ', 'Meng ', 'Lu ', 'Hua ', 'Biao ', 'Ga ', 'Lai ', 'Ken ', 'Kazari ', 'Bu ', 'Nai ', 'Wan ', 'Zan ', '[?] ', 'De ', 'Xian ', '[?] ', 'Huo ', 'Liang ', '[?] ', 'Men ', 'Kai ', 'Ying ', 'Di ', 'Lian ', 'Guo ', 'Xian ', 'Du ', 'Tu ', 'Wei ', 'Cong ', 'Fu ', 'Rou ', 'Ji ', 'E ', 'Rou ', 'Chen ', 'Ti ', 'Zha ', 'Hong ', 'Yang ', 'Duan ', 'Xia ', 'Yu ', 'Keng ', 'Xing ', 'Huang ', 'Wei ', 'Fu ', 'Zhao ', 'Cha ', 'Qie ', 'She ', 'Hong ', 'Kui ', 'Tian ', 'Mou ', 'Qiao ', 'Qiao ', 'Hou ', 'Tou ', 'Cong ', 'Huan ', 'Ye ', 'Min ', 'Jian ', 'Duan ', 'Jian ', 'Song ', 'Kui ', 'Hu ', 'Xuan ', 'Duo ', 'Jie ', 'Zhen ', 'Bian ', 'Zhong ', 'Zi ', 'Xiu ', 'Ye ', 'Mei ', 'Pai ', 'Ai ', 'Jie ', '[?] ', 'Mei ', 'Chuo ', 'Ta ', 'Bang ', 'Xia ', 'Lian ', 'Suo ', 'Xi ', 'Liu ', 'Zu ', 'Ye ', 'Nou ', 'Weng ', 'Rong ', 'Tang ', 'Suo ', 'Qiang ', 'Ge ', 'Shuo ', 'Chui ', 'Bo ', 'Pan ', 'Sa ', 'Bi ', 'Sang ', 'Gang ', 'Zi ', 'Wu ', 'Ying ', 'Huang ', 'Tiao ', 'Liu ', 'Kai ', 'Sun ', 'Sha ', 'Sou ', 'Wan ', 'Hao ', 'Zhen ', 'Zhen ', 'Luo ', 'Yi ', 'Yuan ', 'Tang ', 'Nie ', 'Xi ', 'Jia ', 'Ge ', 'Ma ', 'Juan ', 'Kasugai ', 'Habaki ', 'Suo ', '[?] ', '[?] ', '[?] ', 'Na ', 'Lu ', 'Suo ', 'Ou ', 'Zu ', 'Tuan ', 'Xiu ', 'Guan ', 'Xuan ', 'Lian ', 'Shou ', 'Ao ', 'Man ', 'Mo ', 'Luo ', 'Bi ', 'Wei ', 'Liu ', 'Di ', 'Qiao ', 'Cong ', 'Yi ', 'Lu ', 'Ao ', 'Keng ', 'Qiang ', 'Cui ', 'Qi ', 'Chang ', 'Tang ', 'Man ', 'Yong ', 'Chan ', 'Feng ', 'Jing ', 'Biao ', 'Shu ', 'Lou ', 'Xiu ', 'Cong ', 'Long ', 'Zan ', 'Jian ', 'Cao ', 'Li ', 'Xia ', 'Xi ', 'Kang ', '[?] ', 'Beng ', '[?] ', '[?] ', 'Zheng ', 'Lu ', 'Hua ', 'Ji ', 'Pu ', 'Hui ', 'Qiang ', 'Po ', 'Lin ', 'Suo ', 'Xiu ', 'San ', 'Cheng '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x094.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x094.php
new file mode 100644
index 000000000..ee2bd6f79
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x094.php
@@ -0,0 +1 @@
+<?php return ['Kui ', 'Si ', 'Liu ', 'Nao ', 'Heng ', 'Pie ', 'Sui ', 'Fan ', 'Qiao ', 'Quan ', 'Yang ', 'Tang ', 'Xiang ', 'Jue ', 'Jiao ', 'Zun ', 'Liao ', 'Jie ', 'Lao ', 'Dui ', 'Tan ', 'Zan ', 'Ji ', 'Jian ', 'Zhong ', 'Deng ', 'Ya ', 'Ying ', 'Dui ', 'Jue ', 'Nou ', 'Ti ', 'Pu ', 'Tie ', '[?] ', '[?] ', 'Ding ', 'Shan ', 'Kai ', 'Jian ', 'Fei ', 'Sui ', 'Lu ', 'Juan ', 'Hui ', 'Yu ', 'Lian ', 'Zhuo ', 'Qiao ', 'Qian ', 'Zhuo ', 'Lei ', 'Bi ', 'Tie ', 'Huan ', 'Ye ', 'Duo ', 'Guo ', 'Dang ', 'Ju ', 'Fen ', 'Da ', 'Bei ', 'Yi ', 'Ai ', 'Zong ', 'Xun ', 'Diao ', 'Zhu ', 'Heng ', 'Zhui ', 'Ji ', 'Nie ', 'Ta ', 'Huo ', 'Qing ', 'Bin ', 'Ying ', 'Kui ', 'Ning ', 'Xu ', 'Jian ', 'Jian ', 'Yari ', 'Cha ', 'Zhi ', 'Mie ', 'Li ', 'Lei ', 'Ji ', 'Zuan ', 'Kuang ', 'Shang ', 'Peng ', 'La ', 'Du ', 'Shuo ', 'Chuo ', 'Lu ', 'Biao ', 'Bao ', 'Lu ', '[?] ', '[?] ', 'Long ', 'E ', 'Lu ', 'Xin ', 'Jian ', 'Lan ', 'Bo ', 'Jian ', 'Yao ', 'Chan ', 'Xiang ', 'Jian ', 'Xi ', 'Guan ', 'Cang ', 'Nie ', 'Lei ', 'Cuan ', 'Qu ', 'Pan ', 'Luo ', 'Zuan ', 'Luan ', 'Zao ', 'Nie ', 'Jue ', 'Tang ', 'Shu ', 'Lan ', 'Jin ', 'Qiu ', 'Yi ', 'Zhen ', 'Ding ', 'Zhao ', 'Po ', 'Diao ', 'Tu ', 'Qian ', 'Chuan ', 'Shan ', 'Ji ', 'Fan ', 'Diao ', 'Men ', 'Nu ', 'Xi ', 'Chai ', 'Xing ', 'Gai ', 'Bu ', 'Tai ', 'Ju ', 'Dun ', 'Chao ', 'Zhong ', 'Na ', 'Bei ', 'Gang ', 'Ban ', 'Qian ', 'Yao ', 'Qin ', 'Jun ', 'Wu ', 'Gou ', 'Kang ', 'Fang ', 'Huo ', 'Tou ', 'Niu ', 'Ba ', 'Yu ', 'Qian ', 'Zheng ', 'Qian ', 'Gu ', 'Bo ', 'E ', 'Po ', 'Bu ', 'Ba ', 'Yue ', 'Zuan ', 'Mu ', 'Dan ', 'Jia ', 'Dian ', 'You ', 'Tie ', 'Bo ', 'Ling ', 'Shuo ', 'Qian ', 'Liu ', 'Bao ', 'Shi ', 'Xuan ', 'She ', 'Bi ', 'Ni ', 'Pi ', 'Duo ', 'Xing ', 'Kao ', 'Lao ', 'Er ', 'Mang ', 'Ya ', 'You ', 'Cheng ', 'Jia ', 'Ye ', 'Nao ', 'Zhi ', 'Dang ', 'Tong ', 'Lu ', 'Diao ', 'Yin ', 'Kai ', 'Zha ', 'Zhu ', 'Xian ', 'Ting ', 'Diu ', 'Xian ', 'Hua ', 'Quan ', 'Sha ', 'Jia ', 'Yao ', 'Ge ', 'Ming ', 'Zheng ', 'Se ', 'Jiao ', 'Yi ', 'Chan ', 'Chong ', 'Tang ', 'An ', 'Yin ', 'Ru ', 'Zhu ', 'Lao ', 'Pu ', 'Wu ', 'Lai ', 'Te ', 'Lian ', 'Keng '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x095.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x095.php
new file mode 100644
index 000000000..a14ab1760
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x095.php
@@ -0,0 +1 @@
+<?php return ['Xiao ', 'Suo ', 'Li ', 'Zheng ', 'Chu ', 'Guo ', 'Gao ', 'Tie ', 'Xiu ', 'Cuo ', 'Lue ', 'Feng ', 'Xin ', 'Liu ', 'Kai ', 'Jian ', 'Rui ', 'Ti ', 'Lang ', 'Qian ', 'Ju ', 'A ', 'Qiang ', 'Duo ', 'Tian ', 'Cuo ', 'Mao ', 'Ben ', 'Qi ', 'De ', 'Kua ', 'Kun ', 'Chang ', 'Xi ', 'Gu ', 'Luo ', 'Chui ', 'Zhui ', 'Jin ', 'Zhi ', 'Xian ', 'Juan ', 'Huo ', 'Pou ', 'Tan ', 'Ding ', 'Jian ', 'Ju ', 'Meng ', 'Zi ', 'Qie ', 'Ying ', 'Kai ', 'Qiang ', 'Song ', 'E ', 'Cha ', 'Qiao ', 'Zhong ', 'Duan ', 'Sou ', 'Huang ', 'Huan ', 'Ai ', 'Du ', 'Mei ', 'Lou ', 'Zi ', 'Fei ', 'Mei ', 'Mo ', 'Zhen ', 'Bo ', 'Ge ', 'Nie ', 'Tang ', 'Juan ', 'Nie ', 'Na ', 'Liu ', 'Hao ', 'Bang ', 'Yi ', 'Jia ', 'Bin ', 'Rong ', 'Biao ', 'Tang ', 'Man ', 'Luo ', 'Beng ', 'Yong ', 'Jing ', 'Di ', 'Zu ', 'Xuan ', 'Liu ', 'Tan ', 'Jue ', 'Liao ', 'Pu ', 'Lu ', 'Dui ', 'Lan ', 'Pu ', 'Cuan ', 'Qiang ', 'Deng ', 'Huo ', 'Lei ', 'Huan ', 'Zhuo ', 'Lian ', 'Yi ', 'Cha ', 'Biao ', 'La ', 'Chan ', 'Xiang ', 'Chang ', 'Chang ', 'Jiu ', 'Ao ', 'Die ', 'Qu ', 'Liao ', 'Mi ', 'Chang ', 'Men ', 'Ma ', 'Shuan ', 'Shan ', 'Huo ', 'Men ', 'Yan ', 'Bi ', 'Han ', 'Bi ', 'San ', 'Kai ', 'Kang ', 'Beng ', 'Hong ', 'Run ', 'San ', 'Xian ', 'Xian ', 'Jian ', 'Min ', 'Xia ', 'Yuru ', 'Dou ', 'Zha ', 'Nao ', 'Jian ', 'Peng ', 'Xia ', 'Ling ', 'Bian ', 'Bi ', 'Run ', 'He ', 'Guan ', 'Ge ', 'Ge ', 'Fa ', 'Chu ', 'Hong ', 'Gui ', 'Min ', 'Se ', 'Kun ', 'Lang ', 'Lu ', 'Ting ', 'Sha ', 'Ju ', 'Yue ', 'Yue ', 'Chan ', 'Qu ', 'Lin ', 'Chang ', 'Shai ', 'Kun ', 'Yan ', 'Min ', 'Yan ', 'E ', 'Hun ', 'Yu ', 'Wen ', 'Xiang ', 'Bao ', 'Xiang ', 'Qu ', 'Yao ', 'Wen ', 'Ban ', 'An ', 'Wei ', 'Yin ', 'Kuo ', 'Que ', 'Lan ', 'Du ', '[?] ', 'Phwung ', 'Tian ', 'Nie ', 'Ta ', 'Kai ', 'He ', 'Que ', 'Chuang ', 'Guan ', 'Dou ', 'Qi ', 'Kui ', 'Tang ', 'Guan ', 'Piao ', 'Kan ', 'Xi ', 'Hui ', 'Chan ', 'Pi ', 'Dang ', 'Huan ', 'Ta ', 'Wen ', '[?] ', 'Men ', 'Shuan ', 'Shan ', 'Yan ', 'Han ', 'Bi ', 'Wen ', 'Chuang ', 'Run ', 'Wei ', 'Xian ', 'Hong ', 'Jian ', 'Min ', 'Kang ', 'Men ', 'Zha ', 'Nao ', 'Gui ', 'Wen ', 'Ta ', 'Min ', 'Lu ', 'Kai '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x096.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x096.php
new file mode 100644
index 000000000..43f58e756
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x096.php
@@ -0,0 +1 @@
+<?php return ['Fa ', 'Ge ', 'He ', 'Kun ', 'Jiu ', 'Yue ', 'Lang ', 'Du ', 'Yu ', 'Yan ', 'Chang ', 'Xi ', 'Wen ', 'Hun ', 'Yan ', 'E ', 'Chan ', 'Lan ', 'Qu ', 'Hui ', 'Kuo ', 'Que ', 'Ge ', 'Tian ', 'Ta ', 'Que ', 'Kan ', 'Huan ', 'Fu ', 'Fu ', 'Le ', 'Dui ', 'Xin ', 'Qian ', 'Wu ', 'Yi ', 'Tuo ', 'Yin ', 'Yang ', 'Dou ', 'E ', 'Sheng ', 'Ban ', 'Pei ', 'Keng ', 'Yun ', 'Ruan ', 'Zhi ', 'Pi ', 'Jing ', 'Fang ', 'Yang ', 'Yin ', 'Zhen ', 'Jie ', 'Cheng ', 'E ', 'Qu ', 'Di ', 'Zu ', 'Zuo ', 'Dian ', 'Ling ', 'A ', 'Tuo ', 'Tuo ', 'Po ', 'Bing ', 'Fu ', 'Ji ', 'Lu ', 'Long ', 'Chen ', 'Xing ', 'Duo ', 'Lou ', 'Mo ', 'Jiang ', 'Shu ', 'Duo ', 'Xian ', 'Er ', 'Gui ', 'Yu ', 'Gai ', 'Shan ', 'Xun ', 'Qiao ', 'Xing ', 'Chun ', 'Fu ', 'Bi ', 'Xia ', 'Shan ', 'Sheng ', 'Zhi ', 'Pu ', 'Dou ', 'Yuan ', 'Zhen ', 'Chu ', 'Xian ', 'Tou ', 'Nie ', 'Yun ', 'Xian ', 'Pei ', 'Pei ', 'Zou ', 'Yi ', 'Dui ', 'Lun ', 'Yin ', 'Ju ', 'Chui ', 'Chen ', 'Pi ', 'Ling ', 'Tao ', 'Xian ', 'Lu ', 'Sheng ', 'Xian ', 'Yin ', 'Zhu ', 'Yang ', 'Reng ', 'Shan ', 'Chong ', 'Yan ', 'Yin ', 'Yu ', 'Ti ', 'Yu ', 'Long ', 'Wei ', 'Wei ', 'Nie ', 'Dui ', 'Sui ', 'An ', 'Huang ', 'Jie ', 'Sui ', 'Yin ', 'Gai ', 'Yan ', 'Hui ', 'Ge ', 'Yun ', 'Wu ', 'Wei ', 'Ai ', 'Xi ', 'Tang ', 'Ji ', 'Zhang ', 'Dao ', 'Ao ', 'Xi ', 'Yin ', '[?] ', 'Rao ', 'Lin ', 'Tui ', 'Deng ', 'Pi ', 'Sui ', 'Sui ', 'Yu ', 'Xian ', 'Fen ', 'Ni ', 'Er ', 'Ji ', 'Dao ', 'Xi ', 'Yin ', 'E ', 'Hui ', 'Long ', 'Xi ', 'Li ', 'Li ', 'Li ', 'Zhui ', 'He ', 'Zhi ', 'Zhun ', 'Jun ', 'Nan ', 'Yi ', 'Que ', 'Yan ', 'Qian ', 'Ya ', 'Xiong ', 'Ya ', 'Ji ', 'Gu ', 'Huan ', 'Zhi ', 'Gou ', 'Jun ', 'Ci ', 'Yong ', 'Ju ', 'Chu ', 'Hu ', 'Za ', 'Luo ', 'Yu ', 'Chou ', 'Diao ', 'Sui ', 'Han ', 'Huo ', 'Shuang ', 'Guan ', 'Chu ', 'Za ', 'Yong ', 'Ji ', 'Xi ', 'Chou ', 'Liu ', 'Li ', 'Nan ', 'Xue ', 'Za ', 'Ji ', 'Ji ', 'Yu ', 'Yu ', 'Xue ', 'Na ', 'Fou ', 'Se ', 'Mu ', 'Wen ', 'Fen ', 'Pang ', 'Yun ', 'Li ', 'Li ', 'Ang ', 'Ling ', 'Lei ', 'An ', 'Bao ', 'Meng ', 'Dian ', 'Dang ', 'Xing ', 'Wu ', 'Zhao '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x097.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x097.php
new file mode 100644
index 000000000..8be6ac9fa
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x097.php
@@ -0,0 +1 @@
+<?php return ['Xu ', 'Ji ', 'Mu ', 'Chen ', 'Xiao ', 'Zha ', 'Ting ', 'Zhen ', 'Pei ', 'Mei ', 'Ling ', 'Qi ', 'Chou ', 'Huo ', 'Sha ', 'Fei ', 'Weng ', 'Zhan ', 'Yin ', 'Ni ', 'Chou ', 'Tun ', 'Lin ', '[?] ', 'Dong ', 'Ying ', 'Wu ', 'Ling ', 'Shuang ', 'Ling ', 'Xia ', 'Hong ', 'Yin ', 'Mo ', 'Mai ', 'Yun ', 'Liu ', 'Meng ', 'Bin ', 'Wu ', 'Wei ', 'Huo ', 'Yin ', 'Xi ', 'Yi ', 'Ai ', 'Dan ', 'Deng ', 'Xian ', 'Yu ', 'Lu ', 'Long ', 'Dai ', 'Ji ', 'Pang ', 'Yang ', 'Ba ', 'Pi ', 'Wei ', '[?] ', 'Xi ', 'Ji ', 'Mai ', 'Meng ', 'Meng ', 'Lei ', 'Li ', 'Huo ', 'Ai ', 'Fei ', 'Dai ', 'Long ', 'Ling ', 'Ai ', 'Feng ', 'Li ', 'Bao ', '[?] ', 'He ', 'He ', 'Bing ', 'Qing ', 'Qing ', 'Jing ', 'Tian ', 'Zhen ', 'Jing ', 'Cheng ', 'Qing ', 'Jing ', 'Jing ', 'Dian ', 'Jing ', 'Tian ', 'Fei ', 'Fei ', 'Kao ', 'Mi ', 'Mian ', 'Mian ', 'Pao ', 'Ye ', 'Tian ', 'Hui ', 'Ye ', 'Ge ', 'Ding ', 'Cha ', 'Jian ', 'Ren ', 'Di ', 'Du ', 'Wu ', 'Ren ', 'Qin ', 'Jin ', 'Xue ', 'Niu ', 'Ba ', 'Yin ', 'Sa ', 'Na ', 'Mo ', 'Zu ', 'Da ', 'Ban ', 'Yi ', 'Yao ', 'Tao ', 'Tuo ', 'Jia ', 'Hong ', 'Pao ', 'Yang ', 'Tomo ', 'Yin ', 'Jia ', 'Tao ', 'Ji ', 'Xie ', 'An ', 'An ', 'Hen ', 'Gong ', 'Kohaze ', 'Da ', 'Qiao ', 'Ting ', 'Wan ', 'Ying ', 'Sui ', 'Tiao ', 'Qiao ', 'Xuan ', 'Kong ', 'Beng ', 'Ta ', 'Zhang ', 'Bing ', 'Kuo ', 'Ju ', 'La ', 'Xie ', 'Rou ', 'Bang ', 'Yi ', 'Qiu ', 'Qiu ', 'He ', 'Xiao ', 'Mu ', 'Ju ', 'Jian ', 'Bian ', 'Di ', 'Jian ', 'On ', 'Tao ', 'Gou ', 'Ta ', 'Bei ', 'Xie ', 'Pan ', 'Ge ', 'Bi ', 'Kuo ', 'Tang ', 'Lou ', 'Gui ', 'Qiao ', 'Xue ', 'Ji ', 'Jian ', 'Jiang ', 'Chan ', 'Da ', 'Huo ', 'Xian ', 'Qian ', 'Du ', 'Wa ', 'Jian ', 'Lan ', 'Wei ', 'Ren ', 'Fu ', 'Mei ', 'Juan ', 'Ge ', 'Wei ', 'Qiao ', 'Han ', 'Chang ', '[?] ', 'Rou ', 'Xun ', 'She ', 'Wei ', 'Ge ', 'Bei ', 'Tao ', 'Gou ', 'Yun ', '[?] ', 'Bi ', 'Wei ', 'Hui ', 'Du ', 'Wa ', 'Du ', 'Wei ', 'Ren ', 'Fu ', 'Han ', 'Wei ', 'Yun ', 'Tao ', 'Jiu ', 'Jiu ', 'Xian ', 'Xie ', 'Xian ', 'Ji ', 'Yin ', 'Za ', 'Yun ', 'Shao ', 'Le ', 'Peng ', 'Heng ', 'Ying ', 'Yun ', 'Peng ', 'Yin ', 'Yin ', 'Xiang '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x098.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x098.php
new file mode 100644
index 000000000..9320a7931
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x098.php
@@ -0,0 +1 @@
+<?php return ['Hu ', 'Ye ', 'Ding ', 'Qing ', 'Pan ', 'Xiang ', 'Shun ', 'Han ', 'Xu ', 'Yi ', 'Xu ', 'Gu ', 'Song ', 'Kui ', 'Qi ', 'Hang ', 'Yu ', 'Wan ', 'Ban ', 'Dun ', 'Di ', 'Dan ', 'Pan ', 'Po ', 'Ling ', 'Ce ', 'Jing ', 'Lei ', 'He ', 'Qiao ', 'E ', 'E ', 'Wei ', 'Jie ', 'Gua ', 'Shen ', 'Yi ', 'Shen ', 'Hai ', 'Dui ', 'Pian ', 'Ping ', 'Lei ', 'Fu ', 'Jia ', 'Tou ', 'Hui ', 'Kui ', 'Jia ', 'Le ', 'Tian ', 'Cheng ', 'Ying ', 'Jun ', 'Hu ', 'Han ', 'Jing ', 'Tui ', 'Tui ', 'Pin ', 'Lai ', 'Tui ', 'Zi ', 'Zi ', 'Chui ', 'Ding ', 'Lai ', 'Yan ', 'Han ', 'Jian ', 'Ke ', 'Cui ', 'Jiong ', 'Qin ', 'Yi ', 'Sai ', 'Ti ', 'E ', 'E ', 'Yan ', 'Hun ', 'Kan ', 'Yong ', 'Zhuan ', 'Yan ', 'Xian ', 'Xin ', 'Yi ', 'Yuan ', 'Sang ', 'Dian ', 'Dian ', 'Jiang ', 'Ku ', 'Lei ', 'Liao ', 'Piao ', 'Yi ', 'Man ', 'Qi ', 'Rao ', 'Hao ', 'Qiao ', 'Gu ', 'Xun ', 'Qian ', 'Hui ', 'Zhan ', 'Ru ', 'Hong ', 'Bin ', 'Xian ', 'Pin ', 'Lu ', 'Lan ', 'Nie ', 'Quan ', 'Ye ', 'Ding ', 'Qing ', 'Han ', 'Xiang ', 'Shun ', 'Xu ', 'Xu ', 'Wan ', 'Gu ', 'Dun ', 'Qi ', 'Ban ', 'Song ', 'Hang ', 'Yu ', 'Lu ', 'Ling ', 'Po ', 'Jing ', 'Jie ', 'Jia ', 'Tian ', 'Han ', 'Ying ', 'Jiong ', 'Hai ', 'Yi ', 'Pin ', 'Hui ', 'Tui ', 'Han ', 'Ying ', 'Ying ', 'Ke ', 'Ti ', 'Yong ', 'E ', 'Zhuan ', 'Yan ', 'E ', 'Nie ', 'Man ', 'Dian ', 'Sang ', 'Hao ', 'Lei ', 'Zhan ', 'Ru ', 'Pin ', 'Quan ', 'Feng ', 'Biao ', 'Oroshi ', 'Fu ', 'Xia ', 'Zhan ', 'Biao ', 'Sa ', 'Ba ', 'Tai ', 'Lie ', 'Gua ', 'Xuan ', 'Shao ', 'Ju ', 'Bi ', 'Si ', 'Wei ', 'Yang ', 'Yao ', 'Sou ', 'Kai ', 'Sao ', 'Fan ', 'Liu ', 'Xi ', 'Liao ', 'Piao ', 'Piao ', 'Liu ', 'Biao ', 'Biao ', 'Biao ', 'Liao ', '[?] ', 'Se ', 'Feng ', 'Biao ', 'Feng ', 'Yang ', 'Zhan ', 'Biao ', 'Sa ', 'Ju ', 'Si ', 'Sou ', 'Yao ', 'Liu ', 'Piao ', 'Biao ', 'Biao ', 'Fei ', 'Fan ', 'Fei ', 'Fei ', 'Shi ', 'Shi ', 'Can ', 'Ji ', 'Ding ', 'Si ', 'Tuo ', 'Zhan ', 'Sun ', 'Xiang ', 'Tun ', 'Ren ', 'Yu ', 'Juan ', 'Chi ', 'Yin ', 'Fan ', 'Fan ', 'Sun ', 'Yin ', 'Zhu ', 'Yi ', 'Zhai ', 'Bi ', 'Jie ', 'Tao ', 'Liu ', 'Ci ', 'Tie ', 'Si ', 'Bao ', 'Shi ', 'Duo '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x099.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x099.php
new file mode 100644
index 000000000..2ce5f713f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x099.php
@@ -0,0 +1 @@
+<?php return ['Hai ', 'Ren ', 'Tian ', 'Jiao ', 'Jia ', 'Bing ', 'Yao ', 'Tong ', 'Ci ', 'Xiang ', 'Yang ', 'Yang ', 'Er ', 'Yan ', 'Le ', 'Yi ', 'Can ', 'Bo ', 'Nei ', 'E ', 'Bu ', 'Jun ', 'Dou ', 'Su ', 'Yu ', 'Shi ', 'Yao ', 'Hun ', 'Guo ', 'Shi ', 'Jian ', 'Zhui ', 'Bing ', 'Xian ', 'Bu ', 'Ye ', 'Tan ', 'Fei ', 'Zhang ', 'Wei ', 'Guan ', 'E ', 'Nuan ', 'Hun ', 'Hu ', 'Huang ', 'Tie ', 'Hui ', 'Jian ', 'Hou ', 'He ', 'Xing ', 'Fen ', 'Wei ', 'Gu ', 'Cha ', 'Song ', 'Tang ', 'Bo ', 'Gao ', 'Xi ', 'Kui ', 'Liu ', 'Sou ', 'Tao ', 'Ye ', 'Yun ', 'Mo ', 'Tang ', 'Man ', 'Bi ', 'Yu ', 'Xiu ', 'Jin ', 'San ', 'Kui ', 'Zhuan ', 'Shan ', 'Chi ', 'Dan ', 'Yi ', 'Ji ', 'Rao ', 'Cheng ', 'Yong ', 'Tao ', 'Hui ', 'Xiang ', 'Zhan ', 'Fen ', 'Hai ', 'Meng ', 'Yan ', 'Mo ', 'Chan ', 'Xiang ', 'Luo ', 'Zuan ', 'Nang ', 'Shi ', 'Ding ', 'Ji ', 'Tuo ', 'Xing ', 'Tun ', 'Xi ', 'Ren ', 'Yu ', 'Chi ', 'Fan ', 'Yin ', 'Jian ', 'Shi ', 'Bao ', 'Si ', 'Duo ', 'Yi ', 'Er ', 'Rao ', 'Xiang ', 'Jia ', 'Le ', 'Jiao ', 'Yi ', 'Bing ', 'Bo ', 'Dou ', 'E ', 'Yu ', 'Nei ', 'Jun ', 'Guo ', 'Hun ', 'Xian ', 'Guan ', 'Cha ', 'Kui ', 'Gu ', 'Sou ', 'Chan ', 'Ye ', 'Mo ', 'Bo ', 'Liu ', 'Xiu ', 'Jin ', 'Man ', 'San ', 'Zhuan ', 'Nang ', 'Shou ', 'Kui ', 'Guo ', 'Xiang ', 'Fen ', 'Ba ', 'Ni ', 'Bi ', 'Bo ', 'Tu ', 'Han ', 'Fei ', 'Jian ', 'An ', 'Ai ', 'Fu ', 'Xian ', 'Wen ', 'Xin ', 'Fen ', 'Bin ', 'Xing ', 'Ma ', 'Yu ', 'Feng ', 'Han ', 'Di ', 'Tuo ', 'Tuo ', 'Chi ', 'Xun ', 'Zhu ', 'Zhi ', 'Pei ', 'Xin ', 'Ri ', 'Sa ', 'Yin ', 'Wen ', 'Zhi ', 'Dan ', 'Lu ', 'You ', 'Bo ', 'Bao ', 'Kuai ', 'Tuo ', 'Yi ', 'Qu ', '[?] ', 'Qu ', 'Jiong ', 'Bo ', 'Zhao ', 'Yuan ', 'Peng ', 'Zhou ', 'Ju ', 'Zhu ', 'Nu ', 'Ju ', 'Pi ', 'Zang ', 'Jia ', 'Ling ', 'Zhen ', 'Tai ', 'Fu ', 'Yang ', 'Shi ', 'Bi ', 'Tuo ', 'Tuo ', 'Si ', 'Liu ', 'Ma ', 'Pian ', 'Tao ', 'Zhi ', 'Rong ', 'Teng ', 'Dong ', 'Xun ', 'Quan ', 'Shen ', 'Jiong ', 'Er ', 'Hai ', 'Bo ', 'Zhu ', 'Yin ', 'Luo ', 'Shuu ', 'Dan ', 'Xie ', 'Liu ', 'Ju ', 'Song ', 'Qin ', 'Mang ', 'Liang ', 'Han ', 'Tu ', 'Xuan ', 'Tui ', 'Jun '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09a.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09a.php
new file mode 100644
index 000000000..08160b8b7
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09a.php
@@ -0,0 +1 @@
+<?php return ['E ', 'Cheng ', 'Xin ', 'Ai ', 'Lu ', 'Zhui ', 'Zhou ', 'She ', 'Pian ', 'Kun ', 'Tao ', 'Lai ', 'Zong ', 'Ke ', 'Qi ', 'Qi ', 'Yan ', 'Fei ', 'Sao ', 'Yan ', 'Jie ', 'Yao ', 'Wu ', 'Pian ', 'Cong ', 'Pian ', 'Qian ', 'Fei ', 'Huang ', 'Jian ', 'Huo ', 'Yu ', 'Ti ', 'Quan ', 'Xia ', 'Zong ', 'Kui ', 'Rou ', 'Si ', 'Gua ', 'Tuo ', 'Kui ', 'Sou ', 'Qian ', 'Cheng ', 'Zhi ', 'Liu ', 'Pang ', 'Teng ', 'Xi ', 'Cao ', 'Du ', 'Yan ', 'Yuan ', 'Zou ', 'Sao ', 'Shan ', 'Li ', 'Zhi ', 'Shuang ', 'Lu ', 'Xi ', 'Luo ', 'Zhang ', 'Mo ', 'Ao ', 'Can ', 'Piao ', 'Cong ', 'Qu ', 'Bi ', 'Zhi ', 'Yu ', 'Xu ', 'Hua ', 'Bo ', 'Su ', 'Xiao ', 'Lin ', 'Chan ', 'Dun ', 'Liu ', 'Tuo ', 'Zeng ', 'Tan ', 'Jiao ', 'Tie ', 'Yan ', 'Luo ', 'Zhan ', 'Jing ', 'Yi ', 'Ye ', 'Tuo ', 'Bin ', 'Zou ', 'Yan ', 'Peng ', 'Lu ', 'Teng ', 'Xiang ', 'Ji ', 'Shuang ', 'Ju ', 'Xi ', 'Huan ', 'Li ', 'Biao ', 'Ma ', 'Yu ', 'Tuo ', 'Xun ', 'Chi ', 'Qu ', 'Ri ', 'Bo ', 'Lu ', 'Zang ', 'Shi ', 'Si ', 'Fu ', 'Ju ', 'Zou ', 'Zhu ', 'Tuo ', 'Nu ', 'Jia ', 'Yi ', 'Tai ', 'Xiao ', 'Ma ', 'Yin ', 'Jiao ', 'Hua ', 'Luo ', 'Hai ', 'Pian ', 'Biao ', 'Li ', 'Cheng ', 'Yan ', 'Xin ', 'Qin ', 'Jun ', 'Qi ', 'Qi ', 'Ke ', 'Zhui ', 'Zong ', 'Su ', 'Can ', 'Pian ', 'Zhi ', 'Kui ', 'Sao ', 'Wu ', 'Ao ', 'Liu ', 'Qian ', 'Shan ', 'Piao ', 'Luo ', 'Cong ', 'Chan ', 'Zou ', 'Ji ', 'Shuang ', 'Xiang ', 'Gu ', 'Wei ', 'Wei ', 'Wei ', 'Yu ', 'Gan ', 'Yi ', 'Ang ', 'Tou ', 'Xie ', 'Bao ', 'Bi ', 'Chi ', 'Ti ', 'Di ', 'Ku ', 'Hai ', 'Qiao ', 'Gou ', 'Kua ', 'Ge ', 'Tui ', 'Geng ', 'Pian ', 'Bi ', 'Ke ', 'Ka ', 'Yu ', 'Sui ', 'Lou ', 'Bo ', 'Xiao ', 'Pang ', 'Bo ', 'Ci ', 'Kuan ', 'Bin ', 'Mo ', 'Liao ', 'Lou ', 'Nao ', 'Du ', 'Zang ', 'Sui ', 'Ti ', 'Bin ', 'Kuan ', 'Lu ', 'Gao ', 'Gao ', 'Qiao ', 'Kao ', 'Qiao ', 'Lao ', 'Zao ', 'Biao ', 'Kun ', 'Kun ', 'Ti ', 'Fang ', 'Xiu ', 'Ran ', 'Mao ', 'Dan ', 'Kun ', 'Bin ', 'Fa ', 'Tiao ', 'Peng ', 'Zi ', 'Fa ', 'Ran ', 'Ti ', 'Pao ', 'Pi ', 'Mao ', 'Fu ', 'Er ', 'Rong ', 'Qu ', 'Gong ', 'Xiu ', 'Gua ', 'Ji ', 'Peng ', 'Zhua ', 'Shao ', 'Sha '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09b.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09b.php
new file mode 100644
index 000000000..1ce3769f1
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09b.php
@@ -0,0 +1 @@
+<?php return ['Ti ', 'Li ', 'Bin ', 'Zong ', 'Ti ', 'Peng ', 'Song ', 'Zheng ', 'Quan ', 'Zong ', 'Shun ', 'Jian ', 'Duo ', 'Hu ', 'La ', 'Jiu ', 'Qi ', 'Lian ', 'Zhen ', 'Bin ', 'Peng ', 'Mo ', 'San ', 'Man ', 'Man ', 'Seng ', 'Xu ', 'Lie ', 'Qian ', 'Qian ', 'Nong ', 'Huan ', 'Kuai ', 'Ning ', 'Bin ', 'Lie ', 'Rang ', 'Dou ', 'Dou ', 'Nao ', 'Hong ', 'Xi ', 'Dou ', 'Han ', 'Dou ', 'Dou ', 'Jiu ', 'Chang ', 'Yu ', 'Yu ', 'Li ', 'Juan ', 'Fu ', 'Qian ', 'Gui ', 'Zong ', 'Liu ', 'Gui ', 'Shang ', 'Yu ', 'Gui ', 'Mei ', 'Ji ', 'Qi ', 'Jie ', 'Kui ', 'Hun ', 'Ba ', 'Po ', 'Mei ', 'Xu ', 'Yan ', 'Xiao ', 'Liang ', 'Yu ', 'Tui ', 'Qi ', 'Wang ', 'Liang ', 'Wei ', 'Jian ', 'Chi ', 'Piao ', 'Bi ', 'Mo ', 'Ji ', 'Xu ', 'Chou ', 'Yan ', 'Zhan ', 'Yu ', 'Dao ', 'Ren ', 'Ji ', 'Eri ', 'Gong ', 'Tuo ', 'Diao ', 'Ji ', 'Xu ', 'E ', 'E ', 'Sha ', 'Hang ', 'Tun ', 'Mo ', 'Jie ', 'Shen ', 'Fan ', 'Yuan ', 'Bi ', 'Lu ', 'Wen ', 'Hu ', 'Lu ', 'Za ', 'Fang ', 'Fen ', 'Na ', 'You ', 'Namazu ', 'Todo ', 'He ', 'Xia ', 'Qu ', 'Han ', 'Pi ', 'Ling ', 'Tuo ', 'Bo ', 'Qiu ', 'Ping ', 'Fu ', 'Bi ', 'Ji ', 'Wei ', 'Ju ', 'Diao ', 'Bo ', 'You ', 'Gun ', 'Pi ', 'Nian ', 'Xing ', 'Tai ', 'Bao ', 'Fu ', 'Zha ', 'Ju ', 'Gu ', 'Kajika ', 'Tong ', '[?] ', 'Ta ', 'Jie ', 'Shu ', 'Hou ', 'Xiang ', 'Er ', 'An ', 'Wei ', 'Tiao ', 'Zhu ', 'Yin ', 'Lie ', 'Luo ', 'Tong ', 'Yi ', 'Qi ', 'Bing ', 'Wei ', 'Jiao ', 'Bu ', 'Gui ', 'Xian ', 'Ge ', 'Hui ', 'Bora ', 'Mate ', 'Kao ', 'Gori ', 'Duo ', 'Jun ', 'Ti ', 'Man ', 'Xiao ', 'Za ', 'Sha ', 'Qin ', 'Yu ', 'Nei ', 'Zhe ', 'Gun ', 'Geng ', 'Su ', 'Wu ', 'Qiu ', 'Ting ', 'Fu ', 'Wan ', 'You ', 'Li ', 'Sha ', 'Sha ', 'Gao ', 'Meng ', 'Ugui ', 'Asari ', 'Subashiri ', 'Kazunoko ', 'Yong ', 'Ni ', 'Zi ', 'Qi ', 'Qing ', 'Xiang ', 'Nei ', 'Chun ', 'Ji ', 'Diao ', 'Qie ', 'Gu ', 'Zhou ', 'Dong ', 'Lai ', 'Fei ', 'Ni ', 'Yi ', 'Kun ', 'Lu ', 'Jiu ', 'Chang ', 'Jing ', 'Lun ', 'Ling ', 'Zou ', 'Li ', 'Meng ', 'Zong ', 'Zhi ', 'Nian ', 'Shachi ', 'Dojou ', 'Sukesou ', 'Shi ', 'Shen ', 'Hun ', 'Shi ', 'Hou ', 'Xing ', 'Zhu ', 'La ', 'Zong ', 'Ji ', 'Bian ', 'Bian '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09c.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09c.php
new file mode 100644
index 000000000..b5fcafc8f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09c.php
@@ -0,0 +1 @@
+<?php return ['Huan ', 'Quan ', 'Ze ', 'Wei ', 'Wei ', 'Yu ', 'Qun ', 'Rou ', 'Die ', 'Huang ', 'Lian ', 'Yan ', 'Qiu ', 'Qiu ', 'Jian ', 'Bi ', 'E ', 'Yang ', 'Fu ', 'Sai ', 'Jian ', 'Xia ', 'Tuo ', 'Hu ', 'Muroaji ', 'Ruo ', 'Haraka ', 'Wen ', 'Jian ', 'Hao ', 'Wu ', 'Fang ', 'Sao ', 'Liu ', 'Ma ', 'Shi ', 'Shi ', 'Yin ', 'Z ', 'Teng ', 'Ta ', 'Yao ', 'Ge ', 'Rong ', 'Qian ', 'Qi ', 'Wen ', 'Ruo ', 'Hatahata ', 'Lian ', 'Ao ', 'Le ', 'Hui ', 'Min ', 'Ji ', 'Tiao ', 'Qu ', 'Jian ', 'Sao ', 'Man ', 'Xi ', 'Qiu ', 'Biao ', 'Ji ', 'Ji ', 'Zhu ', 'Jiang ', 'Qiu ', 'Zhuan ', 'Yong ', 'Zhang ', 'Kang ', 'Xue ', 'Bie ', 'Jue ', 'Qu ', 'Xiang ', 'Bo ', 'Jiao ', 'Xun ', 'Su ', 'Huang ', 'Zun ', 'Shan ', 'Shan ', 'Fan ', 'Jue ', 'Lin ', 'Xun ', 'Miao ', 'Xi ', 'Eso ', 'Kyou ', 'Fen ', 'Guan ', 'Hou ', 'Kuai ', 'Zei ', 'Sao ', 'Zhan ', 'Gan ', 'Gui ', 'Sheng ', 'Li ', 'Chang ', 'Hatahata ', 'Shiira ', 'Mutsu ', 'Ru ', 'Ji ', 'Xu ', 'Huo ', 'Shiira ', 'Li ', 'Lie ', 'Li ', 'Mie ', 'Zhen ', 'Xiang ', 'E ', 'Lu ', 'Guan ', 'Li ', 'Xian ', 'Yu ', 'Dao ', 'Ji ', 'You ', 'Tun ', 'Lu ', 'Fang ', 'Ba ', 'He ', 'Bo ', 'Ping ', 'Nian ', 'Lu ', 'You ', 'Zha ', 'Fu ', 'Bo ', 'Bao ', 'Hou ', 'Pi ', 'Tai ', 'Gui ', 'Jie ', 'Kao ', 'Wei ', 'Er ', 'Tong ', 'Ze ', 'Hou ', 'Kuai ', 'Ji ', 'Jiao ', 'Xian ', 'Za ', 'Xiang ', 'Xun ', 'Geng ', 'Li ', 'Lian ', 'Jian ', 'Li ', 'Shi ', 'Tiao ', 'Gun ', 'Sha ', 'Wan ', 'Jun ', 'Ji ', 'Yong ', 'Qing ', 'Ling ', 'Qi ', 'Zou ', 'Fei ', 'Kun ', 'Chang ', 'Gu ', 'Ni ', 'Nian ', 'Diao ', 'Jing ', 'Shen ', 'Shi ', 'Zi ', 'Fen ', 'Die ', 'Bi ', 'Chang ', 'Shi ', 'Wen ', 'Wei ', 'Sai ', 'E ', 'Qiu ', 'Fu ', 'Huang ', 'Quan ', 'Jiang ', 'Bian ', 'Sao ', 'Ao ', 'Qi ', 'Ta ', 'Yin ', 'Yao ', 'Fang ', 'Jian ', 'Le ', 'Biao ', 'Xue ', 'Bie ', 'Man ', 'Min ', 'Yong ', 'Wei ', 'Xi ', 'Jue ', 'Shan ', 'Lin ', 'Zun ', 'Huo ', 'Gan ', 'Li ', 'Zhan ', 'Guan ', 'Niao ', 'Yi ', 'Fu ', 'Li ', 'Jiu ', 'Bu ', 'Yan ', 'Fu ', 'Diao ', 'Ji ', 'Feng ', 'Nio ', 'Gan ', 'Shi ', 'Feng ', 'Ming ', 'Bao ', 'Yuan ', 'Zhi ', 'Hu ', 'Qin ', 'Fu ', 'Fen ', 'Wen ', 'Jian ', 'Shi ', 'Yu '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09d.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09d.php
new file mode 100644
index 000000000..517da07cb
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09d.php
@@ -0,0 +1 @@
+<?php return ['Fou ', 'Yiao ', 'Jue ', 'Jue ', 'Pi ', 'Huan ', 'Zhen ', 'Bao ', 'Yan ', 'Ya ', 'Zheng ', 'Fang ', 'Feng ', 'Wen ', 'Ou ', 'Te ', 'Jia ', 'Nu ', 'Ling ', 'Mie ', 'Fu ', 'Tuo ', 'Wen ', 'Li ', 'Bian ', 'Zhi ', 'Ge ', 'Yuan ', 'Zi ', 'Qu ', 'Xiao ', 'Zhi ', 'Dan ', 'Ju ', 'You ', 'Gu ', 'Zhong ', 'Yu ', 'Yang ', 'Rong ', 'Ya ', 'Tie ', 'Yu ', 'Shigi ', 'Ying ', 'Zhui ', 'Wu ', 'Er ', 'Gua ', 'Ai ', 'Zhi ', 'Yan ', 'Heng ', 'Jiao ', 'Ji ', 'Lie ', 'Zhu ', 'Ren ', 'Yi ', 'Hong ', 'Luo ', 'Ru ', 'Mou ', 'Ge ', 'Ren ', 'Jiao ', 'Xiu ', 'Zhou ', 'Zhi ', 'Luo ', 'Chidori ', 'Toki ', 'Ten ', 'Luan ', 'Jia ', 'Ji ', 'Yu ', 'Huan ', 'Tuo ', 'Bu ', 'Wu ', 'Juan ', 'Yu ', 'Bo ', 'Xun ', 'Xun ', 'Bi ', 'Xi ', 'Jun ', 'Ju ', 'Tu ', 'Jing ', 'Ti ', 'E ', 'E ', 'Kuang ', 'Hu ', 'Wu ', 'Shen ', 'Lai ', 'Ikaruga ', 'Kakesu ', 'Lu ', 'Ping ', 'Shu ', 'Fu ', 'An ', 'Zhao ', 'Peng ', 'Qin ', 'Qian ', 'Bei ', 'Diao ', 'Lu ', 'Que ', 'Jian ', 'Ju ', 'Tu ', 'Ya ', 'Yuan ', 'Qi ', 'Li ', 'Ye ', 'Zhui ', 'Kong ', 'Zhui ', 'Kun ', 'Sheng ', 'Qi ', 'Jing ', 'Yi ', 'Yi ', 'Jing ', 'Zi ', 'Lai ', 'Dong ', 'Qi ', 'Chun ', 'Geng ', 'Ju ', 'Qu ', 'Isuka ', 'Kikuitadaki ', 'Ji ', 'Shu ', '[?] ', 'Chi ', 'Miao ', 'Rou ', 'An ', 'Qiu ', 'Ti ', 'Hu ', 'Ti ', 'E ', 'Jie ', 'Mao ', 'Fu ', 'Chun ', 'Tu ', 'Yan ', 'He ', 'Yuan ', 'Pian ', 'Yun ', 'Mei ', 'Hu ', 'Ying ', 'Dun ', 'Mu ', 'Ju ', 'Tsugumi ', 'Cang ', 'Fang ', 'Gu ', 'Ying ', 'Yuan ', 'Xuan ', 'Weng ', 'Shi ', 'He ', 'Chu ', 'Tang ', 'Xia ', 'Ruo ', 'Liu ', 'Ji ', 'Gu ', 'Jian ', 'Zhun ', 'Han ', 'Zi ', 'Zi ', 'Ni ', 'Yao ', 'Yan ', 'Ji ', 'Li ', 'Tian ', 'Kou ', 'Ti ', 'Ti ', 'Ni ', 'Tu ', 'Ma ', 'Jiao ', 'Gao ', 'Tian ', 'Chen ', 'Li ', 'Zhuan ', 'Zhe ', 'Ao ', 'Yao ', 'Yi ', 'Ou ', 'Chi ', 'Zhi ', 'Liao ', 'Rong ', 'Lou ', 'Bi ', 'Shuang ', 'Zhuo ', 'Yu ', 'Wu ', 'Jue ', 'Yin ', 'Quan ', 'Si ', 'Jiao ', 'Yi ', 'Hua ', 'Bi ', 'Ying ', 'Su ', 'Huang ', 'Fan ', 'Jiao ', 'Liao ', 'Yan ', 'Kao ', 'Jiu ', 'Xian ', 'Xian ', 'Tu ', 'Mai ', 'Zun ', 'Yu ', 'Ying ', 'Lu ', 'Tuan ', 'Xian ', 'Xue ', 'Yi ', 'Pi '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09e.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09e.php
new file mode 100644
index 000000000..4301b06cd
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09e.php
@@ -0,0 +1 @@
+<?php return ['Shu ', 'Luo ', 'Qi ', 'Yi ', 'Ji ', 'Zhe ', 'Yu ', 'Zhan ', 'Ye ', 'Yang ', 'Pi ', 'Ning ', 'Huo ', 'Mi ', 'Ying ', 'Meng ', 'Di ', 'Yue ', 'Yu ', 'Lei ', 'Bao ', 'Lu ', 'He ', 'Long ', 'Shuang ', 'Yue ', 'Ying ', 'Guan ', 'Qu ', 'Li ', 'Luan ', 'Niao ', 'Jiu ', 'Ji ', 'Yuan ', 'Ming ', 'Shi ', 'Ou ', 'Ya ', 'Cang ', 'Bao ', 'Zhen ', 'Gu ', 'Dong ', 'Lu ', 'Ya ', 'Xiao ', 'Yang ', 'Ling ', 'Zhi ', 'Qu ', 'Yuan ', 'Xue ', 'Tuo ', 'Si ', 'Zhi ', 'Er ', 'Gua ', 'Xiu ', 'Heng ', 'Zhou ', 'Ge ', 'Luan ', 'Hong ', 'Wu ', 'Bo ', 'Li ', 'Juan ', 'Hu ', 'E ', 'Yu ', 'Xian ', 'Ti ', 'Wu ', 'Que ', 'Miao ', 'An ', 'Kun ', 'Bei ', 'Peng ', 'Qian ', 'Chun ', 'Geng ', 'Yuan ', 'Su ', 'Hu ', 'He ', 'E ', 'Gu ', 'Qiu ', 'Zi ', 'Mei ', 'Mu ', 'Ni ', 'Yao ', 'Weng ', 'Liu ', 'Ji ', 'Ni ', 'Jian ', 'He ', 'Yi ', 'Ying ', 'Zhe ', 'Liao ', 'Liao ', 'Jiao ', 'Jiu ', 'Yu ', 'Lu ', 'Xuan ', 'Zhan ', 'Ying ', 'Huo ', 'Meng ', 'Guan ', 'Shuang ', 'Lu ', 'Jin ', 'Ling ', 'Jian ', 'Xian ', 'Cuo ', 'Jian ', 'Jian ', 'Yan ', 'Cuo ', 'Lu ', 'You ', 'Cu ', 'Ji ', 'Biao ', 'Cu ', 'Biao ', 'Zhu ', 'Jun ', 'Zhu ', 'Jian ', 'Mi ', 'Mi ', 'Wu ', 'Liu ', 'Chen ', 'Jun ', 'Lin ', 'Ni ', 'Qi ', 'Lu ', 'Jiu ', 'Jun ', 'Jing ', 'Li ', 'Xiang ', 'Yan ', 'Jia ', 'Mi ', 'Li ', 'She ', 'Zhang ', 'Lin ', 'Jing ', 'Ji ', 'Ling ', 'Yan ', 'Cu ', 'Mai ', 'Mai ', 'Ge ', 'Chao ', 'Fu ', 'Mian ', 'Mian ', 'Fu ', 'Pao ', 'Qu ', 'Qu ', 'Mou ', 'Fu ', 'Xian ', 'Lai ', 'Qu ', 'Mian ', '[?] ', 'Feng ', 'Fu ', 'Qu ', 'Mian ', 'Ma ', 'Mo ', 'Mo ', 'Hui ', 'Ma ', 'Zou ', 'Nen ', 'Fen ', 'Huang ', 'Huang ', 'Jin ', 'Guang ', 'Tian ', 'Tou ', 'Heng ', 'Xi ', 'Kuang ', 'Heng ', 'Shu ', 'Li ', 'Nian ', 'Chi ', 'Hei ', 'Hei ', 'Yi ', 'Qian ', 'Dan ', 'Xi ', 'Tuan ', 'Mo ', 'Mo ', 'Qian ', 'Dai ', 'Chu ', 'You ', 'Dian ', 'Yi ', 'Xia ', 'Yan ', 'Qu ', 'Mei ', 'Yan ', 'Jing ', 'Yu ', 'Li ', 'Dang ', 'Du ', 'Can ', 'Yin ', 'An ', 'Yan ', 'Tan ', 'An ', 'Zhen ', 'Dai ', 'Can ', 'Yi ', 'Mei ', 'Dan ', 'Yan ', 'Du ', 'Lu ', 'Zhi ', 'Fen ', 'Fu ', 'Fu ', 'Min ', 'Min ', 'Yuan '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x09f.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x09f.php
new file mode 100644
index 000000000..52ee6cf84
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x09f.php
@@ -0,0 +1 @@
+<?php return ['Cu ', 'Qu ', 'Chao ', 'Wa ', 'Zhu ', 'Zhi ', 'Mang ', 'Ao ', 'Bie ', 'Tuo ', 'Bi ', 'Yuan ', 'Chao ', 'Tuo ', 'Ding ', 'Mi ', 'Nai ', 'Ding ', 'Zi ', 'Gu ', 'Gu ', 'Dong ', 'Fen ', 'Tao ', 'Yuan ', 'Pi ', 'Chang ', 'Gao ', 'Qi ', 'Yuan ', 'Tang ', 'Teng ', 'Shu ', 'Shu ', 'Fen ', 'Fei ', 'Wen ', 'Ba ', 'Diao ', 'Tuo ', 'Tong ', 'Qu ', 'Sheng ', 'Shi ', 'You ', 'Shi ', 'Ting ', 'Wu ', 'Nian ', 'Jing ', 'Hun ', 'Ju ', 'Yan ', 'Tu ', 'Ti ', 'Xi ', 'Xian ', 'Yan ', 'Lei ', 'Bi ', 'Yao ', 'Qiu ', 'Han ', 'Wu ', 'Wu ', 'Hou ', 'Xi ', 'Ge ', 'Zha ', 'Xiu ', 'Weng ', 'Zha ', 'Nong ', 'Nang ', 'Qi ', 'Zhai ', 'Ji ', 'Zi ', 'Ji ', 'Ji ', 'Qi ', 'Ji ', 'Chi ', 'Chen ', 'Chen ', 'He ', 'Ya ', 'Ken ', 'Xie ', 'Pao ', 'Cuo ', 'Shi ', 'Zi ', 'Chi ', 'Nian ', 'Ju ', 'Tiao ', 'Ling ', 'Ling ', 'Chu ', 'Quan ', 'Xie ', 'Ken ', 'Nie ', 'Jiu ', 'Yao ', 'Chuo ', 'Kun ', 'Yu ', 'Chu ', 'Yi ', 'Ni ', 'Cuo ', 'Zou ', 'Qu ', 'Nen ', 'Xian ', 'Ou ', 'E ', 'Wo ', 'Yi ', 'Chuo ', 'Zou ', 'Dian ', 'Chu ', 'Jin ', 'Ya ', 'Chi ', 'Chen ', 'He ', 'Ken ', 'Ju ', 'Ling ', 'Pao ', 'Tiao ', 'Zi ', 'Ken ', 'Yu ', 'Chuo ', 'Qu ', 'Wo ', 'Long ', 'Pang ', 'Gong ', 'Pang ', 'Yan ', 'Long ', 'Long ', 'Gong ', 'Kan ', 'Ta ', 'Ling ', 'Ta ', 'Long ', 'Gong ', 'Kan ', 'Gui ', 'Qiu ', 'Bie ', 'Gui ', 'Yue ', 'Chui ', 'He ', 'Jue ', 'Xie ', 'Yu ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0a0.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a0.php
new file mode 100644
index 000000000..4b8afddf6
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a0.php
@@ -0,0 +1 @@
+<?php return ['it', 'ix', 'i', 'ip', 'iet', 'iex', 'ie', 'iep', 'at', 'ax', 'a', 'ap', 'uox', 'uo', 'uop', 'ot', 'ox', 'o', 'op', 'ex', 'e', 'wu', 'bit', 'bix', 'bi', 'bip', 'biet', 'biex', 'bie', 'biep', 'bat', 'bax', 'ba', 'bap', 'buox', 'buo', 'buop', 'bot', 'box', 'bo', 'bop', 'bex', 'be', 'bep', 'but', 'bux', 'bu', 'bup', 'burx', 'bur', 'byt', 'byx', 'by', 'byp', 'byrx', 'byr', 'pit', 'pix', 'pi', 'pip', 'piex', 'pie', 'piep', 'pat', 'pax', 'pa', 'pap', 'puox', 'puo', 'puop', 'pot', 'pox', 'po', 'pop', 'put', 'pux', 'pu', 'pup', 'purx', 'pur', 'pyt', 'pyx', 'py', 'pyp', 'pyrx', 'pyr', 'bbit', 'bbix', 'bbi', 'bbip', 'bbiet', 'bbiex', 'bbie', 'bbiep', 'bbat', 'bbax', 'bba', 'bbap', 'bbuox', 'bbuo', 'bbuop', 'bbot', 'bbox', 'bbo', 'bbop', 'bbex', 'bbe', 'bbep', 'bbut', 'bbux', 'bbu', 'bbup', 'bburx', 'bbur', 'bbyt', 'bbyx', 'bby', 'bbyp', 'nbit', 'nbix', 'nbi', 'nbip', 'nbiex', 'nbie', 'nbiep', 'nbat', 'nbax', 'nba', 'nbap', 'nbot', 'nbox', 'nbo', 'nbop', 'nbut', 'nbux', 'nbu', 'nbup', 'nburx', 'nbur', 'nbyt', 'nbyx', 'nby', 'nbyp', 'nbyrx', 'nbyr', 'hmit', 'hmix', 'hmi', 'hmip', 'hmiex', 'hmie', 'hmiep', 'hmat', 'hmax', 'hma', 'hmap', 'hmuox', 'hmuo', 'hmuop', 'hmot', 'hmox', 'hmo', 'hmop', 'hmut', 'hmux', 'hmu', 'hmup', 'hmurx', 'hmur', 'hmyx', 'hmy', 'hmyp', 'hmyrx', 'hmyr', 'mit', 'mix', 'mi', 'mip', 'miex', 'mie', 'miep', 'mat', 'max', 'ma', 'map', 'muot', 'muox', 'muo', 'muop', 'mot', 'mox', 'mo', 'mop', 'mex', 'me', 'mut', 'mux', 'mu', 'mup', 'murx', 'mur', 'myt', 'myx', 'my', 'myp', 'fit', 'fix', 'fi', 'fip', 'fat', 'fax', 'fa', 'fap', 'fox', 'fo', 'fop', 'fut', 'fux', 'fu', 'fup', 'furx', 'fur', 'fyt', 'fyx', 'fy', 'fyp', 'vit', 'vix', 'vi', 'vip', 'viet', 'viex', 'vie', 'viep', 'vat', 'vax', 'va', 'vap', 'vot', 'vox', 'vo', 'vop', 'vex', 'vep', 'vut', 'vux', 'vu', 'vup', 'vurx', 'vur', 'vyt', 'vyx', 'vy', 'vyp', 'vyrx', 'vyr'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0a1.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a1.php
new file mode 100644
index 000000000..c2cf3a18f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a1.php
@@ -0,0 +1 @@
+<?php return ['dit', 'dix', 'di', 'dip', 'diex', 'die', 'diep', 'dat', 'dax', 'da', 'dap', 'duox', 'duo', 'dot', 'dox', 'do', 'dop', 'dex', 'de', 'dep', 'dut', 'dux', 'du', 'dup', 'durx', 'dur', 'tit', 'tix', 'ti', 'tip', 'tiex', 'tie', 'tiep', 'tat', 'tax', 'ta', 'tap', 'tuot', 'tuox', 'tuo', 'tuop', 'tot', 'tox', 'to', 'top', 'tex', 'te', 'tep', 'tut', 'tux', 'tu', 'tup', 'turx', 'tur', 'ddit', 'ddix', 'ddi', 'ddip', 'ddiex', 'ddie', 'ddiep', 'ddat', 'ddax', 'dda', 'ddap', 'dduox', 'dduo', 'dduop', 'ddot', 'ddox', 'ddo', 'ddop', 'ddex', 'dde', 'ddep', 'ddut', 'ddux', 'ddu', 'ddup', 'ddurx', 'ddur', 'ndit', 'ndix', 'ndi', 'ndip', 'ndiex', 'ndie', 'ndat', 'ndax', 'nda', 'ndap', 'ndot', 'ndox', 'ndo', 'ndop', 'ndex', 'nde', 'ndep', 'ndut', 'ndux', 'ndu', 'ndup', 'ndurx', 'ndur', 'hnit', 'hnix', 'hni', 'hnip', 'hniet', 'hniex', 'hnie', 'hniep', 'hnat', 'hnax', 'hna', 'hnap', 'hnuox', 'hnuo', 'hnot', 'hnox', 'hnop', 'hnex', 'hne', 'hnep', 'hnut', 'nit', 'nix', 'ni', 'nip', 'niex', 'nie', 'niep', 'nax', 'na', 'nap', 'nuox', 'nuo', 'nuop', 'not', 'nox', 'no', 'nop', 'nex', 'ne', 'nep', 'nut', 'nux', 'nu', 'nup', 'nurx', 'nur', 'hlit', 'hlix', 'hli', 'hlip', 'hliex', 'hlie', 'hliep', 'hlat', 'hlax', 'hla', 'hlap', 'hluox', 'hluo', 'hluop', 'hlox', 'hlo', 'hlop', 'hlex', 'hle', 'hlep', 'hlut', 'hlux', 'hlu', 'hlup', 'hlurx', 'hlur', 'hlyt', 'hlyx', 'hly', 'hlyp', 'hlyrx', 'hlyr', 'lit', 'lix', 'li', 'lip', 'liet', 'liex', 'lie', 'liep', 'lat', 'lax', 'la', 'lap', 'luot', 'luox', 'luo', 'luop', 'lot', 'lox', 'lo', 'lop', 'lex', 'le', 'lep', 'lut', 'lux', 'lu', 'lup', 'lurx', 'lur', 'lyt', 'lyx', 'ly', 'lyp', 'lyrx', 'lyr', 'git', 'gix', 'gi', 'gip', 'giet', 'giex', 'gie', 'giep', 'gat', 'gax', 'ga', 'gap', 'guot', 'guox', 'guo', 'guop', 'got', 'gox', 'go', 'gop', 'get', 'gex', 'ge', 'gep', 'gut', 'gux', 'gu', 'gup', 'gurx', 'gur', 'kit', 'kix', 'ki', 'kip', 'kiex', 'kie', 'kiep', 'kat'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0a2.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a2.php
new file mode 100644
index 000000000..ad32b8483
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a2.php
@@ -0,0 +1 @@
+<?php return ['kax', 'ka', 'kap', 'kuox', 'kuo', 'kuop', 'kot', 'kox', 'ko', 'kop', 'ket', 'kex', 'ke', 'kep', 'kut', 'kux', 'ku', 'kup', 'kurx', 'kur', 'ggit', 'ggix', 'ggi', 'ggiex', 'ggie', 'ggiep', 'ggat', 'ggax', 'gga', 'ggap', 'gguot', 'gguox', 'gguo', 'gguop', 'ggot', 'ggox', 'ggo', 'ggop', 'gget', 'ggex', 'gge', 'ggep', 'ggut', 'ggux', 'ggu', 'ggup', 'ggurx', 'ggur', 'mgiex', 'mgie', 'mgat', 'mgax', 'mga', 'mgap', 'mguox', 'mguo', 'mguop', 'mgot', 'mgox', 'mgo', 'mgop', 'mgex', 'mge', 'mgep', 'mgut', 'mgux', 'mgu', 'mgup', 'mgurx', 'mgur', 'hxit', 'hxix', 'hxi', 'hxip', 'hxiet', 'hxiex', 'hxie', 'hxiep', 'hxat', 'hxax', 'hxa', 'hxap', 'hxuot', 'hxuox', 'hxuo', 'hxuop', 'hxot', 'hxox', 'hxo', 'hxop', 'hxex', 'hxe', 'hxep', 'ngiex', 'ngie', 'ngiep', 'ngat', 'ngax', 'nga', 'ngap', 'nguot', 'nguox', 'nguo', 'ngot', 'ngox', 'ngo', 'ngop', 'ngex', 'nge', 'ngep', 'hit', 'hiex', 'hie', 'hat', 'hax', 'ha', 'hap', 'huot', 'huox', 'huo', 'huop', 'hot', 'hox', 'ho', 'hop', 'hex', 'he', 'hep', 'wat', 'wax', 'wa', 'wap', 'wuox', 'wuo', 'wuop', 'wox', 'wo', 'wop', 'wex', 'we', 'wep', 'zit', 'zix', 'zi', 'zip', 'ziex', 'zie', 'ziep', 'zat', 'zax', 'za', 'zap', 'zuox', 'zuo', 'zuop', 'zot', 'zox', 'zo', 'zop', 'zex', 'ze', 'zep', 'zut', 'zux', 'zu', 'zup', 'zurx', 'zur', 'zyt', 'zyx', 'zy', 'zyp', 'zyrx', 'zyr', 'cit', 'cix', 'ci', 'cip', 'ciet', 'ciex', 'cie', 'ciep', 'cat', 'cax', 'ca', 'cap', 'cuox', 'cuo', 'cuop', 'cot', 'cox', 'co', 'cop', 'cex', 'ce', 'cep', 'cut', 'cux', 'cu', 'cup', 'curx', 'cur', 'cyt', 'cyx', 'cy', 'cyp', 'cyrx', 'cyr', 'zzit', 'zzix', 'zzi', 'zzip', 'zziet', 'zziex', 'zzie', 'zziep', 'zzat', 'zzax', 'zza', 'zzap', 'zzox', 'zzo', 'zzop', 'zzex', 'zze', 'zzep', 'zzux', 'zzu', 'zzup', 'zzurx', 'zzur', 'zzyt', 'zzyx', 'zzy', 'zzyp', 'zzyrx', 'zzyr', 'nzit', 'nzix', 'nzi', 'nzip', 'nziex', 'nzie', 'nziep', 'nzat', 'nzax', 'nza', 'nzap', 'nzuox', 'nzuo', 'nzox', 'nzop', 'nzex', 'nze', 'nzux', 'nzu'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0a3.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a3.php
new file mode 100644
index 000000000..a56a8ed5b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a3.php
@@ -0,0 +1 @@
+<?php return ['nzup', 'nzurx', 'nzur', 'nzyt', 'nzyx', 'nzy', 'nzyp', 'nzyrx', 'nzyr', 'sit', 'six', 'si', 'sip', 'siex', 'sie', 'siep', 'sat', 'sax', 'sa', 'sap', 'suox', 'suo', 'suop', 'sot', 'sox', 'so', 'sop', 'sex', 'se', 'sep', 'sut', 'sux', 'su', 'sup', 'surx', 'sur', 'syt', 'syx', 'sy', 'syp', 'syrx', 'syr', 'ssit', 'ssix', 'ssi', 'ssip', 'ssiex', 'ssie', 'ssiep', 'ssat', 'ssax', 'ssa', 'ssap', 'ssot', 'ssox', 'sso', 'ssop', 'ssex', 'sse', 'ssep', 'ssut', 'ssux', 'ssu', 'ssup', 'ssyt', 'ssyx', 'ssy', 'ssyp', 'ssyrx', 'ssyr', 'zhat', 'zhax', 'zha', 'zhap', 'zhuox', 'zhuo', 'zhuop', 'zhot', 'zhox', 'zho', 'zhop', 'zhet', 'zhex', 'zhe', 'zhep', 'zhut', 'zhux', 'zhu', 'zhup', 'zhurx', 'zhur', 'zhyt', 'zhyx', 'zhy', 'zhyp', 'zhyrx', 'zhyr', 'chat', 'chax', 'cha', 'chap', 'chuot', 'chuox', 'chuo', 'chuop', 'chot', 'chox', 'cho', 'chop', 'chet', 'chex', 'che', 'chep', 'chux', 'chu', 'chup', 'churx', 'chur', 'chyt', 'chyx', 'chy', 'chyp', 'chyrx', 'chyr', 'rrax', 'rra', 'rruox', 'rruo', 'rrot', 'rrox', 'rro', 'rrop', 'rret', 'rrex', 'rre', 'rrep', 'rrut', 'rrux', 'rru', 'rrup', 'rrurx', 'rrur', 'rryt', 'rryx', 'rry', 'rryp', 'rryrx', 'rryr', 'nrat', 'nrax', 'nra', 'nrap', 'nrox', 'nro', 'nrop', 'nret', 'nrex', 'nre', 'nrep', 'nrut', 'nrux', 'nru', 'nrup', 'nrurx', 'nrur', 'nryt', 'nryx', 'nry', 'nryp', 'nryrx', 'nryr', 'shat', 'shax', 'sha', 'shap', 'shuox', 'shuo', 'shuop', 'shot', 'shox', 'sho', 'shop', 'shet', 'shex', 'she', 'shep', 'shut', 'shux', 'shu', 'shup', 'shurx', 'shur', 'shyt', 'shyx', 'shy', 'shyp', 'shyrx', 'shyr', 'rat', 'rax', 'ra', 'rap', 'ruox', 'ruo', 'ruop', 'rot', 'rox', 'ro', 'rop', 'rex', 're', 'rep', 'rut', 'rux', 'ru', 'rup', 'rurx', 'rur', 'ryt', 'ryx', 'ry', 'ryp', 'ryrx', 'ryr', 'jit', 'jix', 'ji', 'jip', 'jiet', 'jiex', 'jie', 'jiep', 'juot', 'juox', 'juo', 'juop', 'jot', 'jox', 'jo', 'jop', 'jut', 'jux', 'ju', 'jup', 'jurx', 'jur', 'jyt', 'jyx', 'jy', 'jyp', 'jyrx', 'jyr', 'qit', 'qix', 'qi', 'qip'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0a4.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a4.php
new file mode 100644
index 000000000..2fa588390
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0a4.php
@@ -0,0 +1 @@
+<?php return ['qiet', 'qiex', 'qie', 'qiep', 'quot', 'quox', 'quo', 'quop', 'qot', 'qox', 'qo', 'qop', 'qut', 'qux', 'qu', 'qup', 'qurx', 'qur', 'qyt', 'qyx', 'qy', 'qyp', 'qyrx', 'qyr', 'jjit', 'jjix', 'jji', 'jjip', 'jjiet', 'jjiex', 'jjie', 'jjiep', 'jjuox', 'jjuo', 'jjuop', 'jjot', 'jjox', 'jjo', 'jjop', 'jjut', 'jjux', 'jju', 'jjup', 'jjurx', 'jjur', 'jjyt', 'jjyx', 'jjy', 'jjyp', 'njit', 'njix', 'nji', 'njip', 'njiet', 'njiex', 'njie', 'njiep', 'njuox', 'njuo', 'njot', 'njox', 'njo', 'njop', 'njux', 'nju', 'njup', 'njurx', 'njur', 'njyt', 'njyx', 'njy', 'njyp', 'njyrx', 'njyr', 'nyit', 'nyix', 'nyi', 'nyip', 'nyiet', 'nyiex', 'nyie', 'nyiep', 'nyuox', 'nyuo', 'nyuop', 'nyot', 'nyox', 'nyo', 'nyop', 'nyut', 'nyux', 'nyu', 'nyup', 'xit', 'xix', 'xi', 'xip', 'xiet', 'xiex', 'xie', 'xiep', 'xuox', 'xuo', 'xot', 'xox', 'xo', 'xop', 'xyt', 'xyx', 'xy', 'xyp', 'xyrx', 'xyr', 'yit', 'yix', 'yi', 'yip', 'yiet', 'yiex', 'yie', 'yiep', 'yuot', 'yuox', 'yuo', 'yuop', 'yot', 'yox', 'yo', 'yop', 'yut', 'yux', 'yu', 'yup', 'yurx', 'yur', 'yyt', 'yyx', 'yy', 'yyp', 'yyrx', 'yyr', '[?]', '[?]', '[?]', 'Qot', 'Li', 'Kit', 'Nyip', 'Cyp', 'Ssi', 'Ggop', 'Gep', 'Mi', 'Hxit', 'Lyr', 'Bbut', 'Mop', 'Yo', 'Put', 'Hxuo', 'Tat', 'Ga', '[?]', '[?]', 'Ddur', 'Bur', 'Gguo', 'Nyop', 'Tu', 'Op', 'Jjut', 'Zot', 'Pyt', 'Hmo', 'Yit', 'Vur', 'Shy', 'Vep', 'Za', 'Jo', '[?]', 'Jjy', 'Got', 'Jjie', 'Wo', 'Du', 'Shur', 'Lie', 'Cy', 'Cuop', 'Cip', 'Hxop', 'Shat', '[?]', 'Shop', 'Che', 'Zziet', '[?]', 'Ke', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ac.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ac.php
new file mode 100644
index 000000000..98a9bfd58
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ac.php
@@ -0,0 +1 @@
+<?php return ['ga', 'gag', 'gagg', 'gags', 'gan', 'ganj', 'ganh', 'gad', 'gal', 'galg', 'galm', 'galb', 'gals', 'galt', 'galp', 'galh', 'gam', 'gab', 'gabs', 'gas', 'gass', 'gang', 'gaj', 'gac', 'gak', 'gat', 'gap', 'gah', 'gae', 'gaeg', 'gaegg', 'gaegs', 'gaen', 'gaenj', 'gaenh', 'gaed', 'gael', 'gaelg', 'gaelm', 'gaelb', 'gaels', 'gaelt', 'gaelp', 'gaelh', 'gaem', 'gaeb', 'gaebs', 'gaes', 'gaess', 'gaeng', 'gaej', 'gaec', 'gaek', 'gaet', 'gaep', 'gaeh', 'gya', 'gyag', 'gyagg', 'gyags', 'gyan', 'gyanj', 'gyanh', 'gyad', 'gyal', 'gyalg', 'gyalm', 'gyalb', 'gyals', 'gyalt', 'gyalp', 'gyalh', 'gyam', 'gyab', 'gyabs', 'gyas', 'gyass', 'gyang', 'gyaj', 'gyac', 'gyak', 'gyat', 'gyap', 'gyah', 'gyae', 'gyaeg', 'gyaegg', 'gyaegs', 'gyaen', 'gyaenj', 'gyaenh', 'gyaed', 'gyael', 'gyaelg', 'gyaelm', 'gyaelb', 'gyaels', 'gyaelt', 'gyaelp', 'gyaelh', 'gyaem', 'gyaeb', 'gyaebs', 'gyaes', 'gyaess', 'gyaeng', 'gyaej', 'gyaec', 'gyaek', 'gyaet', 'gyaep', 'gyaeh', 'geo', 'geog', 'geogg', 'geogs', 'geon', 'geonj', 'geonh', 'geod', 'geol', 'geolg', 'geolm', 'geolb', 'geols', 'geolt', 'geolp', 'geolh', 'geom', 'geob', 'geobs', 'geos', 'geoss', 'geong', 'geoj', 'geoc', 'geok', 'geot', 'geop', 'geoh', 'ge', 'geg', 'gegg', 'gegs', 'gen', 'genj', 'genh', 'ged', 'gel', 'gelg', 'gelm', 'gelb', 'gels', 'gelt', 'gelp', 'gelh', 'gem', 'geb', 'gebs', 'ges', 'gess', 'geng', 'gej', 'gec', 'gek', 'get', 'gep', 'geh', 'gyeo', 'gyeog', 'gyeogg', 'gyeogs', 'gyeon', 'gyeonj', 'gyeonh', 'gyeod', 'gyeol', 'gyeolg', 'gyeolm', 'gyeolb', 'gyeols', 'gyeolt', 'gyeolp', 'gyeolh', 'gyeom', 'gyeob', 'gyeobs', 'gyeos', 'gyeoss', 'gyeong', 'gyeoj', 'gyeoc', 'gyeok', 'gyeot', 'gyeop', 'gyeoh', 'gye', 'gyeg', 'gyegg', 'gyegs', 'gyen', 'gyenj', 'gyenh', 'gyed', 'gyel', 'gyelg', 'gyelm', 'gyelb', 'gyels', 'gyelt', 'gyelp', 'gyelh', 'gyem', 'gyeb', 'gyebs', 'gyes', 'gyess', 'gyeng', 'gyej', 'gyec', 'gyek', 'gyet', 'gyep', 'gyeh', 'go', 'gog', 'gogg', 'gogs', 'gon', 'gonj', 'gonh', 'god', 'gol', 'golg', 'golm', 'golb', 'gols', 'golt', 'golp', 'golh', 'gom', 'gob', 'gobs', 'gos', 'goss', 'gong', 'goj', 'goc', 'gok', 'got', 'gop', 'goh', 'gwa', 'gwag', 'gwagg', 'gwags'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ad.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ad.php
new file mode 100644
index 000000000..8e117c5ab
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ad.php
@@ -0,0 +1 @@
+<?php return ['gwan', 'gwanj', 'gwanh', 'gwad', 'gwal', 'gwalg', 'gwalm', 'gwalb', 'gwals', 'gwalt', 'gwalp', 'gwalh', 'gwam', 'gwab', 'gwabs', 'gwas', 'gwass', 'gwang', 'gwaj', 'gwac', 'gwak', 'gwat', 'gwap', 'gwah', 'gwae', 'gwaeg', 'gwaegg', 'gwaegs', 'gwaen', 'gwaenj', 'gwaenh', 'gwaed', 'gwael', 'gwaelg', 'gwaelm', 'gwaelb', 'gwaels', 'gwaelt', 'gwaelp', 'gwaelh', 'gwaem', 'gwaeb', 'gwaebs', 'gwaes', 'gwaess', 'gwaeng', 'gwaej', 'gwaec', 'gwaek', 'gwaet', 'gwaep', 'gwaeh', 'goe', 'goeg', 'goegg', 'goegs', 'goen', 'goenj', 'goenh', 'goed', 'goel', 'goelg', 'goelm', 'goelb', 'goels', 'goelt', 'goelp', 'goelh', 'goem', 'goeb', 'goebs', 'goes', 'goess', 'goeng', 'goej', 'goec', 'goek', 'goet', 'goep', 'goeh', 'gyo', 'gyog', 'gyogg', 'gyogs', 'gyon', 'gyonj', 'gyonh', 'gyod', 'gyol', 'gyolg', 'gyolm', 'gyolb', 'gyols', 'gyolt', 'gyolp', 'gyolh', 'gyom', 'gyob', 'gyobs', 'gyos', 'gyoss', 'gyong', 'gyoj', 'gyoc', 'gyok', 'gyot', 'gyop', 'gyoh', 'gu', 'gug', 'gugg', 'gugs', 'gun', 'gunj', 'gunh', 'gud', 'gul', 'gulg', 'gulm', 'gulb', 'guls', 'gult', 'gulp', 'gulh', 'gum', 'gub', 'gubs', 'gus', 'guss', 'gung', 'guj', 'guc', 'guk', 'gut', 'gup', 'guh', 'gweo', 'gweog', 'gweogg', 'gweogs', 'gweon', 'gweonj', 'gweonh', 'gweod', 'gweol', 'gweolg', 'gweolm', 'gweolb', 'gweols', 'gweolt', 'gweolp', 'gweolh', 'gweom', 'gweob', 'gweobs', 'gweos', 'gweoss', 'gweong', 'gweoj', 'gweoc', 'gweok', 'gweot', 'gweop', 'gweoh', 'gwe', 'gweg', 'gwegg', 'gwegs', 'gwen', 'gwenj', 'gwenh', 'gwed', 'gwel', 'gwelg', 'gwelm', 'gwelb', 'gwels', 'gwelt', 'gwelp', 'gwelh', 'gwem', 'gweb', 'gwebs', 'gwes', 'gwess', 'gweng', 'gwej', 'gwec', 'gwek', 'gwet', 'gwep', 'gweh', 'gwi', 'gwig', 'gwigg', 'gwigs', 'gwin', 'gwinj', 'gwinh', 'gwid', 'gwil', 'gwilg', 'gwilm', 'gwilb', 'gwils', 'gwilt', 'gwilp', 'gwilh', 'gwim', 'gwib', 'gwibs', 'gwis', 'gwiss', 'gwing', 'gwij', 'gwic', 'gwik', 'gwit', 'gwip', 'gwih', 'gyu', 'gyug', 'gyugg', 'gyugs', 'gyun', 'gyunj', 'gyunh', 'gyud', 'gyul', 'gyulg', 'gyulm', 'gyulb', 'gyuls', 'gyult', 'gyulp', 'gyulh', 'gyum', 'gyub', 'gyubs', 'gyus', 'gyuss', 'gyung', 'gyuj', 'gyuc', 'gyuk', 'gyut', 'gyup', 'gyuh', 'geu', 'geug', 'geugg', 'geugs', 'geun', 'geunj', 'geunh', 'geud'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ae.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ae.php
new file mode 100644
index 000000000..05c2e2037
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ae.php
@@ -0,0 +1 @@
+<?php return ['geul', 'geulg', 'geulm', 'geulb', 'geuls', 'geult', 'geulp', 'geulh', 'geum', 'geub', 'geubs', 'geus', 'geuss', 'geung', 'geuj', 'geuc', 'geuk', 'geut', 'geup', 'geuh', 'gyi', 'gyig', 'gyigg', 'gyigs', 'gyin', 'gyinj', 'gyinh', 'gyid', 'gyil', 'gyilg', 'gyilm', 'gyilb', 'gyils', 'gyilt', 'gyilp', 'gyilh', 'gyim', 'gyib', 'gyibs', 'gyis', 'gyiss', 'gying', 'gyij', 'gyic', 'gyik', 'gyit', 'gyip', 'gyih', 'gi', 'gig', 'gigg', 'gigs', 'gin', 'ginj', 'ginh', 'gid', 'gil', 'gilg', 'gilm', 'gilb', 'gils', 'gilt', 'gilp', 'gilh', 'gim', 'gib', 'gibs', 'gis', 'giss', 'ging', 'gij', 'gic', 'gik', 'git', 'gip', 'gih', 'gga', 'ggag', 'ggagg', 'ggags', 'ggan', 'gganj', 'gganh', 'ggad', 'ggal', 'ggalg', 'ggalm', 'ggalb', 'ggals', 'ggalt', 'ggalp', 'ggalh', 'ggam', 'ggab', 'ggabs', 'ggas', 'ggass', 'ggang', 'ggaj', 'ggac', 'ggak', 'ggat', 'ggap', 'ggah', 'ggae', 'ggaeg', 'ggaegg', 'ggaegs', 'ggaen', 'ggaenj', 'ggaenh', 'ggaed', 'ggael', 'ggaelg', 'ggaelm', 'ggaelb', 'ggaels', 'ggaelt', 'ggaelp', 'ggaelh', 'ggaem', 'ggaeb', 'ggaebs', 'ggaes', 'ggaess', 'ggaeng', 'ggaej', 'ggaec', 'ggaek', 'ggaet', 'ggaep', 'ggaeh', 'ggya', 'ggyag', 'ggyagg', 'ggyags', 'ggyan', 'ggyanj', 'ggyanh', 'ggyad', 'ggyal', 'ggyalg', 'ggyalm', 'ggyalb', 'ggyals', 'ggyalt', 'ggyalp', 'ggyalh', 'ggyam', 'ggyab', 'ggyabs', 'ggyas', 'ggyass', 'ggyang', 'ggyaj', 'ggyac', 'ggyak', 'ggyat', 'ggyap', 'ggyah', 'ggyae', 'ggyaeg', 'ggyaegg', 'ggyaegs', 'ggyaen', 'ggyaenj', 'ggyaenh', 'ggyaed', 'ggyael', 'ggyaelg', 'ggyaelm', 'ggyaelb', 'ggyaels', 'ggyaelt', 'ggyaelp', 'ggyaelh', 'ggyaem', 'ggyaeb', 'ggyaebs', 'ggyaes', 'ggyaess', 'ggyaeng', 'ggyaej', 'ggyaec', 'ggyaek', 'ggyaet', 'ggyaep', 'ggyaeh', 'ggeo', 'ggeog', 'ggeogg', 'ggeogs', 'ggeon', 'ggeonj', 'ggeonh', 'ggeod', 'ggeol', 'ggeolg', 'ggeolm', 'ggeolb', 'ggeols', 'ggeolt', 'ggeolp', 'ggeolh', 'ggeom', 'ggeob', 'ggeobs', 'ggeos', 'ggeoss', 'ggeong', 'ggeoj', 'ggeoc', 'ggeok', 'ggeot', 'ggeop', 'ggeoh', 'gge', 'ggeg', 'ggegg', 'ggegs', 'ggen', 'ggenj', 'ggenh', 'gged', 'ggel', 'ggelg', 'ggelm', 'ggelb', 'ggels', 'ggelt', 'ggelp', 'ggelh', 'ggem', 'ggeb', 'ggebs', 'gges', 'ggess', 'ggeng', 'ggej', 'ggec', 'ggek', 'gget', 'ggep', 'ggeh', 'ggyeo', 'ggyeog', 'ggyeogg', 'ggyeogs', 'ggyeon', 'ggyeonj', 'ggyeonh', 'ggyeod', 'ggyeol', 'ggyeolg', 'ggyeolm', 'ggyeolb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0af.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0af.php
new file mode 100644
index 000000000..80ac8cf89
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0af.php
@@ -0,0 +1 @@
+<?php return ['ggyeols', 'ggyeolt', 'ggyeolp', 'ggyeolh', 'ggyeom', 'ggyeob', 'ggyeobs', 'ggyeos', 'ggyeoss', 'ggyeong', 'ggyeoj', 'ggyeoc', 'ggyeok', 'ggyeot', 'ggyeop', 'ggyeoh', 'ggye', 'ggyeg', 'ggyegg', 'ggyegs', 'ggyen', 'ggyenj', 'ggyenh', 'ggyed', 'ggyel', 'ggyelg', 'ggyelm', 'ggyelb', 'ggyels', 'ggyelt', 'ggyelp', 'ggyelh', 'ggyem', 'ggyeb', 'ggyebs', 'ggyes', 'ggyess', 'ggyeng', 'ggyej', 'ggyec', 'ggyek', 'ggyet', 'ggyep', 'ggyeh', 'ggo', 'ggog', 'ggogg', 'ggogs', 'ggon', 'ggonj', 'ggonh', 'ggod', 'ggol', 'ggolg', 'ggolm', 'ggolb', 'ggols', 'ggolt', 'ggolp', 'ggolh', 'ggom', 'ggob', 'ggobs', 'ggos', 'ggoss', 'ggong', 'ggoj', 'ggoc', 'ggok', 'ggot', 'ggop', 'ggoh', 'ggwa', 'ggwag', 'ggwagg', 'ggwags', 'ggwan', 'ggwanj', 'ggwanh', 'ggwad', 'ggwal', 'ggwalg', 'ggwalm', 'ggwalb', 'ggwals', 'ggwalt', 'ggwalp', 'ggwalh', 'ggwam', 'ggwab', 'ggwabs', 'ggwas', 'ggwass', 'ggwang', 'ggwaj', 'ggwac', 'ggwak', 'ggwat', 'ggwap', 'ggwah', 'ggwae', 'ggwaeg', 'ggwaegg', 'ggwaegs', 'ggwaen', 'ggwaenj', 'ggwaenh', 'ggwaed', 'ggwael', 'ggwaelg', 'ggwaelm', 'ggwaelb', 'ggwaels', 'ggwaelt', 'ggwaelp', 'ggwaelh', 'ggwaem', 'ggwaeb', 'ggwaebs', 'ggwaes', 'ggwaess', 'ggwaeng', 'ggwaej', 'ggwaec', 'ggwaek', 'ggwaet', 'ggwaep', 'ggwaeh', 'ggoe', 'ggoeg', 'ggoegg', 'ggoegs', 'ggoen', 'ggoenj', 'ggoenh', 'ggoed', 'ggoel', 'ggoelg', 'ggoelm', 'ggoelb', 'ggoels', 'ggoelt', 'ggoelp', 'ggoelh', 'ggoem', 'ggoeb', 'ggoebs', 'ggoes', 'ggoess', 'ggoeng', 'ggoej', 'ggoec', 'ggoek', 'ggoet', 'ggoep', 'ggoeh', 'ggyo', 'ggyog', 'ggyogg', 'ggyogs', 'ggyon', 'ggyonj', 'ggyonh', 'ggyod', 'ggyol', 'ggyolg', 'ggyolm', 'ggyolb', 'ggyols', 'ggyolt', 'ggyolp', 'ggyolh', 'ggyom', 'ggyob', 'ggyobs', 'ggyos', 'ggyoss', 'ggyong', 'ggyoj', 'ggyoc', 'ggyok', 'ggyot', 'ggyop', 'ggyoh', 'ggu', 'ggug', 'ggugg', 'ggugs', 'ggun', 'ggunj', 'ggunh', 'ggud', 'ggul', 'ggulg', 'ggulm', 'ggulb', 'gguls', 'ggult', 'ggulp', 'ggulh', 'ggum', 'ggub', 'ggubs', 'ggus', 'gguss', 'ggung', 'gguj', 'gguc', 'gguk', 'ggut', 'ggup', 'gguh', 'ggweo', 'ggweog', 'ggweogg', 'ggweogs', 'ggweon', 'ggweonj', 'ggweonh', 'ggweod', 'ggweol', 'ggweolg', 'ggweolm', 'ggweolb', 'ggweols', 'ggweolt', 'ggweolp', 'ggweolh', 'ggweom', 'ggweob', 'ggweobs', 'ggweos', 'ggweoss', 'ggweong', 'ggweoj', 'ggweoc', 'ggweok', 'ggweot', 'ggweop', 'ggweoh', 'ggwe', 'ggweg', 'ggwegg', 'ggwegs', 'ggwen', 'ggwenj', 'ggwenh', 'ggwed', 'ggwel', 'ggwelg', 'ggwelm', 'ggwelb', 'ggwels', 'ggwelt', 'ggwelp', 'ggwelh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b0.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b0.php
new file mode 100644
index 000000000..916b5f891
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b0.php
@@ -0,0 +1 @@
+<?php return ['ggwem', 'ggweb', 'ggwebs', 'ggwes', 'ggwess', 'ggweng', 'ggwej', 'ggwec', 'ggwek', 'ggwet', 'ggwep', 'ggweh', 'ggwi', 'ggwig', 'ggwigg', 'ggwigs', 'ggwin', 'ggwinj', 'ggwinh', 'ggwid', 'ggwil', 'ggwilg', 'ggwilm', 'ggwilb', 'ggwils', 'ggwilt', 'ggwilp', 'ggwilh', 'ggwim', 'ggwib', 'ggwibs', 'ggwis', 'ggwiss', 'ggwing', 'ggwij', 'ggwic', 'ggwik', 'ggwit', 'ggwip', 'ggwih', 'ggyu', 'ggyug', 'ggyugg', 'ggyugs', 'ggyun', 'ggyunj', 'ggyunh', 'ggyud', 'ggyul', 'ggyulg', 'ggyulm', 'ggyulb', 'ggyuls', 'ggyult', 'ggyulp', 'ggyulh', 'ggyum', 'ggyub', 'ggyubs', 'ggyus', 'ggyuss', 'ggyung', 'ggyuj', 'ggyuc', 'ggyuk', 'ggyut', 'ggyup', 'ggyuh', 'ggeu', 'ggeug', 'ggeugg', 'ggeugs', 'ggeun', 'ggeunj', 'ggeunh', 'ggeud', 'ggeul', 'ggeulg', 'ggeulm', 'ggeulb', 'ggeuls', 'ggeult', 'ggeulp', 'ggeulh', 'ggeum', 'ggeub', 'ggeubs', 'ggeus', 'ggeuss', 'ggeung', 'ggeuj', 'ggeuc', 'ggeuk', 'ggeut', 'ggeup', 'ggeuh', 'ggyi', 'ggyig', 'ggyigg', 'ggyigs', 'ggyin', 'ggyinj', 'ggyinh', 'ggyid', 'ggyil', 'ggyilg', 'ggyilm', 'ggyilb', 'ggyils', 'ggyilt', 'ggyilp', 'ggyilh', 'ggyim', 'ggyib', 'ggyibs', 'ggyis', 'ggyiss', 'ggying', 'ggyij', 'ggyic', 'ggyik', 'ggyit', 'ggyip', 'ggyih', 'ggi', 'ggig', 'ggigg', 'ggigs', 'ggin', 'gginj', 'gginh', 'ggid', 'ggil', 'ggilg', 'ggilm', 'ggilb', 'ggils', 'ggilt', 'ggilp', 'ggilh', 'ggim', 'ggib', 'ggibs', 'ggis', 'ggiss', 'gging', 'ggij', 'ggic', 'ggik', 'ggit', 'ggip', 'ggih', 'na', 'nag', 'nagg', 'nags', 'nan', 'nanj', 'nanh', 'nad', 'nal', 'nalg', 'nalm', 'nalb', 'nals', 'nalt', 'nalp', 'nalh', 'nam', 'nab', 'nabs', 'nas', 'nass', 'nang', 'naj', 'nac', 'nak', 'nat', 'nap', 'nah', 'nae', 'naeg', 'naegg', 'naegs', 'naen', 'naenj', 'naenh', 'naed', 'nael', 'naelg', 'naelm', 'naelb', 'naels', 'naelt', 'naelp', 'naelh', 'naem', 'naeb', 'naebs', 'naes', 'naess', 'naeng', 'naej', 'naec', 'naek', 'naet', 'naep', 'naeh', 'nya', 'nyag', 'nyagg', 'nyags', 'nyan', 'nyanj', 'nyanh', 'nyad', 'nyal', 'nyalg', 'nyalm', 'nyalb', 'nyals', 'nyalt', 'nyalp', 'nyalh', 'nyam', 'nyab', 'nyabs', 'nyas', 'nyass', 'nyang', 'nyaj', 'nyac', 'nyak', 'nyat', 'nyap', 'nyah', 'nyae', 'nyaeg', 'nyaegg', 'nyaegs', 'nyaen', 'nyaenj', 'nyaenh', 'nyaed', 'nyael', 'nyaelg', 'nyaelm', 'nyaelb', 'nyaels', 'nyaelt', 'nyaelp', 'nyaelh', 'nyaem', 'nyaeb', 'nyaebs', 'nyaes'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b1.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b1.php
new file mode 100644
index 000000000..727993fc3
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b1.php
@@ -0,0 +1 @@
+<?php return ['nyaess', 'nyaeng', 'nyaej', 'nyaec', 'nyaek', 'nyaet', 'nyaep', 'nyaeh', 'neo', 'neog', 'neogg', 'neogs', 'neon', 'neonj', 'neonh', 'neod', 'neol', 'neolg', 'neolm', 'neolb', 'neols', 'neolt', 'neolp', 'neolh', 'neom', 'neob', 'neobs', 'neos', 'neoss', 'neong', 'neoj', 'neoc', 'neok', 'neot', 'neop', 'neoh', 'ne', 'neg', 'negg', 'negs', 'nen', 'nenj', 'nenh', 'ned', 'nel', 'nelg', 'nelm', 'nelb', 'nels', 'nelt', 'nelp', 'nelh', 'nem', 'neb', 'nebs', 'nes', 'ness', 'neng', 'nej', 'nec', 'nek', 'net', 'nep', 'neh', 'nyeo', 'nyeog', 'nyeogg', 'nyeogs', 'nyeon', 'nyeonj', 'nyeonh', 'nyeod', 'nyeol', 'nyeolg', 'nyeolm', 'nyeolb', 'nyeols', 'nyeolt', 'nyeolp', 'nyeolh', 'nyeom', 'nyeob', 'nyeobs', 'nyeos', 'nyeoss', 'nyeong', 'nyeoj', 'nyeoc', 'nyeok', 'nyeot', 'nyeop', 'nyeoh', 'nye', 'nyeg', 'nyegg', 'nyegs', 'nyen', 'nyenj', 'nyenh', 'nyed', 'nyel', 'nyelg', 'nyelm', 'nyelb', 'nyels', 'nyelt', 'nyelp', 'nyelh', 'nyem', 'nyeb', 'nyebs', 'nyes', 'nyess', 'nyeng', 'nyej', 'nyec', 'nyek', 'nyet', 'nyep', 'nyeh', 'no', 'nog', 'nogg', 'nogs', 'non', 'nonj', 'nonh', 'nod', 'nol', 'nolg', 'nolm', 'nolb', 'nols', 'nolt', 'nolp', 'nolh', 'nom', 'nob', 'nobs', 'nos', 'noss', 'nong', 'noj', 'noc', 'nok', 'not', 'nop', 'noh', 'nwa', 'nwag', 'nwagg', 'nwags', 'nwan', 'nwanj', 'nwanh', 'nwad', 'nwal', 'nwalg', 'nwalm', 'nwalb', 'nwals', 'nwalt', 'nwalp', 'nwalh', 'nwam', 'nwab', 'nwabs', 'nwas', 'nwass', 'nwang', 'nwaj', 'nwac', 'nwak', 'nwat', 'nwap', 'nwah', 'nwae', 'nwaeg', 'nwaegg', 'nwaegs', 'nwaen', 'nwaenj', 'nwaenh', 'nwaed', 'nwael', 'nwaelg', 'nwaelm', 'nwaelb', 'nwaels', 'nwaelt', 'nwaelp', 'nwaelh', 'nwaem', 'nwaeb', 'nwaebs', 'nwaes', 'nwaess', 'nwaeng', 'nwaej', 'nwaec', 'nwaek', 'nwaet', 'nwaep', 'nwaeh', 'noe', 'noeg', 'noegg', 'noegs', 'noen', 'noenj', 'noenh', 'noed', 'noel', 'noelg', 'noelm', 'noelb', 'noels', 'noelt', 'noelp', 'noelh', 'noem', 'noeb', 'noebs', 'noes', 'noess', 'noeng', 'noej', 'noec', 'noek', 'noet', 'noep', 'noeh', 'nyo', 'nyog', 'nyogg', 'nyogs', 'nyon', 'nyonj', 'nyonh', 'nyod', 'nyol', 'nyolg', 'nyolm', 'nyolb', 'nyols', 'nyolt', 'nyolp', 'nyolh', 'nyom', 'nyob', 'nyobs', 'nyos', 'nyoss', 'nyong', 'nyoj', 'nyoc'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b2.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b2.php
new file mode 100644
index 000000000..46bef0ac0
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b2.php
@@ -0,0 +1 @@
+<?php return ['nyok', 'nyot', 'nyop', 'nyoh', 'nu', 'nug', 'nugg', 'nugs', 'nun', 'nunj', 'nunh', 'nud', 'nul', 'nulg', 'nulm', 'nulb', 'nuls', 'nult', 'nulp', 'nulh', 'num', 'nub', 'nubs', 'nus', 'nuss', 'nung', 'nuj', 'nuc', 'nuk', 'nut', 'nup', 'nuh', 'nweo', 'nweog', 'nweogg', 'nweogs', 'nweon', 'nweonj', 'nweonh', 'nweod', 'nweol', 'nweolg', 'nweolm', 'nweolb', 'nweols', 'nweolt', 'nweolp', 'nweolh', 'nweom', 'nweob', 'nweobs', 'nweos', 'nweoss', 'nweong', 'nweoj', 'nweoc', 'nweok', 'nweot', 'nweop', 'nweoh', 'nwe', 'nweg', 'nwegg', 'nwegs', 'nwen', 'nwenj', 'nwenh', 'nwed', 'nwel', 'nwelg', 'nwelm', 'nwelb', 'nwels', 'nwelt', 'nwelp', 'nwelh', 'nwem', 'nweb', 'nwebs', 'nwes', 'nwess', 'nweng', 'nwej', 'nwec', 'nwek', 'nwet', 'nwep', 'nweh', 'nwi', 'nwig', 'nwigg', 'nwigs', 'nwin', 'nwinj', 'nwinh', 'nwid', 'nwil', 'nwilg', 'nwilm', 'nwilb', 'nwils', 'nwilt', 'nwilp', 'nwilh', 'nwim', 'nwib', 'nwibs', 'nwis', 'nwiss', 'nwing', 'nwij', 'nwic', 'nwik', 'nwit', 'nwip', 'nwih', 'nyu', 'nyug', 'nyugg', 'nyugs', 'nyun', 'nyunj', 'nyunh', 'nyud', 'nyul', 'nyulg', 'nyulm', 'nyulb', 'nyuls', 'nyult', 'nyulp', 'nyulh', 'nyum', 'nyub', 'nyubs', 'nyus', 'nyuss', 'nyung', 'nyuj', 'nyuc', 'nyuk', 'nyut', 'nyup', 'nyuh', 'neu', 'neug', 'neugg', 'neugs', 'neun', 'neunj', 'neunh', 'neud', 'neul', 'neulg', 'neulm', 'neulb', 'neuls', 'neult', 'neulp', 'neulh', 'neum', 'neub', 'neubs', 'neus', 'neuss', 'neung', 'neuj', 'neuc', 'neuk', 'neut', 'neup', 'neuh', 'nyi', 'nyig', 'nyigg', 'nyigs', 'nyin', 'nyinj', 'nyinh', 'nyid', 'nyil', 'nyilg', 'nyilm', 'nyilb', 'nyils', 'nyilt', 'nyilp', 'nyilh', 'nyim', 'nyib', 'nyibs', 'nyis', 'nyiss', 'nying', 'nyij', 'nyic', 'nyik', 'nyit', 'nyip', 'nyih', 'ni', 'nig', 'nigg', 'nigs', 'nin', 'ninj', 'ninh', 'nid', 'nil', 'nilg', 'nilm', 'nilb', 'nils', 'nilt', 'nilp', 'nilh', 'nim', 'nib', 'nibs', 'nis', 'niss', 'ning', 'nij', 'nic', 'nik', 'nit', 'nip', 'nih', 'da', 'dag', 'dagg', 'dags', 'dan', 'danj', 'danh', 'dad', 'dal', 'dalg', 'dalm', 'dalb', 'dals', 'dalt', 'dalp', 'dalh', 'dam', 'dab', 'dabs', 'das', 'dass', 'dang', 'daj', 'dac', 'dak', 'dat', 'dap', 'dah'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b3.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b3.php
new file mode 100644
index 000000000..3d3368a27
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b3.php
@@ -0,0 +1 @@
+<?php return ['dae', 'daeg', 'daegg', 'daegs', 'daen', 'daenj', 'daenh', 'daed', 'dael', 'daelg', 'daelm', 'daelb', 'daels', 'daelt', 'daelp', 'daelh', 'daem', 'daeb', 'daebs', 'daes', 'daess', 'daeng', 'daej', 'daec', 'daek', 'daet', 'daep', 'daeh', 'dya', 'dyag', 'dyagg', 'dyags', 'dyan', 'dyanj', 'dyanh', 'dyad', 'dyal', 'dyalg', 'dyalm', 'dyalb', 'dyals', 'dyalt', 'dyalp', 'dyalh', 'dyam', 'dyab', 'dyabs', 'dyas', 'dyass', 'dyang', 'dyaj', 'dyac', 'dyak', 'dyat', 'dyap', 'dyah', 'dyae', 'dyaeg', 'dyaegg', 'dyaegs', 'dyaen', 'dyaenj', 'dyaenh', 'dyaed', 'dyael', 'dyaelg', 'dyaelm', 'dyaelb', 'dyaels', 'dyaelt', 'dyaelp', 'dyaelh', 'dyaem', 'dyaeb', 'dyaebs', 'dyaes', 'dyaess', 'dyaeng', 'dyaej', 'dyaec', 'dyaek', 'dyaet', 'dyaep', 'dyaeh', 'deo', 'deog', 'deogg', 'deogs', 'deon', 'deonj', 'deonh', 'deod', 'deol', 'deolg', 'deolm', 'deolb', 'deols', 'deolt', 'deolp', 'deolh', 'deom', 'deob', 'deobs', 'deos', 'deoss', 'deong', 'deoj', 'deoc', 'deok', 'deot', 'deop', 'deoh', 'de', 'deg', 'degg', 'degs', 'den', 'denj', 'denh', 'ded', 'del', 'delg', 'delm', 'delb', 'dels', 'delt', 'delp', 'delh', 'dem', 'deb', 'debs', 'des', 'dess', 'deng', 'dej', 'dec', 'dek', 'det', 'dep', 'deh', 'dyeo', 'dyeog', 'dyeogg', 'dyeogs', 'dyeon', 'dyeonj', 'dyeonh', 'dyeod', 'dyeol', 'dyeolg', 'dyeolm', 'dyeolb', 'dyeols', 'dyeolt', 'dyeolp', 'dyeolh', 'dyeom', 'dyeob', 'dyeobs', 'dyeos', 'dyeoss', 'dyeong', 'dyeoj', 'dyeoc', 'dyeok', 'dyeot', 'dyeop', 'dyeoh', 'dye', 'dyeg', 'dyegg', 'dyegs', 'dyen', 'dyenj', 'dyenh', 'dyed', 'dyel', 'dyelg', 'dyelm', 'dyelb', 'dyels', 'dyelt', 'dyelp', 'dyelh', 'dyem', 'dyeb', 'dyebs', 'dyes', 'dyess', 'dyeng', 'dyej', 'dyec', 'dyek', 'dyet', 'dyep', 'dyeh', 'do', 'dog', 'dogg', 'dogs', 'don', 'donj', 'donh', 'dod', 'dol', 'dolg', 'dolm', 'dolb', 'dols', 'dolt', 'dolp', 'dolh', 'dom', 'dob', 'dobs', 'dos', 'doss', 'dong', 'doj', 'doc', 'dok', 'dot', 'dop', 'doh', 'dwa', 'dwag', 'dwagg', 'dwags', 'dwan', 'dwanj', 'dwanh', 'dwad', 'dwal', 'dwalg', 'dwalm', 'dwalb', 'dwals', 'dwalt', 'dwalp', 'dwalh', 'dwam', 'dwab', 'dwabs', 'dwas', 'dwass', 'dwang', 'dwaj', 'dwac', 'dwak', 'dwat', 'dwap', 'dwah', 'dwae', 'dwaeg', 'dwaegg', 'dwaegs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b4.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b4.php
new file mode 100644
index 000000000..07440d747
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b4.php
@@ -0,0 +1 @@
+<?php return ['dwaen', 'dwaenj', 'dwaenh', 'dwaed', 'dwael', 'dwaelg', 'dwaelm', 'dwaelb', 'dwaels', 'dwaelt', 'dwaelp', 'dwaelh', 'dwaem', 'dwaeb', 'dwaebs', 'dwaes', 'dwaess', 'dwaeng', 'dwaej', 'dwaec', 'dwaek', 'dwaet', 'dwaep', 'dwaeh', 'doe', 'doeg', 'doegg', 'doegs', 'doen', 'doenj', 'doenh', 'doed', 'doel', 'doelg', 'doelm', 'doelb', 'doels', 'doelt', 'doelp', 'doelh', 'doem', 'doeb', 'doebs', 'does', 'doess', 'doeng', 'doej', 'doec', 'doek', 'doet', 'doep', 'doeh', 'dyo', 'dyog', 'dyogg', 'dyogs', 'dyon', 'dyonj', 'dyonh', 'dyod', 'dyol', 'dyolg', 'dyolm', 'dyolb', 'dyols', 'dyolt', 'dyolp', 'dyolh', 'dyom', 'dyob', 'dyobs', 'dyos', 'dyoss', 'dyong', 'dyoj', 'dyoc', 'dyok', 'dyot', 'dyop', 'dyoh', 'du', 'dug', 'dugg', 'dugs', 'dun', 'dunj', 'dunh', 'dud', 'dul', 'dulg', 'dulm', 'dulb', 'duls', 'dult', 'dulp', 'dulh', 'dum', 'dub', 'dubs', 'dus', 'duss', 'dung', 'duj', 'duc', 'duk', 'dut', 'dup', 'duh', 'dweo', 'dweog', 'dweogg', 'dweogs', 'dweon', 'dweonj', 'dweonh', 'dweod', 'dweol', 'dweolg', 'dweolm', 'dweolb', 'dweols', 'dweolt', 'dweolp', 'dweolh', 'dweom', 'dweob', 'dweobs', 'dweos', 'dweoss', 'dweong', 'dweoj', 'dweoc', 'dweok', 'dweot', 'dweop', 'dweoh', 'dwe', 'dweg', 'dwegg', 'dwegs', 'dwen', 'dwenj', 'dwenh', 'dwed', 'dwel', 'dwelg', 'dwelm', 'dwelb', 'dwels', 'dwelt', 'dwelp', 'dwelh', 'dwem', 'dweb', 'dwebs', 'dwes', 'dwess', 'dweng', 'dwej', 'dwec', 'dwek', 'dwet', 'dwep', 'dweh', 'dwi', 'dwig', 'dwigg', 'dwigs', 'dwin', 'dwinj', 'dwinh', 'dwid', 'dwil', 'dwilg', 'dwilm', 'dwilb', 'dwils', 'dwilt', 'dwilp', 'dwilh', 'dwim', 'dwib', 'dwibs', 'dwis', 'dwiss', 'dwing', 'dwij', 'dwic', 'dwik', 'dwit', 'dwip', 'dwih', 'dyu', 'dyug', 'dyugg', 'dyugs', 'dyun', 'dyunj', 'dyunh', 'dyud', 'dyul', 'dyulg', 'dyulm', 'dyulb', 'dyuls', 'dyult', 'dyulp', 'dyulh', 'dyum', 'dyub', 'dyubs', 'dyus', 'dyuss', 'dyung', 'dyuj', 'dyuc', 'dyuk', 'dyut', 'dyup', 'dyuh', 'deu', 'deug', 'deugg', 'deugs', 'deun', 'deunj', 'deunh', 'deud', 'deul', 'deulg', 'deulm', 'deulb', 'deuls', 'deult', 'deulp', 'deulh', 'deum', 'deub', 'deubs', 'deus', 'deuss', 'deung', 'deuj', 'deuc', 'deuk', 'deut', 'deup', 'deuh', 'dyi', 'dyig', 'dyigg', 'dyigs', 'dyin', 'dyinj', 'dyinh', 'dyid'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b5.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b5.php
new file mode 100644
index 000000000..13b064edb
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b5.php
@@ -0,0 +1 @@
+<?php return ['dyil', 'dyilg', 'dyilm', 'dyilb', 'dyils', 'dyilt', 'dyilp', 'dyilh', 'dyim', 'dyib', 'dyibs', 'dyis', 'dyiss', 'dying', 'dyij', 'dyic', 'dyik', 'dyit', 'dyip', 'dyih', 'di', 'dig', 'digg', 'digs', 'din', 'dinj', 'dinh', 'did', 'dil', 'dilg', 'dilm', 'dilb', 'dils', 'dilt', 'dilp', 'dilh', 'dim', 'dib', 'dibs', 'dis', 'diss', 'ding', 'dij', 'dic', 'dik', 'dit', 'dip', 'dih', 'dda', 'ddag', 'ddagg', 'ddags', 'ddan', 'ddanj', 'ddanh', 'ddad', 'ddal', 'ddalg', 'ddalm', 'ddalb', 'ddals', 'ddalt', 'ddalp', 'ddalh', 'ddam', 'ddab', 'ddabs', 'ddas', 'ddass', 'ddang', 'ddaj', 'ddac', 'ddak', 'ddat', 'ddap', 'ddah', 'ddae', 'ddaeg', 'ddaegg', 'ddaegs', 'ddaen', 'ddaenj', 'ddaenh', 'ddaed', 'ddael', 'ddaelg', 'ddaelm', 'ddaelb', 'ddaels', 'ddaelt', 'ddaelp', 'ddaelh', 'ddaem', 'ddaeb', 'ddaebs', 'ddaes', 'ddaess', 'ddaeng', 'ddaej', 'ddaec', 'ddaek', 'ddaet', 'ddaep', 'ddaeh', 'ddya', 'ddyag', 'ddyagg', 'ddyags', 'ddyan', 'ddyanj', 'ddyanh', 'ddyad', 'ddyal', 'ddyalg', 'ddyalm', 'ddyalb', 'ddyals', 'ddyalt', 'ddyalp', 'ddyalh', 'ddyam', 'ddyab', 'ddyabs', 'ddyas', 'ddyass', 'ddyang', 'ddyaj', 'ddyac', 'ddyak', 'ddyat', 'ddyap', 'ddyah', 'ddyae', 'ddyaeg', 'ddyaegg', 'ddyaegs', 'ddyaen', 'ddyaenj', 'ddyaenh', 'ddyaed', 'ddyael', 'ddyaelg', 'ddyaelm', 'ddyaelb', 'ddyaels', 'ddyaelt', 'ddyaelp', 'ddyaelh', 'ddyaem', 'ddyaeb', 'ddyaebs', 'ddyaes', 'ddyaess', 'ddyaeng', 'ddyaej', 'ddyaec', 'ddyaek', 'ddyaet', 'ddyaep', 'ddyaeh', 'ddeo', 'ddeog', 'ddeogg', 'ddeogs', 'ddeon', 'ddeonj', 'ddeonh', 'ddeod', 'ddeol', 'ddeolg', 'ddeolm', 'ddeolb', 'ddeols', 'ddeolt', 'ddeolp', 'ddeolh', 'ddeom', 'ddeob', 'ddeobs', 'ddeos', 'ddeoss', 'ddeong', 'ddeoj', 'ddeoc', 'ddeok', 'ddeot', 'ddeop', 'ddeoh', 'dde', 'ddeg', 'ddegg', 'ddegs', 'dden', 'ddenj', 'ddenh', 'dded', 'ddel', 'ddelg', 'ddelm', 'ddelb', 'ddels', 'ddelt', 'ddelp', 'ddelh', 'ddem', 'ddeb', 'ddebs', 'ddes', 'ddess', 'ddeng', 'ddej', 'ddec', 'ddek', 'ddet', 'ddep', 'ddeh', 'ddyeo', 'ddyeog', 'ddyeogg', 'ddyeogs', 'ddyeon', 'ddyeonj', 'ddyeonh', 'ddyeod', 'ddyeol', 'ddyeolg', 'ddyeolm', 'ddyeolb', 'ddyeols', 'ddyeolt', 'ddyeolp', 'ddyeolh', 'ddyeom', 'ddyeob', 'ddyeobs', 'ddyeos', 'ddyeoss', 'ddyeong', 'ddyeoj', 'ddyeoc', 'ddyeok', 'ddyeot', 'ddyeop', 'ddyeoh', 'ddye', 'ddyeg', 'ddyegg', 'ddyegs', 'ddyen', 'ddyenj', 'ddyenh', 'ddyed', 'ddyel', 'ddyelg', 'ddyelm', 'ddyelb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b6.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b6.php
new file mode 100644
index 000000000..ebaa33d0f
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b6.php
@@ -0,0 +1 @@
+<?php return ['ddyels', 'ddyelt', 'ddyelp', 'ddyelh', 'ddyem', 'ddyeb', 'ddyebs', 'ddyes', 'ddyess', 'ddyeng', 'ddyej', 'ddyec', 'ddyek', 'ddyet', 'ddyep', 'ddyeh', 'ddo', 'ddog', 'ddogg', 'ddogs', 'ddon', 'ddonj', 'ddonh', 'ddod', 'ddol', 'ddolg', 'ddolm', 'ddolb', 'ddols', 'ddolt', 'ddolp', 'ddolh', 'ddom', 'ddob', 'ddobs', 'ddos', 'ddoss', 'ddong', 'ddoj', 'ddoc', 'ddok', 'ddot', 'ddop', 'ddoh', 'ddwa', 'ddwag', 'ddwagg', 'ddwags', 'ddwan', 'ddwanj', 'ddwanh', 'ddwad', 'ddwal', 'ddwalg', 'ddwalm', 'ddwalb', 'ddwals', 'ddwalt', 'ddwalp', 'ddwalh', 'ddwam', 'ddwab', 'ddwabs', 'ddwas', 'ddwass', 'ddwang', 'ddwaj', 'ddwac', 'ddwak', 'ddwat', 'ddwap', 'ddwah', 'ddwae', 'ddwaeg', 'ddwaegg', 'ddwaegs', 'ddwaen', 'ddwaenj', 'ddwaenh', 'ddwaed', 'ddwael', 'ddwaelg', 'ddwaelm', 'ddwaelb', 'ddwaels', 'ddwaelt', 'ddwaelp', 'ddwaelh', 'ddwaem', 'ddwaeb', 'ddwaebs', 'ddwaes', 'ddwaess', 'ddwaeng', 'ddwaej', 'ddwaec', 'ddwaek', 'ddwaet', 'ddwaep', 'ddwaeh', 'ddoe', 'ddoeg', 'ddoegg', 'ddoegs', 'ddoen', 'ddoenj', 'ddoenh', 'ddoed', 'ddoel', 'ddoelg', 'ddoelm', 'ddoelb', 'ddoels', 'ddoelt', 'ddoelp', 'ddoelh', 'ddoem', 'ddoeb', 'ddoebs', 'ddoes', 'ddoess', 'ddoeng', 'ddoej', 'ddoec', 'ddoek', 'ddoet', 'ddoep', 'ddoeh', 'ddyo', 'ddyog', 'ddyogg', 'ddyogs', 'ddyon', 'ddyonj', 'ddyonh', 'ddyod', 'ddyol', 'ddyolg', 'ddyolm', 'ddyolb', 'ddyols', 'ddyolt', 'ddyolp', 'ddyolh', 'ddyom', 'ddyob', 'ddyobs', 'ddyos', 'ddyoss', 'ddyong', 'ddyoj', 'ddyoc', 'ddyok', 'ddyot', 'ddyop', 'ddyoh', 'ddu', 'ddug', 'ddugg', 'ddugs', 'ddun', 'ddunj', 'ddunh', 'ddud', 'ddul', 'ddulg', 'ddulm', 'ddulb', 'dduls', 'ddult', 'ddulp', 'ddulh', 'ddum', 'ddub', 'ddubs', 'ddus', 'dduss', 'ddung', 'dduj', 'dduc', 'dduk', 'ddut', 'ddup', 'dduh', 'ddweo', 'ddweog', 'ddweogg', 'ddweogs', 'ddweon', 'ddweonj', 'ddweonh', 'ddweod', 'ddweol', 'ddweolg', 'ddweolm', 'ddweolb', 'ddweols', 'ddweolt', 'ddweolp', 'ddweolh', 'ddweom', 'ddweob', 'ddweobs', 'ddweos', 'ddweoss', 'ddweong', 'ddweoj', 'ddweoc', 'ddweok', 'ddweot', 'ddweop', 'ddweoh', 'ddwe', 'ddweg', 'ddwegg', 'ddwegs', 'ddwen', 'ddwenj', 'ddwenh', 'ddwed', 'ddwel', 'ddwelg', 'ddwelm', 'ddwelb', 'ddwels', 'ddwelt', 'ddwelp', 'ddwelh', 'ddwem', 'ddweb', 'ddwebs', 'ddwes', 'ddwess', 'ddweng', 'ddwej', 'ddwec', 'ddwek', 'ddwet', 'ddwep', 'ddweh', 'ddwi', 'ddwig', 'ddwigg', 'ddwigs', 'ddwin', 'ddwinj', 'ddwinh', 'ddwid', 'ddwil', 'ddwilg', 'ddwilm', 'ddwilb', 'ddwils', 'ddwilt', 'ddwilp', 'ddwilh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b7.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b7.php
new file mode 100644
index 000000000..174de9d39
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b7.php
@@ -0,0 +1 @@
+<?php return ['ddwim', 'ddwib', 'ddwibs', 'ddwis', 'ddwiss', 'ddwing', 'ddwij', 'ddwic', 'ddwik', 'ddwit', 'ddwip', 'ddwih', 'ddyu', 'ddyug', 'ddyugg', 'ddyugs', 'ddyun', 'ddyunj', 'ddyunh', 'ddyud', 'ddyul', 'ddyulg', 'ddyulm', 'ddyulb', 'ddyuls', 'ddyult', 'ddyulp', 'ddyulh', 'ddyum', 'ddyub', 'ddyubs', 'ddyus', 'ddyuss', 'ddyung', 'ddyuj', 'ddyuc', 'ddyuk', 'ddyut', 'ddyup', 'ddyuh', 'ddeu', 'ddeug', 'ddeugg', 'ddeugs', 'ddeun', 'ddeunj', 'ddeunh', 'ddeud', 'ddeul', 'ddeulg', 'ddeulm', 'ddeulb', 'ddeuls', 'ddeult', 'ddeulp', 'ddeulh', 'ddeum', 'ddeub', 'ddeubs', 'ddeus', 'ddeuss', 'ddeung', 'ddeuj', 'ddeuc', 'ddeuk', 'ddeut', 'ddeup', 'ddeuh', 'ddyi', 'ddyig', 'ddyigg', 'ddyigs', 'ddyin', 'ddyinj', 'ddyinh', 'ddyid', 'ddyil', 'ddyilg', 'ddyilm', 'ddyilb', 'ddyils', 'ddyilt', 'ddyilp', 'ddyilh', 'ddyim', 'ddyib', 'ddyibs', 'ddyis', 'ddyiss', 'ddying', 'ddyij', 'ddyic', 'ddyik', 'ddyit', 'ddyip', 'ddyih', 'ddi', 'ddig', 'ddigg', 'ddigs', 'ddin', 'ddinj', 'ddinh', 'ddid', 'ddil', 'ddilg', 'ddilm', 'ddilb', 'ddils', 'ddilt', 'ddilp', 'ddilh', 'ddim', 'ddib', 'ddibs', 'ddis', 'ddiss', 'dding', 'ddij', 'ddic', 'ddik', 'ddit', 'ddip', 'ddih', 'ra', 'rag', 'ragg', 'rags', 'ran', 'ranj', 'ranh', 'rad', 'ral', 'ralg', 'ralm', 'ralb', 'rals', 'ralt', 'ralp', 'ralh', 'ram', 'rab', 'rabs', 'ras', 'rass', 'rang', 'raj', 'rac', 'rak', 'rat', 'rap', 'rah', 'rae', 'raeg', 'raegg', 'raegs', 'raen', 'raenj', 'raenh', 'raed', 'rael', 'raelg', 'raelm', 'raelb', 'raels', 'raelt', 'raelp', 'raelh', 'raem', 'raeb', 'raebs', 'raes', 'raess', 'raeng', 'raej', 'raec', 'raek', 'raet', 'raep', 'raeh', 'rya', 'ryag', 'ryagg', 'ryags', 'ryan', 'ryanj', 'ryanh', 'ryad', 'ryal', 'ryalg', 'ryalm', 'ryalb', 'ryals', 'ryalt', 'ryalp', 'ryalh', 'ryam', 'ryab', 'ryabs', 'ryas', 'ryass', 'ryang', 'ryaj', 'ryac', 'ryak', 'ryat', 'ryap', 'ryah', 'ryae', 'ryaeg', 'ryaegg', 'ryaegs', 'ryaen', 'ryaenj', 'ryaenh', 'ryaed', 'ryael', 'ryaelg', 'ryaelm', 'ryaelb', 'ryaels', 'ryaelt', 'ryaelp', 'ryaelh', 'ryaem', 'ryaeb', 'ryaebs', 'ryaes', 'ryaess', 'ryaeng', 'ryaej', 'ryaec', 'ryaek', 'ryaet', 'ryaep', 'ryaeh', 'reo', 'reog', 'reogg', 'reogs', 'reon', 'reonj', 'reonh', 'reod', 'reol', 'reolg', 'reolm', 'reolb', 'reols', 'reolt', 'reolp', 'reolh', 'reom', 'reob', 'reobs', 'reos'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b8.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b8.php
new file mode 100644
index 000000000..8afbadcfc
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b8.php
@@ -0,0 +1 @@
+<?php return ['reoss', 'reong', 'reoj', 'reoc', 'reok', 'reot', 'reop', 'reoh', 're', 'reg', 'regg', 'regs', 'ren', 'renj', 'renh', 'red', 'rel', 'relg', 'relm', 'relb', 'rels', 'relt', 'relp', 'relh', 'rem', 'reb', 'rebs', 'res', 'ress', 'reng', 'rej', 'rec', 'rek', 'ret', 'rep', 'reh', 'ryeo', 'ryeog', 'ryeogg', 'ryeogs', 'ryeon', 'ryeonj', 'ryeonh', 'ryeod', 'ryeol', 'ryeolg', 'ryeolm', 'ryeolb', 'ryeols', 'ryeolt', 'ryeolp', 'ryeolh', 'ryeom', 'ryeob', 'ryeobs', 'ryeos', 'ryeoss', 'ryeong', 'ryeoj', 'ryeoc', 'ryeok', 'ryeot', 'ryeop', 'ryeoh', 'rye', 'ryeg', 'ryegg', 'ryegs', 'ryen', 'ryenj', 'ryenh', 'ryed', 'ryel', 'ryelg', 'ryelm', 'ryelb', 'ryels', 'ryelt', 'ryelp', 'ryelh', 'ryem', 'ryeb', 'ryebs', 'ryes', 'ryess', 'ryeng', 'ryej', 'ryec', 'ryek', 'ryet', 'ryep', 'ryeh', 'ro', 'rog', 'rogg', 'rogs', 'ron', 'ronj', 'ronh', 'rod', 'rol', 'rolg', 'rolm', 'rolb', 'rols', 'rolt', 'rolp', 'rolh', 'rom', 'rob', 'robs', 'ros', 'ross', 'rong', 'roj', 'roc', 'rok', 'rot', 'rop', 'roh', 'rwa', 'rwag', 'rwagg', 'rwags', 'rwan', 'rwanj', 'rwanh', 'rwad', 'rwal', 'rwalg', 'rwalm', 'rwalb', 'rwals', 'rwalt', 'rwalp', 'rwalh', 'rwam', 'rwab', 'rwabs', 'rwas', 'rwass', 'rwang', 'rwaj', 'rwac', 'rwak', 'rwat', 'rwap', 'rwah', 'rwae', 'rwaeg', 'rwaegg', 'rwaegs', 'rwaen', 'rwaenj', 'rwaenh', 'rwaed', 'rwael', 'rwaelg', 'rwaelm', 'rwaelb', 'rwaels', 'rwaelt', 'rwaelp', 'rwaelh', 'rwaem', 'rwaeb', 'rwaebs', 'rwaes', 'rwaess', 'rwaeng', 'rwaej', 'rwaec', 'rwaek', 'rwaet', 'rwaep', 'rwaeh', 'roe', 'roeg', 'roegg', 'roegs', 'roen', 'roenj', 'roenh', 'roed', 'roel', 'roelg', 'roelm', 'roelb', 'roels', 'roelt', 'roelp', 'roelh', 'roem', 'roeb', 'roebs', 'roes', 'roess', 'roeng', 'roej', 'roec', 'roek', 'roet', 'roep', 'roeh', 'ryo', 'ryog', 'ryogg', 'ryogs', 'ryon', 'ryonj', 'ryonh', 'ryod', 'ryol', 'ryolg', 'ryolm', 'ryolb', 'ryols', 'ryolt', 'ryolp', 'ryolh', 'ryom', 'ryob', 'ryobs', 'ryos', 'ryoss', 'ryong', 'ryoj', 'ryoc', 'ryok', 'ryot', 'ryop', 'ryoh', 'ru', 'rug', 'rugg', 'rugs', 'run', 'runj', 'runh', 'rud', 'rul', 'rulg', 'rulm', 'rulb', 'ruls', 'rult', 'rulp', 'rulh', 'rum', 'rub', 'rubs', 'rus', 'russ', 'rung', 'ruj', 'ruc'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0b9.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b9.php
new file mode 100644
index 000000000..e5e4b1a9c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0b9.php
@@ -0,0 +1 @@
+<?php return ['ruk', 'rut', 'rup', 'ruh', 'rweo', 'rweog', 'rweogg', 'rweogs', 'rweon', 'rweonj', 'rweonh', 'rweod', 'rweol', 'rweolg', 'rweolm', 'rweolb', 'rweols', 'rweolt', 'rweolp', 'rweolh', 'rweom', 'rweob', 'rweobs', 'rweos', 'rweoss', 'rweong', 'rweoj', 'rweoc', 'rweok', 'rweot', 'rweop', 'rweoh', 'rwe', 'rweg', 'rwegg', 'rwegs', 'rwen', 'rwenj', 'rwenh', 'rwed', 'rwel', 'rwelg', 'rwelm', 'rwelb', 'rwels', 'rwelt', 'rwelp', 'rwelh', 'rwem', 'rweb', 'rwebs', 'rwes', 'rwess', 'rweng', 'rwej', 'rwec', 'rwek', 'rwet', 'rwep', 'rweh', 'rwi', 'rwig', 'rwigg', 'rwigs', 'rwin', 'rwinj', 'rwinh', 'rwid', 'rwil', 'rwilg', 'rwilm', 'rwilb', 'rwils', 'rwilt', 'rwilp', 'rwilh', 'rwim', 'rwib', 'rwibs', 'rwis', 'rwiss', 'rwing', 'rwij', 'rwic', 'rwik', 'rwit', 'rwip', 'rwih', 'ryu', 'ryug', 'ryugg', 'ryugs', 'ryun', 'ryunj', 'ryunh', 'ryud', 'ryul', 'ryulg', 'ryulm', 'ryulb', 'ryuls', 'ryult', 'ryulp', 'ryulh', 'ryum', 'ryub', 'ryubs', 'ryus', 'ryuss', 'ryung', 'ryuj', 'ryuc', 'ryuk', 'ryut', 'ryup', 'ryuh', 'reu', 'reug', 'reugg', 'reugs', 'reun', 'reunj', 'reunh', 'reud', 'reul', 'reulg', 'reulm', 'reulb', 'reuls', 'reult', 'reulp', 'reulh', 'reum', 'reub', 'reubs', 'reus', 'reuss', 'reung', 'reuj', 'reuc', 'reuk', 'reut', 'reup', 'reuh', 'ryi', 'ryig', 'ryigg', 'ryigs', 'ryin', 'ryinj', 'ryinh', 'ryid', 'ryil', 'ryilg', 'ryilm', 'ryilb', 'ryils', 'ryilt', 'ryilp', 'ryilh', 'ryim', 'ryib', 'ryibs', 'ryis', 'ryiss', 'rying', 'ryij', 'ryic', 'ryik', 'ryit', 'ryip', 'ryih', 'ri', 'rig', 'rigg', 'rigs', 'rin', 'rinj', 'rinh', 'rid', 'ril', 'rilg', 'rilm', 'rilb', 'rils', 'rilt', 'rilp', 'rilh', 'rim', 'rib', 'ribs', 'ris', 'riss', 'ring', 'rij', 'ric', 'rik', 'rit', 'rip', 'rih', 'ma', 'mag', 'magg', 'mags', 'man', 'manj', 'manh', 'mad', 'mal', 'malg', 'malm', 'malb', 'mals', 'malt', 'malp', 'malh', 'mam', 'mab', 'mabs', 'mas', 'mass', 'mang', 'maj', 'mac', 'mak', 'mat', 'map', 'mah', 'mae', 'maeg', 'maegg', 'maegs', 'maen', 'maenj', 'maenh', 'maed', 'mael', 'maelg', 'maelm', 'maelb', 'maels', 'maelt', 'maelp', 'maelh', 'maem', 'maeb', 'maebs', 'maes', 'maess', 'maeng', 'maej', 'maec', 'maek', 'maet', 'maep', 'maeh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ba.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ba.php
new file mode 100644
index 000000000..27148dd32
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ba.php
@@ -0,0 +1 @@
+<?php return ['mya', 'myag', 'myagg', 'myags', 'myan', 'myanj', 'myanh', 'myad', 'myal', 'myalg', 'myalm', 'myalb', 'myals', 'myalt', 'myalp', 'myalh', 'myam', 'myab', 'myabs', 'myas', 'myass', 'myang', 'myaj', 'myac', 'myak', 'myat', 'myap', 'myah', 'myae', 'myaeg', 'myaegg', 'myaegs', 'myaen', 'myaenj', 'myaenh', 'myaed', 'myael', 'myaelg', 'myaelm', 'myaelb', 'myaels', 'myaelt', 'myaelp', 'myaelh', 'myaem', 'myaeb', 'myaebs', 'myaes', 'myaess', 'myaeng', 'myaej', 'myaec', 'myaek', 'myaet', 'myaep', 'myaeh', 'meo', 'meog', 'meogg', 'meogs', 'meon', 'meonj', 'meonh', 'meod', 'meol', 'meolg', 'meolm', 'meolb', 'meols', 'meolt', 'meolp', 'meolh', 'meom', 'meob', 'meobs', 'meos', 'meoss', 'meong', 'meoj', 'meoc', 'meok', 'meot', 'meop', 'meoh', 'me', 'meg', 'megg', 'megs', 'men', 'menj', 'menh', 'med', 'mel', 'melg', 'melm', 'melb', 'mels', 'melt', 'melp', 'melh', 'mem', 'meb', 'mebs', 'mes', 'mess', 'meng', 'mej', 'mec', 'mek', 'met', 'mep', 'meh', 'myeo', 'myeog', 'myeogg', 'myeogs', 'myeon', 'myeonj', 'myeonh', 'myeod', 'myeol', 'myeolg', 'myeolm', 'myeolb', 'myeols', 'myeolt', 'myeolp', 'myeolh', 'myeom', 'myeob', 'myeobs', 'myeos', 'myeoss', 'myeong', 'myeoj', 'myeoc', 'myeok', 'myeot', 'myeop', 'myeoh', 'mye', 'myeg', 'myegg', 'myegs', 'myen', 'myenj', 'myenh', 'myed', 'myel', 'myelg', 'myelm', 'myelb', 'myels', 'myelt', 'myelp', 'myelh', 'myem', 'myeb', 'myebs', 'myes', 'myess', 'myeng', 'myej', 'myec', 'myek', 'myet', 'myep', 'myeh', 'mo', 'mog', 'mogg', 'mogs', 'mon', 'monj', 'monh', 'mod', 'mol', 'molg', 'molm', 'molb', 'mols', 'molt', 'molp', 'molh', 'mom', 'mob', 'mobs', 'mos', 'moss', 'mong', 'moj', 'moc', 'mok', 'mot', 'mop', 'moh', 'mwa', 'mwag', 'mwagg', 'mwags', 'mwan', 'mwanj', 'mwanh', 'mwad', 'mwal', 'mwalg', 'mwalm', 'mwalb', 'mwals', 'mwalt', 'mwalp', 'mwalh', 'mwam', 'mwab', 'mwabs', 'mwas', 'mwass', 'mwang', 'mwaj', 'mwac', 'mwak', 'mwat', 'mwap', 'mwah', 'mwae', 'mwaeg', 'mwaegg', 'mwaegs', 'mwaen', 'mwaenj', 'mwaenh', 'mwaed', 'mwael', 'mwaelg', 'mwaelm', 'mwaelb', 'mwaels', 'mwaelt', 'mwaelp', 'mwaelh', 'mwaem', 'mwaeb', 'mwaebs', 'mwaes', 'mwaess', 'mwaeng', 'mwaej', 'mwaec', 'mwaek', 'mwaet', 'mwaep', 'mwaeh', 'moe', 'moeg', 'moegg', 'moegs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0bb.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bb.php
new file mode 100644
index 000000000..f5786e696
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bb.php
@@ -0,0 +1 @@
+<?php return ['moen', 'moenj', 'moenh', 'moed', 'moel', 'moelg', 'moelm', 'moelb', 'moels', 'moelt', 'moelp', 'moelh', 'moem', 'moeb', 'moebs', 'moes', 'moess', 'moeng', 'moej', 'moec', 'moek', 'moet', 'moep', 'moeh', 'myo', 'myog', 'myogg', 'myogs', 'myon', 'myonj', 'myonh', 'myod', 'myol', 'myolg', 'myolm', 'myolb', 'myols', 'myolt', 'myolp', 'myolh', 'myom', 'myob', 'myobs', 'myos', 'myoss', 'myong', 'myoj', 'myoc', 'myok', 'myot', 'myop', 'myoh', 'mu', 'mug', 'mugg', 'mugs', 'mun', 'munj', 'munh', 'mud', 'mul', 'mulg', 'mulm', 'mulb', 'muls', 'mult', 'mulp', 'mulh', 'mum', 'mub', 'mubs', 'mus', 'muss', 'mung', 'muj', 'muc', 'muk', 'mut', 'mup', 'muh', 'mweo', 'mweog', 'mweogg', 'mweogs', 'mweon', 'mweonj', 'mweonh', 'mweod', 'mweol', 'mweolg', 'mweolm', 'mweolb', 'mweols', 'mweolt', 'mweolp', 'mweolh', 'mweom', 'mweob', 'mweobs', 'mweos', 'mweoss', 'mweong', 'mweoj', 'mweoc', 'mweok', 'mweot', 'mweop', 'mweoh', 'mwe', 'mweg', 'mwegg', 'mwegs', 'mwen', 'mwenj', 'mwenh', 'mwed', 'mwel', 'mwelg', 'mwelm', 'mwelb', 'mwels', 'mwelt', 'mwelp', 'mwelh', 'mwem', 'mweb', 'mwebs', 'mwes', 'mwess', 'mweng', 'mwej', 'mwec', 'mwek', 'mwet', 'mwep', 'mweh', 'mwi', 'mwig', 'mwigg', 'mwigs', 'mwin', 'mwinj', 'mwinh', 'mwid', 'mwil', 'mwilg', 'mwilm', 'mwilb', 'mwils', 'mwilt', 'mwilp', 'mwilh', 'mwim', 'mwib', 'mwibs', 'mwis', 'mwiss', 'mwing', 'mwij', 'mwic', 'mwik', 'mwit', 'mwip', 'mwih', 'myu', 'myug', 'myugg', 'myugs', 'myun', 'myunj', 'myunh', 'myud', 'myul', 'myulg', 'myulm', 'myulb', 'myuls', 'myult', 'myulp', 'myulh', 'myum', 'myub', 'myubs', 'myus', 'myuss', 'myung', 'myuj', 'myuc', 'myuk', 'myut', 'myup', 'myuh', 'meu', 'meug', 'meugg', 'meugs', 'meun', 'meunj', 'meunh', 'meud', 'meul', 'meulg', 'meulm', 'meulb', 'meuls', 'meult', 'meulp', 'meulh', 'meum', 'meub', 'meubs', 'meus', 'meuss', 'meung', 'meuj', 'meuc', 'meuk', 'meut', 'meup', 'meuh', 'myi', 'myig', 'myigg', 'myigs', 'myin', 'myinj', 'myinh', 'myid', 'myil', 'myilg', 'myilm', 'myilb', 'myils', 'myilt', 'myilp', 'myilh', 'myim', 'myib', 'myibs', 'myis', 'myiss', 'mying', 'myij', 'myic', 'myik', 'myit', 'myip', 'myih', 'mi', 'mig', 'migg', 'migs', 'min', 'minj', 'minh', 'mid'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0bc.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bc.php
new file mode 100644
index 000000000..d4df6a26a
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bc.php
@@ -0,0 +1 @@
+<?php return ['mil', 'milg', 'milm', 'milb', 'mils', 'milt', 'milp', 'milh', 'mim', 'mib', 'mibs', 'mis', 'miss', 'ming', 'mij', 'mic', 'mik', 'mit', 'mip', 'mih', 'ba', 'bag', 'bagg', 'bags', 'ban', 'banj', 'banh', 'bad', 'bal', 'balg', 'balm', 'balb', 'bals', 'balt', 'balp', 'balh', 'bam', 'bab', 'babs', 'bas', 'bass', 'bang', 'baj', 'bac', 'bak', 'bat', 'bap', 'bah', 'bae', 'baeg', 'baegg', 'baegs', 'baen', 'baenj', 'baenh', 'baed', 'bael', 'baelg', 'baelm', 'baelb', 'baels', 'baelt', 'baelp', 'baelh', 'baem', 'baeb', 'baebs', 'baes', 'baess', 'baeng', 'baej', 'baec', 'baek', 'baet', 'baep', 'baeh', 'bya', 'byag', 'byagg', 'byags', 'byan', 'byanj', 'byanh', 'byad', 'byal', 'byalg', 'byalm', 'byalb', 'byals', 'byalt', 'byalp', 'byalh', 'byam', 'byab', 'byabs', 'byas', 'byass', 'byang', 'byaj', 'byac', 'byak', 'byat', 'byap', 'byah', 'byae', 'byaeg', 'byaegg', 'byaegs', 'byaen', 'byaenj', 'byaenh', 'byaed', 'byael', 'byaelg', 'byaelm', 'byaelb', 'byaels', 'byaelt', 'byaelp', 'byaelh', 'byaem', 'byaeb', 'byaebs', 'byaes', 'byaess', 'byaeng', 'byaej', 'byaec', 'byaek', 'byaet', 'byaep', 'byaeh', 'beo', 'beog', 'beogg', 'beogs', 'beon', 'beonj', 'beonh', 'beod', 'beol', 'beolg', 'beolm', 'beolb', 'beols', 'beolt', 'beolp', 'beolh', 'beom', 'beob', 'beobs', 'beos', 'beoss', 'beong', 'beoj', 'beoc', 'beok', 'beot', 'beop', 'beoh', 'be', 'beg', 'begg', 'begs', 'ben', 'benj', 'benh', 'bed', 'bel', 'belg', 'belm', 'belb', 'bels', 'belt', 'belp', 'belh', 'bem', 'beb', 'bebs', 'bes', 'bess', 'beng', 'bej', 'bec', 'bek', 'bet', 'bep', 'beh', 'byeo', 'byeog', 'byeogg', 'byeogs', 'byeon', 'byeonj', 'byeonh', 'byeod', 'byeol', 'byeolg', 'byeolm', 'byeolb', 'byeols', 'byeolt', 'byeolp', 'byeolh', 'byeom', 'byeob', 'byeobs', 'byeos', 'byeoss', 'byeong', 'byeoj', 'byeoc', 'byeok', 'byeot', 'byeop', 'byeoh', 'bye', 'byeg', 'byegg', 'byegs', 'byen', 'byenj', 'byenh', 'byed', 'byel', 'byelg', 'byelm', 'byelb', 'byels', 'byelt', 'byelp', 'byelh', 'byem', 'byeb', 'byebs', 'byes', 'byess', 'byeng', 'byej', 'byec', 'byek', 'byet', 'byep', 'byeh', 'bo', 'bog', 'bogg', 'bogs', 'bon', 'bonj', 'bonh', 'bod', 'bol', 'bolg', 'bolm', 'bolb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0bd.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bd.php
new file mode 100644
index 000000000..b5f276249
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bd.php
@@ -0,0 +1 @@
+<?php return ['bols', 'bolt', 'bolp', 'bolh', 'bom', 'bob', 'bobs', 'bos', 'boss', 'bong', 'boj', 'boc', 'bok', 'bot', 'bop', 'boh', 'bwa', 'bwag', 'bwagg', 'bwags', 'bwan', 'bwanj', 'bwanh', 'bwad', 'bwal', 'bwalg', 'bwalm', 'bwalb', 'bwals', 'bwalt', 'bwalp', 'bwalh', 'bwam', 'bwab', 'bwabs', 'bwas', 'bwass', 'bwang', 'bwaj', 'bwac', 'bwak', 'bwat', 'bwap', 'bwah', 'bwae', 'bwaeg', 'bwaegg', 'bwaegs', 'bwaen', 'bwaenj', 'bwaenh', 'bwaed', 'bwael', 'bwaelg', 'bwaelm', 'bwaelb', 'bwaels', 'bwaelt', 'bwaelp', 'bwaelh', 'bwaem', 'bwaeb', 'bwaebs', 'bwaes', 'bwaess', 'bwaeng', 'bwaej', 'bwaec', 'bwaek', 'bwaet', 'bwaep', 'bwaeh', 'boe', 'boeg', 'boegg', 'boegs', 'boen', 'boenj', 'boenh', 'boed', 'boel', 'boelg', 'boelm', 'boelb', 'boels', 'boelt', 'boelp', 'boelh', 'boem', 'boeb', 'boebs', 'boes', 'boess', 'boeng', 'boej', 'boec', 'boek', 'boet', 'boep', 'boeh', 'byo', 'byog', 'byogg', 'byogs', 'byon', 'byonj', 'byonh', 'byod', 'byol', 'byolg', 'byolm', 'byolb', 'byols', 'byolt', 'byolp', 'byolh', 'byom', 'byob', 'byobs', 'byos', 'byoss', 'byong', 'byoj', 'byoc', 'byok', 'byot', 'byop', 'byoh', 'bu', 'bug', 'bugg', 'bugs', 'bun', 'bunj', 'bunh', 'bud', 'bul', 'bulg', 'bulm', 'bulb', 'buls', 'bult', 'bulp', 'bulh', 'bum', 'bub', 'bubs', 'bus', 'buss', 'bung', 'buj', 'buc', 'buk', 'but', 'bup', 'buh', 'bweo', 'bweog', 'bweogg', 'bweogs', 'bweon', 'bweonj', 'bweonh', 'bweod', 'bweol', 'bweolg', 'bweolm', 'bweolb', 'bweols', 'bweolt', 'bweolp', 'bweolh', 'bweom', 'bweob', 'bweobs', 'bweos', 'bweoss', 'bweong', 'bweoj', 'bweoc', 'bweok', 'bweot', 'bweop', 'bweoh', 'bwe', 'bweg', 'bwegg', 'bwegs', 'bwen', 'bwenj', 'bwenh', 'bwed', 'bwel', 'bwelg', 'bwelm', 'bwelb', 'bwels', 'bwelt', 'bwelp', 'bwelh', 'bwem', 'bweb', 'bwebs', 'bwes', 'bwess', 'bweng', 'bwej', 'bwec', 'bwek', 'bwet', 'bwep', 'bweh', 'bwi', 'bwig', 'bwigg', 'bwigs', 'bwin', 'bwinj', 'bwinh', 'bwid', 'bwil', 'bwilg', 'bwilm', 'bwilb', 'bwils', 'bwilt', 'bwilp', 'bwilh', 'bwim', 'bwib', 'bwibs', 'bwis', 'bwiss', 'bwing', 'bwij', 'bwic', 'bwik', 'bwit', 'bwip', 'bwih', 'byu', 'byug', 'byugg', 'byugs', 'byun', 'byunj', 'byunh', 'byud', 'byul', 'byulg', 'byulm', 'byulb', 'byuls', 'byult', 'byulp', 'byulh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0be.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0be.php
new file mode 100644
index 000000000..bd68ab0c8
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0be.php
@@ -0,0 +1 @@
+<?php return ['byum', 'byub', 'byubs', 'byus', 'byuss', 'byung', 'byuj', 'byuc', 'byuk', 'byut', 'byup', 'byuh', 'beu', 'beug', 'beugg', 'beugs', 'beun', 'beunj', 'beunh', 'beud', 'beul', 'beulg', 'beulm', 'beulb', 'beuls', 'beult', 'beulp', 'beulh', 'beum', 'beub', 'beubs', 'beus', 'beuss', 'beung', 'beuj', 'beuc', 'beuk', 'beut', 'beup', 'beuh', 'byi', 'byig', 'byigg', 'byigs', 'byin', 'byinj', 'byinh', 'byid', 'byil', 'byilg', 'byilm', 'byilb', 'byils', 'byilt', 'byilp', 'byilh', 'byim', 'byib', 'byibs', 'byis', 'byiss', 'bying', 'byij', 'byic', 'byik', 'byit', 'byip', 'byih', 'bi', 'big', 'bigg', 'bigs', 'bin', 'binj', 'binh', 'bid', 'bil', 'bilg', 'bilm', 'bilb', 'bils', 'bilt', 'bilp', 'bilh', 'bim', 'bib', 'bibs', 'bis', 'biss', 'bing', 'bij', 'bic', 'bik', 'bit', 'bip', 'bih', 'bba', 'bbag', 'bbagg', 'bbags', 'bban', 'bbanj', 'bbanh', 'bbad', 'bbal', 'bbalg', 'bbalm', 'bbalb', 'bbals', 'bbalt', 'bbalp', 'bbalh', 'bbam', 'bbab', 'bbabs', 'bbas', 'bbass', 'bbang', 'bbaj', 'bbac', 'bbak', 'bbat', 'bbap', 'bbah', 'bbae', 'bbaeg', 'bbaegg', 'bbaegs', 'bbaen', 'bbaenj', 'bbaenh', 'bbaed', 'bbael', 'bbaelg', 'bbaelm', 'bbaelb', 'bbaels', 'bbaelt', 'bbaelp', 'bbaelh', 'bbaem', 'bbaeb', 'bbaebs', 'bbaes', 'bbaess', 'bbaeng', 'bbaej', 'bbaec', 'bbaek', 'bbaet', 'bbaep', 'bbaeh', 'bbya', 'bbyag', 'bbyagg', 'bbyags', 'bbyan', 'bbyanj', 'bbyanh', 'bbyad', 'bbyal', 'bbyalg', 'bbyalm', 'bbyalb', 'bbyals', 'bbyalt', 'bbyalp', 'bbyalh', 'bbyam', 'bbyab', 'bbyabs', 'bbyas', 'bbyass', 'bbyang', 'bbyaj', 'bbyac', 'bbyak', 'bbyat', 'bbyap', 'bbyah', 'bbyae', 'bbyaeg', 'bbyaegg', 'bbyaegs', 'bbyaen', 'bbyaenj', 'bbyaenh', 'bbyaed', 'bbyael', 'bbyaelg', 'bbyaelm', 'bbyaelb', 'bbyaels', 'bbyaelt', 'bbyaelp', 'bbyaelh', 'bbyaem', 'bbyaeb', 'bbyaebs', 'bbyaes', 'bbyaess', 'bbyaeng', 'bbyaej', 'bbyaec', 'bbyaek', 'bbyaet', 'bbyaep', 'bbyaeh', 'bbeo', 'bbeog', 'bbeogg', 'bbeogs', 'bbeon', 'bbeonj', 'bbeonh', 'bbeod', 'bbeol', 'bbeolg', 'bbeolm', 'bbeolb', 'bbeols', 'bbeolt', 'bbeolp', 'bbeolh', 'bbeom', 'bbeob', 'bbeobs', 'bbeos', 'bbeoss', 'bbeong', 'bbeoj', 'bbeoc', 'bbeok', 'bbeot', 'bbeop', 'bbeoh', 'bbe', 'bbeg', 'bbegg', 'bbegs', 'bben', 'bbenj', 'bbenh', 'bbed', 'bbel', 'bbelg', 'bbelm', 'bbelb', 'bbels', 'bbelt', 'bbelp', 'bbelh', 'bbem', 'bbeb', 'bbebs', 'bbes'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0bf.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bf.php
new file mode 100644
index 000000000..ddca88e70
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0bf.php
@@ -0,0 +1 @@
+<?php return ['bbess', 'bbeng', 'bbej', 'bbec', 'bbek', 'bbet', 'bbep', 'bbeh', 'bbyeo', 'bbyeog', 'bbyeogg', 'bbyeogs', 'bbyeon', 'bbyeonj', 'bbyeonh', 'bbyeod', 'bbyeol', 'bbyeolg', 'bbyeolm', 'bbyeolb', 'bbyeols', 'bbyeolt', 'bbyeolp', 'bbyeolh', 'bbyeom', 'bbyeob', 'bbyeobs', 'bbyeos', 'bbyeoss', 'bbyeong', 'bbyeoj', 'bbyeoc', 'bbyeok', 'bbyeot', 'bbyeop', 'bbyeoh', 'bbye', 'bbyeg', 'bbyegg', 'bbyegs', 'bbyen', 'bbyenj', 'bbyenh', 'bbyed', 'bbyel', 'bbyelg', 'bbyelm', 'bbyelb', 'bbyels', 'bbyelt', 'bbyelp', 'bbyelh', 'bbyem', 'bbyeb', 'bbyebs', 'bbyes', 'bbyess', 'bbyeng', 'bbyej', 'bbyec', 'bbyek', 'bbyet', 'bbyep', 'bbyeh', 'bbo', 'bbog', 'bbogg', 'bbogs', 'bbon', 'bbonj', 'bbonh', 'bbod', 'bbol', 'bbolg', 'bbolm', 'bbolb', 'bbols', 'bbolt', 'bbolp', 'bbolh', 'bbom', 'bbob', 'bbobs', 'bbos', 'bboss', 'bbong', 'bboj', 'bboc', 'bbok', 'bbot', 'bbop', 'bboh', 'bbwa', 'bbwag', 'bbwagg', 'bbwags', 'bbwan', 'bbwanj', 'bbwanh', 'bbwad', 'bbwal', 'bbwalg', 'bbwalm', 'bbwalb', 'bbwals', 'bbwalt', 'bbwalp', 'bbwalh', 'bbwam', 'bbwab', 'bbwabs', 'bbwas', 'bbwass', 'bbwang', 'bbwaj', 'bbwac', 'bbwak', 'bbwat', 'bbwap', 'bbwah', 'bbwae', 'bbwaeg', 'bbwaegg', 'bbwaegs', 'bbwaen', 'bbwaenj', 'bbwaenh', 'bbwaed', 'bbwael', 'bbwaelg', 'bbwaelm', 'bbwaelb', 'bbwaels', 'bbwaelt', 'bbwaelp', 'bbwaelh', 'bbwaem', 'bbwaeb', 'bbwaebs', 'bbwaes', 'bbwaess', 'bbwaeng', 'bbwaej', 'bbwaec', 'bbwaek', 'bbwaet', 'bbwaep', 'bbwaeh', 'bboe', 'bboeg', 'bboegg', 'bboegs', 'bboen', 'bboenj', 'bboenh', 'bboed', 'bboel', 'bboelg', 'bboelm', 'bboelb', 'bboels', 'bboelt', 'bboelp', 'bboelh', 'bboem', 'bboeb', 'bboebs', 'bboes', 'bboess', 'bboeng', 'bboej', 'bboec', 'bboek', 'bboet', 'bboep', 'bboeh', 'bbyo', 'bbyog', 'bbyogg', 'bbyogs', 'bbyon', 'bbyonj', 'bbyonh', 'bbyod', 'bbyol', 'bbyolg', 'bbyolm', 'bbyolb', 'bbyols', 'bbyolt', 'bbyolp', 'bbyolh', 'bbyom', 'bbyob', 'bbyobs', 'bbyos', 'bbyoss', 'bbyong', 'bbyoj', 'bbyoc', 'bbyok', 'bbyot', 'bbyop', 'bbyoh', 'bbu', 'bbug', 'bbugg', 'bbugs', 'bbun', 'bbunj', 'bbunh', 'bbud', 'bbul', 'bbulg', 'bbulm', 'bbulb', 'bbuls', 'bbult', 'bbulp', 'bbulh', 'bbum', 'bbub', 'bbubs', 'bbus', 'bbuss', 'bbung', 'bbuj', 'bbuc', 'bbuk', 'bbut', 'bbup', 'bbuh', 'bbweo', 'bbweog', 'bbweogg', 'bbweogs', 'bbweon', 'bbweonj', 'bbweonh', 'bbweod', 'bbweol', 'bbweolg', 'bbweolm', 'bbweolb', 'bbweols', 'bbweolt', 'bbweolp', 'bbweolh', 'bbweom', 'bbweob', 'bbweobs', 'bbweos', 'bbweoss', 'bbweong', 'bbweoj', 'bbweoc'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c0.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c0.php
new file mode 100644
index 000000000..c664e3e93
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c0.php
@@ -0,0 +1 @@
+<?php return ['bbweok', 'bbweot', 'bbweop', 'bbweoh', 'bbwe', 'bbweg', 'bbwegg', 'bbwegs', 'bbwen', 'bbwenj', 'bbwenh', 'bbwed', 'bbwel', 'bbwelg', 'bbwelm', 'bbwelb', 'bbwels', 'bbwelt', 'bbwelp', 'bbwelh', 'bbwem', 'bbweb', 'bbwebs', 'bbwes', 'bbwess', 'bbweng', 'bbwej', 'bbwec', 'bbwek', 'bbwet', 'bbwep', 'bbweh', 'bbwi', 'bbwig', 'bbwigg', 'bbwigs', 'bbwin', 'bbwinj', 'bbwinh', 'bbwid', 'bbwil', 'bbwilg', 'bbwilm', 'bbwilb', 'bbwils', 'bbwilt', 'bbwilp', 'bbwilh', 'bbwim', 'bbwib', 'bbwibs', 'bbwis', 'bbwiss', 'bbwing', 'bbwij', 'bbwic', 'bbwik', 'bbwit', 'bbwip', 'bbwih', 'bbyu', 'bbyug', 'bbyugg', 'bbyugs', 'bbyun', 'bbyunj', 'bbyunh', 'bbyud', 'bbyul', 'bbyulg', 'bbyulm', 'bbyulb', 'bbyuls', 'bbyult', 'bbyulp', 'bbyulh', 'bbyum', 'bbyub', 'bbyubs', 'bbyus', 'bbyuss', 'bbyung', 'bbyuj', 'bbyuc', 'bbyuk', 'bbyut', 'bbyup', 'bbyuh', 'bbeu', 'bbeug', 'bbeugg', 'bbeugs', 'bbeun', 'bbeunj', 'bbeunh', 'bbeud', 'bbeul', 'bbeulg', 'bbeulm', 'bbeulb', 'bbeuls', 'bbeult', 'bbeulp', 'bbeulh', 'bbeum', 'bbeub', 'bbeubs', 'bbeus', 'bbeuss', 'bbeung', 'bbeuj', 'bbeuc', 'bbeuk', 'bbeut', 'bbeup', 'bbeuh', 'bbyi', 'bbyig', 'bbyigg', 'bbyigs', 'bbyin', 'bbyinj', 'bbyinh', 'bbyid', 'bbyil', 'bbyilg', 'bbyilm', 'bbyilb', 'bbyils', 'bbyilt', 'bbyilp', 'bbyilh', 'bbyim', 'bbyib', 'bbyibs', 'bbyis', 'bbyiss', 'bbying', 'bbyij', 'bbyic', 'bbyik', 'bbyit', 'bbyip', 'bbyih', 'bbi', 'bbig', 'bbigg', 'bbigs', 'bbin', 'bbinj', 'bbinh', 'bbid', 'bbil', 'bbilg', 'bbilm', 'bbilb', 'bbils', 'bbilt', 'bbilp', 'bbilh', 'bbim', 'bbib', 'bbibs', 'bbis', 'bbiss', 'bbing', 'bbij', 'bbic', 'bbik', 'bbit', 'bbip', 'bbih', 'sa', 'sag', 'sagg', 'sags', 'san', 'sanj', 'sanh', 'sad', 'sal', 'salg', 'salm', 'salb', 'sals', 'salt', 'salp', 'salh', 'sam', 'sab', 'sabs', 'sas', 'sass', 'sang', 'saj', 'sac', 'sak', 'sat', 'sap', 'sah', 'sae', 'saeg', 'saegg', 'saegs', 'saen', 'saenj', 'saenh', 'saed', 'sael', 'saelg', 'saelm', 'saelb', 'saels', 'saelt', 'saelp', 'saelh', 'saem', 'saeb', 'saebs', 'saes', 'saess', 'saeng', 'saej', 'saec', 'saek', 'saet', 'saep', 'saeh', 'sya', 'syag', 'syagg', 'syags', 'syan', 'syanj', 'syanh', 'syad', 'syal', 'syalg', 'syalm', 'syalb', 'syals', 'syalt', 'syalp', 'syalh', 'syam', 'syab', 'syabs', 'syas', 'syass', 'syang', 'syaj', 'syac', 'syak', 'syat', 'syap', 'syah'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c1.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c1.php
new file mode 100644
index 000000000..03bf4afec
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c1.php
@@ -0,0 +1 @@
+<?php return ['syae', 'syaeg', 'syaegg', 'syaegs', 'syaen', 'syaenj', 'syaenh', 'syaed', 'syael', 'syaelg', 'syaelm', 'syaelb', 'syaels', 'syaelt', 'syaelp', 'syaelh', 'syaem', 'syaeb', 'syaebs', 'syaes', 'syaess', 'syaeng', 'syaej', 'syaec', 'syaek', 'syaet', 'syaep', 'syaeh', 'seo', 'seog', 'seogg', 'seogs', 'seon', 'seonj', 'seonh', 'seod', 'seol', 'seolg', 'seolm', 'seolb', 'seols', 'seolt', 'seolp', 'seolh', 'seom', 'seob', 'seobs', 'seos', 'seoss', 'seong', 'seoj', 'seoc', 'seok', 'seot', 'seop', 'seoh', 'se', 'seg', 'segg', 'segs', 'sen', 'senj', 'senh', 'sed', 'sel', 'selg', 'selm', 'selb', 'sels', 'selt', 'selp', 'selh', 'sem', 'seb', 'sebs', 'ses', 'sess', 'seng', 'sej', 'sec', 'sek', 'set', 'sep', 'seh', 'syeo', 'syeog', 'syeogg', 'syeogs', 'syeon', 'syeonj', 'syeonh', 'syeod', 'syeol', 'syeolg', 'syeolm', 'syeolb', 'syeols', 'syeolt', 'syeolp', 'syeolh', 'syeom', 'syeob', 'syeobs', 'syeos', 'syeoss', 'syeong', 'syeoj', 'syeoc', 'syeok', 'syeot', 'syeop', 'syeoh', 'sye', 'syeg', 'syegg', 'syegs', 'syen', 'syenj', 'syenh', 'syed', 'syel', 'syelg', 'syelm', 'syelb', 'syels', 'syelt', 'syelp', 'syelh', 'syem', 'syeb', 'syebs', 'syes', 'syess', 'syeng', 'syej', 'syec', 'syek', 'syet', 'syep', 'syeh', 'so', 'sog', 'sogg', 'sogs', 'son', 'sonj', 'sonh', 'sod', 'sol', 'solg', 'solm', 'solb', 'sols', 'solt', 'solp', 'solh', 'som', 'sob', 'sobs', 'sos', 'soss', 'song', 'soj', 'soc', 'sok', 'sot', 'sop', 'soh', 'swa', 'swag', 'swagg', 'swags', 'swan', 'swanj', 'swanh', 'swad', 'swal', 'swalg', 'swalm', 'swalb', 'swals', 'swalt', 'swalp', 'swalh', 'swam', 'swab', 'swabs', 'swas', 'swass', 'swang', 'swaj', 'swac', 'swak', 'swat', 'swap', 'swah', 'swae', 'swaeg', 'swaegg', 'swaegs', 'swaen', 'swaenj', 'swaenh', 'swaed', 'swael', 'swaelg', 'swaelm', 'swaelb', 'swaels', 'swaelt', 'swaelp', 'swaelh', 'swaem', 'swaeb', 'swaebs', 'swaes', 'swaess', 'swaeng', 'swaej', 'swaec', 'swaek', 'swaet', 'swaep', 'swaeh', 'soe', 'soeg', 'soegg', 'soegs', 'soen', 'soenj', 'soenh', 'soed', 'soel', 'soelg', 'soelm', 'soelb', 'soels', 'soelt', 'soelp', 'soelh', 'soem', 'soeb', 'soebs', 'soes', 'soess', 'soeng', 'soej', 'soec', 'soek', 'soet', 'soep', 'soeh', 'syo', 'syog', 'syogg', 'syogs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c2.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c2.php
new file mode 100644
index 000000000..5d87b6d23
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c2.php
@@ -0,0 +1 @@
+<?php return ['syon', 'syonj', 'syonh', 'syod', 'syol', 'syolg', 'syolm', 'syolb', 'syols', 'syolt', 'syolp', 'syolh', 'syom', 'syob', 'syobs', 'syos', 'syoss', 'syong', 'syoj', 'syoc', 'syok', 'syot', 'syop', 'syoh', 'su', 'sug', 'sugg', 'sugs', 'sun', 'sunj', 'sunh', 'sud', 'sul', 'sulg', 'sulm', 'sulb', 'suls', 'sult', 'sulp', 'sulh', 'sum', 'sub', 'subs', 'sus', 'suss', 'sung', 'suj', 'suc', 'suk', 'sut', 'sup', 'suh', 'sweo', 'sweog', 'sweogg', 'sweogs', 'sweon', 'sweonj', 'sweonh', 'sweod', 'sweol', 'sweolg', 'sweolm', 'sweolb', 'sweols', 'sweolt', 'sweolp', 'sweolh', 'sweom', 'sweob', 'sweobs', 'sweos', 'sweoss', 'sweong', 'sweoj', 'sweoc', 'sweok', 'sweot', 'sweop', 'sweoh', 'swe', 'sweg', 'swegg', 'swegs', 'swen', 'swenj', 'swenh', 'swed', 'swel', 'swelg', 'swelm', 'swelb', 'swels', 'swelt', 'swelp', 'swelh', 'swem', 'sweb', 'swebs', 'swes', 'swess', 'sweng', 'swej', 'swec', 'swek', 'swet', 'swep', 'sweh', 'swi', 'swig', 'swigg', 'swigs', 'swin', 'swinj', 'swinh', 'swid', 'swil', 'swilg', 'swilm', 'swilb', 'swils', 'swilt', 'swilp', 'swilh', 'swim', 'swib', 'swibs', 'swis', 'swiss', 'swing', 'swij', 'swic', 'swik', 'swit', 'swip', 'swih', 'syu', 'syug', 'syugg', 'syugs', 'syun', 'syunj', 'syunh', 'syud', 'syul', 'syulg', 'syulm', 'syulb', 'syuls', 'syult', 'syulp', 'syulh', 'syum', 'syub', 'syubs', 'syus', 'syuss', 'syung', 'syuj', 'syuc', 'syuk', 'syut', 'syup', 'syuh', 'seu', 'seug', 'seugg', 'seugs', 'seun', 'seunj', 'seunh', 'seud', 'seul', 'seulg', 'seulm', 'seulb', 'seuls', 'seult', 'seulp', 'seulh', 'seum', 'seub', 'seubs', 'seus', 'seuss', 'seung', 'seuj', 'seuc', 'seuk', 'seut', 'seup', 'seuh', 'syi', 'syig', 'syigg', 'syigs', 'syin', 'syinj', 'syinh', 'syid', 'syil', 'syilg', 'syilm', 'syilb', 'syils', 'syilt', 'syilp', 'syilh', 'syim', 'syib', 'syibs', 'syis', 'syiss', 'sying', 'syij', 'syic', 'syik', 'syit', 'syip', 'syih', 'si', 'sig', 'sigg', 'sigs', 'sin', 'sinj', 'sinh', 'sid', 'sil', 'silg', 'silm', 'silb', 'sils', 'silt', 'silp', 'silh', 'sim', 'sib', 'sibs', 'sis', 'siss', 'sing', 'sij', 'sic', 'sik', 'sit', 'sip', 'sih', 'ssa', 'ssag', 'ssagg', 'ssags', 'ssan', 'ssanj', 'ssanh', 'ssad'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c3.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c3.php
new file mode 100644
index 000000000..d038f56d5
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c3.php
@@ -0,0 +1 @@
+<?php return ['ssal', 'ssalg', 'ssalm', 'ssalb', 'ssals', 'ssalt', 'ssalp', 'ssalh', 'ssam', 'ssab', 'ssabs', 'ssas', 'ssass', 'ssang', 'ssaj', 'ssac', 'ssak', 'ssat', 'ssap', 'ssah', 'ssae', 'ssaeg', 'ssaegg', 'ssaegs', 'ssaen', 'ssaenj', 'ssaenh', 'ssaed', 'ssael', 'ssaelg', 'ssaelm', 'ssaelb', 'ssaels', 'ssaelt', 'ssaelp', 'ssaelh', 'ssaem', 'ssaeb', 'ssaebs', 'ssaes', 'ssaess', 'ssaeng', 'ssaej', 'ssaec', 'ssaek', 'ssaet', 'ssaep', 'ssaeh', 'ssya', 'ssyag', 'ssyagg', 'ssyags', 'ssyan', 'ssyanj', 'ssyanh', 'ssyad', 'ssyal', 'ssyalg', 'ssyalm', 'ssyalb', 'ssyals', 'ssyalt', 'ssyalp', 'ssyalh', 'ssyam', 'ssyab', 'ssyabs', 'ssyas', 'ssyass', 'ssyang', 'ssyaj', 'ssyac', 'ssyak', 'ssyat', 'ssyap', 'ssyah', 'ssyae', 'ssyaeg', 'ssyaegg', 'ssyaegs', 'ssyaen', 'ssyaenj', 'ssyaenh', 'ssyaed', 'ssyael', 'ssyaelg', 'ssyaelm', 'ssyaelb', 'ssyaels', 'ssyaelt', 'ssyaelp', 'ssyaelh', 'ssyaem', 'ssyaeb', 'ssyaebs', 'ssyaes', 'ssyaess', 'ssyaeng', 'ssyaej', 'ssyaec', 'ssyaek', 'ssyaet', 'ssyaep', 'ssyaeh', 'sseo', 'sseog', 'sseogg', 'sseogs', 'sseon', 'sseonj', 'sseonh', 'sseod', 'sseol', 'sseolg', 'sseolm', 'sseolb', 'sseols', 'sseolt', 'sseolp', 'sseolh', 'sseom', 'sseob', 'sseobs', 'sseos', 'sseoss', 'sseong', 'sseoj', 'sseoc', 'sseok', 'sseot', 'sseop', 'sseoh', 'sse', 'sseg', 'ssegg', 'ssegs', 'ssen', 'ssenj', 'ssenh', 'ssed', 'ssel', 'sselg', 'sselm', 'sselb', 'ssels', 'sselt', 'sselp', 'sselh', 'ssem', 'sseb', 'ssebs', 'sses', 'ssess', 'sseng', 'ssej', 'ssec', 'ssek', 'sset', 'ssep', 'sseh', 'ssyeo', 'ssyeog', 'ssyeogg', 'ssyeogs', 'ssyeon', 'ssyeonj', 'ssyeonh', 'ssyeod', 'ssyeol', 'ssyeolg', 'ssyeolm', 'ssyeolb', 'ssyeols', 'ssyeolt', 'ssyeolp', 'ssyeolh', 'ssyeom', 'ssyeob', 'ssyeobs', 'ssyeos', 'ssyeoss', 'ssyeong', 'ssyeoj', 'ssyeoc', 'ssyeok', 'ssyeot', 'ssyeop', 'ssyeoh', 'ssye', 'ssyeg', 'ssyegg', 'ssyegs', 'ssyen', 'ssyenj', 'ssyenh', 'ssyed', 'ssyel', 'ssyelg', 'ssyelm', 'ssyelb', 'ssyels', 'ssyelt', 'ssyelp', 'ssyelh', 'ssyem', 'ssyeb', 'ssyebs', 'ssyes', 'ssyess', 'ssyeng', 'ssyej', 'ssyec', 'ssyek', 'ssyet', 'ssyep', 'ssyeh', 'sso', 'ssog', 'ssogg', 'ssogs', 'sson', 'ssonj', 'ssonh', 'ssod', 'ssol', 'ssolg', 'ssolm', 'ssolb', 'ssols', 'ssolt', 'ssolp', 'ssolh', 'ssom', 'ssob', 'ssobs', 'ssos', 'ssoss', 'ssong', 'ssoj', 'ssoc', 'ssok', 'ssot', 'ssop', 'ssoh', 'sswa', 'sswag', 'sswagg', 'sswags', 'sswan', 'sswanj', 'sswanh', 'sswad', 'sswal', 'sswalg', 'sswalm', 'sswalb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c4.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c4.php
new file mode 100644
index 000000000..e23434184
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c4.php
@@ -0,0 +1 @@
+<?php return ['sswals', 'sswalt', 'sswalp', 'sswalh', 'sswam', 'sswab', 'sswabs', 'sswas', 'sswass', 'sswang', 'sswaj', 'sswac', 'sswak', 'sswat', 'sswap', 'sswah', 'sswae', 'sswaeg', 'sswaegg', 'sswaegs', 'sswaen', 'sswaenj', 'sswaenh', 'sswaed', 'sswael', 'sswaelg', 'sswaelm', 'sswaelb', 'sswaels', 'sswaelt', 'sswaelp', 'sswaelh', 'sswaem', 'sswaeb', 'sswaebs', 'sswaes', 'sswaess', 'sswaeng', 'sswaej', 'sswaec', 'sswaek', 'sswaet', 'sswaep', 'sswaeh', 'ssoe', 'ssoeg', 'ssoegg', 'ssoegs', 'ssoen', 'ssoenj', 'ssoenh', 'ssoed', 'ssoel', 'ssoelg', 'ssoelm', 'ssoelb', 'ssoels', 'ssoelt', 'ssoelp', 'ssoelh', 'ssoem', 'ssoeb', 'ssoebs', 'ssoes', 'ssoess', 'ssoeng', 'ssoej', 'ssoec', 'ssoek', 'ssoet', 'ssoep', 'ssoeh', 'ssyo', 'ssyog', 'ssyogg', 'ssyogs', 'ssyon', 'ssyonj', 'ssyonh', 'ssyod', 'ssyol', 'ssyolg', 'ssyolm', 'ssyolb', 'ssyols', 'ssyolt', 'ssyolp', 'ssyolh', 'ssyom', 'ssyob', 'ssyobs', 'ssyos', 'ssyoss', 'ssyong', 'ssyoj', 'ssyoc', 'ssyok', 'ssyot', 'ssyop', 'ssyoh', 'ssu', 'ssug', 'ssugg', 'ssugs', 'ssun', 'ssunj', 'ssunh', 'ssud', 'ssul', 'ssulg', 'ssulm', 'ssulb', 'ssuls', 'ssult', 'ssulp', 'ssulh', 'ssum', 'ssub', 'ssubs', 'ssus', 'ssuss', 'ssung', 'ssuj', 'ssuc', 'ssuk', 'ssut', 'ssup', 'ssuh', 'ssweo', 'ssweog', 'ssweogg', 'ssweogs', 'ssweon', 'ssweonj', 'ssweonh', 'ssweod', 'ssweol', 'ssweolg', 'ssweolm', 'ssweolb', 'ssweols', 'ssweolt', 'ssweolp', 'ssweolh', 'ssweom', 'ssweob', 'ssweobs', 'ssweos', 'ssweoss', 'ssweong', 'ssweoj', 'ssweoc', 'ssweok', 'ssweot', 'ssweop', 'ssweoh', 'sswe', 'ssweg', 'sswegg', 'sswegs', 'sswen', 'sswenj', 'sswenh', 'sswed', 'sswel', 'sswelg', 'sswelm', 'sswelb', 'sswels', 'sswelt', 'sswelp', 'sswelh', 'sswem', 'ssweb', 'sswebs', 'sswes', 'sswess', 'ssweng', 'sswej', 'sswec', 'sswek', 'sswet', 'sswep', 'ssweh', 'sswi', 'sswig', 'sswigg', 'sswigs', 'sswin', 'sswinj', 'sswinh', 'sswid', 'sswil', 'sswilg', 'sswilm', 'sswilb', 'sswils', 'sswilt', 'sswilp', 'sswilh', 'sswim', 'sswib', 'sswibs', 'sswis', 'sswiss', 'sswing', 'sswij', 'sswic', 'sswik', 'sswit', 'sswip', 'sswih', 'ssyu', 'ssyug', 'ssyugg', 'ssyugs', 'ssyun', 'ssyunj', 'ssyunh', 'ssyud', 'ssyul', 'ssyulg', 'ssyulm', 'ssyulb', 'ssyuls', 'ssyult', 'ssyulp', 'ssyulh', 'ssyum', 'ssyub', 'ssyubs', 'ssyus', 'ssyuss', 'ssyung', 'ssyuj', 'ssyuc', 'ssyuk', 'ssyut', 'ssyup', 'ssyuh', 'sseu', 'sseug', 'sseugg', 'sseugs', 'sseun', 'sseunj', 'sseunh', 'sseud', 'sseul', 'sseulg', 'sseulm', 'sseulb', 'sseuls', 'sseult', 'sseulp', 'sseulh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c5.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c5.php
new file mode 100644
index 000000000..90c8fbd23
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c5.php
@@ -0,0 +1 @@
+<?php return ['sseum', 'sseub', 'sseubs', 'sseus', 'sseuss', 'sseung', 'sseuj', 'sseuc', 'sseuk', 'sseut', 'sseup', 'sseuh', 'ssyi', 'ssyig', 'ssyigg', 'ssyigs', 'ssyin', 'ssyinj', 'ssyinh', 'ssyid', 'ssyil', 'ssyilg', 'ssyilm', 'ssyilb', 'ssyils', 'ssyilt', 'ssyilp', 'ssyilh', 'ssyim', 'ssyib', 'ssyibs', 'ssyis', 'ssyiss', 'ssying', 'ssyij', 'ssyic', 'ssyik', 'ssyit', 'ssyip', 'ssyih', 'ssi', 'ssig', 'ssigg', 'ssigs', 'ssin', 'ssinj', 'ssinh', 'ssid', 'ssil', 'ssilg', 'ssilm', 'ssilb', 'ssils', 'ssilt', 'ssilp', 'ssilh', 'ssim', 'ssib', 'ssibs', 'ssis', 'ssiss', 'ssing', 'ssij', 'ssic', 'ssik', 'ssit', 'ssip', 'ssih', 'a', 'ag', 'agg', 'ags', 'an', 'anj', 'anh', 'ad', 'al', 'alg', 'alm', 'alb', 'als', 'alt', 'alp', 'alh', 'am', 'ab', 'abs', 'as', 'ass', 'ang', 'aj', 'ac', 'ak', 'at', 'ap', 'ah', 'ae', 'aeg', 'aegg', 'aegs', 'aen', 'aenj', 'aenh', 'aed', 'ael', 'aelg', 'aelm', 'aelb', 'aels', 'aelt', 'aelp', 'aelh', 'aem', 'aeb', 'aebs', 'aes', 'aess', 'aeng', 'aej', 'aec', 'aek', 'aet', 'aep', 'aeh', 'ya', 'yag', 'yagg', 'yags', 'yan', 'yanj', 'yanh', 'yad', 'yal', 'yalg', 'yalm', 'yalb', 'yals', 'yalt', 'yalp', 'yalh', 'yam', 'yab', 'yabs', 'yas', 'yass', 'yang', 'yaj', 'yac', 'yak', 'yat', 'yap', 'yah', 'yae', 'yaeg', 'yaegg', 'yaegs', 'yaen', 'yaenj', 'yaenh', 'yaed', 'yael', 'yaelg', 'yaelm', 'yaelb', 'yaels', 'yaelt', 'yaelp', 'yaelh', 'yaem', 'yaeb', 'yaebs', 'yaes', 'yaess', 'yaeng', 'yaej', 'yaec', 'yaek', 'yaet', 'yaep', 'yaeh', 'eo', 'eog', 'eogg', 'eogs', 'eon', 'eonj', 'eonh', 'eod', 'eol', 'eolg', 'eolm', 'eolb', 'eols', 'eolt', 'eolp', 'eolh', 'eom', 'eob', 'eobs', 'eos', 'eoss', 'eong', 'eoj', 'eoc', 'eok', 'eot', 'eop', 'eoh', 'e', 'eg', 'egg', 'egs', 'en', 'enj', 'enh', 'ed', 'el', 'elg', 'elm', 'elb', 'els', 'elt', 'elp', 'elh', 'em', 'eb', 'ebs', 'es', 'ess', 'eng', 'ej', 'ec', 'ek', 'et', 'ep', 'eh', 'yeo', 'yeog', 'yeogg', 'yeogs', 'yeon', 'yeonj', 'yeonh', 'yeod', 'yeol', 'yeolg', 'yeolm', 'yeolb', 'yeols', 'yeolt', 'yeolp', 'yeolh', 'yeom', 'yeob', 'yeobs', 'yeos'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c6.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c6.php
new file mode 100644
index 000000000..5e5993aaf
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c6.php
@@ -0,0 +1 @@
+<?php return ['yeoss', 'yeong', 'yeoj', 'yeoc', 'yeok', 'yeot', 'yeop', 'yeoh', 'ye', 'yeg', 'yegg', 'yegs', 'yen', 'yenj', 'yenh', 'yed', 'yel', 'yelg', 'yelm', 'yelb', 'yels', 'yelt', 'yelp', 'yelh', 'yem', 'yeb', 'yebs', 'yes', 'yess', 'yeng', 'yej', 'yec', 'yek', 'yet', 'yep', 'yeh', 'o', 'og', 'ogg', 'ogs', 'on', 'onj', 'onh', 'od', 'ol', 'olg', 'olm', 'olb', 'ols', 'olt', 'olp', 'olh', 'om', 'ob', 'obs', 'os', 'oss', 'ong', 'oj', 'oc', 'ok', 'ot', 'op', 'oh', 'wa', 'wag', 'wagg', 'wags', 'wan', 'wanj', 'wanh', 'wad', 'wal', 'walg', 'walm', 'walb', 'wals', 'walt', 'walp', 'walh', 'wam', 'wab', 'wabs', 'was', 'wass', 'wang', 'waj', 'wac', 'wak', 'wat', 'wap', 'wah', 'wae', 'waeg', 'waegg', 'waegs', 'waen', 'waenj', 'waenh', 'waed', 'wael', 'waelg', 'waelm', 'waelb', 'waels', 'waelt', 'waelp', 'waelh', 'waem', 'waeb', 'waebs', 'waes', 'waess', 'waeng', 'waej', 'waec', 'waek', 'waet', 'waep', 'waeh', 'oe', 'oeg', 'oegg', 'oegs', 'oen', 'oenj', 'oenh', 'oed', 'oel', 'oelg', 'oelm', 'oelb', 'oels', 'oelt', 'oelp', 'oelh', 'oem', 'oeb', 'oebs', 'oes', 'oess', 'oeng', 'oej', 'oec', 'oek', 'oet', 'oep', 'oeh', 'yo', 'yog', 'yogg', 'yogs', 'yon', 'yonj', 'yonh', 'yod', 'yol', 'yolg', 'yolm', 'yolb', 'yols', 'yolt', 'yolp', 'yolh', 'yom', 'yob', 'yobs', 'yos', 'yoss', 'yong', 'yoj', 'yoc', 'yok', 'yot', 'yop', 'yoh', 'u', 'ug', 'ugg', 'ugs', 'un', 'unj', 'unh', 'ud', 'ul', 'ulg', 'ulm', 'ulb', 'uls', 'ult', 'ulp', 'ulh', 'um', 'ub', 'ubs', 'us', 'uss', 'ung', 'uj', 'uc', 'uk', 'ut', 'up', 'uh', 'weo', 'weog', 'weogg', 'weogs', 'weon', 'weonj', 'weonh', 'weod', 'weol', 'weolg', 'weolm', 'weolb', 'weols', 'weolt', 'weolp', 'weolh', 'weom', 'weob', 'weobs', 'weos', 'weoss', 'weong', 'weoj', 'weoc', 'weok', 'weot', 'weop', 'weoh', 'we', 'weg', 'wegg', 'wegs', 'wen', 'wenj', 'wenh', 'wed', 'wel', 'welg', 'welm', 'welb', 'wels', 'welt', 'welp', 'welh', 'wem', 'web', 'webs', 'wes', 'wess', 'weng', 'wej', 'wec'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c7.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c7.php
new file mode 100644
index 000000000..3c006a433
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c7.php
@@ -0,0 +1 @@
+<?php return ['wek', 'wet', 'wep', 'weh', 'wi', 'wig', 'wigg', 'wigs', 'win', 'winj', 'winh', 'wid', 'wil', 'wilg', 'wilm', 'wilb', 'wils', 'wilt', 'wilp', 'wilh', 'wim', 'wib', 'wibs', 'wis', 'wiss', 'wing', 'wij', 'wic', 'wik', 'wit', 'wip', 'wih', 'yu', 'yug', 'yugg', 'yugs', 'yun', 'yunj', 'yunh', 'yud', 'yul', 'yulg', 'yulm', 'yulb', 'yuls', 'yult', 'yulp', 'yulh', 'yum', 'yub', 'yubs', 'yus', 'yuss', 'yung', 'yuj', 'yuc', 'yuk', 'yut', 'yup', 'yuh', 'eu', 'eug', 'eugg', 'eugs', 'eun', 'eunj', 'eunh', 'eud', 'eul', 'eulg', 'eulm', 'eulb', 'euls', 'eult', 'eulp', 'eulh', 'eum', 'eub', 'eubs', 'eus', 'euss', 'eung', 'euj', 'euc', 'euk', 'eut', 'eup', 'euh', 'yi', 'yig', 'yigg', 'yigs', 'yin', 'yinj', 'yinh', 'yid', 'yil', 'yilg', 'yilm', 'yilb', 'yils', 'yilt', 'yilp', 'yilh', 'yim', 'yib', 'yibs', 'yis', 'yiss', 'ying', 'yij', 'yic', 'yik', 'yit', 'yip', 'yih', 'i', 'ig', 'igg', 'igs', 'in', 'inj', 'inh', 'id', 'il', 'ilg', 'ilm', 'ilb', 'ils', 'ilt', 'ilp', 'ilh', 'im', 'ib', 'ibs', 'is', 'iss', 'ing', 'ij', 'ic', 'ik', 'it', 'ip', 'ih', 'ja', 'jag', 'jagg', 'jags', 'jan', 'janj', 'janh', 'jad', 'jal', 'jalg', 'jalm', 'jalb', 'jals', 'jalt', 'jalp', 'jalh', 'jam', 'jab', 'jabs', 'jas', 'jass', 'jang', 'jaj', 'jac', 'jak', 'jat', 'jap', 'jah', 'jae', 'jaeg', 'jaegg', 'jaegs', 'jaen', 'jaenj', 'jaenh', 'jaed', 'jael', 'jaelg', 'jaelm', 'jaelb', 'jaels', 'jaelt', 'jaelp', 'jaelh', 'jaem', 'jaeb', 'jaebs', 'jaes', 'jaess', 'jaeng', 'jaej', 'jaec', 'jaek', 'jaet', 'jaep', 'jaeh', 'jya', 'jyag', 'jyagg', 'jyags', 'jyan', 'jyanj', 'jyanh', 'jyad', 'jyal', 'jyalg', 'jyalm', 'jyalb', 'jyals', 'jyalt', 'jyalp', 'jyalh', 'jyam', 'jyab', 'jyabs', 'jyas', 'jyass', 'jyang', 'jyaj', 'jyac', 'jyak', 'jyat', 'jyap', 'jyah', 'jyae', 'jyaeg', 'jyaegg', 'jyaegs', 'jyaen', 'jyaenj', 'jyaenh', 'jyaed', 'jyael', 'jyaelg', 'jyaelm', 'jyaelb', 'jyaels', 'jyaelt', 'jyaelp', 'jyaelh', 'jyaem', 'jyaeb', 'jyaebs', 'jyaes', 'jyaess', 'jyaeng', 'jyaej', 'jyaec', 'jyaek', 'jyaet', 'jyaep', 'jyaeh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c8.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c8.php
new file mode 100644
index 000000000..911138696
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c8.php
@@ -0,0 +1 @@
+<?php return ['jeo', 'jeog', 'jeogg', 'jeogs', 'jeon', 'jeonj', 'jeonh', 'jeod', 'jeol', 'jeolg', 'jeolm', 'jeolb', 'jeols', 'jeolt', 'jeolp', 'jeolh', 'jeom', 'jeob', 'jeobs', 'jeos', 'jeoss', 'jeong', 'jeoj', 'jeoc', 'jeok', 'jeot', 'jeop', 'jeoh', 'je', 'jeg', 'jegg', 'jegs', 'jen', 'jenj', 'jenh', 'jed', 'jel', 'jelg', 'jelm', 'jelb', 'jels', 'jelt', 'jelp', 'jelh', 'jem', 'jeb', 'jebs', 'jes', 'jess', 'jeng', 'jej', 'jec', 'jek', 'jet', 'jep', 'jeh', 'jyeo', 'jyeog', 'jyeogg', 'jyeogs', 'jyeon', 'jyeonj', 'jyeonh', 'jyeod', 'jyeol', 'jyeolg', 'jyeolm', 'jyeolb', 'jyeols', 'jyeolt', 'jyeolp', 'jyeolh', 'jyeom', 'jyeob', 'jyeobs', 'jyeos', 'jyeoss', 'jyeong', 'jyeoj', 'jyeoc', 'jyeok', 'jyeot', 'jyeop', 'jyeoh', 'jye', 'jyeg', 'jyegg', 'jyegs', 'jyen', 'jyenj', 'jyenh', 'jyed', 'jyel', 'jyelg', 'jyelm', 'jyelb', 'jyels', 'jyelt', 'jyelp', 'jyelh', 'jyem', 'jyeb', 'jyebs', 'jyes', 'jyess', 'jyeng', 'jyej', 'jyec', 'jyek', 'jyet', 'jyep', 'jyeh', 'jo', 'jog', 'jogg', 'jogs', 'jon', 'jonj', 'jonh', 'jod', 'jol', 'jolg', 'jolm', 'jolb', 'jols', 'jolt', 'jolp', 'jolh', 'jom', 'job', 'jobs', 'jos', 'joss', 'jong', 'joj', 'joc', 'jok', 'jot', 'jop', 'joh', 'jwa', 'jwag', 'jwagg', 'jwags', 'jwan', 'jwanj', 'jwanh', 'jwad', 'jwal', 'jwalg', 'jwalm', 'jwalb', 'jwals', 'jwalt', 'jwalp', 'jwalh', 'jwam', 'jwab', 'jwabs', 'jwas', 'jwass', 'jwang', 'jwaj', 'jwac', 'jwak', 'jwat', 'jwap', 'jwah', 'jwae', 'jwaeg', 'jwaegg', 'jwaegs', 'jwaen', 'jwaenj', 'jwaenh', 'jwaed', 'jwael', 'jwaelg', 'jwaelm', 'jwaelb', 'jwaels', 'jwaelt', 'jwaelp', 'jwaelh', 'jwaem', 'jwaeb', 'jwaebs', 'jwaes', 'jwaess', 'jwaeng', 'jwaej', 'jwaec', 'jwaek', 'jwaet', 'jwaep', 'jwaeh', 'joe', 'joeg', 'joegg', 'joegs', 'joen', 'joenj', 'joenh', 'joed', 'joel', 'joelg', 'joelm', 'joelb', 'joels', 'joelt', 'joelp', 'joelh', 'joem', 'joeb', 'joebs', 'joes', 'joess', 'joeng', 'joej', 'joec', 'joek', 'joet', 'joep', 'joeh', 'jyo', 'jyog', 'jyogg', 'jyogs', 'jyon', 'jyonj', 'jyonh', 'jyod', 'jyol', 'jyolg', 'jyolm', 'jyolb', 'jyols', 'jyolt', 'jyolp', 'jyolh', 'jyom', 'jyob', 'jyobs', 'jyos', 'jyoss', 'jyong', 'jyoj', 'jyoc', 'jyok', 'jyot', 'jyop', 'jyoh', 'ju', 'jug', 'jugg', 'jugs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0c9.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c9.php
new file mode 100644
index 000000000..31c897375
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0c9.php
@@ -0,0 +1 @@
+<?php return ['jun', 'junj', 'junh', 'jud', 'jul', 'julg', 'julm', 'julb', 'juls', 'jult', 'julp', 'julh', 'jum', 'jub', 'jubs', 'jus', 'juss', 'jung', 'juj', 'juc', 'juk', 'jut', 'jup', 'juh', 'jweo', 'jweog', 'jweogg', 'jweogs', 'jweon', 'jweonj', 'jweonh', 'jweod', 'jweol', 'jweolg', 'jweolm', 'jweolb', 'jweols', 'jweolt', 'jweolp', 'jweolh', 'jweom', 'jweob', 'jweobs', 'jweos', 'jweoss', 'jweong', 'jweoj', 'jweoc', 'jweok', 'jweot', 'jweop', 'jweoh', 'jwe', 'jweg', 'jwegg', 'jwegs', 'jwen', 'jwenj', 'jwenh', 'jwed', 'jwel', 'jwelg', 'jwelm', 'jwelb', 'jwels', 'jwelt', 'jwelp', 'jwelh', 'jwem', 'jweb', 'jwebs', 'jwes', 'jwess', 'jweng', 'jwej', 'jwec', 'jwek', 'jwet', 'jwep', 'jweh', 'jwi', 'jwig', 'jwigg', 'jwigs', 'jwin', 'jwinj', 'jwinh', 'jwid', 'jwil', 'jwilg', 'jwilm', 'jwilb', 'jwils', 'jwilt', 'jwilp', 'jwilh', 'jwim', 'jwib', 'jwibs', 'jwis', 'jwiss', 'jwing', 'jwij', 'jwic', 'jwik', 'jwit', 'jwip', 'jwih', 'jyu', 'jyug', 'jyugg', 'jyugs', 'jyun', 'jyunj', 'jyunh', 'jyud', 'jyul', 'jyulg', 'jyulm', 'jyulb', 'jyuls', 'jyult', 'jyulp', 'jyulh', 'jyum', 'jyub', 'jyubs', 'jyus', 'jyuss', 'jyung', 'jyuj', 'jyuc', 'jyuk', 'jyut', 'jyup', 'jyuh', 'jeu', 'jeug', 'jeugg', 'jeugs', 'jeun', 'jeunj', 'jeunh', 'jeud', 'jeul', 'jeulg', 'jeulm', 'jeulb', 'jeuls', 'jeult', 'jeulp', 'jeulh', 'jeum', 'jeub', 'jeubs', 'jeus', 'jeuss', 'jeung', 'jeuj', 'jeuc', 'jeuk', 'jeut', 'jeup', 'jeuh', 'jyi', 'jyig', 'jyigg', 'jyigs', 'jyin', 'jyinj', 'jyinh', 'jyid', 'jyil', 'jyilg', 'jyilm', 'jyilb', 'jyils', 'jyilt', 'jyilp', 'jyilh', 'jyim', 'jyib', 'jyibs', 'jyis', 'jyiss', 'jying', 'jyij', 'jyic', 'jyik', 'jyit', 'jyip', 'jyih', 'ji', 'jig', 'jigg', 'jigs', 'jin', 'jinj', 'jinh', 'jid', 'jil', 'jilg', 'jilm', 'jilb', 'jils', 'jilt', 'jilp', 'jilh', 'jim', 'jib', 'jibs', 'jis', 'jiss', 'jing', 'jij', 'jic', 'jik', 'jit', 'jip', 'jih', 'jja', 'jjag', 'jjagg', 'jjags', 'jjan', 'jjanj', 'jjanh', 'jjad', 'jjal', 'jjalg', 'jjalm', 'jjalb', 'jjals', 'jjalt', 'jjalp', 'jjalh', 'jjam', 'jjab', 'jjabs', 'jjas', 'jjass', 'jjang', 'jjaj', 'jjac', 'jjak', 'jjat', 'jjap', 'jjah', 'jjae', 'jjaeg', 'jjaegg', 'jjaegs', 'jjaen', 'jjaenj', 'jjaenh', 'jjaed'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ca.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ca.php
new file mode 100644
index 000000000..79bb944d9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ca.php
@@ -0,0 +1 @@
+<?php return ['jjael', 'jjaelg', 'jjaelm', 'jjaelb', 'jjaels', 'jjaelt', 'jjaelp', 'jjaelh', 'jjaem', 'jjaeb', 'jjaebs', 'jjaes', 'jjaess', 'jjaeng', 'jjaej', 'jjaec', 'jjaek', 'jjaet', 'jjaep', 'jjaeh', 'jjya', 'jjyag', 'jjyagg', 'jjyags', 'jjyan', 'jjyanj', 'jjyanh', 'jjyad', 'jjyal', 'jjyalg', 'jjyalm', 'jjyalb', 'jjyals', 'jjyalt', 'jjyalp', 'jjyalh', 'jjyam', 'jjyab', 'jjyabs', 'jjyas', 'jjyass', 'jjyang', 'jjyaj', 'jjyac', 'jjyak', 'jjyat', 'jjyap', 'jjyah', 'jjyae', 'jjyaeg', 'jjyaegg', 'jjyaegs', 'jjyaen', 'jjyaenj', 'jjyaenh', 'jjyaed', 'jjyael', 'jjyaelg', 'jjyaelm', 'jjyaelb', 'jjyaels', 'jjyaelt', 'jjyaelp', 'jjyaelh', 'jjyaem', 'jjyaeb', 'jjyaebs', 'jjyaes', 'jjyaess', 'jjyaeng', 'jjyaej', 'jjyaec', 'jjyaek', 'jjyaet', 'jjyaep', 'jjyaeh', 'jjeo', 'jjeog', 'jjeogg', 'jjeogs', 'jjeon', 'jjeonj', 'jjeonh', 'jjeod', 'jjeol', 'jjeolg', 'jjeolm', 'jjeolb', 'jjeols', 'jjeolt', 'jjeolp', 'jjeolh', 'jjeom', 'jjeob', 'jjeobs', 'jjeos', 'jjeoss', 'jjeong', 'jjeoj', 'jjeoc', 'jjeok', 'jjeot', 'jjeop', 'jjeoh', 'jje', 'jjeg', 'jjegg', 'jjegs', 'jjen', 'jjenj', 'jjenh', 'jjed', 'jjel', 'jjelg', 'jjelm', 'jjelb', 'jjels', 'jjelt', 'jjelp', 'jjelh', 'jjem', 'jjeb', 'jjebs', 'jjes', 'jjess', 'jjeng', 'jjej', 'jjec', 'jjek', 'jjet', 'jjep', 'jjeh', 'jjyeo', 'jjyeog', 'jjyeogg', 'jjyeogs', 'jjyeon', 'jjyeonj', 'jjyeonh', 'jjyeod', 'jjyeol', 'jjyeolg', 'jjyeolm', 'jjyeolb', 'jjyeols', 'jjyeolt', 'jjyeolp', 'jjyeolh', 'jjyeom', 'jjyeob', 'jjyeobs', 'jjyeos', 'jjyeoss', 'jjyeong', 'jjyeoj', 'jjyeoc', 'jjyeok', 'jjyeot', 'jjyeop', 'jjyeoh', 'jjye', 'jjyeg', 'jjyegg', 'jjyegs', 'jjyen', 'jjyenj', 'jjyenh', 'jjyed', 'jjyel', 'jjyelg', 'jjyelm', 'jjyelb', 'jjyels', 'jjyelt', 'jjyelp', 'jjyelh', 'jjyem', 'jjyeb', 'jjyebs', 'jjyes', 'jjyess', 'jjyeng', 'jjyej', 'jjyec', 'jjyek', 'jjyet', 'jjyep', 'jjyeh', 'jjo', 'jjog', 'jjogg', 'jjogs', 'jjon', 'jjonj', 'jjonh', 'jjod', 'jjol', 'jjolg', 'jjolm', 'jjolb', 'jjols', 'jjolt', 'jjolp', 'jjolh', 'jjom', 'jjob', 'jjobs', 'jjos', 'jjoss', 'jjong', 'jjoj', 'jjoc', 'jjok', 'jjot', 'jjop', 'jjoh', 'jjwa', 'jjwag', 'jjwagg', 'jjwags', 'jjwan', 'jjwanj', 'jjwanh', 'jjwad', 'jjwal', 'jjwalg', 'jjwalm', 'jjwalb', 'jjwals', 'jjwalt', 'jjwalp', 'jjwalh', 'jjwam', 'jjwab', 'jjwabs', 'jjwas', 'jjwass', 'jjwang', 'jjwaj', 'jjwac', 'jjwak', 'jjwat', 'jjwap', 'jjwah', 'jjwae', 'jjwaeg', 'jjwaegg', 'jjwaegs', 'jjwaen', 'jjwaenj', 'jjwaenh', 'jjwaed', 'jjwael', 'jjwaelg', 'jjwaelm', 'jjwaelb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0cb.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cb.php
new file mode 100644
index 000000000..117a8dd8c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cb.php
@@ -0,0 +1 @@
+<?php return ['jjwaels', 'jjwaelt', 'jjwaelp', 'jjwaelh', 'jjwaem', 'jjwaeb', 'jjwaebs', 'jjwaes', 'jjwaess', 'jjwaeng', 'jjwaej', 'jjwaec', 'jjwaek', 'jjwaet', 'jjwaep', 'jjwaeh', 'jjoe', 'jjoeg', 'jjoegg', 'jjoegs', 'jjoen', 'jjoenj', 'jjoenh', 'jjoed', 'jjoel', 'jjoelg', 'jjoelm', 'jjoelb', 'jjoels', 'jjoelt', 'jjoelp', 'jjoelh', 'jjoem', 'jjoeb', 'jjoebs', 'jjoes', 'jjoess', 'jjoeng', 'jjoej', 'jjoec', 'jjoek', 'jjoet', 'jjoep', 'jjoeh', 'jjyo', 'jjyog', 'jjyogg', 'jjyogs', 'jjyon', 'jjyonj', 'jjyonh', 'jjyod', 'jjyol', 'jjyolg', 'jjyolm', 'jjyolb', 'jjyols', 'jjyolt', 'jjyolp', 'jjyolh', 'jjyom', 'jjyob', 'jjyobs', 'jjyos', 'jjyoss', 'jjyong', 'jjyoj', 'jjyoc', 'jjyok', 'jjyot', 'jjyop', 'jjyoh', 'jju', 'jjug', 'jjugg', 'jjugs', 'jjun', 'jjunj', 'jjunh', 'jjud', 'jjul', 'jjulg', 'jjulm', 'jjulb', 'jjuls', 'jjult', 'jjulp', 'jjulh', 'jjum', 'jjub', 'jjubs', 'jjus', 'jjuss', 'jjung', 'jjuj', 'jjuc', 'jjuk', 'jjut', 'jjup', 'jjuh', 'jjweo', 'jjweog', 'jjweogg', 'jjweogs', 'jjweon', 'jjweonj', 'jjweonh', 'jjweod', 'jjweol', 'jjweolg', 'jjweolm', 'jjweolb', 'jjweols', 'jjweolt', 'jjweolp', 'jjweolh', 'jjweom', 'jjweob', 'jjweobs', 'jjweos', 'jjweoss', 'jjweong', 'jjweoj', 'jjweoc', 'jjweok', 'jjweot', 'jjweop', 'jjweoh', 'jjwe', 'jjweg', 'jjwegg', 'jjwegs', 'jjwen', 'jjwenj', 'jjwenh', 'jjwed', 'jjwel', 'jjwelg', 'jjwelm', 'jjwelb', 'jjwels', 'jjwelt', 'jjwelp', 'jjwelh', 'jjwem', 'jjweb', 'jjwebs', 'jjwes', 'jjwess', 'jjweng', 'jjwej', 'jjwec', 'jjwek', 'jjwet', 'jjwep', 'jjweh', 'jjwi', 'jjwig', 'jjwigg', 'jjwigs', 'jjwin', 'jjwinj', 'jjwinh', 'jjwid', 'jjwil', 'jjwilg', 'jjwilm', 'jjwilb', 'jjwils', 'jjwilt', 'jjwilp', 'jjwilh', 'jjwim', 'jjwib', 'jjwibs', 'jjwis', 'jjwiss', 'jjwing', 'jjwij', 'jjwic', 'jjwik', 'jjwit', 'jjwip', 'jjwih', 'jjyu', 'jjyug', 'jjyugg', 'jjyugs', 'jjyun', 'jjyunj', 'jjyunh', 'jjyud', 'jjyul', 'jjyulg', 'jjyulm', 'jjyulb', 'jjyuls', 'jjyult', 'jjyulp', 'jjyulh', 'jjyum', 'jjyub', 'jjyubs', 'jjyus', 'jjyuss', 'jjyung', 'jjyuj', 'jjyuc', 'jjyuk', 'jjyut', 'jjyup', 'jjyuh', 'jjeu', 'jjeug', 'jjeugg', 'jjeugs', 'jjeun', 'jjeunj', 'jjeunh', 'jjeud', 'jjeul', 'jjeulg', 'jjeulm', 'jjeulb', 'jjeuls', 'jjeult', 'jjeulp', 'jjeulh', 'jjeum', 'jjeub', 'jjeubs', 'jjeus', 'jjeuss', 'jjeung', 'jjeuj', 'jjeuc', 'jjeuk', 'jjeut', 'jjeup', 'jjeuh', 'jjyi', 'jjyig', 'jjyigg', 'jjyigs', 'jjyin', 'jjyinj', 'jjyinh', 'jjyid', 'jjyil', 'jjyilg', 'jjyilm', 'jjyilb', 'jjyils', 'jjyilt', 'jjyilp', 'jjyilh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0cc.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cc.php
new file mode 100644
index 000000000..7d38e9ca0
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cc.php
@@ -0,0 +1 @@
+<?php return ['jjyim', 'jjyib', 'jjyibs', 'jjyis', 'jjyiss', 'jjying', 'jjyij', 'jjyic', 'jjyik', 'jjyit', 'jjyip', 'jjyih', 'jji', 'jjig', 'jjigg', 'jjigs', 'jjin', 'jjinj', 'jjinh', 'jjid', 'jjil', 'jjilg', 'jjilm', 'jjilb', 'jjils', 'jjilt', 'jjilp', 'jjilh', 'jjim', 'jjib', 'jjibs', 'jjis', 'jjiss', 'jjing', 'jjij', 'jjic', 'jjik', 'jjit', 'jjip', 'jjih', 'ca', 'cag', 'cagg', 'cags', 'can', 'canj', 'canh', 'cad', 'cal', 'calg', 'calm', 'calb', 'cals', 'calt', 'calp', 'calh', 'cam', 'cab', 'cabs', 'cas', 'cass', 'cang', 'caj', 'cac', 'cak', 'cat', 'cap', 'cah', 'cae', 'caeg', 'caegg', 'caegs', 'caen', 'caenj', 'caenh', 'caed', 'cael', 'caelg', 'caelm', 'caelb', 'caels', 'caelt', 'caelp', 'caelh', 'caem', 'caeb', 'caebs', 'caes', 'caess', 'caeng', 'caej', 'caec', 'caek', 'caet', 'caep', 'caeh', 'cya', 'cyag', 'cyagg', 'cyags', 'cyan', 'cyanj', 'cyanh', 'cyad', 'cyal', 'cyalg', 'cyalm', 'cyalb', 'cyals', 'cyalt', 'cyalp', 'cyalh', 'cyam', 'cyab', 'cyabs', 'cyas', 'cyass', 'cyang', 'cyaj', 'cyac', 'cyak', 'cyat', 'cyap', 'cyah', 'cyae', 'cyaeg', 'cyaegg', 'cyaegs', 'cyaen', 'cyaenj', 'cyaenh', 'cyaed', 'cyael', 'cyaelg', 'cyaelm', 'cyaelb', 'cyaels', 'cyaelt', 'cyaelp', 'cyaelh', 'cyaem', 'cyaeb', 'cyaebs', 'cyaes', 'cyaess', 'cyaeng', 'cyaej', 'cyaec', 'cyaek', 'cyaet', 'cyaep', 'cyaeh', 'ceo', 'ceog', 'ceogg', 'ceogs', 'ceon', 'ceonj', 'ceonh', 'ceod', 'ceol', 'ceolg', 'ceolm', 'ceolb', 'ceols', 'ceolt', 'ceolp', 'ceolh', 'ceom', 'ceob', 'ceobs', 'ceos', 'ceoss', 'ceong', 'ceoj', 'ceoc', 'ceok', 'ceot', 'ceop', 'ceoh', 'ce', 'ceg', 'cegg', 'cegs', 'cen', 'cenj', 'cenh', 'ced', 'cel', 'celg', 'celm', 'celb', 'cels', 'celt', 'celp', 'celh', 'cem', 'ceb', 'cebs', 'ces', 'cess', 'ceng', 'cej', 'cec', 'cek', 'cet', 'cep', 'ceh', 'cyeo', 'cyeog', 'cyeogg', 'cyeogs', 'cyeon', 'cyeonj', 'cyeonh', 'cyeod', 'cyeol', 'cyeolg', 'cyeolm', 'cyeolb', 'cyeols', 'cyeolt', 'cyeolp', 'cyeolh', 'cyeom', 'cyeob', 'cyeobs', 'cyeos', 'cyeoss', 'cyeong', 'cyeoj', 'cyeoc', 'cyeok', 'cyeot', 'cyeop', 'cyeoh', 'cye', 'cyeg', 'cyegg', 'cyegs', 'cyen', 'cyenj', 'cyenh', 'cyed', 'cyel', 'cyelg', 'cyelm', 'cyelb', 'cyels', 'cyelt', 'cyelp', 'cyelh', 'cyem', 'cyeb', 'cyebs', 'cyes'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0cd.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cd.php
new file mode 100644
index 000000000..f40bb6469
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cd.php
@@ -0,0 +1 @@
+<?php return ['cyess', 'cyeng', 'cyej', 'cyec', 'cyek', 'cyet', 'cyep', 'cyeh', 'co', 'cog', 'cogg', 'cogs', 'con', 'conj', 'conh', 'cod', 'col', 'colg', 'colm', 'colb', 'cols', 'colt', 'colp', 'colh', 'com', 'cob', 'cobs', 'cos', 'coss', 'cong', 'coj', 'coc', 'cok', 'cot', 'cop', 'coh', 'cwa', 'cwag', 'cwagg', 'cwags', 'cwan', 'cwanj', 'cwanh', 'cwad', 'cwal', 'cwalg', 'cwalm', 'cwalb', 'cwals', 'cwalt', 'cwalp', 'cwalh', 'cwam', 'cwab', 'cwabs', 'cwas', 'cwass', 'cwang', 'cwaj', 'cwac', 'cwak', 'cwat', 'cwap', 'cwah', 'cwae', 'cwaeg', 'cwaegg', 'cwaegs', 'cwaen', 'cwaenj', 'cwaenh', 'cwaed', 'cwael', 'cwaelg', 'cwaelm', 'cwaelb', 'cwaels', 'cwaelt', 'cwaelp', 'cwaelh', 'cwaem', 'cwaeb', 'cwaebs', 'cwaes', 'cwaess', 'cwaeng', 'cwaej', 'cwaec', 'cwaek', 'cwaet', 'cwaep', 'cwaeh', 'coe', 'coeg', 'coegg', 'coegs', 'coen', 'coenj', 'coenh', 'coed', 'coel', 'coelg', 'coelm', 'coelb', 'coels', 'coelt', 'coelp', 'coelh', 'coem', 'coeb', 'coebs', 'coes', 'coess', 'coeng', 'coej', 'coec', 'coek', 'coet', 'coep', 'coeh', 'cyo', 'cyog', 'cyogg', 'cyogs', 'cyon', 'cyonj', 'cyonh', 'cyod', 'cyol', 'cyolg', 'cyolm', 'cyolb', 'cyols', 'cyolt', 'cyolp', 'cyolh', 'cyom', 'cyob', 'cyobs', 'cyos', 'cyoss', 'cyong', 'cyoj', 'cyoc', 'cyok', 'cyot', 'cyop', 'cyoh', 'cu', 'cug', 'cugg', 'cugs', 'cun', 'cunj', 'cunh', 'cud', 'cul', 'culg', 'culm', 'culb', 'culs', 'cult', 'culp', 'culh', 'cum', 'cub', 'cubs', 'cus', 'cuss', 'cung', 'cuj', 'cuc', 'cuk', 'cut', 'cup', 'cuh', 'cweo', 'cweog', 'cweogg', 'cweogs', 'cweon', 'cweonj', 'cweonh', 'cweod', 'cweol', 'cweolg', 'cweolm', 'cweolb', 'cweols', 'cweolt', 'cweolp', 'cweolh', 'cweom', 'cweob', 'cweobs', 'cweos', 'cweoss', 'cweong', 'cweoj', 'cweoc', 'cweok', 'cweot', 'cweop', 'cweoh', 'cwe', 'cweg', 'cwegg', 'cwegs', 'cwen', 'cwenj', 'cwenh', 'cwed', 'cwel', 'cwelg', 'cwelm', 'cwelb', 'cwels', 'cwelt', 'cwelp', 'cwelh', 'cwem', 'cweb', 'cwebs', 'cwes', 'cwess', 'cweng', 'cwej', 'cwec', 'cwek', 'cwet', 'cwep', 'cweh', 'cwi', 'cwig', 'cwigg', 'cwigs', 'cwin', 'cwinj', 'cwinh', 'cwid', 'cwil', 'cwilg', 'cwilm', 'cwilb', 'cwils', 'cwilt', 'cwilp', 'cwilh', 'cwim', 'cwib', 'cwibs', 'cwis', 'cwiss', 'cwing', 'cwij', 'cwic'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ce.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ce.php
new file mode 100644
index 000000000..92e8b2df5
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ce.php
@@ -0,0 +1 @@
+<?php return ['cwik', 'cwit', 'cwip', 'cwih', 'cyu', 'cyug', 'cyugg', 'cyugs', 'cyun', 'cyunj', 'cyunh', 'cyud', 'cyul', 'cyulg', 'cyulm', 'cyulb', 'cyuls', 'cyult', 'cyulp', 'cyulh', 'cyum', 'cyub', 'cyubs', 'cyus', 'cyuss', 'cyung', 'cyuj', 'cyuc', 'cyuk', 'cyut', 'cyup', 'cyuh', 'ceu', 'ceug', 'ceugg', 'ceugs', 'ceun', 'ceunj', 'ceunh', 'ceud', 'ceul', 'ceulg', 'ceulm', 'ceulb', 'ceuls', 'ceult', 'ceulp', 'ceulh', 'ceum', 'ceub', 'ceubs', 'ceus', 'ceuss', 'ceung', 'ceuj', 'ceuc', 'ceuk', 'ceut', 'ceup', 'ceuh', 'cyi', 'cyig', 'cyigg', 'cyigs', 'cyin', 'cyinj', 'cyinh', 'cyid', 'cyil', 'cyilg', 'cyilm', 'cyilb', 'cyils', 'cyilt', 'cyilp', 'cyilh', 'cyim', 'cyib', 'cyibs', 'cyis', 'cyiss', 'cying', 'cyij', 'cyic', 'cyik', 'cyit', 'cyip', 'cyih', 'ci', 'cig', 'cigg', 'cigs', 'cin', 'cinj', 'cinh', 'cid', 'cil', 'cilg', 'cilm', 'cilb', 'cils', 'cilt', 'cilp', 'cilh', 'cim', 'cib', 'cibs', 'cis', 'ciss', 'cing', 'cij', 'cic', 'cik', 'cit', 'cip', 'cih', 'ka', 'kag', 'kagg', 'kags', 'kan', 'kanj', 'kanh', 'kad', 'kal', 'kalg', 'kalm', 'kalb', 'kals', 'kalt', 'kalp', 'kalh', 'kam', 'kab', 'kabs', 'kas', 'kass', 'kang', 'kaj', 'kac', 'kak', 'kat', 'kap', 'kah', 'kae', 'kaeg', 'kaegg', 'kaegs', 'kaen', 'kaenj', 'kaenh', 'kaed', 'kael', 'kaelg', 'kaelm', 'kaelb', 'kaels', 'kaelt', 'kaelp', 'kaelh', 'kaem', 'kaeb', 'kaebs', 'kaes', 'kaess', 'kaeng', 'kaej', 'kaec', 'kaek', 'kaet', 'kaep', 'kaeh', 'kya', 'kyag', 'kyagg', 'kyags', 'kyan', 'kyanj', 'kyanh', 'kyad', 'kyal', 'kyalg', 'kyalm', 'kyalb', 'kyals', 'kyalt', 'kyalp', 'kyalh', 'kyam', 'kyab', 'kyabs', 'kyas', 'kyass', 'kyang', 'kyaj', 'kyac', 'kyak', 'kyat', 'kyap', 'kyah', 'kyae', 'kyaeg', 'kyaegg', 'kyaegs', 'kyaen', 'kyaenj', 'kyaenh', 'kyaed', 'kyael', 'kyaelg', 'kyaelm', 'kyaelb', 'kyaels', 'kyaelt', 'kyaelp', 'kyaelh', 'kyaem', 'kyaeb', 'kyaebs', 'kyaes', 'kyaess', 'kyaeng', 'kyaej', 'kyaec', 'kyaek', 'kyaet', 'kyaep', 'kyaeh', 'keo', 'keog', 'keogg', 'keogs', 'keon', 'keonj', 'keonh', 'keod', 'keol', 'keolg', 'keolm', 'keolb', 'keols', 'keolt', 'keolp', 'keolh', 'keom', 'keob', 'keobs', 'keos', 'keoss', 'keong', 'keoj', 'keoc', 'keok', 'keot', 'keop', 'keoh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0cf.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cf.php
new file mode 100644
index 000000000..607d1e1ff
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0cf.php
@@ -0,0 +1 @@
+<?php return ['ke', 'keg', 'kegg', 'kegs', 'ken', 'kenj', 'kenh', 'ked', 'kel', 'kelg', 'kelm', 'kelb', 'kels', 'kelt', 'kelp', 'kelh', 'kem', 'keb', 'kebs', 'kes', 'kess', 'keng', 'kej', 'kec', 'kek', 'ket', 'kep', 'keh', 'kyeo', 'kyeog', 'kyeogg', 'kyeogs', 'kyeon', 'kyeonj', 'kyeonh', 'kyeod', 'kyeol', 'kyeolg', 'kyeolm', 'kyeolb', 'kyeols', 'kyeolt', 'kyeolp', 'kyeolh', 'kyeom', 'kyeob', 'kyeobs', 'kyeos', 'kyeoss', 'kyeong', 'kyeoj', 'kyeoc', 'kyeok', 'kyeot', 'kyeop', 'kyeoh', 'kye', 'kyeg', 'kyegg', 'kyegs', 'kyen', 'kyenj', 'kyenh', 'kyed', 'kyel', 'kyelg', 'kyelm', 'kyelb', 'kyels', 'kyelt', 'kyelp', 'kyelh', 'kyem', 'kyeb', 'kyebs', 'kyes', 'kyess', 'kyeng', 'kyej', 'kyec', 'kyek', 'kyet', 'kyep', 'kyeh', 'ko', 'kog', 'kogg', 'kogs', 'kon', 'konj', 'konh', 'kod', 'kol', 'kolg', 'kolm', 'kolb', 'kols', 'kolt', 'kolp', 'kolh', 'kom', 'kob', 'kobs', 'kos', 'koss', 'kong', 'koj', 'koc', 'kok', 'kot', 'kop', 'koh', 'kwa', 'kwag', 'kwagg', 'kwags', 'kwan', 'kwanj', 'kwanh', 'kwad', 'kwal', 'kwalg', 'kwalm', 'kwalb', 'kwals', 'kwalt', 'kwalp', 'kwalh', 'kwam', 'kwab', 'kwabs', 'kwas', 'kwass', 'kwang', 'kwaj', 'kwac', 'kwak', 'kwat', 'kwap', 'kwah', 'kwae', 'kwaeg', 'kwaegg', 'kwaegs', 'kwaen', 'kwaenj', 'kwaenh', 'kwaed', 'kwael', 'kwaelg', 'kwaelm', 'kwaelb', 'kwaels', 'kwaelt', 'kwaelp', 'kwaelh', 'kwaem', 'kwaeb', 'kwaebs', 'kwaes', 'kwaess', 'kwaeng', 'kwaej', 'kwaec', 'kwaek', 'kwaet', 'kwaep', 'kwaeh', 'koe', 'koeg', 'koegg', 'koegs', 'koen', 'koenj', 'koenh', 'koed', 'koel', 'koelg', 'koelm', 'koelb', 'koels', 'koelt', 'koelp', 'koelh', 'koem', 'koeb', 'koebs', 'koes', 'koess', 'koeng', 'koej', 'koec', 'koek', 'koet', 'koep', 'koeh', 'kyo', 'kyog', 'kyogg', 'kyogs', 'kyon', 'kyonj', 'kyonh', 'kyod', 'kyol', 'kyolg', 'kyolm', 'kyolb', 'kyols', 'kyolt', 'kyolp', 'kyolh', 'kyom', 'kyob', 'kyobs', 'kyos', 'kyoss', 'kyong', 'kyoj', 'kyoc', 'kyok', 'kyot', 'kyop', 'kyoh', 'ku', 'kug', 'kugg', 'kugs', 'kun', 'kunj', 'kunh', 'kud', 'kul', 'kulg', 'kulm', 'kulb', 'kuls', 'kult', 'kulp', 'kulh', 'kum', 'kub', 'kubs', 'kus', 'kuss', 'kung', 'kuj', 'kuc', 'kuk', 'kut', 'kup', 'kuh', 'kweo', 'kweog', 'kweogg', 'kweogs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d0.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d0.php
new file mode 100644
index 000000000..f92179381
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d0.php
@@ -0,0 +1 @@
+<?php return ['kweon', 'kweonj', 'kweonh', 'kweod', 'kweol', 'kweolg', 'kweolm', 'kweolb', 'kweols', 'kweolt', 'kweolp', 'kweolh', 'kweom', 'kweob', 'kweobs', 'kweos', 'kweoss', 'kweong', 'kweoj', 'kweoc', 'kweok', 'kweot', 'kweop', 'kweoh', 'kwe', 'kweg', 'kwegg', 'kwegs', 'kwen', 'kwenj', 'kwenh', 'kwed', 'kwel', 'kwelg', 'kwelm', 'kwelb', 'kwels', 'kwelt', 'kwelp', 'kwelh', 'kwem', 'kweb', 'kwebs', 'kwes', 'kwess', 'kweng', 'kwej', 'kwec', 'kwek', 'kwet', 'kwep', 'kweh', 'kwi', 'kwig', 'kwigg', 'kwigs', 'kwin', 'kwinj', 'kwinh', 'kwid', 'kwil', 'kwilg', 'kwilm', 'kwilb', 'kwils', 'kwilt', 'kwilp', 'kwilh', 'kwim', 'kwib', 'kwibs', 'kwis', 'kwiss', 'kwing', 'kwij', 'kwic', 'kwik', 'kwit', 'kwip', 'kwih', 'kyu', 'kyug', 'kyugg', 'kyugs', 'kyun', 'kyunj', 'kyunh', 'kyud', 'kyul', 'kyulg', 'kyulm', 'kyulb', 'kyuls', 'kyult', 'kyulp', 'kyulh', 'kyum', 'kyub', 'kyubs', 'kyus', 'kyuss', 'kyung', 'kyuj', 'kyuc', 'kyuk', 'kyut', 'kyup', 'kyuh', 'keu', 'keug', 'keugg', 'keugs', 'keun', 'keunj', 'keunh', 'keud', 'keul', 'keulg', 'keulm', 'keulb', 'keuls', 'keult', 'keulp', 'keulh', 'keum', 'keub', 'keubs', 'keus', 'keuss', 'keung', 'keuj', 'keuc', 'keuk', 'keut', 'keup', 'keuh', 'kyi', 'kyig', 'kyigg', 'kyigs', 'kyin', 'kyinj', 'kyinh', 'kyid', 'kyil', 'kyilg', 'kyilm', 'kyilb', 'kyils', 'kyilt', 'kyilp', 'kyilh', 'kyim', 'kyib', 'kyibs', 'kyis', 'kyiss', 'kying', 'kyij', 'kyic', 'kyik', 'kyit', 'kyip', 'kyih', 'ki', 'kig', 'kigg', 'kigs', 'kin', 'kinj', 'kinh', 'kid', 'kil', 'kilg', 'kilm', 'kilb', 'kils', 'kilt', 'kilp', 'kilh', 'kim', 'kib', 'kibs', 'kis', 'kiss', 'king', 'kij', 'kic', 'kik', 'kit', 'kip', 'kih', 'ta', 'tag', 'tagg', 'tags', 'tan', 'tanj', 'tanh', 'tad', 'tal', 'talg', 'talm', 'talb', 'tals', 'talt', 'talp', 'talh', 'tam', 'tab', 'tabs', 'tas', 'tass', 'tang', 'taj', 'tac', 'tak', 'tat', 'tap', 'tah', 'tae', 'taeg', 'taegg', 'taegs', 'taen', 'taenj', 'taenh', 'taed', 'tael', 'taelg', 'taelm', 'taelb', 'taels', 'taelt', 'taelp', 'taelh', 'taem', 'taeb', 'taebs', 'taes', 'taess', 'taeng', 'taej', 'taec', 'taek', 'taet', 'taep', 'taeh', 'tya', 'tyag', 'tyagg', 'tyags', 'tyan', 'tyanj', 'tyanh', 'tyad'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d1.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d1.php
new file mode 100644
index 000000000..ea8455a0b
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d1.php
@@ -0,0 +1 @@
+<?php return ['tyal', 'tyalg', 'tyalm', 'tyalb', 'tyals', 'tyalt', 'tyalp', 'tyalh', 'tyam', 'tyab', 'tyabs', 'tyas', 'tyass', 'tyang', 'tyaj', 'tyac', 'tyak', 'tyat', 'tyap', 'tyah', 'tyae', 'tyaeg', 'tyaegg', 'tyaegs', 'tyaen', 'tyaenj', 'tyaenh', 'tyaed', 'tyael', 'tyaelg', 'tyaelm', 'tyaelb', 'tyaels', 'tyaelt', 'tyaelp', 'tyaelh', 'tyaem', 'tyaeb', 'tyaebs', 'tyaes', 'tyaess', 'tyaeng', 'tyaej', 'tyaec', 'tyaek', 'tyaet', 'tyaep', 'tyaeh', 'teo', 'teog', 'teogg', 'teogs', 'teon', 'teonj', 'teonh', 'teod', 'teol', 'teolg', 'teolm', 'teolb', 'teols', 'teolt', 'teolp', 'teolh', 'teom', 'teob', 'teobs', 'teos', 'teoss', 'teong', 'teoj', 'teoc', 'teok', 'teot', 'teop', 'teoh', 'te', 'teg', 'tegg', 'tegs', 'ten', 'tenj', 'tenh', 'ted', 'tel', 'telg', 'telm', 'telb', 'tels', 'telt', 'telp', 'telh', 'tem', 'teb', 'tebs', 'tes', 'tess', 'teng', 'tej', 'tec', 'tek', 'tet', 'tep', 'teh', 'tyeo', 'tyeog', 'tyeogg', 'tyeogs', 'tyeon', 'tyeonj', 'tyeonh', 'tyeod', 'tyeol', 'tyeolg', 'tyeolm', 'tyeolb', 'tyeols', 'tyeolt', 'tyeolp', 'tyeolh', 'tyeom', 'tyeob', 'tyeobs', 'tyeos', 'tyeoss', 'tyeong', 'tyeoj', 'tyeoc', 'tyeok', 'tyeot', 'tyeop', 'tyeoh', 'tye', 'tyeg', 'tyegg', 'tyegs', 'tyen', 'tyenj', 'tyenh', 'tyed', 'tyel', 'tyelg', 'tyelm', 'tyelb', 'tyels', 'tyelt', 'tyelp', 'tyelh', 'tyem', 'tyeb', 'tyebs', 'tyes', 'tyess', 'tyeng', 'tyej', 'tyec', 'tyek', 'tyet', 'tyep', 'tyeh', 'to', 'tog', 'togg', 'togs', 'ton', 'tonj', 'tonh', 'tod', 'tol', 'tolg', 'tolm', 'tolb', 'tols', 'tolt', 'tolp', 'tolh', 'tom', 'tob', 'tobs', 'tos', 'toss', 'tong', 'toj', 'toc', 'tok', 'tot', 'top', 'toh', 'twa', 'twag', 'twagg', 'twags', 'twan', 'twanj', 'twanh', 'twad', 'twal', 'twalg', 'twalm', 'twalb', 'twals', 'twalt', 'twalp', 'twalh', 'twam', 'twab', 'twabs', 'twas', 'twass', 'twang', 'twaj', 'twac', 'twak', 'twat', 'twap', 'twah', 'twae', 'twaeg', 'twaegg', 'twaegs', 'twaen', 'twaenj', 'twaenh', 'twaed', 'twael', 'twaelg', 'twaelm', 'twaelb', 'twaels', 'twaelt', 'twaelp', 'twaelh', 'twaem', 'twaeb', 'twaebs', 'twaes', 'twaess', 'twaeng', 'twaej', 'twaec', 'twaek', 'twaet', 'twaep', 'twaeh', 'toe', 'toeg', 'toegg', 'toegs', 'toen', 'toenj', 'toenh', 'toed', 'toel', 'toelg', 'toelm', 'toelb'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d2.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d2.php
new file mode 100644
index 000000000..f18334d3c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d2.php
@@ -0,0 +1 @@
+<?php return ['toels', 'toelt', 'toelp', 'toelh', 'toem', 'toeb', 'toebs', 'toes', 'toess', 'toeng', 'toej', 'toec', 'toek', 'toet', 'toep', 'toeh', 'tyo', 'tyog', 'tyogg', 'tyogs', 'tyon', 'tyonj', 'tyonh', 'tyod', 'tyol', 'tyolg', 'tyolm', 'tyolb', 'tyols', 'tyolt', 'tyolp', 'tyolh', 'tyom', 'tyob', 'tyobs', 'tyos', 'tyoss', 'tyong', 'tyoj', 'tyoc', 'tyok', 'tyot', 'tyop', 'tyoh', 'tu', 'tug', 'tugg', 'tugs', 'tun', 'tunj', 'tunh', 'tud', 'tul', 'tulg', 'tulm', 'tulb', 'tuls', 'tult', 'tulp', 'tulh', 'tum', 'tub', 'tubs', 'tus', 'tuss', 'tung', 'tuj', 'tuc', 'tuk', 'tut', 'tup', 'tuh', 'tweo', 'tweog', 'tweogg', 'tweogs', 'tweon', 'tweonj', 'tweonh', 'tweod', 'tweol', 'tweolg', 'tweolm', 'tweolb', 'tweols', 'tweolt', 'tweolp', 'tweolh', 'tweom', 'tweob', 'tweobs', 'tweos', 'tweoss', 'tweong', 'tweoj', 'tweoc', 'tweok', 'tweot', 'tweop', 'tweoh', 'twe', 'tweg', 'twegg', 'twegs', 'twen', 'twenj', 'twenh', 'twed', 'twel', 'twelg', 'twelm', 'twelb', 'twels', 'twelt', 'twelp', 'twelh', 'twem', 'tweb', 'twebs', 'twes', 'twess', 'tweng', 'twej', 'twec', 'twek', 'twet', 'twep', 'tweh', 'twi', 'twig', 'twigg', 'twigs', 'twin', 'twinj', 'twinh', 'twid', 'twil', 'twilg', 'twilm', 'twilb', 'twils', 'twilt', 'twilp', 'twilh', 'twim', 'twib', 'twibs', 'twis', 'twiss', 'twing', 'twij', 'twic', 'twik', 'twit', 'twip', 'twih', 'tyu', 'tyug', 'tyugg', 'tyugs', 'tyun', 'tyunj', 'tyunh', 'tyud', 'tyul', 'tyulg', 'tyulm', 'tyulb', 'tyuls', 'tyult', 'tyulp', 'tyulh', 'tyum', 'tyub', 'tyubs', 'tyus', 'tyuss', 'tyung', 'tyuj', 'tyuc', 'tyuk', 'tyut', 'tyup', 'tyuh', 'teu', 'teug', 'teugg', 'teugs', 'teun', 'teunj', 'teunh', 'teud', 'teul', 'teulg', 'teulm', 'teulb', 'teuls', 'teult', 'teulp', 'teulh', 'teum', 'teub', 'teubs', 'teus', 'teuss', 'teung', 'teuj', 'teuc', 'teuk', 'teut', 'teup', 'teuh', 'tyi', 'tyig', 'tyigg', 'tyigs', 'tyin', 'tyinj', 'tyinh', 'tyid', 'tyil', 'tyilg', 'tyilm', 'tyilb', 'tyils', 'tyilt', 'tyilp', 'tyilh', 'tyim', 'tyib', 'tyibs', 'tyis', 'tyiss', 'tying', 'tyij', 'tyic', 'tyik', 'tyit', 'tyip', 'tyih', 'ti', 'tig', 'tigg', 'tigs', 'tin', 'tinj', 'tinh', 'tid', 'til', 'tilg', 'tilm', 'tilb', 'tils', 'tilt', 'tilp', 'tilh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d3.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d3.php
new file mode 100644
index 000000000..5f73d8457
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d3.php
@@ -0,0 +1 @@
+<?php return ['tim', 'tib', 'tibs', 'tis', 'tiss', 'ting', 'tij', 'tic', 'tik', 'tit', 'tip', 'tih', 'pa', 'pag', 'pagg', 'pags', 'pan', 'panj', 'panh', 'pad', 'pal', 'palg', 'palm', 'palb', 'pals', 'palt', 'palp', 'palh', 'pam', 'pab', 'pabs', 'pas', 'pass', 'pang', 'paj', 'pac', 'pak', 'pat', 'pap', 'pah', 'pae', 'paeg', 'paegg', 'paegs', 'paen', 'paenj', 'paenh', 'paed', 'pael', 'paelg', 'paelm', 'paelb', 'paels', 'paelt', 'paelp', 'paelh', 'paem', 'paeb', 'paebs', 'paes', 'paess', 'paeng', 'paej', 'paec', 'paek', 'paet', 'paep', 'paeh', 'pya', 'pyag', 'pyagg', 'pyags', 'pyan', 'pyanj', 'pyanh', 'pyad', 'pyal', 'pyalg', 'pyalm', 'pyalb', 'pyals', 'pyalt', 'pyalp', 'pyalh', 'pyam', 'pyab', 'pyabs', 'pyas', 'pyass', 'pyang', 'pyaj', 'pyac', 'pyak', 'pyat', 'pyap', 'pyah', 'pyae', 'pyaeg', 'pyaegg', 'pyaegs', 'pyaen', 'pyaenj', 'pyaenh', 'pyaed', 'pyael', 'pyaelg', 'pyaelm', 'pyaelb', 'pyaels', 'pyaelt', 'pyaelp', 'pyaelh', 'pyaem', 'pyaeb', 'pyaebs', 'pyaes', 'pyaess', 'pyaeng', 'pyaej', 'pyaec', 'pyaek', 'pyaet', 'pyaep', 'pyaeh', 'peo', 'peog', 'peogg', 'peogs', 'peon', 'peonj', 'peonh', 'peod', 'peol', 'peolg', 'peolm', 'peolb', 'peols', 'peolt', 'peolp', 'peolh', 'peom', 'peob', 'peobs', 'peos', 'peoss', 'peong', 'peoj', 'peoc', 'peok', 'peot', 'peop', 'peoh', 'pe', 'peg', 'pegg', 'pegs', 'pen', 'penj', 'penh', 'ped', 'pel', 'pelg', 'pelm', 'pelb', 'pels', 'pelt', 'pelp', 'pelh', 'pem', 'peb', 'pebs', 'pes', 'pess', 'peng', 'pej', 'pec', 'pek', 'pet', 'pep', 'peh', 'pyeo', 'pyeog', 'pyeogg', 'pyeogs', 'pyeon', 'pyeonj', 'pyeonh', 'pyeod', 'pyeol', 'pyeolg', 'pyeolm', 'pyeolb', 'pyeols', 'pyeolt', 'pyeolp', 'pyeolh', 'pyeom', 'pyeob', 'pyeobs', 'pyeos', 'pyeoss', 'pyeong', 'pyeoj', 'pyeoc', 'pyeok', 'pyeot', 'pyeop', 'pyeoh', 'pye', 'pyeg', 'pyegg', 'pyegs', 'pyen', 'pyenj', 'pyenh', 'pyed', 'pyel', 'pyelg', 'pyelm', 'pyelb', 'pyels', 'pyelt', 'pyelp', 'pyelh', 'pyem', 'pyeb', 'pyebs', 'pyes', 'pyess', 'pyeng', 'pyej', 'pyec', 'pyek', 'pyet', 'pyep', 'pyeh', 'po', 'pog', 'pogg', 'pogs', 'pon', 'ponj', 'ponh', 'pod', 'pol', 'polg', 'polm', 'polb', 'pols', 'polt', 'polp', 'polh', 'pom', 'pob', 'pobs', 'pos'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d4.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d4.php
new file mode 100644
index 000000000..21bdc3532
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d4.php
@@ -0,0 +1 @@
+<?php return ['poss', 'pong', 'poj', 'poc', 'pok', 'pot', 'pop', 'poh', 'pwa', 'pwag', 'pwagg', 'pwags', 'pwan', 'pwanj', 'pwanh', 'pwad', 'pwal', 'pwalg', 'pwalm', 'pwalb', 'pwals', 'pwalt', 'pwalp', 'pwalh', 'pwam', 'pwab', 'pwabs', 'pwas', 'pwass', 'pwang', 'pwaj', 'pwac', 'pwak', 'pwat', 'pwap', 'pwah', 'pwae', 'pwaeg', 'pwaegg', 'pwaegs', 'pwaen', 'pwaenj', 'pwaenh', 'pwaed', 'pwael', 'pwaelg', 'pwaelm', 'pwaelb', 'pwaels', 'pwaelt', 'pwaelp', 'pwaelh', 'pwaem', 'pwaeb', 'pwaebs', 'pwaes', 'pwaess', 'pwaeng', 'pwaej', 'pwaec', 'pwaek', 'pwaet', 'pwaep', 'pwaeh', 'poe', 'poeg', 'poegg', 'poegs', 'poen', 'poenj', 'poenh', 'poed', 'poel', 'poelg', 'poelm', 'poelb', 'poels', 'poelt', 'poelp', 'poelh', 'poem', 'poeb', 'poebs', 'poes', 'poess', 'poeng', 'poej', 'poec', 'poek', 'poet', 'poep', 'poeh', 'pyo', 'pyog', 'pyogg', 'pyogs', 'pyon', 'pyonj', 'pyonh', 'pyod', 'pyol', 'pyolg', 'pyolm', 'pyolb', 'pyols', 'pyolt', 'pyolp', 'pyolh', 'pyom', 'pyob', 'pyobs', 'pyos', 'pyoss', 'pyong', 'pyoj', 'pyoc', 'pyok', 'pyot', 'pyop', 'pyoh', 'pu', 'pug', 'pugg', 'pugs', 'pun', 'punj', 'punh', 'pud', 'pul', 'pulg', 'pulm', 'pulb', 'puls', 'pult', 'pulp', 'pulh', 'pum', 'pub', 'pubs', 'pus', 'puss', 'pung', 'puj', 'puc', 'puk', 'put', 'pup', 'puh', 'pweo', 'pweog', 'pweogg', 'pweogs', 'pweon', 'pweonj', 'pweonh', 'pweod', 'pweol', 'pweolg', 'pweolm', 'pweolb', 'pweols', 'pweolt', 'pweolp', 'pweolh', 'pweom', 'pweob', 'pweobs', 'pweos', 'pweoss', 'pweong', 'pweoj', 'pweoc', 'pweok', 'pweot', 'pweop', 'pweoh', 'pwe', 'pweg', 'pwegg', 'pwegs', 'pwen', 'pwenj', 'pwenh', 'pwed', 'pwel', 'pwelg', 'pwelm', 'pwelb', 'pwels', 'pwelt', 'pwelp', 'pwelh', 'pwem', 'pweb', 'pwebs', 'pwes', 'pwess', 'pweng', 'pwej', 'pwec', 'pwek', 'pwet', 'pwep', 'pweh', 'pwi', 'pwig', 'pwigg', 'pwigs', 'pwin', 'pwinj', 'pwinh', 'pwid', 'pwil', 'pwilg', 'pwilm', 'pwilb', 'pwils', 'pwilt', 'pwilp', 'pwilh', 'pwim', 'pwib', 'pwibs', 'pwis', 'pwiss', 'pwing', 'pwij', 'pwic', 'pwik', 'pwit', 'pwip', 'pwih', 'pyu', 'pyug', 'pyugg', 'pyugs', 'pyun', 'pyunj', 'pyunh', 'pyud', 'pyul', 'pyulg', 'pyulm', 'pyulb', 'pyuls', 'pyult', 'pyulp', 'pyulh', 'pyum', 'pyub', 'pyubs', 'pyus', 'pyuss', 'pyung', 'pyuj', 'pyuc'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d5.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d5.php
new file mode 100644
index 000000000..871f7964c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d5.php
@@ -0,0 +1 @@
+<?php return ['pyuk', 'pyut', 'pyup', 'pyuh', 'peu', 'peug', 'peugg', 'peugs', 'peun', 'peunj', 'peunh', 'peud', 'peul', 'peulg', 'peulm', 'peulb', 'peuls', 'peult', 'peulp', 'peulh', 'peum', 'peub', 'peubs', 'peus', 'peuss', 'peung', 'peuj', 'peuc', 'peuk', 'peut', 'peup', 'peuh', 'pyi', 'pyig', 'pyigg', 'pyigs', 'pyin', 'pyinj', 'pyinh', 'pyid', 'pyil', 'pyilg', 'pyilm', 'pyilb', 'pyils', 'pyilt', 'pyilp', 'pyilh', 'pyim', 'pyib', 'pyibs', 'pyis', 'pyiss', 'pying', 'pyij', 'pyic', 'pyik', 'pyit', 'pyip', 'pyih', 'pi', 'pig', 'pigg', 'pigs', 'pin', 'pinj', 'pinh', 'pid', 'pil', 'pilg', 'pilm', 'pilb', 'pils', 'pilt', 'pilp', 'pilh', 'pim', 'pib', 'pibs', 'pis', 'piss', 'ping', 'pij', 'pic', 'pik', 'pit', 'pip', 'pih', 'ha', 'hag', 'hagg', 'hags', 'han', 'hanj', 'hanh', 'had', 'hal', 'halg', 'halm', 'halb', 'hals', 'halt', 'halp', 'halh', 'ham', 'hab', 'habs', 'has', 'hass', 'hang', 'haj', 'hac', 'hak', 'hat', 'hap', 'hah', 'hae', 'haeg', 'haegg', 'haegs', 'haen', 'haenj', 'haenh', 'haed', 'hael', 'haelg', 'haelm', 'haelb', 'haels', 'haelt', 'haelp', 'haelh', 'haem', 'haeb', 'haebs', 'haes', 'haess', 'haeng', 'haej', 'haec', 'haek', 'haet', 'haep', 'haeh', 'hya', 'hyag', 'hyagg', 'hyags', 'hyan', 'hyanj', 'hyanh', 'hyad', 'hyal', 'hyalg', 'hyalm', 'hyalb', 'hyals', 'hyalt', 'hyalp', 'hyalh', 'hyam', 'hyab', 'hyabs', 'hyas', 'hyass', 'hyang', 'hyaj', 'hyac', 'hyak', 'hyat', 'hyap', 'hyah', 'hyae', 'hyaeg', 'hyaegg', 'hyaegs', 'hyaen', 'hyaenj', 'hyaenh', 'hyaed', 'hyael', 'hyaelg', 'hyaelm', 'hyaelb', 'hyaels', 'hyaelt', 'hyaelp', 'hyaelh', 'hyaem', 'hyaeb', 'hyaebs', 'hyaes', 'hyaess', 'hyaeng', 'hyaej', 'hyaec', 'hyaek', 'hyaet', 'hyaep', 'hyaeh', 'heo', 'heog', 'heogg', 'heogs', 'heon', 'heonj', 'heonh', 'heod', 'heol', 'heolg', 'heolm', 'heolb', 'heols', 'heolt', 'heolp', 'heolh', 'heom', 'heob', 'heobs', 'heos', 'heoss', 'heong', 'heoj', 'heoc', 'heok', 'heot', 'heop', 'heoh', 'he', 'heg', 'hegg', 'hegs', 'hen', 'henj', 'henh', 'hed', 'hel', 'helg', 'helm', 'helb', 'hels', 'helt', 'help', 'helh', 'hem', 'heb', 'hebs', 'hes', 'hess', 'heng', 'hej', 'hec', 'hek', 'het', 'hep', 'heh'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d6.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d6.php
new file mode 100644
index 000000000..6b6b6bef9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d6.php
@@ -0,0 +1 @@
+<?php return ['hyeo', 'hyeog', 'hyeogg', 'hyeogs', 'hyeon', 'hyeonj', 'hyeonh', 'hyeod', 'hyeol', 'hyeolg', 'hyeolm', 'hyeolb', 'hyeols', 'hyeolt', 'hyeolp', 'hyeolh', 'hyeom', 'hyeob', 'hyeobs', 'hyeos', 'hyeoss', 'hyeong', 'hyeoj', 'hyeoc', 'hyeok', 'hyeot', 'hyeop', 'hyeoh', 'hye', 'hyeg', 'hyegg', 'hyegs', 'hyen', 'hyenj', 'hyenh', 'hyed', 'hyel', 'hyelg', 'hyelm', 'hyelb', 'hyels', 'hyelt', 'hyelp', 'hyelh', 'hyem', 'hyeb', 'hyebs', 'hyes', 'hyess', 'hyeng', 'hyej', 'hyec', 'hyek', 'hyet', 'hyep', 'hyeh', 'ho', 'hog', 'hogg', 'hogs', 'hon', 'honj', 'honh', 'hod', 'hol', 'holg', 'holm', 'holb', 'hols', 'holt', 'holp', 'holh', 'hom', 'hob', 'hobs', 'hos', 'hoss', 'hong', 'hoj', 'hoc', 'hok', 'hot', 'hop', 'hoh', 'hwa', 'hwag', 'hwagg', 'hwags', 'hwan', 'hwanj', 'hwanh', 'hwad', 'hwal', 'hwalg', 'hwalm', 'hwalb', 'hwals', 'hwalt', 'hwalp', 'hwalh', 'hwam', 'hwab', 'hwabs', 'hwas', 'hwass', 'hwang', 'hwaj', 'hwac', 'hwak', 'hwat', 'hwap', 'hwah', 'hwae', 'hwaeg', 'hwaegg', 'hwaegs', 'hwaen', 'hwaenj', 'hwaenh', 'hwaed', 'hwael', 'hwaelg', 'hwaelm', 'hwaelb', 'hwaels', 'hwaelt', 'hwaelp', 'hwaelh', 'hwaem', 'hwaeb', 'hwaebs', 'hwaes', 'hwaess', 'hwaeng', 'hwaej', 'hwaec', 'hwaek', 'hwaet', 'hwaep', 'hwaeh', 'hoe', 'hoeg', 'hoegg', 'hoegs', 'hoen', 'hoenj', 'hoenh', 'hoed', 'hoel', 'hoelg', 'hoelm', 'hoelb', 'hoels', 'hoelt', 'hoelp', 'hoelh', 'hoem', 'hoeb', 'hoebs', 'hoes', 'hoess', 'hoeng', 'hoej', 'hoec', 'hoek', 'hoet', 'hoep', 'hoeh', 'hyo', 'hyog', 'hyogg', 'hyogs', 'hyon', 'hyonj', 'hyonh', 'hyod', 'hyol', 'hyolg', 'hyolm', 'hyolb', 'hyols', 'hyolt', 'hyolp', 'hyolh', 'hyom', 'hyob', 'hyobs', 'hyos', 'hyoss', 'hyong', 'hyoj', 'hyoc', 'hyok', 'hyot', 'hyop', 'hyoh', 'hu', 'hug', 'hugg', 'hugs', 'hun', 'hunj', 'hunh', 'hud', 'hul', 'hulg', 'hulm', 'hulb', 'huls', 'hult', 'hulp', 'hulh', 'hum', 'hub', 'hubs', 'hus', 'huss', 'hung', 'huj', 'huc', 'huk', 'hut', 'hup', 'huh', 'hweo', 'hweog', 'hweogg', 'hweogs', 'hweon', 'hweonj', 'hweonh', 'hweod', 'hweol', 'hweolg', 'hweolm', 'hweolb', 'hweols', 'hweolt', 'hweolp', 'hweolh', 'hweom', 'hweob', 'hweobs', 'hweos', 'hweoss', 'hweong', 'hweoj', 'hweoc', 'hweok', 'hweot', 'hweop', 'hweoh', 'hwe', 'hweg', 'hwegg', 'hwegs'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0d7.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d7.php
new file mode 100644
index 000000000..97835b005
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0d7.php
@@ -0,0 +1 @@
+<?php return ['hwen', 'hwenj', 'hwenh', 'hwed', 'hwel', 'hwelg', 'hwelm', 'hwelb', 'hwels', 'hwelt', 'hwelp', 'hwelh', 'hwem', 'hweb', 'hwebs', 'hwes', 'hwess', 'hweng', 'hwej', 'hwec', 'hwek', 'hwet', 'hwep', 'hweh', 'hwi', 'hwig', 'hwigg', 'hwigs', 'hwin', 'hwinj', 'hwinh', 'hwid', 'hwil', 'hwilg', 'hwilm', 'hwilb', 'hwils', 'hwilt', 'hwilp', 'hwilh', 'hwim', 'hwib', 'hwibs', 'hwis', 'hwiss', 'hwing', 'hwij', 'hwic', 'hwik', 'hwit', 'hwip', 'hwih', 'hyu', 'hyug', 'hyugg', 'hyugs', 'hyun', 'hyunj', 'hyunh', 'hyud', 'hyul', 'hyulg', 'hyulm', 'hyulb', 'hyuls', 'hyult', 'hyulp', 'hyulh', 'hyum', 'hyub', 'hyubs', 'hyus', 'hyuss', 'hyung', 'hyuj', 'hyuc', 'hyuk', 'hyut', 'hyup', 'hyuh', 'heu', 'heug', 'heugg', 'heugs', 'heun', 'heunj', 'heunh', 'heud', 'heul', 'heulg', 'heulm', 'heulb', 'heuls', 'heult', 'heulp', 'heulh', 'heum', 'heub', 'heubs', 'heus', 'heuss', 'heung', 'heuj', 'heuc', 'heuk', 'heut', 'heup', 'heuh', 'hyi', 'hyig', 'hyigg', 'hyigs', 'hyin', 'hyinj', 'hyinh', 'hyid', 'hyil', 'hyilg', 'hyilm', 'hyilb', 'hyils', 'hyilt', 'hyilp', 'hyilh', 'hyim', 'hyib', 'hyibs', 'hyis', 'hyiss', 'hying', 'hyij', 'hyic', 'hyik', 'hyit', 'hyip', 'hyih', 'hi', 'hig', 'higg', 'higs', 'hin', 'hinj', 'hinh', 'hid', 'hil', 'hilg', 'hilm', 'hilb', 'hils', 'hilt', 'hilp', 'hilh', 'him', 'hib', 'hibs', 'his', 'hiss', 'hing', 'hij', 'hic', 'hik', 'hit', 'hip', 'hih', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0f9.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0f9.php
new file mode 100644
index 000000000..d0b4241cd
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0f9.php
@@ -0,0 +1 @@
+<?php return ['Kay ', 'Kayng ', 'Ke ', 'Ko ', 'Kol ', 'Koc ', 'Kwi ', 'Kwi ', 'Kyun ', 'Kul ', 'Kum ', 'Na ', 'Na ', 'Na ', 'La ', 'Na ', 'Na ', 'Na ', 'Na ', 'Na ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nam ', 'Nam ', 'Nam ', 'Nam ', 'Nap ', 'Nap ', 'Nap ', 'Nang ', 'Nang ', 'Nang ', 'Nang ', 'Nang ', 'Nay ', 'Nayng ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Non ', 'Nong ', 'Nong ', 'Nong ', 'Nong ', 'Noy ', 'Noy ', 'Noy ', 'Noy ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nuk ', 'Nuk ', 'Num ', 'Nung ', 'Nung ', 'Nung ', 'Nung ', 'Nung ', 'Twu ', 'La ', 'Lak ', 'Lak ', 'Lan ', 'Lyeng ', 'Lo ', 'Lyul ', 'Li ', 'Pey ', 'Pen ', 'Pyen ', 'Pwu ', 'Pwul ', 'Pi ', 'Sak ', 'Sak ', 'Sam ', 'Sayk ', 'Sayng ', 'Sep ', 'Sey ', 'Sway ', 'Sin ', 'Sim ', 'Sip ', 'Ya ', 'Yak ', 'Yak ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Yek ', 'Yek ', 'Yek ', 'Yek ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yem ', 'Yem ', 'Yem ', 'Yem ', 'Yem ', 'Yep ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yey ', 'Yey ', 'Yey ', 'Yey ', 'O ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yong ', 'Wun ', 'Wen ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yuk ', 'Yuk ', 'Yuk ', 'Yun ', 'Yun ', 'Yun ', 'Yun ', 'Yul ', 'Yul ', 'Yul ', 'Yul ', 'Yung ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'Ik ', 'Ik ', 'In ', 'In ', 'In ', 'In ', 'In ', 'In ', 'In ', 'Im ', 'Im ', 'Im ', 'Ip ', 'Ip ', 'Ip ', 'Cang ', 'Cek ', 'Ci ', 'Cip ', 'Cha ', 'Chek '];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0fa.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fa.php
new file mode 100644
index 000000000..c5afa60ba
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fa.php
@@ -0,0 +1 @@
+<?php return ['Chey ', 'Thak ', 'Thak ', 'Thang ', 'Thayk ', 'Thong ', 'Pho ', 'Phok ', 'Hang ', 'Hang ', 'Hyen ', 'Hwak ', 'Wu ', 'Huo ', '[?] ', '[?] ', 'Zhong ', '[?] ', 'Qing ', '[?] ', '[?] ', 'Xi ', 'Zhu ', 'Yi ', 'Li ', 'Shen ', 'Xiang ', 'Fu ', 'Jing ', 'Jing ', 'Yu ', '[?] ', 'Hagi ', '[?] ', 'Zhu ', '[?] ', '[?] ', 'Yi ', 'Du ', '[?] ', '[?] ', '[?] ', 'Fan ', 'Si ', 'Guan ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0fb.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fb.php
new file mode 100644
index 000000000..af2ac33b9
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fb.php
@@ -0,0 +1 @@
+<?php return ['ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'mn', 'me', 'mi', 'vn', 'mkh', '[?]', '[?]', '[?]', '[?]', '[?]', 'yi', '', 'ay', '`', '', 'd', 'h', 'k', 'l', 'm', 'm', 't', '+', 'sh', 's', 'sh', 's', 'a', 'a', '', 'b', 'g', 'd', 'h', 'v', 'z', '[?]', 't', 'y', 'k', 'k', 'l', '[?]', 'l', '[?]', 'n', 'n', '[?]', 'p', 'p', '[?]', 'ts', 'ts', 'r', 'sh', 't', 'vo', 'b', 'k', 'p', 'l', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0fc.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fc.php
new file mode 100644
index 000000000..7023059af
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fc.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0fd.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fd.php
new file mode 100644
index 000000000..09930de56
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fd.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '{Salla}', '{Qala}', 'Allah', 'Akbar', 'Mohammed', 'SL`M', 'Rasul', '{Alayhi}', '{WaSallam}', '{Salla}', '{Salla Llahu Alayhi WaSallam}', '{Jalla Jalalahu}', 'Rial ', '{Bismillah Ar-Rahman Ar-Rahimi}', '[?]', '[?]'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0fe.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fe.php
new file mode 100644
index 000000000..33cfd8826
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0fe.php
@@ -0,0 +1 @@
+<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '~', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '..', '--', '-', '_', '_', '(', ') ', '{', '} ', '[', '] ', '[(', ')] ', '<<', '>> ', '<', '> ', '[', '] ', '{', '}', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', ',', ',', '.', '', ';', ':', '?', '!', '-', '(', ')', '{', '}', '{', '}', '#', '&', '*', '+', '-', '<', '>', '=', '', '\\', '$', '%', '@', '[?]', '[?]', '[?]', '[?]', '', '', '', '[?]', '', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x0ff.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ff.php
new file mode 100644
index 000000000..b3a15398c
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x0ff.php
@@ -0,0 +1 @@
+<?php return ['[?]', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '[?]', '[?]', '.', '[', ']', ',', '*', 'wo', 'a', 'i', 'u', 'e', 'o', 'ya', 'yu', 'yo', 'tu', '+', 'a', 'i', 'u', 'e', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'n', ':', ';', '', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'dd', 'r', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'rh', 'm', 'b', 'bb', 'bs', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', '[?]', '[?]', '[?]', 'a', 'ae', 'ya', 'yae', 'eo', 'e', '[?]', '[?]', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', '[?]', '[?]', 'yo', 'u', 'weo', 'we', 'wi', 'yu', '[?]', '[?]', 'eu', 'yi', 'i', '[?]', '[?]', '[?]', '/C', 'PS', '!', '-', '|', 'Y=', 'W=', '[?]', '|', '-', '|', '-', '|', '#', 'O', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '{', '|', '}', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x1d4.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d4.php
new file mode 100644
index 000000000..ad8d3b257
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d4.php
@@ -0,0 +1 @@
+<?php return ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 26 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 52 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 78 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 104 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 130 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 156 => 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 181 => 'Z', 182 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 208 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 234 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x1d5.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d5.php
new file mode 100644
index 000000000..a2a9b908d
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d5.php
@@ -0,0 +1,4 @@
+<?php
+
+return [
+    0 => 'w', 'x', 'y', 'z', 4 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 30 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 56 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 82 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 108 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 134 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 160 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 186 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 212 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 238 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x1d6.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d6.php
new file mode 100644
index 000000000..315ef5e40
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d6.php
@@ -0,0 +1 @@
+<?php return ['s', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'i', 'j', '', '', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lamda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Theta', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'nabla', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lamda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigma', 'sigma', 'tai', 'upsilon', 'phi', 'chi', 'psi', 'omega', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x1d7.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d7.php
new file mode 100644
index 000000000..d2b885c36
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x1d7.php
@@ -0,0 +1 @@
+<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
diff --git a/includes/libraries/anti-xss-master/src/voku/helper/data/x1f1.php b/includes/libraries/anti-xss-master/src/voku/helper/data/x1f1.php
new file mode 100644
index 000000000..c0f4cfa46
--- /dev/null
+++ b/includes/libraries/anti-xss-master/src/voku/helper/data/x1f1.php
@@ -0,0 +1,2 @@
+<?php return ['0.', '0,', '1,', '2,', '3,', '4,', '5,', '6,', '7,', '8,', '9,', '', '', '', '', '', '(A)', '(B)', '(C)', '(D)', '(E)', '(F)', '(G)', '(H)', '(I)', '(J)', '(K)',   // 0x1a
+    '(L)', '(M)', '(N)', '(O)', '(P)', '(Q)', '(R)', '(S)', '(T)', '(U)', '(V)', '(W)', '(X)', '(Y)', '(Z)', 48 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 80 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 112 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 230 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ];
diff --git a/sources/core.php b/sources/core.php
index 16e8d5b69..59d7b12ee 100755
--- a/sources/core.php
+++ b/sources/core.php
@@ -46,10 +46,12 @@ if (file_exists('../includes/config/tp.config.php')) {
  * @return string refresh page to url
  */
 function redirect($url)
 {
     // Load AntiXSS
+    include_once '../includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
+    include_once '../includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
     include_once '../includes/libraries/anti-xss-master/src/voku/helper/AntiXSS.php';
     $antiXss = new voku\helper\AntiXSS();
     if (! headers_sent()) {    //If headers not sent yet... then do php redirect
         header('Location: ' . $antiXss->xss_clean($url));
     }
diff --git a/sources/identify.php b/sources/identify.php
index e94d1fbe4..3ab6ba711 100755
--- a/sources/identify.php
+++ b/sources/identify.php
@@ -186,10 +186,12 @@ function identifyUser(string $sentData, array $SETTINGS): bool
     
     header('Content-type: text/html; charset=utf-8');
     error_reporting(E_ERROR);
 
     // Load AntiXSS
+    include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
+    include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
     include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/AntiXSS.php';
     $antiXss = new voku\helper\AntiXSS();
 
     // Load superGlobals
     include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/protect/SuperGlobal/SuperGlobal.php';
diff --git a/sources/items.queries.php b/sources/items.queries.php
index 670c17f24..1a902ed98 100755
--- a/sources/items.queries.php
+++ b/sources/items.queries.php
@@ -76,10 +76,16 @@ if (defined('TP_PW_COMPLEXITY') === false) {
             TP_PW_STRENGTH_5 => array(TP_PW_STRENGTH_5, langHdl('complex_level5'), 'fas fa-thermometer-full text-success'),
         )
     );
 }
 
+// Load AntiXSS
+include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
+include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
+include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/AntiXSS.php';
+$antiXss = new voku\helper\AntiXSS();
+
 // Connect to mysql server
 require_once $SETTINGS['cpassman_dir'] . '/includes/libraries/Database/Meekrodb/db.class.php';
 if (defined('DB_PASSWD_CLEAR') === false) {
     define('DB_PASSWD_CLEAR', defuseReturnDecrypted(DB_PASSWD, $SETTINGS));
 }
@@ -193,11 +199,11 @@ if (is_null($inputData['type']) === false) {
 
             if (is_array($dataReceived) === true && count($dataReceived) > 0) {
                 // Prepare variables
                 $post_anyone_can_modify = filter_var($dataReceived['anyone_can_modify'], FILTER_SANITIZE_NUMBER_INT);
                 $post_complexity_level = filter_var($dataReceived['complexity_level'], FILTER_SANITIZE_NUMBER_INT);
-                $post_description = ($dataReceived['description']);
+                $post_description = $antiXss->xss_clean($dataReceived['description']);
                 $post_diffusion_list = filter_var(
                     $dataReceived['diffusion_list'],
                     FILTER_SANITIZE_STRING
                 );
                 $post_diffusion_list = $post_diffusion_list !== false ? json_decode($post_diffusion_list) : '';
@@ -896,11 +902,11 @@ if (is_null($inputData['type']) === false) {
                 );
                 $post_fields = (filter_var_array(
                     $dataReceived['fields'],
                     FILTER_SANITIZE_STRING
                 ));
-                $post_description = ($dataReceived['description']);
+                $post_description = $antiXss->xss_clean($dataReceived['description']);
                 $post_fa_icon = filter_var(($dataReceived['fa_icon']), FILTER_SANITIZE_STRING);
 
                 //-> DO A SET OF CHECKS
                 // Perform a check in case of Read-Only user creating an item in his PF
                 if (

Vulnerable code:                 $post_description = ($dataReceived['description']);
                $post_description = ($dataReceived['description']);
Fixed code: <?php

declare(strict_types=1);

namespace voku\helper;

/**
 * ## 🇷🇺 Русским гражданам
 * В Украине сейчас идет война. Силами РФ наносятся удары по гражданской инфраструктуре в [Харькове][1], [Киеве][2], [Чернигове][3], [Сумах][4], [Ирпене][5] и десятках других городов. Гибнут люди - и гражданское население, и военные, в том числе российские призывники, которых бросили воевать. Чтобы лишить собственный народ доступа к информации, правительство РФ запретило называть войну войной, закрыло независимые СМИ и принимает сейчас ряд диктаторских законов. Эти законы призваны заткнуть рот всем, кто против войны. За обычный призыв к миру сейчас можно получить несколько лет тюрьмы.
 * Не молчите! Молчание - знак вашего согласия с политикой российского правительства.
 *  **Вы можете сделать выбор НЕ МОЛЧАТЬ.**
 * ---
 * ## 🇺🇸 To people of Russia
 * There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilian infrastructure in [Kharkiv][1], [Kyiv][2], [Chernihiv][3], [Sumy][4], [Irpin][5] and dozens of other cities. People are dying – both civilians and military servicemen, including Russian conscripts who were thrown into the fighting. In order to deprive its own people of access to information, the government of the Russian Federation has forbidden calling a war a war, shut down independent media and is passing a number of dictatorial laws. These laws are meant to silence all those who are against war. You can be jailed for multiple years for simply calling for peace.
 * Do not be silent! Silence is a sign that you accept the Russian government's policy.
 * **You can choose NOT TO BE SILENT.**
 * ---
 * - [1] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/P7K2MSZDGFMIJPDD7CI2GIROJI.jpg "Kharkiv under attack"
 * - [2] https://gdb.voanews.com/01bd0000-0aff-0242-fad0-08d9fc92c5b3_cx0_cy5_cw0_w1023_r1_s.jpg "Kyiv under attack"
 * - [3] https://ichef.bbci.co.uk/news/976/cpsprodpb/163DD/production/_123510119_hi074310744.jpg "Chernihiv under attack"
 * - [4] https://www.youtube.com/watch?v=8K-bkqKKf2A "Sumy under attack"
 * - [5] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/K4MTMLEHTRKGFK3GSKAT4GR3NE.jpg "Irpin under attack"
 *
 * @psalm-immutable
 */
final class ASCII
{
    //
    // INFO: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
    //

    const UZBEK_LANGUAGE_CODE = 'uz';

    const TURKMEN_LANGUAGE_CODE = 'tk';

    const THAI_LANGUAGE_CODE = 'th';

    const PASHTO_LANGUAGE_CODE = 'ps';

    const ORIYA_LANGUAGE_CODE = 'or';

    const MONGOLIAN_LANGUAGE_CODE = 'mn';

    const KOREAN_LANGUAGE_CODE = 'ko';

    const KIRGHIZ_LANGUAGE_CODE = 'ky';

    const ARMENIAN_LANGUAGE_CODE = 'hy';

    const BENGALI_LANGUAGE_CODE = 'bn';

    const BELARUSIAN_LANGUAGE_CODE = 'be';

    const AMHARIC_LANGUAGE_CODE = 'am';

    const JAPANESE_LANGUAGE_CODE = 'ja';

    const CHINESE_LANGUAGE_CODE = 'zh';

    const DUTCH_LANGUAGE_CODE = 'nl';

    const ITALIAN_LANGUAGE_CODE = 'it';

    const MACEDONIAN_LANGUAGE_CODE = 'mk';

    const PORTUGUESE_LANGUAGE_CODE = 'pt';

    const GREEKLISH_LANGUAGE_CODE = 'el__greeklish';

    const GREEK_LANGUAGE_CODE = 'el';

    const HINDI_LANGUAGE_CODE = 'hi';

    const SWEDISH_LANGUAGE_CODE = 'sv';

    const TURKISH_LANGUAGE_CODE = 'tr';

    const BULGARIAN_LANGUAGE_CODE = 'bg';

    const HUNGARIAN_LANGUAGE_CODE = 'hu';

    const MYANMAR_LANGUAGE_CODE = 'my';

    const CROATIAN_LANGUAGE_CODE = 'hr';

    const FINNISH_LANGUAGE_CODE = 'fi';

    const GEORGIAN_LANGUAGE_CODE = 'ka';

    const RUSSIAN_LANGUAGE_CODE = 'ru';

    const RUSSIAN_PASSPORT_2013_LANGUAGE_CODE = 'ru__passport_2013';

    const RUSSIAN_GOST_2000_B_LANGUAGE_CODE = 'ru__gost_2000_b';

    const UKRAINIAN_LANGUAGE_CODE = 'uk';

    const KAZAKH_LANGUAGE_CODE = 'kk';

    const CZECH_LANGUAGE_CODE = 'cs';

    const DANISH_LANGUAGE_CODE = 'da';

    const POLISH_LANGUAGE_CODE = 'pl';

    const ROMANIAN_LANGUAGE_CODE = 'ro';

    const ESPERANTO_LANGUAGE_CODE = 'eo';

    const ESTONIAN_LANGUAGE_CODE = 'et';

    const LATVIAN_LANGUAGE_CODE = 'lv';

    const LITHUANIAN_LANGUAGE_CODE = 'lt';

    const NORWEGIAN_LANGUAGE_CODE = 'no';

    const VIETNAMESE_LANGUAGE_CODE = 'vi';

    const ARABIC_LANGUAGE_CODE = 'ar';

    const PERSIAN_LANGUAGE_CODE = 'fa';

    const SERBIAN_LANGUAGE_CODE = 'sr';

    const SERBIAN_CYRILLIC_LANGUAGE_CODE = 'sr__cyr';

    const SERBIAN_LATIN_LANGUAGE_CODE = 'sr__lat';

    const AZERBAIJANI_LANGUAGE_CODE = 'az';

    const SLOVAK_LANGUAGE_CODE = 'sk';

    const FRENCH_LANGUAGE_CODE = 'fr';

    const FRENCH_AUSTRIAN_LANGUAGE_CODE = 'fr_at';

    const FRENCH_SWITZERLAND_LANGUAGE_CODE = 'fr_ch';

    const GERMAN_LANGUAGE_CODE = 'de';

    const GERMAN_AUSTRIAN_LANGUAGE_CODE = 'de_at';

    const GERMAN_SWITZERLAND_LANGUAGE_CODE = 'de_ch';

    const ENGLISH_LANGUAGE_CODE = 'en';

    const EXTRA_LATIN_CHARS_LANGUAGE_CODE = 'latin';

    const EXTRA_WHITESPACE_CHARS_LANGUAGE_CODE = ' ';

    const EXTRA_MSWORD_CHARS_LANGUAGE_CODE = 'msword';

    /**
     * @var array<string, array<string, string>>|null
     */
    private static $ASCII_MAPS;

    /**
     * @var array<string, array<string, string>>|null
     */
    private static $ASCII_MAPS_AND_EXTRAS;

    /**
     * @var array<string, array<string, string>>|null
     */
    private static $ASCII_EXTRAS;

    /**
     * @var array<string, int>|null
     */
    private static $ORD;

    /**
     * @var array<string, int>|null
     */
    private static $LANGUAGE_MAX_KEY;

    /**
     * url: https://en.wikipedia.org/wiki/Wikipedia:ASCII#ASCII_printable_characters
     *
     * @var string
     */
    private static $REGEX_ASCII = "[^\x09\x10\x13\x0A\x0D\x20-\x7E]";

    /**
     * bidirectional text chars
     *
     * url: https://www.w3.org/International/questions/qa-bidi-unicode-controls
     *
     * @var array<int, string>
     */
    private static $BIDI_UNI_CODE_CONTROLS_TABLE = [
        // LEFT-TO-RIGHT EMBEDDING (use -> dir = "ltr")
        8234 => "\xE2\x80\xAA",
        // RIGHT-TO-LEFT EMBEDDING (use -> dir = "rtl")
        8235 => "\xE2\x80\xAB",
        // POP DIRECTIONAL FORMATTING // (use -> </bdo>)
        8236 => "\xE2\x80\xAC",
        // LEFT-TO-RIGHT OVERRIDE // (use -> <bdo dir = "ltr">)
        8237 => "\xE2\x80\xAD",
        // RIGHT-TO-LEFT OVERRIDE // (use -> <bdo dir = "rtl">)
        8238 => "\xE2\x80\xAE",
        // LEFT-TO-RIGHT ISOLATE // (use -> dir = "ltr")
        8294 => "\xE2\x81\xA6",
        // RIGHT-TO-LEFT ISOLATE // (use -> dir = "rtl")
        8295 => "\xE2\x81\xA7",
        // FIRST STRONG ISOLATE // (use -> dir = "auto")
        8296 => "\xE2\x81\xA8",
        // POP DIRECTIONAL ISOLATE
        8297 => "\xE2\x81\xA9",
    ];

    /**
     * Get all languages from the constants "ASCII::.*LANGUAGE_CODE".
     *
     * @return string[]
     *
     * @phpstan-return array<string, string>
     */
    public static function getAllLanguages(): array
    {
        // init
        static $LANGUAGES = [];

        if ($LANGUAGES !== []) {
            return $LANGUAGES;
        }

        foreach ((new \ReflectionClass(__CLASS__))->getConstants() as $constant => $lang) {
            if (\strpos($constant, 'EXTRA') !== false) {
                $LANGUAGES[\strtolower($constant)] = $lang;
            } else {
                $LANGUAGES[\strtolower(\str_replace('_LANGUAGE_CODE', '', $constant))] = $lang;
            }
        }

        return $LANGUAGES;
    }

    /**
     * Returns an replacement array for ASCII methods.
     *
     * EXAMPLE: <code>
     * $array = ASCII::charsArray();
     * var_dump($array['ru']['б']); // 'b'
     * </code>
     *
     * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
     *
     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
     *
     * @psalm-pure
     *
     * @return array
     *
     * @phpstan-return array<string, array<string , string>>
     */
    public static function charsArray(bool $replace_extra_symbols = false): array
    {
        if ($replace_extra_symbols) {
            self::prepareAsciiAndExtrasMaps();

            return self::$ASCII_MAPS_AND_EXTRAS ?? [];
        }

        self::prepareAsciiMaps();

        return self::$ASCII_MAPS ?? [];
    }

    /**
     * Returns an replacement array for ASCII methods with a mix of multiple languages.
     *
     * EXAMPLE: <code>
     * $array = ASCII::charsArrayWithMultiLanguageValues();
     * var_dump($array['b']); // ['β', 'б', 'ဗ', 'ბ', 'ب']
     * </code>
     *
     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
     *
     * @psalm-pure
     *
     * @return array
     *               <p>An array of replacements.</p>
     *
     * @phpstan-return array<string, array<int, string>>
     */
    public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array
    {
        /** @var array<string, array<string, array<int, string>>> */
        static $CHARS_ARRAY = [];
        $cacheKey = '' . $replace_extra_symbols;

        if (isset($CHARS_ARRAY[$cacheKey])) {
            return $CHARS_ARRAY[$cacheKey];
        }

        // init
        $return = [];
        $language_all_chars = self::charsArrayWithSingleLanguageValues(
            $replace_extra_symbols,
            false
        );

        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
        /** @var array<string, string> $language_all_chars */
        $language_all_chars = $language_all_chars;

        /** @noinspection AlterInForeachInspection */
        foreach ($language_all_chars as $key => &$value) {
            $return[$value][] = $key;
        }

        $CHARS_ARRAY[$cacheKey] = $return;

        /** @var array<string, array<int, string>> $return - hack for phpstan */
        return $return;
    }

    /**
     * Returns an replacement array for ASCII methods with one language.
     *
     * For example, German will map 'ä' to 'ae', while other languages
     * will simply return e.g. 'a'.
     *
     * EXAMPLE: <code>
     * $array = ASCII::charsArrayWithOneLanguage('ru');
     * $tmpKey = \array_search('yo', $array['replace']);
     * echo $array['orig'][$tmpKey]; // 'ё'
     * </code>
     *
     * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here
     *
     * @param string $language              [optional] <p>Language of the source string e.g.: en, de_at, or de-ch.
     *                                      (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
     * @param bool   $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
     * @param bool   $asOrigReplaceArray    [optional] <p>TRUE === return {orig: string[], replace: string[]}
     *                                      array</p>
     *
     * @psalm-pure
     *
     * @return array
     *               <p>An array of replacements.</p>
     *
     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
     * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
     */
    public static function charsArrayWithOneLanguage(
        string $language = self::ENGLISH_LANGUAGE_CODE,
        bool $replace_extra_symbols = false,
        bool $asOrigReplaceArray = true
    ): array {
        $language = self::get_language($language);

        // init
        /** @var array<string, array<string, array<string, string>|array{orig: string[], replace: string[]}>> */
        static $CHARS_ARRAY = [];
        $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;

        // check static cache
        if (isset($CHARS_ARRAY[$cacheKey][$language])) {
            return $CHARS_ARRAY[$cacheKey][$language];
        }

        if ($replace_extra_symbols) {
            self::prepareAsciiAndExtrasMaps();

            /** @noinspection DuplicatedCode */
            if (isset(self::$ASCII_MAPS_AND_EXTRAS[$language])) {
                $tmpArray = self::$ASCII_MAPS_AND_EXTRAS[$language];

                if ($asOrigReplaceArray) {
                    $CHARS_ARRAY[$cacheKey][$language] = [
                        'orig'    => \array_keys($tmpArray),
                        'replace' => \array_values($tmpArray),
                    ];
                } else {
                    $CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
                }
            } else {
                /** @noinspection NestedPositiveIfStatementsInspection */
                if ($asOrigReplaceArray) {
                    $CHARS_ARRAY[$cacheKey][$language] = [
                        'orig'    => [],
                        'replace' => [],
                    ];
                } else {
                    $CHARS_ARRAY[$cacheKey][$language] = [];
                }
            }
        } else {
            self::prepareAsciiMaps();

            /** @noinspection DuplicatedCode */
            if (isset(self::$ASCII_MAPS[$language])) {
                $tmpArray = self::$ASCII_MAPS[$language];

                if ($asOrigReplaceArray) {
                    $CHARS_ARRAY[$cacheKey][$language] = [
                        'orig'    => \array_keys($tmpArray),
                        'replace' => \array_values($tmpArray),
                    ];
                } else {
                    $CHARS_ARRAY[$cacheKey][$language] = $tmpArray;
                }
            } else {
                /** @noinspection NestedPositiveIfStatementsInspection */
                if ($asOrigReplaceArray) {
                    $CHARS_ARRAY[$cacheKey][$language] = [
                        'orig'    => [],
                        'replace' => [],
                    ];
                } else {
                    $CHARS_ARRAY[$cacheKey][$language] = [];
                }
            }
        }

        return $CHARS_ARRAY[$cacheKey][$language] ?? ['orig' => [], 'replace' => []];
    }

    /**
     * Returns an replacement array for ASCII methods with multiple languages.
     *
     * EXAMPLE: <code>
     * $array = ASCII::charsArrayWithSingleLanguageValues();
     * $tmpKey = \array_search('hnaik', $array['replace']);
     * echo $array['orig'][$tmpKey]; // '၌'
     * </code>
     *
     * @param bool $replace_extra_symbols [optional] <p>Add some more replacements e.g. "£" with " pound ".</p>
     * @param bool $asOrigReplaceArray    [optional] <p>TRUE === return {orig: string[], replace: string[]}
     *                                    array</p>
     *
     * @psalm-pure
     *
     * @return array
     *               <p>An array of replacements.</p>
     *
     * @phpstan-return array{orig: string[], replace: string[]}|array<string, string>
     */
    public static function charsArrayWithSingleLanguageValues(
        bool $replace_extra_symbols = false,
        bool $asOrigReplaceArray = true
    ): array {
        // init
        /** @var array<string, array<string, string>|array{orig: string[], replace: string[]}> */
        static $CHARS_ARRAY = [];
        $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray;

        if (isset($CHARS_ARRAY[$cacheKey])) {
            return $CHARS_ARRAY[$cacheKey];
        }

        if ($replace_extra_symbols) {
            self::prepareAsciiAndExtrasMaps();

            /** @noinspection AlterInForeachInspection */
            /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
            foreach (self::$ASCII_MAPS_AND_EXTRAS ?? [] as &$map) {
                $CHARS_ARRAY[$cacheKey][] = $map;
            }
        } else {
            self::prepareAsciiMaps();

            /** @noinspection AlterInForeachInspection */
            /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */
            foreach (self::$ASCII_MAPS ?? [] as &$map) {
                $CHARS_ARRAY[$cacheKey][] = $map;
            }
        }

        /** @phpstan-ignore-next-line - ... error? */
        $CHARS_ARRAY[$cacheKey] = \array_merge([], ...$CHARS_ARRAY[$cacheKey]);

        if ($asOrigReplaceArray) {
            $CHARS_ARRAY[$cacheKey] = [
                'orig'    => \array_keys($CHARS_ARRAY[$cacheKey]),
                'replace' => \array_values($CHARS_ARRAY[$cacheKey]),
            ];
        }

        return $CHARS_ARRAY[$cacheKey];
    }

    /**
     * Accepts a string and removes all non-UTF-8 characters from it + extras if needed.
     *
     * @param string $str                         <p>The string to be sanitized.</p>
     * @param bool   $normalize_whitespace        [optional] <p>Set to true, if you need to normalize the
     *                                            whitespace.</p>
     * @param bool   $normalize_msword            [optional] <p>Set to true, if you need to normalize MS Word chars
     *                                            e.g.: "…"
     *                                            => "..."</p>
     * @param bool   $keep_non_breaking_space     [optional] <p>Set to true, to keep non-breaking-spaces, in
     *                                            combination with
     *                                            $normalize_whitespace</p>
     * @param bool   $remove_invisible_characters [optional] <p>Set to false, if you not want to remove invisible
     *                                            characters e.g.: "\0"</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A clean UTF-8 string.</p>
     */
    public static function clean(
        string $str,
        bool $normalize_whitespace = true,
        bool $keep_non_breaking_space = false,
        bool $normalize_msword = true,
        bool $remove_invisible_characters = true
    ): string {
        // http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string
        // caused connection reset problem on larger strings

        $regex = '/
          (
            (?: [\x00-\x7F]               # single-byte sequences   0xxxxxxx
            |   [\xC0-\xDF][\x80-\xBF]    # double-byte sequences   110xxxxx 10xxxxxx
            |   [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences   1110xxxx 10xxxxxx * 2
            |   [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
            ){1,100}                      # ...one or more times
          )
        | ( [\x80-\xBF] )                 # invalid byte in range 10000000 - 10111111
        | ( [\xC0-\xFF] )                 # invalid byte in range 11000000 - 11111111
        /x';
        $str = (string) \preg_replace($regex, '$1', $str);

        if ($normalize_whitespace) {
            $str = self::normalize_whitespace($str, $keep_non_breaking_space);
        }

        if ($normalize_msword) {
            $str = self::normalize_msword($str);
        }

        if ($remove_invisible_characters) {
            $str = self::remove_invisible_characters($str);
        }

        return $str;
    }

    /**
     * Checks if a string is 7 bit ASCII.
     *
     * EXAMPLE: <code>
     * ASCII::is_ascii('白'); // false
     * </code>
     *
     * @param string $str <p>The string to check.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>
     *              <strong>true</strong> if it is ASCII<br>
     *              <strong>false</strong> otherwise
     *              </p>
     */
    public static function is_ascii(string $str): bool
    {
        if ($str === '') {
            return true;
        }

        return !\preg_match('/' . self::$REGEX_ASCII . '/', $str);
    }

    /**
     * Returns a string with smart quotes, ellipsis characters, and dashes from
     * Windows-1252 (commonly used in Word documents) replaced by their ASCII
     * equivalents.
     *
     * EXAMPLE: <code>
     * ASCII::normalize_msword('„Abcdef…”'); // '"Abcdef..."'
     * </code>
     *
     * @param string $str <p>The string to be normalized.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with normalized characters for commonly used chars in Word documents.</p>
     */
    public static function normalize_msword(string $str): string
    {
        if ($str === '') {
            return '';
        }

        /** @var array{orig: string[], replace: string[]} */
        static $MSWORD_CACHE = ['orig' => [], 'replace' => []];

        if (empty($MSWORD_CACHE['orig'])) {
            self::prepareAsciiMaps();

            /** @var array<string, string> */
            $map = self::$ASCII_MAPS[self::EXTRA_MSWORD_CHARS_LANGUAGE_CODE] ?? [];

            $MSWORD_CACHE = [
                'orig'    => \array_keys($map),
                'replace' => \array_values($map),
            ];
        }

        return \str_replace($MSWORD_CACHE['orig'], $MSWORD_CACHE['replace'], $str);
    }

    /**
     * Normalize the whitespace.
     *
     * EXAMPLE: <code>
     * ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -"
     * </code>
     *
     * @param string $str                          <p>The string to be normalized.</p>
     * @param bool   $keepNonBreakingSpace         [optional] <p>Set to true, to keep non-breaking-spaces.</p>
     * @param bool   $keepBidiUnicodeControls      [optional] <p>Set to true, to keep non-printable (for the web)
     *                                             bidirectional text chars.</p>
     * @param bool   $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with normalized whitespace.</p>
     */
    public static function normalize_whitespace(
        string $str,
        bool $keepNonBreakingSpace = false,
        bool $keepBidiUnicodeControls = false,
        bool $normalize_control_characters = false
    ): string {
        if ($str === '') {
            return '';
        }

        /** @var array<int,array<string,string>> */
        static $WHITESPACE_CACHE = [];
        $cacheKey = (int) $keepNonBreakingSpace;

        if ($normalize_control_characters) {
            $str = \str_replace(
                [
                    "\x0d\x0c",     // 'END OF LINE'
                    "\xe2\x80\xa8", // 'LINE SEPARATOR'
                    "\xe2\x80\xa9", // 'PARAGRAPH SEPARATOR'
                    "\x0c",         // 'FORM FEED' // "\f"
                    "\x0b",         // 'VERTICAL TAB' // "\v"
                ],
                [
                    "\n",
                    "\n",
                    "\n",
                    "\n",
                    "\t",
                ],
                $str
            );
        }

        if (!isset($WHITESPACE_CACHE[$cacheKey])) {
            self::prepareAsciiMaps();

            $WHITESPACE_CACHE[$cacheKey] = self::$ASCII_MAPS[self::EXTRA_WHITESPACE_CHARS_LANGUAGE_CODE] ?? [];

            if ($keepNonBreakingSpace) {
                unset($WHITESPACE_CACHE[$cacheKey]["\xc2\xa0"]);
            }

            $WHITESPACE_CACHE[$cacheKey] = array_keys($WHITESPACE_CACHE[$cacheKey]);
        }

        if (!$keepBidiUnicodeControls) {
            /** @var array<int,string>|null */
            static $BIDI_UNICODE_CONTROLS_CACHE = null;

            if ($BIDI_UNICODE_CONTROLS_CACHE === null) {
                $BIDI_UNICODE_CONTROLS_CACHE = self::$BIDI_UNI_CODE_CONTROLS_TABLE;
            }

            $str = \str_replace($BIDI_UNICODE_CONTROLS_CACHE, '', $str);
        }

        return \str_replace($WHITESPACE_CACHE[$cacheKey], ' ', $str);
    }

    /**
     * Remove invisible characters from a string.
     *
     * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script.
     *
     * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php
     *
     * @param string $str
     * @param bool   $url_encoded
     * @param string $replacement
     * @param bool   $keep_basic_control_characters
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function remove_invisible_characters(
        string $str,
        bool $url_encoded = false,
        string $replacement = '',
        bool $keep_basic_control_characters = true
    ): string {
        // init
        $non_displayables = [];

        // every control character except:
        // - newline (dec 10),
        // - carriage return (dec 13),
        // - horizontal tab (dec 09)
        if ($url_encoded) {
            $non_displayables[] = '/%0[0-8bcefBCEF]/'; // url encoded 00-08, 11, 12, 14, 15
            $non_displayables[] = '/%1[0-9a-fA-F]/'; // url encoded 16-31
        }

        if ($keep_basic_control_characters) {
            $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127
        } else {
            $str = self::normalize_whitespace($str, false, false, true);
            $non_displayables[] = '/[^\P{C}\s]/u';
        }

        do {
            $str = (string) \preg_replace($non_displayables, $replacement, $str, -1, $count);
        } while ($count !== 0);

        return $str;
    }

    /**
     *  WARNING: This method will return broken characters and is only for special cases.
     *
     * Convert two UTF-8 encoded string to a single-byte strings suitable for
     * functions that need the same string length after the conversion.
     *
     * The function simply uses (and updates) a tailored dynamic encoding
     * (in/out map parameter) where non-ascii characters are remapped to
     * the range [128-255] in order of appearance.
     *
     * @param string $str1
     * @param string $str2
     *
     * @return string[]
     *
     * @phpstan-return array{0: string, 1: string}
     */
    public static function to_ascii_remap(string $str1, string $str2): array
    {
        $charMap = [];
        $str1 = self::to_ascii_remap_intern($str1, $charMap);
        $str2 = self::to_ascii_remap_intern($str2, $charMap);

        return [$str1, $str2];
    }

    /**
     * Returns an ASCII version of the string. A set of non-ASCII characters are
     * replaced with their closest ASCII counterparts, and the rest are removed
     * by default. The language or locale of the source string can be supplied
     * for language-specific transliteration in any of the following formats:
     * en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping
     * to "aeoeue" rather than "aou" as in other languages.
     *
     * EXAMPLE: <code>
     * ASCII::to_ascii('�Düsseldorf�', 'en'); // Dusseldorf
     * </code>
     *
     * @param string    $str                       <p>The input string.</p>
     * @param string    $language                  [optional] <p>Language of the source string.
     *                                             (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
     * @param bool      $remove_unsupported_chars  [optional] <p>Whether or not to remove the
     *                                             unsupported characters.</p>
     * @param bool      $replace_extra_symbols     [optional]  <p>Add some more replacements e.g. "£" with " pound
     *                                             ".</p>
     * @param bool      $use_transliterate         [optional]  <p>Use ASCII::to_transliterate() for unknown chars.</p>
     * @param bool|null $replace_single_chars_only [optional]  <p>Single char replacement is better for the
     *                                             performance, but some languages need to replace more then one char
     *                                             at the same time. | NULL === auto-setting, depended on the
     *                                             language</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string that contains only ASCII characters.</p>
     *
     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
     */
    public static function to_ascii(
        string $str,
        string $language = self::ENGLISH_LANGUAGE_CODE,
        bool $remove_unsupported_chars = true,
        bool $replace_extra_symbols = false,
        bool $use_transliterate = false,
        bool $replace_single_chars_only = null
    ): string {
        if ($str === '') {
            return '';
        }

        /** @phpstan-var ASCII::*_LANGUAGE_CODE - hack for phpstan */
        $language = self::get_language($language);

        static $EXTRA_SYMBOLS_CACHE = null;

        /** @var array<string,array<string,string>> */
        static $REPLACE_HELPER_CACHE = [];
        $cacheKey = $language . '-' . $replace_extra_symbols;

        if (!isset($REPLACE_HELPER_CACHE[$cacheKey])) {
            $langAll = self::charsArrayWithSingleLanguageValues($replace_extra_symbols, false);

            $langSpecific = self::charsArrayWithOneLanguage($language, $replace_extra_symbols, false);

            if ($langSpecific === []) {
                $REPLACE_HELPER_CACHE[$cacheKey] = $langAll;
            } else {
                $REPLACE_HELPER_CACHE[$cacheKey] = \array_merge([], $langAll, $langSpecific);
            }
        }

        if (
            $replace_extra_symbols
            &&
            $EXTRA_SYMBOLS_CACHE === null
        ) {
            $EXTRA_SYMBOLS_CACHE = [];
            foreach (self::$ASCII_EXTRAS ?? [] as $extrasDataTmp) {
                foreach ($extrasDataTmp as $extrasDataKeyTmp => $extrasDataValueTmp) {
                    $EXTRA_SYMBOLS_CACHE[$extrasDataKeyTmp] = $extrasDataKeyTmp;
                }
            }
            $EXTRA_SYMBOLS_CACHE = \implode('', $EXTRA_SYMBOLS_CACHE);
        }

        $charDone = [];
        if (\preg_match_all('/' . self::$REGEX_ASCII . ($replace_extra_symbols ? '|[' . $EXTRA_SYMBOLS_CACHE . ']' : '') . '/u', $str, $matches)) {
            if (!$replace_single_chars_only) {
                if (self::$LANGUAGE_MAX_KEY === null) {
                    self::$LANGUAGE_MAX_KEY = self::getData('ascii_language_max_key');
                }

                $maxKeyLength = self::$LANGUAGE_MAX_KEY[$language] ?? 0;

                if ($maxKeyLength >= 5) {
                    foreach ($matches[0] as $keyTmp => $char) {
                        if (isset($matches[0][$keyTmp + 4])) {
                            $fiveChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3] . $matches[0][$keyTmp + 4];
                        } else {
                            $fiveChars = null;
                        }
                        if (
                            $fiveChars
                            &&
                            !isset($charDone[$fiveChars])
                            &&
                            isset($REPLACE_HELPER_CACHE[$cacheKey][$fiveChars])
                            &&
                            \strpos($str, $fiveChars) !== false
                        ) {
                            // DEBUG
                            //\var_dump($str, $fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars]);

                            $charDone[$fiveChars] = true;
                            $str = \str_replace($fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars], $str);

                            // DEBUG
                            //\var_dump($str, "\n");
                        }
                    }
                }

                if ($maxKeyLength >= 4) {
                    foreach ($matches[0] as $keyTmp => $char) {
                        if (isset($matches[0][$keyTmp + 3])) {
                            $fourChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3];
                        } else {
                            $fourChars = null;
                        }
                        if (
                            $fourChars
                            &&
                            !isset($charDone[$fourChars])
                            &&
                            isset($REPLACE_HELPER_CACHE[$cacheKey][$fourChars])
                            &&
                            \strpos($str, $fourChars) !== false
                        ) {
                            // DEBUG
                            //\var_dump($str, $fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars]);

                            $charDone[$fourChars] = true;
                            $str = \str_replace($fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars], $str);

                            // DEBUG
                            //\var_dump($str, "\n");
                        }
                    }
                }

                foreach ($matches[0] as $keyTmp => $char) {
                    if (isset($matches[0][$keyTmp + 2])) {
                        $threeChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2];
                    } else {
                        $threeChars = null;
                    }
                    if (
                        $threeChars
                        &&
                        !isset($charDone[$threeChars])
                        &&
                        isset($REPLACE_HELPER_CACHE[$cacheKey][$threeChars])
                        &&
                        \strpos($str, $threeChars) !== false
                    ) {
                        // DEBUG
                        //\var_dump($str, $threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars]);

                        $charDone[$threeChars] = true;
                        $str = \str_replace($threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars], $str);

                        // DEBUG
                        //\var_dump($str, "\n");
                    }
                }

                foreach ($matches[0] as $keyTmp => $char) {
                    if (isset($matches[0][$keyTmp + 1])) {
                        $twoChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1];
                    } else {
                        $twoChars = null;
                    }
                    if (
                        $twoChars
                        &&
                        !isset($charDone[$twoChars])
                        &&
                        isset($REPLACE_HELPER_CACHE[$cacheKey][$twoChars])
                        &&
                        \strpos($str, $twoChars) !== false
                    ) {
                        // DEBUG
                        //\var_dump($str, $twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars]);

                        $charDone[$twoChars] = true;
                        $str = \str_replace($twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars], $str);

                        // DEBUG
                        //\var_dump($str, "\n");
                    }
                }
            }

            foreach ($matches[0] as $char) {
                if (
                    !isset($charDone[$char])
                    &&
                    isset($REPLACE_HELPER_CACHE[$cacheKey][$char])
                    &&
                    \strpos($str, $char) !== false
                ) {
                    // DEBUG
                    //\var_dump($str, $char, $REPLACE_HELPER_CACHE[$cacheKey][$char]);

                    $charDone[$char] = true;
                    $str = \str_replace($char, $REPLACE_HELPER_CACHE[$cacheKey][$char], $str);

                    // DEBUG
                    //\var_dump($str, "\n");
                }
            }
        }

        /** @psalm-suppress PossiblyNullOperand - we use the prepare* methods here, so we don't get NULL here */
        if (!isset(self::$ASCII_MAPS[$language])) {
            $use_transliterate = true;
        }

        if ($use_transliterate) {
            $str = self::to_transliterate($str, null, false);
        }

        if ($remove_unsupported_chars) {
            $str = (string) \str_replace(["\n\r", "\n", "\r", "\t"], ' ', $str);
            $str = (string) \preg_replace('/' . self::$REGEX_ASCII . '/', '', $str);
        }

        return $str;
    }

    /**
     * Convert given string to safe filename (and keep string case).
     *
     * EXAMPLE: <code>
     * ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png'
     * </code>
     *
     * @param string $str
     * @param bool   $use_transliterate <p>ASCII::to_transliterate() is used by default - unsafe characters are
     *                                  simply replaced with hyphen otherwise.</p>
     * @param string $fallback_char
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string that contains only safe characters for a filename.</p>
     */
    public static function to_filename(
        string $str,
        bool $use_transliterate = true,
        string $fallback_char = '-'
    ): string {
        if ($use_transliterate) {
            $str = self::to_transliterate($str, $fallback_char);
        }

        $fallback_char_escaped = \preg_quote($fallback_char, '/');

        $str = (string) \preg_replace(
            [
                '/[^' . $fallback_char_escaped . '.\\-a-zA-Z\d\\s]/', // 1) remove un-needed chars
                '/\s+/u',                                             // 2) convert spaces to $fallback_char
                '/[' . $fallback_char_escaped . ']+/u',               // 3) remove double $fallback_char's
            ],
            [
                '',
                $fallback_char,
                $fallback_char,
            ],
            $str
        );

        return \trim($str, $fallback_char);
    }

    /**
     * Converts the string into an URL slug. This includes replacing non-ASCII
     * characters with their closest ASCII equivalents, removing remaining
     * non-ASCII and non-alphanumeric characters, and replacing whitespace with
     * $separator. The separator defaults to a single dash, and the string
     * is also converted to lowercase. The language of the source string can
     * also be supplied for language-specific transliteration.
     *
     * @param string                $str
     * @param string                $separator             [optional] <p>The string used to replace whitespace.</p>
     * @param string                $language              [optional] <p>Language of the source string.
     *                                                     (default is 'en') | ASCII::*_LANGUAGE_CODE</p>
     * @param array<string, string> $replacements          [optional] <p>A map of replaceable strings.</p>
     * @param bool                  $replace_extra_symbols [optional]  <p>Add some more replacements e.g. "£" with "
     *                                                     pound ".</p>
     * @param bool                  $use_str_to_lower      [optional] <p>Use "string to lower" for the input.</p>
     * @param bool                  $use_transliterate     [optional]  <p>Use ASCII::to_transliterate() for unknown
     *                                                     chars.</p>
     * @psalm-pure
     *
     * @return string
     *                <p>A string that has been converted to an URL slug.</p>
     *
     * @phpstan-param ASCII::*_LANGUAGE_CODE $language
     */
    public static function to_slugify(
        string $str,
        string $separator = '-',
        string $language = self::ENGLISH_LANGUAGE_CODE,
        array $replacements = [],
        bool $replace_extra_symbols = false,
        bool $use_str_to_lower = true,
        bool $use_transliterate = false
    ): string {
        if ($str === '') {
            return '';
        }

        foreach ($replacements as $from => $to) {
            $str = \str_replace($from, $to, $str);
        }

        $str = self::to_ascii(
            $str,
            $language,
            false,
            $replace_extra_symbols,
            $use_transliterate
        );

        $str = \str_replace('@', $separator, $str);

        $str = (string) \preg_replace(
            '/[^a-zA-Z\\d\\s\\-_' . \preg_quote($separator, '/') . ']/',
            '',
            $str
        );

        if ($use_str_to_lower) {
            $str = \strtolower($str);
        }

        $str = (string) \preg_replace('/^[\'\\s]+|[\'\\s]+$/', '', $str);
        $str = (string) \preg_replace('/\\B([A-Z])/', '-\1', $str);
        $str = (string) \preg_replace('/[\\-_\\s]+/', $separator, $str);

        $l = \strlen($separator);
        if ($l && \strpos($str, $separator) === 0) {
            $str = (string) \substr($str, $l);
        }

        if (\substr($str, -$l) === $separator) {
            $str = (string) \substr($str, 0, \strlen($str) - $l);
        }

        return $str;
    }

    /**
     * Returns an ASCII version of the string. A set of non-ASCII characters are
     * replaced with their closest ASCII counterparts, and the rest are removed
     * unless instructed otherwise.
     *
     * EXAMPLE: <code>
     * ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii'
     * </code>
     *
     * @param string      $str     <p>The input string.</p>
     * @param string|null $unknown [optional] <p>Character use if character unknown. (default is '?')
     *                             But you can also use NULL to keep the unknown chars.</p>
     * @param bool        $strict  [optional] <p>Use "transliterator_transliterate()" from PHP-Intl
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A String that contains only ASCII characters.</p>
     *
     * @noinspection ParameterDefaultValueIsNotNullInspection
     */
    public static function to_transliterate(
        string $str,
        $unknown = '?',
        bool $strict = false
    ): string {
        /** @var array<int,string>|null */
        static $UTF8_TO_TRANSLIT = null;

        /** null|\Transliterator */
        static $TRANSLITERATOR = null;

        /** @var bool|null */
        static $SUPPORT_INTL = null;

        if ($str === '') {
            return '';
        }

        if ($SUPPORT_INTL === null) {
            $SUPPORT_INTL = \extension_loaded('intl');
        }

        // check if we only have ASCII, first (better performance)
        $str_tmp = $str;
        if (self::is_ascii($str)) {
            return $str;
        }

        $str = self::clean($str);

        // check again, if we only have ASCII, now ...
        if (
            $str_tmp !== $str
            &&
            self::is_ascii($str)
        ) {
            return $str;
        }

        if (
            $strict
            &&
            $SUPPORT_INTL === true
        ) {
            if (!isset($TRANSLITERATOR)) {
                // INFO: see "*-Latin" rules via "transliterator_list_ids()"
                /** @var \Transliterator */
                $TRANSLITERATOR = \transliterator_create('NFKC; [:Nonspacing Mark:] Remove; NFKC; Any-Latin; Latin-ASCII;');
            }

            // INFO: https://unicode.org/cldr/utility/character.jsp
            $str_tmp = \transliterator_transliterate($TRANSLITERATOR, $str);

            if ($str_tmp !== false) {

                // check again, if we only have ASCII, now ...
                if (
                    $str_tmp !== $str
                    &&
                    self::is_ascii($str_tmp)
                ) {
                    return $str_tmp;
                }

                $str = $str_tmp;
            }
        }

        if (self::$ORD === null) {
            self::$ORD = self::getData('ascii_ord');
        }

        \preg_match_all('/.|[^\x00]$/us', $str, $array_tmp);
        $chars = $array_tmp[0];
        $ord = null;
        $str_tmp = '';
        foreach ($chars as &$c) {
            $ordC0 = self::$ORD[$c[0]];

            if ($ordC0 >= 0 && $ordC0 <= 127) {
                $str_tmp .= $c;

                continue;
            }

            $ordC1 = self::$ORD[$c[1]];

            // ASCII - next please
            if ($ordC0 >= 192 && $ordC0 <= 223) {
                $ord = ($ordC0 - 192) * 64 + ($ordC1 - 128);
            }

            if ($ordC0 >= 224) {
                $ordC2 = self::$ORD[$c[2]];

                if ($ordC0 <= 239) {
                    $ord = ($ordC0 - 224) * 4096 + ($ordC1 - 128) * 64 + ($ordC2 - 128);
                }

                if ($ordC0 >= 240) {
                    $ordC3 = self::$ORD[$c[3]];

                    if ($ordC0 <= 247) {
                        $ord = ($ordC0 - 240) * 262144 + ($ordC1 - 128) * 4096 + ($ordC2 - 128) * 64 + ($ordC3 - 128);
                    }

                    // We only process valid UTF-8 chars (<= 4 byte), so we don't need this code here ...
                    /*
                    if ($ordC0 >= 248) {
                        $ordC4 = self::$ORD[$c[4]];

                        if ($ordC0 <= 251) {
                            $ord = ($ordC0 - 248) * 16777216 + ($ordC1 - 128) * 262144 + ($ordC2 - 128) * 4096 + ($ordC3 - 128) * 64 + ($ordC4 - 128);
                        }

                        if ($ordC0 >= 252) {
                            $ordC5 = self::$ORD[$c[5]];

                            if ($ordC0 <= 253) {
                                $ord = ($ordC0 - 252) * 1073741824 + ($ordC1 - 128) * 16777216 + ($ordC2 - 128) * 262144 + ($ordC3 - 128) * 4096 + ($ordC4 - 128) * 64 + ($ordC5 - 128);
                            }
                        }
                    }
                     */
                }
            }

            if (
                $ordC0 === 254
                ||
                $ordC0 === 255
                ||
                $ord === null
            ) {
                $str_tmp .= $unknown ?? $c;

                continue;
            }

            $bank = $ord >> 8;
            if (!isset($UTF8_TO_TRANSLIT[$bank])) {
                $UTF8_TO_TRANSLIT[$bank] = self::getDataIfExists(\sprintf('x%03x', $bank));
            }

            $new_char = $ord & 255;

            if (isset($UTF8_TO_TRANSLIT[$bank][$new_char])) {

                // keep for debugging
                /*
                echo "file: " . sprintf('x%02x', $bank) . "\n";
                echo "char: " . $c . "\n";
                echo "ord: " . $ord . "\n";
                echo "new_char: " . $new_char . "\n";
                echo "new_char: " . mb_chr($new_char) . "\n";
                echo "ascii: " . $UTF8_TO_TRANSLIT[$bank][$new_char] . "\n";
                echo "bank:" . $bank . "\n\n";
                 */

                $new_char = $UTF8_TO_TRANSLIT[$bank][$new_char];

                /** @noinspection MissingOrEmptyGroupStatementInspection */
                /** @noinspection PhpStatementHasEmptyBodyInspection */
                if ($unknown === null && $new_char === '') {
                    // nothing
                } elseif (
                    $new_char === '[?]'
                    ||
                    $new_char === '[?] '
                ) {
                    $c = $unknown ?? $c;
                } else {
                    $c = $new_char;
                }
            } else {

                // keep for debugging missing chars
                /*
                echo "file: " . sprintf('x%02x', $bank) . "\n";
                echo "char: " . $c . "\n";
                echo "ord: " . $ord . "\n";
                echo "new_char: " . $new_char . "\n";
                echo "new_char: " . mb_chr($new_char) . "\n";
                echo "bank:" . $bank . "\n\n";
                 */

                $c = $unknown ?? $c;
            }

            $str_tmp .= $c;
        }

        return $str_tmp;
    }

    /**
     * WARNING: This method will return broken characters and is only for special cases.
     *
     * Convert a UTF-8 encoded string to a single-byte string suitable for
     * functions that need the same string length after the conversion.
     *
     * The function simply uses (and updates) a tailored dynamic encoding
     * (in/out map parameter) where non-ascii characters are remapped to
     * the range [128-255] in order of appearance.
     *
     * Thus, it supports up to 128 different multibyte code points max over
     * the whole set of strings sharing this encoding.
     *
     * Source: https://github.com/KEINOS/mb_levenshtein
     *
     * @param string $str <p>UTF-8 string to be converted to extended ASCII.</p>
     * @param array  $map <p>Internal-Map of code points to ASCII characters.</p>
     *
     * @return string
     *                <p>Mapped borken string.</p>
     *
     * @phpstan-param array<string, string> $map
     */
    private static function to_ascii_remap_intern(string $str, array &$map): string
    {
        // find all utf-8 characters
        $matches = [];
        if (!\preg_match_all('/[\xC0-\xF7][\x80-\xBF]+/', $str, $matches)) {
            return $str; // plain ascii string
        }

        // update the encoding map with the characters not already met
        $mapCount = \count($map);
        foreach ($matches[0] as $mbc) {
            if (!isset($map[$mbc])) {
                $map[$mbc] = \chr(128 + $mapCount);
                ++$mapCount;
            }
        }

        // finally, remap non-ascii characters
        return \strtr($str, $map);
    }

    /**
     * Get the language from a string.
     *
     * e.g.: de_at -> de_at
     *       de_DE -> de
     *       DE_DE -> de
     *       de-de -> de
     *
     * @noinspection ReturnTypeCanBeDeclaredInspection
     *
     * @param string $language
     *
     * @psalm-pure
     *
     * @return string
     */
    private static function get_language(string $language)
    {
        if ($language === '') {
            return '';
        }

        if (
            \strpos($language, '_') === false
            &&
            \strpos($language, '-') === false
        ) {
            return \strtolower($language);
        }

        $language = \str_replace('-', '_', \strtolower($language));

        $regex = '/(?<first>[a-z]+)_\g{first}/';

        return (string) \preg_replace($regex, '$1', $language);
    }

    /**
     * Get data from "/data/*.php".
     *
     * @noinspection ReturnTypeCanBeDeclaredInspection
     *
     * @param string $file
     *
     * @psalm-pure
     *
     * @return array<mixed>
     */
    private static function getData(string $file)
    {
        /** @noinspection PhpIncludeInspection */
        /** @noinspection UsingInclusionReturnValueInspection */
        /** @psalm-suppress UnresolvableInclude */
        return include __DIR__ . '/data/' . $file . '.php';
    }

    /**
     * Get data from "/data/*.php".
     *
     * @param string $file
     *
     * @psalm-pure
     *
     * @return array<mixed>
     */
    private static function getDataIfExists(string $file): array
    {
        $file = __DIR__ . '/data/' . $file . '.php';
        /** @psalm-suppress ImpureFunctionCall */
        if (\is_file($file)) {
            /** @noinspection PhpIncludeInspection */
            /** @noinspection UsingInclusionReturnValueInspection */
            /** @psalm-suppress UnresolvableInclude */
            return include $file;
        }

        return [];
    }

    /**
     * @psalm-pure
     *
     * @return void
     */
    private static function prepareAsciiAndExtrasMaps()
    {
        if (self::$ASCII_MAPS_AND_EXTRAS === null) {
            self::prepareAsciiMaps();
            self::prepareAsciiExtras();

            /** @psalm-suppress PossiblyNullArgument - we use the prepare* methods here, so we don't get NULL here */
            self::$ASCII_MAPS_AND_EXTRAS = \array_merge_recursive(
                self::$ASCII_MAPS ?? [],
                self::$ASCII_EXTRAS ?? []
            );
        }
    }

    /**
     * @psalm-pure
     *
     * @return void
     */
    private static function prepareAsciiMaps()
    {
        if (self::$ASCII_MAPS === null) {
            self::$ASCII_MAPS = self::getData('ascii_by_languages');
        }
    }

    /**
     * @psalm-pure
     *
     * @return void
     */
    private static function prepareAsciiExtras()
    {
        if (self::$ASCII_EXTRAS === null) {
            self::$ASCII_EXTRAS = self::getData('ascii_extras_by_languages');
        }
    }
}
<?php

declare(strict_types=1);

namespace voku\helper;

/**
 * ## 🇷🇺 Русским гражданам
 * В Украине сейчас идет война. Силами РФ наносятся удары по гражданской инфраструктуре в [Харькове][1], [Киеве][2], [Чернигове][3], [Сумах][4], [Ирпене][5] и десятках других городов. Гибнут люди - и гражданское население, и военные, в том числе российские призывники, которых бросили воевать. Чтобы лишить собственный народ доступа к информации, правительство РФ запретило называть войну войной, закрыло независимые СМИ и принимает сейчас ряд диктаторских законов. Эти законы призваны заткнуть рот всем, кто против войны. За обычный призыв к миру сейчас можно получить несколько лет тюрьмы.
 * Не молчите! Молчание - знак вашего согласия с политикой российского правительства.
 *  **Вы можете сделать выбор НЕ МОЛЧАТЬ.**
 * ---
 * ## 🇺🇸 To people of Russia
 * There is a war in Ukraine right now. The forces of the Russian Federation are attacking civilian infrastructure in [Kharkiv][1], [Kyiv][2], [Chernihiv][3], [Sumy][4], [Irpin][5] and dozens of other cities. People are dying – both civilians and military servicemen, including Russian conscripts who were thrown into the fighting. In order to deprive its own people of access to information, the government of the Russian Federation has forbidden calling a war a war, shut down independent media and is passing a number of dictatorial laws. These laws are meant to silence all those who are against war. You can be jailed for multiple years for simply calling for peace.
 * Do not be silent! Silence is a sign that you accept the Russian government's policy.
 * **You can choose NOT TO BE SILENT.**
 * ---
 * - [1] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/P7K2MSZDGFMIJPDD7CI2GIROJI.jpg "Kharkiv under attack"
 * - [2] https://gdb.voanews.com/01bd0000-0aff-0242-fad0-08d9fc92c5b3_cx0_cy5_cw0_w1023_r1_s.jpg "Kyiv under attack"
 * - [3] https://ichef.bbci.co.uk/news/976/cpsprodpb/163DD/production/_123510119_hi074310744.jpg "Chernihiv under attack"
 * - [4] https://www.youtube.com/watch?v=8K-bkqKKf2A "Sumy under attack"
 * - [5] https://cloudfront-us-east-2.images.arcpublishing.com/reuters/K4MTMLEHTRKGFK3GSKAT4GR3NE.jpg "Irpin under attack"
 *
 * @immutable
 */
final class UTF8
{
    /**
     * Bom => Byte-Length
     *
     * INFO: https://en.wikipedia.org/wiki/Byte_order_mark
     *
     * @var array<string, int>
     */
    private static $BOM = [
        "\xef\xbb\xbf"     => 3, // UTF-8 BOM
        'ï»¿'              => 6, // UTF-8 BOM as "WINDOWS-1252" (one char has [maybe] more then one byte ...)
        "\x00\x00\xfe\xff" => 4, // UTF-32 (BE) BOM
        '  þÿ'             => 6, // UTF-32 (BE) BOM as "WINDOWS-1252"
        "\xff\xfe\x00\x00" => 4, // UTF-32 (LE) BOM
        'ÿþ  '             => 6, // UTF-32 (LE) BOM as "WINDOWS-1252"
        "\xfe\xff"         => 2, // UTF-16 (BE) BOM
        'þÿ'               => 4, // UTF-16 (BE) BOM as "WINDOWS-1252"
        "\xff\xfe"         => 2, // UTF-16 (LE) BOM
        'ÿþ'               => 4, // UTF-16 (LE) BOM as "WINDOWS-1252"
    ];

    /**
     * Numeric code point => UTF-8 Character
     *
     * url: http://www.w3schools.com/charsets/ref_utf_punctuation.asp
     *
     * @var array<int, string>
     */
    private static $WHITESPACE = [
        // NULL Byte
        0 => "\x0",
        // Tab
        9 => "\x9",
        // New Line
        10 => "\xa",
        // Vertical Tab
        11 => "\xb",
        // Carriage Return
        13 => "\xd",
        // Ordinary Space
        32 => "\x20",
        // NO-BREAK SPACE
        160 => "\xc2\xa0",
        // OGHAM SPACE MARK
        5760 => "\xe1\x9a\x80",
        // MONGOLIAN VOWEL SEPARATOR
        6158 => "\xe1\xa0\x8e",
        // EN QUAD
        8192 => "\xe2\x80\x80",
        // EM QUAD
        8193 => "\xe2\x80\x81",
        // EN SPACE
        8194 => "\xe2\x80\x82",
        // EM SPACE
        8195 => "\xe2\x80\x83",
        // THREE-PER-EM SPACE
        8196 => "\xe2\x80\x84",
        // FOUR-PER-EM SPACE
        8197 => "\xe2\x80\x85",
        // SIX-PER-EM SPACE
        8198 => "\xe2\x80\x86",
        // FIGURE SPACE
        8199 => "\xe2\x80\x87",
        // PUNCTUATION SPACE
        8200 => "\xe2\x80\x88",
        // THIN SPACE
        8201 => "\xe2\x80\x89",
        // HAIR SPACE
        8202 => "\xe2\x80\x8a",
        // LINE SEPARATOR
        8232 => "\xe2\x80\xa8",
        // PARAGRAPH SEPARATOR
        8233 => "\xe2\x80\xa9",
        // NARROW NO-BREAK SPACE
        8239 => "\xe2\x80\xaf",
        // MEDIUM MATHEMATICAL SPACE
        8287 => "\xe2\x81\x9f",
        // HALFWIDTH HANGUL FILLER
        65440 => "\xef\xbe\xa0",
        // IDEOGRAPHIC SPACE
        12288 => "\xe3\x80\x80",
    ];

    /**
     * @var array<string, string>
     */
    private static $WHITESPACE_TABLE = [
        'SPACE'                     => "\x20",
        'NO-BREAK SPACE'            => "\xc2\xa0",
        'OGHAM SPACE MARK'          => "\xe1\x9a\x80",
        'EN QUAD'                   => "\xe2\x80\x80",
        'EM QUAD'                   => "\xe2\x80\x81",
        'EN SPACE'                  => "\xe2\x80\x82",
        'EM SPACE'                  => "\xe2\x80\x83",
        'THREE-PER-EM SPACE'        => "\xe2\x80\x84",
        'FOUR-PER-EM SPACE'         => "\xe2\x80\x85",
        'SIX-PER-EM SPACE'          => "\xe2\x80\x86",
        'FIGURE SPACE'              => "\xe2\x80\x87",
        'PUNCTUATION SPACE'         => "\xe2\x80\x88",
        'THIN SPACE'                => "\xe2\x80\x89",
        'HAIR SPACE'                => "\xe2\x80\x8a",
        'LINE SEPARATOR'            => "\xe2\x80\xa8",
        'PARAGRAPH SEPARATOR'       => "\xe2\x80\xa9",
        'ZERO WIDTH SPACE'          => "\xe2\x80\x8b",
        'NARROW NO-BREAK SPACE'     => "\xe2\x80\xaf",
        'MEDIUM MATHEMATICAL SPACE' => "\xe2\x81\x9f",
        'IDEOGRAPHIC SPACE'         => "\xe3\x80\x80",
        'HALFWIDTH HANGUL FILLER'   => "\xef\xbe\xa0",
    ];

    /**
     * @var array
     *
     * @phpstan-var array{upper: string[], lower: string[]}
     */
    private static $COMMON_CASE_FOLD = [
        'upper' => [
            'µ',
            'ſ',
            "\xCD\x85",
            'ς',
            'ẞ',
            "\xCF\x90",
            "\xCF\x91",
            "\xCF\x95",
            "\xCF\x96",
            "\xCF\xB0",
            "\xCF\xB1",
            "\xCF\xB5",
            "\xE1\xBA\x9B",
            "\xE1\xBE\xBE",
        ],
        'lower' => [
            'μ',
            's',
            'ι',
            'σ',
            'ß',
            'β',
            'θ',
            'φ',
            'π',
            'κ',
            'ρ',
            'ε',
            "\xE1\xB9\xA1",
            'ι',
        ],
    ];

    /**
     * @var array
     *
     * @phpstan-var array<string, mixed>
     */
    private static $SUPPORT = [];

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string, string>|null
     */
    private static $BROKEN_UTF8_FIX;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<int, string>|null
     */
    private static $WIN1252_TO_UTF8;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<int ,string>|null
     */
    private static $INTL_TRANSLITERATOR_LIST;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string>|null
     */
    private static $ENCODINGS;

    /**
     * @var int[]|null
     *
     * @phpstan-var array<string ,int>|null
     */
    private static $ORD;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string, string>|null
     */
    private static $EMOJI;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string>|null
     */
    private static $EMOJI_VALUES_CACHE;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string>|null
     */
    private static $EMOJI_KEYS_CACHE;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<string>|null
     */
    private static $EMOJI_KEYS_REVERSIBLE_CACHE;

    /**
     * @var string[]|null
     *
     * @phpstan-var array<int, string>|null
     */
    private static $CHR;

    /**
     * __construct()
     */
    public function __construct()
    {
    }

    /**
     * Return the character at the specified position: $str[1] like functionality.
     *
     * EXAMPLE: <code>UTF8::access('fòô', 1); // 'ò'</code>
     *
     * @param string $str      <p>A UTF-8 string.</p>
     * @param int    $pos      <p>The position of character to return.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Single multi-byte character.</p>
     */
    public static function access(string $str, int $pos, string $encoding = 'UTF-8'): string
    {
        if ($str === '' || $pos < 0) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str, $pos, 1);
        }

        return (string) self::substr($str, $pos, 1, $encoding);
    }

    /**
     * Prepends UTF-8 BOM character to the string and returns the whole string.
     *
     * INFO: If BOM already existed there, the Input string is returned.
     *
     * EXAMPLE: <code>UTF8::add_bom_to_string('fòô'); // "\xEF\xBB\xBF" . 'fòô'</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return non-empty-string
     *                           <p>The output string that contains BOM.</p>
     */
    public static function add_bom_to_string(string $str): string
    {
        if (!self::string_has_bom($str)) {
            $str = self::bom() . $str;
        }

        \assert($str !== '');

        return $str;
    }

    /**
     * Changes all keys in an array.
     *
     * @param array<string, mixed> $array    <p>The array to work on</p>
     * @param int                  $case     [optional] <p> Either <strong>CASE_UPPER</strong><br>
     *                                       or <strong>CASE_LOWER</strong> (default)</p>
     * @param string               $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string[]
     *                  <p>An array with its keys lower- or uppercased.</p>
     */
    public static function array_change_key_case(
        array $array,
        int $case = \CASE_LOWER,
        string $encoding = 'UTF-8'
    ): array {
        if (
            $case !== \CASE_LOWER
            &&
            $case !== \CASE_UPPER
        ) {
            $case = \CASE_LOWER;
        }

        $return = [];
        foreach ($array as $key => &$value) {
            $key = $case === \CASE_LOWER
                ? self::strtolower($key, $encoding)
                : self::strtoupper($key, $encoding);

            $return[$key] = $value;
        }

        return $return;
    }

    /**
     * Returns the substring between $start and $end, if found, or an empty
     * string. An optional offset may be supplied from which to begin the
     * search for the start string.
     *
     * @param string $str
     * @param string $start    <p>Delimiter marking the start of the substring.</p>
     * @param string $end      <p>Delimiter marking the end of the substring.</p>
     * @param int    $offset   [optional] <p>Index from which to begin the search. Default: 0</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function between(
        string $str,
        string $start,
        string $end,
        int $offset = 0,
        string $encoding = 'UTF-8'
    ): string {
        if ($encoding === 'UTF-8') {
            $start_position = \mb_strpos($str, $start, $offset);
            if ($start_position === false) {
                return '';
            }

            $substr_index = $start_position + (int) \mb_strlen($start);
            $end_position = \mb_strpos($str, $end, $substr_index);
            if (
                $end_position === false
                ||
                $end_position === $substr_index
            ) {
                return '';
            }

            return (string) \mb_substr($str, $substr_index, $end_position - $substr_index);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        $start_position = self::strpos($str, $start, $offset, $encoding);
        if ($start_position === false) {
            return '';
        }

        $substr_index = $start_position + (int) self::strlen($start, $encoding);
        $end_position = self::strpos($str, $end, $substr_index, $encoding);
        if (
            $end_position === false
            ||
            $end_position === $substr_index
        ) {
            return '';
        }

        return (string) self::substr(
            $str,
            $substr_index,
            $end_position - $substr_index,
            $encoding
        );
    }

    /**
     * Convert binary into a string.
     *
     * INFO: opposite to UTF8::str_to_binary()
     *
     * EXAMPLE: <code>UTF8::binary_to_str('11110000100111111001100010000011'); // '😃'</code>
     *
     * @param string $bin 1|0
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function binary_to_str($bin): string
    {
        if (!isset($bin[0])) {
            return '';
        }

        $convert = \base_convert($bin, 2, 16);
        if ($convert === '0') {
            return '';
        }

        return \pack('H*', $convert);
    }

    /**
     * Returns the UTF-8 Byte Order Mark Character.
     *
     * INFO: take a look at UTF8::$bom for e.g. UTF-16 and UTF-32 BOM values
     *
     * EXAMPLE: <code>UTF8::bom(); // "\xEF\xBB\xBF"</code>
     *
     * @psalm-pure
     *
     * @return non-empty-string
     *                           <p>UTF-8 Byte Order Mark.</p>
     */
    public static function bom(): string
    {
        return "\xef\xbb\xbf";
    }

    /**
     * @alias of UTF8::chr_map()
     *
     * @param callable(string): string $callback
     * @param string   $str
     *
     * @psalm-pure
     *
     * @return string[]
     *
     * @see   UTF8::chr_map()
     */
    public static function callback($callback, string $str): array
    {
        return self::chr_map($callback, $str);
    }

    /**
     * Returns the character at $index, with indexes starting at 0.
     *
     * @param string      $str        <p>The input string.</p>
     * @param int<1, max> $index <p>Position of the character.</p>
     * @param string      $encoding   [optional] <p>Default is UTF-8</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The character at $index.</p>
     */
    public static function char_at(string $str, int $index, string $encoding = 'UTF-8'): string
    {
        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str, $index, 1);
        }

        return (string) self::substr($str, $index, 1, $encoding);
    }

    /**
     * Returns an array consisting of the characters in the string.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return string[]
     *                  <p>An array of chars.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-list<string> : list<string>)
     */
    public static function chars(string $str): array
    {
        return self::str_split($str);
    }

    /**
     * This method will auto-detect your server environment for UTF-8 support.
     *
     * @return true|null
     *
     * @internal <p>You don't need to run it manually, it will be triggered if it's needed.</p>
     */
    public static function checkForSupport()
    {
        if (!isset(self::$SUPPORT['already_checked_via_portable_utf8'])) {
            self::$SUPPORT['already_checked_via_portable_utf8'] = true;

            // http://php.net/manual/en/book.mbstring.php
            self::$SUPPORT['mbstring'] = self::mbstring_loaded();

            self::$SUPPORT['mbstring_func_overload'] = self::mbstring_overloaded();
            if (self::$SUPPORT['mbstring'] === true) {
                \mb_internal_encoding('UTF-8');
                \mb_regex_encoding('UTF-8');
                self::$SUPPORT['mbstring_internal_encoding'] = 'UTF-8';
            }

            // http://php.net/manual/en/book.iconv.php
            self::$SUPPORT['iconv'] = self::iconv_loaded();

            // http://php.net/manual/en/book.intl.php
            self::$SUPPORT['intl'] = self::intl_loaded();

            // http://php.net/manual/en/class.intlchar.php
            self::$SUPPORT['intlChar'] = self::intlChar_loaded();

            // http://php.net/manual/en/book.ctype.php
            self::$SUPPORT['ctype'] = self::ctype_loaded();

            // http://php.net/manual/en/class.finfo.php
            self::$SUPPORT['finfo'] = self::finfo_loaded();

            // http://php.net/manual/en/book.json.php
            self::$SUPPORT['json'] = self::json_loaded();

            // http://php.net/manual/en/book.pcre.php
            self::$SUPPORT['pcre_utf8'] = self::pcre_utf8_support();

            self::$SUPPORT['symfony_polyfill_used'] = self::symfony_polyfill_used();
            if (self::$SUPPORT['symfony_polyfill_used'] === true) {
                \mb_internal_encoding('UTF-8');
                self::$SUPPORT['mbstring_internal_encoding'] = 'UTF-8';
            }

            return true;
        }

        return null;
    }

    /**
     * Generates a UTF-8 encoded character from the given code point.
     *
     * INFO: opposite to UTF8::ord()
     *
     * EXAMPLE: <code>UTF8::chr(0x2603); // '☃'</code>
     *
     * @param int    $code_point <p>The code point for which to generate a character.</p>
     * @param string $encoding   [optional] <p>Default is UTF-8</p>
     *
     * @psalm-pure
     *
     * @return string|null
     *                     <p>Multi-byte character, returns null on failure or empty input.</p>
     */
    public static function chr($code_point, string $encoding = 'UTF-8')
    {
        // init
        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<string,string>
         */
        static $CHAR_CACHE = [];

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if (
            $encoding !== 'UTF-8'
            &&
            $encoding !== 'ISO-8859-1'
            &&
            $encoding !== 'WINDOWS-1252'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::chr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        if (
            !\is_int($code_point) /* @phpstan-ignore-line | hack for bad inputs */
            ||
            $code_point <= 0
        ) {
            return null;
        }

        $cache_key = $code_point . '_' . $encoding;
        if (isset($CHAR_CACHE[$cache_key])) {
            return $CHAR_CACHE[$cache_key];
        }

        if ($code_point <= 0x80) { // only for "simple"-chars

            if (self::$CHR === null) {
                self::$CHR = self::getData('chr');
            }

            /**
             * @psalm-suppress PossiblyNullArrayAccess
             */
            $chr = self::$CHR[$code_point];

            if ($encoding !== 'UTF-8') {
                $chr = self::encode($encoding, $chr);
            }

            return $CHAR_CACHE[$cache_key] = $chr;
        }

        //
        // fallback via "IntlChar"
        //

        if (self::$SUPPORT['intlChar'] === true) {
            $chr = \IntlChar::chr($code_point);

            if ($encoding !== 'UTF-8') {
                $chr = self::encode($encoding, $chr);
            }

            return $CHAR_CACHE[$cache_key] = $chr;
        }

        //
        // fallback via vanilla php
        //

        if (self::$CHR === null) {
            self::$CHR = self::getData('chr');
        }

        $code_point = (int) $code_point;
        if ($code_point <= 0x7FF) {
            /**
             * @psalm-suppress PossiblyNullArrayAccess
             */
            $chr = self::$CHR[($code_point >> 6) + 0xC0] .
                   self::$CHR[($code_point & 0x3F) + 0x80];
        } elseif ($code_point <= 0xFFFF) {
            /**
             * @psalm-suppress PossiblyNullArrayAccess
             */
            $chr = self::$CHR[($code_point >> 12) + 0xE0] .
                   self::$CHR[(($code_point >> 6) & 0x3F) + 0x80] .
                   self::$CHR[($code_point & 0x3F) + 0x80];
        } else {
            /**
             * @psalm-suppress PossiblyNullArrayAccess
             */
            $chr = self::$CHR[($code_point >> 18) + 0xF0] .
                   self::$CHR[(($code_point >> 12) & 0x3F) + 0x80] .
                   self::$CHR[(($code_point >> 6) & 0x3F) + 0x80] .
                   self::$CHR[($code_point & 0x3F) + 0x80];
        }

        if ($encoding !== 'UTF-8') {
            $chr = self::encode($encoding, $chr);
        }

        return $CHAR_CACHE[$cache_key] = $chr;
    }

    /**
     * Applies callback to all characters of a string.
     *
     * EXAMPLE: <code>UTF8::chr_map([UTF8::class, 'strtolower'], 'Κόσμε'); // ['κ','ό', 'σ', 'μ', 'ε']</code>
     *
     * @param callable(string): string $callback <p>The callback function.</p>
     * @param string   $str      <p>UTF-8 string to run callback on.</p>
     *
     * @psalm-pure
     *
     * @return string[]
     *                  <p>The outcome of the callback, as array.</p>
     */
    public static function chr_map($callback, string $str): array
    {
        return \array_map(
            $callback,
            self::str_split($str)
        );
    }

    /**
     * Generates an array of byte length of each character of a Unicode string.
     *
     * 1 byte => U+0000  - U+007F
     * 2 byte => U+0080  - U+07FF
     * 3 byte => U+0800  - U+FFFF
     * 4 byte => U+10000 - U+10FFFF
     *
     * EXAMPLE: <code>UTF8::chr_size_list('中文空白-test'); // [3, 3, 3, 3, 1, 1, 1, 1, 1]</code>
     *
     * @param string $str <p>The original unicode string.</p>
     *
     * @psalm-pure
     *
     * @return int[]
     *               <p>An array of byte lengths of each character.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-list<1|2|3|4> : list<1|2|3|4>)
     */
    public static function chr_size_list(string $str): array
    {
        if ($str === '') {
            return [];
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            /* @phpstan-ignore-next-line | str_split only give one char, so that we only got int<1,4> */
            return \array_map(
                static function (string $data): int {
                    // "mb_" is available if overload is used, so use it ...
                    return \mb_strlen($data, 'CP850'); // 8-BIT
                },
                self::str_split($str)
            );
        }

        /* @phpstan-ignore-next-line | str_split only give one char, so that we only got int<1,4> */
        return \array_map('\strlen', self::str_split($str));
    }

    /**
     * Get a decimal code representation of a specific character.
     *
     * INFO: opposite to UTF8::decimal_to_chr()
     *
     * EXAMPLE: <code>UTF8::chr_to_decimal('§'); // 0xa7</code>
     *
     * @param string $char <p>The input character.</p>
     *
     * @psalm-pure
     *
     * @return int
     */
    public static function chr_to_decimal(string $char): int
    {
        if (self::$SUPPORT['iconv'] === true) {
            $chr_tmp = \iconv('UTF-8', 'UCS-4LE', $char);
            if ($chr_tmp !== false) {
                /** @phpstan-ignore-next-line - "unpack": only false if the format string contains errors */
                return \unpack('V', $chr_tmp)[1];
            }
        }

        $code = self::ord($char[0]);
        $bytes = 1;

        if (!($code & 0x80)) {
            // 0xxxxxxx
            return $code;
        }

        if (($code & 0xe0) === 0xc0) {
            // 110xxxxx
            $bytes = 2;
            $code &= ~0xc0;
        } elseif (($code & 0xf0) === 0xe0) {
            // 1110xxxx
            $bytes = 3;
            $code &= ~0xe0;
        } elseif (($code & 0xf8) === 0xf0) {
            // 11110xxx
            $bytes = 4;
            $code &= ~0xf0;
        }

        for ($i = 2; $i <= $bytes; ++$i) {
            // 10xxxxxx
            $code = ($code << 6) + (self::ord($char[$i - 1]) & ~0x80);
        }

        return $code;
    }

    /**
     * Get hexadecimal code point (U+xxxx) of a UTF-8 encoded character.
     *
     * EXAMPLE: <code>UTF8::chr_to_hex('§'); // U+00a7</code>
     *
     * @param int|string $char   <p>The input character</p>
     * @param string     $prefix [optional]
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The code point encoded as U+xxxx.</p>
     */
    public static function chr_to_hex($char, string $prefix = 'U+'): string
    {
        if ($char === '') {
            return '';
        }

        if ($char === '&#0;') {
            $char = '';
        }

        return self::int_to_hex(self::ord((string) $char), $prefix);
    }

    /**
     * Splits a string into smaller chunks and multiple lines, using the specified line ending character.
     *
     * EXAMPLE: <code>UTF8::chunk_split('ABC-ÖÄÜ-中文空白-κόσμε', 3); // "ABC\r\n-ÖÄ\r\nÜ-中\r\n文空白\r\n-κό\r\nσμε"</code>
     *
     * @param string      $str          <p>The original string to be split.</p>
     * @param int<1, max> $chunk_length [optional] <p>The maximum character length of a chunk.</p>
     * @param string      $end          [optional] <p>The character(s) to be inserted at the end of each chunk.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The chunked string.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function chunk_split(string $str, int $chunk_length = 76, string $end = "\r\n"): string
    {
        return \implode($end, self::str_split($str, $chunk_length));
    }

    /**
     * Accepts a string and removes all non-UTF-8 characters from it + extras if needed.
     *
     * EXAMPLE: <code>UTF8::clean("\xEF\xBB\xBF„Abcdef\xc2\xa0\x20…” — 😃 - DÃ¼sseldorf", true, true); // '„Abcdef  …” — 😃 - DÃ¼sseldorf'</code>
     *
     * @param string $str                                     <p>The string to be sanitized.</p>
     * @param bool   $remove_bom                              [optional] <p>Set to true, if you need to remove
     *                                                        UTF-BOM.</p>
     * @param bool   $normalize_whitespace                    [optional] <p>Set to true, if you need to normalize the
     *                                                        whitespace.</p>
     * @param bool   $normalize_msword                        [optional] <p>Set to true, if you need to normalize MS
     *                                                        Word chars e.g.: "…"
     *                                                        => "..."</p>
     * @param bool   $keep_non_breaking_space                 [optional] <p>Set to true, to keep non-breaking-spaces,
     *                                                        in
     *                                                        combination with
     *                                                        $normalize_whitespace</p>
     * @param bool   $replace_diamond_question_mark           [optional] <p>Set to true, if you need to remove diamond
     *                                                        question mark e.g.: "�"</p>
     * @param bool   $remove_invisible_characters             [optional] <p>Set to false, if you not want to remove
     *                                                        invisible characters e.g.: "\0"</p>
     * @param bool   $remove_invisible_characters_url_encoded [optional] <p>Set to true, if you not want to remove
     *                                                        invisible url encoded characters e.g.: "%0B"<br> WARNING:
     *                                                        maybe contains false-positives e.g. aa%0Baa -> aaaa.
     *                                                        </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>An clean UTF-8 encoded string.</p>
     */
    public static function clean(
        string $str,
        bool $remove_bom = false,
        bool $normalize_whitespace = false,
        bool $normalize_msword = false,
        bool $keep_non_breaking_space = false,
        bool $replace_diamond_question_mark = false,
        bool $remove_invisible_characters = true,
        bool $remove_invisible_characters_url_encoded = false
    ): string {
        // http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string
        // caused connection reset problem on larger strings

        $regex = '/
          (
            (?: [\x00-\x7F]               # single-byte sequences   0xxxxxxx
            |   [\xC0-\xDF][\x80-\xBF]    # double-byte sequences   110xxxxx 10xxxxxx
            |   [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences   1110xxxx 10xxxxxx * 2
            |   [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
            ){1,100}                      # ...one or more times
          )
        | ( [\x80-\xBF] )                 # invalid byte in range 10000000 - 10111111
        | ( [\xC0-\xFF] )                 # invalid byte in range 11000000 - 11111111
        /x';
        $str = (string) \preg_replace($regex, '$1', $str);

        if ($replace_diamond_question_mark) {
            $str = self::replace_diamond_question_mark($str);
        }

        if ($remove_invisible_characters) {
            $str = self::remove_invisible_characters($str, $remove_invisible_characters_url_encoded);
        }

        if ($normalize_whitespace) {
            $str = self::normalize_whitespace($str, $keep_non_breaking_space);
        }

        if ($normalize_msword) {
            $str = self::normalize_msword($str);
        }

        if ($remove_bom) {
            $str = self::remove_bom($str);
        }

        return $str;
    }

    /**
     * Clean-up a string and show only printable UTF-8 chars at the end  + fix UTF-8 encoding.
     *
     * EXAMPLE: <code>UTF8::cleanup("\xEF\xBB\xBF„Abcdef\xc2\xa0\x20…” — 😃 - DÃ¼sseldorf", true, true); // '„Abcdef  …” — 😃 - Düsseldorf'</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function cleanup($str): string
    {
        // init
        $str = (string) $str;

        if ($str === '') {
            return '';
        }

        // fixed ISO <-> UTF-8 Errors
        $str = self::fix_simple_utf8($str);

        // remove all none UTF-8 symbols
        // && remove diamond question mark (�)
        // && remove remove invisible characters (e.g. "\0")
        // && remove BOM
        // && normalize whitespace chars (but keep non-breaking-spaces)
        return self::clean(
            $str,
            true,
            true,
            false,
            true,
            true
        );
    }

    /**
     * Accepts a string or an array of chars and returns an array of Unicode code points.
     *
     * INFO: opposite to UTF8::string()
     *
     * EXAMPLE: <code>
     * UTF8::codepoints('κöñ'); // array(954, 246, 241)
     * // ... OR ...
     * UTF8::codepoints('κöñ', true); // array('U+03ba', 'U+00f6', 'U+00f1')
     * </code>
     *
     * @param string|string[] $arg         <p>A UTF-8 encoded string or an array of such chars.</p>
     * @param bool            $use_u_style <p>If True, will return code points in U+xxxx format,
     *                                     default, code points will be returned as integers.</p>
     *
     * @psalm-pure
     *
     * @return int[]|string[]
     *                        <p>
     *                        The array of code points:<br>
     *                        int[] for $u_style === false<br>
     *                        string[] for $u_style === true<br>
     *                        </p>
     *
     * @template T as string|string[]
     * @phpstan-param T $arg
     * @phpstan-return (T is non-empty-string ? ($use_u_style is true ? non-empty-list<string> : non-empty-list<int>) : ($use_u_style is true ? list<string> : list<int>))
     */
    public static function codepoints($arg, bool $use_u_style = false): array
    {
        if (\is_string($arg)) {
            $arg = self::str_split($arg);
        }

        /**
         * @psalm-suppress DocblockTypeContradiction
         * @phpstan-ignore-next-line hack for bad inputs
         */
        if (!\is_array($arg)) {
            return [];
        }

        if ($arg === []) {
            return [];
        }

        $arg = \array_map(
            [
                self::class,
                'ord',
            ],
            $arg
        );

        if ($use_u_style) {
            $arg = \array_map(
                [
                    self::class,
                    'int_to_hex',
                ],
                $arg
            );
        }

        /* @phpstan-ignore-next-line | FP? */
        return $arg;
    }

    /**
     * Trims the string and replaces consecutive whitespace characters with a
     * single space. This includes tabs and newline characters, as well as
     * multibyte whitespace such as the thin space and ideographic space.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with trimmed $str and condensed whitespace.</p>
     */
    public static function collapse_whitespace(string $str): string
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \trim((string) \mb_ereg_replace('[[:space:]]+', ' ', $str));
        }

        return \trim(self::regex_replace($str, '[[:space:]]+', ' '));
    }

    /**
     * Returns count of characters used in a string.
     *
     * EXAMPLE: <code>UTF8::count_chars('κaκbκc'); // array('κ' => 3, 'a' => 1, 'b' => 1, 'c' => 1)</code>
     *
     * @param string $str                     <p>The input string.</p>
     * @param bool   $clean_utf8              [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param bool   $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
     *
     * @psalm-pure
     *
     * @return int[]
     *               <p>An associative array of Character as keys and
     *               their count as values.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-array<string, int> : array<string, int>)
     */
    public static function count_chars(
        string $str,
        bool $clean_utf8 = false,
        bool $try_to_use_mb_functions = true
    ): array {
        return \array_count_values(
            self::str_split(
                $str,
                1,
                $clean_utf8,
                $try_to_use_mb_functions
            )
        );
    }

    /**
     * Create a valid CSS identifier for e.g. "class"- or "id"-attributes.
     *
     * EXAMPLE: <code>UTF8::css_identifier('123foo/bar!!!'); // _23foo-bar</code>
     *
     * copy&past from https://github.com/drupal/core/blob/8.8.x/lib/Drupal/Component/Utility/Html.php#L95
     *
     * @param string   $str        <p>INFO: if no identifier is given e.g. " " or "", we will create a unique string automatically</p>
     * @param string[] $filter
     * @param bool     $strip_tags
     * @param bool     $strtolower
     *
     * @psalm-pure
     *
     * @return string
     *
     * @phpstan-param array<string,string> $filter
     */
    public static function css_identifier(
        string $str = '',
        array $filter = [
            ' ' => '-',
            '/' => '-',
            '[' => '',
            ']' => '',
        ],
        bool $strip_tags = false,
        bool $strtolower = true
    ): string {
        // We could also use strtr() here but its much slower than str_replace(). In
        // order to keep '__' to stay '__' we first replace it with a different
        // placeholder after checking that it is not defined as a filter.
        $double_underscore_replacements = 0;

        $str = \trim($str);
        if ($str) {
            $str = self::clean($str, true);
        }

        if ($strip_tags) {
            $str = \strip_tags($str);
        }

        $str = \trim($str);
        // fallback (1)
        if (!$str) {
            $str = \uniqid('auto-generated-css-class', true);
        }

        if ($strtolower) {
            $str = \strtolower($str);
        }

        if (!isset($filter['__'])) {
            $str = \str_replace('__', '##', $str, $double_underscore_replacements);
        }

        $str = \str_replace(\array_keys($filter), \array_values($filter), $str);
        // Replace temporary placeholder '##' with '__' only if the original
        // $identifier contained '__'.
        if ($double_underscore_replacements > 0) {
            $str = \str_replace('##', '__', $str);
        }

        // Valid characters in a CSS identifier are:
        // - the hyphen (U+002D)
        // - a-z (U+0030 - U+0039)
        // - A-Z (U+0041 - U+005A)
        // - the underscore (U+005F)
        // - 0-9 (U+0061 - U+007A)
        // - ISO 10646 characters U+00A1 and higher
        // We strip out any character not in the above list.
        $str = (string) \preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $str);
        // Identifiers cannot start with a digit, two hyphens, or a hyphen followed by a digit.
        $str = (string) \preg_replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__'], $str);

        return \trim($str, '-');
    }

    /**
     * Remove css media-queries.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function css_stripe_media_queries(string $str): string
    {
        return (string) \preg_replace(
            '#@media\\s+(?:only\\s)?(?:[\\s{(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#isumU',
            '',
            $str
        );
    }

    /**
     * Checks whether ctype is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function ctype_loaded(): bool
    {
        return \extension_loaded('ctype');
    }

    /**
     * Converts an int value into a UTF-8 character.
     *
     * INFO: opposite to UTF8::string()
     *
     * EXAMPLE: <code>UTF8::decimal_to_chr(931); // 'Σ'</code>
     *
     * @param int|string $int
     *
     * @phpstan-param int|numeric-string $int
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function decimal_to_chr($int): string
    {
        // We cannot use html_entity_decode() here, as it will not return
        // characters for many values < 160.
        return \mb_convert_encoding('&#' . $int . ';', 'UTF-8', 'HTML-ENTITIES');
    }

    /**
     * Decodes a MIME header field
     *
     * @param string $str
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>A decoded MIME field on success,
     *                      or false if an error occurs during the decoding.</p>
     */
    public static function decode_mimeheader($str, string $encoding = 'UTF-8')
    {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        // always fallback via symfony polyfill
        return \iconv_mime_decode($str, \ICONV_MIME_DECODE_CONTINUE_ON_ERROR, $encoding);
    }

    /**
     * Convert any two-letter country code (ISO 3166-1) to the corresponding Emoji.
     *
     * @see https://en.wikipedia.org/wiki/ISO_3166-1
     *
     * @param string $country_code_iso_3166_1 <p>e.g. DE</p>
     *
     * @return string
     *                <p>Emoji or empty string on error.</p>
     */
    public static function emoji_from_country_code(string $country_code_iso_3166_1): string
    {
        if ($country_code_iso_3166_1 === '') {
            return '';
        }

        if (self::strlen($country_code_iso_3166_1) !== 2) {
            return '';
        }

        $country_code_iso_3166_1 = \strtoupper($country_code_iso_3166_1);

        $flagOffset = 0x1F1E6;
        $asciiOffset = 0x41;

        return (self::chr((self::ord($country_code_iso_3166_1[0]) - $asciiOffset + $flagOffset)) ?? '') .
               (self::chr((self::ord($country_code_iso_3166_1[1]) - $asciiOffset + $flagOffset)) ?? '');
    }

    /**
     * Decodes a string which was encoded by "UTF8::emoji_encode()".
     *
     * INFO: opposite to UTF8::emoji_encode()
     *
     * EXAMPLE: <code>
     * UTF8::emoji_decode('foo CHARACTER_OGRE', false); // 'foo 👹'
     * //
     * UTF8::emoji_decode('foo _-_PORTABLE_UTF8_-_308095726_-_627590803_-_8FTU_ELBATROP_-_', true); // 'foo 👹'
     * </code>
     *
     * @param string $str                            <p>The input string.</p>
     * @param bool   $use_reversible_string_mappings [optional] <p>
     *                                               When <b>TRUE</b>, we se a reversible string mapping
     *                                               between "emoji_encode" and "emoji_decode".</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function emoji_decode(
        string $str,
        bool $use_reversible_string_mappings = false
    ): string {
        if (self::$EMOJI_KEYS_CACHE === null) {
            /** @phpstan-ignore-next-line - we need to load the data first */
            self::initEmojiData();
        }

        if ($use_reversible_string_mappings) {
            return (string) \str_replace(
                (array) self::$EMOJI_KEYS_REVERSIBLE_CACHE,
                (array) self::$EMOJI_VALUES_CACHE,
                $str
            );
        }

        return (string) \str_replace(
            (array) self::$EMOJI_KEYS_CACHE,
            (array) self::$EMOJI_VALUES_CACHE,
            $str
        );
    }

    /**
     * Encode a string with emoji chars into a non-emoji string.
     *
     * INFO: opposite to UTF8::emoji_decode()
     *
     * EXAMPLE: <code>
     * UTF8::emoji_encode('foo 👹', false)); // 'foo CHARACTER_OGRE'
     * //
     * UTF8::emoji_encode('foo 👹', true)); // 'foo _-_PORTABLE_UTF8_-_308095726_-_627590803_-_8FTU_ELBATROP_-_'
     * </code>
     *
     * @param string $str                            <p>The input string</p>
     * @param bool   $use_reversible_string_mappings [optional] <p>
     *                                               when <b>TRUE</b>, we use a reversible string mapping
     *                                               between "emoji_encode" and "emoji_decode"</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function emoji_encode(
        string $str,
        bool $use_reversible_string_mappings = false
    ): string {
        if (self::$EMOJI_KEYS_CACHE === null) {
            /** @phpstan-ignore-next-line - we need to load the data first */
            self::initEmojiData();
        }

        if ($use_reversible_string_mappings) {
            return (string) \str_replace(
                (array) self::$EMOJI_VALUES_CACHE,
                (array) self::$EMOJI_KEYS_REVERSIBLE_CACHE,
                $str
            );
        }

        return (string) \str_replace(
            (array) self::$EMOJI_VALUES_CACHE,
            (array) self::$EMOJI_KEYS_CACHE,
            $str
        );
    }

    /**
     * Encode a string with a new charset-encoding.
     *
     * INFO:  This function will also try to fix broken / double encoding,
     *        so you can call this function also on a UTF-8 string and you don't mess up the string.
     *
     * EXAMPLE: <code>
     * UTF8::encode('ISO-8859-1', '-ABC-中文空白-'); // '-ABC-????-'
     * //
     * UTF8::encode('UTF-8', '-ABC-中文空白-'); // '-ABC-中文空白-'
     * //
     * UTF8::encode('HTML', '-ABC-中文空白-'); // '-ABC-&#20013;&#25991;&#31354;&#30333;-'
     * //
     * UTF8::encode('BASE64', '-ABC-中文空白-'); // 'LUFCQy3kuK3mlofnqbrnmb0t'
     * </code>
     *
     * @param string $to_encoding                   <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.</p>
     * @param string $str                           <p>The input string</p>
     * @param bool   $auto_detect_the_from_encoding [optional] <p>Force the new encoding (we try to fix broken / double
     *                                              encoding for UTF-8)<br> otherwise we auto-detect the current
     *                                              string-encoding</p>
     * @param string $from_encoding                 [optional] <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.<br>
     *                                              A empty string will trigger the autodetect anyway.</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @psalm-suppress InvalidReturnStatement
     */
    public static function encode(
        string $to_encoding,
        string $str,
        bool $auto_detect_the_from_encoding = true,
        string $from_encoding = ''
    ): string {
        if ($str === '' || $to_encoding === '') {
            return $str;
        }

        if ($to_encoding !== 'UTF-8' && $to_encoding !== 'CP850') {
            $to_encoding = self::normalize_encoding($to_encoding, 'UTF-8');
        }

        if ($from_encoding && $from_encoding !== 'UTF-8' && $from_encoding !== 'CP850') {
            $from_encoding = self::normalize_encoding($from_encoding);
        }

        if (
            $to_encoding
            &&
            $from_encoding
            &&
            $from_encoding === $to_encoding
        ) {
            return $str;
        }

        if ($from_encoding === 'JSON') {
            $str = self::json_decode($str);
            $from_encoding = '';
        }

        if ($from_encoding === 'BASE64') {
            $str = \base64_decode($str, true);
            $from_encoding = '';
        }

        if ($from_encoding === 'HTML-ENTITIES') {
            /* @phpstan-ignore-next-line | $str has manybe changed */
            $str = self::html_entity_decode($str, \ENT_COMPAT);
            $from_encoding = '';
        }

        if ($to_encoding === 'JSON') {
            $return = self::json_encode($str);
            if ($return === false) {
                throw new \InvalidArgumentException('The input string [' . $str . '] can not be used for json_encode().');
            }

            return $return;
        }

        if ($to_encoding === 'BASE64') {
            return \base64_encode($str);
        }

        if ($to_encoding === 'HTML-ENTITIES') {
            /* @phpstan-ignore-next-line | $str has manybe changed */
            return self::html_encode($str, true);
        }

        if (
            $auto_detect_the_from_encoding
            ||
            !$from_encoding
        ) {
            $from_encoding_auto_detected = self::str_detect_encoding($str);
        } else {
            $from_encoding_auto_detected = false;
        }

        // DEBUG
        //var_dump($to_encoding, $from_encoding, $from_encoding_auto_detected, $str, "\n\n");

        if ($from_encoding_auto_detected !== false) {
            $from_encoding = $from_encoding_auto_detected;
        } elseif ($auto_detect_the_from_encoding) {
            // fallback for the "autodetect"-mode
            /* @phpstan-ignore-next-line | $str has manybe changed */
            return self::to_utf8($str);
        }

        if (
            !$from_encoding
            ||
            $from_encoding === $to_encoding
        ) {
            return $str;
        }

        if (
            $to_encoding === 'UTF-8'
            &&
            (
                $from_encoding === 'WINDOWS-1252'
                ||
                $from_encoding === 'ISO-8859-1'
            )
        ) {
            /* @phpstan-ignore-next-line | $str has manybe changed */
            return self::to_utf8($str);
        }

        if (
            $to_encoding === 'ISO-8859-1'
            &&
            (
                $from_encoding === 'WINDOWS-1252'
                ||
                $from_encoding === 'UTF-8'
            )
        ) {
            /* @phpstan-ignore-next-line | $str has manybe changed */
            return self::to_iso8859($str);
        }

        if (
            $to_encoding !== 'UTF-8'
            &&
            $to_encoding !== 'ISO-8859-1'
            &&
            $to_encoding !== 'WINDOWS-1252'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::encode() without mbstring cannot handle "' . $to_encoding . '" encoding', \E_USER_WARNING);
        }

        if (self::$SUPPORT['mbstring'] === true) {
            $str_encoded = \mb_convert_encoding(
                $str,
                $to_encoding,
                $from_encoding
            );

            if ($str_encoded) {
                \assert(\is_string($str_encoded));

                return $str_encoded;
            }
        }

        /** @noinspection PhpUsageOfSilenceOperatorInspection - Detected an incomplete multibyte character in input string */
        $return = @\iconv($from_encoding, $to_encoding, $str);
        if ($return !== false) {
            return $return;
        }

        return $str;
    }

    /**
     * @param string      $str
     * @param string      $from_charset      [optional] <p>Set the input charset.</p>
     * @param string      $to_charset        [optional] <p>Set the output charset.</p>
     * @param string      $transfer_encoding [optional] <p>Set the transfer encoding.</p>
     * @param string      $linefeed          [optional] <p>Set the used linefeed.</p>
     * @param int<1, max> $indent            [optional] <p>Set the max length indent.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>An encoded MIME field on success,
     *                      or false if an error occurs during the encoding.</p>
     */
    public static function encode_mimeheader(
        string $str,
        string $from_charset = 'UTF-8',
        string $to_charset = 'UTF-8',
        string $transfer_encoding = 'Q',
        string $linefeed = "\r\n",
        int $indent = 76
    ) {
        if ($from_charset !== 'UTF-8' && $from_charset !== 'CP850') {
            $from_charset = self::normalize_encoding($from_charset, 'UTF-8');
        }

        if ($to_charset !== 'UTF-8' && $to_charset !== 'CP850') {
            $to_charset = self::normalize_encoding($to_charset, 'UTF-8');
        }

        // always fallback via symfony polyfill
        return \iconv_mime_encode(
            '',
            $str,
            [
                'scheme'           => $transfer_encoding,
                'line-length'      => $indent,
                'input-charset'    => $from_charset,
                'output-charset'   => $to_charset,
                'line-break-chars' => $linefeed,
            ]
        );
    }

    /**
     * Create an extract from a sentence, so if the search-string was found, it tries to center in the output.
     *
     * @param string   $str                       <p>The input string.</p>
     * @param string   $search                    <p>The searched string.</p>
     * @param int|null $length                    [optional] <p>Default: null === text->length / 2</p>
     * @param string   $replacer_for_skipped_text [optional] <p>Default: …</p>
     * @param string   $encoding                  [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function extract_text(
        string $str,
        string $search = '',
        int $length = null,
        string $replacer_for_skipped_text = '…',
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '') {
            return '';
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        $trim_chars = "\t\r\n -_()!~?=+/*\\,.:;\"'[]{}`&";

        if ($length === null) {
            $length = (int) \round((int) self::strlen($str, $encoding) / 2);
        }

        if ($search === '') {
            if ($encoding === 'UTF-8') {
                if ($length > 0) {
                    $string_length = (int) \mb_strlen($str);
                    $end = ($length - 1) > $string_length ? $string_length : ($length - 1);
                } else {
                    $end = 0;
                }

                $pos = (int) \min(
                    \mb_strpos($str, ' ', $end),
                    \mb_strpos($str, '.', $end)
                );
            } else {
                if ($length > 0) {
                    $string_length = (int) self::strlen($str, $encoding);
                    $end = ($length - 1) > $string_length ? $string_length : ($length - 1);
                } else {
                    $end = 0;
                }

                $pos = (int) \min(
                    self::strpos($str, ' ', $end, $encoding),
                    self::strpos($str, '.', $end, $encoding)
                );
            }

            if ($pos) {
                if ($encoding === 'UTF-8') {
                    $str_sub = \mb_substr($str, 0, $pos);
                } else {
                    $str_sub = self::substr($str, 0, $pos, $encoding);
                }

                if ($str_sub === false) {
                    return '';
                }

                return \rtrim($str_sub, $trim_chars) . $replacer_for_skipped_text;
            }

            return $str;
        }

        if ($encoding === 'UTF-8') {
            $word_position = (int) \mb_stripos($str, $search);
            $half_side = (int) ($word_position - $length / 2 + (int) \mb_strlen($search) / 2);
        } else {
            $word_position = (int) self::stripos($str, $search, 0, $encoding);
            $half_side = (int) ($word_position - $length / 2 + (int) self::strlen($search, $encoding) / 2);
        }

        $pos_start = 0;
        if ($half_side > 0) {
            if ($encoding === 'UTF-8') {
                $half_text = \mb_substr($str, 0, $half_side);
            } else {
                $half_text = self::substr($str, 0, $half_side, $encoding);
            }
            if ($half_text !== false) {
                if ($encoding === 'UTF-8') {
                    $pos_start = (int) \max(
                        \mb_strrpos($half_text, ' '),
                        \mb_strrpos($half_text, '.')
                    );
                } else {
                    $pos_start = (int) \max(
                        self::strrpos($half_text, ' ', 0, $encoding),
                        self::strrpos($half_text, '.', 0, $encoding)
                    );
                }
            }
        }

        if ($word_position && $half_side > 0) {
            $offset = $pos_start + $length - 1;
            $real_length = (int) self::strlen($str, $encoding);

            if ($offset > $real_length) {
                $offset = $real_length;
            }

            if ($encoding === 'UTF-8') {
                $pos_end = (int) \min(
                    \mb_strpos($str, ' ', $offset),
                    \mb_strpos($str, '.', $offset)
                ) - $pos_start;
            } else {
                $pos_end = (int) \min(
                    self::strpos($str, ' ', $offset, $encoding),
                    self::strpos($str, '.', $offset, $encoding)
                ) - $pos_start;
            }

            if (!$pos_end || $pos_end <= 0) {
                if ($encoding === 'UTF-8') {
                    $str_sub = \mb_substr($str, $pos_start, (int) \mb_strlen($str));
                } else {
                    $str_sub = self::substr($str, $pos_start, (int) self::strlen($str, $encoding), $encoding);
                }
                if ($str_sub !== false) {
                    $extract = $replacer_for_skipped_text . \ltrim($str_sub, $trim_chars);
                } else {
                    $extract = '';
                }
            } else {
                if ($encoding === 'UTF-8') {
                    $str_sub = \mb_substr($str, $pos_start, $pos_end);
                } else {
                    $str_sub = self::substr($str, $pos_start, $pos_end, $encoding);
                }
                if ($str_sub !== false) {
                    $extract = $replacer_for_skipped_text . \trim($str_sub, $trim_chars) . $replacer_for_skipped_text;
                } else {
                    $extract = '';
                }
            }
        } else {
            $offset = $length - 1;
            $true_length = (int) self::strlen($str, $encoding);

            if ($offset > $true_length) {
                $offset = $true_length;
            }

            if ($encoding === 'UTF-8') {
                $pos_end = (int) \min(
                    \mb_strpos($str, ' ', $offset),
                    \mb_strpos($str, '.', $offset)
                );
            } else {
                $pos_end = (int) \min(
                    self::strpos($str, ' ', $offset, $encoding),
                    self::strpos($str, '.', $offset, $encoding)
                );
            }

            if ($pos_end) {
                if ($encoding === 'UTF-8') {
                    $str_sub = \mb_substr($str, 0, $pos_end);
                } else {
                    $str_sub = self::substr($str, 0, $pos_end, $encoding);
                }
                if ($str_sub !== false) {
                    $extract = \rtrim($str_sub, $trim_chars) . $replacer_for_skipped_text;
                } else {
                    $extract = '';
                }
            } else {
                $extract = $str;
            }
        }

        return $extract;
    }

    /**
     * Reads entire file into a string.
     *
     * EXAMPLE: <code>UTF8::file_get_contents('utf16le.txt'); // ...</code>
     *
     * WARNING: Do not use UTF-8 Option ($convert_to_utf8) for binary files (e.g.: images) !!!
     *
     * @see http://php.net/manual/en/function.file-get-contents.php
     *
     * @param string        $filename         <p>
     *                                        Name of the file to read.
     *                                        </p>
     * @param bool          $use_include_path [optional] <p>
     *                                        Prior to PHP 5, this parameter is called
     *                                        use_include_path and is a bool.
     *                                        As of PHP 5 the FILE_USE_INCLUDE_PATH can be used
     *                                        to trigger include path
     *                                        search.
     *                                        </p>
     * @param resource|null $context          [optional] <p>
     *                                        A valid context resource created with
     *                                        stream_context_create. If you don't need to use a
     *                                        custom context, you can skip this parameter by &null;.
     *                                        </p>
     * @param int|null      $offset           [optional] <p>
     *                                        The offset where the reading starts.
     *                                        </p>
     * @param int<0, max>|null $max_length       [optional] <p>
     *                                        Maximum length of data read. The default is to read until end
     *                                        of file is reached.
     *                                        </p>
     * @param int           $timeout          <p>The time in seconds for the timeout.</p>
     * @param bool          $convert_to_utf8  <strong>WARNING!!!</strong> <p>Maybe you can't use this option for
     *                                        some files, because they used non default utf-8 chars. Binary files
     *                                        like images or pdf will not be converted.</p>
     * @param string        $from_encoding    [optional] <p>e.g. 'UTF-16', 'UTF-8', 'ISO-8859-1', etc.<br>
     *                                        A empty string will trigger the autodetect anyway.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The function returns the read data as string or <b>false</b> on failure.</p>
     */
    public static function file_get_contents(
        string $filename,
        bool $use_include_path = false,
        $context = null,
        int $offset = null,
        int $max_length = null,
        int $timeout = 10,
        bool $convert_to_utf8 = true,
        string $from_encoding = ''
    ) {
        // init
        /** @noinspection CallableParameterUseCaseInTypeContextInspection - is ok here */
        $filename = Bootup::filter_sanitize_string_polyfill($filename);
        if ($filename === false) {
            return false;
        }

        if ($timeout && $context === null) {
            $context = \stream_context_create(
                [
                    'http' => [
                        'timeout' => $timeout,
                    ],
                ]
            );
        }

        if ($offset === null) {
            $offset = 0;
        }

        if (\is_int($max_length)) {
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            if ($max_length < 0) {
                $max_length = 0;
            }

            $data = \file_get_contents($filename, $use_include_path, $context, $offset, $max_length);
        } else {
            $data = \file_get_contents($filename, $use_include_path, $context, $offset);
        }

        // return false on error
        if ($data === false) {
            return false;
        }

        if (
            $convert_to_utf8
            &&
            (
                !self::is_binary($data, true)
                ||
                self::is_utf16($data, false) !== false
                ||
                self::is_utf32($data, false) !== false
            )
        ) {
            $data = self::encode('UTF-8', $data, false, $from_encoding);
            $data = self::cleanup($data);
        }

        return $data;
    }

    /**
     * Checks if a file starts with BOM (Byte Order Mark) character.
     *
     * EXAMPLE: <code>UTF8::file_has_bom('utf8_with_bom.txt'); // true</code>
     *
     * @param string $file_path <p>Path to a valid file.</p>
     *
     * @throws \RuntimeException if file_get_contents() returned false
     *
     * @return bool
     *              <p><strong>true</strong> if the file has BOM at the start, <strong>false</strong> otherwise</p>
     *
     * @psalm-pure
     */
    public static function file_has_bom(string $file_path): bool
    {
        $file_content = \file_get_contents($file_path);
        if ($file_content === false) {
            throw new \RuntimeException('file_get_contents() returned false for:' . $file_path);
        }

        return self::string_has_bom($file_content);
    }

    /**
     * Normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
     *
     * EXAMPLE: <code>UTF8::filter(array("\xE9", 'à', 'a')); // array('é', 'à', 'a')</code>
     *
     * @param array|object|string $var
     * @param int                 $normalization_form
     * @param string              $leading_combining
     *
     * @psalm-pure
     *
     * @return mixed
     *
     * @template TFilter
     * @phpstan-param TFilter $var
     * @phpstan-return TFilter
     */
    public static function filter(
        $var,
        int $normalization_form = \Normalizer::NFC,
        string $leading_combining = '◌'
    ) {
        switch (\gettype($var)) {
            case 'object':
            case 'array':
                /* @phpstan-ignore-next-line | object & array are both iterable */
                foreach ($var as &$v) {
                    $v = self::filter($v, $normalization_form, $leading_combining);
                }
                unset($v);

                break;
            case 'string':

                if (\strpos($var, "\r") !== false) {
                    $var = self::normalize_line_ending($var);
                }

                if (!ASCII::is_ascii($var)) {
                    if (\Normalizer::isNormalized($var, $normalization_form)) {
                        $n = '-';
                    } else {
                        $n = \Normalizer::normalize($var, $normalization_form);

                        if ($n && isset($n[0])) {
                            $var = $n;
                        } else {
                            $var = self::encode('UTF-8', $var);
                        }
                    }

                    \assert(\is_string($var));
                    if (
                        $n
                        &&
                        $var[0] >= "\x80"
                        &&
                        isset($n[0], $leading_combining[0])
                        &&
                        \preg_match('/^\\p{Mn}/u', $var)
                    ) {
                        // Prevent leading combining chars
                        // for NFC-safe concatenations.
                        $var = $leading_combining . $var;
                    }
                }

                break;
            default:
                // nothing
        }

        /** @noinspection PhpSillyAssignmentInspection */
        /** @phpstan-var TFilter $var */
        $var = $var;

        return $var;
    }

    /**
     * "filter_input()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
     *
     * Gets a specific external variable by name and optionally filters it.
     *
     * EXAMPLE: <code>
     * // _GET['foo'] = 'bar';
     * UTF8::filter_input(INPUT_GET, 'foo', FILTER_UNSAFE_RAW)); // 'bar'
     * </code>
     *
     * @see http://php.net/manual/en/function.filter-input.php
     *
     * @param int            $type          <p>
     *                                      One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
     *                                      <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
     *                                      <b>INPUT_ENV</b>.
     *                                      </p>
     * @param string         $variable_name <p>
     *                                      Name of a variable to get.
     *                                      </p>
     * @param int            $filter        [optional] <p>
     *                                      The ID of the filter to apply. The
     *                                      manual page lists the available filters.
     *                                      </p>
     * @param int|int[]|null $options       [optional] <p>
     *                                      Associative array of options or bitwise disjunction of flags. If filter
     *                                      accepts options, flags can be provided in "flags" field of array.
     *                                      </p>
     *
     * @psalm-pure
     *
     * @return mixed
     *               <p>
     *               Value of the requested variable on success, <b>FALSE</b> if the filter fails, or <b>NULL</b> if the
     *               <i>variable_name</i> variable is not set. If the flag <b>FILTER_NULL_ON_FAILURE</b> is used, it
     *               returns <b>FALSE</b> if the variable is not set and <b>NULL</b> if the filter fails.
     *               </p>
     */
    public static function filter_input(
        int $type,
        string $variable_name,
        int $filter = \FILTER_DEFAULT,
        $options = null
    ) {
        /**
         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
         */
        if ($options === null || \func_num_args() < 4) {
            $var = \filter_input($type, $variable_name, $filter);
        } else {
            $var = \filter_input($type, $variable_name, $filter, $options);
        }

        return self::filter($var);
    }

    /**
     * "filter_input_array()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
     *
     * Gets external variables and optionally filters them.
     *
     * EXAMPLE: <code>
     * // _GET['foo'] = 'bar';
     * UTF8::filter_input_array(INPUT_GET, array('foo' => 'FILTER_UNSAFE_RAW')); // array('bar')
     * </code>
     *
     * @see http://php.net/manual/en/function.filter-input-array.php
     *
     * @param int                       $type       <p>
     *                                              One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
     *                                              <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
     *                                              <b>INPUT_ENV</b>.
     *                                              </p>
     * @param array<string, mixed>|null $definition [optional] <p>
     *                                              An array defining the arguments. A valid key is a string
     *                                              containing a variable name and a valid value is either a filter type, or an array
     *                                              optionally specifying the filter, flags and options. If the value is an
     *                                              array, valid keys are filter which specifies the
     *                                              filter type,
     *                                              flags which specifies any flags that apply to the
     *                                              filter, and options which specifies any options that
     *                                              apply to the filter. See the example below for a better understanding.
     *                                              </p>
     *                                              <p>
     *                                              This parameter can be also an integer holding a filter constant. Then all values in the
     *                                              input array are filtered by this filter.
     *                                              </p>
     * @param bool                      $add_empty  [optional] <p>
     *                                              Add missing keys as <b>NULL</b> to the return value.
     *                                              </p>
     *
     * @psalm-pure
     *
     * @return array<string, mixed>|false|null
     *                                         <p>
     *                                         An array containing the values of the requested variables on success, or <b>FALSE</b> on failure.
     *                                         An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if the variable is not
     *                                         set. Or if the flag <b>FILTER_NULL_ON_FAILURE</b> is used, it returns <b>FALSE</b> if the variable
     *                                         is not set and <b>NULL</b> if the filter fails.
     *                                         </p>
     */
    public static function filter_input_array(
        int $type,
        $definition = null,
        bool $add_empty = true
    ) {
        /**
         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
         */
        if ($definition === null || \func_num_args() < 2) {
            $a = \filter_input_array($type);
        } else {
            $a = \filter_input_array($type, $definition, $add_empty);
        }

        /* @phpstan-ignore-next-line | magic frm self::filter :/ */
        return self::filter($a);
    }

    /**
     * "filter_var()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
     *
     * Filters a variable with a specified filter.
     *
     * EXAMPLE: <code>UTF8::filter_var('-ABC-中文空白-', FILTER_VALIDATE_URL); // false</code>
     *
     * @see http://php.net/manual/en/function.filter-var.php
     *
     * @param float|int|string|null $variable <p>
     *                                        Value to filter.
     *                                        </p>
     * @param int                   $filter   [optional] <p>
     *                                        The ID of the filter to apply. The
     *                                        manual page lists the available filters.
     *                                        </p>
     * @param int|int[]             $options  [optional] <p>
     *                                        Associative array of options or bitwise disjunction of flags. If filter
     *                                        accepts options, flags can be provided in "flags" field of array. For
     *                                        the "callback" filter, callable type should be passed. The
     *                                        callback must accept one argument, the value to be filtered, and return
     *                                        the value after filtering/sanitizing it.
     *                                        </p>
     *                                        <p>
     *                                        <code>
     *                                        // for filters that accept options, use this format
     *                                        $options = array(
     *                                        'options' => array(
     *                                        'default' => 3, // value to return if the filter fails
     *                                        // other options here
     *                                        'min_range' => 0
     *                                        ),
     *                                        'flags' => FILTER_FLAG_ALLOW_OCTAL,
     *                                        );
     *                                        $var = filter_var('0755', FILTER_VALIDATE_INT, $options);
     *                                        // for filter that only accept flags, you can pass them directly
     *                                        $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
     *                                        // for filter that only accept flags, you can also pass as an array
     *                                        $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN,
     *                                        array('flags' => FILTER_NULL_ON_FAILURE));
     *                                        // callback validate filter
     *                                        function foo($value)
     *                                        {
     *                                        // Expected format: Surname, GivenNames
     *                                        if (strpos($value, ", ") === false) return false;
     *                                        list($surname, $givennames) = explode(", ", $value, 2);
     *                                        $empty = (empty($surname) || empty($givennames));
     *                                        $notstrings = (!is_string($surname) || !is_string($givennames));
     *                                        if ($empty || $notstrings) {
     *                                        return false;
     *                                        } else {
     *                                        return $value;
     *                                        }
     *                                        }
     *                                        $var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo'));
     *                                        </code>
     *                                        </p>
     *
     * @psalm-pure
     *
     * @return mixed
     *               <p>The filtered data, or <b>FALSE</b> if the filter fails.</p>
     */
    public static function filter_var(
        $variable,
        int $filter = \FILTER_DEFAULT,
        $options = 0
    ) {
        /**
         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
         */
        if (\func_num_args() < 3) {
            $variable = \filter_var($variable, $filter);
        } else {
            $variable = \filter_var($variable, $filter, $options);
        }

        return self::filter($variable);
    }

    /**
     * "filter_var_array()"-wrapper with normalizes to UTF-8 NFC, converting from WINDOWS-1252 when needed.
     *
     * Gets multiple variables and optionally filters them.
     *
     * EXAMPLE: <code>
     * $filters = [
     *     'name'  => ['filter'  => FILTER_CALLBACK, 'options' => [UTF8::class, 'ucwords']],
     *     'age'   => ['filter'  => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 120]],
     *     'email' => FILTER_VALIDATE_EMAIL,
     * ];
     *
     * $data = [
     *     'name' => 'κόσμε',
     *     'age' => '18',
     *     'email' => 'foo@bar.de'
     * ];
     *
     * UTF8::filter_var_array($data, $filters, true); // ['name' => 'Κόσμε', 'age' => 18, 'email' => 'foo@bar.de']
     * </code>
     *
     * @see http://php.net/manual/en/function.filter-var-array.php
     *
     * @param array<string, mixed>          $data       <p>
     *                                                  An array with string keys containing the data to filter.
     *                                                  </p>
     * @param array<string, mixed>|int      $definition [optional] <p>
     *                                                  An array defining the arguments. A valid key is a string
     *                                                  containing a variable name and a valid value is either a
     *                                                  filter type, or an
     *                                                  array optionally specifying the filter, flags and options.
     *                                                  If the value is an array, valid keys are filter
     *                                                  which specifies the filter type,
     *                                                  flags which specifies any flags that apply to the
     *                                                  filter, and options which specifies any options that
     *                                                  apply to the filter. See the example below for a better understanding.
     *                                                  </p>
     *                                                  <p>
     *                                                  This parameter can be also an integer holding a filter constant. Then all values
     *                                                  in the input array are filtered by this filter.
     *                                                  </p>
     * @param bool                          $add_empty  [optional] <p>
     *                                                  Add missing keys as <b>NULL</b> to the return value.
     *                                                  </p>
     *
     * @psalm-pure
     *
     * @return array<string, mixed>|false|null
     *                                         <p>
     *                                         An array containing the values of the requested variables on success, or <b>FALSE</b> on failure.
     *                                         An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if the variable is not
     *                                         set.
     *                                         </p>
     */
    public static function filter_var_array(
        array $data,
        $definition = 0,
        bool $add_empty = true
    ) {
        /**
         * @psalm-suppress ImpureFunctionCall - we use func_num_args only for args count matching here
         */
        if (\func_num_args() < 2) {
            $a = \filter_var_array($data);
        } else {
            $a = \filter_var_array($data, $definition, $add_empty);
        }

        /* @phpstan-ignore-next-line | magic frm self::filter :/ */
        return self::filter($a);
    }

    /**
     * Checks whether finfo is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function finfo_loaded(): bool
    {
        return \class_exists('finfo');
    }

    /**
     * Returns the first $n characters of the string.
     *
     * @param string      $str      <p>The input string.</p>
     * @param int<1, max> $n        <p>Number of characters to retrieve from the start.</p>
     * @param string      $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function first_char(
        string $str,
        int $n = 1,
        string $encoding = 'UTF-8'
    ): string {
        if (
            $str === ''
            ||
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            $n <= 0
        ) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str, 0, $n);
        }

        return (string) self::substr($str, 0, $n, $encoding);
    }

    /**
     * Check if the number of Unicode characters isn't greater than the specified integer.
     *
     * EXAMPLE: <code>UTF8::fits_inside('κόσμε', 6); // false</code>
     *
     * @param string $str      the original string to be checked
     * @param int    $box_size the size in number of chars to be checked against string
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>TRUE</strong> if string is less than or equal to $box_size, <strong>FALSE</strong> otherwise.</p>
     */
    public static function fits_inside(string $str, int $box_size): bool
    {
        return (int) self::strlen($str) <= $box_size;
    }

    /**
     * Try to fix simple broken UTF-8 strings.
     *
     * INFO: Take a look at "UTF8::fix_utf8()" if you need a more advanced fix for broken UTF-8 strings.
     *
     * EXAMPLE: <code>UTF8::fix_simple_utf8('DÃ¼sseldorf'); // 'Düsseldorf'</code>
     *
     * If you received an UTF-8 string that was converted from Windows-1252 as it was ISO-8859-1
     * (ignoring Windows-1252 chars from 80 to 9F) use this function to fix it.
     * See: http://en.wikipedia.org/wiki/Windows-1252
     *
     * @param string $str <p>The input string</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function fix_simple_utf8(string $str): string
    {
        if ($str === '') {
            return '';
        }

        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<mixed>|null
         */
        static $BROKEN_UTF8_TO_UTF8_KEYS_CACHE = null;

        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<mixed>|null
         */
        static $BROKEN_UTF8_TO_UTF8_VALUES_CACHE = null;

        if ($BROKEN_UTF8_TO_UTF8_KEYS_CACHE === null) {
            if (self::$BROKEN_UTF8_FIX === null) {
                self::$BROKEN_UTF8_FIX = self::getData('utf8_fix');
            }

            $BROKEN_UTF8_TO_UTF8_KEYS_CACHE = \array_keys(self::$BROKEN_UTF8_FIX ?: []);
            $BROKEN_UTF8_TO_UTF8_VALUES_CACHE = self::$BROKEN_UTF8_FIX;
        }

        \assert(\is_array($BROKEN_UTF8_TO_UTF8_VALUES_CACHE));

        return \str_replace($BROKEN_UTF8_TO_UTF8_KEYS_CACHE, $BROKEN_UTF8_TO_UTF8_VALUES_CACHE, $str);
    }

    /**
     * Fix a double (or multiple) encoded UTF8 string.
     *
     * EXAMPLE: <code>UTF8::fix_utf8('FÃÂÂÂÂ©dÃÂÂÂÂ©ration'); // 'Fédération'</code>
     *
     * @param string|string[] $str you can use a string or an array of strings
     *
     * @psalm-pure
     *
     * @return string|string[]
     *                         <p>Will return the fixed input-"array" or
     *                         the fixed input-"string".</p>
     *
     * @template TFixUtf8 as string|string[]
     * @phpstan-param TFixUtf8 $str
     * @phpstan-return TFixUtf8
     */
    public static function fix_utf8($str)
    {
        if (\is_array($str)) {
            foreach ($str as &$v) {
                $v = self::fix_utf8($v);
            }
            unset($v);

            /**
             * @psalm-suppress InvalidReturnStatement
             */
            return $str;
        }

        $str = (string) $str; /* @phpstan-ignore-line | TFixUtf8 is string here */
        $last = '';
        while ($last !== $str) {
            $last = $str;
            /**
             * @psalm-suppress PossiblyInvalidArgument
             */
            $str = self::to_utf8(
                self::utf8_decode($str, true)
            );
        }

        /**
         * @psalm-suppress InvalidReturnStatement
         */
        return $str;
    }

    /**
     * Get character of a specific character.
     *
     * EXAMPLE: <code>UTF8::getCharDirection('ا'); // 'RTL'</code>
     *
     * @param string $char
     *
     * @psalm-pure
     *
     * @return string
     *                <p>'RTL' or 'LTR'.</p>
     */
    public static function getCharDirection(string $char): string
    {
        if (self::$SUPPORT['intlChar'] === true) {
            $tmp_return = \IntlChar::charDirection($char);

            // from "IntlChar"-Class
            $char_direction = [
                'RTL' => [1, 13, 14, 15, 21],
                'LTR' => [0, 11, 12, 20],
            ];

            if (\in_array($tmp_return, $char_direction['LTR'], true)) {
                return 'LTR';
            }

            if (\in_array($tmp_return, $char_direction['RTL'], true)) {
                return 'RTL';
            }
        }

        $c = static::chr_to_decimal($char);

        if (!($c >= 0x5be && $c <= 0x10b7f)) {
            return 'LTR';
        }

        if ($c <= 0x85e) {
            if ($c === 0x5be ||
                $c === 0x5c0 ||
                $c === 0x5c3 ||
                $c === 0x5c6 ||
                ($c >= 0x5d0 && $c <= 0x5ea) ||
                ($c >= 0x5f0 && $c <= 0x5f4) ||
                $c === 0x608 ||
                $c === 0x60b ||
                $c === 0x60d ||
                $c === 0x61b ||
                ($c >= 0x61e && $c <= 0x64a) ||
                ($c >= 0x66d && $c <= 0x66f) ||
                ($c >= 0x671 && $c <= 0x6d5) ||
                ($c >= 0x6e5 && $c <= 0x6e6) ||
                ($c >= 0x6ee && $c <= 0x6ef) ||
                ($c >= 0x6fa && $c <= 0x70d) ||
                $c === 0x710 ||
                ($c >= 0x712 && $c <= 0x72f) ||
                ($c >= 0x74d && $c <= 0x7a5) ||
                $c === 0x7b1 ||
                ($c >= 0x7c0 && $c <= 0x7ea) ||
                ($c >= 0x7f4 && $c <= 0x7f5) ||
                $c === 0x7fa ||
                ($c >= 0x800 && $c <= 0x815) ||
                $c === 0x81a ||
                $c === 0x824 ||
                $c === 0x828 ||
                ($c >= 0x830 && $c <= 0x83e) ||
                ($c >= 0x840 && $c <= 0x858) ||
                $c === 0x85e
            ) {
                return 'RTL';
            }
        } elseif ($c === 0x200f) {
            return 'RTL';
        } elseif ($c >= 0xfb1d) {
            if ($c === 0xfb1d ||
                ($c >= 0xfb1f && $c <= 0xfb28) ||
                ($c >= 0xfb2a && $c <= 0xfb36) ||
                ($c >= 0xfb38 && $c <= 0xfb3c) ||
                $c === 0xfb3e ||
                ($c >= 0xfb40 && $c <= 0xfb41) ||
                ($c >= 0xfb43 && $c <= 0xfb44) ||
                ($c >= 0xfb46 && $c <= 0xfbc1) ||
                ($c >= 0xfbd3 && $c <= 0xfd3d) ||
                ($c >= 0xfd50 && $c <= 0xfd8f) ||
                ($c >= 0xfd92 && $c <= 0xfdc7) ||
                ($c >= 0xfdf0 && $c <= 0xfdfc) ||
                ($c >= 0xfe70 && $c <= 0xfe74) ||
                ($c >= 0xfe76 && $c <= 0xfefc) ||
                ($c >= 0x10800 && $c <= 0x10805) ||
                $c === 0x10808 ||
                ($c >= 0x1080a && $c <= 0x10835) ||
                ($c >= 0x10837 && $c <= 0x10838) ||
                $c === 0x1083c ||
                ($c >= 0x1083f && $c <= 0x10855) ||
                ($c >= 0x10857 && $c <= 0x1085f) ||
                ($c >= 0x10900 && $c <= 0x1091b) ||
                ($c >= 0x10920 && $c <= 0x10939) ||
                $c === 0x1093f ||
                $c === 0x10a00 ||
                ($c >= 0x10a10 && $c <= 0x10a13) ||
                ($c >= 0x10a15 && $c <= 0x10a17) ||
                ($c >= 0x10a19 && $c <= 0x10a33) ||
                ($c >= 0x10a40 && $c <= 0x10a47) ||
                ($c >= 0x10a50 && $c <= 0x10a58) ||
                ($c >= 0x10a60 && $c <= 0x10a7f) ||
                ($c >= 0x10b00 && $c <= 0x10b35) ||
                ($c >= 0x10b40 && $c <= 0x10b55) ||
                ($c >= 0x10b58 && $c <= 0x10b72) ||
                ($c >= 0x10b78)
            ) {
                return 'RTL';
            }
        }

        return 'LTR';
    }

    /**
     * Check for php-support.
     *
     * @param string|null $key
     *
     * @psalm-pure
     *
     * @return mixed
     *               Return the full support-"array", if $key === null<br>
     *               return bool-value, if $key is used and available<br>
     *               otherwise return <strong>null</strong>
     */
    public static function getSupportInfo(string $key = null)
    {
        if ($key === null) {
            return self::$SUPPORT;
        }

        if (self::$INTL_TRANSLITERATOR_LIST === null) {
            self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
        }
        // compatibility fix for old versions
        self::$SUPPORT['intl__transliterator_list_ids'] = self::$INTL_TRANSLITERATOR_LIST;

        return self::$SUPPORT[$key] ?? null;
    }

    /**
     * Warning: this method only works for some file-types (png, jpg)
     *          if you need more supported types, please use e.g. "finfo"
     *
     * @param string                                                        $str
     * @param array{ext: null|string, mime: null|string, type: null|string} $fallback
     *
     * @return array{ext: null|string, mime: null|string, type: null|string}
     *
     * @psalm-pure
     */
    public static function get_file_type(
        string $str,
        array $fallback = [
            'ext'  => null,
            'mime' => 'application/octet-stream',
            'type' => null,
        ]
    ): array {
        if ($str === '') {
            return $fallback;
        }

        /** @var false|string $str_info - needed for PhpStan (stubs error) */
        $str_info = \substr($str, 0, 2);
        if ($str_info === false || \strlen($str_info) !== 2) {
            return $fallback;
        }

        // DEBUG
        //var_dump($str_info);

        $str_info = \unpack('C2chars', $str_info);

        if ($str_info === false) {
            return $fallback;
        }
        $type_code = (int) ($str_info['chars1'] . $str_info['chars2']);

        // DEBUG
        //var_dump($type_code);

        //
        // info: https://en.wikipedia.org/wiki/Magic_number_%28programming%29#Format_indicator
        //
        switch ($type_code) {
            // WARNING: do not add too simple comparisons, because of false-positive results:
            //
            // 3780 => 'pdf', 7790 => 'exe', 7784 => 'midi', 8075 => 'zip',
            // 8297 => 'rar', 7173 => 'gif', 7373 => 'tiff' 6677 => 'bmp', ...
            //
            case 255216:
                $ext = 'jpg';
                $mime = 'image/jpeg';
                $type = 'binary';

                break;
            case 13780:
                $ext = 'png';
                $mime = 'image/png';
                $type = 'binary';

                break;
            default:
                return $fallback;
        }

        return [
            'ext'  => $ext,
            'mime' => $mime,
            'type' => $type,
        ];
    }

    /**
     * @param int<1, max> $length         <p>Length of the random string.</p>
     * @param string      $possible_chars [optional] <p>Characters string for the random selection.</p>
     * @param string      $encoding       [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $possible_chars
     * @phpstan-return (T is non-empty-string ? non-empty-string : '')
     */
    public static function get_random_string(
        int $length,
        string $possible_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
        string $encoding = 'UTF-8'
    ): string {
        // init
        $i = 0;
        $str = '';

        //
        // add random chars
        //

        if ($encoding === 'UTF-8') {
            $max_length = (int) \mb_strlen($possible_chars);
            if ($max_length === 0) {
                return '';
            }

            while ($i < $length) {
                try {
                    $rand_int = \random_int(0, $max_length - 1);
                } catch (\Exception $e) {
                    $rand_int = \mt_rand(0, $max_length - 1);
                }
                $char = \mb_substr($possible_chars, $rand_int, 1);
                /* @phpstan-ignore-next-line | "false" was at least the return type in the past, or? */
                if ($char !== false) {
                    $str .= $char;
                    ++$i;
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $max_length = (int) self::strlen($possible_chars, $encoding);
            if ($max_length === 0) {
                return '';
            }

            while ($i < $length) {
                try {
                    $rand_int = \random_int(0, $max_length - 1);
                } catch (\Exception $e) {
                    $rand_int = \mt_rand(0, $max_length - 1);
                }
                $char = self::substr($possible_chars, $rand_int, 1, $encoding);
                if ($char !== false) {
                    $str .= $char;
                    ++$i;
                }
            }
        }

        return $str;
    }

    /**
     * @param int|string $extra_entropy [optional] <p>Extra entropy via a string or int value.</p>
     * @param bool       $use_md5       [optional] <p>Return the unique identifier as md5-hash? Default: true</p>
     *
     * @return non-empty-string
     */
    public static function get_unique_string($extra_entropy = '', bool $use_md5 = true): string
    {
        try {
            $rand_int = \random_int(0, \mt_getrandmax());
        } catch (\Exception $e) {
            $rand_int = \mt_rand(0, \mt_getrandmax());
        }

        $unique_helper = $rand_int .
                         \session_id() .
                         ($_SERVER['REMOTE_ADDR'] ?? '') .
                         ($_SERVER['SERVER_ADDR'] ?? '') .
                         $extra_entropy;

        $unique_string = \uniqid($unique_helper, true);

        if ($use_md5) {
            $unique_string = \md5($unique_string . $unique_helper);
        }

        return $unique_string;
    }

    /**
     * Returns true if the string contains a lower case char, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not the string contains a lower case character.</p>
     */
    public static function has_lowercase(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('.*[[:lower:]]', $str);
        }

        return self::str_matches_pattern($str, '.*[[:lower:]]');
    }

    /**
     * Returns true if the string contains whitespace, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not the string contains whitespace.</p>
     */
    public static function has_whitespace(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('.*[[:space:]]', $str);
        }

        return self::str_matches_pattern($str, '.*[[:space:]]');
    }

    /**
     * Returns true if the string contains an upper case char, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not the string contains an upper case character.</p>
     */
    public static function has_uppercase(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('.*[[:upper:]]', $str);
        }

        return self::str_matches_pattern($str, '.*[[:upper:]]');
    }

    /**
     * Converts a hexadecimal value into a UTF-8 character.
     *
     * INFO: opposite to UTF8::chr_to_hex()
     *
     * EXAMPLE: <code>UTF8::hex_to_chr('U+00a7'); // '§'</code>
     *
     * @param string $hexdec <p>The hexadecimal value.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                      <p>One single UTF-8 character.</p>
     */
    public static function hex_to_chr(string $hexdec)
    {
        /** @noinspection PhpUsageOfSilenceOperatorInspection - Invalid characters passed for attempted conversion, these have been ignored */
        return self::decimal_to_chr((int) @\hexdec($hexdec));
    }

    /**
     * Converts hexadecimal U+xxxx code point representation to integer.
     *
     * INFO: opposite to UTF8::int_to_hex()
     *
     * EXAMPLE: <code>UTF8::hex_to_int('U+00f1'); // 241</code>
     *
     * @param string $hexdec <p>The hexadecimal code point representation.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The code point, or false on failure.</p>
     */
    public static function hex_to_int($hexdec)
    {
        // init
        $hexdec = (string) $hexdec;

        if ($hexdec === '') {
            return false;
        }

        if (\preg_match('/^(?:\\\u|U\+|)([a-zA-Z0-9]{4,6})$/', $hexdec, $match)) {
            return \intval($match[1], 16);
        }

        return false;
    }

    /**
     * Converts a UTF-8 string to a series of HTML numbered entities.
     *
     * INFO: opposite to UTF8::html_decode()
     *
     * EXAMPLE: <code>UTF8::html_encode('中文空白'); // '&#20013;&#25991;&#31354;&#30333;'</code>
     *
     * @param string $str              <p>The Unicode string to be encoded as numbered entities.</p>
     * @param bool   $keep_ascii_chars [optional] <p>Keep ASCII chars.</p>
     * @param string $encoding         [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>HTML numbered entities.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function html_encode(
        string $str,
        bool $keep_ascii_chars = false,
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '') {
            return '';
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        // INFO: http://stackoverflow.com/questions/35854535/better-explanation-of-convmap-in-mb-encode-numericentity
        if (self::$SUPPORT['mbstring'] === true) {
            if ($keep_ascii_chars) {
                $start_code = 0x80;
            } else {
                $start_code = 0x00;
            }

            if ($encoding === 'UTF-8') {
                /** @var false|string|null $return - needed for PhpStan (stubs error) */
                $return = \mb_encode_numericentity(
                    $str,
                    [$start_code, 0xfffff, 0, 0xfffff]
                );
                if ($return !== null && $return !== false) {
                    return $return;
                }
            }

            /** @var false|string|null $return - needed for PhpStan (stubs error) */
            $return = \mb_encode_numericentity(
                $str,
                [$start_code, 0xfffff, 0, 0xfffff],
                $encoding
            );
            if ($return !== null && $return !== false) {
                return $return;
            }
        }

        //
        // fallback via vanilla php
        //

        return \implode(
            '',
            \array_map(
                static function (string $chr) use ($keep_ascii_chars, $encoding): string {
                    return self::single_chr_html_encode($chr, $keep_ascii_chars, $encoding);
                },
                self::str_split($str)
            )
        );
    }

    /**
     * UTF-8 version of html_entity_decode()
     *
     * The reason we are not using html_entity_decode() by itself is because
     * while it is not technically correct to leave out the semicolon
     * at the end of an entity most browsers will still interpret the entity
     * correctly. html_entity_decode() does not convert entities without
     * semicolons, so we are left with our own little solution here. Bummer.
     *
     * Convert all HTML entities to their applicable characters.
     *
     * INFO: opposite to UTF8::html_encode()
     *
     * EXAMPLE: <code>UTF8::html_entity_decode('&#20013;&#25991;&#31354;&#30333;'); // '中文空白'</code>
     *
     * @see http://php.net/manual/en/function.html-entity-decode.php
     *
     * @param string   $str      <p>
     *                           The input string.
     *                           </p>
     * @param int|null $flags    [optional] <p>
     *                           A bitmask of one or more of the following flags, which specify how to handle quotes
     *                           and which document type to use. The default is ENT_COMPAT | ENT_HTML401.
     *                           <table>
     *                           Available <i>flags</i> constants
     *                           <tr valign="top">
     *                           <td>Constant Name</td>
     *                           <td>Description</td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_COMPAT</b></td>
     *                           <td>Will convert double-quotes and leave single-quotes alone.</td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_QUOTES</b></td>
     *                           <td>Will convert both double and single quotes.</td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_NOQUOTES</b></td>
     *                           <td>Will leave both double and single quotes unconverted.</td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_HTML401</b></td>
     *                           <td>
     *                           Handle code as HTML 4.01.
     *                           </td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_XML1</b></td>
     *                           <td>
     *                           Handle code as XML 1.
     *                           </td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_XHTML</b></td>
     *                           <td>
     *                           Handle code as XHTML.
     *                           </td>
     *                           </tr>
     *                           <tr valign="top">
     *                           <td><b>ENT_HTML5</b></td>
     *                           <td>
     *                           Handle code as HTML 5.
     *                           </td>
     *                           </tr>
     *                           </table>
     *                           </p>
     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The decoded string.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function html_entity_decode(
        string $str,
        int $flags = null,
        string $encoding = 'UTF-8'
    ): string {
        if (
            !isset($str[3]) // examples: &; || &x;
            ||
            \strpos($str, '&') === false // no "&"
        ) {
            return $str;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($flags === null) {
            $flags = \ENT_QUOTES | \ENT_HTML5;
        }

        if (
            $encoding !== 'UTF-8'
            &&
            $encoding !== 'ISO-8859-1'
            &&
            $encoding !== 'WINDOWS-1252'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::html_entity_decode() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        do {
            $str_compare = $str;

            if (\strpos($str, '&') !== false) {
                if (\strpos($str, '&#') !== false) {
                    // decode also numeric & UTF16 two byte entities
                    $str = (string) \preg_replace(
                        '/(&#(?:x0*[0-9a-fA-F]{2,6}(?![0-9a-fA-F;])|(?:0*\d{2,6}(?![0-9;]))))/S',
                        '$1;',
                        $str
                    );
                }

                $str = \html_entity_decode(
                    $str,
                    $flags,
                    $encoding
                );
            }
        } while ($str_compare !== $str);

        return $str;
    }

    /**
     * Create a escape html version of the string via "UTF8::htmlspecialchars()".
     *
     * @param string $str
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function html_escape(string $str, string $encoding = 'UTF-8'): string
    {
        return self::htmlspecialchars(
            $str,
            \ENT_QUOTES | \ENT_SUBSTITUTE,
            $encoding
        );
    }

    /**
     * Remove empty html-tag.
     *
     * e.g.: <pre><tag></tag></pre>
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function html_stripe_empty_tags(string $str): string
    {
        return (string) \preg_replace(
            '/<[^\\/>]*?>\\s*?<\\/[^>]*?>/u',
            '',
            $str
        );
    }

    /**
     * Convert all applicable characters to HTML entities: UTF-8 version of htmlentities().
     *
     * EXAMPLE: <code>UTF8::htmlentities('<白-öäü>'); // '&lt;&#30333;-&ouml;&auml;&uuml;&gt;'</code>
     *
     * @see http://php.net/manual/en/function.htmlentities.php
     *
     * @param string $str           <p>
     *                              The input string.
     *                              </p>
     * @param int    $flags         [optional] <p>
     *                              A bitmask of one or more of the following flags, which specify how to handle
     *                              quotes, invalid code unit sequences and the used document type. The default is
     *                              ENT_COMPAT | ENT_HTML401.
     *                              <table>
     *                              Available <i>flags</i> constants
     *                              <tr valign="top">
     *                              <td>Constant Name</td>
     *                              <td>Description</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_COMPAT</b></td>
     *                              <td>Will convert double-quotes and leave single-quotes alone.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_QUOTES</b></td>
     *                              <td>Will convert both double and single quotes.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_NOQUOTES</b></td>
     *                              <td>Will leave both double and single quotes unconverted.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_IGNORE</b></td>
     *                              <td>
     *                              Silently discard invalid code unit sequences instead of returning
     *                              an empty string. Using this flag is discouraged as it
     *                              may have security implications.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_SUBSTITUTE</b></td>
     *                              <td>
     *                              Replace invalid code unit sequences with a Unicode Replacement Character
     *                              U+FFFD (UTF-8) or &#38;#38;#FFFD; (otherwise) instead of returning an empty
     *                              string.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_DISALLOWED</b></td>
     *                              <td>
     *                              Replace invalid code points for the given document type with a
     *                              Unicode Replacement Character U+FFFD (UTF-8) or &#38;#38;#FFFD;
     *                              (otherwise) instead of leaving them as is. This may be useful, for
     *                              instance, to ensure the well-formedness of XML documents with
     *                              embedded external content.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_HTML401</b></td>
     *                              <td>
     *                              Handle code as HTML 4.01.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_XML1</b></td>
     *                              <td>
     *                              Handle code as XML 1.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_XHTML</b></td>
     *                              <td>
     *                              Handle code as XHTML.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_HTML5</b></td>
     *                              <td>
     *                              Handle code as HTML 5.
     *                              </td>
     *                              </tr>
     *                              </table>
     *                              </p>
     * @param string $encoding      [optional] <p>
     *                              Like <b>htmlspecialchars</b>,
     *                              <b>htmlentities</b> takes an optional third argument
     *                              <i>encoding</i> which defines encoding used in
     *                              conversion.
     *                              Although this argument is technically optional, you are highly
     *                              encouraged to specify the correct value for your code.
     *                              </p>
     * @param bool   $double_encode [optional] <p>
     *                              When <i>double_encode</i> is turned off PHP will not
     *                              encode existing html entities. The default is to convert everything.
     *                              </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>
     *                The encoded string.
     *                <br><br>
     *                If the input <i>string</i> contains an invalid code unit
     *                sequence within the given <i>encoding</i> an empty string
     *                will be returned, unless either the <b>ENT_IGNORE</b> or
     *                <b>ENT_SUBSTITUTE</b> flags are set.
     *                </p>
     */
    public static function htmlentities(
        string $str,
        int $flags = \ENT_COMPAT,
        string $encoding = 'UTF-8',
        bool $double_encode = true
    ): string {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        $str = \htmlentities(
            $str,
            $flags,
            $encoding,
            $double_encode
        );

        /**
         * PHP doesn't replace a backslash to its html entity since this is something
         * that's mostly used to escape characters when inserting in a database. Since
         * we're using a decent database layer, we don't need this shit and we're replacing
         * the double backslashes by its' html entity equivalent.
         *
         * https://github.com/forkcms/library/blob/master/spoon/filter/filter.php#L303
         */
        $str = \str_replace('\\', '&#92;', $str);

        return self::html_encode($str, true, $encoding);
    }

    /**
     * Convert only special characters to HTML entities: UTF-8 version of htmlspecialchars()
     *
     * INFO: Take a look at "UTF8::htmlentities()"
     *
     * EXAMPLE: <code>UTF8::htmlspecialchars('<白-öäü>'); // '&lt;白-öäü&gt;'</code>
     *
     * @see http://php.net/manual/en/function.htmlspecialchars.php
     *
     * @param string $str           <p>
     *                              The string being converted.
     *                              </p>
     * @param int    $flags         [optional] <p>
     *                              A bitmask of one or more of the following flags, which specify how to handle
     *                              quotes, invalid code unit sequences and the used document type. The default is
     *                              ENT_COMPAT | ENT_HTML401.
     *                              <table>
     *                              Available <i>flags</i> constants
     *                              <tr valign="top">
     *                              <td>Constant Name</td>
     *                              <td>Description</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_COMPAT</b></td>
     *                              <td>Will convert double-quotes and leave single-quotes alone.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_QUOTES</b></td>
     *                              <td>Will convert both double and single quotes.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_NOQUOTES</b></td>
     *                              <td>Will leave both double and single quotes unconverted.</td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_IGNORE</b></td>
     *                              <td>
     *                              Silently discard invalid code unit sequences instead of returning
     *                              an empty string. Using this flag is discouraged as it
     *                              may have security implications.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_SUBSTITUTE</b></td>
     *                              <td>
     *                              Replace invalid code unit sequences with a Unicode Replacement Character
     *                              U+FFFD (UTF-8) or &#38;#38;#FFFD; (otherwise) instead of returning an empty
     *                              string.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_DISALLOWED</b></td>
     *                              <td>
     *                              Replace invalid code points for the given document type with a
     *                              Unicode Replacement Character U+FFFD (UTF-8) or &#38;#38;#FFFD;
     *                              (otherwise) instead of leaving them as is. This may be useful, for
     *                              instance, to ensure the well-formedness of XML documents with
     *                              embedded external content.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_HTML401</b></td>
     *                              <td>
     *                              Handle code as HTML 4.01.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_XML1</b></td>
     *                              <td>
     *                              Handle code as XML 1.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_XHTML</b></td>
     *                              <td>
     *                              Handle code as XHTML.
     *                              </td>
     *                              </tr>
     *                              <tr valign="top">
     *                              <td><b>ENT_HTML5</b></td>
     *                              <td>
     *                              Handle code as HTML 5.
     *                              </td>
     *                              </tr>
     *                              </table>
     *                              </p>
     * @param string $encoding      [optional] <p>
     *                              Defines encoding used in conversion.
     *                              </p>
     *                              <p>
     *                              For the purposes of this function, the encodings
     *                              ISO-8859-1, ISO-8859-15,
     *                              UTF-8, cp866,
     *                              cp1251, cp1252, and
     *                              KOI8-R are effectively equivalent, provided the
     *                              <i>string</i> itself is valid for the encoding, as
     *                              the characters affected by <b>htmlspecialchars</b> occupy
     *                              the same positions in all of these encodings.
     *                              </p>
     * @param bool   $double_encode [optional] <p>
     *                              When <i>double_encode</i> is turned off PHP will not
     *                              encode existing html entities, the default is to convert everything.
     *                              </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The converted string.</p>
     *                <p>
     *                If the input <i>string</i> contains an invalid code unit
     *                sequence within the given <i>encoding</i> an empty string
     *                will be returned, unless either the <b>ENT_IGNORE</b> or
     *                <b>ENT_SUBSTITUTE</b> flags are set.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function htmlspecialchars(
        string $str,
        int $flags = \ENT_COMPAT,
        string $encoding = 'UTF-8',
        bool $double_encode = true
    ): string {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        return \htmlspecialchars(
            $str,
            $flags,
            $encoding,
            $double_encode
        );
    }

    /**
     * Checks whether iconv is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function iconv_loaded(): bool
    {
        return \extension_loaded('iconv');
    }

    /**
     * Converts Integer to hexadecimal U+xxxx code point representation.
     *
     * INFO: opposite to UTF8::hex_to_int()
     *
     * EXAMPLE: <code>UTF8::int_to_hex(241); // 'U+00f1'</code>
     *
     * @param int    $int    <p>The integer to be converted to hexadecimal code point.</p>
     * @param string $prefix [optional]
     *
     * @psalm-pure
     *
     * @return string the code point, or empty string on failure
     */
    public static function int_to_hex(int $int, string $prefix = 'U+'): string
    {
        $hex = \dechex($int);

        $hex = (\strlen($hex) < 4 ? \substr('0000' . $hex, -4) : $hex);

        return $prefix . $hex . '';
    }

    /**
     * Checks whether intl-char is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function intlChar_loaded(): bool
    {
        return \class_exists('IntlChar');
    }

    /**
     * Checks whether intl is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function intl_loaded(): bool
    {
        return \extension_loaded('intl');
    }

    /**
     * Returns true if the string contains only alphabetic chars, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only alphabetic chars.</p>
     */
    public static function is_alpha(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:alpha:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:alpha:]]*$');
    }

    /**
     * Returns true if the string contains only alphabetic and numeric chars, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only alphanumeric chars.</p>
     */
    public static function is_alphanumeric(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:alnum:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:alnum:]]*$');
    }

    /**
     * Returns true if the string contains only punctuation chars, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only punctuation chars.</p>
     */
    public static function is_punctuation(string $str): bool
    {
        return self::str_matches_pattern($str, '^[[:punct:]]*$');
    }

    /**
     * Returns true if the string contains only printable (non-invisible) chars, false otherwise.
     *
     * @param string $str                       <p>The input string.</p>
     * @param bool   $ignore_control_characters [optional] <p>Ignore control characters like [LRM] or [LSEP].</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only printable (non-invisible) chars.</p>
     */
    public static function is_printable(string $str, bool $ignore_control_characters = false): bool
    {
        return self::remove_invisible_characters($str, false, '', $ignore_control_characters) === $str;
    }

    /**
     * Checks if a string is 7 bit ASCII.
     *
     * EXAMPLE: <code>UTF8::is_ascii('白'); // false</code>
     *
     * @param string $str <p>The string to check.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>
     *              <strong>true</strong> if it is ASCII<br>
     *              <strong>false</strong> otherwise
     *              </p>
     */
    public static function is_ascii(string $str): bool
    {
        return ASCII::is_ascii($str);
    }

    /**
     * Returns true if the string is base64 encoded, false otherwise.
     *
     * EXAMPLE: <code>UTF8::is_base64('4KSu4KWL4KSo4KS/4KSa'); // true</code>
     *
     * @param string|null $str                   <p>The input string.</p>
     * @param bool        $empty_string_is_valid [optional] <p>Is an empty string valid base64 or not?</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str is base64 encoded.</p>
     */
    public static function is_base64($str, bool $empty_string_is_valid = false): bool
    {
        if (
            !$empty_string_is_valid
            &&
            $str === ''
        ) {
            return false;
        }

        if (!\is_string($str)) {
            return false;
        }

        $base64String = \base64_decode($str, true);

        return $base64String !== false && \base64_encode($base64String) === $str;
    }

    /**
     * Check if the input is binary... (is look like a hack).
     *
     * EXAMPLE: <code>UTF8::is_binary(01); // true</code>
     *
     * @param int|string $input
     * @param bool       $strict
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function is_binary($input, bool $strict = false): bool
    {
        $input = (string) $input;
        if ($input === '') {
            return false;
        }

        if (\preg_match('~^[01]+$~', $input)) {
            return true;
        }

        $ext = self::get_file_type($input);
        if ($ext['type'] === 'binary') {
            return true;
        }

        if (!$strict) {
            $test_length = \strlen($input);
            $test_null_counting = \substr_count($input, "\x0", 0, $test_length);
            if (($test_null_counting / $test_length) > 0.25) {
                return true;
            }
        }

        if ($strict) {
            if (self::$SUPPORT['finfo'] === false) {
                throw new \RuntimeException('ext-fileinfo: is not installed');
            }

            /**
             * @psalm-suppress ImpureMethodCall - it will return the same result for the same file ...
             */
            $finfo_encoding = (new \finfo(\FILEINFO_MIME_ENCODING))->buffer($input);
            if ($finfo_encoding && $finfo_encoding === 'binary') {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if the file is binary.
     *
     * EXAMPLE: <code>UTF8::is_binary('./utf32.txt'); // true</code>
     *
     * @param string $file
     *
     * @return bool
     */
    public static function is_binary_file($file): bool
    {
        // init
        $block = '';

        $fp = \fopen($file, 'rb');
        if (\is_resource($fp)) {
            $block = \fread($fp, 512);
            \fclose($fp);
        }

        if ($block === '' || $block === false) {
            return false;
        }

        return self::is_binary($block, true);
    }

    /**
     * Returns true if the string contains only whitespace chars, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only whitespace characters.</p>
     */
    public static function is_blank(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:space:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:space:]]*$');
    }

    /**
     * Checks if the given string is equal to any "Byte Order Mark".
     *
     * WARNING: Use "UTF8::string_has_bom()" if you will check BOM in a string.
     *
     * EXAMPLE: <code>UTF8::is_bom("\xef\xbb\xbf"); // true</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if the $utf8_chr is Byte Order Mark, <strong>false</strong> otherwise.</p>
     */
    public static function is_bom($str): bool
    {
        /** @noinspection PhpUnusedLocalVariableInspection */
        foreach (self::$BOM as $bom_string => &$bom_byte_length) {
            if ($str === $bom_string) {
                return true;
            }
        }

        return false;
    }

    /**
     * Determine whether the string is considered to be empty.
     *
     * A variable is considered empty if it does not exist or if its value equals FALSE.
     * empty() does not generate a warning if the variable does not exist.
     *
     * @param array<array-key, mixed>|float|int|string $str
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str is empty().</p>
     */
    public static function is_empty($str): bool
    {
        return empty($str);
    }

    /**
     * Returns true if the string contains only hexadecimal chars, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only hexadecimal chars.</p>
     */
    public static function is_hexadecimal(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:xdigit:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:xdigit:]]*$');
    }

    /**
     * Check if the string contains any HTML tags.
     *
     * EXAMPLE: <code>UTF8::is_html('<b>lall</b>'); // true</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains html elements.</p>
     */
    public static function is_html(string $str): bool
    {
        if ($str === '') {
            return false;
        }

        // init
        $matches = [];

        $str = self::emoji_encode($str); // hack for emoji support :/

        \preg_match("/<\\/?\\w+(?:(?:\\s+\\w+(?:\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)*\\s*|\\s*)\\/?>/u", $str, $matches);

        return $matches !== [];
    }

    /**
     * Check if $url is an correct url.
     *
     * @param string $url
     * @param bool   $disallow_localhost
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function is_url(string $url, bool $disallow_localhost = false): bool
    {
        if ($url === '') {
            return false;
        }

        // WARNING: keep this as hack protection
        if (!self::str_istarts_with_any($url, ['http://', 'https://'])) {
            return false;
        }

        // e.g. -> the server itself connect to "https://foo.localhost/phpmyadmin/...
        if ($disallow_localhost) {
            if (self::str_istarts_with_any(
                $url,
                [
                    'http://localhost',
                    'https://localhost',
                    'http://127.0.0.1',
                    'https://127.0.0.1',
                    'http://::1',
                    'https://::1',
                ]
            )) {
                return false;
            }

            $regex = '/^(?:http(?:s)?:\/\/).*?(?:\.localhost)/iu';
            if (\preg_match($regex, $url)) {
                return false;
            }
        }

        // INFO: this is needed for e.g. "http://müller.de/" (internationalized domain names) and non ASCII-parameters
        $regex = '/^(?:http(?:s)?:\\/\\/)(?:[\p{L}0-9][\p{L}0-9_-]*(?:\\.[\p{L}0-9][\p{L}0-9_-]*))(?:\\d+)?(?:\\/\\.*)?/iu';
        if (\preg_match($regex, $url)) {
            return true;
        }

        return \filter_var($url, \FILTER_VALIDATE_URL) !== false;
    }

    /**
     * Try to check if "$str" is a JSON-string.
     *
     * EXAMPLE: <code>UTF8::is_json('{"array":[1,"¥","ä"]}'); // true</code>
     *
     * @param string $str                                    <p>The input string.</p>
     * @param bool   $only_array_or_object_results_are_valid [optional] <p>Only array and objects are valid json
     *                                                       results.</p>
     *
     * @return bool
     *              <p>Whether or not the $str is in JSON format.</p>
     */
    public static function is_json(string $str, bool $only_array_or_object_results_are_valid = true): bool
    {
        if ($str === '') {
            return false;
        }

        if (self::$SUPPORT['json'] === false) {
            throw new \RuntimeException('ext-json: is not installed');
        }

        $jsonOrNull = self::json_decode($str);
        if ($jsonOrNull === null && \strtoupper($str) !== 'NULL') {
            return false;
        }

        if (
            $only_array_or_object_results_are_valid
            &&
            !\is_object($jsonOrNull)
            &&
            !\is_array($jsonOrNull)
        ) {
            return false;
        }

        return \json_last_error() === \JSON_ERROR_NONE;
    }

    /**
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only lowercase chars.</p>
     */
    public static function is_lowercase(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:lower:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:lower:]]*$');
    }

    /**
     * Returns true if the string is serialized, false otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str is serialized.</p>
     */
    public static function is_serialized(string $str): bool
    {
        if ($str === '') {
            return false;
        }

        /** @noinspection PhpUsageOfSilenceOperatorInspection */
        /** @noinspection UnserializeExploitsInspection */
        return $str === 'b:0;'
               ||
               @\unserialize($str, []) !== false;
    }

    /**
     * Returns true if the string contains only lower case chars, false
     * otherwise.
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains only lower case characters.</p>
     */
    public static function is_uppercase(string $str): bool
    {
        if (self::$SUPPORT['mbstring'] === true) {
            return \mb_ereg_match('^[[:upper:]]*$', $str);
        }

        return self::str_matches_pattern($str, '^[[:upper:]]*$');
    }

    /**
     * Check if the string is UTF-16.
     *
     * EXAMPLE: <code>
     * UTF8::is_utf16(file_get_contents('utf-16-le.txt')); // 1
     * //
     * UTF8::is_utf16(file_get_contents('utf-16-be.txt')); // 2
     * //
     * UTF8::is_utf16(file_get_contents('utf-8.txt')); // false
     * </code>
     *
     * @param string $str                       <p>The input string.</p>
     * @param bool   $check_if_string_is_binary
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <strong>false</strong> if is't not UTF-16,<br>
     *                   <strong>1</strong> for UTF-16LE,<br>
     *                   <strong>2</strong> for UTF-16BE
     */
    public static function is_utf16($str, bool $check_if_string_is_binary = true)
    {
        // init
        $str = (string) $str;
        $str_chars = [];

        // fix for the "binary"-check
        if ($check_if_string_is_binary !== false && self::string_has_bom($str)) {
            $check_if_string_is_binary = false;
        }

        if (
            $check_if_string_is_binary
            &&
            !self::is_binary($str, true)
        ) {
            return false;
        }

        if (self::$SUPPORT['mbstring'] === false) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::is_utf16() without mbstring may did not work correctly', \E_USER_WARNING);
        }

        $str = self::remove_bom($str);

        $maybe_utf16le = 0;
        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-16LE');
        if ($test) {
            $test2 = \mb_convert_encoding($test, 'UTF-16LE', 'UTF-8');
            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-16LE');
            if ($test3 === $test) {
                $str_chars = self::count_chars($str, true, false);
                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
                    if (\in_array($test3char, $str_chars, true)) {
                        ++$maybe_utf16le;
                    }
                }
                unset($test3charEmpty);
            }
        }

        $maybe_utf16be = 0;
        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-16BE');
        if ($test) {
            $test2 = \mb_convert_encoding($test, 'UTF-16BE', 'UTF-8');
            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-16BE');
            if ($test3 === $test) {
                if ($str_chars === []) {
                    $str_chars = self::count_chars($str, true, false);
                }
                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
                    if (\in_array($test3char, $str_chars, true)) {
                        ++$maybe_utf16be;
                    }
                }
                unset($test3charEmpty);
            }
        }

        if ($maybe_utf16be !== $maybe_utf16le) {
            if ($maybe_utf16le > $maybe_utf16be) {
                return 1;
            }

            return 2;
        }

        return false;
    }

    /**
     * Check if the string is UTF-32.
     *
     * EXAMPLE: <code>
     * UTF8::is_utf32(file_get_contents('utf-32-le.txt')); // 1
     * //
     * UTF8::is_utf32(file_get_contents('utf-32-be.txt')); // 2
     * //
     * UTF8::is_utf32(file_get_contents('utf-8.txt')); // false
     * </code>
     *
     * @param string $str                       <p>The input string.</p>
     * @param bool   $check_if_string_is_binary
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <strong>false</strong> if is't not UTF-32,<br>
     *                   <strong>1</strong> for UTF-32LE,<br>
     *                   <strong>2</strong> for UTF-32BE
     */
    public static function is_utf32($str, bool $check_if_string_is_binary = true)
    {
        // init
        $str = (string) $str;
        $str_chars = [];

        // fix for the "binary"-check
        if ($check_if_string_is_binary !== false && self::string_has_bom($str)) {
            $check_if_string_is_binary = false;
        }

        if (
            $check_if_string_is_binary
            &&
            !self::is_binary($str, true)
        ) {
            return false;
        }

        if (self::$SUPPORT['mbstring'] === false) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::is_utf32() without mbstring may did not work correctly', \E_USER_WARNING);
        }

        $str = self::remove_bom($str);

        $maybe_utf32le = 0;
        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-32LE');
        if ($test) {
            $test2 = \mb_convert_encoding($test, 'UTF-32LE', 'UTF-8');
            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-32LE');
            if ($test3 === $test) {
                $str_chars = self::count_chars($str, true, false);
                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
                    if (\in_array($test3char, $str_chars, true)) {
                        ++$maybe_utf32le;
                    }
                }
                unset($test3charEmpty);
            }
        }

        $maybe_utf32be = 0;
        $test = \mb_convert_encoding($str, 'UTF-8', 'UTF-32BE');
        if ($test) {
            $test2 = \mb_convert_encoding($test, 'UTF-32BE', 'UTF-8');
            $test3 = \mb_convert_encoding($test2, 'UTF-8', 'UTF-32BE');
            if ($test3 === $test) {
                if ($str_chars === []) {
                    $str_chars = self::count_chars($str, true, false);
                }
                foreach (self::count_chars($test3) as $test3char => &$test3charEmpty) {
                    if (\in_array($test3char, $str_chars, true)) {
                        ++$maybe_utf32be;
                    }
                }
                unset($test3charEmpty);
            }
        }

        if ($maybe_utf32be !== $maybe_utf32le) {
            if ($maybe_utf32le > $maybe_utf32be) {
                return 1;
            }

            return 2;
        }

        return false;
    }

    /**
     * Checks whether the passed input contains only byte sequences that appear valid UTF-8.
     *
     * EXAMPLE: <code>
     * UTF8::is_utf8(['Iñtërnâtiônàlizætiøn', 'foo']); // true
     * //
     * UTF8::is_utf8(["Iñtërnâtiônàlizætiøn\xA0\xA1", 'bar']); // false
     * </code>
     *
     * @param int|string|string[]|null $str    <p>The input to be checked.</p>
     * @param bool                     $strict <p>Check also if the string is not UTF-16 or UTF-32.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function is_utf8($str, bool $strict = false): bool
    {
        if (\is_array($str)) {
            foreach ($str as &$v) {
                if (!self::is_utf8($v, $strict)) {
                    return false;
                }
            }

            return true;
        }

        return self::is_utf8_string((string) $str, $strict);
    }

    /**
     * (PHP 5 &gt;= 5.2.0, PECL json &gt;= 1.2.0)<br/>
     * Decodes a JSON string
     *
     * EXAMPLE: <code>UTF8::json_decode('[1,"\u00a5","\u00e4"]'); // array(1, '¥', 'ä')</code>
     *
     * @see http://php.net/manual/en/function.json-decode.php
     *
     * @param string $json    <p>
     *                        The <i>json</i> string being decoded.
     *                        </p>
     *                        <p>
     *                        This function only works with UTF-8 encoded strings.
     *                        </p>
     *                        <p>PHP implements a superset of
     *                        JSON - it will also encode and decode scalar types and <b>NULL</b>. The JSON standard
     *                        only supports these values when they are nested inside an array or an object.
     *                        </p>
     * @param bool   $assoc   [optional] <p>
     *                        When <b>TRUE</b>, returned objects will be converted into
     *                        associative arrays.
     *                        </p>
     * @param int    $depth   [optional] <p>
     *                        User specified recursion depth.
     *                        </p>
     * @param int    $options [optional] <p>
     *                        Bitmask of JSON decode options. Currently only
     *                        <b>JSON_BIGINT_AS_STRING</b>
     *                        is supported (default is to cast large integers as floats)
     *                        </p>
     *
     * @psalm-pure
     *
     * @return mixed
     *               <p>The value encoded in <i>json</i> in appropriate PHP type. Values true, false and
     *               null (case-insensitive) are returned as <b>TRUE</b>, <b>FALSE</b> and <b>NULL</b> respectively.
     *               <b>NULL</b> is returned if the <i>json</i> cannot be decoded or if the encoded data
     *               is deeper than the recursion limit.</p>
     */
    public static function json_decode(
        string $json,
        bool $assoc = false,
        int $depth = 512,
        int $options = 0
    ) {
        $json = self::filter($json);

        if (self::$SUPPORT['json'] === false) {
            throw new \RuntimeException('ext-json: is not installed');
        }

        if ($depth < 1) {
            $depth = 1;
        }

        return \json_decode($json, $assoc, $depth, $options);
    }

    /**
     * (PHP 5 &gt;= 5.2.0, PECL json &gt;= 1.2.0)<br/>
     * Returns the JSON representation of a value.
     *
     * EXAMPLE: <code>UTF8::json_encode(array(1, '¥', 'ä')); // '[1,"\u00a5","\u00e4"]'</code>
     *
     * @see http://php.net/manual/en/function.json-encode.php
     *
     * @param mixed $value   <p>
     *                       The <i>value</i> being encoded. Can be any type except
     *                       a resource.
     *                       </p>
     *                       <p>
     *                       All string data must be UTF-8 encoded.
     *                       </p>
     *                       <p>PHP implements a superset of
     *                       JSON - it will also encode and decode scalar types and <b>NULL</b>. The JSON standard
     *                       only supports these values when they are nested inside an array or an object.
     *                       </p>
     * @param int   $options [optional] <p>
     *                       Bitmask consisting of <b>JSON_HEX_QUOT</b>,
     *                       <b>JSON_HEX_TAG</b>,
     *                       <b>JSON_HEX_AMP</b>,
     *                       <b>JSON_HEX_APOS</b>,
     *                       <b>JSON_NUMERIC_CHECK</b>,
     *                       <b>JSON_PRETTY_PRINT</b>,
     *                       <b>JSON_UNESCAPED_SLASHES</b>,
     *                       <b>JSON_FORCE_OBJECT</b>,
     *                       <b>JSON_UNESCAPED_UNICODE</b>. The behaviour of these
     *                       constants is described on
     *                       the JSON constants page.
     *                       </p>
     * @param int   $depth   [optional] <p>
     *                       Set the maximum depth. Must be greater than zero.
     *                       </p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>A JSON encoded <strong>string</strong> on success or<br>
     *                      <strong>FALSE</strong> on failure.</p>
     */
    public static function json_encode($value, int $options = 0, int $depth = 512)
    {
        $value = self::filter($value);

        if (self::$SUPPORT['json'] === false) {
            throw new \RuntimeException('ext-json: is not installed');
        }

        if ($depth < 1) {
            $depth = 1;
        }

        return \json_encode($value, $options, $depth);
    }

    /**
     * Checks whether JSON is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function json_loaded(): bool
    {
        return \function_exists('json_decode');
    }

    /**
     * Makes string's first char lowercase.
     *
     * EXAMPLE: <code>UTF8::lcfirst('ÑTËRNÂTIÔNÀLIZÆTIØN'); // ñTËRNÂTIÔNÀLIZÆTIØN</code>
     *
     * @param string      $str                           <p>The input string</p>
     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The resulting string.</p>
     */
    public static function lcfirst(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if ($clean_utf8) {
            $str = self::clean($str);
        }

        $use_mb_functions = ($lang === null && !$try_to_keep_the_string_length);

        if ($encoding === 'UTF-8') {
            $str_part_two = (string) \mb_substr($str, 1);

            if ($use_mb_functions) {
                $str_part_one = \mb_strtolower(
                    (string) \mb_substr($str, 0, 1)
                );
            } else {
                $str_part_one = self::strtolower(
                    (string) \mb_substr($str, 0, 1),
                    $encoding,
                    false,
                    $lang,
                    $try_to_keep_the_string_length
                );
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $str_part_two = (string) self::substr($str, 1, null, $encoding);

            $str_part_one = self::strtolower(
                (string) self::substr($str, 0, 1, $encoding),
                $encoding,
                false,
                $lang,
                $try_to_keep_the_string_length
            );
        }

        return $str_part_one . $str_part_two;
    }

    /**
     * Lowercase for all words in the string.
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string[]    $exceptions                    [optional] <p>Exclusion for some words.</p>
     * @param string      $char_list                     [optional] <p>Additional chars that contains to words and do
     *                                                   not start a new word.</p>
     * @param string      $encoding                      [optional] <p>Set the charset.</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function lcwords(
        string $str,
        array $exceptions = [],
        string $char_list = '',
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if (!$str) {
            return '';
        }

        $words = self::str_to_words($str, $char_list);
        $use_exceptions = $exceptions !== [];

        $words_str = '';
        foreach ($words as &$word) {
            if (!$word) {
                continue;
            }

            if (
                !$use_exceptions
                ||
                !\in_array($word, $exceptions, true)
            ) {
                $words_str .= self::lcfirst($word, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
            } else {
                $words_str .= $word;
            }
        }

        return $words_str;
    }

    /**
     * Calculate Levenshtein distance between two strings.
     *
     * For better performance, in a real application with a single input string
     * matched against many strings from a database, you will probably want to pre-
     * encode the input only once and use \levenshtein().
     *
     * Source: https://github.com/KEINOS/mb_levenshtein
     *
     * @see https://www.php.net/manual/en/function.levenshtein
     *
     * @param string $str1            <p>One of the strings being evaluated for Levenshtein distance.</p>
     * @param string $str2            <p>One of the strings being evaluated for Levenshtein distance.</p>
     * @param int    $insertionCost   [optional] <p>Defines the cost of insertion.</p>
     * @param int    $replacementCost [optional] <p>Defines the cost of replacement.</p>
     * @param int    $deletionCost    [optional] <p>Defines the cost of deletion.</p>
     *
     * @return int
     */
    public static function levenshtein(
        string $str1,
        string $str2,
        int $insertionCost = 1,
        int $replacementCost = 1,
        int $deletionCost = 1
    ): int {
        $result = ASCII::to_ascii_remap($str1, $str2);

        return \levenshtein($result[0], $result[1], $insertionCost, $replacementCost, $deletionCost);
    }

    /**
     * Strip whitespace or other characters from the beginning of a UTF-8 string.
     *
     * EXAMPLE: <code>UTF8::ltrim('　中文空白　 '); // '中文空白　 '</code>
     *
     * @param string      $str   <p>The string to be trimmed</p>
     * @param string|null $chars <p>Optional characters to be stripped</p>
     *
     * @psalm-pure
     *
     * @return string the string with unwanted characters stripped from the left
     */
    public static function ltrim(string $str = '', string $chars = null): string
    {
        if ($str === '') {
            return '';
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($chars !== null) {
                /** @noinspection PregQuoteUsageInspection */
                $chars = \preg_quote($chars);
                $pattern = "^[{$chars}]+";
            } else {
                $pattern = '^[\\s]+';
            }

            return (string) \mb_ereg_replace($pattern, '', $str);
        }

        if ($chars !== null) {
            $chars = \preg_quote($chars, '/');
            $pattern = "^[{$chars}]+";
        } else {
            $pattern = '^[\\s]+';
        }

        return self::regex_replace($str, $pattern, '');
    }

    /**
     * Returns the UTF-8 character with the maximum code point in the given data.
     *
     * EXAMPLE: <code>UTF8::max('abc-äöü-中文空白'); // 'ø'</code>
     *
     * @param string|string[] $arg <p>A UTF-8 encoded string or an array of such strings.</p>
     *
     * @psalm-pure
     *
     * @return string|null the character with the highest code point than others, returns null on failure or empty input
     */
    public static function max($arg)
    {
        if (\is_array($arg)) {
            $arg = \implode('', $arg);
        }

        $codepoints = self::codepoints($arg);
        if ($codepoints === []) {
            return null;
        }

        $codepoint_max = \max($codepoints);

        return self::chr((int) $codepoint_max);
    }

    /**
     * Calculates and returns the maximum number of bytes taken by any
     * UTF-8 encoded character in the given string.
     *
     * EXAMPLE: <code>UTF8::max_chr_width('Intërnâtiônàlizætiøn'); // 2</code>
     *
     * @param string $str <p>The original Unicode string.</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <p>Max byte lengths of the given chars.</p>
     *
     * @phpstan-return 0|1|2|3|4
     */
    public static function max_chr_width(string $str): int
    {
        $bytes = self::chr_size_list($str);
        if ($bytes !== []) {
            return (int) \max($bytes);
        }

        return 0;
    }

    /**
     * Checks whether mbstring is available on the server.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if available, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function mbstring_loaded(): bool
    {
        return \extension_loaded('mbstring');
    }

    /**
     * Returns the UTF-8 character with the minimum code point in the given data.
     *
     * EXAMPLE: <code>UTF8::min('abc-äöü-中文空白'); // '-'</code>
     *
     * @param string|string[] $arg <strong>A UTF-8 encoded string or an array of such strings.</strong>
     *
     * @psalm-pure
     *
     * @return string|null
     *                     <p>The character with the lowest code point than others, returns null on failure or empty input.</p>
     */
    public static function min($arg)
    {
        if (\is_array($arg)) {
            $arg = \implode('', $arg);
        }

        $codepoints = self::codepoints($arg);
        if ($codepoints === []) {
            return null;
        }

        $codepoint_min = \min($codepoints);

        return self::chr((int) $codepoint_min);
    }

    /**
     * Normalize the encoding-"name" input.
     *
     * EXAMPLE: <code>UTF8::normalize_encoding('UTF8'); // 'UTF-8'</code>
     *
     * @param mixed $encoding <p>e.g.: ISO, UTF8, WINDOWS-1251 etc.</p>
     * @param mixed $fallback <p>e.g.: UTF-8</p>
     *
     * @psalm-pure
     *
     * @return mixed|string
     *                      <p>e.g.: ISO-8859-1, UTF-8, WINDOWS-1251 etc.<br>Will return a empty string as fallback (by default)</p>
     *
     * @template TNormalizeEncodingFallback
     * @phpstan-param string|TNormalizeEncodingFallback $fallback
     * @phpstan-return string|TNormalizeEncodingFallback
     */
    public static function normalize_encoding($encoding, $fallback = '')
    {
        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<string,string>
         */
        static $STATIC_NORMALIZE_ENCODING_CACHE = [];

        // init
        $encoding = (string) $encoding;

        if (!$encoding) {
            return $fallback;
        }

        if (
            $encoding === 'UTF-8'
            ||
            $encoding === 'UTF8'
        ) {
            return 'UTF-8';
        }

        if (
            $encoding === '8BIT'
            ||
            $encoding === 'BINARY'
        ) {
            return 'CP850';
        }

        if (
            $encoding === 'HTML'
            ||
            $encoding === 'HTML-ENTITIES'
        ) {
            return 'HTML-ENTITIES';
        }

        if (
            $encoding === 'ISO'
            ||
            $encoding === 'ISO-8859-1'
        ) {
            return 'ISO-8859-1';
        }

        // only a fallback, for non "strict_types" usage ...
        if ($encoding === '1') {
            return $fallback;
        }

        if (isset($STATIC_NORMALIZE_ENCODING_CACHE[$encoding])) {
            return $STATIC_NORMALIZE_ENCODING_CACHE[$encoding];
        }

        if (self::$ENCODINGS === null) {
            self::$ENCODINGS = self::getData('encodings');
        }

        if (\in_array($encoding, self::$ENCODINGS, true)) {
            $STATIC_NORMALIZE_ENCODING_CACHE[$encoding] = $encoding;

            return $encoding;
        }

        $encoding_original = $encoding;
        $encoding = \strtoupper($encoding);
        $encoding_upper_helper = (string) \preg_replace('/[^a-zA-Z0-9]/u', '', $encoding);

        $equivalences = [
            'ISO8859'     => 'ISO-8859-1',
            'ISO88591'    => 'ISO-8859-1',
            'ISO'         => 'ISO-8859-1',
            'LATIN'       => 'ISO-8859-1',
            'LATIN1'      => 'ISO-8859-1', // Western European
            'ISO88592'    => 'ISO-8859-2',
            'LATIN2'      => 'ISO-8859-2', // Central European
            'ISO88593'    => 'ISO-8859-3',
            'LATIN3'      => 'ISO-8859-3', // Southern European
            'ISO88594'    => 'ISO-8859-4',
            'LATIN4'      => 'ISO-8859-4', // Northern European
            'ISO88595'    => 'ISO-8859-5',
            'ISO88596'    => 'ISO-8859-6', // Greek
            'ISO88597'    => 'ISO-8859-7',
            'ISO88598'    => 'ISO-8859-8', // Hebrew
            'ISO88599'    => 'ISO-8859-9',
            'LATIN5'      => 'ISO-8859-9', // Turkish
            'ISO885911'   => 'ISO-8859-11',
            'TIS620'      => 'ISO-8859-11', // Thai
            'ISO885910'   => 'ISO-8859-10',
            'LATIN6'      => 'ISO-8859-10', // Nordic
            'ISO885913'   => 'ISO-8859-13',
            'LATIN7'      => 'ISO-8859-13', // Baltic
            'ISO885914'   => 'ISO-8859-14',
            'LATIN8'      => 'ISO-8859-14', // Celtic
            'ISO885915'   => 'ISO-8859-15',
            'LATIN9'      => 'ISO-8859-15', // Western European (with some extra chars e.g. €)
            'ISO885916'   => 'ISO-8859-16',
            'LATIN10'     => 'ISO-8859-16', // Southeast European
            'CP1250'      => 'WINDOWS-1250',
            'WIN1250'     => 'WINDOWS-1250',
            'WINDOWS1250' => 'WINDOWS-1250',
            'CP1251'      => 'WINDOWS-1251',
            'WIN1251'     => 'WINDOWS-1251',
            'WINDOWS1251' => 'WINDOWS-1251',
            'CP1252'      => 'WINDOWS-1252',
            'WIN1252'     => 'WINDOWS-1252',
            'WINDOWS1252' => 'WINDOWS-1252',
            'CP1253'      => 'WINDOWS-1253',
            'WIN1253'     => 'WINDOWS-1253',
            'WINDOWS1253' => 'WINDOWS-1253',
            'CP1254'      => 'WINDOWS-1254',
            'WIN1254'     => 'WINDOWS-1254',
            'WINDOWS1254' => 'WINDOWS-1254',
            'CP1255'      => 'WINDOWS-1255',
            'WIN1255'     => 'WINDOWS-1255',
            'WINDOWS1255' => 'WINDOWS-1255',
            'CP1256'      => 'WINDOWS-1256',
            'WIN1256'     => 'WINDOWS-1256',
            'WINDOWS1256' => 'WINDOWS-1256',
            'CP1257'      => 'WINDOWS-1257',
            'WIN1257'     => 'WINDOWS-1257',
            'WINDOWS1257' => 'WINDOWS-1257',
            'CP1258'      => 'WINDOWS-1258',
            'WIN1258'     => 'WINDOWS-1258',
            'WINDOWS1258' => 'WINDOWS-1258',
            'UTF16'       => 'UTF-16',
            'UTF32'       => 'UTF-32',
            'UTF8'        => 'UTF-8',
            'UTF'         => 'UTF-8',
            'UTF7'        => 'UTF-7',
            '8BIT'        => 'CP850',
            'BINARY'      => 'CP850',
        ];

        if (!empty($equivalences[$encoding_upper_helper])) {
            $encoding = $equivalences[$encoding_upper_helper];
        }

        $STATIC_NORMALIZE_ENCODING_CACHE[$encoding_original] = $encoding;

        return $encoding;
    }

    /**
     * Standardize line ending to unix-like.
     *
     * @param string          $str      <p>The input string.</p>
     * @param string|string[] $replacer <p>The replacer char e.g. "\n" (Linux) or "\r\n" (Windows). You can also use \PHP_EOL
     *                                  here.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with normalized line ending.</p>
     */
    public static function normalize_line_ending(string $str, $replacer = "\n"): string
    {
        return \str_replace(["\r\n", "\r", "\n"], $replacer, $str);
    }

    /**
     * Normalize some MS Word special characters.
     *
     * EXAMPLE: <code>UTF8::normalize_msword('„Abcdef…”'); // '"Abcdef..."'</code>
     *
     * @param string $str <p>The string to be normalized.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with normalized characters for commonly used chars in Word documents.</p>
     */
    public static function normalize_msword(string $str): string
    {
        return ASCII::normalize_msword($str);
    }

    /**
     * Normalize the whitespace.
     *
     * EXAMPLE: <code>UTF8::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -"</code>
     *
     * @param string $str                          <p>The string to be normalized.</p>
     * @param bool   $keep_non_breaking_space      [optional] <p>Set to true, to keep non-breaking-spaces.</p>
     * @param bool   $keep_bidi_unicode_controls   [optional] <p>Set to true, to keep non-printable (for the web)
     *                                             bidirectional text chars.</p>
     * @param bool   $normalize_control_characters [optional] <p>Set to true, to convert e.g. LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with normalized whitespace.</p>
     */
    public static function normalize_whitespace(
        string $str,
        bool $keep_non_breaking_space = false,
        bool $keep_bidi_unicode_controls = false,
        bool $normalize_control_characters = false
    ): string {
        return ASCII::normalize_whitespace(
            $str,
            $keep_non_breaking_space,
            $keep_bidi_unicode_controls,
            $normalize_control_characters
        );
    }

    /**
     * Calculates Unicode code point of the given UTF-8 encoded character.
     *
     * INFO: opposite to UTF8::chr()
     *
     * EXAMPLE: <code>UTF8::ord('☃'); // 0x2603</code>
     *
     * @param string $chr      <p>The character of which to calculate code point.<p/>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <p>Unicode code point of the given character,<br>
     *             0 on invalid UTF-8 byte sequence</p>
     */
    public static function ord($chr, string $encoding = 'UTF-8'): int
    {
        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<string,int>
         */
        static $CHAR_CACHE = [];

        // init
        $chr = (string) $chr;

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        $cache_key = $chr . '_' . $encoding;
        if (isset($CHAR_CACHE[$cache_key])) {
            return $CHAR_CACHE[$cache_key];
        }

        // check again, if it's still not UTF-8
        if ($encoding !== 'UTF-8') {
            $chr = self::encode($encoding, $chr);
        }

        if (self::$ORD === null) {
            self::$ORD = self::getData('ord');
        }

        if (isset(self::$ORD[$chr])) {
            return $CHAR_CACHE[$cache_key] = self::$ORD[$chr];
        }

        //
        // fallback via "IntlChar"
        //

        if (self::$SUPPORT['intlChar'] === true) {
            $code = \IntlChar::ord($chr);
            if ($code) {
                return $CHAR_CACHE[$cache_key] = $code;
            }
        }

        //
        // fallback via vanilla php
        //

        $chr = \unpack('C*', (string) \substr($chr, 0, 4));
        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
        /** @var int[] $chr - "unpack": only false if the format string contains errors */
        $chr = $chr;
        $code = $chr ? $chr[1] : 0;

        if ($code >= 0xF0 && isset($chr[4])) {
            return $CHAR_CACHE[$cache_key] = ((($code - 0xF0) << 18) + (($chr[2] - 0x80) << 12) + (($chr[3] - 0x80) << 6) + $chr[4] - 0x80);
        }

        if ($code >= 0xE0 && isset($chr[3])) {
            return $CHAR_CACHE[$cache_key] = ((($code - 0xE0) << 12) + (($chr[2] - 0x80) << 6) + $chr[3] - 0x80);
        }

        if ($code >= 0xC0 && isset($chr[2])) {
            return $CHAR_CACHE[$cache_key] = ((($code - 0xC0) << 6) + $chr[2] - 0x80);
        }

        return $CHAR_CACHE[$cache_key] = $code;
    }

    /**
     * Parses the string into an array (into the the second parameter).
     *
     * WARNING: Unlike "parse_str()", this method does not (re-)place variables in the current scope,
     *          if the second parameter is not set!
     *
     * EXAMPLE: <code>
     * UTF8::parse_str('Iñtërnâtiônéàlizætiøn=測試&arr[]=foo+測試&arr[]=ການທົດສອບ', $array);
     * echo $array['Iñtërnâtiônéàlizætiøn']; // '測試'
     * </code>
     *
     * @see http://php.net/manual/en/function.parse-str.php
     *
     * @param string               $str        <p>The input string.</p>
     * @param array<string, mixed> $result     <p>The result will be returned into this reference parameter.</p>
     * @param bool                 $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Will return <strong>false</strong> if php can't parse the string and we haven't any $result.</p>
     */
    public static function parse_str(string $str, &$result, bool $clean_utf8 = false): bool
    {
        if ($clean_utf8) {
            $str = self::clean($str);
        }

        if (self::$SUPPORT['mbstring'] === true) {
            $return = \mb_parse_str($str, $result);

            return $return !== false && $result !== [];
        }

        /**
         * @psalm-suppress ImpureFunctionCall - we use the second parameter, so we don't change variables by magic
         */
        \parse_str($str, $result);

        return $result !== [];
    }

    /**
     * Checks if \u modifier is available that enables Unicode support in PCRE.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>
     *              <strong>true</strong> if support is available,<br>
     *              <strong>false</strong> otherwise
     *              </p>
     */
    public static function pcre_utf8_support(): bool
    {
        /** @noinspection PhpUsageOfSilenceOperatorInspection */
        return (bool) @\preg_match('//u', '');
    }

    /**
     * Create an array containing a range of UTF-8 characters.
     *
     * EXAMPLE: <code>UTF8::range('κ', 'ζ'); // array('κ', 'ι', 'θ', 'η', 'ζ',)</code>
     *
     * @param int|string $var1      <p>Numeric or hexadecimal code points, or a UTF-8 character to start from.</p>
     * @param int|string $var2      <p>Numeric or hexadecimal code points, or a UTF-8 character to end at.</p>
     * @param bool       $use_ctype <p>use ctype to detect numeric and hexadecimal, otherwise we will use a simple
     *                              "is_numeric"</p>
     * @param string     $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param float|int  $step      [optional] <p>
     *                              If a step value is given, it will be used as the
     *                              increment between elements in the sequence. step
     *                              should be given as a positive number. If not specified,
     *                              step will default to 1.
     *                              </p>
     *
     * @psalm-pure
     *
     * @return list<string>
     */
    public static function range(
        $var1,
        $var2,
        bool $use_ctype = true,
        string $encoding = 'UTF-8',
        $step = 1
    ): array {
        if (!$var1 || !$var2) {
            return [];
        }

        if ($step !== 1) {
            /**
             * @psalm-suppress RedundantConditionGivenDocblockType
             * @psalm-suppress DocblockTypeContradiction
             * @phpstan-ignore-next-line | ignore wrong inputs
             */
            if (!\is_numeric($step)) {
                throw new \InvalidArgumentException('$step need to be a number, type given: ' . \gettype($step));
            }

            /**
             * @psalm-suppress RedundantConditionGivenDocblockType - false-positive from psalm?
             */
            if ($step <= 0) {
                throw new \InvalidArgumentException('$step need to be a positive number, given: ' . $step);
            }
        }

        if ($use_ctype && self::$SUPPORT['ctype'] === false) {
            throw new \RuntimeException('ext-ctype: is not installed');
        }

        $is_digit = false;
        $is_xdigit = false;

        if ($use_ctype && \ctype_digit((string) $var1) && \ctype_digit((string) $var2)) {
            $is_digit = true;
            $start = (int) $var1;
        } elseif ($use_ctype && \ctype_xdigit($var1) && \ctype_xdigit($var2)) {
            $is_xdigit = true;
            $start = (int) self::hex_to_int((string) $var1);
        } elseif (!$use_ctype && \is_numeric($var1)) {
            $start = (int) $var1;
        } else {
            $start = self::ord((string) $var1);
        }

        if (!$start) {
            return [];
        }

        if ($is_digit) {
            $end = (int) $var2;
        } elseif ($is_xdigit) {
            $end = (int) self::hex_to_int((string) $var2);
        } elseif (!$use_ctype && \is_numeric($var2)) {
            $end = (int) $var2;
        } else {
            $end = self::ord((string) $var2);
        }

        if (!$end) {
            return [];
        }

        $array = [];
        foreach (\range($start, $end, $step) as $i) {
            $array[] = (string) self::chr((int) $i, $encoding);
        }

        return $array;
    }

    /**
     * Get data from an array via array like string.
     *
     * EXAMPLE: <code>$array['foo'][123] = 'lall'; UTF8::getUrlParamFromArray('foo[123]', $array); // 'lall'</code>
     *
     * @param array<array-key, mixed> $data
     *
     * @return mixed
     */
    public static function getUrlParamFromArray(string $param, array $data)
    {
        /**
         * @param array<array-key, mixed> $searchArray
         * @param array<array-key, mixed> $array
         *
         * @return mixed
         */
        $getUrlArgFromArrayHelper = static function (array $searchArray, array $array) use (&$getUrlArgFromArrayHelper) {
            foreach ($searchArray as $key => $value) {
                if (isset($array[$key])) {
                    if (\is_array($value) && \is_array($array[$key])) {
                        return $getUrlArgFromArrayHelper($value, $array[$key]);
                    }

                    return $array[$key];
                }
            }

            return null;
        };

        /**
         * @param string $string
         * @return array|null
         */
        $getUrlKeyArgsFromString = static function (string $string) {
            if (!self::str_contains($string, '?')) {
                $string = '?' . $string;
            }

            $args = parse_url($string, PHP_URL_QUERY);
            if ($args) {
                $query = [];
                parse_str($args, $query);

                return $query;
            }

            return null;
        };

        if (isset($data[$param])) {
            return $data[$param];
        }

        $paramKeys = $getUrlKeyArgsFromString($param);
        if ($paramKeys !== null) {
            return $getUrlArgFromArrayHelper($paramKeys, $data);
        }

        return null;
    }

    /**
     * Multi decode HTML entity + fix urlencoded-win1252-chars.
     *
     * EXAMPLE: <code>UTF8::rawurldecode('tes%20öäü%20\u00edtest+test'); // 'tes öäü ítest+test'</code>
     *
     * e.g:
     * 'test+test'                     => 'test+test'
     * 'D&#252;sseldorf'               => 'Düsseldorf'
     * 'D%FCsseldorf'                  => 'Düsseldorf'
     * 'D&#xFC;sseldorf'               => 'Düsseldorf'
     * 'D%26%23xFC%3Bsseldorf'         => 'Düsseldorf'
     * 'DÃ¼sseldorf'                   => 'Düsseldorf'
     * 'D%C3%BCsseldorf'               => 'Düsseldorf'
     * 'D%C3%83%C2%BCsseldorf'         => 'Düsseldorf'
     * 'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'
     *
     * @param string $str          <p>The input string.</p>
     * @param bool   $multi_decode <p>Decode as often as possible.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The decoded URL, as a string.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function rawurldecode(string $str, bool $multi_decode = true): string
    {
        if ($str === '') {
            return '';
        }

        $str = self::urldecode_unicode_helper($str);

        if ($multi_decode) {
            do {
                $str_compare = $str;

                /**
                 * @psalm-suppress PossiblyInvalidArgument
                 */
                $str = \rawurldecode(
                    self::html_entity_decode(
                        self::to_utf8($str),
                        \ENT_QUOTES | \ENT_HTML5
                    )
                );
            } while ($str_compare !== $str);
        } else {
            /**
             * @psalm-suppress PossiblyInvalidArgument
             */
            $str = \rawurldecode(
                self::html_entity_decode(
                    self::to_utf8($str),
                    \ENT_QUOTES | \ENT_HTML5
                )
            );
        }

        return self::fix_simple_utf8($str);
    }

    /**
     * Replaces all occurrences of $pattern in $str by $replacement.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $pattern     <p>The regular expression pattern.</p>
     * @param string $replacement <p>The string to replace with.</p>
     * @param string $options     [optional] <p>Matching conditions to be used.</p>
     * @param string $delimiter   [optional] <p>Delimiter the the regex. Default: '/'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function regex_replace(
        string $str,
        string $pattern,
        string $replacement,
        string $options = '',
        string $delimiter = '/'
    ): string {
        if ($options === 'msr') {
            $options = 'ms';
        }

        // fallback
        if (!$delimiter) {
            $delimiter = '/';
        }

        return (string) \preg_replace(
            $delimiter . $pattern . $delimiter . 'u' . $options,
            $replacement,
            $str
        );
    }

    /**
     * Remove the BOM from UTF-8 / UTF-16 / UTF-32 strings.
     *
     * EXAMPLE: <code>UTF8::remove_bom("\xEF\xBB\xBFΜπορώ να"); // 'Μπορώ να'</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without UTF-BOM.</p>
     */
    public static function remove_bom(string $str): string
    {
        if ($str === '') {
            return '';
        }

        $str_length = \strlen($str);
        foreach (self::$BOM as $bom_string => $bom_byte_length) {
            if (\strncmp($str, $bom_string, $bom_byte_length) === 0) {
                /** @var false|string $str_tmp - needed for PhpStan (stubs error) */
                $str_tmp = \substr($str, $bom_byte_length, $str_length);
                if ($str_tmp === false) {
                    return '';
                }

                $str_length -= $bom_byte_length;

                $str = (string) $str_tmp;
            }
        }

        return $str;
    }

    /**
     * Removes duplicate occurrences of a string in another string.
     *
     * EXAMPLE: <code>UTF8::remove_duplicates('öäü-κόσμεκόσμε-äöü', 'κόσμε'); // 'öäü-κόσμε-äöü'</code>
     *
     * @param string          $str  <p>The base string.</p>
     * @param string|string[] $what <p>String to search for in the base string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with removed duplicates.</p>
     */
    public static function remove_duplicates(string $str, $what = ' '): string
    {
        if (\is_string($what)) {
            $what = [$what];
        }

        /**
         * @psalm-suppress RedundantConditionGivenDocblockType
         * @phpstan-ignore-next-line | ignore wrong inputs
         */
        if (\is_array($what)) {
            foreach ($what as $item) {
                $str = (string) \preg_replace('/(' . \preg_quote($item, '/') . ')+/u', $item, $str);
            }
        }

        return $str;
    }

    /**
     * Remove html via "strip_tags()" from the string.
     *
     * @param string $str            <p>The input string.</p>
     * @param string $allowable_tags [optional] <p>You can use the optional second parameter to specify tags which
     *                               should not be stripped. Default: null
     *                               </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with without html tags.</p>
     */
    public static function remove_html(string $str, string $allowable_tags = ''): string
    {
        return \strip_tags($str, $allowable_tags);
    }

    /**
     * Remove all breaks [<br> | \r\n | \r | \n | ...] from the string.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $replacement [optional] <p>Default is a empty string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without breaks.</p>
     */
    public static function remove_html_breaks(string $str, string $replacement = ''): string
    {
        return (string) \preg_replace("#/\r\n|\r|\n|<br.*/?>#isU", $replacement, $str);
    }

    /**
     * Remove invisible characters from a string.
     *
     * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script.
     *
     * EXAMPLE: <code>UTF8::remove_invisible_characters("κόσ\0με"); // 'κόσμε'</code>
     *
     * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php
     *
     * @param string $str                           <p>The input string.</p>
     * @param bool   $url_encoded                   [optional] <p>
     *                                              Try to remove url encoded control character.
     *                                              WARNING: maybe contains false-positives e.g. aa%0Baa -> aaaa.
     *                                              <br>
     *                                              Default: false
     *                                              </p>
     * @param string $replacement                   [optional] <p>The replacement character.</p>
     * @param bool   $keep_basic_control_characters [optional] <p>Keep control characters like [LRM] or [LSEP].</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without invisible chars.</p>
     */
    public static function remove_invisible_characters(
        string $str,
        bool $url_encoded = false,
        string $replacement = '',
        bool $keep_basic_control_characters = true
    ): string {
        return ASCII::remove_invisible_characters(
            $str,
            $url_encoded,
            $replacement,
            $keep_basic_control_characters
        );
    }

    /**
     * Returns a new string with the prefix $substring removed, if present.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $substring <p>The prefix to remove.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without the prefix $substring.</p>
     */
    public static function remove_left(
        string $str,
        string $substring,
        string $encoding = 'UTF-8'
    ): string {
        if (
            $substring
            &&
            \strpos($str, $substring) === 0
        ) {
            if ($encoding === 'UTF-8') {
                return (string) \mb_substr(
                    $str,
                    (int) \mb_strlen($substring)
                );
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return (string) self::substr(
                $str,
                (int) self::strlen($substring, $encoding),
                null,
                $encoding
            );
        }

        return $str;
    }

    /**
     * Returns a new string with the suffix $substring removed, if present.
     *
     * @param string $str
     * @param string $substring <p>The suffix to remove.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string having a $str without the suffix $substring.</p>
     */
    public static function remove_right(
        string $str,
        string $substring,
        string $encoding = 'UTF-8'
    ): string {
        if ($substring && \substr($str, -\strlen($substring)) === $substring) {
            if ($encoding === 'UTF-8') {
                return (string) \mb_substr(
                    $str,
                    0,
                    (int) \mb_strlen($str) - (int) \mb_strlen($substring)
                );
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return (string) self::substr(
                $str,
                0,
                (int) self::strlen($str, $encoding) - (int) self::strlen($substring, $encoding),
                $encoding
            );
        }

        return $str;
    }

    /**
     * Returns a new string with the suffix $substring removed, if present and case-insensitive.
     *
     * @param string $str
     * @param string $substring <p>The suffix to remove.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string having a $str without the suffix $substring.</p>
     */
    public static function remove_iright(
        string $str,
        string $substring,
        string $encoding = 'UTF-8'
    ): string {
        if ($substring && self::strtoupper(\substr($str, -\strlen($substring)), $encoding) === self::strtoupper($substring, $encoding)) {
            if ($encoding === 'UTF-8') {
                return (string) \mb_substr(
                    $str,
                    0,
                    (int) \mb_strlen($str) - (int) \mb_strlen($substring)
                );
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return (string) self::substr(
                $str,
                0,
                (int) self::strlen($str, $encoding) - (int) self::strlen($substring, $encoding),
                $encoding
            );
        }

        return $str;
    }

    /**
     * Returns a new string with the prefix $substring removed, if present and case-insensitive.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $substring <p>The prefix to remove.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without the prefix $substring.</p>
     */
    public static function remove_ileft(
        string $str,
        string $substring,
        string $encoding = 'UTF-8'
    ): string {
        if (
            $substring
            &&
            \strpos(self::strtoupper($str, $encoding), self::strtoupper($substring, $encoding)) === 0
        ) {
            if ($encoding === 'UTF-8') {
                return (string) \mb_substr(
                    $str,
                    (int) \mb_strlen($substring)
                );
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return (string) self::substr(
                $str,
                (int) self::strlen($substring, $encoding),
                null,
                $encoding
            );
        }

        return $str;
    }

    /**
     * Replaces all occurrences of $search in $str by $replacement.
     *
     * @param string $str            <p>The input string.</p>
     * @param string $search         <p>The needle to search for.</p>
     * @param string $replacement    <p>The string to replace with.</p>
     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with replaced parts.</p>
     */
    public static function replace(
        string $str,
        string $search,
        string $replacement,
        bool $case_sensitive = true
    ): string {
        if ($case_sensitive) {
            return \str_replace($search, $replacement, $str);
        }

        return self::str_ireplace($search, $replacement, $str);
    }

    /**
     * Replaces all occurrences of $search in $str by $replacement.
     *
     * @param string          $str            <p>The input string.</p>
     * @param string[]        $search         <p>The elements to search for.</p>
     * @param string|string[] $replacement    <p>The string to replace with.</p>
     * @param bool            $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with replaced parts.</p>
     */
    public static function replace_all(
        string $str,
        array $search,
        $replacement,
        bool $case_sensitive = true
    ): string {
        if ($case_sensitive) {
            return \str_replace($search, $replacement, $str);
        }

        return self::str_ireplace($search, $replacement, $str);
    }

    /**
     * Replace the diamond question mark (�) and invalid-UTF8 chars with the replacement.
     *
     * EXAMPLE: <code>UTF8::replace_diamond_question_mark('中文空白�', ''); // '中文空白'</code>
     *
     * @param string $str                        <p>The input string</p>
     * @param string $replacement_char           <p>The replacement character.</p>
     * @param bool   $process_invalid_utf8_chars <p>Convert invalid UTF-8 chars </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string without diamond question marks (�).</p>
     */
    public static function replace_diamond_question_mark(
        string $str,
        string $replacement_char = '',
        bool $process_invalid_utf8_chars = true
    ): string {
        if ($str === '') {
            return '';
        }

        if ($process_invalid_utf8_chars) {
            if ($replacement_char === '') {
                $replacement_char_helper = 'none';
            } else {
                $replacement_char_helper = \ord($replacement_char);
            }

            if (self::$SUPPORT['mbstring'] === false) {
                // if there is no native support for "mbstring",
                // then we need to clean the string before ...
                $str = self::clean($str);
            }

            /**
             * @psalm-suppress ImpureFunctionCall - we will reset the value in the next step
             */
            $save = \mb_substitute_character();
            /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore "Unknown character" warnings, it's working anyway */
            @\mb_substitute_character($replacement_char_helper);
            // the polyfill maybe return false, so cast to string
            $str = (string) \mb_convert_encoding($str, 'UTF-8', 'UTF-8');
            \mb_substitute_character($save);
        }

        return \str_replace(
            [
                "\xEF\xBF\xBD",
                '�',
            ],
            [
                $replacement_char,
                $replacement_char,
            ],
            $str
        );
    }

    /**
     * Strip whitespace or other characters from the end of a UTF-8 string.
     *
     * EXAMPLE: <code>UTF8::rtrim('-ABC-中文空白-  '); // '-ABC-中文空白-'</code>
     *
     * @param string      $str   <p>The string to be trimmed.</p>
     * @param string|null $chars <p>Optional characters to be stripped.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with unwanted characters stripped from the right.</p>
     */
    public static function rtrim(string $str = '', string $chars = null): string
    {
        if ($str === '') {
            return '';
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($chars !== null) {
                /** @noinspection PregQuoteUsageInspection */
                $chars = \preg_quote($chars);
                $pattern = "[{$chars}]+$";
            } else {
                $pattern = '[\\s]+$';
            }

            return (string) \mb_ereg_replace($pattern, '', $str);
        }

        if ($chars !== null) {
            $chars = \preg_quote($chars, '/');
            $pattern = "[{$chars}]+$";
        } else {
            $pattern = '[\\s]+$';
        }

        return self::regex_replace($str, $pattern, '');
    }

    /**
     * WARNING: Print native UTF-8 support (libs) by default, e.g. for debugging.
     *
     * @param bool $useEcho
     *
     * @psalm-pure
     *
     * @return string|void
     *
     * @phpstan-return ($useEcho is true ? void : string)
     */
    public static function showSupport(bool $useEcho = true)
    {
        // init
        $html = '';

        $html .= '<pre>';
        foreach (self::$SUPPORT as $key => &$value) {
            $html .= $key . ' - ' . \print_r($value, true) . "\n<br>";
        }
        $html .= '</pre>';

        if ($useEcho) {
            echo $html;
        }

        return $html;
    }

    /**
     * Converts a UTF-8 character to HTML Numbered Entity like "&#123;".
     *
     * EXAMPLE: <code>UTF8::single_chr_html_encode('κ'); // '&#954;'</code>
     *
     * @param string $char             <p>The Unicode character to be encoded as numbered entity.</p>
     * @param bool   $keep_ascii_chars <p>Set to <strong>true</strong> to keep ASCII chars.</>
     * @param string $encoding         [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The HTML numbered entity for the given character.</p>
     *
     * @template T as string
     * @phpstan-param T $char
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function single_chr_html_encode(
        string $char,
        bool $keep_ascii_chars = false,
        string $encoding = 'UTF-8'
    ): string {
        if ($char === '') {
            return '';
        }

        if (
            $keep_ascii_chars
            &&
            ASCII::is_ascii($char)
        ) {
            return $char;
        }

        return '&#' . self::ord($char, $encoding) . ';';
    }

    /**
     * @param string      $str
     * @param int<1, max> $tab_length
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function spaces_to_tabs(string $str, int $tab_length = 4): string
    {
        if ($tab_length === 4) {
            $tab = '    ';
        } elseif ($tab_length === 2) {
            $tab = '  ';
        } else {
            $tab = \str_repeat(' ', $tab_length);
        }

        return \str_replace($tab, "\t", $str);
    }

    /**
     * Returns a camelCase version of the string. Trims surrounding spaces,
     * capitalizes letters following digits, spaces, dashes and underscores,
     * and removes spaces, dashes, as well as underscores.
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string      $encoding                      [optional] <p>Default: 'UTF-8'</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_camelize(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if ($clean_utf8) {
            $str = self::clean($str);
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        $str = self::lcfirst(
            \trim($str),
            $encoding,
            false,
            $lang,
            $try_to_keep_the_string_length
        );
        $str = (string) \preg_replace('/^[-_]+/', '', $str);

        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;

        $str = (string) \preg_replace_callback(
            '/[-_\\s]+(.)?/u',
            /**
             * @param array $match
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $match) use ($use_mb_functions, $encoding, $lang, $try_to_keep_the_string_length): string {
                if (isset($match[1])) {
                    if ($use_mb_functions) {
                        if ($encoding === 'UTF-8') {
                            return \mb_strtoupper($match[1]);
                        }

                        return \mb_strtoupper($match[1], $encoding);
                    }

                    return self::strtoupper($match[1], $encoding, false, $lang, $try_to_keep_the_string_length);
                }

                return '';
            },
            $str
        );

        return (string) \preg_replace_callback(
            '/[\\p{N}]+(.)?/u',
            /**
             * @param array $match
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $match) use ($use_mb_functions, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length): string {
                if ($use_mb_functions) {
                    if ($encoding === 'UTF-8') {
                        return \mb_strtoupper($match[0]);
                    }

                    return \mb_strtoupper($match[0], $encoding);
                }

                return self::strtoupper($match[0], $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
            },
            $str
        );
    }

    /**
     * Returns the string with the first letter of each word capitalized,
     * except for when the word is a name which shouldn't be capitalized.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with $str capitalized.</p>
     */
    public static function str_capitalize_name(string $str): string
    {
        return self::str_capitalize_name_helper(
            self::str_capitalize_name_helper(
                self::collapse_whitespace($str),
                ' '
            ),
            '-'
        );
    }

    /**
     * Returns true if the string contains $needle, false otherwise. By default
     * the comparison is case-sensitive, but can be made insensitive by setting
     * $case_sensitive to false.
     *
     * @param string $haystack       <p>The input string.</p>
     * @param string $needle         <p>Substring to look for.</p>
     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $haystack contains $needle.</p>
     */
    public static function str_contains(
        string $haystack,
        string $needle,
        bool $case_sensitive = true
    ): bool {
        if ($case_sensitive) {
            if (\PHP_VERSION_ID >= 80000) {
                /** @phpstan-ignore-next-line - only for PHP8 */
                return \str_contains($haystack, $needle);
            }

            return \strpos($haystack, $needle) !== false;
        }

        return \mb_stripos($haystack, $needle) !== false;
    }

    /**
     * Returns true if the string contains all $needles, false otherwise. By
     * default, the comparison is case-sensitive, but can be made insensitive by
     * setting $case_sensitive to false.
     *
     * @param string   $haystack       <p>The input string.</p>
     * @param scalar[] $needles        <p>SubStrings to look for.</p>
     * @param bool     $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $haystack contains $needle.</p>
     */
    public static function str_contains_all(
        string $haystack,
        array $needles,
        bool $case_sensitive = true
    ): bool {
        if ($haystack === '' || $needles === []) {
            return false;
        }

        foreach ($needles as &$needle) {
            if (
                $case_sensitive
                &&
                (!$needle || \strpos($haystack, (string)$needle) === false)
            ) {
                return false;
            }

            if (!$needle || \mb_stripos($haystack, (string) $needle) === false) {
                return false;
            }
        }

        return true;
    }

    /**
     * Returns true if the string contains any $needles, false otherwise. By
     * default the comparison is case-sensitive, but can be made insensitive by
     * setting $case_sensitive to false.
     *
     * @param string   $haystack       <p>The input string.</p>
     * @param scalar[] $needles        <p>SubStrings to look for.</p>
     * @param bool     $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str contains $needle.</p>
     */
    public static function str_contains_any(
        string $haystack,
        array $needles,
        bool $case_sensitive = true
    ): bool {
        if ($haystack === '' || $needles === []) {
            return false;
        }

        foreach ($needles as &$needle) {
            if (!$needle) {
                continue;
            }

            if ($case_sensitive) {
                if (\strpos($haystack, (string) $needle) !== false) {
                    return true;
                }

                continue;
            }

            if (\mb_stripos($haystack, (string) $needle) !== false) {
                return true;
            }
        }

        return false;
    }

    /**
     * Returns a lowercase and trimmed string separated by dashes. Dashes are
     * inserted before uppercase characters (with the exception of the first
     * character of the string), and in place of spaces as well as underscores.
     *
     * @param string $str      <p>The input string.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_dasherize(string $str, string $encoding = 'UTF-8'): string
    {
        return self::str_delimit($str, '-', $encoding);
    }

    /**
     * Returns a lowercase and trimmed string separated by the given delimiter.
     *
     * Delimiters are inserted before uppercase characters (with the exception
     * of the first character of the string), and in place of spaces, dashes,
     * and underscores. Alpha delimiters are not converted to lowercase.
     *
     * EXAMPLE: <code>
     * UTF8::str_delimit('test case, '#'); // 'test#case'
     * UTF8::str_delimit('test -case', '**'); // 'test**case'
     * </code>
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string      $delimiter                     <p>Sequence used to separate parts of the string.</p>
     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ ->
     *                                                   ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_delimit(
        string $str,
        string $delimiter,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if (self::$SUPPORT['mbstring'] === true) {
            $str = (string) \mb_ereg_replace('\\B(\\p{Lu})', '-\1', \trim($str));

            $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
            if ($use_mb_functions && $encoding === 'UTF-8') {
                $str = \mb_strtolower($str);
            } else {
                $str = self::strtolower($str, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
            }

            return (string) \mb_ereg_replace('[\\-_\\s]+', $delimiter, $str);
        }

        $str = (string) \preg_replace('/\\B(\\p{Lu})/u', '-\1', \trim($str));

        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;
        if ($use_mb_functions && $encoding === 'UTF-8') {
            $str = \mb_strtolower($str);
        } else {
            $str = self::strtolower($str, $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
        }

        return (string) \preg_replace('/[\\-_\\s]+/u', $delimiter, $str);
    }

    /**
     * Optimized "mb_detect_encoding()"-function -> with support for UTF-16 and UTF-32.
     *
     * EXAMPLE: <code>
     * UTF8::str_detect_encoding('中文空白'); // 'UTF-8'
     * UTF8::str_detect_encoding('Abc'); // 'ASCII'
     * </code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>
     *                      The detected string-encoding e.g. UTF-8 or UTF-16BE,<br>
     *                      otherwise it will return false e.g. for BINARY or not detected encoding.
     *                      </p>
     */
    public static function str_detect_encoding($str)
    {
        // init
        $str = (string) $str;

        //
        // 1.) check binary strings (010001001...) like UTF-16 / UTF-32 / PDF / Images / ...
        //

        if (self::is_binary($str, self::string_has_bom($str) ? false : true)) {
            $is_utf32 = self::is_utf32($str, false);
            if ($is_utf32 === 1) {
                return 'UTF-32LE';
            }
            if ($is_utf32 === 2) {
                return 'UTF-32BE';
            }

            $is_utf16 = self::is_utf16($str, false);
            if ($is_utf16 === 1) {
                return 'UTF-16LE';
            }
            if ($is_utf16 === 2) {
                return 'UTF-16BE';
            }

            // is binary but not "UTF-16" or "UTF-32"
            return false;
        }

        //
        // 2.) simple check for ASCII chars
        //

        if (ASCII::is_ascii($str)) {
            return 'ASCII';
        }

        //
        // 3.) simple check for UTF-8 chars
        //

        if (self::is_utf8_string($str)) {
            return 'UTF-8';
        }

        //
        // 4.) check via "mb_detect_encoding()"
        //
        // INFO: UTF-16, UTF-32, UCS2 and UCS4, encoding detection will fail always with "mb_detect_encoding()"

        $encoding_detecting_order = [
            'ISO-8859-1',
            'ISO-8859-2',
            'ISO-8859-3',
            'ISO-8859-4',
            'ISO-8859-5',
            'ISO-8859-6',
            'ISO-8859-7',
            'ISO-8859-8',
            'ISO-8859-9',
            'ISO-8859-10',
            'ISO-8859-13',
            'ISO-8859-14',
            'ISO-8859-15',
            'ISO-8859-16',
            'WINDOWS-1251',
            'WINDOWS-1252',
            'WINDOWS-1254',
            'CP932',
            'CP936',
            'CP950',
            'CP866',
            'CP850',
            'CP51932',
            'CP50220',
            'CP50221',
            'CP50222',
            'ISO-2022-JP',
            'ISO-2022-KR',
            'JIS',
            'JIS-ms',
            'EUC-CN',
            'EUC-JP',
        ];

        if (self::$SUPPORT['mbstring'] === true) {
            // info: do not use the symfony polyfill here
            $encoding = \mb_detect_encoding($str, $encoding_detecting_order, true);
            if ($encoding) {
                return $encoding;
            }
        }

        //
        // 5.) check via "iconv()"
        //

        if (self::$ENCODINGS === null) {
            self::$ENCODINGS = self::getData('encodings');
        }

        foreach (self::$ENCODINGS as $encoding_tmp) {
            // INFO: //IGNORE but still throw notice
            /** @noinspection PhpUsageOfSilenceOperatorInspection */
            if ((string) @\iconv($encoding_tmp, $encoding_tmp . '//IGNORE', $str) === $str) {
                return $encoding_tmp;
            }
        }

        return false;
    }

    /**
     * Check if the string ends with the given substring.
     *
     * EXAMPLE: <code>
     * UTF8::str_ends_with('BeginMiddleΚόσμε', 'Κόσμε'); // true
     * UTF8::str_ends_with('BeginMiddleΚόσμε', 'κόσμε'); // false
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function str_ends_with(string $haystack, string $needle): bool
    {
        if ($needle === '') {
            return true;
        }

        if ($haystack === '') {
            return false;
        }

        if (\PHP_VERSION_ID >= 80000) {
            /** @phpstan-ignore-next-line - only for PHP8 */
            return \str_ends_with($haystack, $needle);
        }

        return \substr($haystack, -\strlen($needle)) === $needle;
    }

    /**
     * Returns true if the string ends with any of $substrings, false otherwise.
     *
     * - case-sensitive
     *
     * @param string   $str        <p>The input string.</p>
     * @param string[] $substrings <p>Substrings to look for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str ends with $substring.</p>
     */
    public static function str_ends_with_any(string $str, array $substrings): bool
    {
        if ($substrings === []) {
            return false;
        }

        foreach ($substrings as &$substring) {
            if (\substr($str, -\strlen($substring)) === $substring) {
                return true;
            }
        }

        return false;
    }

    /**
     * Ensures that the string begins with $substring. If it doesn't, it's
     * prepended.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $substring <p>The substring to add if not present.</p>
     *
     * @psalm-pure
     *
     * @template T as string
     * @template TSub as string
     * @phpstan-param T $str
     * @phpstan-param TSub $substring
     * @phpstan-return (TSub is non-empty-string ? non-empty-string : (T is non-empty-string ? non-empty-string : string))
     */
    public static function str_ensure_left(string $str, string $substring): string
    {
        if (
            $substring !== ''
            &&
            \strpos($str, $substring) === 0
        ) {
            return $str;
        }

        return $substring . $str;
    }

    /**
     * Ensures that the string ends with $substring. If it doesn't, it's appended.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $substring <p>The substring to add if not present.</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @template TSub as string
     * @phpstan-param T $str
     * @phpstan-param TSub $substring
     * @phpstan-return (TSub is non-empty-string ? non-empty-string : (T is non-empty-string ? non-empty-string : string))
     */
    public static function str_ensure_right(string $str, string $substring): string
    {
        if (
            $str === ''
            ||
            $substring === ''
            ||
            \substr($str, -\strlen($substring)) !== $substring
        ) {
            $str .= $substring;
        }

        return $str;
    }

    /**
     * Capitalizes the first word of the string, replaces underscores with
     * spaces, and strips '_id'.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_humanize($str): string
    {
        $str = \str_replace(
            [
                '_id',
                '_',
            ],
            [
                '',
                ' ',
            ],
            $str
        );

        return self::ucfirst(\trim($str));
    }

    /**
     * Check if the string ends with the given substring, case-insensitive.
     *
     * EXAMPLE: <code>
     * UTF8::str_iends_with('BeginMiddleΚόσμε', 'Κόσμε'); // true
     * UTF8::str_iends_with('BeginMiddleΚόσμε', 'κόσμε'); // true
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function str_iends_with(string $haystack, string $needle): bool
    {
        if ($needle === '') {
            return true;
        }

        if ($haystack === '') {
            return false;
        }

        return self::strcasecmp(\substr($haystack, -\strlen($needle)), $needle) === 0;
    }

    /**
     * Returns true if the string ends with any of $substrings, false otherwise.
     *
     * - case-insensitive
     *
     * @param string   $str        <p>The input string.</p>
     * @param string[] $substrings <p>Substrings to look for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str ends with $substring.</p>
     */
    public static function str_iends_with_any(string $str, array $substrings): bool
    {
        if ($substrings === []) {
            return false;
        }

        foreach ($substrings as &$substring) {
            if (self::str_iends_with($str, $substring)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Inserts $substring into the string at the $index provided.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $substring <p>String to be inserted.</p>
     * @param int    $index     <p>The index at which to insert the substring.</p>
     * @param string $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_insert(
        string $str,
        string $substring,
        int $index,
        string $encoding = 'UTF-8'
    ): string {
        if ($encoding === 'UTF-8') {
            $len = (int) \mb_strlen($str);
            if ($index > $len) {
                return $str;
            }

            /** @noinspection UnnecessaryCastingInspection */
            return (string) \mb_substr($str, 0, $index) .
                   $substring .
                   (string) \mb_substr($str, $index, $len);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        $len = (int) self::strlen($str, $encoding);
        if ($index > $len) {
            return $str;
        }

        return ((string) self::substr($str, 0, $index, $encoding)) .
               $substring .
               ((string) self::substr($str, $index, $len, $encoding));
    }

    /**
     * Case-insensitive and UTF-8 safe version of <function>str_replace</function>.
     *
     * EXAMPLE: <code>
     * UTF8::str_ireplace('lIzÆ', 'lise', 'Iñtërnâtiônàlizætiøn'); // 'Iñtërnâtiônàlisetiøn'
     * </code>
     *
     * @see http://php.net/manual/en/function.str-ireplace.php
     *
     * @param string|string[] $search      <p>
     *                                     Every replacement with search array is
     *                                     performed on the result of previous replacement.
     *                                     </p>
     * @param string|string[] $replacement <p>The replacement.</p>
     * @param string|string[] $subject     <p>
     *                                     If subject is an array, then the search and
     *                                     replace is performed with every entry of
     *                                     subject, and the return value is an array as
     *                                     well.
     *                                     </p>
     * @param int             $count       [optional] <p>
     *                                     The number of matched and replaced needles will
     *                                     be returned in count which is passed by
     *                                     reference.
     *                                     </p>
     *
     * @psalm-pure
     *
     * @return string|string[]
     *                         <p>A string or an array of replacements.</p>
     *
     * @template TStrIReplaceSubject
     * @phpstan-param TStrIReplaceSubject $subject
     * @phpstan-return TStrIReplaceSubject
     */
    public static function str_ireplace($search, $replacement, $subject, &$count = null)
    {
        $search = (array) $search;

        /** @noinspection AlterInForeachInspection */
        foreach ($search as &$s) {
            $s = (string) $s;
            if ($s === '') {
                $s = '/^(?<=.)$/';
            } else {
                $s = '/' . \preg_quote($s, '/') . '/ui';
            }
        }

        // fallback
        /** @phpstan-ignore-next-line - only a fallback for PHP8 */
        if ($replacement === null) {
            $replacement = '';
        }
        /** @phpstan-ignore-next-line - only a fallback for PHP8 */
        if ($subject === null) {
            $subject = '';
        }

        /**
         * @psalm-suppress PossiblyNullArgument
         * @phpstan-var TStrIReplaceSubject $subject
         */
        $subject = \preg_replace($search, $replacement, $subject, -1, $count);

        return $subject;
    }

    /**
     * Replaces $search from the beginning of string with $replacement.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $search      <p>The string to search for.</p>
     * @param string $replacement <p>The replacement.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string after the replacement.</p>
     */
    public static function str_ireplace_beginning(string $str, string $search, string $replacement): string
    {
        if ($str === '') {
            if ($replacement === '') {
                return '';
            }

            if ($search === '') {
                return $replacement;
            }
        }

        if ($search === '') {
            return $str . $replacement;
        }

        $searchLength = \strlen($search);
        if (\strncasecmp($str, $search, $searchLength) === 0) {
            return $replacement . \substr($str, $searchLength);
        }

        return $str;
    }

    /**
     * Replaces $search from the ending of string with $replacement.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $search      <p>The string to search for.</p>
     * @param string $replacement <p>The replacement.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string after the replacement.</p>
     */
    public static function str_ireplace_ending(string $str, string $search, string $replacement): string
    {
        if ($str === '') {
            if ($replacement === '') {
                return '';
            }

            if ($search === '') {
                return $replacement;
            }
        }

        if ($search === '') {
            return $str . $replacement;
        }

        if (\stripos($str, $search, \strlen($str) - \strlen($search)) !== false) {
            $str = \substr($str, 0, -\strlen($search)) . $replacement;
        }

        return $str;
    }

    /**
     * Check if the string starts with the given substring, case-insensitive.
     *
     * EXAMPLE: <code>
     * UTF8::str_istarts_with('ΚόσμεMiddleEnd', 'Κόσμε'); // true
     * UTF8::str_istarts_with('ΚόσμεMiddleEnd', 'κόσμε'); // true
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function str_istarts_with(string $haystack, string $needle): bool
    {
        if ($needle === '') {
            return true;
        }

        if ($haystack === '') {
            return false;
        }

        return self::stripos($haystack, $needle) === 0;
    }

    /**
     * Returns true if the string begins with any of $substrings, false otherwise.
     *
     * - case-insensitive
     *
     * @param string   $str        <p>The input string.</p>
     * @param scalar[] $substrings <p>Substrings to look for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str starts with $substring.</p>
     */
    public static function str_istarts_with_any(string $str, array $substrings): bool
    {
        if ($str === '') {
            return false;
        }

        if ($substrings === []) {
            return false;
        }

        foreach ($substrings as &$substring) {
            if (self::str_istarts_with($str, (string) $substring)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Gets the substring after the first occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_after_first_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        $offset = self::stripos($str, $separator);
        if ($offset === false) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr(
                $str,
                $offset + (int) \mb_strlen($separator)
            );
        }

        return (string) self::substr(
            $str,
            $offset + (int) self::strlen($separator, $encoding),
            null,
            $encoding
        );
    }

    /**
     * Gets the substring after the last occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_after_last_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        $offset = self::strripos($str, $separator);
        if ($offset === false) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr(
                $str,
                $offset + (int) self::strlen($separator)
            );
        }

        return (string) self::substr(
            $str,
            $offset + (int) self::strlen($separator, $encoding),
            null,
            $encoding
        );
    }

    /**
     * Gets the substring before the first occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_before_first_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        $offset = self::stripos($str, $separator);
        if ($offset === false) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str, 0, $offset);
        }

        return (string) self::substr($str, 0, $offset, $encoding);
    }

    /**
     * Gets the substring before the last occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_before_last_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $offset = \mb_strripos($str, $separator);
            if ($offset === false) {
                return '';
            }

            return (string) \mb_substr($str, 0, $offset);
        }

        $offset = self::strripos($str, $separator, 0, $encoding);
        if ($offset === false) {
            return '';
        }

        return (string) self::substr($str, 0, $offset, $encoding);
    }

    /**
     * Gets the substring after (or before via "$before_needle") the first occurrence of the "$needle".
     *
     * @param string $str           <p>The input string.</p>
     * @param string $needle        <p>The string to look for.</p>
     * @param bool   $before_needle [optional] <p>Default: false</p>
     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_first(
        string $str,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8'
    ): string {
        if (
            $needle === ''
            ||
            $str === ''
        ) {
            return '';
        }

        $part = self::stristr(
            $str,
            $needle,
            $before_needle,
            $encoding
        );
        if ($part === false) {
            return '';
        }

        return $part;
    }

    /**
     * Gets the substring after (or before via "$before_needle") the last occurrence of the "$needle".
     *
     * @param string $str           <p>The input string.</p>
     * @param string $needle        <p>The string to look for.</p>
     * @param bool   $before_needle [optional] <p>Default: false</p>
     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_isubstr_last(
        string $str,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8'
    ): string {
        if (
            $needle === ''
            ||
            $str === ''
        ) {
            return '';
        }

        $part = self::strrichr(
            $str,
            $needle,
            $before_needle,
            $encoding
        );
        if ($part === false) {
            return '';
        }

        return $part;
    }

    /**
     * Returns the last $n characters of the string.
     *
     * @param string $str      <p>The input string.</p>
     * @param int    $n        <p>Number of characters to retrieve from the end.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_last_char(
        string $str,
        int $n = 1,
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '' || $n <= 0) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str, -$n);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        return (string) self::substr($str, -$n, null, $encoding);
    }

    /**
     * Limit the number of characters in a string.
     *
     * @param string      $str        <p>The input string.</p>
     * @param int<1, max> $length     [optional] <p>Default: 100</p>
     * @param string      $str_add_on [optional] <p>Default: …</p>
     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_limit(
        string $str,
        int $length = 100,
        string $str_add_on = '…',
        string $encoding = 'UTF-8'
    ): string {
        if (
            $str === ''
            ||
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            $length <= 0
        ) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            if ((int) \mb_strlen($str) <= $length) {
                return $str;
            }

            /** @noinspection UnnecessaryCastingInspection */
            return (string) \mb_substr($str, 0, $length - (int) self::strlen($str_add_on)) . $str_add_on;
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ((int) self::strlen($str, $encoding) <= $length) {
            return $str;
        }

        return ((string) self::substr($str, 0, $length - (int) self::strlen($str_add_on), $encoding)) . $str_add_on;
    }

    /**
     * Limit the number of characters in a string in bytes.
     *
     * @param string      $str        <p>The input string.</p>
     * @param int<1, max> $length     [optional] <p>Default: 100</p>
     * @param string      $str_add_on [optional] <p>Default: ...</p>
     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_limit_in_byte(
        string $str,
        int $length = 100,
        string $str_add_on = '...',
        string $encoding = 'UTF-8'
    ): string {
        if (
            $str === ''
            ||
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            $length <= 0
        ) {
            return '';
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ((int) self::strlen_in_byte($str, $encoding) <= $length) {
            return $str;
        }

        return ((string) self::substr_in_byte($str, 0, $length - (int) self::strlen_in_byte($str_add_on), $encoding)) . $str_add_on;
    }

    /**
     * Limit the number of characters in a string, but also after the next word.
     *
     * EXAMPLE: <code>UTF8::str_limit_after_word('fòô bàř fòô', 8, ''); // 'fòô bàř'</code>
     *
     * @param string      $str        <p>The input string.</p>
     * @param int<1, max> $length     [optional] <p>Default: 100</p>
     * @param string      $str_add_on [optional] <p>Default: …</p>
     * @param string      $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_limit_after_word(
        string $str,
        int $length = 100,
        string $str_add_on = '…',
        string $encoding = 'UTF-8'
    ): string {
        if (
            $str === ''
            ||
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            $length <= 0
        ) {
            return '';
        }

        if ($encoding === 'UTF-8') {
            if ((int) \mb_strlen($str) <= $length) {
                return $str;
            }

            if (\mb_substr($str, $length - 1, 1) === ' ') {
                return ((string) \mb_substr($str, 0, $length - 1)) . $str_add_on;
            }

            $str = \mb_substr($str, 0, $length);

            $array = \explode(' ', $str, -1);
            $new_str = \implode(' ', $array);

            if ($new_str === '') {
                return ((string) \mb_substr($str, 0, $length - 1)) . $str_add_on;
            }
        } else {
            if ((int) self::strlen($str, $encoding) <= $length) {
                return $str;
            }

            if (self::substr($str, $length - 1, 1, $encoding) === ' ') {
                return ((string) self::substr($str, 0, $length - 1, $encoding)) . $str_add_on;
            }

            /** @noinspection CallableParameterUseCaseInTypeContextInspection - FP */
            $str = self::substr($str, 0, $length, $encoding);
            if ($str === false) {
                return '' . $str_add_on;
            }

            $array = \explode(' ', $str, -1);
            $new_str = \implode(' ', $array);

            if ($new_str === '') {
                return ((string) self::substr($str, 0, $length - 1, $encoding)) . $str_add_on;
            }
        }

        return $new_str . $str_add_on;
    }

    /**
     * Returns the longest common prefix between the $str1 and $str2.
     *
     * @param string $str1     <p>The input sting.</p>
     * @param string $str2     <p>Second string for comparison.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_longest_common_prefix(
        string $str1,
        string $str2,
        string $encoding = 'UTF-8'
    ): string {
        // init
        $longest_common_prefix = '';

        if ($encoding === 'UTF-8') {
            $max_length = (int) \min(
                \mb_strlen($str1),
                \mb_strlen($str2)
            );

            for ($i = 0; $i < $max_length; ++$i) {
                $char = \mb_substr($str1, $i, 1);

                if (
                    $char !== false /* @phpstan-ignore-line | old polyfill will return false, or? */
                    &&
                    $char === \mb_substr($str2, $i, 1)
                ) {
                    $longest_common_prefix .= $char;
                } else {
                    break;
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $max_length = (int) \min(
                self::strlen($str1, $encoding),
                self::strlen($str2, $encoding)
            );

            for ($i = 0; $i < $max_length; ++$i) {
                $char = self::substr($str1, $i, 1, $encoding);

                if (
                    $char !== false
                    &&
                    $char === self::substr($str2, $i, 1, $encoding)
                ) {
                    $longest_common_prefix .= $char;
                } else {
                    break;
                }
            }
        }

        return $longest_common_prefix;
    }

    /**
     * Returns the longest common substring between the $str1 and $str2.
     * In the case of ties, it returns that which occurs first.
     *
     * @param string $str1
     * @param string $str2     <p>Second string for comparison.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with its $str being the longest common substring.</p>
     */
    public static function str_longest_common_substring(
        string $str1,
        string $str2,
        string $encoding = 'UTF-8'
    ): string {
        if ($str1 === '' || $str2 === '') {
            return '';
        }

        // Uses dynamic programming to solve
        // http://en.wikipedia.org/wiki/Longest_common_substring_problem

        if ($encoding === 'UTF-8') {
            $str_length = (int) \mb_strlen($str1);
            $other_length = (int) \mb_strlen($str2);
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $str_length = (int) self::strlen($str1, $encoding);
            $other_length = (int) self::strlen($str2, $encoding);
        }

        // Return if either string is empty
        if ($str_length === 0 || $other_length === 0) {
            return '';
        }

        $len = 0;
        $end = 0;
        $table = \array_fill(
            0,
            $str_length + 1,
            \array_fill(0, $other_length + 1, 0)
        );

        if ($encoding === 'UTF-8') {
            for ($i = 1; $i <= $str_length; ++$i) {
                for ($j = 1; $j <= $other_length; ++$j) {
                    $str_char = \mb_substr($str1, $i - 1, 1);
                    $other_char = \mb_substr($str2, $j - 1, 1);

                    if ($str_char === $other_char) {
                        $table[$i][$j] = $table[$i - 1][$j - 1] + 1;
                        if ($table[$i][$j] > $len) {
                            $len = $table[$i][$j];
                            $end = $i;
                        }
                    } else {
                        $table[$i][$j] = 0;
                    }
                }
            }
        } else {
            for ($i = 1; $i <= $str_length; ++$i) {
                for ($j = 1; $j <= $other_length; ++$j) {
                    $str_char = self::substr($str1, $i - 1, 1, $encoding);
                    $other_char = self::substr($str2, $j - 1, 1, $encoding);

                    if ($str_char === $other_char) {
                        $table[$i][$j] = $table[$i - 1][$j - 1] + 1;
                        if ($table[$i][$j] > $len) {
                            $len = $table[$i][$j];
                            $end = $i;
                        }
                    } else {
                        $table[$i][$j] = 0;
                    }
                }
            }
        }

        if ($encoding === 'UTF-8') {
            return (string) \mb_substr($str1, $end - $len, $len);
        }

        return (string) self::substr($str1, $end - $len, $len, $encoding);
    }

    /**
     * Returns the longest common suffix between the $str1 and $str2.
     *
     * @param string $str1
     * @param string $str2     <p>Second string for comparison.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_longest_common_suffix(
        string $str1,
        string $str2,
        string $encoding = 'UTF-8'
    ): string {
        if ($str1 === '' || $str2 === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $max_length = (int) \min(
                \mb_strlen($str1, $encoding),
                \mb_strlen($str2, $encoding)
            );

            $longest_common_suffix = '';
            for ($i = 1; $i <= $max_length; ++$i) {
                $char = \mb_substr($str1, -$i, 1);

                if (
                    $char !== false /* @phpstan-ignore-line | old polyfill will return false, or? */
                    &&
                    $char === \mb_substr($str2, -$i, 1)
                ) {
                    $longest_common_suffix = $char . $longest_common_suffix;
                } else {
                    break;
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $max_length = (int) \min(
                self::strlen($str1, $encoding),
                self::strlen($str2, $encoding)
            );

            $longest_common_suffix = '';
            for ($i = 1; $i <= $max_length; ++$i) {
                $char = self::substr($str1, -$i, 1, $encoding);

                if (
                    $char !== false
                    &&
                    $char === self::substr($str2, -$i, 1, $encoding)
                ) {
                    $longest_common_suffix = $char . $longest_common_suffix;
                } else {
                    break;
                }
            }
        }

        return $longest_common_suffix;
    }

    /**
     * Returns true if $str matches the supplied pattern, false otherwise.
     *
     * @param string $str     <p>The input string.</p>
     * @param string $pattern <p>Regex pattern to match against.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str matches the pattern.</p>
     */
    public static function str_matches_pattern(string $str, string $pattern): bool
    {
        return (bool) \preg_match('/' . $pattern . '/u', $str);
    }

    /**
     * Returns whether or not a character exists at an index. Offsets may be
     * negative to count from the last character in the string. Implements
     * part of the ArrayAccess interface.
     *
     * @param string $str      <p>The input string.</p>
     * @param int    $offset   <p>The index to check.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not the index exists.</p>
     */
    public static function str_offset_exists(string $str, int $offset, string $encoding = 'UTF-8'): bool
    {
        // init
        $length = (int) self::strlen($str, $encoding);

        if ($offset >= 0) {
            return $length > $offset;
        }

        return $length >= \abs($offset);
    }

    /**
     * Returns the character at the given index. Offsets may be negative to
     * count from the last character in the string. Implements part of the
     * ArrayAccess interface, and throws an OutOfBoundsException if the index
     * does not exist.
     *
     * @param string      $str      <p>The input string.</p>
     * @param int<1, max> $index    <p>The <strong>index</strong> from which to retrieve the char.</p>
     * @param string      $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @throws \OutOfBoundsException if the positive or negative offset does not exist
     *
     * @return string
     *                <p>The character at the specified index.</p>
     *
     * @psalm-pure
     */
    public static function str_offset_get(string $str, int $index, string $encoding = 'UTF-8'): string
    {
        // init
        $length = (int) self::strlen($str);

        if (
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            ($index >= 0 && $length <= $index)
            ||
            $length < \abs($index)
        ) {
            throw new \OutOfBoundsException('No character exists at the index');
        }

        return self::char_at($str, $index, $encoding);
    }

    /**
     * Pad a UTF-8 string to a given length with another string.
     *
     * EXAMPLE: <code>UTF8::str_pad('中文空白', 10, '_', STR_PAD_BOTH); // '___中文空白___'</code>
     *
     * @param string     $str        <p>The input string.</p>
     * @param int        $pad_length <p>The length of return string.</p>
     * @param string     $pad_string [optional] <p>String to use for padding the input string.</p>
     * @param int|string $pad_type   [optional] <p>
     *                               Can be <strong>STR_PAD_RIGHT</strong> (default), [or string "right"]<br>
     *                               <strong>STR_PAD_LEFT</strong> [or string "left"] or<br>
     *                               <strong>STR_PAD_BOTH</strong> [or string "both"]
     *                               </p>
     * @param string     $encoding   [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Returns the padded string.</p>
     */
    public static function str_pad(
        string $str,
        int $pad_length,
        string $pad_string = ' ',
        $pad_type = \STR_PAD_RIGHT,
        string $encoding = 'UTF-8'
    ): string {
        if ($pad_length === 0 || $pad_string === '') {
            return $str;
        }

        if ($pad_type !== (int) $pad_type) {
            if ($pad_type === 'left') {
                $pad_type = \STR_PAD_LEFT;
            } elseif ($pad_type === 'right') {
                $pad_type = \STR_PAD_RIGHT;
            } elseif ($pad_type === 'both') {
                $pad_type = \STR_PAD_BOTH;
            } else {
                throw new \InvalidArgumentException(
                    'Pad expects $pad_type to be "STR_PAD_*" or ' . "to be one of 'left', 'right' or 'both'"
                );
            }
        }

        if ($encoding === 'UTF-8') {
            $str_length = (int) \mb_strlen($str);

            if ($pad_length >= $str_length) {
                switch ($pad_type) {
                    case \STR_PAD_LEFT:
                        $ps_length = (int) \mb_strlen($pad_string);

                        $diff = ($pad_length - $str_length);

                        $pre = (string) \mb_substr(
                            \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
                            0,
                            $diff
                        );
                        $post = '';

                        break;

                    case \STR_PAD_BOTH:
                        $diff = ($pad_length - $str_length);

                        $ps_length_left = (int) \floor($diff / 2);

                        $ps_length_right = (int) \ceil($diff / 2);

                        $pre = (string) \mb_substr(
                            \str_repeat($pad_string, $ps_length_left),
                            0,
                            $ps_length_left
                        );
                        $post = (string) \mb_substr(
                            \str_repeat($pad_string, $ps_length_right),
                            0,
                            $ps_length_right
                        );

                        break;

                    case \STR_PAD_RIGHT:
                    default:
                        $ps_length = (int) \mb_strlen($pad_string);

                        $diff = ($pad_length - $str_length);

                        $post = (string) \mb_substr(
                            \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
                            0,
                            $diff
                        );
                        $pre = '';
                }

                return $pre . $str . $post;
            }

            return $str;
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        $str_length = (int) self::strlen($str, $encoding);

        if ($pad_length >= $str_length) {
            switch ($pad_type) {
                case \STR_PAD_LEFT:
                    $ps_length = (int) self::strlen($pad_string, $encoding);

                    $diff = ($pad_length - $str_length);

                    $pre = (string) self::substr(
                        \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
                        0,
                        $diff,
                        $encoding
                    );
                    $post = '';

                    break;

                case \STR_PAD_BOTH:
                    $diff = ($pad_length - $str_length);

                    $ps_length_left = (int) \floor($diff / 2);

                    $ps_length_right = (int) \ceil($diff / 2);

                    $pre = (string) self::substr(
                        \str_repeat($pad_string, $ps_length_left),
                        0,
                        $ps_length_left,
                        $encoding
                    );
                    $post = (string) self::substr(
                        \str_repeat($pad_string, $ps_length_right),
                        0,
                        $ps_length_right,
                        $encoding
                    );

                    break;

                case \STR_PAD_RIGHT:
                default:
                    $ps_length = (int) self::strlen($pad_string, $encoding);

                    $diff = ($pad_length - $str_length);

                    $post = (string) self::substr(
                        \str_repeat($pad_string, (int) \ceil($diff / $ps_length)),
                        0,
                        $diff,
                        $encoding
                    );
                    $pre = '';
            }

            return $pre . $str . $post;
        }

        return $str;
    }

    /**
     * Returns a new string of a given length such that both sides of the
     * string are padded. Alias for "UTF8::str_pad()" with a $pad_type of 'both'.
     *
     * @param string $str
     * @param int    $length   <p>Desired string length after padding.</p>
     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string with padding applied.</p>
     */
    public static function str_pad_both(
        string $str,
        int $length,
        string $pad_str = ' ',
        string $encoding = 'UTF-8'
    ): string {
        return self::str_pad(
            $str,
            $length,
            $pad_str,
            \STR_PAD_BOTH,
            $encoding
        );
    }

    /**
     * Returns a new string of a given length such that the beginning of the
     * string is padded. Alias for "UTF8::str_pad()" with a $pad_type of 'left'.
     *
     * @param string $str
     * @param int    $length   <p>Desired string length after padding.</p>
     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string with left padding.</p>
     */
    public static function str_pad_left(
        string $str,
        int $length,
        string $pad_str = ' ',
        string $encoding = 'UTF-8'
    ): string {
        return self::str_pad(
            $str,
            $length,
            $pad_str,
            \STR_PAD_LEFT,
            $encoding
        );
    }

    /**
     * Returns a new string of a given length such that the end of the string
     * is padded. Alias for "UTF8::str_pad()" with a $pad_type of 'right'.
     *
     * @param string $str
     * @param int    $length   <p>Desired string length after padding.</p>
     * @param string $pad_str  [optional] <p>String used to pad, defaults to space. Default: ' '</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string with right padding.</p>
     */
    public static function str_pad_right(
        string $str,
        int $length,
        string $pad_str = ' ',
        string $encoding = 'UTF-8'
    ): string {
        return self::str_pad(
            $str,
            $length,
            $pad_str,
            \STR_PAD_RIGHT,
            $encoding
        );
    }

    /**
     * Repeat a string.
     *
     * EXAMPLE: <code>UTF8::str_repeat("°~\xf0\x90\x28\xbc", 2); // '°~ð(¼°~ð(¼'</code>
     *
     * @param string      $str   <p>
     *                           The string to be repeated.
     *                           </p>
     * @param int<1, max> $multiplier <p>
     *                           Number of time the input string should be
     *                           repeated.
     *                           </p>
     *                           <p>
     *                           multiplier has to be greater than or equal to 0.
     *                           If the multiplier is set to 0, the function
     *                           will return an empty string.
     *                           </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The repeated string.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_repeat(string $str, int $multiplier): string
    {
        $str = self::filter($str);

        return \str_repeat($str, $multiplier);
    }

    /**
     * INFO: This is only a wrapper for "str_replace()"  -> the original functions is already UTF-8 safe.
     *
     * Replace all occurrences of the search string with the replacement string
     *
     * @see http://php.net/manual/en/function.str-replace.php
     *
     * @param string|string[] $search  <p>
     *                                 The value being searched for, otherwise known as the needle.
     *                                 An array may be used to designate multiple needles.
     *                                 </p>
     * @param string|string[] $replace <p>
     *                                 The replacement value that replaces found search
     *                                 values. An array may be used to designate multiple replacements.
     *                                 </p>
     * @param string|string[] $subject <p>
     *                                 The string or array of strings being searched and replaced on,
     *                                 otherwise known as the haystack.
     *                                 </p>
     *                                 <p>
     *                                 If subject is an array, then the search and
     *                                 replace is performed with every entry of
     *                                 subject, and the return value is an array as
     *                                 well.
     *                                 </p>
     * @param int|null        $count   [optional] <p>
     *                                 If passed, this will hold the number of matched and replaced needles.
     *                                 </p>
     *
     * @psalm-pure
     *
     * @return string|string[]
     *                         <p>This function returns a string or an array with the replaced values.</p>
     *
     * @template TStrReplaceSubject
     * @phpstan-param TStrReplaceSubject $subject
     * @phpstan-return TStrReplaceSubject
     *
     * @deprecated please use \str_replace() instead
     */
    public static function str_replace(
        $search,
        $replace,
        $subject,
        int &$count = null
    ) {
        /**
         * @psalm-suppress PossiblyNullArgument
         * @phpstan-var TStrReplaceSubject $return;
         */
        $return = \str_replace(
            $search,
            $replace,
            $subject,
            $count
        );

        return $return;
    }

    /**
     * Replaces $search from the beginning of string with $replacement.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $search      <p>The string to search for.</p>
     * @param string $replacement <p>The replacement.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string after the replacements.</p>
     */
    public static function str_replace_beginning(
        string $str,
        string $search,
        string $replacement
    ): string {
        if ($str === '') {
            if ($replacement === '') {
                return '';
            }

            if ($search === '') {
                return $replacement;
            }
        }

        if ($search === '') {
            return $str . $replacement;
        }

        $searchLength = \strlen($search);
        if (\strncmp($str, $search, $searchLength) === 0) {
            return $replacement . \substr($str, $searchLength);
        }

        return $str;
    }

    /**
     * Replaces $search from the ending of string with $replacement.
     *
     * @param string $str         <p>The input string.</p>
     * @param string $search      <p>The string to search for.</p>
     * @param string $replacement <p>The replacement.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string after the replacements.</p>
     */
    public static function str_replace_ending(
        string $str,
        string $search,
        string $replacement
    ): string {
        if ($str === '') {
            if ($replacement === '') {
                return '';
            }

            if ($search === '') {
                return $replacement;
            }
        }

        if ($search === '') {
            return $str . $replacement;
        }

        if (\strpos($str, $search, \strlen($str) - \strlen($search)) !== false) {
            $str = \substr($str, 0, -\strlen($search)) . $replacement;
        }

        return $str;
    }

    /**
     * Replace the first "$search"-term with the "$replace"-term.
     *
     * @param string $search
     * @param string $replace
     * @param string $subject
     *
     * @psalm-pure
     *
     * @return string
     *
     * @psalm-suppress InvalidReturnType
     */
    public static function str_replace_first(
        string $search,
        string $replace,
        string $subject
    ): string {
        $pos = self::strpos($subject, $search);

        if ($pos !== false) {
            /**
             * @psalm-suppress InvalidReturnStatement
             */
            return self::substr_replace(
                $subject,
                $replace,
                $pos,
                (int) self::strlen($search)
            );
        }

        return $subject;
    }

    /**
     * Replace the last "$search"-term with the "$replace"-term.
     *
     * @param string $search
     * @param string $replace
     * @param string $subject
     *
     * @psalm-pure
     *
     * @return string
     *
     * @psalm-suppress InvalidReturnType
     */
    public static function str_replace_last(
        string $search,
        string $replace,
        string $subject
    ): string {
        $pos = self::strrpos($subject, $search);
        if ($pos !== false) {
            /**
             * @psalm-suppress InvalidReturnStatement
             */
            return self::substr_replace(
                $subject,
                $replace,
                $pos,
                (int) self::strlen($search)
            );
        }

        return $subject;
    }

    /**
     * Shuffles all the characters in the string.
     *
     * INFO: uses random algorithm which is weak for cryptography purposes
     *
     * EXAMPLE: <code>UTF8::str_shuffle('fòô bàř fòô'); // 'àòôřb ffòô '</code>
     *
     * @param string $str      <p>The input string</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @return string
     *                <p>The shuffled string.</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function str_shuffle(string $str, string $encoding = 'UTF-8'): string
    {
        if ($encoding === 'UTF-8') {
            $indexes = \range(0, (int) \mb_strlen($str) - 1);
            \shuffle($indexes);

            // init
            $shuffled_str = '';

            foreach ($indexes as &$i) {
                $tmp_sub_str = \mb_substr($str, $i, 1);
                if ($tmp_sub_str !== false) { /* @phpstan-ignore-line | old polyfill will return false, or? */
                    $shuffled_str .= $tmp_sub_str;
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $indexes = \range(0, (int) self::strlen($str, $encoding) - 1);
            \shuffle($indexes);

            // init
            $shuffled_str = '';

            foreach ($indexes as &$i) {
                $tmp_sub_str = self::substr($str, $i, 1, $encoding);
                if ($tmp_sub_str !== false) {
                    $shuffled_str .= $tmp_sub_str;
                }
            }
        }

        return $shuffled_str;
    }

    /**
     * Returns the substring beginning at $start, and up to, but not including
     * the index specified by $end. If $end is omitted, the function extracts
     * the remaining string. If $end is negative, it is computed from the end
     * of the string.
     *
     * @param string   $str
     * @param int      $start    <p>Initial index from which to begin extraction.</p>
     * @param int|null $end      [optional] <p>Index at which to end extraction. Default: null</p>
     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The extracted substring.</p><p>If <i>str</i> is shorter than <i>start</i>
     *                      characters long, <b>FALSE</b> will be returned.
     */
    public static function str_slice(
        string $str,
        int $start,
        int $end = null,
        string $encoding = 'UTF-8'
    ) {
        if ($encoding === 'UTF-8') {
            if ($end === null) {
                $length = (int) \mb_strlen($str);
            } elseif ($end >= 0 && $end <= $start) {
                return '';
            } elseif ($end < 0) {
                $length = (int) \mb_strlen($str) + $end - $start;
            } else {
                $length = $end - $start;
            }

            return \mb_substr($str, $start, $length);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ($end === null) {
            $length = (int) self::strlen($str, $encoding);
        } elseif ($end >= 0 && $end <= $start) {
            return '';
        } elseif ($end < 0) {
            $length = (int) self::strlen($str, $encoding) + $end - $start;
        } else {
            $length = $end - $start;
        }

        return self::substr($str, $start, $length, $encoding);
    }

    /**
     * Convert a string to e.g.: "snake_case"
     *
     * @param string $str
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string in snake_case.</p>
     */
    public static function str_snakeize(string $str, string $encoding = 'UTF-8'): string
    {
        if ($str === '') {
            return '';
        }

        $str = \str_replace(
            '-',
            '_',
            self::normalize_whitespace($str)
        );

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        $str = (string) \preg_replace_callback(
            '/([\\p{N}|\\p{Lu}])/u',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                $match = $matches[1];
                $match_int = (int) $match;

                if ((string) $match_int === $match) {
                    return '_' . $match . '_';
                }

                if ($encoding === 'UTF-8') {
                    return '_' . \mb_strtolower($match);
                }

                return '_' . self::strtolower($match, $encoding);
            },
            $str
        );

        $str = (string) \preg_replace(
            [
                '/\\s+/u',        // convert spaces to "_"
                '/^\\s+|\\s+$/u', // trim leading & trailing spaces
                '/_+/',           // remove double "_"
            ],
            [
                '_',
                '',
                '_',
            ],
            $str
        );

        return \trim(\trim($str, '_')); // trim leading & trailing "_" + whitespace
    }

    /**
     * Sort all characters according to code points.
     *
     * EXAMPLE: <code>UTF8::str_sort('  -ABC-中文空白-  '); // '    ---ABC中文白空'</code>
     *
     * @param string $str    <p>A UTF-8 string.</p>
     * @param bool   $unique <p>Sort unique. If <strong>true</strong>, repeated characters are ignored.</p>
     * @param bool   $desc   <p>If <strong>true</strong>, will sort characters in reverse code point order.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string of sorted characters.</p>
     */
    public static function str_sort(string $str, bool $unique = false, bool $desc = false): string
    {
        /** @var int[] $array */
        $array = self::codepoints($str);

        if ($unique) {
            $array = \array_flip(\array_flip($array));
        }

        if ($desc) {
            \arsort($array);
        } else {
            \asort($array);
        }

        return self::string($array);
    }

    /**
     * Convert a string to an array of Unicode characters.
     *
     * EXAMPLE: <code>
     * UTF8::str_split_array(['中文空白', 'test'], 2); // [['中文', '空白'], ['te', 'st']]
     * </code>
     *
     * @param int[]|string[] $input                   <p>The string[] or int[] to split into array.</p>
     * @param int<1, max>    $length                  [optional] <p>Max character length of each array
     *                                                element.</p>
     * @param bool           $clean_utf8              [optional] <p>Remove non UTF-8 chars from the
     *                                                string.</p>
     * @param bool           $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
     *                                                "mb_substr"</p>
     *
     * @psalm-pure
     *
     * @return list<list<string>>
     *                            <p>An array containing chunks of the input.</p>
     */
    public static function str_split_array(
        array $input,
        int $length = 1,
        bool $clean_utf8 = false,
        bool $try_to_use_mb_functions = true
    ): array {
        foreach ($input as &$v) {
            $v = self::str_split(
                $v,
                $length,
                $clean_utf8,
                $try_to_use_mb_functions
            );
        }

        /** @var list<list<string>> $input */
        return $input;
    }

    /**
     * Convert a string to an array of unicode characters.
     *
     * EXAMPLE: <code>UTF8::str_split('中文空白'); // array('中', '文', '空', '白')</code>
     *
     * @param int|string  $str                     <p>The string or int to split into array.</p>
     * @param int<1, max> $length                  [optional] <p>Max character length of each array
     *                                            element.</p>
     * @param bool        $clean_utf8              [optional] <p>Remove non UTF-8 chars from the
     *                                            string.</p>
     * @param bool        $try_to_use_mb_functions [optional] <p>Set to false, if you don't want to use
     *                                            "mb_substr"</p>
     *
     * @psalm-pure
     *
     * @return list<string>
     *                      <p>An array containing chunks of chars from the input.</p>
     */
    public static function str_split(
        $str,
        int $length = 1,
        bool $clean_utf8 = false,
        bool $try_to_use_mb_functions = true
    ): array {
        /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
        if ($length <= 0) {
            return [];
        }

        // this is only an old fallback
        /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */
        /** @var int|int[]|string|string[] $str */
        $str = $str;
        if (\is_array($str)) {
            /** @psalm-suppress InvalidReturnStatement */
            /** @phpstan-ignore-next-line - old code :/ */
            return self::str_split_array(
                $str,
                $length,
                $clean_utf8,
                $try_to_use_mb_functions
            );
        }

        // init
        $str = (string) $str;

        if ($str === '') {
            return [];
        }

        if ($clean_utf8) {
            $str = self::clean($str);
        }

        if (
            $try_to_use_mb_functions
            &&
            self::$SUPPORT['mbstring'] === true
        ) {
            if (\function_exists('mb_str_split')) {
                try {
                    /**
                     * @psalm-suppress ImpureFunctionCall - why?
                     */
                    $return = \mb_str_split($str, $length);
                } catch (\Error $e) {
                    // PHP >= 8.0 : mb_str_split() will now throw ValueError on error. Previously, mb_str_split() returned false instead.
                    $return = false;
                }
                if ($return !== false) {
                    return $return;
                }
            }

            $i_max = \mb_strlen($str);
            if ($i_max <= 127) {
                $ret = [];
                for ($i = 0; $i < $i_max; ++$i) {
                    $ret[] = \mb_substr($str, $i, 1);
                }
            } else {
                $return_array = [];
                \preg_match_all('/./us', $str, $return_array);
                $ret = $return_array[0] ?? [];
            }
        } elseif (self::$SUPPORT['pcre_utf8'] === true) {
            $return_array = [];
            \preg_match_all('/./us', $str, $return_array);
            $ret = $return_array[0] ?? [];
        } else {

            // fallback

            $ret = [];
            $len = \strlen($str);

            for ($i = 0; $i < $len; ++$i) {
                if (($str[$i] & "\x80") === "\x00") {
                    $ret[] = $str[$i];
                } elseif (
                    isset($str[$i + 1])
                    &&
                    ($str[$i] & "\xE0") === "\xC0"
                ) {
                    if (($str[$i + 1] & "\xC0") === "\x80") {
                        $ret[] = $str[$i] . $str[$i + 1];

                        ++$i;
                    }
                } elseif (
                    isset($str[$i + 2])
                    &&
                    ($str[$i] & "\xF0") === "\xE0"
                ) {
                    if (
                        ($str[$i + 1] & "\xC0") === "\x80"
                        &&
                        ($str[$i + 2] & "\xC0") === "\x80"
                    ) {
                        $ret[] = $str[$i] . $str[$i + 1] . $str[$i + 2];

                        $i += 2;
                    }
                } elseif (
                    isset($str[$i + 3])
                    &&
                    ($str[$i] & "\xF8") === "\xF0"
                ) {
                    if (
                        ($str[$i + 1] & "\xC0") === "\x80"
                        &&
                        ($str[$i + 2] & "\xC0") === "\x80"
                        &&
                        ($str[$i + 3] & "\xC0") === "\x80"
                    ) {
                        $ret[] = $str[$i] . $str[$i + 1] . $str[$i + 2] . $str[$i + 3];

                        $i += 3;
                    }
                }
            }
        }

        if ($length > 1) {
            return \array_map(
                static function (array $item): string {
                    /* @phpstan-ignore-next-line | "array_map + array_chunk" is not supported by phpstan?! */
                    return \implode('', $item);
                },
                \array_chunk($ret, $length)
            );
        }

        if (isset($ret[0]) && $ret[0] === '') {
            return [];
        }

        return $ret;
    }

    /**
     * Splits the string with the provided regular expression, returning an
     * array of strings. An optional integer $limit will truncate the
     * results.
     *
     * @param string $str
     * @param string $pattern <p>The regex with which to split the string.</p>
     * @param int    $limit   [optional] <p>Maximum number of results to return. Default: -1 === no limit</p>
     *
     * @psalm-pure
     *
     * @return string[]
     *                  <p>An array of strings.</p>
     */
    public static function str_split_pattern(string $str, string $pattern, int $limit = -1): array
    {
        if ($limit === 0) {
            return [];
        }

        if ($pattern === '') {
            return [$str];
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($limit >= 0) {
                $result_tmp = \mb_split($pattern, $str);
                if ($result_tmp === false) {
                    return [];
                }

                $result = [];
                foreach ($result_tmp as $item_tmp) {
                    if ($limit === 0) {
                        break;
                    }
                    --$limit;

                    $result[] = $item_tmp;
                }

                return $result;
            }

            $result = \mb_split($pattern, $str);
            if ($result === false) {
                return [];
            }

            return $result;
        }

        if ($limit > 0) {
            ++$limit;
        } else {
            $limit = -1;
        }

        $array = \preg_split('/' . \preg_quote($pattern, '/') . '/u', $str, $limit);
        if ($array === false) {
            return [];
        }

        if ($limit > 0 && \count($array) === $limit) {
            \array_pop($array);
        }

        return $array;
    }

    /**
     * Check if the string starts with the given substring.
     *
     * EXAMPLE: <code>
     * UTF8::str_starts_with('ΚόσμεMiddleEnd', 'Κόσμε'); // true
     * UTF8::str_starts_with('ΚόσμεMiddleEnd', 'κόσμε'); // false
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function str_starts_with(string $haystack, string $needle): bool
    {
        if ($needle === '') {
            return true;
        }

        if ($haystack === '') {
            return false;
        }

        if (\PHP_VERSION_ID >= 80000) {
            /** @phpstan-ignore-next-line - only for PHP8 */
            return \str_starts_with($haystack, $needle);
        }

        return \strncmp($haystack, $needle, \strlen($needle)) === 0;
    }

    /**
     * Returns true if the string begins with any of $substrings, false otherwise.
     *
     * - case-sensitive
     *
     * @param string   $str        <p>The input string.</p>
     * @param scalar[] $substrings <p>Substrings to look for.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>Whether or not $str starts with $substring.</p>
     */
    public static function str_starts_with_any(string $str, array $substrings): bool
    {
        if ($str === '') {
            return false;
        }

        if ($substrings === []) {
            return false;
        }

        foreach ($substrings as &$substring) {
            if (self::str_starts_with($str, (string) $substring)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Gets the substring after the first occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_after_first_separator(string $str, string $separator, string $encoding = 'UTF-8'): string
    {
        if ($separator === '' || $str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $offset = \mb_strpos($str, $separator);
            if ($offset === false) {
                return '';
            }

            return (string) \mb_substr(
                $str,
                $offset + (int) \mb_strlen($separator)
            );
        }

        $offset = self::strpos($str, $separator, 0, $encoding);
        if ($offset === false) {
            return '';
        }

        return (string) \mb_substr(
            $str,
            $offset + (int) self::strlen($separator, $encoding),
            null,
            $encoding
        );
    }

    /**
     * Gets the substring after the last occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_after_last_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $offset = \mb_strrpos($str, $separator);
            if ($offset === false) {
                return '';
            }

            return (string) \mb_substr(
                $str,
                $offset + (int) \mb_strlen($separator)
            );
        }

        $offset = self::strrpos($str, $separator, 0, $encoding);
        if ($offset === false) {
            return '';
        }

        return (string) self::substr(
            $str,
            $offset + (int) self::strlen($separator, $encoding),
            null,
            $encoding
        );
    }

    /**
     * Gets the substring before the first occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_before_first_separator(
        string $str,
        string $separator,
        string $encoding = 'UTF-8'
    ): string {
        if ($separator === '' || $str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $offset = \mb_strpos($str, $separator);
            if ($offset === false) {
                return '';
            }

            return (string) \mb_substr(
                $str,
                0,
                $offset
            );
        }

        $offset = self::strpos($str, $separator, 0, $encoding);
        if ($offset === false) {
            return '';
        }

        return (string) self::substr(
            $str,
            0,
            $offset,
            $encoding
        );
    }

    /**
     * Gets the substring before the last occurrence of a separator.
     *
     * @param string $str       <p>The input string.</p>
     * @param string $separator <p>The string separator.</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_before_last_separator(string $str, string $separator, string $encoding = 'UTF-8'): string
    {
        if ($separator === '' || $str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            $offset = \mb_strrpos($str, $separator);
            if ($offset === false) {
                return '';
            }

            return (string) \mb_substr(
                $str,
                0,
                $offset
            );
        }

        $offset = self::strrpos($str, $separator, 0, $encoding);
        if ($offset === false) {
            return '';
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        return (string) self::substr(
            $str,
            0,
            $offset,
            $encoding
        );
    }

    /**
     * Gets the substring after (or before via "$before_needle") the first occurrence of the "$needle".
     *
     * @param string $str           <p>The input string.</p>
     * @param string $needle        <p>The string to look for.</p>
     * @param bool   $before_needle [optional] <p>Default: false</p>
     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_first(
        string $str,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '' || $needle === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            if ($before_needle) {
                $part = \mb_strstr(
                    $str,
                    $needle,
                    $before_needle
                );
            } else {
                $part = \mb_strstr(
                    $str,
                    $needle
                );
            }
        } else {
            $part = self::strstr(
                $str,
                $needle,
                $before_needle,
                $encoding
            );
        }

        return $part === false ? '' : $part;
    }

    /**
     * Gets the substring after (or before via "$before_needle") the last occurrence of the "$needle".
     *
     * @param string $str           <p>The input string.</p>
     * @param string $needle        <p>The string to look for.</p>
     * @param bool   $before_needle [optional] <p>Default: false</p>
     * @param string $encoding      [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function str_substr_last(
        string $str,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '' || $needle === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            if ($before_needle) {
                $part = \mb_strrchr(
                    $str,
                    $needle,
                    $before_needle
                );
            } else {
                $part = \mb_strrchr(
                    $str,
                    $needle
                );
            }
        } else {
            $part = self::strrchr(
                $str,
                $needle,
                $before_needle,
                $encoding
            );
        }

        return $part === false ? '' : $part;
    }

    /**
     * Surrounds $str with the given substring.
     *
     * @param string $str
     * @param string $substring <p>The substring to add to both sides.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with the substring both prepended and appended.</p>
     *
     * @template T as string
     * @template TSub as string
     * @phpstan-param T $str
     * @phpstan-param TSub $substring
     * @phpstan-return (T is non-empty-string ? non-empty-string : (TSub is non-empty-string ? non-empty-string : string))
     */
    public static function str_surround(string $str, string $substring): string
    {
        return $substring . $str . $substring;
    }

    /**
     * Returns a trimmed string with the first letter of each word capitalized.
     * Also accepts an array, $ignore, allowing you to list words not to be
     * capitalized.
     *
     * @param string        $str
     * @param string[]|null $ignore                        [optional] <p>An array of words not to capitalize or
     *                                                     null. Default: null</p>
     * @param string        $encoding                      [optional] <p>Default: 'UTF-8'</p>
     * @param bool          $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the
     *                                                     string.</p>
     * @param string|null   $lang                          [optional] <p>Set the language for special cases: az,
     *                                                     el, lt, tr</p>
     * @param bool          $try_to_keep_the_string_length [optional] <p>true === try to keep the string length:
     *                                                     e.g. ẞ -> ß</p>
     * @param bool          $use_trim_first                [optional] <p>true === trim the input string,
     *                                                     first</p>
     * @param string|null   $word_define_chars             [optional] <p>An string of chars that will be used as
     *                                                     whitespace separator === words.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The titleized string.</p>
     */
    public static function str_titleize(
        string $str,
        array $ignore = null,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false,
        bool $use_trim_first = true,
        string $word_define_chars = null
    ): string {
        if ($str === '') {
            return '';
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($use_trim_first) {
            $str = \trim($str);
        }

        if ($clean_utf8) {
            $str = self::clean($str);
        }

        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;

        if ($word_define_chars) {
            $word_define_chars = \preg_quote($word_define_chars, '/');
        } else {
            $word_define_chars = '';
        }

        $str = (string) \preg_replace_callback(
            '/([^\\s' . $word_define_chars . ']+)/u',
            static function (array $match) use ($try_to_keep_the_string_length, $lang, $ignore, $use_mb_functions, $encoding): string {
                if ($ignore !== null && \in_array($match[0], $ignore, true)) {
                    return $match[0];
                }

                if ($use_mb_functions) {
                    if ($encoding === 'UTF-8') {
                        return \mb_strtoupper(\mb_substr($match[0], 0, 1))
                               . \mb_strtolower(\mb_substr($match[0], 1));
                    }

                    return \mb_strtoupper(\mb_substr($match[0], 0, 1, $encoding), $encoding)
                           . \mb_strtolower(\mb_substr($match[0], 1, null, $encoding), $encoding);
                }

                return self::ucfirst(
                    self::strtolower(
                        $match[0],
                        $encoding,
                        false,
                        $lang,
                        $try_to_keep_the_string_length
                    ),
                    $encoding,
                    false,
                    $lang,
                    $try_to_keep_the_string_length
                );
            },
            $str
        );

        return $str;
    }

    /**
     * Convert a string into a obfuscate string.
     *
     * EXAMPLE: <code>
     *
     * UTF8::str_obfuscate('lars@moelleken.org', 0.5, '*', ['@', '.']); // e.g. "l***@m**lleke*.*r*"
     * </code>
     *
     * @param string   $str
     * @param float    $percent
     * @param string   $obfuscateChar
     * @param string[] $keepChars
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The obfuscate string.</p>
     */
    public static function str_obfuscate(
        string $str,
        float $percent = 0.5,
        string $obfuscateChar = '*',
        array $keepChars = []
    ): string {
        $obfuscateCharHelper = "\u{2603}";
        $str = \str_replace($obfuscateChar, $obfuscateCharHelper, $str);

        $chars = self::chars($str);
        $charsMax = \count($chars);
        $charsMaxChange = \round($charsMax * $percent);
        $charsCounter = 0;
        $charKeyDone = [];

        while ($charsCounter < $charsMaxChange) {
            foreach ($chars as $charKey => $char) {
                if (isset($charKeyDone[$charKey])) {
                    continue;
                }

                if (\random_int(0, 100) > 50) {
                    continue;
                }

                if ($char === $obfuscateChar) {
                    continue;
                }

                ++$charsCounter;
                $charKeyDone[$charKey] = true;

                if ($charsCounter > $charsMaxChange) {
                    break;
                }

                if (\in_array($char, $keepChars, true)) {
                    continue;
                }

                $chars[$charKey] = $obfuscateChar;
            }
        }

        $str = \implode('', $chars);

        return \str_replace($obfuscateCharHelper, $obfuscateChar, $str);
    }

    /**
     * Returns a trimmed string in proper title case.
     *
     * Also accepts an array, $ignore, allowing you to list words not to be
     * capitalized.
     *
     * Adapted from John Gruber's script.
     *
     * @see https://gist.github.com/gruber/9f9e8650d68b13ce4d78
     *
     * @param string   $str
     * @param string[] $ignore   <p>An array of words not to capitalize.</p>
     * @param string   $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The titleized string.</p>
     */
    public static function str_titleize_for_humans(
        string $str,
        array $ignore = [],
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '') {
            return '';
        }

        $small_words = [
            '(?<!q&)a',
            'an',
            'and',
            'as',
            'at(?!&t)',
            'but',
            'by',
            'en',
            'for',
            'if',
            'in',
            'of',
            'on',
            'or',
            'the',
            'to',
            'v[.]?',
            'via',
            'vs[.]?',
        ];

        if ($ignore !== []) {
            $small_words = \array_merge($small_words, $ignore);
        }

        $small_words_rx = \implode('|', $small_words);
        $apostrophe_rx = '(?x: [\'’] [[:lower:]]* )?';

        $str = \trim($str);

        if (!self::has_lowercase($str)) {
            $str = self::strtolower($str, $encoding);
        }

        // the main substitutions
        $str = (string) \preg_replace_callback(
            '~\\b (_*) (?:                                                                  # 1. Leading underscore and
                        ( (?<=[ ][/\\\\]) [[:alpha:]]+ [-_[:alpha:]/\\\\]+ |                # 2. file path or
                          [-_[:alpha:]]+ [@.:] [-_[:alpha:]@.:/]+ ' . $apostrophe_rx . ' )  #    URL, domain, or email
                        |                                                                   #
                        ( (?i: ' . $small_words_rx . ' ) ' . $apostrophe_rx . ' )           # 3. or small word (case-insensitive)
                        |                                                                   #
                        ( [[:alpha:]] [[:lower:]\'’()\[\]{}]* ' . $apostrophe_rx . ' )      # 4. or word w/o internal caps
                        |                                                                   #
                        ( [[:alpha:]] [[:alpha:]\'’()\[\]{}]* ' . $apostrophe_rx . ' )      # 5. or some other word
                      ) (_*) \\b                                                            # 6. With trailing underscore
                    ~ux',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                // preserve leading underscore
                $str = $matches[1];
                if ($matches[2]) {
                    // preserve URLs, domains, emails and file paths
                    $str .= $matches[2];
                } elseif ($matches[3]) {
                    // lower-case small words
                    $str .= self::strtolower($matches[3], $encoding);
                } elseif ($matches[4]) {
                    // capitalize word w/o internal caps
                    $str .= static::ucfirst($matches[4], $encoding);
                } else {
                    // preserve other kinds of word (iPhone)
                    $str .= $matches[5];
                }
                // preserve trailing underscore
                $str .= $matches[6];

                return $str;
            },
            $str
        );

        // Exceptions for small words: capitalize at start of title...
        $str = (string) \preg_replace_callback(
            '~(  \\A [[:punct:]]*            # start of title...
                      |  [:.;?!][ ]+                # or of subsentence...
                      |  [ ][\'"“‘(\[][ ]* )        # or of inserted subphrase...
                      ( ' . $small_words_rx . ' ) \\b # ...followed by small word
                     ~uxi',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                return $matches[1] . static::ucfirst($matches[2], $encoding);
            },
            $str
        );

        // ...and end of title
        $str = (string) \preg_replace_callback(
            '~\\b ( ' . $small_words_rx . ' ) # small word...
                      (?= [[:punct:]]* \Z          # ...at the end of the title...
                      |   [\'"’”)\]] [ ] )         # ...or of an inserted subphrase?
                     ~uxi',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                return static::ucfirst($matches[1], $encoding);
            },
            $str
        );

        // Exceptions for small words in hyphenated compound words.
        // e.g. "in-flight" -> In-Flight
        $str = (string) \preg_replace_callback(
            '~\\b
                        (?<! -)                   # Negative lookbehind for a hyphen; we do not want to match man-in-the-middle but do want (in-flight)
                        ( ' . $small_words_rx . ' )
                        (?= -[[:alpha:]]+)        # lookahead for "-someword"
                       ~uxi',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                return static::ucfirst($matches[1], $encoding);
            },
            $str
        );

        // e.g. "Stand-in" -> "Stand-In" (Stand is already capped at this point)
        $str = (string) \preg_replace_callback(
            '~\\b
                      (?<!…)                    # Negative lookbehind for a hyphen; we do not want to match man-in-the-middle but do want (stand-in)
                      ( [[:alpha:]]+- )         # $1 = first word and hyphen, should already be properly capped
                      ( ' . $small_words_rx . ' ) # ...followed by small word
                      (?!	- )                 # Negative lookahead for another -
                     ~uxi',
            /**
             * @param string[] $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches) use ($encoding): string {
                return $matches[1] . static::ucfirst($matches[2], $encoding);
            },
            $str
        );

        return $str;
    }

    /**
     * Get a binary representation of a specific string.
     *
     * EXAPLE: <code>UTF8::str_to_binary('😃'); // '11110000100111111001100010000011'</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>false on error</p>
     */
    public static function str_to_binary(string $str)
    {
        $value = \unpack('H*', $str);
        if ($value === false) {
            return false;
        }

        return \base_convert($value[1], 16, 2);
    }

    /**
     * @param string   $str
     * @param bool     $remove_empty_values <p>Remove empty values.</p>
     * @param int|null $remove_short_values <p>The min. string length or null to disable</p>
     *
     * @psalm-pure
     *
     * @return string[]
     */
    public static function str_to_lines(string $str, bool $remove_empty_values = false, int $remove_short_values = null): array
    {
        if ($str === '') {
            return $remove_empty_values ? [] : [''];
        }

        if (self::$SUPPORT['mbstring'] === true) {
            $return = \mb_split("[\r\n]{1,2}", $str);
        } else {
            $return = \preg_split("/[\r\n]{1,2}/u", $str);
        }

        if ($return === false) {
            return $remove_empty_values ? [] : [''];
        }

        if (
            $remove_short_values === null
            &&
            !$remove_empty_values
        ) {
            return $return;
        }

        return self::reduce_string_array(
            $return,
            $remove_empty_values,
            $remove_short_values
        );
    }

    /**
     * Convert a string into an array of words.
     *
     * EXAMPLE: <code>UTF8::str_to_words('中文空白 oöäü#s', '#') // array('', '中文空白', ' ', 'oöäü#s', '')</code>
     *
     * @param string   $str
     * @param string   $char_list           <p>Additional chars for the definition of "words".</p>
     * @param bool     $remove_empty_values <p>Remove empty values.</p>
     * @param int|null $remove_short_values <p>The min. string length or null to disable</p>
     *
     * @psalm-pure
     *
     * @return list<string>
     *
     * @phpstan-return ($remove_empty_values is true ? list<string> : non-empty-list<string>)
     */
    public static function str_to_words(
        string $str,
        string $char_list = '',
        bool $remove_empty_values = false,
        int $remove_short_values = null
    ): array {
        if ($str === '') {
            return $remove_empty_values ? [] : [''];
        }

        $char_list = self::rxClass($char_list, '\pL');

        $return = \preg_split("/({$char_list}+(?:[\p{Pd}’']{$char_list}+)*)/u", $str, -1, \PREG_SPLIT_DELIM_CAPTURE);
        if ($return === false) {
            return $remove_empty_values ? [] : [''];
        }

        if (
            $remove_short_values === null
            &&
            !$remove_empty_values
        ) {
            return $return;
        }

        $tmp_return = self::reduce_string_array(
            $return,
            $remove_empty_values,
            $remove_short_values
        );

        foreach ($tmp_return as &$item) {
            $item = (string) $item;
        }

        return $tmp_return;
    }

    /**
     * Truncates the string to a given length. If $substring is provided, and
     * truncating occurs, the string is further truncated so that the substring
     * may be appended without exceeding the desired length.
     *
     * @param string $str
     * @param int    $length    <p>Desired length of the truncated string.</p>
     * @param string $substring [optional] <p>The substring to append if it can fit. Default: ''</p>
     * @param string $encoding  [optional] <p>Default: 'UTF-8'</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string after truncating.</p>
     */
    public static function str_truncate(
        string $str,
        int $length,
        string $substring = '',
        string $encoding = 'UTF-8'
    ): string {
        if ($str === '') {
            return '';
        }

        if ($encoding === 'UTF-8') {
            if ($length >= (int) \mb_strlen($str)) {
                return $str;
            }

            if ($substring !== '') {
                $length -= (int) \mb_strlen($substring);

                /** @noinspection UnnecessaryCastingInspection */
                return (string) \mb_substr($str, 0, $length) . $substring;
            }

            return (string) \mb_substr($str, 0, $length);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ($length >= (int) self::strlen($str, $encoding)) {
            return $str;
        }

        if ($substring !== '') {
            $length -= (int) self::strlen($substring, $encoding);
        }

        return (
               (string) self::substr(
                   $str,
                   0,
                   $length,
                   $encoding
               )
               ) . $substring;
    }

    /**
     * Truncates the string to a given length, while ensuring that it does not
     * split words. If $substring is provided, and truncating occurs, the
     * string is further truncated so that the substring may be appended without
     * exceeding the desired length.
     *
     * @param string $str
     * @param int    $length                                 <p>Desired length of the truncated string.</p>
     * @param string $substring                              [optional] <p>The substring to append if it can fit.
     *                                                       Default:
     *                                                       ''</p>
     * @param string $encoding                               [optional] <p>Default: 'UTF-8'</p>
     * @param bool   $ignore_do_not_split_words_for_one_word [optional] <p>Default: false</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string after truncating.</p>
     */
    public static function str_truncate_safe(
        string $str,
        int $length,
        string $substring = '',
        string $encoding = 'UTF-8',
        bool $ignore_do_not_split_words_for_one_word = false
    ): string {
        if ($str === '' || $length <= 0) {
            return $substring;
        }

        if ($encoding === 'UTF-8') {
            if ($length >= (int) \mb_strlen($str)) {
                return $str;
            }

            // need to further trim the string so we can append the substring
            $length -= (int) \mb_strlen($substring);
            if ($length <= 0) {
                return $substring;
            }

            /** @var false|string $truncated - needed for PhpStan (stubs error) */
            $truncated = \mb_substr($str, 0, $length);
            if ($truncated === false) {
                return '';
            }

            // if the last word was truncated
            $space_position = \mb_strpos($str, ' ', $length - 1);
            if ($space_position !== $length) {
                // find pos of the last occurrence of a space, get up to that
                $last_position = \mb_strrpos($truncated, ' ', 0);

                if (
                    $last_position !== false
                    ||
                    (
                        $space_position !== false
                        &&
                        !$ignore_do_not_split_words_for_one_word
                    )
                ) {
                    $truncated = (string) \mb_substr($truncated, 0, (int) $last_position);
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            if ($length >= (int) self::strlen($str, $encoding)) {
                return $str;
            }

            // need to further trim the string so we can append the substring
            $length -= (int) self::strlen($substring, $encoding);
            if ($length <= 0) {
                return $substring;
            }

            $truncated = self::substr($str, 0, $length, $encoding);

            if ($truncated === false) {
                return '';
            }

            // if the last word was truncated
            $space_position = self::strpos($str, ' ', $length - 1, $encoding);
            if ($space_position !== $length) {
                // find pos of the last occurrence of a space, get up to that
                $last_position = self::strrpos($truncated, ' ', 0, $encoding);

                if (
                    $last_position !== false
                    ||
                    (
                        $space_position !== false
                        &&
                        !$ignore_do_not_split_words_for_one_word
                    )
                ) {
                    $truncated = (string) self::substr($truncated, 0, (int) $last_position, $encoding);
                }
            }
        }

        return $truncated . $substring;
    }

    /**
     * Returns a lowercase and trimmed string separated by underscores.
     * Underscores are inserted before uppercase characters (with the exception
     * of the first character of the string), and in place of spaces as well as
     * dashes.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The underscored string.</p>
     */
    public static function str_underscored(string $str): string
    {
        return self::str_delimit($str, '_');
    }

    /**
     * Returns an UpperCamelCase version of the supplied string. It trims
     * surrounding spaces, capitalizes letters following digits, spaces, dashes
     * and underscores, and removes spaces, dashes, underscores.
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string      $encoding                      [optional] <p>Default: 'UTF-8'</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string in UpperCamelCase.</p>
     */
    public static function str_upper_camelize(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        return self::ucfirst(self::str_camelize($str, $encoding), $encoding, $clean_utf8, $lang, $try_to_keep_the_string_length);
    }

    /**
     * Get the number of words in a specific string.
     *
     * EXAMPLES: <code>
     * // format: 0 -> return only word count (int)
     * //
     * UTF8::str_word_count('中文空白 öäü abc#c'); // 4
     * UTF8::str_word_count('中文空白 öäü abc#c', 0, '#'); // 3
     *
     * // format: 1 -> return words (array)
     * //
     * UTF8::str_word_count('中文空白 öäü abc#c', 1); // array('中文空白', 'öäü', 'abc', 'c')
     * UTF8::str_word_count('中文空白 öäü abc#c', 1, '#'); // array('中文空白', 'öäü', 'abc#c')
     *
     * // format: 2 -> return words with offset (array)
     * //
     * UTF8::str_word_count('中文空白 öäü ab#c', 2); // array(0 => '中文空白', 5 => 'öäü', 9 => 'abc', 13 => 'c')
     * UTF8::str_word_count('中文空白 öäü ab#c', 2, '#'); // array(0 => '中文空白', 5 => 'öäü', 9 => 'abc#c')
     * </code>
     *
     * @param string $str       <p>The input string.</p>
     * @param int    $format    [optional] <p>
     *                          <strong>0</strong> => return a number of words (default)<br>
     *                          <strong>1</strong> => return an array of words<br>
     *                          <strong>2</strong> => return an array of words with word-offset as key
     *                          </p>
     * @param string $char_list [optional] <p>Additional chars that contains to words and do not start a new word.</p>
     *
     * @psalm-pure
     *
     * @return int|string[]
     *                      <p>The number of words in the string.</p>
     *
     * @phpstan-param 0|1|2 $format
     * @phpstan-return ($format is 2 ? array<int, string> : ($format is 1 ? list<string> : 0|positive-int))
     */
    public static function str_word_count(string $str, int $format = 0, string $char_list = '')
    {
        $str_parts = self::str_to_words($str, $char_list);

        $len = \count($str_parts);

        if ($format === 1) {
            $number_of_words = [];
            for ($i = 1; $i < $len; $i += 2) {
                $number_of_words[] = $str_parts[$i];
            }

            return $number_of_words;
        }

        if ($format === 2) {
            $number_of_words = [];
            $offset = (int) self::strlen($str_parts[0]);
            for ($i = 1; $i < $len; $i += 2) {
                $number_of_words[$offset] = $str_parts[$i];
                $offset += (int) self::strlen($str_parts[$i]) + (int) self::strlen($str_parts[$i + 1]);
            }

            return $number_of_words;
        }

        $number_of_words = (int) (($len - 1) / 2);

        /* @phpstan-ignore-next-line | it should be 0|positive-int, maybe nested "phpstan-return" is not working? */
        return $number_of_words;
    }

    /**
     * Case-insensitive string comparison.
     *
     * INFO: Case-insensitive version of UTF8::strcmp()
     *
     * EXAMPLE: <code>UTF8::strcasecmp("iñtërnâtiôn\nàlizætiøn", "Iñtërnâtiôn\nàlizætiøn"); // 0</code>
     *
     * @param string $str1     <p>The first string.</p>
     * @param string $str2     <p>The second string.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
     *             <strong>&gt; 0</strong> if str1 is greater than str2,<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strcasecmp(
        string $str1,
        string $str2,
        string $encoding = 'UTF-8'
    ): int {
        return self::strcmp(
            self::strtocasefold(
                $str1,
                true,
                false,
                $encoding,
                null,
                false
            ),
            self::strtocasefold(
                $str2,
                true,
                false,
                $encoding,
                null,
                false
            )
        );
    }

    /**
     * Case-sensitive string comparison.
     *
     * EXAMPLE: <code>UTF8::strcmp("iñtërnâtiôn\nàlizætiøn", "iñtërnâtiôn\nàlizætiøn"); // 0</code>
     *
     * @param string $str1 <p>The first string.</p>
     * @param string $str2 <p>The second string.</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if str1 is less than str2<br>
     *             <strong>&gt; 0</strong> if str1 is greater than str2<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strcmp(string $str1, string $str2): int
    {
        if ($str1 === $str2) {
            return 0;
        }

        return \strcmp(
            \Normalizer::normalize($str1, \Normalizer::NFD),
            \Normalizer::normalize($str2, \Normalizer::NFD)
        );
    }

    /**
     * Find length of initial segment not matching mask.
     *
     * @param string   $str
     * @param string   $char_list
     * @param int      $offset
     * @param int|null $length
     * @param string   $encoding  [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *
     * @phpstan-return 0|positive-int
     */
    public static function strcspn(
        string $str,
        string $char_list,
        int $offset = 0,
        int $length = null,
        string $encoding = 'UTF-8'
    ): int {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($char_list === '') {
            return (int) self::strlen($str, $encoding);
        }

        if ($offset || $length !== null) {
            if ($encoding === 'UTF-8') {
                if ($length === null) {
                    $str_tmp = \mb_substr($str, $offset);
                } else {
                    $str_tmp = \mb_substr($str, $offset, $length);
                }
            } else {
                $str_tmp = self::substr($str, $offset, $length, $encoding);
            }

            if ($str_tmp === false) {
                return 0;
            }

            $str = $str_tmp;
        }

        if ($str === '') {
            return 0;
        }

        $matches = [];
        if (\preg_match('/^(.*?)' . self::rxClass($char_list) . '/us', $str, $matches)) {
            $return = self::strlen($matches[1], $encoding);
            if ($return === false) {
                return 0;
            }

            return $return;
        }

        return (int) self::strlen($str, $encoding);
    }

    /**
     * Create a UTF-8 string from code points.
     *
     * INFO: opposite to UTF8::codepoints()
     *
     * EXAMPLE: <code>UTF8::string(array(246, 228, 252)); // 'öäü'</code>
     *
     * @param int|int[]|string|string[] $intOrHex <p>Integer or Hexadecimal codepoints.</p>
     *
     * @phpstan-param int[]|numeric-string[]|int|numeric-string $intOrHex
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A UTF-8 encoded string.</p>
     */
    public static function string($intOrHex): string
    {
        if ($intOrHex === []) {
            return '';
        }

        if (!\is_array($intOrHex)) {
            $intOrHex = [$intOrHex];
        }

        $str = '';
        foreach ($intOrHex as $strPart) {
            $str .= '&#' . (int) $strPart . ';';
        }

        // We cannot use html_entity_decode() here, as it will not return
        // characters for many values < 160.
        return mb_convert_encoding($str, 'UTF-8', 'HTML-ENTITIES');
    }

    /**
     * Checks if string starts with "BOM" (Byte Order Mark Character) character.
     *
     * EXAMPLE: <code>UTF8::string_has_bom("\xef\xbb\xbf foobar"); // true</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return bool
     *              <p>
     *              <strong>true</strong> if the string has BOM at the start,<br>
     *              <strong>false</strong> otherwise
     *              </p>
     */
    public static function string_has_bom(string $str): bool
    {
        foreach (self::$BOM as $bom_string => &$bom_byte_length) {
            if (\strncmp($str, $bom_string, $bom_byte_length) === 0) {
                return true;
            }
        }

        return false;
    }

    /**
     * Strip HTML and PHP tags from a string + clean invalid UTF-8.
     *
     * EXAMPLE: <code>UTF8::strip_tags("<span>κόσμε\xa0\xa1</span>"); // 'κόσμε'</code>
     *
     * @see http://php.net/manual/en/function.strip-tags.php
     *
     * @param string      $str            <p>
     *                                    The input string.
     *                                    </p>
     * @param string|null $allowable_tags [optional] <p>
     *                                    You can use the optional second parameter to specify tags which should
     *                                    not be stripped.
     *                                    </p>
     *                                    <p>
     *                                    HTML comments and PHP tags are also stripped. This is hardcoded and
     *                                    can not be changed with allowable_tags.
     *                                    </p>
     * @param bool        $clean_utf8     [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The stripped string.</p>
     */
    public static function strip_tags(
        string $str,
        string $allowable_tags = null,
        bool $clean_utf8 = false
    ): string {
        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            $str = self::clean($str);
        }

        if ($allowable_tags === null) {
            return \strip_tags($str);
        }

        return \strip_tags($str, $allowable_tags);
    }

    /**
     * Strip all whitespace characters. This includes tabs and newline
     * characters, as well as multibyte whitespace such as the thin space
     * and ideographic space.
     *
     * EXAMPLE: <code>UTF8::strip_whitespace('   Ο     συγγραφέας  '); // 'Οσυγγραφέας'</code>
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function strip_whitespace(string $str): string
    {
        if ($str === '') {
            return '';
        }

        return (string) \preg_replace('/[[:space:]]+/u', '', $str);
    }

    /**
     * Find the position of the first occurrence of a substring in a string, case-insensitive.
     *
     * INFO: use UTF8::stripos_in_byte() for the byte-length
     *
     * EXAMPLE: <code>UTF8::stripos('aσσb', 'ΣΣ'); // 1</code> (σσ == ΣΣ)
     *
     * @see http://php.net/manual/en/function.mb-stripos.php
     *
     * @param string $haystack   <p>The string from which to get the position of the first occurrence of needle.</p>
     * @param string $needle     <p>The string to find in haystack.</p>
     * @param int    $offset     [optional] <p>The position in haystack to start searching.</p>
     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   Return the <strong>(int)</strong> numeric position of the first occurrence of needle in the
     *                   haystack string,<br> or <strong>false</strong> if needle is not found
     *
     * @phpstan-return false|0|positive-int
     */
    public static function stripos(
        string $haystack,
        string $needle,
        int $offset = 0,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return 0;
            }

            return false;
        }

        if ($needle === '' && \PHP_VERSION_ID < 80000) {
            return false;
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $haystack = self::clean($haystack);
            $needle = self::clean($needle);
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_stripos($haystack, $needle, $offset);
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return \mb_stripos($haystack, $needle, $offset, $encoding);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_stripos()" can't handle other encodings
            &&
            $offset >= 0 // grapheme_stripos() can't handle negative offset
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_stripos($haystack, $needle, $offset);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($haystack . $needle)) {
            return \stripos($haystack, $needle, $offset);
        }

        //
        // fallback via vanilla php
        //

        $haystack = self::strtocasefold($haystack, true, false, $encoding, null, false);
        $needle = self::strtocasefold($needle, true, false, $encoding, null, false);

        return self::strpos($haystack, $needle, $offset, $encoding);
    }

    /**
     * Returns all of haystack starting from and including the first occurrence of needle to the end.
     *
     * EXAMPLE: <code>
     * $str = 'iñtërnâtiônàlizætiøn';
     * $search = 'NÂT';
     *
     * UTF8::stristr($str, $search)); // 'nâtiônàlizætiøn'
     * UTF8::stristr($str, $search, true)); // 'iñtër'
     * </code>
     *
     * @param string $haystack      <p>The input string. Must be valid UTF-8.</p>
     * @param string $needle        <p>The string to look for. Must be valid UTF-8.</p>
     * @param bool   $before_needle [optional] <p>
     *                              If <b>TRUE</b>, it returns the part of the
     *                              haystack before the first occurrence of the needle (excluding the needle).
     *                              </p>
     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>A sub-string,<br>or <strong>false</strong> if needle is not found.</p>
     */
    public static function stristr(
        string $haystack,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return '';
            }

            return false;
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($needle === '') {
            if (\PHP_VERSION_ID >= 80000) {
                return $haystack;
            }

            return false;
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_stristr($haystack, $needle, $before_needle);
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return \mb_stristr($haystack, $needle, $before_needle, $encoding);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::stristr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_stristr()" can't handle other encodings
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_stristr($haystack, $needle, $before_needle);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        if (ASCII::is_ascii($needle . $haystack)) {
            return \stristr($haystack, $needle, $before_needle);
        }

        \preg_match('/^(.*?)' . \preg_quote($needle, '/') . '/usi', $haystack, $match);

        if (!isset($match[1])) {
            return false;
        }

        if ($before_needle) {
            return $match[1];
        }

        return self::substr($haystack, (int) self::strlen($match[1], $encoding), null, $encoding);
    }

    /**
     * Get the string length, not the byte-length!
     *
     * INFO: use UTF8::strwidth() for the char-length
     *
     * EXAMPLE: <code>UTF8::strlen("Iñtërnâtiôn\xE9àlizætiøn")); // 20</code>
     *
     * @see http://php.net/manual/en/function.mb-strlen.php
     *
     * @param string $str        <p>The string being checked for length.</p>
     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>
     *                   The number <strong>(int)</strong> of characters in the string $str having character encoding
     *                   $encoding.
     *                   (One multi-byte character counted as +1).
     *                   <br>
     *                   Can return <strong>false</strong>, if e.g. mbstring is not installed and we process invalid
     *                   chars.
     *                   </p>
     *
     * @phpstan-return false|0|positive-int
     */
    public static function strlen(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($str === '') {
            return 0;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($clean_utf8) {
            // "mb_strlen" and "\iconv_strlen" returns wrong length,
            // if invalid characters are found in $str
            $str = self::clean($str);
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore warnings, it's working anyway */
                return @\mb_strlen($str);
            }

            /** @noinspection PhpUsageOfSilenceOperatorInspection - ignore warnings, it's working anyway */
            return @\mb_strlen($str, $encoding);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            return \strlen($str);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
            &&
            self::$SUPPORT['iconv'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strlen() without mbstring / iconv cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via iconv
        //

        if (self::$SUPPORT['iconv'] === true) {
            $return_tmp = \iconv_strlen($str, $encoding);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback via intl
        //

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_strlen()" can't handle other encodings
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_strlen($str);
            /* @phpstan-ignore-next-line | "grapheme_strlen" will maybe return "null" for empty-strings and "false" on error */
            if ($return_tmp !== false && $return_tmp !== null) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($str)) {
            return \strlen($str);
        }

        //
        // fallback via vanilla php
        //

        \preg_match_all('/./us', $str, $parts);

        $return_tmp = \count($parts[0]);
        if ($return_tmp === 0) {
            return false;
        }

        return $return_tmp;
    }

    /**
     * Get string length in byte.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return int
     *
     * @phpstan-return 0|positive-int
     */
    public static function strlen_in_byte(string $str): int
    {
        if ($str === '') {
            return 0;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_strlen($str, 'CP850'); // 8-BIT
        }

        return \strlen($str);
    }

    /**
     * Case-insensitive string comparisons using a "natural order" algorithm.
     *
     * INFO: natural order version of UTF8::strcasecmp()
     *
     * EXAMPLES: <code>
     * UTF8::strnatcasecmp('2', '10Hello WORLD 中文空白!'); // -1
     * UTF8::strcasecmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // 1
     *
     * UTF8::strnatcasecmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // 1
     * UTF8::strcasecmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // -1
     * </code>
     *
     * @param string $str1     <p>The first string.</p>
     * @param string $str2     <p>The second string.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if str1 is less than str2<br>
     *             <strong>&gt; 0</strong> if str1 is greater than str2<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strnatcasecmp(string $str1, string $str2, string $encoding = 'UTF-8'): int
    {
        return self::strnatcmp(
            self::strtocasefold($str1, true, false, $encoding, null, false),
            self::strtocasefold($str2, true, false, $encoding, null, false)
        );
    }

    /**
     * String comparisons using a "natural order" algorithm
     *
     * INFO: natural order version of UTF8::strcmp()
     *
     * EXAMPLES: <code>
     * UTF8::strnatcmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // -1
     * UTF8::strcmp('2Hello world 中文空白!', '10Hello WORLD 中文空白!'); // 1
     *
     * UTF8::strnatcmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // 1
     * UTF8::strcmp('10Hello world 中文空白!', '2Hello WORLD 中文空白!'); // -1
     * </code>
     *
     * @see http://php.net/manual/en/function.strnatcmp.php
     *
     * @param string $str1 <p>The first string.</p>
     * @param string $str2 <p>The second string.</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
     *             <strong>&gt; 0</strong> if str1 is greater than str2;<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strnatcmp(string $str1, string $str2): int
    {
        if ($str1 === $str2) {
            return 0;
        }

        return \strnatcmp(
            (string) self::strtonatfold($str1),
            (string) self::strtonatfold($str2)
        );
    }

    /**
     * Case-insensitive string comparison of the first n characters.
     *
     * EXAMPLE: <code>
     * UTF8::strcasecmp("iñtërnâtiôn\nàlizætiøn321", "iñtërnâtiôn\nàlizætiøn123", 5); // 0
     * </code>
     *
     * @see http://php.net/manual/en/function.strncasecmp.php
     *
     * @param string $str1     <p>The first string.</p>
     * @param string $str2     <p>The second string.</p>
     * @param int    $len      <p>The length of strings to be used in the comparison.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if <i>str1</i> is less than <i>str2</i>;<br>
     *             <strong>&gt; 0</strong> if <i>str1</i> is greater than <i>str2</i>;<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strncasecmp(
        string $str1,
        string $str2,
        int $len,
        string $encoding = 'UTF-8'
    ): int {
        return self::strncmp(
            self::strtocasefold($str1, true, false, $encoding, null, false),
            self::strtocasefold($str2, true, false, $encoding, null, false),
            $len
        );
    }

    /**
     * String comparison of the first n characters.
     *
     * EXAMPLE: <code>
     * UTF8::strncmp("Iñtërnâtiôn\nàlizætiøn321", "Iñtërnâtiôn\nàlizætiøn123", 5); // 0
     * </code>
     *
     * @see http://php.net/manual/en/function.strncmp.php
     *
     * @param string $str1     <p>The first string.</p>
     * @param string $str2     <p>The second string.</p>
     * @param int    $len      <p>Number of characters to use in the comparison.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if <i>str1</i> is less than <i>str2</i>;<br>
     *             <strong>&gt; 0</strong> if <i>str1</i> is greater than <i>str2</i>;<br>
     *             <strong>0</strong> if they are equal
     */
    public static function strncmp(
        string $str1,
        string $str2,
        int $len,
        string $encoding = 'UTF-8'
    ): int {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($encoding === 'UTF-8') {
            $str1 = (string) \mb_substr($str1, 0, $len);
            $str2 = (string) \mb_substr($str2, 0, $len);
        } else {
            $str1 = (string) self::substr($str1, 0, $len, $encoding);
            $str2 = (string) self::substr($str2, 0, $len, $encoding);
        }

        return self::strcmp($str1, $str2);
    }

    /**
     * Search a string for any of a set of characters.
     *
     * EXAMPLE: <code>UTF8::strpbrk('-中文空白-', '白'); // '白-'</code>
     *
     * @see http://php.net/manual/en/function.strpbrk.php
     *
     * @param string $haystack  <p>The string where char_list is looked for.</p>
     * @param string $char_list <p>This parameter is case-sensitive.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The string starting from the character found, or false if it is not found.</p>
     */
    public static function strpbrk(string $haystack, string $char_list)
    {
        if ($haystack === '' || $char_list === '') {
            return false;
        }

        if (\preg_match('/' . self::rxClass($char_list) . '/us', $haystack, $m)) {
            return \substr($haystack, (int) \strpos($haystack, $m[0]));
        }

        return false;
    }

    /**
     * Find the position of the first occurrence of a substring in a string.
     *
     * INFO: use UTF8::strpos_in_byte() for the byte-length
     *
     * EXAMPLE: <code>UTF8::strpos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 8</code>
     *
     * @see http://php.net/manual/en/function.mb-strpos.php
     *
     * @param string     $haystack   <p>The string from which to get the position of the first occurrence of needle.</p>
     * @param int|string $needle     <p>The string to find in haystack.<br>Or a code point as int.</p>
     * @param int        $offset     [optional] <p>The search offset. If it is not specified, 0 is used.</p>
     * @param string     $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   The <strong>(int)</strong> numeric position of the first occurrence of needle in the haystack
     *                   string.<br> If needle is not found it returns false.
     *
     * @phpstan-return false|0|positive-int
     */
    public static function strpos(
        string $haystack,
        $needle,
        int $offset = 0,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000) {
                if ($needle === '') {
                    return 0;
                }
            } else {
                return false;
            }
        }

        // iconv and mbstring do not support integer $needle
        if ((int) $needle === $needle) {
            $needle = (string) self::chr($needle);
        }
        $needle = (string) $needle;

        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return 0;
            }

            return false;
        }

        if ($needle === '' && \PHP_VERSION_ID < 80000) {
            return false;
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
                return @\mb_strpos($haystack, $needle, $offset);
            }

            /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
            return @\mb_strpos($haystack, $needle, $offset, $encoding);
        }

        //
        // fallback for binary || ascii only
        //
        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            return \strpos($haystack, $needle, $offset);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['iconv'] === false
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strpos() without mbstring / iconv cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via intl
        //

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_strpos()" can't handle other encodings
            &&
            $offset >= 0 // grapheme_strpos() can't handle negative offset
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_strpos($haystack, $needle, $offset);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback via iconv
        //

        if (
            $offset >= 0 // iconv_strpos() can't handle negative offset
            &&
            self::$SUPPORT['iconv'] === true
        ) {
            // ignore invalid negative offset to keep compatibility
            // with php < 5.5.35, < 5.6.21, < 7.0.6
            $return_tmp = \iconv_strpos($haystack, $needle, $offset > 0 ? $offset : 0, $encoding);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($haystack . $needle)) {
            /** @noinspection PhpUsageOfSilenceOperatorInspection - Offset not contained in string */
            return @\strpos($haystack, $needle, $offset);
        }

        //
        // fallback via vanilla php
        //

        $haystack_tmp = self::substr($haystack, $offset, null, $encoding);
        if ($haystack_tmp === false) {
            $haystack_tmp = '';
        }
        $haystack = (string) $haystack_tmp;

        if ($offset < 0) {
            $offset = 0;
        }

        $pos = \strpos($haystack, $needle);
        if ($pos === false) {
            return false;
        }

        if ($pos) {
            return $offset + (int) self::strlen(\substr($haystack, 0, $pos), $encoding);
        }

        return $offset + 0;
    }

    /**
     * Find the position of the first occurrence of a substring in a string.
     *
     * @param string $haystack <p>
     *                         The string being checked.
     *                         </p>
     * @param string $needle   <p>
     *                         The position counted from the beginning of haystack.
     *                         </p>
     * @param int    $offset   [optional] <p>
     *                         The search offset. If it is not specified, 0 is used.
     *                         </p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The numeric position of the first occurrence of needle in the
     *                   haystack string. If needle is not found, it returns false.</p>
     *
     * @phpstan-return false|0|positive-int
     */
    public static function strpos_in_byte(string $haystack, string $needle, int $offset = 0)
    {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_strpos($haystack, $needle, $offset, 'CP850'); // 8-BIT
        }

        return \strpos($haystack, $needle, $offset);
    }

    /**
     * Find the position of the first occurrence of a substring in a string, case-insensitive.
     *
     * @param string $haystack <p>
     *                         The string being checked.
     *                         </p>
     * @param string $needle   <p>
     *                         The position counted from the beginning of haystack.
     *                         </p>
     * @param int    $offset   [optional] <p>
     *                         The search offset. If it is not specified, 0 is used.
     *                         </p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The numeric position of the first occurrence of needle in the
     *                   haystack string. If needle is not found, it returns false.</p>
     *
     * @phpstan-return false|0|positive-int
     */
    public static function stripos_in_byte(string $haystack, string $needle, int $offset = 0)
    {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_stripos($haystack, $needle, $offset, 'CP850'); // 8-BIT
        }

        return \stripos($haystack, $needle, $offset);
    }

    /**
     * Find the last occurrence of a character in a string within another.
     *
     * EXAMPLE: <code>UTF8::strrchr('κόσμεκόσμε-äöü', 'κόσμε'); // 'κόσμε-äöü'</code>
     *
     * @see http://php.net/manual/en/function.mb-strrchr.php
     *
     * @param string $haystack      <p>The string from which to get the last occurrence of needle.</p>
     * @param string $needle        <p>The string to find in haystack</p>
     * @param bool   $before_needle [optional] <p>
     *                              Determines which portion of haystack
     *                              this function returns.
     *                              If set to true, it returns all of haystack
     *                              from the beginning to the last occurrence of needle.
     *                              If set to false, it returns all of haystack
     *                              from the last occurrence of needle to the end,
     *                              </p>
     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The portion of haystack or false if needle is not found.</p>
     */
    public static function strrchr(
        string $haystack,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strrchr($haystack, $needle, $before_needle);
            }

            return \mb_strrchr($haystack, $needle, $before_needle, $encoding);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            !$before_needle
            &&
            (
                $encoding === 'CP850'
                ||
                $encoding === 'ASCII'
            )
        ) {
            return \strrchr($haystack, $needle);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strrchr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via iconv
        //

        if (self::$SUPPORT['iconv'] === true) {
            $needle_tmp = self::substr($needle, 0, 1, $encoding);
            if ($needle_tmp === false) {
                return false;
            }
            $needle = $needle_tmp;

            $pos = \iconv_strrpos($haystack, $needle, $encoding);
            if ($pos === false) {
                return false;
            }

            if ($before_needle) {
                return self::substr($haystack, 0, $pos, $encoding);
            }

            return self::substr($haystack, $pos, null, $encoding);
        }

        //
        // fallback via vanilla php
        //

        $needle_tmp = self::substr($needle, 0, 1, $encoding);
        if ($needle_tmp === false) {
            return false;
        }
        $needle = $needle_tmp;

        $pos = self::strrpos($haystack, $needle, 0, $encoding);
        if ($pos === false) {
            return false;
        }

        if ($before_needle) {
            return self::substr($haystack, 0, $pos, $encoding);
        }

        return self::substr($haystack, $pos, null, $encoding);
    }

    /**
     * Reverses characters order in the string.
     *
     * EXAMPLE: <code>UTF8::strrev('κ-öäü'); // 'üäö-κ'</code>
     *
     * @param string $str      <p>The input string.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The string with characters in the reverse sequence.</p>
     */
    public static function strrev(string $str, string $encoding = 'UTF-8'): string
    {
        if ($str === '') {
            return '';
        }

        // init
        $reversed = '';

        $str = self::emoji_encode($str, true);

        if ($encoding === 'UTF-8') {
            if (self::$SUPPORT['intl'] === true) {
                // try "grapheme" first: https://stackoverflow.com/questions/17496493/strrev-dosent-support-utf-8
                $i = (int) \grapheme_strlen($str);
                while ($i--) {
                    $reversed_tmp = \grapheme_substr($str, $i, 1);
                    if ($reversed_tmp !== false) {
                        $reversed .= $reversed_tmp;
                    }
                }
            } else {
                $i = (int) \mb_strlen($str);
                while ($i--) {
                    $reversed_tmp = \mb_substr($str, $i, 1);
                    if ($reversed_tmp !== false) { /* @phpstan-ignore-line | old polyfill will return false, or? */
                        $reversed .= $reversed_tmp;
                    }
                }
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $i = (int) self::strlen($str, $encoding);
            while ($i--) {
                $reversed_tmp = self::substr($str, $i, 1, $encoding);
                if ($reversed_tmp !== false) {
                    $reversed .= $reversed_tmp;
                }
            }
        }

        return self::emoji_decode($reversed, true);
    }

    /**
     * Find the last occurrence of a character in a string within another, case-insensitive.
     *
     * EXAMPLE: <code>UTF8::strrichr('Aκόσμεκόσμε-äöü', 'aκόσμε'); // 'Aκόσμεκόσμε-äöü'</code>
     *
     * @see http://php.net/manual/en/function.mb-strrichr.php
     *
     * @param string $haystack      <p>The string from which to get the last occurrence of needle.</p>
     * @param string $needle        <p>The string to find in haystack.</p>
     * @param bool   $before_needle [optional] <p>
     *                              Determines which portion of haystack
     *                              this function returns.
     *                              If set to true, it returns all of haystack
     *                              from the beginning to the last occurrence of needle.
     *                              If set to false, it returns all of haystack
     *                              from the last occurrence of needle to the end,
     *                              </p>
     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The portion of haystack or<br>false if needle is not found.</p>
     */
    public static function strrichr(
        string $haystack,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strrichr($haystack, $needle, $before_needle);
            }

            return \mb_strrichr($haystack, $needle, $before_needle, $encoding);
        }

        //
        // fallback via vanilla php
        //

        $needle_tmp = self::substr($needle, 0, 1, $encoding);
        if ($needle_tmp === false) {
            return false;
        }
        $needle = $needle_tmp;

        $pos = self::strripos($haystack, $needle, 0, $encoding);
        if ($pos === false) {
            return false;
        }

        if ($before_needle) {
            return self::substr($haystack, 0, $pos, $encoding);
        }

        return self::substr($haystack, $pos, null, $encoding);
    }

    /**
     * Find the position of the last occurrence of a substring in a string, case-insensitive.
     *
     * EXAMPLE: <code>UTF8::strripos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 13</code>
     *
     * @param string     $haystack   <p>The string to look in.</p>
     * @param int|string $needle     <p>The string to look for.</p>
     * @param int        $offset     [optional] <p>Number of characters to ignore in the beginning or end.</p>
     * @param string     $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The <strong>(int)</strong> numeric position of the last occurrence of needle in the haystack
     *                   string.<br>If needle is not found, it returns false.</p>
     */
    public static function strripos(
        string $haystack,
        $needle,
        int $offset = 0,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000) {
                if ($needle === '') {
                    return 0;
                }
            } else {
                return false;
            }
        }

        // iconv and mbstring do not support integer $needle
        if ((int) $needle === $needle && $needle >= 0) {
            $needle = (string) self::chr($needle);
        }
        $needle = (string) $needle;

        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return 0;
            }

            return false;
        }

        if ($needle === '' && \PHP_VERSION_ID < 80000) {
            return false;
        }

        if ($clean_utf8) {
            // mb_strripos() && iconv_strripos() is not tolerant to invalid characters
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        //
        // fallback via mbstrig
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strripos($haystack, $needle, $offset);
            }

            return \mb_strripos($haystack, $needle, $offset, $encoding);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            return \strripos($haystack, $needle, $offset);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strripos() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via intl
        //

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_strripos()" can't handle other encodings
            &&
            $offset >= 0 // grapheme_strripos() can't handle negative offset
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_strripos($haystack, $needle, $offset);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($haystack . $needle)) {
            return \strripos($haystack, $needle, $offset);
        }

        //
        // fallback via vanilla php
        //

        $haystack = self::strtocasefold($haystack, true, false, $encoding);
        $needle = self::strtocasefold($needle, true, false, $encoding);

        return self::strrpos($haystack, $needle, $offset, $encoding, $clean_utf8);
    }

    /**
     * Finds position of last occurrence of a string within another, case-insensitive.
     *
     * @param string $haystack <p>
     *                         The string from which to get the position of the last occurrence
     *                         of needle.
     *                         </p>
     * @param string $needle   <p>
     *                         The string to find in haystack.
     *                         </p>
     * @param int    $offset   [optional] <p>
     *                         The position in haystack
     *                         to start searching.
     *                         </p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>eturn the numeric position of the last occurrence of needle in the
     *                   haystack string, or false if needle is not found.</p>
     */
    public static function strripos_in_byte(string $haystack, string $needle, int $offset = 0)
    {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_strripos($haystack, $needle, $offset, 'CP850'); // 8-BIT
        }

        return \strripos($haystack, $needle, $offset);
    }

    /**
     * Find the position of the last occurrence of a substring in a string.
     *
     * EXAMPLE: <code>UTF8::strrpos('ABC-ÖÄÜ-中文空白-中文空白', '中'); // 13</code>
     *
     * @see http://php.net/manual/en/function.mb-strrpos.php
     *
     * @param string     $haystack   <p>The string being checked, for the last occurrence of needle</p>
     * @param int|string $needle     <p>The string to find in haystack.<br>Or a code point as int.</p>
     * @param int        $offset     [optional] <p>May be specified to begin searching an arbitrary number of characters
     *                               into the string. Negative values will stop searching at an arbitrary point prior to
     *                               the end of the string.
     *                               </p>
     * @param string     $encoding   [optional] <p>Set the charset.</p>
     * @param bool       $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The <strong>(int)</strong> numeric position of the last occurrence of needle in the haystack
     *                   string.<br>If needle is not found, it returns false.</p>
     */
    public static function strrpos(
        string $haystack,
        $needle,
        int $offset = 0,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000) {
                if ($needle === '') {
                    return 0;
                }
            } else {
                return false;
            }
        }

        // iconv and mbstring do not support integer $needle
        if ((int) $needle === $needle && $needle >= 0) {
            $needle = (string) self::chr($needle);
        }
        $needle = (string) $needle;

        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return 0;
            }

            return false;
        }

        if ($needle === '' && \PHP_VERSION_ID < 80000) {
            return false;
        }

        if ($clean_utf8) {
            // mb_strrpos && iconv_strrpos is not tolerant to invalid characters
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strrpos($haystack, $needle, $offset);
            }

            return \mb_strrpos($haystack, $needle, $offset, $encoding);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            return \strrpos($haystack, $needle, $offset);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strrpos() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via intl
        //

        if (
            $offset >= 0 // grapheme_strrpos() can't handle negative offset
            &&
            $encoding === 'UTF-8' // INFO: "grapheme_strrpos()" can't handle other encodings
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_strrpos($haystack, $needle, $offset);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($haystack . $needle)) {
            return \strrpos($haystack, $needle, $offset);
        }

        //
        // fallback via vanilla php
        //

        $haystack_tmp = null;
        if ($offset > 0) {
            $haystack_tmp = self::substr($haystack, $offset);
        } elseif ($offset < 0) {
            $haystack_tmp = self::substr($haystack, 0, $offset);
            $offset = 0;
        }

        if ($haystack_tmp !== null) {
            if ($haystack_tmp === false) {
                $haystack_tmp = '';
            }
            $haystack = (string) $haystack_tmp;
        }

        $pos = \strrpos($haystack, $needle);
        if ($pos === false) {
            return false;
        }

        /** @var false|string $str_tmp - needed for PhpStan (stubs error) */
        $str_tmp = \substr($haystack, 0, $pos);
        if ($str_tmp === false) {
            return false;
        }

        return $offset + (int) self::strlen($str_tmp);
    }

    /**
     * Find the position of the last occurrence of a substring in a string.
     *
     * @param string $haystack <p>
     *                         The string being checked, for the last occurrence
     *                         of needle.
     *                         </p>
     * @param string $needle   <p>
     *                         The string to find in haystack.
     *                         </p>
     * @param int    $offset   [optional] <p>May be specified to begin searching an arbitrary number of characters into
     *                         the string. Negative values will stop searching at an arbitrary point
     *                         prior to the end of the string.
     *                         </p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The numeric position of the last occurrence of needle in the
     *                   haystack string. If needle is not found, it returns false.</p>
     */
    public static function strrpos_in_byte(string $haystack, string $needle, int $offset = 0)
    {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_strrpos($haystack, $needle, $offset, 'CP850'); // 8-BIT
        }

        return \strrpos($haystack, $needle, $offset);
    }

    /**
     * Finds the length of the initial segment of a string consisting entirely of characters contained within a given
     * mask.
     *
     * EXAMPLE: <code>UTF8::strspn('iñtërnâtiônàlizætiøn', 'itñ'); // '3'</code>
     *
     * @param string   $str      <p>The input string.</p>
     * @param string   $mask     <p>The mask of chars</p>
     * @param int      $offset   [optional]
     * @param int|null $length   [optional]
     * @param string   $encoding [optional] <p>Set the charset.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     */
    public static function strspn(
        string $str,
        string $mask,
        int $offset = 0,
        int $length = null,
        string $encoding = 'UTF-8'
    ) {
        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($offset || $length !== null) {
            if ($encoding === 'UTF-8') {
                if ($length === null) {
                    $str = (string) \mb_substr($str, $offset);
                } else {
                    $str = (string) \mb_substr($str, $offset, $length);
                }
            } else {
                $str = (string) self::substr($str, $offset, $length, $encoding);
            }
        }

        if ($str === '' || $mask === '') {
            return 0;
        }

        $matches = [];

        return \preg_match('/^' . self::rxClass($mask) . '+/u', $str, $matches) ? (int) self::strlen($matches[0], $encoding) : 0;
    }

    /**
     * Returns part of haystack string from the first occurrence of needle to the end of haystack.
     *
     * EXAMPLE: <code>
     * $str = 'iñtërnâtiônàlizætiøn';
     * $search = 'nât';
     *
     * UTF8::strstr($str, $search)); // 'nâtiônàlizætiøn'
     * UTF8::strstr($str, $search, true)); // 'iñtër'
     * </code>
     *
     * @param string $haystack      <p>The input string. Must be valid UTF-8.</p>
     * @param string $needle        <p>The string to look for. Must be valid UTF-8.</p>
     * @param bool   $before_needle [optional] <p>
     *                              If <b>TRUE</b>, strstr() returns the part of the
     *                              haystack before the first occurrence of the needle (excluding the needle).
     *                              </p>
     * @param string $encoding      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8    [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>A sub-string,<br>or <strong>false</strong> if needle is not found.</p>
     */
    public static function strstr(
        string $haystack,
        string $needle,
        bool $before_needle = false,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($haystack === '') {
            if (\PHP_VERSION_ID >= 80000 && $needle === '') {
                return '';
            }

            return false;
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($needle === '') {
            if (\PHP_VERSION_ID >= 80000) {
                return $haystack;
            }

            return false;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strstr($haystack, $needle, $before_needle);
            }

            return \mb_strstr($haystack, $needle, $before_needle, $encoding);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            return \strstr($haystack, $needle, $before_needle);
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strstr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via intl
        //

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_strstr()" can't handle other encodings
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_strstr($haystack, $needle, $before_needle);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($haystack . $needle)) {
            return \strstr($haystack, $needle, $before_needle);
        }

        //
        // fallback via vanilla php
        //

        \preg_match('/^(.*?)' . \preg_quote($needle, '/') . '/us', $haystack, $match);

        if (!isset($match[1])) {
            return false;
        }

        if ($before_needle) {
            return $match[1];
        }

        return self::substr($haystack, (int) self::strlen($match[1]));
    }

    /**
     * Finds first occurrence of a string within another.
     *
     * @param string $haystack      <p>
     *                              The string from which to get the first occurrence
     *                              of needle.
     *                              </p>
     * @param string $needle        <p>
     *                              The string to find in haystack.
     *                              </p>
     * @param bool   $before_needle [optional] <p>
     *                              Determines which portion of haystack
     *                              this function returns.
     *                              If set to true, it returns all of haystack
     *                              from the beginning to the first occurrence of needle.
     *                              If set to false, it returns all of haystack
     *                              from the first occurrence of needle to the end,
     *                              </p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The portion of haystack,
     *                      or false if needle is not found.</p>
     */
    public static function strstr_in_byte(
        string $haystack,
        string $needle,
        bool $before_needle = false
    ) {
        if ($haystack === '' || $needle === '') {
            return false;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_strstr($haystack, $needle, $before_needle, 'CP850'); // 8-BIT
        }

        return \strstr($haystack, $needle, $before_needle);
    }

    /**
     * Unicode transformation for case-less matching.
     *
     * EXAMPLE: <code>UTF8::strtocasefold('ǰ◌̱'); // 'ǰ◌̱'</code>
     *
     * @see http://unicode.org/reports/tr21/tr21-5.html
     *
     * @param string      $str        <p>The input string.</p>
     * @param bool        $full       [optional] <p>
     *                                <b>true</b>, replace full case folding chars (default)<br>
     *                                <b>false</b>, use only limited static array [UTF8::$COMMON_CASE_FOLD]
     *                                </p>
     * @param bool        $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string      $encoding   [optional] <p>Set the charset.</p>
     * @param string|null $lang       [optional] <p>Set the language for special cases: az, el, lt, tr</p>
     * @param bool        $lower      [optional] <p>Use lowercase string, otherwise use uppercase string. PS: uppercase
     *                                is for some languages better ...</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function strtocasefold(
        string $str,
        bool $full = true,
        bool $clean_utf8 = false,
        string $encoding = 'UTF-8',
        string $lang = null,
        bool $lower = true
    ): string {
        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        $str = self::fixStrCaseHelper($str, $lower, $full);

        if ($lang === null && $encoding === 'UTF-8') {
            if ($lower) {
                return \mb_strtolower($str);
            }

            return \mb_strtoupper($str);
        }

        if ($lower) {
            return self::strtolower($str, $encoding, false, $lang);
        }

        return self::strtoupper($str, $encoding, false, $lang);
    }

    /**
     * Make a string lowercase.
     *
     * EXAMPLE: <code>UTF8::strtolower('DÉJÀ Σσς Iıİi'); // 'déjà σσς iıii'</code>
     *
     * @see http://php.net/manual/en/function.mb-strtolower.php
     *
     * @param string      $str                           <p>The string being lowercased.</p>
     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>String with all alphabetic characters converted to lowercase.</p>
     */
    public static function strtolower(
        $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        // init
        $str = (string) $str;

        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        // hack for old php version or for the polyfill ...
        if ($try_to_keep_the_string_length) {
            $str = self::fixStrCaseHelper($str, true);
        }

        if ($lang === null && $encoding === 'UTF-8') {
            return \mb_strtolower($str);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ($lang !== null) {
            if (self::$SUPPORT['intl'] === true) {
                if (self::$INTL_TRANSLITERATOR_LIST === null) {
                    self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
                }

                $language_code = $lang . '-Lower';
                if (!\in_array($language_code, self::$INTL_TRANSLITERATOR_LIST, true)) {
                    /**
                     * @psalm-suppress ImpureFunctionCall - this is only a warning
                     */
                    \trigger_error('UTF8::strtolower() cannot handle special language: ' . $lang . ' | supported: ' . \print_r(self::$INTL_TRANSLITERATOR_LIST, true), \E_USER_WARNING);

                    $language_code = 'Any-Lower';
                }

                return (string) \transliterator_transliterate($language_code, $str);
            }

            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strtolower() without intl cannot handle the "lang" parameter: ' . $lang, \E_USER_WARNING);
        }

        // always fallback via symfony polyfill
        return \mb_strtolower($str, $encoding);
    }

    /**
     * Make a string uppercase.
     *
     * EXAMPLE: <code>UTF8::strtoupper('Déjà Σσς Iıİi'); // 'DÉJÀ ΣΣΣ IIİI'</code>
     *
     * @see http://php.net/manual/en/function.mb-strtoupper.php
     *
     * @param string      $str                           <p>The string being uppercased.</p>
     * @param string      $encoding                      [optional] <p>Set the charset.</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>String with all alphabetic characters converted to uppercase.</p>
     */
    public static function strtoupper(
        $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        // init
        $str = (string) $str;

        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        // hack for old php version or for the polyfill ...
        if ($try_to_keep_the_string_length) {
            $str = self::fixStrCaseHelper($str);
        }

        if ($lang === null && $encoding === 'UTF-8') {
            return \mb_strtoupper($str);
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ($lang !== null) {
            if (self::$SUPPORT['intl'] === true) {
                if (self::$INTL_TRANSLITERATOR_LIST === null) {
                    self::$INTL_TRANSLITERATOR_LIST = self::getData('transliterator_list');
                }

                $language_code = $lang . '-Upper';
                if (!\in_array($language_code, self::$INTL_TRANSLITERATOR_LIST, true)) {
                    /**
                     * @psalm-suppress ImpureFunctionCall - this is only a warning
                     */
                    \trigger_error('UTF8::strtoupper() without intl for special language: ' . $lang, \E_USER_WARNING);

                    $language_code = 'Any-Upper';
                }

                return (string) \transliterator_transliterate($language_code, $str);
            }

            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::strtolower() without intl cannot handle the "lang"-parameter: ' . $lang, \E_USER_WARNING);
        }

        // always fallback via symfony polyfill
        return \mb_strtoupper($str, $encoding);
    }

    /**
     * Translate characters or replace sub-strings.
     *
     * EXAMPLE:
     * <code>
     * $array = [
     *     'Hello'   => '○●◎',
     *     '中文空白' => 'earth',
     * ];
     * UTF8::strtr('Hello 中文空白', $array); // '○●◎ earth'
     * </code>
     *
     * @see http://php.net/manual/en/function.strtr.php
     *
     * @param string          $str  <p>The string being translated.</p>
     * @param string|string[] $from <p>The string replacing from.</p>
     * @param string|string[] $to   [optional] <p>The string being translated to to.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>This function returns a copy of str, translating all occurrences of each character in "from"
     *                to the corresponding character in "to".</p>
     */
    public static function strtr(string $str, $from, $to = ''): string
    {
        if ($str === '') {
            return '';
        }

        if ($from === $to) {
            return $str;
        }

        if ($to !== '') {
            if (!\is_array($from)) {
                $from = self::str_split($from);
            }

            if (!\is_array($to)) {
                $to = self::str_split($to);
            }

            $count_from = \count($from);
            $count_to = \count($to);

            if ($count_from !== $count_to) {
                if ($count_from > $count_to) {
                    $from = \array_slice($from, 0, $count_to);
                } elseif ($count_from < $count_to) {
                    $to = \array_slice($to, 0, $count_from);
                }
            }

            try {
                $from = \array_combine($from, $to);
            } catch (\Error $e) {
                // PHP >= 8.0 : array_combine() will now throw a ValueError if the number of elements for each array is not equal; previously this function returned false instead.
                $from = false;
            }
            if ($from === false) {
                throw new \InvalidArgumentException('The number of elements for each array isn\'t equal or the arrays are empty: (from: ' . \print_r($from, true) . ' | to: ' . \print_r($to, true) . ')');
            }
        }

        if (\is_string($from)) {
            return \str_replace($from, $to, $str);
        }

        return \strtr($str, $from);
    }

    /**
     * Return the width of a string.
     *
     * INFO: use UTF8::strlen() for the byte-length
     *
     * EXAMPLE: <code>UTF8::strwidth("Iñtërnâtiôn\xE9àlizætiøn")); // 21</code>
     *
     * @param string $str        <p>The input string.</p>
     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return int
     *
     * @phpstan-return 0|positive-int
     */
    public static function strwidth(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ): int {
        if ($str === '') {
            return 0;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($clean_utf8) {
            // iconv and mbstring are not tolerant to invalid encoding
            // further, their behaviour is inconsistent with that of PHP's substr
            $str = self::clean($str);
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_strwidth($str);
            }

            return \mb_strwidth($str, $encoding);
        }

        //
        // fallback via vanilla php
        //

        if ($encoding !== 'UTF-8') {
            $str = self::encode('UTF-8', $str, false, $encoding);
        }

        $wide = 0;
        $str = (string) \preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $str, -1, $wide);

        /* @phpstan-ignore-next-line | should return 0|positive-int */
        return ($wide << 1) + (int) self::strlen($str);
    }

    /**
     * Get part of a string.
     *
     * EXAMPLE: <code>UTF8::substr('中文空白', 1, 2); // '文空'</code>
     *
     * @see http://php.net/manual/en/function.mb-substr.php
     *
     * @param string   $str        <p>The string being checked.</p>
     * @param int      $offset     <p>The first position used in str.</p>
     * @param int|null $length     [optional] <p>The maximum length of the returned string.</p>
     * @param string   $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      The portion of <i>str</i> specified by the <i>offset</i> and
     *                      <i>length</i> parameters.</p><p>If <i>str</i> is shorter than <i>offset</i>
     *                      characters long, <b>FALSE</b> will be returned.
     */
    public static function substr(
        string $str,
        int $offset = 0,
        int $length = null,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        // empty string
        if ($str === '' || $length === 0) {
            return '';
        }

        if ($clean_utf8) {
            // iconv and mbstring are not tolerant to invalid encoding
            // further, their behaviour is inconsistent with that of PHP's substr
            $str = self::clean($str);
        }

        // whole string
        if (!$offset && $length === null) {
            return $str;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        //
        // fallback via mbstring
        //

        if (self::$SUPPORT['mbstring'] === true && $encoding === 'UTF-8') {
            if ($length === null) {
                return \mb_substr($str, $offset);
            }

            return \mb_substr($str, $offset, $length);
        }

        //
        // fallback for binary || ascii only
        //

        if (
            $encoding === 'CP850'
            ||
            $encoding === 'ASCII'
        ) {
            if ($length === null) {
                return \substr($str, $offset);
            }

            return \substr($str, $offset, $length);
        }

        // otherwise we need the string-length
        $str_length = 0;
        if (
            $offset
            ||
            $length === null /* @phpstan-ignore-line | can be NULL here?! */
        ) {
            $str_length = self::strlen($str, $encoding);
        }

        // e.g.: invalid chars + mbstring not installed
        if ($str_length === false) {
            return false;
        }

        // empty string
        if ($offset === $str_length && !$length) {
            return '';
        }

        // impossible
        if ($offset && $offset > $str_length) {
            return '';
        }

        $length = $length ?? $str_length;

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::substr() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        //
        // fallback via intl
        //

        if (
            $encoding === 'UTF-8' // INFO: "grapheme_substr()" can't handle other encodings
            &&
            $offset >= 0 // grapheme_substr() can't handle negative offset
            &&
            self::$SUPPORT['intl'] === true
        ) {
            $return_tmp = \grapheme_substr($str, $offset, $length);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback via iconv
        //

        if (
            $length >= 0 // "iconv_substr()" can't handle negative length
            &&
            self::$SUPPORT['iconv'] === true
        ) {
            $return_tmp = \iconv_substr($str, $offset, $length);
            if ($return_tmp !== false) {
                return $return_tmp;
            }
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($str)) {
            return \substr($str, $offset, $length);
        }

        //
        // fallback via vanilla php
        //

        // split to array, and remove invalid characters
        // &&
        // extract relevant part, and join to make sting again
        return \implode('', \array_slice(self::str_split($str), $offset, $length));
    }

    /**
     * Binary-safe comparison of two strings from an offset, up to a length of characters.
     *
     * EXAMPLE: <code>
     * UTF8::substr_compare("○●◎\r", '●◎', 0, 2); // -1
     * UTF8::substr_compare("○●◎\r", '◎●', 1, 2); // 1
     * UTF8::substr_compare("○●◎\r", '●◎', 1, 2); // 0
     * </code>
     *
     * @param string   $str1               <p>The main string being compared.</p>
     * @param string   $str2               <p>The secondary string being compared.</p>
     * @param int      $offset             [optional] <p>The start position for the comparison. If negative, it starts
     *                                     counting from the end of the string.</p>
     * @param int|null $length             [optional] <p>The length of the comparison. The default value is the largest
     *                                     of the length of the str compared to the length of main_str less the
     *                                     offset.</p>
     * @param bool     $case_insensitivity [optional] <p>If case_insensitivity is TRUE, comparison is case
     *                                     insensitive.</p>
     * @param string   $encoding           [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *             <strong>&lt; 0</strong> if str1 is less than str2;<br>
     *             <strong>&gt; 0</strong> if str1 is greater than str2,<br>
     *             <strong>0</strong> if they are equal
     */
    public static function substr_compare(
        string $str1,
        string $str2,
        int $offset = 0,
        int $length = null,
        bool $case_insensitivity = false,
        string $encoding = 'UTF-8'
    ): int {
        if (
            $offset !== 0
            ||
            $length !== null
        ) {
            if ($encoding === 'UTF-8') {
                if ($length === null) {
                    $str1 = (string) \mb_substr($str1, $offset);
                } else {
                    $str1 = (string) \mb_substr($str1, $offset, $length);
                }
                $str2 = (string) \mb_substr($str2, 0, (int) self::strlen($str1));
            } else {
                $encoding = self::normalize_encoding($encoding, 'UTF-8');

                $str1 = (string) self::substr($str1, $offset, $length, $encoding);
                $str2 = (string) self::substr($str2, 0, (int) self::strlen($str1), $encoding);
            }
        }

        if ($case_insensitivity) {
            return self::strcasecmp($str1, $str2, $encoding);
        }

        return self::strcmp($str1, $str2);
    }

    /**
     * Count the number of substring occurrences.
     *
     * EXAMPLE: <code>UTF8::substr_count('中文空白', '文空', 1, 2); // 1</code>
     *
     * @see http://php.net/manual/en/function.substr-count.php
     *
     * @param string   $haystack   <p>The string to search in.</p>
     * @param string   $needle     <p>The substring to search for.</p>
     * @param int      $offset     [optional] <p>The offset where to start counting.</p>
     * @param int|null $length     [optional] <p>
     *                             The maximum length after the specified offset to search for the
     *                             substring. It outputs a warning if the offset plus the length is
     *                             greater than the haystack length.
     *                             </p>
     * @param string   $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>This functions returns an integer or false if there isn't a string.</p>
     */
    public static function substr_count(
        string $haystack,
        string $needle,
        int $offset = 0,
        int $length = null,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ) {
        if ($needle === '') {
            return false;
        }

        if ($haystack === '' || $length === 0) {
            return 0;
        }

        if ($encoding !== 'UTF-8' && $encoding !== 'CP850') {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $needle = self::clean($needle);
            $haystack = self::clean($haystack);
        }

        if ($offset || $length > 0) {
            if ($length === null) {
                $length_tmp = self::strlen($haystack, $encoding);
                if ($length_tmp === false) {
                    return false;
                }
                $length = $length_tmp;
            }

            if ($encoding === 'UTF-8') {
                $haystack = (string) \mb_substr($haystack, $offset, $length);
            } else {
                $haystack = (string) \mb_substr($haystack, $offset, $length, $encoding);
            }
        }

        if (
            $encoding !== 'UTF-8'
            &&
            self::$SUPPORT['mbstring'] === false
        ) {
            /**
             * @psalm-suppress ImpureFunctionCall - this is only a warning
             */
            \trigger_error('UTF8::substr_count() without mbstring cannot handle "' . $encoding . '" encoding', \E_USER_WARNING);
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($encoding === 'UTF-8') {
                return \mb_substr_count($haystack, $needle);
            }

            return \mb_substr_count($haystack, $needle, $encoding);
        }

        \preg_match_all('/' . \preg_quote($needle, '/') . '/us', $haystack, $matches, \PREG_SET_ORDER);

        return \count($matches);
    }

    /**
     * Count the number of substring occurrences.
     *
     * @param string   $haystack <p>
     *                           The string being checked.
     *                           </p>
     * @param string   $needle   <p>
     *                           The string being found.
     *                           </p>
     * @param int      $offset   [optional] <p>
     *                           The offset where to start counting
     *                           </p>
     * @param int|null $length   [optional] <p>
     *                           The maximum length after the specified offset to search for the
     *                           substring. It outputs a warning if the offset plus the length is
     *                           greater than the haystack length.
     *                           </p>
     *
     * @psalm-pure
     *
     * @return false|int
     *                   <p>The number of times the
     *                   needle substring occurs in the
     *                   haystack string.</p>
     */
    public static function substr_count_in_byte(
        string $haystack,
        string $needle,
        int $offset = 0,
        int $length = null
    ) {
        if ($haystack === '' || $needle === '') {
            return 0;
        }

        if (
            ($offset || $length !== null)
            &&
            self::$SUPPORT['mbstring_func_overload'] === true
        ) {
            if ($length === null) {
                $length_tmp = self::strlen($haystack);
                if ($length_tmp === false) {
                    return false;
                }
                $length = $length_tmp;
            }

            if (
                (
                    $length !== 0
                    &&
                    $offset !== 0
                )
                &&
                ($length + $offset) <= 0
                &&
                \PHP_VERSION_ID < 71000 // output from "substr_count()" have changed in PHP 7.1
            ) {
                return false;
            }

            /** @var false|string $haystack_tmp - needed for PhpStan (stubs error) */
            $haystack_tmp = \substr($haystack, $offset, $length);
            if ($haystack_tmp === false) {
                $haystack_tmp = '';
            }
            $haystack = (string) $haystack_tmp;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_substr_count($haystack, $needle, 'CP850'); // 8-BIT
        }

        if ($length === null) {
            return \substr_count($haystack, $needle, $offset);
        }

        return \substr_count($haystack, $needle, $offset, $length);
    }

    /**
     * Returns the number of occurrences of $substring in the given string.
     * By default, the comparison is case-sensitive, but can be made insensitive
     * by setting $case_sensitive to false.
     *
     * @param string $str            <p>The input string.</p>
     * @param string $substring      <p>The substring to search for.</p>
     * @param bool   $case_sensitive [optional] <p>Whether or not to enforce case-sensitivity. Default: true</p>
     * @param string $encoding       [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return int
     *
     * @phpstan-return 0|positive-int
     */
    public static function substr_count_simple(
        string $str,
        string $substring,
        bool $case_sensitive = true,
        string $encoding = 'UTF-8'
    ): int {
        if ($str === '' || $substring === '') {
            return 0;
        }

        if ($encoding === 'UTF-8') {
            if ($case_sensitive) {
                return (int) \mb_substr_count($str, $substring);
            }

            return (int) \mb_substr_count(
                \mb_strtoupper($str),
                \mb_strtoupper($substring)
            );
        }

        $encoding = self::normalize_encoding($encoding, 'UTF-8');

        if ($case_sensitive) {
            return (int) \mb_substr_count($str, $substring, $encoding);
        }

        return (int) \mb_substr_count(
            self::strtocasefold($str, true, false, $encoding, null, false),
            self::strtocasefold($substring, true, false, $encoding, null, false),
            $encoding
        );
    }

    /**
     * Removes a prefix ($needle) from the beginning of the string ($haystack), case-insensitive.
     *
     * EXMAPLE: <code>
     * UTF8::substr_ileft('ΚόσμεMiddleEnd', 'Κόσμε'); // 'MiddleEnd'
     * UTF8::substr_ileft('ΚόσμεMiddleEnd', 'κόσμε'); // 'MiddleEnd'
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Return the sub-string.</p>
     */
    public static function substr_ileft(string $haystack, string $needle): string
    {
        if ($haystack === '') {
            return '';
        }

        if ($needle === '') {
            return $haystack;
        }

        if (self::str_istarts_with($haystack, $needle)) {
            $haystack = (string) \mb_substr($haystack, (int) self::strlen($needle));
        }

        return $haystack;
    }

    /**
     * Get part of a string process in bytes.
     *
     * @param string   $str    <p>The string being checked.</p>
     * @param int      $offset <p>The first position used in str.</p>
     * @param int|null $length [optional] <p>The maximum length of the returned string.</p>
     *
     * @psalm-pure
     *
     * @return false|string
     *                      <p>The portion of <i>str</i> specified by the <i>offset</i> and
     *                      <i>length</i> parameters.</p><p>If <i>str</i> is shorter than <i>offset</i>
     *                      characters long, <b>FALSE</b> will be returned.</p>
     */
    public static function substr_in_byte(string $str, int $offset = 0, int $length = null)
    {
        // empty string
        if ($str === '' || $length === 0) {
            return '';
        }

        // whole string
        if (!$offset && $length === null) {
            return $str;
        }

        if (self::$SUPPORT['mbstring_func_overload'] === true) {
            // "mb_" is available if overload is used, so use it ...
            return \mb_substr($str, $offset, $length, 'CP850'); // 8-BIT
        }

        return \substr($str, $offset, $length ?? 2147483647);
    }

    /**
     * Removes a suffix ($needle) from the end of the string ($haystack), case-insensitive.
     *
     * EXAMPLE: <code>
     * UTF8::substr_iright('BeginMiddleΚόσμε', 'Κόσμε'); // 'BeginMiddle'
     * UTF8::substr_iright('BeginMiddleΚόσμε', 'κόσμε'); // 'BeginMiddle'
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Return the sub-string.<p>
     */
    public static function substr_iright(string $haystack, string $needle): string
    {
        if ($haystack === '') {
            return '';
        }

        if ($needle === '') {
            return $haystack;
        }

        if (self::str_iends_with($haystack, $needle)) {
            $haystack = (string) \mb_substr($haystack, 0, (int) self::strlen($haystack) - (int) self::strlen($needle));
        }

        return $haystack;
    }

    /**
     * Removes a prefix ($needle) from the beginning of the string ($haystack).
     *
     * EXAMPLE: <code>
     * UTF8::substr_left('ΚόσμεMiddleEnd', 'Κόσμε'); // 'MiddleEnd'
     * UTF8::substr_left('ΚόσμεMiddleEnd', 'κόσμε'); // 'ΚόσμεMiddleEnd'
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Return the sub-string.</p>
     */
    public static function substr_left(string $haystack, string $needle): string
    {
        if ($haystack === '') {
            return '';
        }

        if ($needle === '') {
            return $haystack;
        }

        if (self::str_starts_with($haystack, $needle)) {
            $haystack = (string) \mb_substr($haystack, (int) self::strlen($needle));
        }

        return $haystack;
    }

    /**
     * Replace text within a portion of a string.
     *
     * EXAMPLE: <code>UTF8::substr_replace(array('Iñtërnâtiônàlizætiøn', 'foo'), 'æ', 1); // array('Iæñtërnâtiônàlizætiøn', 'fæoo')</code>
     *
     * source: https://gist.github.com/stemar/8287074
     *
     * @param string|string[] $str         <p>The input string or an array of stings.</p>
     * @param string|string[] $replacement <p>The replacement string or an array of stings.</p>
     * @param int|int[]       $offset      <p>
     *                                     If start is positive, the replacing will begin at the start'th offset
     *                                     into string.
     *                                     <br><br>
     *                                     If start is negative, the replacing will begin at the start'th character
     *                                     from the end of string.
     *                                     </p>
     * @param int|int[]|null  $length      [optional] <p>If given and is positive, it represents the length of the
     *                                     portion of string which is to be replaced. If it is negative, it
     *                                     represents the number of characters from the end of string at which to
     *                                     stop replacing. If it is not given, then it will default to strlen(
     *                                     string ); i.e. end the replacing at the end of string. Of course, if
     *                                     length is zero then this function will have the effect of inserting
     *                                     replacement into string at the given start offset.</p>
     * @param string          $encoding    [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string|string[]
     *                         <p>The result string is returned. If string is an array then array is returned.</p>
     *
     * @template TSubstrReplace string|string[]
     * @phpstan-param TSubstrReplace $str
     * @phpstan-return TSubstrReplace
     */
    public static function substr_replace(
        $str,
        $replacement,
        $offset,
        $length = null,
        string $encoding = 'UTF-8'
    ) {
        if (\is_array($str)) {
            $num = \count($str);

            // the replacement
            if (\is_array($replacement)) {
                $replacement = \array_slice($replacement, 0, $num);
            } else {
                $replacement = \array_pad([$replacement], $num, $replacement);
            }

            // the offset
            if (\is_array($offset)) {
                $offset = \array_slice($offset, 0, $num);
                foreach ($offset as &$value_tmp) {
                    $value_tmp = (int) $value_tmp === $value_tmp ? $value_tmp : 0;
                }
                unset($value_tmp);
            } else {
                $offset = \array_pad([$offset], $num, $offset);
            }

            // the length
            if ($length === null) {
                $length = \array_fill(0, $num, 0);
            } elseif (\is_array($length)) {
                $length = \array_slice($length, 0, $num);
                foreach ($length as &$value_tmp_V2) {
                    $value_tmp_V2 = (int) $value_tmp_V2 === $value_tmp_V2 ? $value_tmp_V2 : $num;
                }
                unset($value_tmp_V2);
            } else {
                $length = \array_pad([$length], $num, $length);
            }

            // recursive call
            /** @phpstan-ignore-next-line - phpstan currently can't handle recursive calls */
            return \array_map([self::class, 'substr_replace'], $str, $replacement, $offset, $length);
        }

        if (\is_array($replacement)) {
            if ($replacement !== []) {
                $replacement = $replacement[0];
            } else {
                $replacement = '';
            }
        }

        // init
        $str = (string) $str;
        $replacement = (string) $replacement;

        if (\is_array($length)) {
            throw new \InvalidArgumentException('Parameter "$length" can only be an array, if "$str" is also an array.');
        }

        if (\is_array($offset)) {
            throw new \InvalidArgumentException('Parameter "$offset" can only be an array, if "$str" is also an array.');
        }

        if ($str === '') {
            return $replacement;
        }

        if (self::$SUPPORT['mbstring'] === true) {
            $string_length = (int) self::strlen($str, $encoding);

            if ($offset < 0) {
                $offset = (int) \max(0, $string_length + $offset);
            } elseif ($offset > $string_length) {
                $offset = $string_length;
            }

            if ($length !== null && $length < 0) {
                $length = (int) \max(0, $string_length - $offset + $length);
            } elseif ($length === null || $length > $string_length) {
                $length = $string_length;
            }

            if (($offset + $length) > $string_length) {
                $length = $string_length - $offset;
            }

            return ((string) \mb_substr($str, 0, $offset, $encoding)) .
                   $replacement .
                   ((string) \mb_substr($str, $offset + $length, $string_length - $offset - $length, $encoding));
        }

        //
        // fallback for ascii only
        //

        if (ASCII::is_ascii($str)) {
            return ($length === null) ?
                \substr_replace($str, $replacement, $offset) :
                \substr_replace($str, $replacement, $offset, $length);
        }

        //
        // fallback via vanilla php
        //

        \preg_match_all('/./us', $str, $str_matches);
        \preg_match_all('/./us', $replacement, $replacement_matches);

        if ($length === null) {
            $length_tmp = self::strlen($str, $encoding);
            if ($length_tmp === false) {
                // e.g.: non mbstring support + invalid chars
                return '';
            }
            $length = $length_tmp;
        }

        \array_splice($str_matches[0], $offset, $length, $replacement_matches[0]);

        return \implode('', $str_matches[0]);
    }

    /**
     * Removes a suffix ($needle) from the end of the string ($haystack).
     *
     * EXAMPLE: <code>
     * UTF8::substr_right('BeginMiddleΚόσμε', 'Κόσμε'); // 'BeginMiddle'
     * UTF8::substr_right('BeginMiddleΚόσμε', 'κόσμε'); // 'BeginMiddleΚόσμε'
     * </code>
     *
     * @param string $haystack <p>The string to search in.</p>
     * @param string $needle   <p>The substring to search for.</p>
     * @param string $encoding [optional] <p>Set the charset for e.g. "mb_" function</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Return the sub-string.</p>
     */
    public static function substr_right(
        string $haystack,
        string $needle,
        string $encoding = 'UTF-8'
    ): string {
        if ($haystack === '') {
            return '';
        }

        if ($needle === '') {
            return $haystack;
        }

        if (
            $encoding === 'UTF-8'
            &&
            \substr($haystack, -\strlen($needle)) === $needle
        ) {
            return (string) \mb_substr($haystack, 0, (int) \mb_strlen($haystack) - (int) \mb_strlen($needle));
        }

        if (\substr($haystack, -\strlen($needle)) === $needle) {
            return (string) self::substr(
                $haystack,
                0,
                (int) self::strlen($haystack, $encoding) - (int) self::strlen($needle, $encoding),
                $encoding
            );
        }

        return $haystack;
    }

    /**
     * Returns a case swapped version of the string.
     *
     * EXAMPLE: <code>UTF8::swapCase('déJÀ σσς iıII'); // 'DÉjà ΣΣΣ IIii'</code>
     *
     * @param string $str        <p>The input string.</p>
     * @param string $encoding   [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool   $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>Each character's case swapped.</p>
     */
    public static function swapCase(string $str, string $encoding = 'UTF-8', bool $clean_utf8 = false): string
    {
        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        if ($encoding === 'UTF-8') {
            return (string) (\mb_strtolower($str) ^ \mb_strtoupper($str) ^ $str);
        }

        return (string) (self::strtolower($str, $encoding) ^ self::strtoupper($str, $encoding) ^ $str);
    }

    /**
     * Checks whether symfony-polyfills are used.
     *
     * @psalm-pure
     *
     * @return bool
     *              <p><strong>true</strong> if in use, <strong>false</strong> otherwise</p>
     *
     * @internal <p>Please do not use it anymore, we will make is private in next major version.</p>
     */
    public static function symfony_polyfill_used(): bool
    {
        // init
        $return = false;

        $return_tmp = \extension_loaded('mbstring');
        if (!$return_tmp && \function_exists('mb_strlen')) {
            $return = true;
        }

        $return_tmp = \extension_loaded('iconv');
        if (!$return_tmp && \function_exists('iconv')) {
            $return = true;
        }

        return $return;
    }

    /**
     * @param string $str
     * @param int    $tab_length
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function tabs_to_spaces(string $str, int $tab_length = 4): string
    {
        if ($tab_length === 4) {
            $spaces = '    ';
        } elseif ($tab_length === 2) {
            $spaces = '  ';
        } else {
            $spaces = \str_repeat(' ', $tab_length);
        }

        return \str_replace("\t", $spaces, $str);
    }

    /**
     * Converts the first character of each word in the string to uppercase
     * and all other chars to lowercase.
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>A string with all characters of $str being title-cased.</p>
     */
    public static function titlecase(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        if (
            $lang === null
            &&
            !$try_to_keep_the_string_length
        ) {
            if ($encoding === 'UTF-8') {
                return \mb_convert_case($str, \MB_CASE_TITLE);
            }

            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            return \mb_convert_case($str, \MB_CASE_TITLE, $encoding);
        }

        return self::str_titleize(
            $str,
            null,
            $encoding,
            false,
            $lang,
            $try_to_keep_the_string_length,
            false
        );
    }

    /**
     * Convert a string into ASCII.
     *
     * EXAMPLE: <code>UTF8::to_ascii('déjà σσς iıii'); // 'deja sss iiii'</code>
     *
     * @param string $str     <p>The input string.</p>
     * @param string $unknown [optional] <p>Character use if character unknown. (default is ?)</p>
     * @param bool   $strict  [optional] <p>Use "transliterator_transliterate()" from PHP-Intl | WARNING: bad
     *                        performance</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function to_ascii(
        string $str,
        string $unknown = '?',
        bool $strict = false
    ): string {
        return ASCII::to_transliterate($str, $unknown, $strict);
    }

    /**
     * @param bool|float|int|string $str
     *
     * @psalm-pure
     *
     * @return bool
     */
    public static function to_boolean($str): bool
    {
        // init
        $str = (string) $str;

        if ($str === '') {
            return false;
        }

        // Info: http://php.net/manual/en/filter.filters.validate.php
        $map = [
            'true'  => true,
            '1'     => true,
            'on'    => true,
            'yes'   => true,
            'false' => false,
            '0'     => false,
            'off'   => false,
            'no'    => false,
        ];

        if (isset($map[$str])) {
            return $map[$str];
        }

        $key = \strtolower($str);
        if (isset($map[$key])) {
            return $map[$key];
        }

        if (\is_numeric($str)) {
            return ((float) $str) > 0;
        }

        return (bool) \trim($str);
    }

    /**
     * Convert given string to safe filename (and keep string case).
     *
     * @param string $str
     * @param bool   $use_transliterate No transliteration, conversion etc. is done by default - unsafe characters are
     *                                  simply replaced with hyphen.
     * @param string $fallback_char
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function to_filename(
        string $str,
        bool $use_transliterate = false,
        string $fallback_char = '-'
    ): string {
        return ASCII::to_filename(
            $str,
            $use_transliterate,
            $fallback_char
        );
    }

    /**
     * Convert a string into "ISO-8859"-encoding (Latin-1).
     *
     * EXAMPLE: <code>UTF8::to_utf8(UTF8::to_iso8859('  -ABC-中文空白-  ')); // '  -ABC-????-  '</code>
     *
     * @param string|string[] $str
     *
     * @psalm-pure
     *
     * @return string|string[]
     *
     * @template TToIso8859 as string|string[]
     * @phpstan-param TToIso8859 $str
     * @phpstan-return (TToIso8859 is string ? string : string[])
     */
    public static function to_iso8859($str)
    {
        if (\is_array($str)) {
            foreach ($str as &$v) {
                $v = self::to_iso8859($v);
            }

            return $str;
        }

        /* @phpstan-ignore-next-line | FP? -> "Cannot cast TToIso8859 of array<string>|string to string." it's a string here */
        $str = (string) $str;
        if ($str === '') {
            return '';
        }

        return self::utf8_decode($str);
    }

    /**
     * This function leaves UTF-8 characters alone, while converting almost all non-UTF8 to UTF8.
     *
     * <ul>
     * <li>It decode UTF-8 codepoints and Unicode escape sequences.</li>
     * <li>It assumes that the encoding of the original string is either WINDOWS-1252 or ISO-8859.</li>
     * <li>WARNING: It does not remove invalid UTF-8 characters, so you maybe need to use "UTF8::clean()" for this
     * case.</li>
     * </ul>
     *
     * EXAMPLE: <code>UTF8::to_utf8(["\u0063\u0061\u0074"]); // array('cat')</code>
     *
     * @param string|string[] $str                        <p>Any string or array of strings.</p>
     * @param bool            $decode_html_entity_to_utf8 <p>Set to true, if you need to decode html-entities.</p>
     *
     * @psalm-pure
     *
     * @return string|string[]
     *                         <p>The UTF-8 encoded string</p>
     *
     * @template TToUtf8 as string|string[]
     * @phpstan-param TToUtf8 $str
     * @phpstan-return (TToUtf8 is string ? string : string[])
     */
    public static function to_utf8($str, bool $decode_html_entity_to_utf8 = false)
    {
        if (\is_array($str)) {
            foreach ($str as &$v) {
                $v = self::to_utf8_string($v, $decode_html_entity_to_utf8);
            }

            /** @phpstan-var TToUtf8 $str */
            return $str;
        }

        \assert(\is_string($str));

        $str = self::to_utf8_string($str, $decode_html_entity_to_utf8);

        /** @phpstan-var TToUtf8 $str */
        return $str;
    }

    /**
     * This function leaves UTF-8 characters alone, while converting almost all non-UTF8 to UTF8.
     *
     * <ul>
     * <li>It decode UTF-8 codepoints and Unicode escape sequences.</li>
     * <li>It assumes that the encoding of the original string is either WINDOWS-1252 or ISO-8859.</li>
     * <li>WARNING: It does not remove invalid UTF-8 characters, so you maybe need to use "UTF8::clean()" for this
     * case.</li>
     * </ul>
     *
     * EXAMPLE: <code>UTF8::to_utf8_string("\u0063\u0061\u0074"); // 'cat'</code>
     *
     * @param string $str                        <p>Any string.</p>
     * @param bool   $decode_html_entity_to_utf8 <p>Set to true, if you need to decode html-entities.</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The UTF-8 encoded string</p>
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function to_utf8_string(string $str, bool $decode_html_entity_to_utf8 = false): string
    {
        if ($str === '') {
            return $str;
        }

        $max = \strlen($str);
        $buf = '';

        for ($i = 0; $i < $max; ++$i) {
            $c1 = $str[$i];

            if ($c1 >= "\xC0") { // should be converted to UTF8, if it's not UTF8 already

                if ($c1 <= "\xDF") { // looks like 2 bytes UTF8

                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];

                    if ($c2 >= "\x80" && $c2 <= "\xBF") { // yeah, almost sure it's UTF8 already
                        $buf .= $c1 . $c2;
                        ++$i;
                    } else { // not valid UTF8 - convert it
                        $buf .= self::to_utf8_convert_helper($c1);
                    }
                } elseif ($c1 >= "\xE0" && $c1 <= "\xEF") { // looks like 3 bytes UTF8

                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];
                    $c3 = $i + 2 >= $max ? "\x00" : $str[$i + 2];

                    if ($c2 >= "\x80" && $c2 <= "\xBF" && $c3 >= "\x80" && $c3 <= "\xBF") { // yeah, almost sure it's UTF8 already
                        $buf .= $c1 . $c2 . $c3;
                        $i += 2;
                    } else { // not valid UTF8 - convert it
                        $buf .= self::to_utf8_convert_helper($c1);
                    }
                } elseif ($c1 >= "\xF0" && $c1 <= "\xF7") { // looks like 4 bytes UTF8

                    $c2 = $i + 1 >= $max ? "\x00" : $str[$i + 1];
                    $c3 = $i + 2 >= $max ? "\x00" : $str[$i + 2];
                    $c4 = $i + 3 >= $max ? "\x00" : $str[$i + 3];

                    if ($c2 >= "\x80" && $c2 <= "\xBF" && $c3 >= "\x80" && $c3 <= "\xBF" && $c4 >= "\x80" && $c4 <= "\xBF") { // yeah, almost sure it's UTF8 already
                        $buf .= $c1 . $c2 . $c3 . $c4;
                        $i += 3;
                    } else { // not valid UTF8 - convert it
                        $buf .= self::to_utf8_convert_helper($c1);
                    }
                } else { // doesn't look like UTF8, but should be converted

                    $buf .= self::to_utf8_convert_helper($c1);
                }
            } elseif (($c1 & "\xC0") === "\x80") { // needs conversion

                $buf .= self::to_utf8_convert_helper($c1);
            } else { // it doesn't need conversion

                $buf .= $c1;
            }
        }

        // decode unicode escape sequences + unicode surrogate pairs
        $buf = \preg_replace_callback(
            '/\\\\u([dD][89abAB][0-9a-fA-F]{2})\\\\u([dD][cdefCDEF][\da-fA-F]{2})|\\\\u([0-9a-fA-F]{4})/',
            /**
             * @param array $matches
             *
             * @psalm-pure
             *
             * @return string
             */
            static function (array $matches): string {
                if (isset($matches[3])) {
                    $cp = (int) \hexdec($matches[3]);
                } else {
                    // http://unicode.org/faq/utf_bom.html#utf16-4
                    $cp = ((int) \hexdec($matches[1]) << 10)
                          + (int) \hexdec($matches[2])
                          + 0x10000
                          - (0xD800 << 10)
                          - 0xDC00;
                }

                // https://github.com/php/php-src/blob/php-7.3.2/ext/standard/html.c#L471
                //
                // php_utf32_utf8(unsigned char *buf, unsigned k)

                if ($cp < 0x80) {
                    return (string) self::chr($cp);
                }

                if ($cp < 0xA0) {
                    /** @noinspection UnnecessaryCastingInspection */
                    return (string) self::chr(0xC0 | $cp >> 6) . (string) self::chr(0x80 | $cp & 0x3F);
                }

                return self::decimal_to_chr($cp);
            },
            $buf
        );

        if ($buf === null) {
            return '';
        }

        // decode UTF-8 codepoints
        if ($decode_html_entity_to_utf8) {
            $buf = self::html_entity_decode($buf);
        }

        return $buf;
    }

    /**
     * Returns the given string as an integer, or null if the string isn't numeric.
     *
     * @param string $str
     *
     * @psalm-pure
     *
     * @return int|null
     *                  <p>null if the string isn't numeric</p>
     */
    public static function to_int(string $str)
    {
        if (\is_numeric($str)) {
            return (int) $str;
        }

        return null;
    }

    /**
     * Returns the given input as string, or null if the input isn't int|float|string
     * and do not implement the "__toString()" method.
     *
     * @param float|int|object|string|null $input
     *
     * @psalm-pure
     *
     * @return string|null
     *                     <p>null if the input isn't int|float|string and has no "__toString()" method</p>
     */
    public static function to_string($input)
    {
        if ($input === null) {
            return null;
        }

        $input_type = \gettype($input);

        if (
            $input_type === 'string'
            ||
            $input_type === 'integer'
            ||
            $input_type === 'float'
            ||
            $input_type === 'double'
        ) {
            /* @phpstan-ignore-next-line | "gettype" is not supported by phpstan?! */
            return (string) $input;
        }

        /** @phpstan-ignore-next-line - "gettype": FP? */
        if ($input_type === 'object' && \method_exists($input, '__toString')) {
            return (string) $input;
        }

        return null;
    }

    /**
     * Strip whitespace or other characters from the beginning and end of a UTF-8 string.
     *
     * INFO: This is slower then "trim()"
     *
     * We can only use the original-function, if we use <= 7-Bit in the string / chars
     * but the check for ASCII (7-Bit) cost more time, then we can safe here.
     *
     * EXAMPLE: <code>UTF8::trim('   -ABC-中文空白-  '); // '-ABC-中文空白-'</code>
     *
     * @param string      $str   <p>The string to be trimmed</p>
     * @param string|null $chars [optional] <p>Optional characters to be stripped</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The trimmed string.</p>
     */
    public static function trim(string $str = '', string $chars = null): string
    {
        if ($str === '') {
            return '';
        }

        if (self::$SUPPORT['mbstring'] === true) {
            if ($chars !== null) {
                /** @noinspection PregQuoteUsageInspection */
                $chars = \preg_quote($chars);
                $pattern = "^[{$chars}]+|[{$chars}]+\$";
            } else {
                $pattern = '^[\\s]+|[\\s]+$';
            }

            return (string) \mb_ereg_replace($pattern, '', $str);
        }

        if ($chars !== null) {
            $chars = \preg_quote($chars, '/');
            $pattern = "^[{$chars}]+|[{$chars}]+\$";
        } else {
            $pattern = '^[\\s]+|[\\s]+$';
        }

        return self::regex_replace($str, $pattern, '');
    }

    /**
     * Makes string's first char uppercase.
     *
     * EXAMPLE: <code>UTF8::ucfirst('ñtërnâtiônàlizætiøn foo'); // 'Ñtërnâtiônàlizætiøn foo'</code>
     *
     * @param string      $str                           <p>The input string.</p>
     * @param string      $encoding                      [optional] <p>Set the charset for e.g. "mb_" function</p>
     * @param bool        $clean_utf8                    [optional] <p>Remove non UTF-8 chars from the string.</p>
     * @param string|null $lang                          [optional] <p>Set the language for special cases: az, el, lt,
     *                                                   tr</p>
     * @param bool        $try_to_keep_the_string_length [optional] <p>true === try to keep the string length: e.g. ẞ
     *                                                   -> ß</p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The resulting string with with char uppercase.</p>
     */
    public static function ucfirst(
        string $str,
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false,
        string $lang = null,
        bool $try_to_keep_the_string_length = false
    ): string {
        if ($str === '') {
            return '';
        }

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        $use_mb_functions = $lang === null && !$try_to_keep_the_string_length;

        if ($encoding === 'UTF-8') {
            $str_part_two = (string) \mb_substr($str, 1);

            if ($use_mb_functions) {
                $str_part_one = \mb_strtoupper(
                    (string) \mb_substr($str, 0, 1)
                );
            } else {
                $str_part_one = self::strtoupper(
                    (string) \mb_substr($str, 0, 1),
                    $encoding,
                    false,
                    $lang,
                    $try_to_keep_the_string_length
                );
            }
        } else {
            $encoding = self::normalize_encoding($encoding, 'UTF-8');

            $str_part_two = (string) self::substr($str, 1, null, $encoding);

            if ($use_mb_functions) {
                $str_part_one = \mb_strtoupper(
                    (string) \mb_substr($str, 0, 1, $encoding),
                    $encoding
                );
            } else {
                $str_part_one = self::strtoupper(
                    (string) self::substr($str, 0, 1, $encoding),
                    $encoding,
                    false,
                    $lang,
                    $try_to_keep_the_string_length
                );
            }
        }

        return $str_part_one . $str_part_two;
    }

    /**
     * Uppercase for all words in the string.
     *
     * EXAMPLE: <code>UTF8::ucwords('iñt ërn âTi ônà liz æti øn'); // 'Iñt Ërn ÂTi Ônà Liz Æti Øn'</code>
     *
     * @param string   $str        <p>The input string.</p>
     * @param string[] $exceptions [optional] <p>Exclusion for some words.</p>
     * @param string   $char_list  [optional] <p>Additional chars that contains to words and do not start a new
     *                             word.</p>
     * @param string   $encoding   [optional] <p>Set the charset.</p>
     * @param bool     $clean_utf8 [optional] <p>Remove non UTF-8 chars from the string.</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function ucwords(
        string $str,
        array $exceptions = [],
        string $char_list = '',
        string $encoding = 'UTF-8',
        bool $clean_utf8 = false
    ): string {
        if (!$str) {
            return '';
        }

        // INFO: mb_convert_case($str, MB_CASE_TITLE);
        // -> MB_CASE_TITLE didn't only uppercase the first letter, it also lowercase all other letters

        if ($clean_utf8) {
            // "mb_strpos()" and "iconv_strpos()" returns wrong position,
            // if invalid characters are found in $haystack before $needle
            $str = self::clean($str);
        }

        $use_php_default_functions = !(bool) ($char_list . \implode('', $exceptions));

        if (
            $use_php_default_functions
            &&
            ASCII::is_ascii($str)
        ) {
            return \ucwords($str);
        }

        $words = self::str_to_words($str, $char_list);
        $use_exceptions = $exceptions !== [];

        $words_str = '';
        foreach ($words as &$word) {
            if (!$word) {
                continue;
            }

            if (
                !$use_exceptions
                ||
                !\in_array($word, $exceptions, true)
            ) {
                $words_str .= self::ucfirst($word, $encoding);
            } else {
                $words_str .= $word;
            }
        }

        return $words_str;
    }

    /**
     * Multi decode HTML entity + fix urlencoded-win1252-chars.
     *
     * EXAMPLE: <code>UTF8::urldecode('tes%20öäü%20\u00edtest+test'); // 'tes öäü ítest test'</code>
     *
     * e.g:
     * 'test+test'                     => 'test test'
     * 'D&#252;sseldorf'               => 'Düsseldorf'
     * 'D%FCsseldorf'                  => 'Düsseldorf'
     * 'D&#xFC;sseldorf'               => 'Düsseldorf'
     * 'D%26%23xFC%3Bsseldorf'         => 'Düsseldorf'
     * 'DÃ¼sseldorf'                   => 'Düsseldorf'
     * 'D%C3%BCsseldorf'               => 'Düsseldorf'
     * 'D%C3%83%C2%BCsseldorf'         => 'Düsseldorf'
     * 'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'
     *
     * @param string $str          <p>The input string.</p>
     * @param bool   $multi_decode <p>Decode as often as possible.</p>
     *
     * @psalm-pure
     *
     * @return string
     *
     * @template T as string
     * @phpstan-param T $str
     * @phpstan-return (T is non-empty-string ? non-empty-string : string)
     */
    public static function urldecode(string $str, bool $multi_decode = true): string
    {
        if ($str === '') {
            return '';
        }

        $str = self::urldecode_unicode_helper($str);

        if ($multi_decode) {
            do {
                $str_compare = $str;

                /**
                 * @psalm-suppress PossiblyInvalidArgument
                 */
                $str = \urldecode(
                    self::html_entity_decode(
                        self::to_utf8($str),
                        \ENT_QUOTES | \ENT_HTML5
                    )
                );
            } while ($str_compare !== $str);
        } else {
            /**
             * @psalm-suppress PossiblyInvalidArgument
             */
            $str = \urldecode(
                self::html_entity_decode(
                    self::to_utf8($str),
                    \ENT_QUOTES | \ENT_HTML5
                )
            );
        }

        return self::fix_simple_utf8($str);
    }

    /**
     * Decodes a UTF-8 string to ISO-8859-1.
     *
     * EXAMPLE: <code>UTF8::encode('UTF-8', UTF8::utf8_decode('-ABC-中文空白-')); // '-ABC-????-'</code>
     *
     * @param string $str             <p>The input string.</p>
     * @param bool   $keep_utf8_chars
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function utf8_decode(string $str, bool $keep_utf8_chars = false): string
    {
        if ($str === '') {
            return '';
        }

        // save for later comparision
        $str_backup = $str;
        $len = \strlen($str);

        if (self::$ORD === null) {
            self::$ORD = self::getData('ord');
        }

        if (self::$CHR === null) {
            self::$CHR = self::getData('chr');
        }

        $no_char_found = '?';
        for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) {
            switch ($str[$i] & "\xF0") {
                case "\xC0":
                case "\xD0":
                    $c = (self::$ORD[$str[$i] & "\x1F"] << 6) | self::$ORD[$str[++$i] & "\x3F"];
                    $str[$j] = $c < 256 ? self::$CHR[$c] : $no_char_found;

                    break;

                case "\xF0":
                    ++$i;

                // no break

                case "\xE0":
                    $str[$j] = $no_char_found;
                    $i += 2;

                    break;

                default:
                    $str[$j] = $str[$i];
            }
        }

        /** @var false|string $return - needed for PhpStan (stubs error) */
        $return = \substr($str, 0, $j);
        if ($return === false) {
            $return = '';
        }

        if (
            $keep_utf8_chars
            &&
            (int) self::strlen($return) >= (int) self::strlen($str_backup)
        ) {
            return $str_backup;
        }

        return $return;
    }

    /**
     * Encodes an ISO-8859-1 string to UTF-8.
     *
     * EXAMPLE: <code>UTF8::utf8_decode(UTF8::utf8_encode('-ABC-中文空白-')); // '-ABC-中文空白-'</code>
     *
     * @param string $str <p>The input string.</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function utf8_encode(string $str): string
    {
        if ($str === '') {
            return '';
        }

        /** @noinspection PhpUsageOfSilenceOperatorInspection | TODO for PHP > 8.2: find a replacement for this */
        /** @var false|string $str - the polyfill maybe return false */
        $str = @\utf8_encode($str);

        if ($str === false) {
            return '';
        }

        return $str;
    }

    /**
     * Returns an array with all utf8 whitespace characters.
     *
     * @see http://www.bogofilter.org/pipermail/bogofilter/2003-March/001889.html
     *
     * @psalm-pure
     *
     * @return string[]
     *                  An array with all known whitespace characters as values and the type of whitespace as keys
     *                  as defined in above URL
     */
    public static function whitespace_table(): array
    {
        return self::$WHITESPACE_TABLE;
    }

    /**
     * Limit the number of words in a string.
     *
     * EXAMPLE: <code>UTF8::words_limit('fòô bàř fòô', 2, ''); // 'fòô bàř'</code>
     *
     * @param string      $str        <p>The input string.</p>
     * @param int<1, max> $limit      <p>The limit of words as integer.</p>
     * @param string      $str_add_on <p>Replacement for the striped string.</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function words_limit(
        string $str,
        int $limit = 100,
        string $str_add_on = '…'
    ): string {
        if (
            $str === ''
            ||
            /* @phpstan-ignore-next-line | we do not trust the phpdoc check */
            $limit <= 0
        ) {
            return '';
        }

        \preg_match('/^\\s*+(?:[^\\s]++\\s*+){1,' . $limit . '}/u', $str, $matches);

        if (
            !isset($matches[0])
            ||
            \mb_strlen($str) === (int) \mb_strlen($matches[0])
        ) {
            return $str;
        }

        return \rtrim($matches[0]) . $str_add_on;
    }

    /**
     * Wraps a string to a given number of characters
     *
     * EXAMPLE: <code>UTF8::wordwrap('Iñtërnâtiônàlizætiøn', 2, '<br>', true)); // 'Iñ<br>të<br>rn<br>ât<br>iô<br>nà<br>li<br>zæ<br>ti<br>øn'</code>
     *
     * @see http://php.net/manual/en/function.wordwrap.php
     *
     * @param string      $str   <p>The input string.</p>
     * @param int<1, max> $width [optional] <p>The column width.</p>
     * @param string      $break [optional] <p>The line is broken using the optional break parameter.</p>
     * @param bool        $cut   [optional] <p>
     *                      If the cut is set to true, the string is
     *                      always wrapped at or before the specified width. So if you have
     *                      a word that is larger than the given width, it is broken apart.
     *                      </p>
     *
     * @psalm-pure
     *
     * @return string
     *                <p>The given string wrapped at the specified column.</p>
     */
    public static function wordwrap(
        string $str,
        int $width = 75,
        string $break = "\n",
        bool $cut = false
    ): string {
        if ($str === '' || $break === '') {
            return '';
        }

        $str_split = \explode($break, $str);

        /** @var string[] $charsArray */
        $charsArray = [];
        $word_split = '';
        foreach ($str_split as $i => $i_value) {
            if ($i) {
                $charsArray[] = $break;
                $word_split .= '#';
            }

            foreach (self::str_split($i_value) as $c) {
                $charsArray[] = $c;
                if ($c === ' ') {
                    $word_split .= ' ';
                } else {
                    $word_split .= '?';
                }
            }
        }

        $str_return = '';
        $j = 0;
        $b = -1;
        $i = -1;
        $word_split = \wordwrap($word_split, $width, '#', $cut);

        $max = \mb_strlen($word_split);
        /** @noinspection PhpAssignmentInConditionInspection - is ok here */
        while (($b = \mb_strpos($word_split, '#', $b + 1)) !== false) {
            for (++$i; $i < $b; ++$i) {
                if (isset($charsArray[$j])) {
                    $str_return .= $charsArray[$j];
                    unset($charsArray[$j]);
                }
                ++$j;

                // prevent endless loop, e.g. if there is a error in the "mb_*" polyfill
                if ($i > $max) {
                    break 2;
                }
            }

            if (
                $break === $charsArray[$j]
                ||
                $charsArray[$j] === ' '
            ) {
                unset($charsArray[$j++]);
            }

            $str_return .= $break;

            // prevent endless loop, e.g. if there is a error in the "mb_*" polyfill
            if ($b > $max) {
                break;
            }
        }

        return $str_return . \implode('', $charsArray);
    }

    /**
     * Line-Wrap the string after $limit, but split the string by "$delimiter" before ...
     *    ... so that we wrap the per line.
     *
     * @param string      $str             <p>The input string.</p>
     * @param int<1, max> $width           [optional] <p>The column width.</p>
     * @param string      $break           [optional] <p>The line is broken using the optional break parameter.</p>
     * @param bool        $cut             [optional] <p>
     *                                     If the cut is set to true, the string is
     *                                     always wrapped at or before the specified width. So if you have
     *                                     a word that is larger than the given width, it is broken apart.
     *                                     </p>
     * @param bool        $add_final_break [optional] <p>
     *                                     If this flag is true, then the method will add a $break at the end
     *                                     of the result string.
     *                                     </p>
     * @param non-empty-string|null $delimiter       [optional] <p>
     *                                     You can change the default behavior, where we split the string by newline.
     *                                     </p>
     *
     * @psalm-pure
     *
     * @return string
     */
    public static function wordwrap_per_line(
        string $str,
        int $width = 75,
        string $break = "\n",
        bool $cut = false,
        bool $add_final_break = true,
        string $delimiter = null
    ): string {
        if ($delimiter === null) {
            $strings = \preg_split('/\\r\\n|\\r|\\n/', $str);
        } else {
            $strings = \explode($delimiter, $str);
        }

        $string_helper_array = [];
        if ($strings !== false) {
            foreach ($strings as $value) {
                $string_helper_array[] = self::wordwrap($value, $width, $break, $cut);
            }
        }

        if ($add_final_break) {
            $final_break = $break;
        } else {
            $final_break = '';
        }

        return \implode($delimiter ?? "\n", $string_helper_array) . $final_break;
    }

    /**
     * Returns an array of Unicode White Space characters.
     *
     * @psalm-pure
     *
     * @return string[]
     *                  <p>An array with numeric code point as key and White Space Character as value.</p>
     */
    public static function ws(): array
    {
        return self::$WHITESPACE;
    }

    /**
     * Checks whether the passed string contains only byte sequences that are valid UTF-8 characters.
     *
     * EXAMPLE: <code>
     * UTF8::is_utf8_string('Iñtërnâtiônàlizætiøn']); // true
     * //
     * UTF8::is_utf8_string("Iñtërnâtiônàlizætiøn\xA0\xA1"); // false
     * </code>
     *
     * @see          http://hsivonen.iki.fi/php-utf8/
     *
     * @param string $str    <p>The string to be checked.</p>
     * @param bool   $strict <p>Check also if the string is not UTF-16 or UTF-32.</p>
     *
     * @psalm-pure
     *
     * @return bool
     */
    private static function is_utf8_string(string $str, bool $strict = false)
    {
        if ($str === '') {
            return true;
        }

        if ($strict) {
            $is_binary = self::is_binary($str, true);

            if ($is_binary && self::is_utf16($str, false) !== false) {
                return false;
            }

            if ($is_binary && self::is_utf32($str, false) !== false) {
                return false;
            }
        }

        if (self::$SUPPORT['pcre_utf8']) {
            // If even just the first character can be matched, when the /u
            // modifier is used, then it's valid UTF-8. If the UTF-8 is somehow
            // invalid, nothing at all will match, even if the string contains
            // some valid sequences
            return \preg_match('/^./us', $str) === 1;
        }

        $mState = 0; // cached expected number of octets after the current octet
        // until the beginning of the next UTF8 character sequence
        $mUcs4 = 0; // cached Unicode character
        $mBytes = 1; // cached expected number of octets in the current sequence

        if (self::$ORD === null) {
            self::$ORD = self::getData('ord');
        }

        $len = \strlen($str);
        for ($i = 0; $i < $len; ++$i) {
            $in = self::$ORD[$str[$i]];

            if ($mState === 0) {
                // When mState is zero we expect either a US-ASCII character or a
                // multi-octet sequence.
                if ((0x80 & $in) === 0) {
                    // US-ASCII, pass straight through.
                    $mBytes = 1;
                } elseif ((0xE0 & $in) === 0xC0) {
                    // First octet of 2 octet sequence.
                    $mUcs4 = $in;
                    $mUcs4 = ($mUcs4 & 0x1F) << 6;
                    $mState = 1;
                    $mBytes = 2;
                } elseif ((0xF0 & $in) === 0xE0) {
                    // First octet of 3 octet sequence.
                    $mUcs4 = $in;
                    $mUcs4 = ($mUcs4 & 0x0F) << 12;
                    $mState = 2;
                    $mBytes = 3;
                } elseif ((0xF8 & $in) === 0xF0) {
                    // First octet of 4 octet sequence.
                    $mUcs4 = $in;
                    $mUcs4 = ($mUcs4 & 0x07) << 18;
                    $mState = 3;
                    $mBytes = 4;
                } elseif ((0xFC & $in) === 0xF8) {
                    /* First octet of 5 octet sequence.
                     *
                     * This is illegal because the encoded codepoint must be either
                     * (a) not the shortest form or
                     * (b) outside the Unicode range of 0-0x10FFFF.
                     * Rather than trying to resynchronize, we will carry on until the end
                     * of the sequence and let the later error handling code catch it.
                     */
                    $mUcs4 = $in;
                    $mUcs4 = ($mUcs4 & 0x03) << 24;
                    $mState = 4;
                    $mBytes = 5;
                } elseif ((0xFE & $in) === 0xFC) {
                    // First octet of 6 octet sequence, see comments for 5 octet sequence.
                    $mUcs4 = $in;
                    $mUcs4 = ($mUcs4 & 1) << 30;
                    $mState = 5;
                    $mBytes = 6;
                } else {
                    // Current octet is neither in the US-ASCII range nor a legal first
                    // octet of a multi-octet sequence.
                    return false;
                }
            } elseif ((0xC0 & $in) === 0x80) {

                // When mState is non-zero, we expect a continuation of the multi-octet
                // sequence

                // Legal continuation.
                $shift = ($mState - 1) * 6;
                $tmp = $in;
                $tmp = ($tmp & 0x0000003F) << $shift;
                $mUcs4 |= $tmp;
                // Prefix: End of the multi-octet sequence. mUcs4 now contains the final
                // Unicode code point to be output.
                if (--$mState === 0) {
                    // Check for illegal sequences and code points.
                    //
                    // From Unicode 3.1, non-shortest form is illegal
                    if (
                        ($mBytes === 2 && $mUcs4 < 0x0080)
                        ||
                        ($mBytes === 3 && $mUcs4 < 0x0800)
                        ||
                        ($mBytes === 4 && $mUcs4 < 0x10000)
                        ||
                        ($mBytes > 4)
                        ||
                        // From Unicode 3.2, surrogate characters are illegal.
                        (($mUcs4 & 0xFFFFF800) === 0xD800)
                        ||
                        // Code points outside the Unicode range are illegal.
                        ($mUcs4 > 0x10FFFF)
                    ) {
                        return false;
                    }
                    // initialize UTF8 cache
                    $mState = 0;
                    $mUcs4 = 0;
                    $mBytes = 1;
                }
            } else {
                // ((0xC0 & (*in) != 0x80) && (mState != 0))
                // Incomplete multi-octet sequence.
                return false;
            }
        }

        return $mState === 0;
    }

    /**
     * @param string $str
     * @param bool   $use_lowercase      <p>Use uppercase by default, otherwise use lowercase.</p>
     * @param bool   $use_full_case_fold <p>Convert not only common cases.</p>
     *
     * @psalm-pure
     *
     * @return string
     */
    private static function fixStrCaseHelper(
        string $str,
        bool $use_lowercase = false,
        bool $use_full_case_fold = false
    ) {
        $upper = self::$COMMON_CASE_FOLD['upper'];
        $lower = self::$COMMON_CASE_FOLD['lower'];

        if ($use_lowercase) {
            $str = \str_replace(
                $upper,
                $lower,
                $str
            );
        } else {
            $str = \str_replace(
                $lower,
                $upper,
                $str
            );
        }

        if ($use_full_case_fold) {
            /**
             * @psalm-suppress ImpureStaticVariable
             *
             * @var array<mixed>|null
             */
            static $FULL_CASE_FOLD = null;
            if ($FULL_CASE_FOLD === null) {
                $FULL_CASE_FOLD = self::getData('caseFolding_full');
            }

            if ($use_lowercase) {
                $str = \str_replace($FULL_CASE_FOLD[0], $FULL_CASE_FOLD[1], $str);
            } else {
                $str = \str_replace($FULL_CASE_FOLD[1], $FULL_CASE_FOLD[0], $str);
            }
        }

        return $str;
    }

    /**
     * get data from "/data/*.php"
     *
     * @param string $file
     *
     * @psalm-pure
     *
     * @return array<array-key, mixed>
     */
    private static function getData(string $file)
    {
        /** @noinspection PhpIncludeInspection */
        /** @noinspection UsingInclusionReturnValueInspection */
        /** @psalm-suppress UnresolvableInclude */
        return include __DIR__ . '/data/' . $file . '.php';
    }

    /**
     * @psalm-pure
     *
     * @return true|null
     */
    private static function initEmojiData()
    {
        if (self::$EMOJI_KEYS_CACHE === null) {
            if (self::$EMOJI === null) {
                self::$EMOJI = self::getData('emoji');
            }

            /**
             * @psalm-suppress ImpureFunctionCall - static sort function is used
             */
            \uksort(
                self::$EMOJI,
                static function (string $a, string $b): int {
                    return \strlen($b) <=> \strlen($a);
                }
            );

            self::$EMOJI_KEYS_CACHE = \array_keys(self::$EMOJI);
            self::$EMOJI_VALUES_CACHE = self::$EMOJI;

            foreach (self::$EMOJI_KEYS_CACHE as $key) {
                $tmp_key = \crc32($key);
                self::$EMOJI_KEYS_REVERSIBLE_CACHE[] = '_-_PORTABLE_UTF8_-_' . $tmp_key . '_-_' . \strrev((string) $tmp_key) . '_-_8FTU_ELBATROP_-_';
            }

            return true;
        }

        return null;
    }

    /**
     * Checks whether mbstring "overloaded" is active on the server.
     *
     * @psalm-pure
     *
     * @return bool
     */
    private static function mbstring_overloaded(): bool
    {
        /**
         * INI directive 'mbstring.func_overload' is deprecated since PHP 7.2
         */

        /** @noinspection PhpComposerExtensionStubsInspection */
        /** @noinspection PhpUsageOfSilenceOperatorInspection */
        /** @noinspection DeprecatedIniOptionsInspection */
        return \defined('MB_OVERLOAD_STRING')
               &&
               ((int) @\ini_get('mbstring.func_overload') & \MB_OVERLOAD_STRING);
    }

    /**
     * @param string[] $strings
     * @param bool     $remove_empty_values
     * @param int|null $remove_short_values
     *
     * @psalm-pure
     *
     * @return list<string>
     */
    private static function reduce_string_array(
        array $strings,
        bool $remove_empty_values,
        int $remove_short_values = null
    ) {
        // init
        $return = [];

        foreach ($strings as &$str) {
            if (
                $remove_short_values !== null
                &&
                \mb_strlen($str) <= $remove_short_values
            ) {
                continue;
            }

            if (
                $remove_empty_values
                &&
                \trim($str) === ''
            ) {
                continue;
            }

            $return[] = $str;
        }

        return $return;
    }

    /**
     * rxClass
     *
     * @param string $s
     * @param string $class
     *
     * @return string
     *
     * @psalm-pure
     */
    private static function rxClass(string $s, string $class = '')
    {
        /**
         * @psalm-suppress ImpureStaticVariable
         *
         * @var array<string,string>
         */
        static $RX_CLASS_CACHE = [];

        $cache_key = $s . '_' . $class;

        if (isset($RX_CLASS_CACHE[$cache_key])) {
            return $RX_CLASS_CACHE[$cache_key];
        }

        $class_array = [];
        $class_array[] = $class;

        /** @noinspection SuspiciousLoopInspection */
        /** @noinspection AlterInForeachInspection */
        foreach (self::str_split($s) as &$s) {
            if ($s === '-') {
                $class_array[0] = '-' . $class_array[0];
            } elseif (!isset($s[2])) {
                $class_array[0] .= \preg_quote($s, '/');
            } elseif (self::strlen($s) === 1) {
                $class_array[0] .= $s;
            } else {
                $class_array[] = $s;
            }
        }

        if ($class_array[0]) {
            $class_array[0] = '[' . $class_array[0] . ']';
        }

        if (\count($class_array) === 1) {
            $return = $class_array[0];
        } else {
            $return = '(?:' . \implode('|', $class_array) . ')';
        }

        $RX_CLASS_CACHE[$cache_key] = $return;

        return $return;
    }

    /**
     * Personal names such as "Marcus Aurelius" are sometimes typed incorrectly using lowercase ("marcus aurelius").
     *
     * @param string $names
     * @param string $delimiter
     * @param string $encoding
     *
     * @phpstan-param non-empty-string $delimiter
     *
     * @psalm-pure
     *
     * @return string
     */
    private static function str_capitalize_name_helper(
        string $names,
        string $delimiter,
        string $encoding = 'UTF-8'
    ) {
        // init
        try {
            $name_helper_array = \explode($delimiter, $names);
        } catch (\Error $e) {
            // PHP >= 8.0 : explode() will now throw ValueError when separator parameter is given an empty string (""). Previously, explode() returned false instead.
            $name_helper_array = false;
        }
        if ($name_helper_array === false) {
            return '';
        }

        $special_cases = [
            'names' => [
                'ab',
                'af',
                'al',
                'and',
                'ap',
                'bint',
                'binte',
                'da',
                'de',
                'del',
                'den',
                'der',
                'di',
                'dit',
                'ibn',
                'la',
                'mac',
                'nic',
                'of',
                'ter',
                'the',
                'und',
                'van',
                'von',
                'y',
                'zu',
            ],
            'prefixes' => [
                'al-',
                "d'",
                'ff',
                "l'",
                'mac',
                'mc',
                'nic',
            ],
        ];

        foreach ($name_helper_array as &$name) {
            if (\in_array($name, $special_cases['names'], true)) {
                continue;
            }

            $continue = false;

            if ($delimiter === '-') {
                foreach ((array) $special_cases['names'] as &$beginning) {
                    if (\strncmp($name, $beginning, \strlen($beginning)) === 0) {
                        $continue = true;

                        break;
                    }
                }
                unset($beginning);
            }

            foreach ((array) $special_cases['prefixes'] as &$beginning) {
                if (\strncmp($name, $beginning, \strlen($beginning)) === 0) {
                    $continue = true;

                    break;
                }
            }
            unset($beginning);

            if ($continue) {
                continue;
            }

            $name = self::ucfirst($name, $encoding);
        }

        return \implode($delimiter, $name_helper_array);
    }

    /**
     * Generic case-sensitive transformation for collation matching.
     *
     * @param string $str <p>The input string</p>
     *
     * @psalm-pure
     *
     * @return string|null
     */
    private static function strtonatfold(string $str)
    {
        $str = \Normalizer::normalize($str, \Normalizer::NFD);
        if ($str === false) {
            return '';
        }

        return \preg_replace(
            '/\p{Mn}+/u',
            '',
            $str
        );
    }

    /**
     * @param int|string $input
     *
     * @psalm-pure
     *
     * @return string
     */
    private static function to_utf8_convert_helper($input)
    {
        // init
        $buf = '';

        if (self::$ORD === null) {
            self::$ORD = self::getData('ord');
        }

        if (self::$CHR === null) {
            self::$CHR = self::getData('chr');
        }

        if (self::$WIN1252_TO_UTF8 === null) {
            self::$WIN1252_TO_UTF8 = self::getData('win1252_to_utf8');
        }

        $ordC1 = self::$ORD[$input];
        if (isset(self::$WIN1252_TO_UTF8[$ordC1])) { // found in Windows-1252 special cases
            $buf .= self::$WIN1252_TO_UTF8[$ordC1];
        } else {
            $cc1 = self::$CHR[$ordC1 / 64] | "\xC0";
            $cc2 = ((string) $input & "\x3F") | "\x80";
            $buf .= $cc1 . $cc2;
        }

        return $buf;
    }

    /**
     * @param string $str
     *
     * @psalm-pure
     *
     * @return string
     */
    private static function urldecode_unicode_helper(string $str)
    {
        if (\strpos($str, '%u') === false) {
            return $str;
        }

        $pattern = '/%u([0-9a-fA-F]{3,4})/';
        if (\preg_match($pattern, $str)) {
            $str = (string) \preg_replace($pattern, '&#x\\1;', $str);
        }

        return $str;
    }
}
<?php

// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

return [
    // Dutch (Flemish)
    'nl' => [
        'Á' => 'A',
        'á' => 'a',
        'Ä' => 'A',
        'ä' => 'a',
        'À' => 'A',
        'à' => 'a',
        'Â' => 'A',
        'â' => 'a',
        'É' => 'E',
        'é' => 'e',
        'Ë' => 'E',
        'ë' => 'e',
        'È' => 'E',
        'è' => 'e',
        'Ê' => 'E',
        'ê' => 'e',
        'Í' => 'I',
        'í' => 'i',
        'Ï' => 'I',
        'ï' => 'i',
        'Ì' => 'I',
        'ì' => 'i',
        'Î' => 'I',
        'î' => 'i',
        'Ó' => 'O',
        'ó' => 'o',
        'Ö' => 'O',
        'ö' => 'o',
        'Ò' => 'O',
        'ò' => 'o',
        'Ô' => 'O',
        'ô' => 'o',
        'Ú' => 'U',
        'ú' => 'u',
        'Ü' => 'U',
        'ü' => 'u',
        'Ù' => 'U',
        'ù' => 'u',
        'Û' => 'U',
        'û' => 'u',
        'Ý' => 'Y',
        'ý' => 'y',
        'Ÿ' => 'Y',
    ],
    // Italian
    'it' => [
        'à' => 'a',
        'À' => 'A',
        'é' => 'e',
        'É' => 'E',
        'è' => 'e',
        'È' => 'E',
        'ì' => 'i',
        'Ì' => 'I',
        'Ò' => 'O',
        'ò' => 'o',
        'ù' => 'u',
        'Ù' => 'U',
    ],
    // Macedonian
    'mk' => [
        'А' => 'A',
        'Б' => 'B',
        'В' => 'V',
        'Г' => 'G',
        'Д' => 'D',
        'Ѓ' => 'Gj',
        'Е' => 'E',
        'Ж' => 'Zh',
        'З' => 'Z',
        'Ѕ' => 'Dz',
        'И' => 'I',
        'Ј' => 'J',
        'К' => 'K',
        'Л' => 'L',
        'Љ' => 'Lj',
        'М' => 'M',
        'Н' => 'N',
        'Њ' => 'Nj',
        'О' => 'O',
        'П' => 'P',
        'Р' => 'R',
        'С' => 'S',
        'Т' => 'T',
        'Ќ' => 'Kj',
        'У' => 'U',
        'Ф' => 'F',
        'Х' => 'H',
        'Ц' => 'C',
        'Ч' => 'Ch',
        'Џ' => 'Dj',
        'Ш' => 'Sh',
        'а' => 'a',
        'б' => 'b',
        'в' => 'v',
        'г' => 'g',
        'д' => 'd',
        'ѓ' => 'gj',
        'е' => 'e',
        'ж' => 'zh',
        'з' => 'z',
        'ѕ' => 'dz',
        'и' => 'i',
        'ј' => 'j',
        'к' => 'k',
        'л' => 'l',
        'љ' => 'lj',
        'м' => 'm',
        'н' => 'n',
        'њ' => 'nj',
        'о' => 'o',
        'п' => 'p',
        'р' => 'r',
        'с' => 's',
        'т' => 't',
        'ќ' => 'kj',
        'у' => 'u',
        'ф' => 'f',
        'х' => 'h',
        'ц' => 'c',
        'ч' => 'ch',
        'џ' => 'dj',
        'ш' => 'sh',
    ],
    // Portuguese (Brazil)
    'pt' => [
        'æ' => 'ae',
        'ǽ' => 'ae',
        'À' => 'A',
        'Á' => 'A',
        'Â' => 'A',
        'Ã' => 'A',
        'Å' => 'AA',
        'Ǻ' => 'A',
        'Ă' => 'A',
        'Ǎ' => 'A',
        'Æ' => 'AE',
        'Ǽ' => 'AE',
        'à' => 'a',
        'á' => 'a',
        'â' => 'a',
        'ã' => 'a',
        'å' => 'aa',
        'ǻ' => 'a',
        'ă' => 'a',
        'ǎ' => 'a',
        'ª' => 'a',
        'Ĉ' => 'C',
        'Ċ' => 'C',
        'Ç' => 'C',
        'ç' => 'c',
        'ĉ' => 'c',
        'ċ' => 'c',
        'Ð' => 'Dj',
        'Đ' => 'D',
        'ð' => 'dj',
        'đ' => 'd',
        'È' => 'E',
        'É' => 'E',
        'Ê' => 'E',
        'Ë' => 'E',
        'Ĕ' => 'E',
        'Ė' => 'E',
        'è' => 'e',
        'é' => 'e',
        'ê' => 'e',
        'ë' => 'e',
        'ĕ' => 'e',
        'ė' => 'e',
        'ƒ' => 'f',
        'Ĝ' => 'G',
        'Ġ' => 'G',
        'ĝ' => 'g',
        'ġ' => 'g',
        'Ĥ' => 'H',
        'Ħ' => 'H',
        'ĥ' => 'h',
        'ħ' => 'h',
        'Ì' => 'I',
        'Í' => 'I',
        'Î' => 'I',
        'Ï' => 'I',
        'Ĩ' => 'I',
        'Ĭ' => 'I',
        'Ǐ' => 'I',
        'Į' => 'I',
        'Ĳ' => 'IJ',
        'ì' => 'i',
        'í' => 'i',
        'î' => 'i',
        'ï' => 'i',
        'ĩ' => 'i',
        'ĭ' => 'i',
        'ǐ' => 'i',
        'į' => 'i',
        'ĳ' => 'ij',
        'Ĵ' => 'J',
        'ĵ' => 'j',
        'Ĺ' => 'L',
        'Ľ' => 'L',
        'Ŀ' => 'L',
        'ĺ' => 'l',
        'ľ' => 'l',
        'ŀ' => 'l',
        'Ñ' => 'N',
        'ñ' => 'n',
        'ŉ' => 'n',
        'Ò' => 'O',
        'Ó' => 'O',
        'Ô' => 'O',
        'Õ' => 'O',
        'Ō' => 'O',
        'Ŏ' => 'O',
        'Ǒ' => 'O',
        'Ő' => 'O',
        'Ơ' => 'O',
        'Ø' => 'OE',
        'Ǿ' => 'O',
        'Œ' => 'OE',
        'ò' => 'o',
        'ó' => 'o',
        'ô' => 'o',
        'õ' => 'o',
        'ō' => 'o',
        'ŏ' => 'o',
        'ǒ' => 'o',
        'ő' => 'o',
        'ơ' => 'o',
        'ø' => 'oe',
        'ǿ' => 'o',
        'º' => 'o',
        'œ' => 'oe',
        'Ŕ' => 'R',
        'Ŗ' => 'R',
        'ŕ' => 'r',
        'ŗ' => 'r',
        'Ŝ' => 'S',
        'Ș' => 'S',
        'ŝ' => 's',
        'ș' => 's',
        'ſ' => 's',
        'Ţ' => 'T',
        'Ț' => 'T',
        'Ŧ' => 'T',
        'Þ' => 'TH',
        'ţ' => 't',
        'ț' => 't',
        'ŧ' => 't',
        'þ' => 'th',
        'Ù' => 'U',
        'Ú' => 'U',
        'Û' => 'U',
        'Ü' => 'U',
        'Ũ' => 'U',
        'Ŭ' => 'U',
        'Ű' => 'U',
        'Ų' => 'U',
        'Ư' => 'U',
        'Ǔ' => 'U',
        'Ǖ' => 'U',
        'Ǘ' => 'U',
        'Ǚ' => 'U',
        'Ǜ' => 'U',
        'ù' => 'u',
        'ú' => 'u',
        'û' => 'u',
        'ü' => 'u',
        'ũ' => 'u',
        'ŭ' => 'u',
        'ű' => 'u',
        'ų' => 'u',
        'ư' => 'u',
        'ǔ' => 'u',
        'ǖ' => 'u',
        'ǘ' => 'u',
        'ǚ' => 'u',
        'ǜ' => 'u',
        'Ŵ' => 'W',
        'ŵ' => 'w',
        'Ý' => 'Y',
        'Ÿ' => 'Y',
        'Ŷ' => 'Y',
        'ý' => 'y',
        'ÿ' => 'y',
        'ŷ' => 'y',
    ],
    // Greek(lish) (Elláda)
    'el__greeklish' => [
        'ΑΥ' => 'AU',
        'ΑΎ' => 'AU',
        'Αυ' => 'Au',
        'Αύ' => 'Au',
        'ΕΊ' => 'EI',
        'ΕΙ' => 'EI',
        'Ει' => 'EI',
        'ΕΥ' => 'EU',
        'ΕΎ' => 'EU',
        'Εί' => 'Ei',
        'Ευ' => 'Eu',
        'Εύ' => 'Eu',
        'ΟΙ' => 'OI',
        'ΟΊ' => 'OI',
        'ΟΥ' => 'OU',
        'ΟΎ' => 'OU',
        'Οι' => 'Oi',
        'Οί' => 'Oi',
        'Ου' => 'Ou',
        'Ού' => 'Ou',
        'ΥΙ' => 'YI',
        'ΎΙ' => 'YI',
        'Υι' => 'Yi',
        'Ύι' => 'Yi',
        'ΥΊ' => 'Yi',
        'Υί' => 'Yi',
        'αυ' => 'au',
        'αύ' => 'au',
        'εί' => 'ei',
        'ει' => 'ei',
        'ευ' => 'eu',
        'εύ' => 'eu',
        'οι' => 'oi',
        'οί' => 'oi',
        'ου' => 'ou',
        'ού' => 'ou',
        'υι' => 'yi',
        'ύι' => 'yi',
        'υί' => 'yi',
        'Α'  => 'A',
        'Ά'  => 'A',
        'Β'  => 'B',
        'Δ'  => 'D',
        'Ε'  => 'E',
        'Έ'  => 'E',
        'Φ'  => 'F',
        'Γ'  => 'G',
        'Η'  => 'H',
        'Ή'  => 'H',
        'Ι'  => 'I',
        'Ί'  => 'I',
        'Ϊ'  => 'I',
        'Κ'  => 'K',
        'Ξ'  => 'Ks',
        'Λ'  => 'L',
        'Μ'  => 'M',
        'Ν'  => 'N',
        'Π'  => 'N',
        'Ο'  => 'O',
        'Ό'  => 'O',
        'Ψ'  => 'Ps',
        'Ρ'  => 'R',
        'Σ'  => 'S',
        'Τ'  => 'T',
        'Θ'  => 'Th',
        'Ω'  => 'W',
        'Ώ'  => 'W',
        'Χ'  => 'X',
        'ϒ'  => 'Y',
        'Υ'  => 'Y',
        'Ύ'  => 'Y',
        'Ϋ'  => 'Y',
        'Ζ'  => 'Z',
        'α'  => 'a',
        'ά'  => 'a',
        'β'  => 'b',
        'δ'  => 'd',
        'ε'  => 'e',
        'έ'  => 'e',
        'φ'  => 'f',
        'γ'  => 'g',
        'η'  => 'h',
        'ή'  => 'h',
        'ι'  => 'i',
        'ί'  => 'i',
        'ϊ'  => 'i',
        'ΐ'  => 'i',
        'κ'  => 'k',
        'ξ'  => 'ks',
        'λ'  => 'l',
        'μ'  => 'm',
        'ν'  => 'n',
        'ο'  => 'o',
        'ό'  => 'o',
        'π'  => 'p',
        'ψ'  => 'ps',
        'ρ'  => 'r',
        'σ'  => 's',
        'ς'  => 's',
        'τ'  => 't',
        'ϑ'  => 'th',
        'θ'  => 'th',
        'ϐ'  => 'v',
        'ω'  => 'w',
        'ώ'  => 'w',
        'χ'  => 'x',
        'υ'  => 'y',
        'ύ'  => 'y',
        'ΰ'  => 'y',
        'ϋ'  => 'y',
        'ζ'  => 'z',
    ],
    // Greek (Elláda)
    'el' => [
        'ΑΥ' => 'AU',
        'Αυ' => 'Au',
        'ΟΥ' => 'U',
        'Ου' => 'u',
        'ΕΥ' => 'EF',
        'Ευ' => 'Ef',
        'ΕΙ' => 'I',
        'Ει' => 'I',
        'ΟΙ' => 'I',
        'Οι' => 'I',
        'ΥΙ' => 'I',
        'Υι' => 'I',
        'ΑΎ' => 'AU',
        'Αύ' => 'Au',
        'ΟΎ' => 'OU',
        'Ού' => 'Ou',
        'ΕΎ' => 'EU',
        'Εύ' => 'Eu',
        'ΕΊ' => 'I',
        'Εί' => 'I',
        'ΟΊ' => 'I',
        'Οί' => 'I',
        'ΎΙ' => 'I',
        'Ύι' => 'I',
        'ΥΊ' => 'I',
        'Υί' => 'I',
        'αυ' => 'au',
        'ου' => 'u',
        'ευ' => 'ef',
        'ει' => 'i',
        'οι' => 'i',
        'υι' => 'i',
        'αύ' => 'au',
        'ού' => 'ou',
        'εύ' => 'eu',
        'εί' => 'i',
        'οί' => 'i',
        'ύι' => 'i',
        'υί' => 'i',
        'α'  => 'a',
        'β'  => 'v',
        'γ'  => 'gh',
        'δ'  => 'd',
        'ε'  => 'e',
        'ζ'  => 'z',
        'η'  => 'i',
        'θ'  => 'th',
        'ι'  => 'i',
        'κ'  => 'k',
        'λ'  => 'l',
        'μ'  => 'm',
        'ν'  => 'n',
        'ξ'  => 'ks',
        'ο'  => 'o',
        'π'  => 'p',
        'ρ'  => 'r',
        'σ'  => 's',
        'τ'  => 't',
        'υ'  => 'i',
        'φ'  => 'f',
        'χ'  => 'kh',
        'ψ'  => 'ps',
        'ω'  => 'o',
        'ά'  => 'a',
        'έ'  => 'e',
        'ί'  => 'i',
        'ό'  => 'o',
        'ϒ'  => 'Y',
        'ύ'  => 'y',
        'ή'  => 'i',
        'ώ'  => 'w',
        'ς'  => 's',
        'ϊ'  => 'i',
        'ΰ'  => 'y',
        'ϋ'  => 'y',
        'ΐ'  => 'i',
        'Α'  => 'A',
        'Β'  => 'B',
        'Γ'  => 'G',
        'Δ'  => 'D',
        'Ε'  => 'E',
        'Ζ'  => 'Z',
        'Η'  => 'H',
        'Θ'  => 'Th',
        'Ι'  => 'I',
        'Κ'  => 'K',
        'Λ'  => 'L',
        'Μ'  => 'M',
        'Ν'  => 'N',
        'Ξ'  => 'Ks',
        'Ο'  => 'O',
        'Π'  => 'P',
        'Ρ'  => 'R',
        'Σ'  => 'S',
        'Τ'  => 'T',
        'Υ'  => 'Y',
        'Φ'  => 'F',
        'Χ'  => 'X',
        'Ψ'  => 'Ps',
        'Ω'  => 'O',
        'Ά'  => 'A',
        'Έ'  => 'E',
        'Ί'  => 'I',
        'Ό'  => 'O',
        'Ύ'  => 'Y',
        'Ή'  => 'I',
        'Ώ'  => 'W',
        'Ϊ'  => 'I',
        'Ϋ'  => 'Y',
        'ϐ'  => 'v',
        'ϑ'  => 'th',
    ],
    // Hindi
    'hi' => [
        'अ'  => 'a',
        'आ'  => 'aa',
        'ए'  => 'e',
        'ई'  => 'ii',
        'ऍ'  => 'ei',
        'ऎ'  => 'ae',
        'ऐ'  => 'ai',
        'इ'  => 'i',
        'ओ'  => 'o',
        'ऑ'  => 'oi',
        'ऒ'  => 'oii',
        'ऊ'  => 'uu',
        'औ'  => 'ou',
        'उ'  => 'u',
        'ब'  => 'B',
        'भ'  => 'Bha',
        'च'  => 'Ca',
        'छ'  => 'Chha',
        'ड'  => 'Da',
        'ढ'  => 'Dha',
        'फ'  => 'Fa',
        'फ़' => 'Fi',
        'ग'  => 'Ga',
        'घ'  => 'Gha',
        'ग़' => 'Ghi',
        'ह'  => 'Ha',
        'ज'  => 'Ja',
        'झ'  => 'Jha',
        'क'  => 'Ka',
        'ख'  => 'Kha',
        'ख़' => 'Khi',
        'ल'  => 'L',
        'ळ'  => 'Li',
        'ऌ'  => 'Li',
        'ऴ'  => 'Lii',
        'ॡ'  => 'Lii',
        'म'  => 'Ma',
        'न'  => 'Na',
        'ङ'  => 'Na',
        'ञ'  => 'Nia',
        'ण'  => 'Nae',
        'ऩ'  => 'Ni',
        'ॐ'  => 'oms',
        'प'  => 'Pa',
        'क़' => 'Qi',
        'र'  => 'Ra',
        'ऋ'  => 'Ri',
        'ॠ'  => 'Ri',
        'ऱ'  => 'Ri',
        'स'  => 'Sa',
        'श'  => 'Sha',
        'ष'  => 'Shha',
        'ट'  => 'Ta',
        'त'  => 'Ta',
        'ठ'  => 'Tha',
        'द'  => 'Tha',
        'थ'  => 'Tha',
        'ध'  => 'Thha',
        'ड़' => 'ugDha',
        'ढ़' => 'ugDhha',
        'व'  => 'Va',
        'य'  => 'Ya',
        'य़' => 'Yi',
        'ज़' => 'Za',
    ],
    // Armenian
    'hy' => [
        'Ա' => 'A',
        'Բ' => 'B',
        'Գ' => 'G',
        'Դ' => 'D',
        'Ե' => 'E',
        'Զ' => 'Z',
        'Է' => 'E',
        'Ը' => 'Y',
        'Թ' => 'Th',
        'Ժ' => 'Zh',
        'Ի' => 'I',
        'Լ' => 'L',
        'Խ' => 'Kh',
        'Ծ' => 'Ts',
        'Կ' => 'K',
        'Հ' => 'H',
        'Ձ' => 'Dz',
        'Ղ' => 'Gh',
        'Ճ' => 'Tch',
        'Մ' => 'M',
        'Յ' => 'Y',
        'Ն' => 'N',
        'Շ' => 'Sh',
        'Ո' => 'Vo',
        'Չ' => 'Ch',
        'Պ' => 'P',
        'Ջ' => 'J',
        'Ռ' => 'R',
        'Ս' => 'S',
        'Վ' => 'V',
        'Տ' => 'T',
        'Ր' => 'R',
        'Ց' => 'C',
        'Ւ' => 'u',
        'Փ' => 'Ph',
        'Ք' => 'Q',
        'և' => 'ev',
        'Օ' => 'O',
        'Ֆ' => 'F',
        'ա' => 'a',
        'բ' => 'b',
        'գ' => 'g',
        'դ' => 'd',
        'ե' => 'e',
        'զ' => 'z',
        'է' => 'e',
        'ը' => 'y',
        'թ' => 'th',
        'ժ' => 'zh',
        'ի' => 'i',
        'լ' => 'l',
        'խ' => 'kh',
        'ծ' => 'ts',
        'կ' => 'k',
        'հ' => 'h',
        'ձ' => 'dz',
        'ղ' => 'gh',
        'ճ' => 'tch',
        'մ' => 'm',
        'յ' => 'y',
        'ն' => 'n',
        'շ' => 'sh',
        'ո' => 'vo',
        'չ' => 'ch',
        'պ' => 'p',
        'ջ' => 'j',
        'ռ' => 'r',
        'ս' => 's',
        'վ' => 'v',
        'տ' => 't',
        'ր' => 'r',
        'ց' => 'c',
        'ւ' => 'u',
        'փ' => 'ph',
        'ք' => 'q',
        'օ' => 'o',
        'ֆ' => 'f',
    ],
    // Swedish
    'sv' => [
        'Ä' => 'A',
        'ä' => 'a',
        'Å' => 'A',
        'å' => 'a',
        'Ö' => 'O',
        'ö' => 'o',
    ],
    // Turkmen
    'tk' => [
        'Ç' => 'C',
        'Ä' => 'A',
        'Ž' => 'Z',
        'Ň' => 'N',
        'Ö' => 'O',
        'Ş' => 'S',
        'Ü' => 'U',
        'Ý' => 'Y',
        'ç' => 'c',
        'ä' => 'a',
        'ž' => 'z',
        'ň' => 'n',
        'ö' => 'o',
        'ş' => 's',
        'ü' => 'u',
        'ý' => 'y',
    ],
    // Turkish
    'tr' => [
        'ň' => 'n',
        'Ň' => 'N',
        'ş' => 's',
        'Ş' => 'S',
        'ı' => 'i',
        'İ' => 'I',
        'ç' => 'c',
        'Ç' => 'C',
        'ä' => 'a',
        'Ä' => 'A',
        'ü' => 'u',
        'Ü' => 'U',
        'ö' => 'o',
        'Ö' => 'O',
        'ğ' => 'g',
        'Ğ' => 'G',
        'ý' => 'y',
        'Ý' => 'Y',
        'ž' => 'z',
        'Ž' => 'Z',
    ],
    // Bulgarian
    'bg' => [
        'ьо' => 'yo',
        'А'  => 'A',
        'Б'  => 'B',
        'В'  => 'V',
        'Г'  => 'G',
        'Д'  => 'D',
        'Е'  => 'E',
        'Ж'  => 'Zh',
        'З'  => 'Z',
        'И'  => 'I',
        'Й'  => 'Y',
        'К'  => 'K',
        'Л'  => 'L',
        'М'  => 'M',
        'Н'  => 'N',
        'О'  => 'O',
        'П'  => 'P',
        'Р'  => 'R',
        'С'  => 'S',
        'Т'  => 'T',
        'У'  => 'U',
        'Ф'  => 'F',
        'Х'  => 'H',
        'Ц'  => 'C',
        'Ч'  => 'Ch',
        'Ш'  => 'Sh',
        'Щ'  => 'Sht',
        'Ъ'  => 'A',
        'Ь'  => '',
        'Ю'  => 'Yu',
        'Я'  => 'Ya',
        'а'  => 'a',
        'б'  => 'b',
        'в'  => 'v',
        'г'  => 'g',
        'д'  => 'd',
        'е'  => 'e',
        'ж'  => 'zh',
        'з'  => 'z',
        'и'  => 'i',
        'й'  => 'y',
        'к'  => 'k',
        'л'  => 'l',
        'м'  => 'm',
        'н'  => 'n',
        'о'  => 'o',
        'п'  => 'p',
        'р'  => 'r',
        'с'  => 's',
        'т'  => 't',
        'у'  => 'u',
        'ф'  => 'f',
        'х'  => 'h',
        'ц'  => 'c',
        'ч'  => 'ch',
        'ш'  => 'sh',
        'щ'  => 'sht',
        'ъ'  => 'a',
        'ь'  => '',
        'ю'  => 'yu',
        'я'  => 'ya',
    ],
    // Hungarian
    'hu' => [
        'Á' => 'A',
        'Ē' => 'E',
        'É' => 'E',
        'Í' => 'I',
        'Ó' => 'O',
        'Ö' => 'O',
        'Ő' => 'O',
        'Ú' => 'U',
        'Ü' => 'U',
        'Ű' => 'U',
        'á' => 'a',
        'ē' => 'e',
        'é' => 'e',
        'í' => 'i',
        'ó' => 'o',
        'ö' => 'o',
        'ő' => 'o',
        'ú' => 'u',
        'ü' => 'u',
        'ű' => 'u',
    ],
    // Myanmar (Burmese)
    'my' => [
        'န်ုပ်' => 'nub',
        'ောင်'  => 'aung',
        'ိုက်'  => 'aik',
        'ိုဒ်'  => 'ok',
        'ိုင်'  => 'aing',
        'ိုလ်'  => 'ol',
        'ေါင်'  => 'aung',
        'သြော'  => 'aw',
        'ောက်'  => 'auk',
        'ိတ်'   => 'eik',
        'ုတ်'   => 'ok',
        'ုန်'   => 'on',
        'ေတ်'   => 'it',
        'ုဒ်'   => 'ait',
        'ာန်'   => 'an',
        'ိန်'   => 'ein',
        'ွတ်'   => 'ut',
        'ေါ်'   => 'aw',
        'ွန်'   => 'un',
        'ိပ်'   => 'eik',
        'ုပ်'   => 'ok',
        'ွပ်'   => 'ut',
        'ိမ်'   => 'ein',
        'ုမ်'   => 'on',
        'ော်'   => 'aw',
        'ွမ်'   => 'un',
        'က်'    => 'et',
        'ေါ'    => 'aw',
        'ော'    => 'aw',
        'ျွ'    => 'ywa',
        'ြွ'    => 'yw',
        'ို'    => 'o',
        'ုံ'    => 'on',
        'တ်'    => 'at',
        'င်'    => 'in',
        'ည်'    => 'i',
        'ဒ်'    => 'd',
        'န်'    => 'an',
        'ပ်'    => 'at',
        'မ်'    => 'an',
        'စျ'    => 'za',
        'ယ်'    => 'e',
        'ဉ်'    => 'in',
        'စ်'    => 'it',
        'ိံ'    => 'ein',
        'ဲ'     => 'e',
        'း'     => '',
        'ာ'     => 'a',
        'ါ'     => 'a',
        'ေ'     => 'e',
        'ံ'     => 'an',
        'ိ'     => 'i',
        'ီ'     => 'i',
        'ု'     => 'u',
        'ူ'     => 'u',
        '်'     => 'at',
        '္'     => '',
        '့'     => '',
        'က'     => 'k',
        '၉'     => '9',
        'တ'     => 't',
        'ရ'     => 'ya',
        'ယ'     => 'y',
        'မ'     => 'm',
        'ဘ'     => 'ba',
        'ဗ'     => 'b',
        'ဖ'     => 'pa',
        'ပ'     => 'p',
        'န'     => 'n',
        'ဓ'     => 'da',
        'ဒ'     => 'd',
        'ထ'     => 'ta',
        'ဏ'     => 'na',
        'ဝ'     => 'w',
        'ဎ'     => 'da',
        'ဍ'     => 'd',
        'ဌ'     => 'ta',
        'ဋ'     => 't',
        'ည'     => 'ny',
        'ဇ'     => 'z',
        'ဆ'     => 'sa',
        'စ'     => 's',
        'င'     => 'ng',
        'ဃ'     => 'ga',
        'ဂ'     => 'g',
        'လ'     => 'l',
        'သ'     => 'th',
        '၈'     => '8',
        'ဩ'     => 'aw',
        'ခ'     => 'kh',
        '၆'     => '6',
        '၅'     => '5',
        '၄'     => '4',
        '၃'     => '3',
        '၂'     => '2',
        '၁'     => '1',
        '၀'     => '0',
        '၌'     => 'hnaik',
        '၍'     => 'ywae',
        'ဪ'     => 'aw',
        'ဦ'     => '-u',
        'ဟ'     => 'h',
        'ဉ'     => 'u',
        'ဤ'     => '-i',
        'ဣ'     => 'i',
        '၏'     => '-e',
        'ဧ'     => 'e',
        'ှ'     => 'h',
        'ွ'     => 'w',
        'ျ'     => 'ya',
        'ြ'     => 'y',
        'အ'     => 'a',
        'ဠ'     => 'la',
        '၇'     => '7',
    ],
    // Croatian (Hrvatska)
    'hr' => [
        'DŽ' => 'DZ',
        'Dž' => 'Dz',
        'dž' => 'dz',
        'Ǳ'  => 'DZ',
        'ǲ'  => 'Dz',
        'ǳ'  => 'dz',
        'Ĳ'  => 'IJ',
        'ĳ'  => 'ij',
        'Ǉ'  => 'LJ',
        'ǈ'  => 'Lj',
        'ǉ'  => 'lj',
        'Ǌ'  => 'NJ',
        'ǋ'  => 'Nj',
        'ǌ'  => 'nj',
        'ž'  => 'z',
        'Ž'  => 'Z',
        'đ'  => 'dj',
        'Đ'  => 'Dj',
        'č'  => 'c',
        'Č'  => 'C',
        'ć'  => 'c',
        'Ć'  => 'C',
        'š'  => 's',
        'Š'  => 'S',
    ],
    // Finnish
    'fi' => [
        'Ä' => 'A',
        'Ö' => 'O',
        'ä' => 'a',
        'ö' => 'o',
    ],
    // Georgian (Kartvelian)
    'ka' => [
        'ა' => 'a',
        'ბ' => 'b',
        'გ' => 'g',
        'დ' => 'd',
        'ე' => 'e',
        'ვ' => 'v',
        'ზ' => 'z',
        'თ' => 't',
        'ი' => 'i',
        'კ' => 'k',
        'ლ' => 'l',
        'მ' => 'm',
        'ნ' => 'n',
        'ო' => 'o',
        'პ' => 'p',
        'ჟ' => 'zh',
        'რ' => 'r',
        'ს' => 's',
        'ტ' => 't',
        'უ' => 'u',
        'ფ' => 'f',
        'ქ' => 'q',
        'ღ' => 'gh',
        'ყ' => 'y',
        'შ' => 'sh',
        'ჩ' => 'ch',
        'ც' => 'ts',
        'ძ' => 'dz',
        'წ' => 'ts',
        'ჭ' => 'ch',
        'ხ' => 'kh',
        'ჯ' => 'j',
        'ჰ' => 'h',
    ],
    // Russian
    'ru' => [
        'А' => 'A',
        'а' => 'a',
        'Б' => 'B',
        'б' => 'b',
        'В' => 'V',
        'в' => 'v',
        'Г' => 'G',
        'г' => 'g',
        'Д' => 'D',
        'д' => 'd',
        'Е' => 'E',
        'е' => 'e',
        'Ё' => 'Yo',
        'ё' => 'yo',
        'Ж' => 'Zh',
        'ж' => 'zh',
        'З' => 'Z',
        'з' => 'z',
        'И' => 'I',
        'и' => 'i',
        'Й' => 'Y',
        'й' => 'y',
        'К' => 'K',
        'к' => 'k',
        'Л' => 'L',
        'л' => 'l',
        'М' => 'M',
        'м' => 'm',
        'Н' => 'N',
        'н' => 'n',
        'О' => 'O',
        'о' => 'o',
        'П' => 'P',
        'п' => 'p',
        'Р' => 'R',
        'р' => 'r',
        'С' => 'S',
        'с' => 's',
        'Т' => 'T',
        'т' => 't',
        'У' => 'U',
        'у' => 'u',
        'Ф' => 'F',
        'ф' => 'f',
        'Х' => 'H',
        'х' => 'h',
        'Ц' => 'Ts',
        'ц' => 'ts',
        'Ч' => 'Ch',
        'ч' => 'ch',
        'ш' => 'sh',
        'Ш' => 'Sh',
        'Щ' => 'Sch',
        'щ' => 'sch',
        'Ъ' => '',
        'ъ' => '',
        'Ы' => 'Y',
        'ы' => 'y',
        'Ь' => '',
        'ь' => '',
        'Э' => 'E',
        'э' => 'e',
        'Ю' => 'Yu',
        'ю' => 'yu',
        'Я' => 'Ya',
        'я' => 'ya',
    ],
    // Russian - GOST 7.79-2000(B)
    // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1
    'ru__gost_2000_b' => [
        'А' => 'A',
        'а' => 'a',
        'Б' => 'B',
        'б' => 'b',
        'В' => 'V',
        'в' => 'v',
        'Г' => 'G',
        'г' => 'g',
        'Д' => 'D',
        'д' => 'd',
        'Е' => 'E',
        'е' => 'e',
        'Ё' => 'Yo',
        'ё' => 'yo',
        'Ж' => 'Zh',
        'ж' => 'zh',
        'З' => 'Z',
        'з' => 'z',
        'И' => 'i',
        'и' => 'i',
        'Й' => 'i',
        'й' => 'i',
        'К' => 'K',
        'к' => 'k',
        'Л' => 'L',
        'л' => 'l',
        'М' => 'M',
        'м' => 'm',
        'Н' => 'N',
        'н' => 'n',
        'О' => 'O',
        'о' => 'o',
        'П' => 'P',
        'п' => 'p',
        'Р' => 'R',
        'р' => 'r',
        'С' => 'S',
        'с' => 's',
        'Т' => 'T',
        'т' => 't',
        'У' => 'U',
        'у' => 'u',
        'Ф' => 'F',
        'ф' => 'f',
        'Х' => 'X',
        'х' => 'x',
        'Ц' => 'Cz',
        'ц' => 'cz',
        'Ч' => 'Ch',
        'ч' => 'ch',
        'ш' => 'sh',
        'Ш' => 'Sh',
        'Щ' => 'Shh',
        'щ' => 'shh',
        'Ъ' => '',
        'ъ' => '',
        'Ы' => 'Y\'',
        'ы' => 'y\'',
        'Ь' => '',
        'ь' => '',
        'Э' => 'E\'',
        'э' => 'e\'',
        'Ю' => 'Yu',
        'ю' => 'yu',
        'Я' => 'Ya',
        'я' => 'ya',
        'І' => 'I',
        'і' => 'i',
        'Ѳ' => 'Fh',
        'ѳ' => 'fh',
        'Ѣ' => 'Ye',
        'ѣ' => 'ye',
        'Ѵ' => 'Yh',
        'ѵ' => 'yh',
        'Є' => '',
        'є' => '',
        'Ѥ' => '',
        'ѥ' => '',
        'Ѕ' => 'Js',
        'ѕ' => 'js',
        'Ꙋ' => '',
        'ꙋ' => '',
        'Ѡ' => '',
        'ѡ' => '',
        'Ѿ' => '',
        'ѿ' => '',
        'Ѫ' => '',
        'ѫ' => '',
        'Ѧ' => '',
        'ѧ' => '',
        'Ѭ' => '',
        'ѭ' => '',
        'Ѩ' => '',
        'ѩ' => '',
        'Ѯ' => '',
        'ѯ' => '',
        'Ѱ' => '',
        'ѱ' => '',
    ],
    // Russian - Passport (2013), ICAO
    // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1
    'ru__passport_2013' => [
        'А' => 'A',
        'а' => 'a',
        'Б' => 'B',
        'б' => 'b',
        'В' => 'V',
        'в' => 'v',
        'Г' => 'G',
        'г' => 'g',
        'Д' => 'D',
        'д' => 'd',
        'Е' => 'E',
        'е' => 'e',
        'Ё' => 'E',
        'ё' => 'e',
        'Ж' => 'Zh',
        'ж' => 'zh',
        'З' => 'Z',
        'з' => 'z',
        'И' => 'i',
        'и' => 'i',
        'Й' => 'i',
        'й' => 'i',
        'К' => 'K',
        'к' => 'k',
        'Л' => 'L',
        'л' => 'l',
        'М' => 'M',
        'м' => 'm',
        'Н' => 'N',
        'н' => 'n',
        'О' => 'O',
        'о' => 'o',
        'П' => 'P',
        'п' => 'p',
        'Р' => 'R',
        'р' => 'r',
        'С' => 'S',
        'с' => 's',
        'Т' => 'T',
        'т' => 't',
        'У' => 'U',
        'у' => 'u',
        'Ф' => 'F',
        'ф' => 'f',
        'Х' => 'Kh',
        'х' => 'kh',
        'Ц' => 'Ts',
        'ц' => 'ts',
        'Ч' => 'Ch',
        'ч' => 'ch',
        'ш' => 'sh',
        'Ш' => 'Sh',
        'Щ' => 'Shch',
        'щ' => 'shch',
        'Ъ' => 'Ie',
        'ъ' => 'ie',
        'Ы' => 'Y',
        'ы' => 'y',
        'Ь' => '',
        'ь' => '',
        'Э' => 'E',
        'э' => 'e',
        'Ю' => 'Iu',
        'ю' => 'iu',
        'Я' => 'Ia',
        'я' => 'ia',
        'І' => '',
        'і' => '',
        'Ѳ' => '',
        'ѳ' => '',
        'Ѣ' => '',
        'ѣ' => '',
        'Ѵ' => '',
        'ѵ' => '',
        'Є' => '',
        'є' => '',
        'Ѥ' => '',
        'ѥ' => '',
        'Ѕ' => '',
        'ѕ' => '',
        'Ꙋ' => '',
        'ꙋ' => '',
        'Ѡ' => '',
        'ѡ' => '',
        'Ѿ' => '',
        'ѿ' => '',
        'Ѫ' => '',
        'ѫ' => '',
        'Ѧ' => '',
        'ѧ' => '',
        'Ѭ' => '',
        'ѭ' => '',
        'Ѩ' => '',
        'ѩ' => '',
        'Ѯ' => '',
        'ѯ' => '',
        'Ѱ' => '',
        'ѱ' => '',
    ],
    // Ukrainian
    // -> https://zakon.rada.gov.ua/laws/show/55-2010-%D0%BF?lang=en
    'uk' => [
        'Г' => 'H',
        'г' => 'h',
        'Ґ' => 'G',
        'ґ' => 'g',
        'Є' => 'Ye',
        'є' => 'ye',
        'И' => 'Y',
        'и' => 'y',
        'І' => 'I',
        'і' => 'i',
        'Ї' => 'Yi',
        'ї' => 'yi',
        'Й' => 'Y',
        'й' => 'y',
        'Х' => 'Kh',
        'х' => 'kh',
        'Ц' => 'Ts',
        'ц' => 'ts',
        'Ч' => 'Ch',
        'ч' => 'ch',
        'Ш' => 'Sh',
        'ш' => 'sh',
        'Щ' => 'Shch',
        'щ' => 'shch',
    ],
    // Kazakh
    'kk' => [
        'Ә' => 'A',
        'Ғ' => 'G',
        'Қ' => 'Q',
        'Ң' => 'N',
        'Ө' => 'O',
        'Ұ' => 'U',
        'Ү' => 'U',
        'Һ' => 'H',
        'ә' => 'a',
        'ғ' => 'g',
        'қ' => 'q',
        'ң' => 'n',
        'ө' => 'o',
        'ұ' => 'u',
        'ү' => 'u',
        'һ' => 'h',
    ],
    // Czech
    'cs' => [
        'á' => 'a',
        'Á' => 'A',
        'č' => 'c',
        'Č' => 'C',
        'ď' => 'd',
        'Ď' => 'D',
        'é' => 'e',
        'É' => 'E',
        'ě' => 'e',
        'Ě' => 'E',
        'í' => 'i',
        'Í' => 'I',
        'ň' => 'n',
        'Ň' => 'N',
        'ó' => 'o',
        'Ó' => 'O',
        'ř' => 'r',
        'Ř' => 'R',
        'š' => 's',
        'Š' => 'S',
        'ť' => 't',
        'Ť' => 'T',
        'ú' => 'u',
        'Ú' => 'U',
        'ů' => 'u',
        'Ů' => 'U',
        'ý' => 'y',
        'Ý' => 'Y',
        'ž' => 'z',
        'Ž' => 'Z',
    ],
    // Danish
    'da' => [
        'Æ' => 'Ae',
        'æ' => 'ae',
        'Ø' => 'Oe',
        'ø' => 'oe',
        'Å' => 'Aa',
        'å' => 'aa',
        'É' => 'E',
        'é' => 'e',
    ],
    // Polish
    'pl' => [
        'ą' => 'a',
        'ć' => 'c',
        'ę' => 'e',
        'ł' => 'l',
        'ń' => 'n',
        'ó' => 'o',
        'ś' => 's',
        'ź' => 'z',
        'ż' => 'z',
        'Ą' => 'A',
        'Ć' => 'C',
        'Ę' => 'E',
        'Ł' => 'L',
        'Ń' => 'N',
        'Ó' => 'O',
        'Ś' => 'S',
        'Ź' => 'Z',
        'Ż' => 'Z',
    ],
    // Romanian
    'ro' => [
        'ă' => 'a',
        'â' => 'a',
        'Ă' => 'A',
        'Â' => 'A',
        'î' => 'i',
        'Î' => 'I',
        'ș' => 's',
        'ş' => 's',
        'Ş' => 'S',
        'Ș' => 'S',
        'ț' => 't',
        'ţ' => 't',
        'Ţ' => 'T',
        'Ț' => 'T',
    ],
    // Esperanto
    'eo' => [
        'ĉ' => 'cx',
        'ĝ' => 'gx',
        'ĥ' => 'hx',
        'ĵ' => 'jx',
        'ŝ' => 'sx',
        'ŭ' => 'ux',
        'Ĉ' => 'CX',
        'Ĝ' => 'GX',
        'Ĥ' => 'HX',
        'Ĵ' => 'JX',
        'Ŝ' => 'SX',
        'Ŭ' => 'UX',
    ],
    // Estonian
    'et' => [
        'Š' => 'S',
        'Ž' => 'Z',
        'Õ' => 'O',
        'Ä' => 'A',
        'Ö' => 'O',
        'Ü' => 'U',
        'š' => 's',
        'ž' => 'z',
        'õ' => 'o',
        'ä' => 'a',
        'ö' => 'o',
        'ü' => 'u',
    ],
    // Latvian
    'lv' => [
        'ā' => 'a',
        'č' => 'c',
        'ē' => 'e',
        'ģ' => 'g',
        'ī' => 'i',
        'ķ' => 'k',
        'ļ' => 'l',
        'ņ' => 'n',
        'š' => 's',
        'ū' => 'u',
        'ž' => 'z',
        'Ā' => 'A',
        'Č' => 'C',
        'Ē' => 'E',
        'Ģ' => 'G',
        'Ī' => 'i',
        'Ķ' => 'k',
        'Ļ' => 'L',
        'Ņ' => 'N',
        'Š' => 'S',
        'Ū' => 'u',
        'Ž' => 'Z',
    ],
    // Lithuanian
    'lt' => [
        'ą' => 'a',
        'č' => 'c',
        'ę' => 'e',
        'ė' => 'e',
        'į' => 'i',
        'š' => 's',
        'ų' => 'u',
        'ū' => 'u',
        'ž' => 'z',
        'Ą' => 'A',
        'Č' => 'C',
        'Ę' => 'E',
        'Ė' => 'E',
        'Į' => 'I',
        'Š' => 'S',
        'Ų' => 'U',
        'Ū' => 'U',
        'Ž' => 'Z',
    ],
    // Norwegian
    'no' => [
        'Æ' => 'AE',
        'æ' => 'ae',
        'Ø' => 'OE',
        'ø' => 'oe',
        'Å' => 'AA',
        'å' => 'aa',
    ],
    // Vietnamese
    'vi' => [
        'Á' => 'A',
        'À' => 'A',
        'Ả' => 'A',
        'Ã' => 'A',
        'Ạ' => 'A',
        'Ă' => 'A',
        'Ắ' => 'A',
        'Ằ' => 'A',
        'Ẳ' => 'A',
        'Ẵ' => 'A',
        'Ặ' => 'A',
        'Â' => 'A',
        'Ấ' => 'A',
        'Ầ' => 'A',
        'Ẩ' => 'A',
        'Ẫ' => 'A',
        'Ậ' => 'A',
        'á' => 'a',
        'à' => 'a',
        'ả' => 'a',
        'ã' => 'a',
        'ạ' => 'a',
        'ă' => 'a',
        'ắ' => 'a',
        'ằ' => 'a',
        'ẳ' => 'a',
        'ẵ' => 'a',
        'ặ' => 'a',
        'â' => 'a',
        'ấ' => 'a',
        'ầ' => 'a',
        'ẩ' => 'a',
        'ẫ' => 'a',
        'ậ' => 'a',
        'É' => 'E',
        'È' => 'E',
        'Ẻ' => 'E',
        'Ẽ' => 'E',
        'Ẹ' => 'E',
        'Ê' => 'E',
        'Ế' => 'E',
        'Ề' => 'E',
        'Ể' => 'E',
        'Ễ' => 'E',
        'Ệ' => 'E',
        'é' => 'e',
        'è' => 'e',
        'ẻ' => 'e',
        'ẽ' => 'e',
        'ẹ' => 'e',
        'ê' => 'e',
        'ế' => 'e',
        'ề' => 'e',
        'ể' => 'e',
        'ễ' => 'e',
        'ệ' => 'e',
        'Í' => 'I',
        'Ì' => 'I',
        'Ỉ' => 'I',
        'Ĩ' => 'I',
        'Ị' => 'I',
        'í' => 'i',
        'ì' => 'i',
        'ỉ' => 'i',
        'ĩ' => 'i',
        'ị' => 'i',
        'Ó' => 'O',
        'Ò' => 'O',
        'Ỏ' => 'O',
        'Õ' => 'O',
        'Ọ' => 'O',
        'Ô' => 'O',
        'Ố' => 'O',
        'Ồ' => 'O',
        'Ổ' => 'O',
        'Ỗ' => 'O',
        'Ộ' => 'O',
        'Ơ' => 'O',
        'Ớ' => 'O',
        'Ờ' => 'O',
        'Ở' => 'O',
        'Ỡ' => 'O',
        'Ợ' => 'O',
        'ó' => 'o',
        'ò' => 'o',
        'ỏ' => 'o',
        'õ' => 'o',
        'ọ' => 'o',
        'ô' => 'o',
        'ố' => 'o',
        'ồ' => 'o',
        'ổ' => 'o',
        'ỗ' => 'o',
        'ộ' => 'o',
        'ơ' => 'o',
        'ớ' => 'o',
        'ờ' => 'o',
        'ở' => 'o',
        'ỡ' => 'o',
        'ợ' => 'o',
        'Ú' => 'U',
        'Ù' => 'U',
        'Ủ' => 'U',
        'Ũ' => 'U',
        'Ụ' => 'U',
        'Ư' => 'U',
        'Ứ' => 'U',
        'Ừ' => 'U',
        'Ử' => 'U',
        'Ữ' => 'U',
        'Ự' => 'U',
        'ú' => 'u',
        'ù' => 'u',
        'ủ' => 'u',
        'ũ' => 'u',
        'ụ' => 'u',
        'ư' => 'u',
        'ứ' => 'u',
        'ừ' => 'u',
        'ử' => 'u',
        'ữ' => 'u',
        'ự' => 'u',
        'Ý' => 'Y',
        'Ỳ' => 'Y',
        'Ỷ' => 'Y',
        'Ỹ' => 'Y',
        'Ỵ' => 'Y',
        'ý' => 'y',
        'ỳ' => 'y',
        'ỷ' => 'y',
        'ỹ' => 'y',
        'ỵ' => 'y',
        'Đ' => 'D',
        'đ' => 'd',
    ],
    // Persian (Farsi)
    'fa' => [
        'ا' => 'a',
        'ب' => 'b',
        'پ' => 'p',
        'ت' => 't',
        'ث' => 's',
        'ج' => 'j',
        'چ' => 'ch',
        'ح' => 'h',
        'خ' => 'kh',
        'د' => 'd',
        'ذ' => 'z',
        'ر' => 'r',
        'ز' => 'z',
        'س' => 's',
        'ش' => 'sh',
        'ص' => 's',
        'ض' => 'z',
        'ط' => 't',
        'ظ' => 'z',
        'ع' => 'a',
        'غ' => 'gh',
        'ف' => 'f',
        'ق' => 'gh',
        'ک' => 'k',
        'گ' => 'g',
        'ل' => 'l',
        'ژ' => 'zh',
        'ك' => 'k',
        'م' => 'm',
        'ن' => 'n',
        'ه' => 'h',
        'و' => 'o',
        'ی' => 'y',
        'آ' => 'a',
        '٠' => '0',
        '١' => '1',
        '٢' => '2',
        '٣' => '3',
        '٤' => '4',
        '٥' => '5',
        '٦' => '6',
        '٧' => '7',
        '٨' => '8',
        '٩' => '9',
    ],
    // Arabic
    'ar' => [
        'أ' => 'a',
        'ب' => 'b',
        'ت' => 't',
        'ث' => 'th',
        'ج' => 'g',
        'ح' => 'h',
        'خ' => 'kh',
        'د' => 'd',
        'ذ' => 'th',
        'ر' => 'r',
        'ز' => 'z',
        'س' => 's',
        'ش' => 'sh',
        'ص' => 's',
        'ض' => 'd',
        'ط' => 't',
        'ظ' => 'th',
        'ع' => 'aa',
        'غ' => 'gh',
        'ف' => 'f',
        'ق' => 'k',
        'ك' => 'k',
        'ل' => 'l',
        'م' => 'm',
        'ن' => 'n',
        'ه' => 'h',
        'و' => 'o',
        'ي' => 'y',
        'ا' => 'a',
        'إ' => 'a',
        'آ' => 'a',
        'ؤ' => 'o',
        'ئ' => 'y',
        'ء' => 'aa',
        '٠' => '0',
        '١' => '1',
        '٢' => '2',
        '٣' => '3',
        '٤' => '4',
        '٥' => '5',
        '٦' => '6',
        '٧' => '7',
        '٨' => '8',
        '٩' => '9',
    ],
    // Serbian
    'sr' => [
        'đ' => 'dj',
        'ž' => 'z',
        'ć' => 'c',
        'č' => 'c',
        'š' => 's',
        'Đ' => 'Dj',
        'Ž' => 'Z',
        'Ć' => 'C',
        'Č' => 'C',
        'Š' => 'S',
        'а' => 'a',
        'б' => 'b',
        'в' => 'v',
        'г' => 'g',
        'д' => 'd',
        'ђ' => 'dj',
        'е' => 'e',
        'ж' => 'z',
        'з' => 'z',
        'и' => 'i',
        'ј' => 'j',
        'к' => 'k',
        'л' => 'l',
        'љ' => 'lj',
        'м' => 'm',
        'н' => 'n',
        'њ' => 'nj',
        'о' => 'o',
        'п' => 'p',
        'р' => 'r',
        'с' => 's',
        'т' => 't',
        'ћ' => 'c',
        'у' => 'u',
        'ф' => 'f',
        'х' => 'h',
        'ц' => 'c',
        'ч' => 'c',
        'џ' => 'dz',
        'ш' => 's',
        'А' => 'A',
        'Б' => 'B',
        'В' => 'V',
        'Г' => 'G',
        'Д' => 'D',
        'Ђ' => 'Dj',
        'Е' => 'E',
        'Ж' => 'Z',
        'З' => 'Z',
        'И' => 'I',
        'Ј' => 'j',
        'К' => 'K',
        'Л' => 'L',
        'Љ' => 'Lj',
        'М' => 'M',
        'Н' => 'N',
        'Њ' => 'Nj',
        'О' => 'O',
        'П' => 'P',
        'Р' => 'R',
        'С' => 'S',
        'Т' => 'T',
        'Ћ' => 'C',
        'У' => 'U',
        'Ф' => 'F',
        'Х' => 'H',
        'Ц' => 'C',
        'Ч' => 'C',
        'Џ' => 'Dz',
        'Ш' => 'S',
    ],
    // Serbian - Cyrillic
    'sr__cyr' => [
        'а' => 'a',
        'б' => 'b',
        'в' => 'v',
        'г' => 'g',
        'д' => 'd',
        'ђ' => 'dj',
        'е' => 'e',
        'ж' => 'z',
        'з' => 'z',
        'и' => 'i',
        'ј' => 'j',
        'к' => 'k',
        'л' => 'l',
        'љ' => 'lj',
        'м' => 'm',
        'н' => 'n',
        'њ' => 'nj',
        'о' => 'o',
        'п' => 'p',
        'р' => 'r',
        'с' => 's',
        'т' => 't',
        'ћ' => 'c',
        'у' => 'u',
        'ф' => 'f',
        'х' => 'h',
        'ц' => 'c',
        'ч' => 'c',
        'џ' => 'dz',
        'ш' => 's',
        'А' => 'A',
        'Б' => 'B',
        'В' => 'V',
        'Г' => 'G',
        'Д' => 'D',
        'Ђ' => 'Dj',
        'Е' => 'E',
        'Ж' => 'Z',
        'З' => 'Z',
        'И' => 'I',
        'Ј' => 'j',
        'К' => 'K',
        'Л' => 'L',
        'Љ' => 'Lj',
        'М' => 'M',
        'Н' => 'N',
        'Њ' => 'Nj',
        'О' => 'O',
        'П' => 'P',
        'Р' => 'R',
        'С' => 'S',
        'Т' => 'T',
        'Ћ' => 'C',
        'У' => 'U',
        'Ф' => 'F',
        'Х' => 'H',
        'Ц' => 'C',
        'Ч' => 'C',
        'Џ' => 'Dz',
        'Ш' => 'S',
    ],
    // Serbian - Latin
    'sr__lat' => [
        'đ' => 'dj',
        'ž' => 'z',
        'ć' => 'c',
        'č' => 'c',
        'š' => 's',
        'Đ' => 'Dj',
        'Ž' => 'Z',
        'Ć' => 'C',
        'Č' => 'C',
        'Š' => 'S',
    ],
    // Azerbaijani
    'az' => [
        'ç' => 'c',
        'ə' => 'e',
        'ğ' => 'g',
        'ı' => 'i',
        'ö' => 'o',
        'ş' => 's',
        'ü' => 'u',
        'Ç' => 'C',
        'Ə' => 'E',
        'Ğ' => 'G',
        'İ' => 'I',
        'Ö' => 'O',
        'Ş' => 'S',
        'Ü' => 'U',
    ],
    // Slovak
    'sk' => [
        'á' => 'a',
        'ä' => 'a',
        'č' => 'c',
        'ď' => 'd',
        'é' => 'e',
        'í' => 'i',
        'ľ' => 'l',
        'ĺ' => 'l',
        'ň' => 'n',
        'ó' => 'o',
        'ô' => 'o',
        'ŕ' => 'r',
        'š' => 's',
        'ť' => 't',
        'ú' => 'u',
        'ý' => 'y',
        'ž' => 'z',
        'Á' => 'A',
        'Ä' => 'A',
        'Č' => 'C',
        'Ď' => 'D',
        'É' => 'E',
        'Í' => 'I',
        'Ľ' => 'L',
        'Ĺ' => 'L',
        'Ň' => 'N',
        'Ó' => 'O',
        'Ô' => 'O',
        'Ŕ' => 'R',
        'Š' => 'S',
        'Ť' => 'T',
        'Ú' => 'U',
        'Ý' => 'Y',
        'Ž' => 'Z',
    ],
    // French
    'fr' => [
        'Æ' => 'AE',
        'æ' => 'ae',
        'Œ' => 'OE',
        'œ' => 'oe',
        'â' => 'a',
        'Â' => 'A',
        'à' => 'a',
        'À' => 'A',
        'ä' => 'a',
        'Ä' => 'A',
        'ç' => 'c',
        'Ç' => 'C',
        'é' => 'e',
        'É' => 'E',
        'ê' => 'e',
        'Ê' => 'E',
        'ë' => 'e',
        'Ë' => 'E',
        'è' => 'e',
        'È' => 'E',
        'ï' => 'i',
        'î' => 'i',
        'Ï' => 'I',
        'Î' => 'I',
        'ÿ' => 'y',
        'Ÿ' => 'Y',
        'ô' => 'o',
        'Ô' => 'O',
        'ö' => 'o',
        'Ö' => 'O',
        'û' => 'u',
        'Û' => 'U',
        'ù' => 'u',
        'Ù' => 'U',
        'ü' => 'u',
        'Ü' => 'U',
    ],
    // Austrian (French)
    'fr_at' => [
        'ß' => 'sz',
        'ẞ' => 'SZ',
        'Æ' => 'AE',
        'æ' => 'ae',
        'Œ' => 'OE',
        'œ' => 'oe',
        'â' => 'a',
        'Â' => 'A',
        'à' => 'a',
        'À' => 'A',
        'ä' => 'a',
        'Ä' => 'A',
        'ç' => 'c',
        'Ç' => 'C',
        'é' => 'e',
        'É' => 'E',
        'ê' => 'e',
        'Ê' => 'E',
        'ë' => 'e',
        'Ë' => 'E',
        'è' => 'e',
        'È' => 'E',
        'ï' => 'i',
        'î' => 'i',
        'Ï' => 'I',
        'Î' => 'I',
        'ÿ' => 'y',
        'Ÿ' => 'Y',
        'ô' => 'o',
        'Ô' => 'O',
        'ö' => 'o',
        'Ö' => 'O',
        'û' => 'u',
        'Û' => 'U',
        'ù' => 'u',
        'Ù' => 'U',
        'ü' => 'u',
        'Ü' => 'U',
    ],
    // Switzerland (French)
    'fr_ch' => [
        'ß' => 'ss',
        'ẞ' => 'SS',
        'Æ' => 'AE',
        'æ' => 'ae',
        'Œ' => 'OE',
        'œ' => 'oe',
        'â' => 'a',
        'Â' => 'A',
        'à' => 'a',
        'À' => 'A',
        'ä' => 'a',
        'Ä' => 'A',
        'ç' => 'c',
        'Ç' => 'C',
        'é' => 'e',
        'É' => 'E',
        'ê' => 'e',
        'Ê' => 'E',
        'ë' => 'e',
        'Ë' => 'E',
        'è' => 'e',
        'È' => 'E',
        'ï' => 'i',
        'î' => 'i',
        'Ï' => 'I',
        'Î' => 'I',
        'ÿ' => 'y',
        'Ÿ' => 'Y',
        'ô' => 'o',
        'Ô' => 'O',
        'ö' => 'o',
        'Ö' => 'O',
        'û' => 'u',
        'Û' => 'U',
        'ù' => 'u',
        'Ù' => 'U',
        'ü' => 'u',
        'Ü' => 'U',
    ],
    // German
    'de' => [
        'Ä' => 'Ae',
        'Ö' => 'Oe',
        'Ü' => 'Ue',
        'ä' => 'ae',
        'ö' => 'oe',
        'ü' => 'ue',
        'ß' => 'ss',
        'ẞ' => 'SS',
    ],
    // Austrian (German)
    'de_at' => [
        'Ä' => 'Ae',
        'Ö' => 'Oe',
        'Ü' => 'Ue',
        'ä' => 'ae',
        'ö' => 'oe',
        'ü' => 'ue',
        'ß' => 'sz',
        'ẞ' => 'SZ',
    ],
    // Switzerland (German)
    'de_ch' => [
        'Ä' => 'Ae',
        'Ö' => 'Oe',
        'Ü' => 'Ue',
        'ä' => 'ae',
        'ö' => 'oe',
        'ü' => 'ue',
        'ß' => 'ss',
        'ẞ' => 'SS',
    ],
    // Bengali (Bangla)
    'bn' => [
        'ভ্ল'   => 'vl',
        'পশ'    => 'psh',
        'ব্ধ'   => 'bdh',
        'ব্জ'   => 'bj',
        'ব্দ'   => 'bd',
        'ব্ব'   => 'bb',
        'ব্ল'   => 'bl',
        'ভ'     => 'v',
        'ব'     => 'b',
        'চ্ঞ'   => 'cNG',
        'চ্ছ'   => 'cch',
        'চ্চ'   => 'cc',
        'ছ'     => 'ch',
        'চ'     => 'c',
        'ধ্ন'   => 'dhn',
        'ধ্ম'   => 'dhm',
        'দ্ঘ'   => 'dgh',
        'দ্ধ'   => 'ddh',
        'দ্ভ'   => 'dv',
        'দ্ম'   => 'dm',
        'ড্ড'   => 'DD',
        'ঢ'     => 'Dh',
        'ধ'     => 'dh',
        'দ্গ'   => 'dg',
        'দ্দ'   => 'dd',
        'ড'     => 'D',
        'দ'     => 'd',
        '।'     => '.',
        'ঘ্ন'   => 'Ghn',
        'গ্ধ'   => 'Gdh',
        'গ্ণ'   => 'GN',
        'গ্ন'   => 'Gn',
        'গ্ম'   => 'Gm',
        'গ্ল'   => 'Gl',
        'জ্ঞ'   => 'jNG',
        'ঘ'     => 'Gh',
        'গ'     => 'g',
        'হ্ণ'   => 'hN',
        'হ্ন'   => 'hn',
        'হ্ম'   => 'hm',
        'হ্ল'   => 'hl',
        'হ'     => 'h',
        'জ্ঝ'   => 'jjh',
        'ঝ'     => 'jh',
        'জ্জ'   => 'jj',
        'জ'     => 'j',
        'ক্ষ্ণ' => 'kxN',
        'ক্ষ্ম' => 'kxm',
        'ক্ষ'   => 'ksh',
        'কশ'    => 'ksh',
        'ক্ক'   => 'kk',
        'ক্ট'   => 'kT',
        'ক্ত'   => 'kt',
        'ক্ল'   => 'kl',
        'ক্স'   => 'ks',
        'খ'     => 'kh',
        'ক'     => 'k',
        'ল্ভ'   => 'lv',
        'ল্ধ'   => 'ldh',
        'লখ'    => 'lkh',
        'লঘ'    => 'lgh',
        'লফ'    => 'lph',
        'ল্ক'   => 'lk',
        'ল্গ'   => 'lg',
        'ল্ট'   => 'lT',
        'ল্ড'   => 'lD',
        'ল্প'   => 'lp',
        'ল্ম'   => 'lm',
        'ল্ল'   => 'll',
        'ল্ব'   => 'lb',
        'ল'     => 'l',
        'ম্থ'   => 'mth',
        'ম্ফ'   => 'mf',
        'ম্ভ'   => 'mv',
        'মপ্ল'  => 'mpl',
        'ম্ন'   => 'mn',
        'ম্প'   => 'mp',
        'ম্ম'   => 'mm',
        'ম্ল'   => 'ml',
        'ম্ব'   => 'mb',
        'ম'     => 'm',
        '০'     => '0',
        '১'     => '1',
        '২'     => '2',
        '৩'     => '3',
        '৪'     => '4',
        '৫'     => '5',
        '৬'     => '6',
        '৭'     => '7',
        '৮'     => '8',
        '৯'     => '9',
        'ঙ্ক্ষ' => 'Ngkx',
        'ঞ্ছ'   => 'nch',
        'ঙ্ঘ'   => 'ngh',
        'ঙ্খ'   => 'nkh',
        'ঞ্ঝ'   => 'njh',
        'ঙ্গৌ'  => 'ngOU',
        'ঙ্গৈ'  => 'ngOI',
        'ঞ্চ'   => 'nc',
        'ঙ্ক'   => 'nk',
        'ঙ্ষ'   => 'Ngx',
        'ঙ্গ'   => 'ngo',
        'ঙ্ম'   => 'Ngm',
        'ঞ্জ'   => 'nj',
        'ন্ধ'   => 'ndh',
        'ন্ঠ'   => 'nTh',
        'ণ্ঠ'   => 'NTh',
        'ন্থ'   => 'nth',
        'ঙ্গা'  => 'nga',
        'ঙ্গি'  => 'ngi',
        'ঙ্গী'  => 'ngI',
        'ঙ্গু'  => 'ngu',
        'ঙ্গূ'  => 'ngU',
        'ঙ্গে'  => 'nge',
        'ঙ্গো'  => 'ngO',
        'ণ্ঢ'   => 'NDh',
        'নশ'    => 'nsh',
        'ঙর'    => 'Ngr',
        'ঞর'    => 'NGr',
        'ংর'    => 'ngr',
        'ঙ'     => 'Ng',
        'ঞ'     => 'NG',
        'ং'     => 'ng',
        'ন্ন'   => 'nn',
        'ণ্ণ'   => 'NN',
        'ণ্ন'   => 'Nn',
        'ন্ম'   => 'nm',
        'ণ্ম'   => 'Nm',
        'ন্দ'   => 'nd',
        'ন্ট'   => 'nT',
        'ণ্ট'   => 'NT',
        'ন্ড'   => 'nD',
        'ণ্ড'   => 'ND',
        'ন্ত'   => 'nt',
        'ন্স'   => 'ns',
        'ন'     => 'n',
        'ণ'     => 'N',
        'ৈ'     => 'OI',
        'ৌ'     => 'OU',
        'ো'     => 'O',
        'ঐ'     => 'OI',
        'ঔ'     => 'OU',
        'অ'     => 'o',
        'ও'     => 'oo',
        'ফ্ল'   => 'fl',
        'প্ট'   => 'pT',
        'প্ত'   => 'pt',
        'প্ন'   => 'pn',
        'প্প'   => 'pp',
        'প্ল'   => 'pl',
        'প্স'   => 'ps',
        'ফ'     => 'f',
        'প'     => 'p',
        'ৃ'     => 'rri',
        'ঋ'     => 'rri',
        'রর‍্য' => 'rry',
        '্র্য'  => 'ry',
        '্রর'   => 'rr',
        'ড়্গ'   => 'Rg',
        'ঢ়'     => 'Rh',
        'ড়'     => 'R',
        'র'     => 'r',
        '্র'    => 'r',
        'শ্ছ'   => 'Sch',
        'ষ্ঠ'   => 'ShTh',
        'ষ্ফ'   => 'Shf',
        'স্ক্ল' => 'skl',
        'স্খ'   => 'skh',
        'স্থ'   => 'sth',
        'স্ফ'   => 'sf',
        'শ্চ'   => 'Sc',
        'শ্ত'   => 'St',
        'শ্ন'   => 'Sn',
        'শ্ম'   => 'Sm',
        'শ্ল'   => 'Sl',
        'ষ্ক'   => 'Shk',
        'ষ্ট'   => 'ShT',
        'ষ্ণ'   => 'ShN',
        'ষ্প'   => 'Shp',
        'ষ্ম'   => 'Shm',
        'স্প্ল' => 'spl',
        'স্ক'   => 'sk',
        'স্ট'   => 'sT',
        'স্ত'   => 'st',
        'স্ন'   => 'sn',
        'স্প'   => 'sp',
        'স্ম'   => 'sm',
        'স্ল'   => 'sl',
        'শ'     => 'S',
        'ষ'     => 'Sh',
        'স'     => 's',
        'ু'     => 'u',
        'উ'     => 'u',
        'অ্য'   => 'oZ',
        'ত্থ'   => 'tth',
        'ৎ'     => 'tt',
        'ট্ট'   => 'TT',
        'ট্ম'   => 'Tm',
        'ঠ'     => 'Th',
        'ত্ন'   => 'tn',
        'ত্ম'   => 'tm',
        'থ'     => 'th',
        'ত্ত'   => 'tt',
        'ট'     => 'T',
        'ত'     => 't',
        'অ্যা'  => 'AZ',
        'া'     => 'a',
        'আ'     => 'a',
        'য়া'    => 'ya',
        'য়'     => 'y',
        'ি'     => 'i',
        'ই'     => 'i',
        'ী'     => 'ee',
        'ঈ'     => 'ee',
        'ূ'     => 'uu',
        'ঊ'     => 'uu',
        'ে'     => 'e',
        'এ'     => 'e',
        'য'     => 'z',
        '্য'    => 'Z',
        'ইয়'    => 'y',
        'ওয়'    => 'w',
        '্ব'    => 'w',
        'এক্স'  => 'x',
        'ঃ'     => ':',
        'ঁ'     => 'nn',
        '্‌'    => '',
    ],
    // English
    'en' => [
    ],
    // Latin (+ Cyrillic ?) chars
    //
    // -> Mix of languages, but we need to keep this here, so that different languages can handle there own behavior.
    'latin' => [
        '˚'   => '0',
        '¹'   => '1',
        '²'   => '2',
        '³'   => '3',
        '⁴'   => '4',
        '⁵'   => '5',
        '⁶'   => '6',
        '⁷'   => '7',
        '⁸'   => '8',
        '⁹'   => '9',
        '₀'   => '0',
        '₁'   => '1',
        '₂'   => '2',
        '₃'   => '3',
        '₄'   => '4',
        '₅'   => '5',
        '₆'   => '6',
        '₇'   => '7',
        '₈'   => '8',
        '₉'   => '9',
        '௦'   => '0',
        '௧'   => '1',
        '௨'   => '2',
        '௩'   => '3',
        '௪'   => '4',
        '௫'   => '5',
        '௬'   => '6',
        '௭'   => '7',
        '௮'   => '8',
        '௯'   => '9',
        '௰'   => '10',
        '௱'   => '100',
        '௲'   => '1000',
        'Ꜳ'   => 'AA',
        'ꜳ'   => 'aa',
        'Æ'   => 'AE',
        'æ'   => 'ae',
        'Ǽ'   => 'AE',
        'ǽ'   => 'ae',
        'Ꜵ'   => 'AO',
        'ꜵ'   => 'ao',
        'Ꜷ'   => 'AU',
        'ꜷ'   => 'au',
        'Ꜹ'   => 'AV',
        'ꜹ'   => 'av',
        'Ꜻ'   => 'av',
        'ꜻ'   => 'av',
        'Ꜽ'   => 'AY',
        'ꜽ'   => 'ay',
        'ȸ'   => 'db',
        'ʣ'   => 'dz',
        'ʥ'   => 'dz',
        'ʤ'   => 'dezh',
        '🙰'   => 'et',
        'ﬀ'   => 'ff',
        'ﬃ'   => 'ffi',
        'ﬄ'   => 'ffl',
        'ﬁ'   => 'fi',
        'ﬂ'   => 'fl',
        'ʩ'   => 'feng',
        'Ĳ'   => 'IJ',
        'ĳ'   => 'ij',
        'ʪ'   => 'ls',
        'ʫ'   => 'lz',
        'ɮ'   => 'lezh',
        'ȹ'   => 'qp',
        'ʨ'   => 'tc',
        'ʦ'   => 'ts',
        'ʧ'   => 'tesh',
        'Œ'   => 'OE',
        'œ'   => 'oe',
        'Ꝏ'   => 'OO',
        'ꝏ'   => 'oo',
        'ẞ'   => 'SS',
        'ß'   => 'ss',
        'ﬆ'   => 'st',
        'ﬅ'   => 'st',
        'Ꜩ'   => 'TZ',
        'ꜩ'   => 'tz',
        'ᵫ'   => 'ue',
        'Aι'  => 'Ai',
        'αι'  => 'ai',
        'Ει'  => 'Ei',
        'ει'  => 'ei',
        'Οι'  => 'Oi',
        'οι'  => 'oi',
        'Ου'  => 'Oy',
        'ου'  => 'oy',
        'Υι'  => 'Yi',
        'υι'  => 'yi',
        'ἀ'   => 'a',
        'ἁ'   => 'a',
        'ἂ'   => 'a',
        'ἃ'   => 'a',
        'ἄ'   => 'a',
        'ἅ'   => 'a',
        'ἆ'   => 'a',
        'ἇ'   => 'a',
        'Ἀ'   => 'A',
        'Ἁ'   => 'A',
        'Ἂ'   => 'A',
        'Ἃ'   => 'A',
        'Ἄ'   => 'A',
        'Ἅ'   => 'A',
        'Ἆ'   => 'A',
        'Ἇ'   => 'A',
        'ᾰ'   => 'a',
        'ᾱ'   => 'a',
        'ᾲ'   => 'a',
        'ᾳ'   => 'a',
        'ᾴ'   => 'a',
        'ᾶ'   => 'a',
        'ᾷ'   => 'a',
        'Ᾰ'   => 'A',
        'Ᾱ'   => 'A',
        'Ὰ'   => 'A',
        'Ά'   => 'A',
        'ᾼ'   => 'A',
        'Ä'   => 'A',
        'ä'   => 'a',
        'À'   => 'A',
        'à'   => 'a',
        'Á'   => 'A',
        'á'   => 'a',
        'Â'   => 'A',
        'â'   => 'a',
        'Ã'   => 'A',
        'ã'   => 'a',
        'A̧'  => 'A',
        'a̧'  => 'a',
        'Ą'   => 'A',
        'ą'   => 'a',
        'Ⱥ'   => 'A',
        'ⱥ'   => 'a',
        'Å'   => 'A',
        'å'   => 'a',
        'Ǻ'   => 'A',
        'ǻ'   => 'a',
        'Ă'   => 'A',
        'ă'   => 'a',
        'Ǎ'   => 'A',
        'ǎ'   => 'a',
        'Ȧ'   => 'A',
        'ȧ'   => 'a',
        'Ạ'   => 'A',
        'ạ'   => 'a',
        'Ā'   => 'A',
        'ā'   => 'a',
        'ª'   => 'a',
        'Ɓ'   => 'B',
        'Ѣ'   => 'E',
        'ѣ'   => 'e',
        'Ç'   => 'C',
        'ç'   => 'c',
        'Ĉ'   => 'C',
        'ĉ'   => 'c',
        'C̈'  => 'C',
        'c̈'  => 'c',
        'C̨'  => 'C',
        'c̨'  => 'c',
        'Ȼ'   => 'C',
        'ȼ'   => 'c',
        'Č'   => 'C',
        'č'   => 'c',
        'Ć'   => 'C',
        'ć'   => 'c',
        'C̀'  => 'C',
        'c̀'  => 'c',
        'Ċ'   => 'C',
        'ċ'   => 'c',
        'C̣'  => 'C',
        'c̣'  => 'c',
        'C̄'  => 'C',
        'c̄'  => 'c',
        'C̃'  => 'C',
        'c̃'  => 'c',
        'Ð'   => 'D',
        'Đ'   => 'D',
        'ð'   => 'd',
        'đ'   => 'd',
        'È'   => 'E',
        'É'   => 'E',
        'Ê'   => 'E',
        'Ë'   => 'E',
        'Ĕ'   => 'E',
        'Ė'   => 'E',
        'Ȩ'   => 'E',
        'ȩ'   => 'e',
        'Ę'   => 'E',
        'ę'   => 'e',
        'Ɇ'   => 'E',
        'ɇ'   => 'e',
        'Ě'   => 'E',
        'ě'   => 'e',
        'Ẹ'   => 'E',
        'ẹ'   => 'e',
        'Ē'   => 'E',
        'ē'   => 'e',
        'Ẽ'   => 'E',
        'ẽ'   => 'e',
        'è'   => 'e',
        'é'   => 'e',
        'ê'   => 'e',
        'ë'   => 'e',
        'ĕ'   => 'e',
        'ė'   => 'e',
        'ƒ'   => 'f',
        'Ѳ'   => 'F',
        'ѳ'   => 'f',
        'Ĝ'   => 'G',
        'Ġ'   => 'G',
        'ĝ'   => 'g',
        'ġ'   => 'g',
        'Ĥ'   => 'H',
        'Ħ'   => 'H',
        'ĥ'   => 'h',
        'ħ'   => 'h',
        'Ì'   => 'I',
        'Í'   => 'I',
        'Î'   => 'I',
        'Ï'   => 'I',
        'Ĩ'   => 'I',
        'Ĭ'   => 'I',
        'Ǐ'   => 'I',
        'Į'   => 'I',
        'ì'   => 'i',
        'í'   => 'i',
        'î'   => 'i',
        'ï'   => 'i',
        'ĩ'   => 'i',
        'ĭ'   => 'i',
        'ǐ'   => 'i',
        'į'   => 'i',
        'І'   => 'I',
        'і'   => 'i',
        'I̧'  => 'I',
        'i̧'  => 'i',
        'Ɨ'   => 'I',
        'ɨ'   => 'i',
        'İ'   => 'I',
        'i'   => 'i',
        'Ị'   => 'I',
        'ị'   => 'i',
        'Ī'   => 'I',
        'ī'   => 'i',
        'Ĵ'   => 'J',
        'ĵ'   => 'j',
        'J́́' => 'J',
        'j́'  => 'j',
        'J̀̀' => 'J',
        'j̀'  => 'j',
        'J̈'  => 'J',
        'j̈'  => 'j',
        'J̧'  => 'J',
        'j̧'  => 'j',
        'J̨'  => 'J',
        'j̨'  => 'j',
        'Ɉ'   => 'J',
        'ɉ'   => 'j',
        'J̌'  => 'J',
        'ǰ'   => 'j',
        'J̇'  => 'J',
        'j'   => 'j',
        'J̣'  => 'J',
        'j̣'  => 'j',
        'J̄'  => 'J',
        'j̄'  => 'j',
        'J̃'  => 'J',
        'j̃'  => 'j',
        'Й' => 'i',
        'й' => 'i',
        'ĸ'   => 'k',
        'Ĺ'   => 'L',
        'Ľ'   => 'L',
        'Ŀ'   => 'L',
        'ĺ'   => 'l',
        'ľ'   => 'l',
        'ŀ'   => 'l',
        'L̀'  => 'L',
        'l̀'  => 'l',
        'L̂'  => 'L',
        'l̂'  => 'l',
        'L̈'  => 'L',
        'l̈'  => 'l',
        'Ļ'   => 'L',
        'ļ'   => 'l',
        'L̨'  => 'L',
        'l̨'  => 'l',
        'Ł'   => 'L',
        'ł'   => 'l',
        'Ƚ'   => 'L',
        'ƚ'   => 'l',
        'L̇'  => 'L',
        'l̇'  => 'l',
        'Ḷ'   => 'L',
        'ḷ'   => 'l',
        'L̄'  => 'L',
        'l̄'  => 'l',
        'L̃'  => 'L',
        'l̃'  => 'l',
        'Ñ'   => 'N',
        'ñ'   => 'n',
        'Ŋ'   => 'N',
        'ŋ'   => 'n',
        'ŉ'   => 'n',
        'Ń'   => 'N',
        'ń'   => 'n',
        'Ǹ'   => 'N',
        'ǹ'   => 'n',
        'N̂'  => 'N',
        'n̂'  => 'n',
        'N̈'  => 'N',
        'n̈'  => 'n',
        'Ņ'   => 'N',
        'ņ'   => 'n',
        'N̨'  => 'N',
        'n̨'  => 'n',
        'Ꞥ'   => 'N',
        'ꞥ'   => 'n',
        'Ň'   => 'N',
        'ň'   => 'n',
        'Ṅ'   => 'N',
        'ṅ'   => 'n',
        'Ṇ'   => 'N',
        'ṇ'   => 'n',
        'N̄'  => 'N',
        'n̄'  => 'n',
        'Ö'   => 'O',
        'Ò'   => 'O',
        'Ó'   => 'O',
        'Ô'   => 'O',
        'Õ'   => 'O',
        'Ō'   => 'O',
        'Ŏ'   => 'O',
        'Ǒ'   => 'O',
        'Ő'   => 'O',
        'Ơ'   => 'O',
        'Ø'   => 'O',
        'Ǿ'   => 'O',
        'ö'   => 'o',
        'ò'   => 'o',
        'ó'   => 'o',
        'ô'   => 'o',
        'õ'   => 'o',
        'ō'   => 'o',
        'ŏ'   => 'o',
        'ǒ'   => 'o',
        'ő'   => 'o',
        'ơ'   => 'o',
        'ø'   => 'o',
        'ǿ'   => 'o',
        'º'   => 'o',
        'O̧'  => 'O',
        'o̧'  => 'o',
        'Ǫ'   => 'O',
        'ǫ'   => 'o',
        'Ɵ'   => 'O',
        'ɵ'   => 'o',
        'Ȯ'   => 'O',
        'ȯ'   => 'o',
        'Ọ'   => 'O',
        'ọ'   => 'o',
        'Ŕ'   => 'R',
        'Ŗ'   => 'R',
        'ŕ'   => 'r',
        'ŗ'   => 'r',
        'Ŝ'   => 'S',
        'Ș'   => 'S',
        'ș'   => 's',
        'Ś'   => 'S',
        'ś'   => 's',
        'S̀'  => 'S',
        's̀'  => 's',
        'Ŝ̀'  => 'S',
        'ŝ'   => 's',
        'S̈'  => 'S',
        's̈'  => 's',
        'Ş'   => 'S',
        'ş'   => 's',
        'S̨'  => 'S',
        's̨'  => 's',
        'Ꞩ'   => 'S',
        'ꞩ'   => 's',
        'Š'   => 'S',
        'š'   => 's',
        'Ṡ'   => 'S',
        'ṡ'   => 's',
        'Ṣ'   => 'S',
        'ṣ'   => 's',
        'S̄'  => 'S',
        's̄'  => 's',
        'S̃'  => 'S',
        's̃'  => 's',
        'ſ'   => 's',
        'Ţ'   => 'T',
        'Ț'   => 'T',
        'Ŧ'   => 'T',
        'Þ'   => 'TH',
        'ţ'   => 't',
        'ț'   => 't',
        'ŧ'   => 't',
        'þ'   => 'th',
        'T́'  => 'T',
        't́'  => 't',
        'T̀'  => 'T',
        't̀'  => 't',
        'T̂'  => 'T',
        't̂'  => 't',
        'T̈'  => 'T',
        'ẗ'   => 't',
        'T̨'  => 'T',
        't̨'  => 't',
        'Ⱦ'   => 'T',
        'ⱦ'   => 't',
        'Ť'   => 'T',
        'ť'   => 't',
        'Ṫ'   => 'T',
        'ṫ'   => 't',
        'Ṭ'   => 'T',
        'ṭ'   => 't',
        'T̄'  => 'T',
        't̄'  => 't',
        'T̃'  => 'T',
        't̃'  => 't',
        'Ü'   => 'U',
        'Ù'   => 'U',
        'Ú'   => 'U',
        'Û'   => 'U',
        'Ũ'   => 'U',
        'Ŭ'   => 'U',
        'Ű'   => 'U',
        'Ų'   => 'U',
        'Ư'   => 'U',
        'Ǔ'   => 'U',
        'Ǖ'   => 'U',
        'Ǘ'   => 'U',
        'Ǚ'   => 'U',
        'Ǜ'   => 'U',
        'ü'   => 'u',
        'ù'   => 'u',
        'ú'   => 'u',
        'û'   => 'u',
        'ũ'   => 'u',
        'ŭ'   => 'u',
        'ű'   => 'u',
        'ų'   => 'u',
        'ư'   => 'u',
        'ǔ'   => 'u',
        'ǖ'   => 'u',
        'ǘ'   => 'u',
        'ǚ'   => 'u',
        'ǜ'   => 'u',
        'U̧'  => 'U',
        'u̧'  => 'u',
        'Ʉ'   => 'U',
        'ʉ'   => 'u',
        'U̇'  => 'U',
        'u̇'  => 'u',
        'Ụ'   => 'U',
        'ụ'   => 'u',
        'Ū'   => 'U',
        'ū'   => 'u',
        'Ʊ'   => 'U',
        'ʊ'   => 'u',
        'Ŵ'   => 'W',
        'ŵ'   => 'w',
        'Ẁ'   => 'W',
        'ẁ'   => 'w',
        'Ẃ'   => 'W',
        'ẃ'   => 'w',
        'Ẅ'   => 'W',
        'ẅ'   => 'w',
        'Ѵ'   => 'I',
        'ѵ'   => 'i',
        'Ꙗ'   => 'Ja',
        'ꙗ'   => 'ja',
        'Є'   => 'Je',
        'є'   => 'je',
        'Ѥ'   => 'Je',
        'ѥ'   => 'je',
        'Ѕ'   => 'Dz',
        'ѕ'   => 'dz',
        'Ꙋ'   => 'U',
        'ꙋ'   => 'u',
        'Ѡ'   => 'O',
        'ѡ'   => 'o',
        'Ѿ'   => 'Ot',
        'ѿ'   => 'ot',
        'Ѫ'   => 'U',
        'ѫ'   => 'u',
        'Ѧ'   => 'Ja',
        'ѧ'   => 'ja',
        'Ѭ'   => 'Ju',
        'ѭ'   => 'ju',
        'Ѩ'   => 'Ja',
        'ѩ'   => 'Ja',
        'Ѯ'   => 'Ks',
        'ѯ'   => 'ks',
        'Ѱ'   => 'Ps',
        'ѱ'   => 'ps',
        'Х'   => 'X',
        'х'   => 'x',
        'Ý'   => 'Y',
        'Ÿ'   => 'Y',
        'Ŷ'   => 'Y',
        'ý'   => 'y',
        'ÿ'   => 'y',
        'ŷ'   => 'y',
        'Ỳ'   => 'Y',
        'ỳ'   => 'y',
        'Y̧'  => 'Y',
        'y̧'  => 'y',
        'Y̨'  => 'Y',
        'y̨'  => 'y',
        'Ɏ'   => 'Y',
        'ɏ'   => 'y',
        'Y̌'  => 'Y',
        'y̌'  => 'y',
        'Ẏ'   => 'Y',
        'ẏ'   => 'y',
        'Ỵ'   => 'Y',
        'ỵ'   => 'y',
        'Ȳ'   => 'Y',
        'ȳ'   => 'y',
        'Ỹ'   => 'Y',
        'ỹ'   => 'y',
        'Щ' => 'Shh',
        'щ' => 'shh',
        'Ź'   => 'Z',
        'ź'   => 'z',
        'Z̀'  => 'Z',
        'z̀'  => 'z',
        'Ẑ'   => 'Z',
        'ẑ'   => 'z',
        'Z̈'  => 'Z',
        'z̈'  => 'z',
        'Z̧'  => 'Z',
        'z̧'  => 'z',
        'Z̨'  => 'Z',
        'z̨'  => 'z',
        'Ƶ'   => 'Z',
        'ƶ'   => 'z',
        'Ž'   => 'Z',
        'ž'   => 'z',
        'Ż'   => 'Z',
        'ż'   => 'z',
        'Ẓ'   => 'Z',
        'ẓ'   => 'z',
        'Z̄'  => 'Z',
        'z̄'  => 'z',
        'Z̃'  => 'Z',
        'z̃'  => 'z',
    ],
    // whitespace chars
    ' ' => [
        "\xc2\xa0"     => ' ', // 'NO-BREAK SPACE'
        "\xe1\x9a\x80" => ' ', // 'OGHAM SPACE MARK'
        "\xe2\x80\x80" => ' ', // 'EN QUAD'
        "\xe2\x80\x81" => ' ', // 'EM QUAD'
        "\xe2\x80\x82" => ' ', // 'EN SPACE'
        "\xe2\x80\x83" => ' ', // 'EM SPACE'
        "\xe2\x80\x84" => ' ', // 'THREE-PER-EM SPACE'
        "\xe2\x80\x85" => ' ', // 'FOUR-PER-EM SPACE'
        "\xe2\x80\x86" => ' ', // 'SIX-PER-EM SPACE'
        "\xe2\x80\x87" => ' ', // 'FIGURE SPACE'
        "\xe2\x80\x88" => ' ', // 'PUNCTUATION SPACE'
        "\xe2\x80\x89" => ' ', // 'THIN SPACE'
        "\xe2\x80\x8a" => ' ', // 'HAIR SPACE'
        "\xe2\x80\xa8" => ' ', // 'LINE SEPARATOR'
        "\xe2\x80\xa9" => ' ', // 'PARAGRAPH SEPARATOR'
        "\xe2\x80\x8b" => ' ', // 'ZERO WIDTH SPACE'
        "\xe2\x80\xaf" => ' ', // 'NARROW NO-BREAK SPACE'
        "\xe2\x81\x9f" => ' ', // 'MEDIUM MATHEMATICAL SPACE'
        "\xe3\x80\x80" => ' ', // 'IDEOGRAPHIC SPACE'
        "\xef\xbe\xa0" => ' ', // 'HALFWIDTH HANGUL FILLER'
    ],
    // commonly used in Word documents
    'msword' => [
        "\xc2\xab"     => '<<', // « (U+00AB) in UTF-8
        "\xc2\xbb"     => '>>', // » (U+00BB) in UTF-8
        "\xe2\x80\x98" => "'", // ‘ (U+2018) in UTF-8
        "\xe2\x80\x99" => "'", // ’ (U+2019) in UTF-8
        "\xe2\x80\x9a" => "'", // ‚ (U+201A) in UTF-8
        "\xe2\x80\x9b" => "'", // ‛ (U+201B) in UTF-8
        "\xe2\x80\x9c" => '"', // “ (U+201C) in UTF-8
        "\xe2\x80\x9d" => '"', // ” (U+201D) in UTF-8
        "\xe2\x80\x9e" => '"', // „ (U+201E) in UTF-8
        "\xe2\x80\x9f" => '"', // ‟ (U+201F) in UTF-8
        "\xe2\x80\xb9" => "'", // ‹ (U+2039) in UTF-8
        "\xe2\x80\xba" => "'", // › (U+203A) in UTF-8
        "\xe2\x80\x93" => '-', // – (U+2013) in UTF-8
        "\xe2\x80\x94" => '-', // — (U+2014) in UTF-8
        "\xe2\x80\xa6" => '...', // … (U+2026) in UTF-8
    ],
    // Currency
    //
    // url => https://en.wikipedia.org/wiki/Currency_symbol
    'currency_short' => [
        '€'  => 'EUR',
        '$'  => '$',
        '₢'  => 'Cr',
        '₣'  => 'Fr.',
        '£'  => 'PS',
        '₤'  => 'L.',
        'ℳ'  => 'M',
        '₥'  => 'mil',
        '₦'  => 'N',
        '₧'  => 'Pts',
        '₨'  => 'Rs',
        'රු' => 'LKR',
        'ரூ' => 'LKR',
        '௹'  => 'Rs',
        'रू' => 'NPR',
        '₹'  => 'Rs',
        '૱'  => 'Rs',
        '₩'  => 'W',
        '₪'  => 'NS',
        '₸'  => 'KZT',
        '₫'  => 'D',
        '֏'  => 'AMD',
        '₭'  => 'K',
        '₺'  => 'TL',
        '₼'  => 'AZN',
        '₮'  => 'T',
        '₯'  => 'Dr',
        '₲'  => 'PYG',
        '₾'  => 'GEL',
        '₳'  => 'ARA',
        '₴'  => 'UAH',
        '₽'  => 'RUB',
        '₵'  => 'GHS',
        '₡'  => 'CL',
        '¢'  => 'c',
        '¥'  => 'YEN',
        '円'  => 'JPY',
        '৳'  => 'BDT',
        '元'  => 'CNY',
        '﷼'  => 'SAR',
        '៛'  => 'KR',
        '₠'  => 'ECU',
        '¤'  => '$?',
        '฿'  => 'THB',
        '؋'  => 'AFN',
    ],
];
<?php

return [
    // Dutch (Flemish)
    'nl' => [
        '=' => ' gelijk ',
        '%' => ' procent ',
        '∑' => ' som ',
        '∆' => ' delta ',
        '∞' => ' oneindig ',
        '♥' => ' love ',
        '&' => ' en ',
        '+' => ' plus ',
    ],
    // Italian
    'it' => [
        '=' => ' uguale ',
        '%' => ' percent ',
        '∑' => ' somma ',
        '∆' => ' delta ',
        '∞' => ' infinito ',
        '♥' => ' amore ',
        '&' => ' e ',
        '+' => ' piu ',
    ],
    // Macedonian
    'mk' => [
        '=' => ' ednakva ',
        '%' => ' procenti ',
        '∑' => ' zbir ',
        '∆' => ' delta ',
        '∞' => ' beskonecnost ',
        '♥' => ' loveubov ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Portuguese (Brazil)
    'pt' => [
        '=' => ' igual ',
        '%' => ' por cento ',
        '∑' => ' soma ',
        '∆' => ' delta ',
        '∞' => ' infinito ',
        '♥' => ' amor ',
        '&' => ' e ',
        '+' => ' mais ',
    ],
    // Greek(lish) (Elláda)
    'el__greeklish' => [
        '=' => ' isos ',
        '%' => ' tois ekato ',
        '∑' => ' athroisma ',
        '∆' => ' delta ',
        '∞' => ' apeiro ',
        '♥' => ' agape ',
        '&' => ' kai ',
        '+' => ' syn ',
    ],
    // Greek (Elláda)
    'el' => [
        '=' => ' isos ',
        '%' => ' tois ekato ',
        '∑' => ' athroisma ',
        '∆' => ' delta ',
        '∞' => ' apeiro ',
        '♥' => ' agape ',
        '&' => ' kai ',
        '+' => ' syn ',
    ],
    // Hindi
    'hi' => [
        '=' => ' samana ',
        '%' => ' paratisata ',
        '∑' => ' yoga ',
        '∆' => ' dalata ',
        '∞' => ' anata ',
        '♥' => ' payara ',
        '&' => ' aura ',
        '+' => ' palasa ',
    ],
    // Armenian
    'hy' => [
        '=' => ' havasar ',
        '%' => ' tvokvos ',
        '∑' => ' gvoumar ',
        '∆' => ' delta ',
        '∞' => ' ansahmanvouthyvoun ',
        '♥' => ' ser ',
        '&' => ' ev ',
        '+' => ' gvoumarats ',
    ],
    // Swedish
    'sv' => [
        '=' => ' lika ',
        '%' => ' procent ',
        '∑' => ' summa ',
        '∆' => ' delta ',
        '∞' => ' oandlighet ',
        '♥' => ' alskar ',
        '&' => ' och ',
        '+' => ' plus ',
    ],
    // Turkmen
    'tk' => [
        '=' => ' den ',
        '%' => ' yuzde ',
        '∑' => ' jem ',
        '∆' => ' delta ',
        '∞' => ' mudimilik ',
        '♥' => ' soygi ',
        '&' => ' we ',
        '+' => ' yzy ',
    ],
    // Turkish
    'tr' => [
        '=' => ' esit ',
        '%' => ' yuzde ',
        '∑' => ' Toplam ',
        '∆' => ' delta ',
        '∞' => ' sonsuzluk ',
        '♥' => ' ask ',
        '&' => ' ve ',
        '+' => ' arti ',
    ],
    // Bulgarian
    'bg' => [
        '=' => ' raven ',
        '%' => ' na sto ',
        '∑' => ' suma ',
        '∆' => ' delta ',
        '∞' => ' bezkrajnost ',
        '♥' => ' obicam ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Hungarian
    'hu' => [
        '=' => ' Egyenlo ',
        '%' => ' Szazalek ',
        '∑' => ' osszeg ',
        '∆' => ' delta ',
        '∞' => ' vegtelenitett ',
        '♥' => ' love ',
        '&' => ' Es ',
        '+' => ' Plusz ',
    ],
    // Myanmar (Burmese)
    'my' => [
        '=' => ' ttn:ttnnym? ',
        '%' => ' raakhngnn:k ',
        '∑' => ' ld ',
        '∆' => ' m?cwk?n:pe? ',
        '∞' => ' ach:m ',
        '♥' => ' mettttaa ',
        '&' => ' n ',
        '+' => ' ape?ng: ',
    ],
    // Croatian (Hrvatska)
    'hr' => [
        '=' => ' Jednaki ',
        '%' => ' Posto ',
        '∑' => ' zbroj ',
        '∆' => ' Delta ',
        '∞' => ' beskonacno ',
        '♥' => ' ljubav ',
        '&' => ' I ',
        '+' => ' Plus ',
    ],
    // Finnish
    'fi' => [
        '=' => ' Sama ',
        '%' => ' Prosenttia ',
        '∑' => ' sum ',
        '∆' => ' delta ',
        '∞' => ' aareton ',
        '♥' => ' rakkautta ',
        '&' => ' Ja ',
        '+' => ' Plus ',
    ],
    // Georgian (Kartvelian)
    'ka' => [
        '=' => ' tanasts\'ori ',
        '%' => ' p\'rotsent\'i ',
        '∑' => ' tankha ',
        '∆' => ' delt\'a ',
        '∞' => ' usasrulo ',
        '♥' => ' siq\'varuli ',
        '&' => ' da ',
        '+' => ' p\'lus ',
    ],
    // Russian
    'ru' => [
        '=' => ' ravnyj ',
        '%' => ' procent ',
        '∑' => ' summa ',
        '∆' => ' del\'ta ',
        '∞' => ' beskonecnost\' ',
        '♥' => ' lublu ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Russian - GOST 7.79-2000(B)
    'ru__gost_2000_b' => [
        '=' => ' ravnyj ',
        '%' => ' procent ',
        '∑' => ' summa ',
        '∆' => ' del\'ta ',
        '∞' => ' beskonecnost\' ',
        '♥' => ' lublu ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Russian - Passport (2013), ICAO
    'ru__passport_2013' => [
        '=' => ' ravnyj ',
        '%' => ' procent ',
        '∑' => ' summa ',
        '∆' => ' del\'ta ',
        '∞' => ' beskonecnost\' ',
        '♥' => ' lublu ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Ukrainian
    'uk' => [
        '=' => ' rivnij ',
        '%' => ' vidsotkiv ',
        '∑' => ' suma ',
        '∆' => ' del\'ta ',
        '∞' => ' neskincennist\' ',
        '♥' => ' lubov ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Kazakh
    'kk' => [
        '=' => ' ten\' ',
        '%' => ' Pajyzdar ',
        '∑' => ' zalpy ',
        '∆' => ' ajyrmasylyk, ',
        '∞' => ' seksiz ',
        '♥' => ' mahabbat ',
        '&' => ' z@ne ',
        '+' => ' plus ',
    ],
    // Czech
    'cs' => [
        '=' => ' rovnat se ',
        '%' => ' procento ',
        '∑' => ' soucet ',
        '∆' => ' delta ',
        '∞' => ' nekonecno ',
        '♥' => ' laska ',
        '&' => ' a ',
        '+' => ' plus ',
    ],
    // Danish
    'da' => [
        '=' => ' Lige ',
        '%' => ' Prozent ',
        '∑' => ' sum ',
        '∆' => ' delta ',
        '∞' => ' uendelig ',
        '♥' => ' kaerlighed ',
        '&' => ' Og ',
        '+' => ' Plus ',
    ],
    // Polish
    'pl' => [
        '=' => ' rowny ',
        '%' => ' procent ',
        '∑' => ' suma ',
        '∆' => ' delta ',
        '∞' => ' nieskonczonosc ',
        '♥' => ' milosc ',
        '&' => ' i ',
        '+' => ' plus ',
    ],
    // Romanian
    'ro' => [
        '=' => ' egal ',
        '%' => ' la suta ',
        '∑' => ' suma ',
        '∆' => ' delta ',
        '∞' => ' infinit ',
        '♥' => ' dragoste ',
        '&' => ' si ',
        '+' => ' la care se adauga ',
    ],
    // Esperanto
    'eo' => [
        '=' => ' Egalaj ',
        '%' => ' Procento ',
        '∑' => ' sumo ',
        '∆' => ' delto ',
        '∞' => ' senfina ',
        '♥' => ' amo ',
        '&' => ' Kaj ',
        '+' => ' Pli ',
    ],
    // Estonian
    'et' => [
        '=' => ' Vordsed ',
        '%' => ' Protsenti ',
        '∑' => ' summa ',
        '∆' => ' o ',
        '∞' => ' loputut ',
        '♥' => ' armastus ',
        '&' => ' Ja ',
        '+' => ' Pluss ',
    ],
    // Latvian
    'lv' => [
        '=' => ' vienads ',
        '%' => ' procents ',
        '∑' => ' summa ',
        '∆' => ' delta ',
        '∞' => ' bezgaliba ',
        '♥' => ' milestiba ',
        '&' => ' un ',
        '+' => ' pluss ',
    ],
    // Lithuanian
    'lt' => [
        '=' => ' lygus ',
        '%' => ' procentu ',
        '∑' => ' suma ',
        '∆' => ' delta ',
        '∞' => ' begalybe ',
        '♥' => ' meile ',
        '&' => ' ir ',
        '+' => ' plius ',
    ],
    // Norwegian
    'no' => [
        '=' => ' Lik ',
        '%' => ' Prosent ',
        '∑' => ' sum ',
        '∆' => ' delta ',
        '∞' => ' uendelig ',
        '♥' => ' kjaerlighet ',
        '&' => ' Og ',
        '+' => ' Pluss ',
    ],
    // Vietnamese
    'vi' => [
        '=' => ' cong bang ',
        '%' => ' phan tram ',
        '∑' => ' tong so ',
        '∆' => ' dong bang ',
        '∞' => ' vo cuc ',
        '♥' => ' Yeu ',
        '&' => ' va ',
        '+' => ' them ',
    ],
    // Arabic
    'ar' => [
        '=' => ' mtsawy ',
        '%' => ' nsbh mywyh ',
        '∑' => ' mjmw\' ',
        '∆' => ' dlta ',
        '∞' => ' ma la nhayt ',
        '♥' => ' hb ',
        '&' => ' w ',
        '+' => ' zayd ',
    ],
    // Persian (Farsi)
    'fa' => [
        '=' => ' brabr ',
        '%' => ' dr sd ',
        '∑' => ' mjmw\' ',
        '∆' => ' dlta ',
        '∞' => ' by nhayt ',
        '♥' => ' \'shq ',
        '&' => ' w ',
        '+' => ' bh \'lawh ',
    ],
    // Serbian
    'sr' => [
        '=' => ' jednak ',
        '%' => ' procenat ',
        '∑' => ' zbir ',
        '∆' => ' delta ',
        '∞' => ' beskraj ',
        '♥' => ' lubav ',
        '&' => ' i ',
        '+' => ' vise ',
    ],
    // Serbian - Cyrillic
    'sr__cyr' => [
        '=' => ' jednak ',
        '%' => ' procenat ',
        '∑' => ' zbir ',
        '∆' => ' delta ',
        '∞' => ' beskraj ',
        '♥' => ' lubav ',
        '&' => ' i ',
        '+' => ' vise ',
    ],
    // Serbian - Latin
    'sr__lat' => [
        '=' => ' jednak ',
        '%' => ' procenat ',
        '∑' => ' zbir ',
        '∆' => ' delta ',
        '∞' => ' beskraj ',
        '♥' => ' lubav ',
        '&' => ' i ',
        '+' => ' vise ',
    ],
    // Azerbaijani
    'az' => [
        '=' => ' b@rab@r ',
        '%' => ' faiz ',
        '∑' => ' m@bl@g ',
        '∆' => ' delta ',
        '∞' => ' sonsuzluq ',
        '♥' => ' sevgi ',
        '&' => ' v@ ',
        '+' => ' plus ',
    ],
    // Slovak
    'sk' => [
        '=' => ' rovny ',
        '%' => ' percento ',
        '∑' => ' sucet ',
        '∆' => ' delta ',
        '∞' => ' infinity ',
        '♥' => ' milovat ',
        '&' => ' a ',
        '+' => ' viac ',
    ],
    // French
    'fr' => [
        '=' => ' Egal ',
        '%' => ' Pourcentage ',
        '∑' => ' somme ',
        '∆' => ' delta ',
        '∞' => ' infini ',
        '♥' => ' amour ',
        '&' => ' Et ',
        '+' => ' Plus ',
    ],
    // Austrian (French)
    'fr_at' => [
        '=' => ' Egal ',
        '%' => ' Pourcentage ',
        '∑' => ' somme ',
        '∆' => ' delta ',
        '∞' => ' infini ',
        '♥' => ' amour ',
        '&' => ' Et ',
        '+' => ' Plus ',
    ],
    // Switzerland (French)
    'fr_ch' => [
        '=' => ' Egal ',
        '%' => ' Pourcentage ',
        '∑' => ' somme ',
        '∆' => ' delta ',
        '∞' => ' infini ',
        '♥' => ' amour ',
        '&' => ' Et ',
        '+' => ' Plus ',
    ],
    // German
    'de' => [
        '=' => ' gleich ',
        '%' => ' Prozent ',
        '∑' => ' gesamt ',
        '∆' => ' Unterschied ',
        '∞' => ' undendlich ',
        '♥' => ' liebe ',
        '&' => ' und ',
        '+' => ' plus ',
    ],
    // Austrian (German)
    'de_at' => [
        '=' => ' gleich ',
        '%' => ' Prozent ',
        '∑' => ' gesamt ',
        '∆' => ' Unterschied ',
        '∞' => ' undendlich ',
        '♥' => ' liebe ',
        '&' => ' und ',
        '+' => ' plus ',
    ],
    // Switzerland (German)
    'de_ch' => [
        '=' => ' gleich ',
        '%' => ' Prozent ',
        '∑' => ' gesamt ',
        '∆' => ' Unterschied ',
        '∞' => ' undendlich ',
        '♥' => ' liebe ',
        '&' => ' und ',
        '+' => ' plus ',
    ],
    // Bengali (Bangla)
    'bn' => [
        '=' => ' Saman ',
        '%' => ' Satakora ',
        '∑' => ' Samasti ',
        '∆' => ' Badhip ',
        '∞' => ' Ananta ',
        '♥' => ' Valobasa ',
        '&' => ' Abong ',
        '+' => ' Songzojon ',
    ],
    // English
    'en' => [
        '=' => ' equal ',
        '%' => ' percent ',
        '∑' => ' sum ',
        '∆' => ' delta ',
        '∞' => ' infinity ',
        '♥' => ' love ',
        '&' => ' and ',
        '+' => ' plus ',
    ],
    // Currency
    //
    // url: https://en.wikipedia.org/wiki/Currency_symbol
    'currency' => [
        '€'  => ' Euro ',
        '$'  => ' Dollar ',
        '₢'  => ' cruzeiro ',
        '₣'  => ' French franc ',
        '£'  => ' pound ',
        '₤'  => ' lira ', // Italian
        '₶'  => ' livre tournois ',
        'ℳ'  => ' mark ',
        '₥'  => ' mill ',
        '₦'  => ' naira ',
        '₧'  => ' peseta ',
        '₨'  => ' rupee ',
        'රු' => ' rupee ', // Sri Lankan
        'ரூ' => ' rupee ', // Sri Lankan
        '௹'  => ' rupee ', // Tamil
        'रू' => ' rupee ', // Nepalese
        '₹'  => ' rupee ', // Indian
        '૱'  => ' rupee ', // Gujarat
        '₩'  => ' won ',
        '₪'  => ' new shequel ',
        '₸'  => ' tenge ',
        '₫'  => ' dong ',
        '֏'  => ' dram ',
        '₭'  => ' kip ',
        '₺'  => ' lira ', // Turkish
        '₼'  => ' manat ',
        '₮'  => ' tugrik ',
        '₯'  => ' drachma ',
        '₰'  => ' pfennig ',
        '₷'  => ' spesmilo ',
        '₱'  => ' peso ', // Philippine
        '﷼‎' => ' riyal ',
        '₲'  => ' guarani ',
        '₾'  => ' lari ',
        '₳'  => ' austral ',
        '₴'  => ' hryvnia ',
        '₽'  => ' ruble ',
        '₵'  => ' cedi ',
        '₡'  => ' colon ',
        '¢'  => ' cent ',
        '¥'  => ' yen ',
        '円'  => ' yen ',
        '৳'  => ' taka ',
        '元'  => ' yuan ',
        '﷼'  => ' riyal ',
        '៛'  => ' riel ',
        '₠'  => ' European Currency ',
        '¤'  => ' currency ',
        '฿'  => ' baht ',
        '؋'  => ' afghani ',
    ],
    // Temperature
    //
    // url: https://en.wikipedia.org/wiki/Conversion_of_units_of_temperature
    'temperature' => [
        '°De' => ' Delisle ',
        '°Re' => ' Reaumur ', // Réaumur
        '°Ro' => ' Romer ', // Rømer
        '°R'  => ' Rankine ',
        '°C'  => ' Celsius ',
        '°F'  => ' Fahrenheit ',
        '°N'  => ' Newton ',
    ],
    'latin_symbols' => [
        '=' => '=',
        '%' => '%',
        '∑' => '∑',
        '∆' => '∆',
        '∞' => '∞',
        '♥' => '♥',
        '&' => '&',
        '+' => '+',
        // ---
        '©' => ' (c) ',
        '®' => ' (r) ',
        '@' => ' (at) ',
        '№' => ' No. ',
        '℞' => ' Rx ',
        '［' => '[',
        '＼' => '\\',
        '］' => ']',
        '＾' => '^',
        '＿' => '_',
        '｀' => '`',
        '‐' => '-',
        '‑' => '-',
        '‒' => '-',
        '–' => '-',
        '−' => '-',
        '—' => '-',
        '―' => '-',
        '﹘' => '-',
        '│' => '|',
        '∖' => '\\',
        '∕' => '/',
        '⁄' => '/',
        '￩' => '<-',
        '￫' => '->',
        '￪' => '|',
        '￬' => '|',
        '⁅' => '[',
        '⁆' => ']',
        '⁎' => '*',
        '、' => ',',
        '。' => '.',
        '〈' => '<',
        '〉' => '>',
        '《' => '<<',
        '》' => '>>',
        '〔' => '[',
        '〕' => ']',
        '〘' => '[',
        '〙' => ']',
        '〚' => '[',
        '〛' => ']',
        '﹝' => '[',
        '﹞' => ']',
        '︹' => '[',
        '︺' => ']',
        '﹇' => '[',
        '﹈' => ']',
        '︐' => ',',
        '︑' => ',',
        '︒' => '.',
        '︓' => ':',
        '︔' => ';',
        '︕' => '!',
        '︖' => '?',
        '︙' => '...',
        '︰' => '..',
        '︵' => '(',
        '︶' => ')',
        '﹙' => '(',
        '﹚' => ')',
        '︷' => '{',
        '︸' => '}',
        '﹛' => '{',
        '﹜' => '}',
        '︽' => '<<',
        '︾' => '>>',
        '︿' => '<',
        '﹀' => '>',
        '×' => '*',
        '÷' => '/',
        '≪' => '<<',
        '≫' => '>>',
        '⦅' => '((',
        '⦆' => '))',
        '〇' => '0',
        '′' => '\'',
        '〝' => '"',
        '〞' => '"',
        '«' => '<<',
        '»' => '>>',
        '‘' => "'",
        '’' => "'",
        '‚' => ',',
        '‛' => "'",
        '“' => '"',
        '”' => '"',
        '„' => '"',
        '‟' => '"',
        '‹' => '<',
        '›' => '>',
        '․' => '.',
        '‥' => '..',
        '…' => '...',
        '″' => '"',
        '‴' => '\'\'\'',
        '‶' => '``',
        '‷' => '```',
        '‼' => '!!',
        '⁇' => '??',
        '⁈' => '?!',
        '⁉' => '!?',
        '⁗' => '````',
        '⩴' => '::=',
        '⩵' => '==',
        '⩶' => '===',
        '﹔' => ';',
        '﹕' => ':',
        '﹖' => '?',
        '﹗' => '!',
        '﹍' => '_',
        '﹎' => '_',
        '﹏' => '_',
        '﹐' => ',',
        '﹑' => ',',
        '﹒' => '.',
        '﹟' => '#',
        '﹠' => '&',
        '﹡' => '*',
        '﹢' => '+',
        '﹣' => '-',
        '﹤' => '<',
        '﹥' => '>',
        '﹦' => '=',
        '﹨' => '\\',
        '﹩' => '$',
        '﹪' => '%',
        '﹫' => '@',
        '！' => '!',
        '＂' => '"',
        '＃' => '#',
        '＄' => '$',
        '％' => '%',
        '＆' => '&',
        '＇' => '\'',
        '（' => '(',
        '）' => ')',
        '＊' => '*',
        '＋' => '+',
        '，' => ',',
        '－' => '-',
        '．' => '.',
        '／' => '/',
        '：' => ':',
        '；' => ';',
        '＜' => '<',
        '＝' => '=',
        '＞' => '>',
        '？' => '?',
        '＠' => '@',
        '｛' => '{',
        '｜' => '|',
        '｝' => '}',
        '～' => '~',
        '｟' => '((',
        '｠' => '))',
        '￢' => '!',
        '￣' => '-',
        '￤' => '|',
        '￭' => '#',
    ],
];
<?php

return [
    'uz'                => 0,
    'tk'                => 1,
    'th'                => 0,
    'ps'                => 0,
    'or'                => 0,
    'mn'                => 0,
    'ko'                => 0,
    'ky'                => 0,
    'hy'                => 1,
    'bn'                => 5,
    'be'                => 0,
    'am'                => 0,
    'ja'                => 0,
    'zh'                => 0,
    'nl'                => 1,
    'it'                => 1,
    'mk'                => 1,
    'pt'                => 1,
    'el__greeklish'     => 2,
    'el'                => 2,
    'hi'                => 2,
    'sv'                => 1,
    'tr'                => 1,
    'bg'                => 2,
    'hu'                => 1,
    'my'                => 5,
    'hr'                => 2,
    'fi'                => 1,
    'ka'                => 1,
    'ru'                => 1,
    'ru__gost_2000_b'   => 1,
    'ru__passport_2013' => 1,
    'uk'                => 1,
    'kk'                => 1,
    'cs'                => 1,
    'da'                => 1,
    'pl'                => 1,
    'ro'                => 1,
    'eo'                => 1,
    'et'                => 1,
    'lv'                => 1,
    'lt'                => 1,
    'no'                => 1,
    'vi'                => 1,
    'ar'                => 1,
    'fa'                => 1,
    'sr'                => 1,
    'sr__cyr'           => 1,
    'sr__lat'           => 1,
    'az'                => 1,
    'sk'                => 1,
    'fr'                => 1,
    'fr_at'             => 1,
    'fr_ch'             => 1,
    'de'                => 1,
    'de_at'             => 1,
    'de_ch'             => 1,
    'en'                => 0,
    'latin'             => 3,
    ' '                 => 1,
    'msword'            => 1,
];
<?php return ['' => 0, "\x00" => 0, "\x01" => 1, "\x02" => 2, "\x03" => 3, "\x04" => 4, "\x05" => 5, "\x06" => 6, "\x07" => 7, "\x08" => 8, "\x09" => 9, "\x0A" => 10, "\x0B" => 11, "\x0C" => 12, "\x0D" => 13, "\x0E" => 14, "\x0F" => 15, "\x10" => 16, "\x11" => 17, "\x12" => 18, "\x13" => 19, "\x14" => 20, "\x15" => 21, "\x16" => 22, "\x17" => 23, "\x18" => 24, "\x19" => 25, "\x1A" => 26, "\x1B" => 27, "\x1C" => 28, "\x1D" => 29, "\x1E" => 30, "\x1F" => 31, "\x20" => 32, "\x21" => 33, "\x22" => 34, "\x23" => 35, "\x24" => 36, "\x25" => 37, "\x26" => 38, "\x27" => 39, "\x28" => 40, "\x29" => 41, "\x2A" => 42, "\x2B" => 43, "\x2C" => 44, "\x2D" => 45, "\x2E" => 46, "\x2F" => 47, "\x30" => 48, "\x31" => 49, "\x32" => 50, "\x33" => 51, "\x34" => 52, "\x35" => 53, "\x36" => 54, "\x37" => 55, "\x38" => 56, "\x39" => 57, "\x3A" => 58, "\x3B" => 59, "\x3C" => 60, "\x3D" => 61, "\x3E" => 62, "\x3F" => 63, "\x40" => 64, "\x41" => 65, "\x42" => 66, "\x43" => 67, "\x44" => 68, "\x45" => 69, "\x46" => 70, "\x47" => 71, "\x48" => 72, "\x49" => 73, "\x4A" => 74, "\x4B" => 75, "\x4C" => 76, "\x4D" => 77, "\x4E" => 78, "\x4F" => 79, "\x50" => 80, "\x51" => 81, "\x52" => 82, "\x53" => 83, "\x54" => 84, "\x55" => 85, "\x56" => 86, "\x57" => 87, "\x58" => 88, "\x59" => 89, "\x5A" => 90, "\x5B" => 91, "\x5C" => 92, "\x5D" => 93, "\x5E" => 94, "\x5F" => 95, "\x60" => 96, "\x61" => 97, "\x62" => 98, "\x63" => 99, "\x64" => 100, "\x65" => 101, "\x66" => 102, "\x67" => 103, "\x68" => 104, "\x69" => 105, "\x6A" => 106, "\x6B" => 107, "\x6C" => 108, "\x6D" => 109, "\x6E" => 110, "\x6F" => 111, "\x70" => 112, "\x71" => 113, "\x72" => 114, "\x73" => 115, "\x74" => 116, "\x75" => 117, "\x76" => 118, "\x77" => 119, "\x78" => 120, "\x79" => 121, "\x7A" => 122, "\x7B" => 123, "\x7C" => 124, "\x7D" => 125, "\x7E" => 126, "\x7F" => 127, "\x80" => 128, "\x81" => 129, "\x82" => 130, "\x83" => 131, "\x84" => 132, "\x85" => 133, "\x86" => 134, "\x87" => 135, "\x88" => 136, "\x89" => 137, "\x8A" => 138, "\x8B" => 139, "\x8C" => 140, "\x8D" => 141, "\x8E" => 142, "\x8F" => 143, "\x90" => 144, "\x91" => 145, "\x92" => 146, "\x93" => 147, "\x94" => 148, "\x95" => 149, "\x96" => 150, "\x97" => 151, "\x98" => 152, "\x99" => 153, "\x9A" => 154, "\x9B" => 155, "\x9C" => 156, "\x9D" => 157, "\x9E" => 158, "\x9F" => 159, "\xA0" => 160, "\xA1" => 161, "\xA2" => 162, "\xA3" => 163, "\xA4" => 164, "\xA5" => 165, "\xA6" => 166, "\xA7" => 167, "\xA8" => 168, "\xA9" => 169, "\xAA" => 170, "\xAB" => 171, "\xAC" => 172, "\xAD" => 173, "\xAE" => 174, "\xAF" => 175, "\xB0" => 176, "\xB1" => 177, "\xB2" => 178, "\xB3" => 179, "\xB4" => 180, "\xB5" => 181, "\xB6" => 182, "\xB7" => 183, "\xB8" => 184, "\xB9" => 185, "\xBA" => 186, "\xBB" => 187, "\xBC" => 188, "\xBD" => 189, "\xBE" => 190, "\xBF" => 191, "\xC0" => 192, "\xC1" => 193, "\xC2" => 194, "\xC3" => 195, "\xC4" => 196, "\xC5" => 197, "\xC6" => 198, "\xC7" => 199, "\xC8" => 200, "\xC9" => 201, "\xCA" => 202, "\xCB" => 203, "\xCC" => 204, "\xCD" => 205, "\xCE" => 206, "\xCF" => 207, "\xD0" => 208, "\xD1" => 209, "\xD2" => 210, "\xD3" => 211, "\xD4" => 212, "\xD5" => 213, "\xD6" => 214, "\xD7" => 215, "\xD8" => 216, "\xD9" => 217, "\xDA" => 218, "\xDB" => 219, "\xDC" => 220, "\xDD" => 221, "\xDE" => 222, "\xDF" => 223, "\xE0" => 224, "\xE1" => 225, "\xE2" => 226, "\xE3" => 227, "\xE4" => 228, "\xE5" => 229, "\xE6" => 230, "\xE7" => 231, "\xE8" => 232, "\xE9" => 233, "\xEA" => 234, "\xEB" => 235, "\xEC" => 236, "\xED" => 237, "\xEE" => 238, "\xEF" => 239, "\xF0" => 240, "\xF1" => 241, "\xF2" => 242, "\xF3" => 243, "\xF4" => 244, "\xF5" => 245, "\xF6" => 246, "\xF7" => 247, "\xF8" => 248, "\xF9" => 249, "\xFA" => 250, "\xFB" => 251, "\xFC" => 252, "\xFD" => 253, "\xFE" => 254, "\xFF" => 255];
<?php

return [
    0 => [
        0   => 'ß',
        1   => 'İ',
        2   => 'ŉ',
        3   => 'ǰ',
        4   => 'ΐ',
        5   => 'ΰ',
        6   => 'և',
        7   => 'ẖ',
        8   => 'ẗ',
        9   => 'ẘ',
        10  => 'ẙ',
        11  => 'ẚ',
        12  => 'ẞ',
        13  => 'ὐ',
        14  => 'ὒ',
        15  => 'ὔ',
        16  => 'ὖ',
        17  => 'ᾀ',
        18  => 'ᾁ',
        19  => 'ᾂ',
        20  => 'ᾃ',
        21  => 'ᾄ',
        22  => 'ᾅ',
        23  => 'ᾆ',
        24  => 'ᾇ',
        25  => 'ᾈ',
        26  => 'ᾉ',
        27  => 'ᾊ',
        28  => 'ᾋ',
        29  => 'ᾌ',
        30  => 'ᾍ',
        31  => 'ᾎ',
        32  => 'ᾏ',
        33  => 'ᾐ',
        34  => 'ᾑ',
        35  => 'ᾒ',
        36  => 'ᾓ',
        37  => 'ᾔ',
        38  => 'ᾕ',
        39  => 'ᾖ',
        40  => 'ᾗ',
        41  => 'ᾘ',
        42  => 'ᾙ',
        43  => 'ᾚ',
        44  => 'ᾛ',
        45  => 'ᾜ',
        46  => 'ᾝ',
        47  => 'ᾞ',
        48  => 'ᾟ',
        49  => 'ᾠ',
        50  => 'ᾡ',
        51  => 'ᾢ',
        52  => 'ᾣ',
        53  => 'ᾤ',
        54  => 'ᾥ',
        55  => 'ᾦ',
        56  => 'ᾧ',
        57  => 'ᾨ',
        58  => 'ᾩ',
        59  => 'ᾪ',
        60  => 'ᾫ',
        61  => 'ᾬ',
        62  => 'ᾭ',
        63  => 'ᾮ',
        64  => 'ᾯ',
        65  => 'ᾲ',
        66  => 'ᾳ',
        67  => 'ᾴ',
        68  => 'ᾶ',
        69  => 'ᾷ',
        70  => 'ᾼ',
        71  => 'ῂ',
        72  => 'ῃ',
        73  => 'ῄ',
        74  => 'ῆ',
        75  => 'ῇ',
        76  => 'ῌ',
        77  => 'ῒ',
        78  => 'ΐ',
        79  => 'ῖ',
        80  => 'ῗ',
        81  => 'ῢ',
        82  => 'ΰ',
        83  => 'ῤ',
        84  => 'ῦ',
        85  => 'ῧ',
        86  => 'ῲ',
        87  => 'ῳ',
        88  => 'ῴ',
        89  => 'ῶ',
        90  => 'ῷ',
        91  => 'ῼ',
        92  => 'ﬀ',
        93  => 'ﬁ',
        94  => 'ﬂ',
        95  => 'ﬃ',
        96  => 'ﬄ',
        97  => 'ﬅ',
        98  => 'ﬆ',
        99  => 'ﬓ',
        100 => 'ﬔ',
        101 => 'ﬕ',
        102 => 'ﬖ',
        103 => 'ﬗ',
        104 => 'J̌̌',
    ],
    1 => [
        0   => 'ss',
        1   => 'i̇',
        2   => 'ʼn',
        3   => 'ǰ',
        4   => 'ΐ',
        5   => 'ΰ',
        6   => 'եւ',
        7   => 'ẖ',
        8   => 'ẗ',
        9   => 'ẘ',
        10  => 'ẙ',
        11  => 'aʾ',
        12  => 'ss',
        13  => 'ὐ',
        14  => 'ὒ',
        15  => 'ὔ',
        16  => 'ὖ',
        17  => 'ἀι',
        18  => 'ἁι',
        19  => 'ἂι',
        20  => 'ἃι',
        21  => 'ἄι',
        22  => 'ἅι',
        23  => 'ἆι',
        24  => 'ἇι',
        25  => 'ἀι',
        26  => 'ἁι',
        27  => 'ἂι',
        28  => 'ἃι',
        29  => 'ἄι',
        30  => 'ἅι',
        31  => 'ἆι',
        32  => 'ἇι',
        33  => 'ἠι',
        34  => 'ἡι',
        35  => 'ἢι',
        36  => 'ἣι',
        37  => 'ἤι',
        38  => 'ἥι',
        39  => 'ἦι',
        40  => 'ἧι',
        41  => 'ἠι',
        42  => 'ἡι',
        43  => 'ἢι',
        44  => 'ἣι',
        45  => 'ἤι',
        46  => 'ἥι',
        47  => 'ἦι',
        48  => 'ἧι',
        49  => 'ὠι',
        50  => 'ὡι',
        51  => 'ὢι',
        52  => 'ὣι',
        53  => 'ὤι',
        54  => 'ὥι',
        55  => 'ὦι',
        56  => 'ὧι',
        57  => 'ὠι',
        58  => 'ὡι',
        59  => 'ὢι',
        60  => 'ὣι',
        61  => 'ὤι',
        62  => 'ὥι',
        63  => 'ὦι',
        64  => 'ὧι',
        65  => 'ὰι',
        66  => 'αι',
        67  => 'άι',
        68  => 'ᾶ',
        69  => 'ᾶι',
        70  => 'αι',
        71  => 'ὴι',
        72  => 'ηι',
        73  => 'ήι',
        74  => 'ῆ',
        75  => 'ῆι',
        76  => 'ηι',
        77  => 'ῒ',
        78  => 'ΐ',
        79  => 'ῖ',
        80  => 'ῗ',
        81  => 'ῢ',
        82  => 'ΰ',
        83  => 'ῤ',
        84  => 'ῦ',
        85  => 'ῧ',
        86  => 'ὼι',
        87  => 'ωι',
        88  => 'ώι',
        89  => 'ῶ',
        90  => 'ῶι',
        91  => 'ωι',
        92  => 'ff',
        93  => 'fi',
        94  => 'fl',
        95  => 'ffi',
        96  => 'ffl',
        97  => 'st',
        98  => 'st',
        99  => 'մն',
        100 => 'մե',
        101 => 'մի',
        102 => 'վն',
        103 => 'մխ',
        104 => 'ǰ',
    ],
];
<?php return [0 => "\x00", 1 => "\x01", 2 => "\x02", 3 => "\x03", 4 => "\x04", 5 => "\x05", 6 => "\x06", 7 => "\x07", 8 => "\x08", 9 => "\x09", 10 => "\x0A", 11 => "\x0B", 12 => "\x0C", 13 => "\x0D", 14 => "\x0E", 15 => "\x0F", 16 => "\x10", 17 => "\x11", 18 => "\x12", 19 => "\x13", 20 => "\x14", 21 => "\x15", 22 => "\x16", 23 => "\x17", 24 => "\x18", 25 => "\x19", 26 => "\x1A", 27 => "\x1B", 28 => "\x1C", 29 => "\x1D", 30 => "\x1E", 31 => "\x1F", 32 => "\x20", 33 => "\x21", 34 => "\x22", 35 => "\x23", 36 => "\x24", 37 => "\x25", 38 => "\x26", 39 => "\x27", 40 => "\x28", 41 => "\x29", 42 => "\x2A", 43 => "\x2B", 44 => "\x2C", 45 => "\x2D", 46 => "\x2E", 47 => "\x2F", 48 => "\x30", 49 => "\x31", 50 => "\x32", 51 => "\x33", 52 => "\x34", 53 => "\x35", 54 => "\x36", 55 => "\x37", 56 => "\x38", 57 => "\x39", 58 => "\x3A", 59 => "\x3B", 60 => "\x3C", 61 => "\x3D", 62 => "\x3E", 63 => "\x3F", 64 => "\x40", 65 => "\x41", 66 => "\x42", 67 => "\x43", 68 => "\x44", 69 => "\x45", 70 => "\x46", 71 => "\x47", 72 => "\x48", 73 => "\x49", 74 => "\x4A", 75 => "\x4B", 76 => "\x4C", 77 => "\x4D", 78 => "\x4E", 79 => "\x4F", 80 => "\x50", 81 => "\x51", 82 => "\x52", 83 => "\x53", 84 => "\x54", 85 => "\x55", 86 => "\x56", 87 => "\x57", 88 => "\x58", 89 => "\x59", 90 => "\x5A", 91 => "\x5B", 92 => "\x5C", 93 => "\x5D", 94 => "\x5E", 95 => "\x5F", 96 => "\x60", 97 => "\x61", 98 => "\x62", 99 => "\x63", 100 => "\x64", 101 => "\x65", 102 => "\x66", 103 => "\x67", 104 => "\x68", 105 => "\x69", 106 => "\x6A", 107 => "\x6B", 108 => "\x6C", 109 => "\x6D", 110 => "\x6E", 111 => "\x6F", 112 => "\x70", 113 => "\x71", 114 => "\x72", 115 => "\x73", 116 => "\x74", 117 => "\x75", 118 => "\x76", 119 => "\x77", 120 => "\x78", 121 => "\x79", 122 => "\x7A", 123 => "\x7B", 124 => "\x7C", 125 => "\x7D", 126 => "\x7E", 127 => "\x7F", 128 => "\x80", 129 => "\x81", 130 => "\x82", 131 => "\x83", 132 => "\x84", 133 => "\x85", 134 => "\x86", 135 => "\x87", 136 => "\x88", 137 => "\x89", 138 => "\x8A", 139 => "\x8B", 140 => "\x8C", 141 => "\x8D", 142 => "\x8E", 143 => "\x8F", 144 => "\x90", 145 => "\x91", 146 => "\x92", 147 => "\x93", 148 => "\x94", 149 => "\x95", 150 => "\x96", 151 => "\x97", 152 => "\x98", 153 => "\x99", 154 => "\x9A", 155 => "\x9B", 156 => "\x9C", 157 => "\x9D", 158 => "\x9E", 159 => "\x9F", 160 => "\xA0", 161 => "\xA1", 162 => "\xA2", 163 => "\xA3", 164 => "\xA4", 165 => "\xA5", 166 => "\xA6", 167 => "\xA7", 168 => "\xA8", 169 => "\xA9", 170 => "\xAA", 171 => "\xAB", 172 => "\xAC", 173 => "\xAD", 174 => "\xAE", 175 => "\xAF", 176 => "\xB0", 177 => "\xB1", 178 => "\xB2", 179 => "\xB3", 180 => "\xB4", 181 => "\xB5", 182 => "\xB6", 183 => "\xB7", 184 => "\xB8", 185 => "\xB9", 186 => "\xBA", 187 => "\xBB", 188 => "\xBC", 189 => "\xBD", 190 => "\xBE", 191 => "\xBF", 192 => "\xC0", 193 => "\xC1", 194 => "\xC2", 195 => "\xC3", 196 => "\xC4", 197 => "\xC5", 198 => "\xC6", 199 => "\xC7", 200 => "\xC8", 201 => "\xC9", 202 => "\xCA", 203 => "\xCB", 204 => "\xCC", 205 => "\xCD", 206 => "\xCE", 207 => "\xCF", 208 => "\xD0", 209 => "\xD1", 210 => "\xD2", 211 => "\xD3", 212 => "\xD4", 213 => "\xD5", 214 => "\xD6", 215 => "\xD7", 216 => "\xD8", 217 => "\xD9", 218 => "\xDA", 219 => "\xDB", 220 => "\xDC", 221 => "\xDD", 222 => "\xDE", 223 => "\xDF", 224 => "\xE0", 225 => "\xE1", 226 => "\xE2", 227 => "\xE3", 228 => "\xE4", 229 => "\xE5", 230 => "\xE6", 231 => "\xE7", 232 => "\xE8", 233 => "\xE9", 234 => "\xEA", 235 => "\xEB", 236 => "\xEC", 237 => "\xED", 238 => "\xEE", 239 => "\xEF", 240 => "\xF0", 241 => "\xF1", 242 => "\xF2", 243 => "\xF3", 244 => "\xF4", 245 => "\xF5", 246 => "\xF6", 247 => "\xF7", 248 => "\xF8", 249 => "\xF9", 250 => "\xFA", 251 => "\xFB", 252 => "\xFC", 253 => "\xFD", 254 => "\xFE", 255 => "\xFF"];
<?php

// ########## Unicode Emoji v11.0 ##########
// ##### Emoji group: Smileys & People #####
// ##### Emoji subgroup: Face-positive #####

return ['CHARACTER_GRINNING_FACE' => "\u{1F600}", 'CHARACTER_BEAMING_FACE_WITH_SMILING_EYES' => "\u{1F601}", 'CHARACTER_FACE_WITH_TEARS_OF_JOY' => "\u{1F602}", 'CHARACTER_ROLLING_ON_THE_FLOOR_LAUGHING' => "\u{1F923}", 'CHARACTER_GRINNING_FACE_WITH_BIG_EYES' => "\u{1F603}", 'CHARACTER_GRINNING_FACE_WITH_SMILING_EYES' => "\u{1F604}", 'CHARACTER_GRINNING_FACE_WITH_SWEAT' => "\u{1F605}", 'CHARACTER_GRINNING_SQUINTING_FACE' => "\u{1F606}", 'CHARACTER_WINKING_FACE' => "\u{1F609}", 'CHARACTER_SMILING_FACE_WITH_SMILING_EYES' => "\u{1F60A}", 'CHARACTER_FACE_SAVORING_FOOD' => "\u{1F60B}", 'CHARACTER_SMILING_FACE_WITH_SUNGLASSES' => "\u{1F60E}", 'CHARACTER_SMILING_FACE_WITH_HEART_EYES' => "\u{1F60D}", 'CHARACTER_FACE_BLOWING_A_KISS' => "\u{1F618}", 'CHARACTER_SMILING_FACE_WITH_3_HEARTS' => "\u{1F970}", 'CHARACTER_KISSING_FACE' => "\u{1F617}", 'CHARACTER_KISSING_FACE_WITH_SMILING_EYES' => "\u{1F619}", 'CHARACTER_KISSING_FACE_WITH_CLOSED_EYES' => "\u{1F61A}", 'CHARACTER_SMILING_FACE' => "\u{263A}\u{FE0F}", 'CHARACTER_SLIGHTLY_SMILING_FACE' => "\u{1F642}", 'CHARACTER_HUGGING_FACE' => "\u{1F917}", 'CHARACTER_STAR_STRUCK' => "\u{1F929}", 'CHARACTER_THINKING_FACE' => "\u{1F914}", 'CHARACTER_FACE_WITH_RAISED_EYEBROW' => "\u{1F928}", 'CHARACTER_NEUTRAL_FACE' => "\u{1F610}", 'CHARACTER_EXPRESSIONLESS_FACE' => "\u{1F611}", 'CHARACTER_FACE_WITHOUT_MOUTH' => "\u{1F636}", 'CHARACTER_FACE_WITH_ROLLING_EYES' => "\u{1F644}", 'CHARACTER_SMIRKING_FACE' => "\u{1F60F}", 'CHARACTER_PERSEVERING_FACE' => "\u{1F623}", 'CHARACTER_SAD_BUT_RELIEVED_FACE' => "\u{1F625}", 'CHARACTER_FACE_WITH_OPEN_MOUTH' => "\u{1F62E}", 'CHARACTER_ZIPPER_MOUTH_FACE' => "\u{1F910}", 'CHARACTER_HUSHED_FACE' => "\u{1F62F}", 'CHARACTER_SLEEPY_FACE' => "\u{1F62A}", 'CHARACTER_TIRED_FACE' => "\u{1F62B}", 'CHARACTER_SLEEPING_FACE' => "\u{1F634}", 'CHARACTER_RELIEVED_FACE' => "\u{1F60C}", 'CHARACTER_FACE_WITH_TONGUE' => "\u{1F61B}", 'CHARACTER_WINKING_FACE_WITH_TONGUE' => "\u{1F61C}", 'CHARACTER_SQUINTING_FACE_WITH_TONGUE' => "\u{1F61D}", 'CHARACTER_DROOLING_FACE' => "\u{1F924}", 'CHARACTER_UNAMUSED_FACE' => "\u{1F612}", 'CHARACTER_DOWNCAST_FACE_WITH_SWEAT' => "\u{1F613}", 'CHARACTER_PENSIVE_FACE' => "\u{1F614}", 'CHARACTER_CONFUSED_FACE' => "\u{1F615}", 'CHARACTER_UPSIDE_DOWN_FACE' => "\u{1F643}", 'CHARACTER_MONEY_MOUTH_FACE' => "\u{1F911}", 'CHARACTER_ASTONISHED_FACE' => "\u{1F632}", 'CHARACTER_FROWNING_FACE' => "\u{2639}\u{FE0F}", 'CHARACTER_SLIGHTLY_FROWNING_FACE' => "\u{1F641}", 'CHARACTER_CONFOUNDED_FACE' => "\u{1F616}", 'CHARACTER_DISAPPOINTED_FACE' => "\u{1F61E}", 'CHARACTER_WORRIED_FACE' => "\u{1F61F}", 'CHARACTER_FACE_WITH_STEAM_FROM_NOSE' => "\u{1F624}", 'CHARACTER_CRYING_FACE' => "\u{1F622}", 'CHARACTER_LOUDLY_CRYING_FACE' => "\u{1F62D}", 'CHARACTER_FROWNING_FACE_WITH_OPEN_MOUTH' => "\u{1F626}", 'CHARACTER_ANGUISHED_FACE' => "\u{1F627}", 'CHARACTER_FEARFUL_FACE' => "\u{1F628}", 'CHARACTER_WEARY_FACE' => "\u{1F629}", 'CHARACTER_EXPLODING_HEAD' => "\u{1F92F}", 'CHARACTER_GRIMACING_FACE' => "\u{1F62C}", 'CHARACTER_ANXIOUS_FACE_WITH_SWEAT' => "\u{1F630}", 'CHARACTER_FACE_SCREAMING_IN_FEAR' => "\u{1F631}", 'CHARACTER_HOT_FACE' => "\u{1F975}", 'CHARACTER_COLD_FACE' => "\u{1F976}", 'CHARACTER_FLUSHED_FACE' => "\u{1F633}", 'CHARACTER_ZANY_FACE' => "\u{1F92A}", 'CHARACTER_DIZZY_FACE' => "\u{1F635}", 'CHARACTER_POUTING_FACE' => "\u{1F621}", 'CHARACTER_ANGRY_FACE' => "\u{1F620}", 'CHARACTER_FACE_WITH_SYMBOLS_ON_MOUTH' => "\u{1F92C}", 'CHARACTER_FACE_WITH_MEDICAL_MASK' => "\u{1F637}", 'CHARACTER_FACE_WITH_THERMOMETER' => "\u{1F912}", 'CHARACTER_FACE_WITH_HEAD_BANDAGE' => "\u{1F915}", 'CHARACTER_NAUSEATED_FACE' => "\u{1F922}", 'CHARACTER_FACE_VOMITING' => "\u{1F92E}", 'CHARACTER_SNEEZING_FACE' => "\u{1F927}", 'CHARACTER_SMILING_FACE_WITH_HALO' => "\u{1F607}", 'CHARACTER_COWBOY_HAT_FACE' => "\u{1F920}", 'CHARACTER_PARTYING_FACE' => "\u{1F973}", 'CHARACTER_WOOZY_FACE' => "\u{1F974}", 'CHARACTER_PLEADING_FACE' => "\u{1F97A}", 'CHARACTER_LYING_FACE' => "\u{1F925}", 'CHARACTER_SHUSHING_FACE' => "\u{1F92B}", 'CHARACTER_FACE_WITH_HAND_OVER_MOUTH' => "\u{1F92D}", 'CHARACTER_FACE_WITH_MONOCLE' => "\u{1F9D0}", 'CHARACTER_NERD_FACE' => "\u{1F913}", 'CHARACTER_SMILING_FACE_WITH_HORNS' => "\u{1F608}", 'CHARACTER_ANGRY_FACE_WITH_HORNS' => "\u{1F47F}", 'CHARACTER_CLOWN_FACE' => "\u{1F921}", 'CHARACTER_OGRE' => "\u{1F479}", 'CHARACTER_GOBLIN' => "\u{1F47A}", 'CHARACTER_SKULL' => "\u{1F480}", 'CHARACTER_SKULL_AND_CROSSBONES' => "\u{2620}\u{FE0F}", 'CHARACTER_GHOST' => "\u{1F47B}", 'CHARACTER_ALIEN' => "\u{1F47D}", 'CHARACTER_ALIEN_MONSTER' => "\u{1F47E}", 'CHARACTER_ROBOT_FACE' => "\u{1F916}", 'CHARACTER_PILE_OF_POO' => "\u{1F4A9}", 'CHARACTER_GRINNING_CAT_FACE' => "\u{1F63A}", 'CHARACTER_GRINNING_CAT_FACE_WITH_SMILING_EYES' => "\u{1F638}", 'CHARACTER_CAT_FACE_WITH_TEARS_OF_JOY' => "\u{1F639}", 'CHARACTER_SMILING_CAT_FACE_WITH_HEART_EYES' => "\u{1F63B}", 'CHARACTER_CAT_FACE_WITH_WRY_SMILE' => "\u{1F63C}", 'CHARACTER_KISSING_CAT_FACE' => "\u{1F63D}", 'CHARACTER_WEARY_CAT_FACE' => "\u{1F640}", 'CHARACTER_CRYING_CAT_FACE' => "\u{1F63F}", 'CHARACTER_POUTING_CAT_FACE' => "\u{1F63E}", 'CHARACTER_SEE_NO_EVIL_MONKEY' => "\u{1F648}", 'CHARACTER_HEAR_NO_EVIL_MONKEY' => "\u{1F649}", 'CHARACTER_SPEAK_NO_EVIL_MONKEY' => "\u{1F64A}", 'CHARACTER_LIGHT_SKIN_TONE' => "\u{1F3FB}", 'CHARACTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3FC}", 'CHARACTER_MEDIUM_SKIN_TONE' => "\u{1F3FD}", 'CHARACTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F3FE}", 'CHARACTER_DARK_SKIN_TONE' => "\u{1F3FF}", 'CHARACTER_BABY' => "\u{1F476}", 'CHARACTER_BABY_LIGHT_SKIN_TONE' => "\u{1F476}\u{1F3FB}", 'CHARACTER_BABY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F476}\u{1F3FC}", 'CHARACTER_BABY_MEDIUM_SKIN_TONE' => "\u{1F476}\u{1F3FD}", 'CHARACTER_BABY_MEDIUM_DARK_SKIN_TONE' => "\u{1F476}\u{1F3FE}", 'CHARACTER_BABY_DARK_SKIN_TONE' => "\u{1F476}\u{1F3FF}", 'CHARACTER_CHILD' => "\u{1F9D2}", 'CHARACTER_CHILD_LIGHT_SKIN_TONE' => "\u{1F9D2}\u{1F3FB}", 'CHARACTER_CHILD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D2}\u{1F3FC}", 'CHARACTER_CHILD_MEDIUM_SKIN_TONE' => "\u{1F9D2}\u{1F3FD}", 'CHARACTER_CHILD_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D2}\u{1F3FE}", 'CHARACTER_CHILD_DARK_SKIN_TONE' => "\u{1F9D2}\u{1F3FF}", 'CHARACTER_BOY' => "\u{1F466}", 'CHARACTER_BOY_LIGHT_SKIN_TONE' => "\u{1F466}\u{1F3FB}", 'CHARACTER_BOY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F466}\u{1F3FC}", 'CHARACTER_BOY_MEDIUM_SKIN_TONE' => "\u{1F466}\u{1F3FD}", 'CHARACTER_BOY_MEDIUM_DARK_SKIN_TONE' => "\u{1F466}\u{1F3FE}", 'CHARACTER_BOY_DARK_SKIN_TONE' => "\u{1F466}\u{1F3FF}", 'CHARACTER_GIRL' => "\u{1F467}", 'CHARACTER_GIRL_LIGHT_SKIN_TONE' => "\u{1F467}\u{1F3FB}", 'CHARACTER_GIRL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F467}\u{1F3FC}", 'CHARACTER_GIRL_MEDIUM_SKIN_TONE' => "\u{1F467}\u{1F3FD}", 'CHARACTER_GIRL_MEDIUM_DARK_SKIN_TONE' => "\u{1F467}\u{1F3FE}", 'CHARACTER_GIRL_DARK_SKIN_TONE' => "\u{1F467}\u{1F3FF}", 'CHARACTER_ADULT' => "\u{1F9D1}", 'CHARACTER_ADULT_LIGHT_SKIN_TONE' => "\u{1F9D1}\u{1F3FB}", 'CHARACTER_ADULT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D1}\u{1F3FC}", 'CHARACTER_ADULT_MEDIUM_SKIN_TONE' => "\u{1F9D1}\u{1F3FD}", 'CHARACTER_ADULT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D1}\u{1F3FE}", 'CHARACTER_ADULT_DARK_SKIN_TONE' => "\u{1F9D1}\u{1F3FF}", 'CHARACTER_MAN' => "\u{1F468}", 'CHARACTER_MAN_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}", 'CHARACTER_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}", 'CHARACTER_MAN_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}", 'CHARACTER_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}", 'CHARACTER_MAN_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}", 'CHARACTER_WOMAN' => "\u{1F469}", 'CHARACTER_WOMAN_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}", 'CHARACTER_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}", 'CHARACTER_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}", 'CHARACTER_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}", 'CHARACTER_WOMAN_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}", 'CHARACTER_OLDER_ADULT' => "\u{1F9D3}", 'CHARACTER_OLDER_ADULT_LIGHT_SKIN_TONE' => "\u{1F9D3}\u{1F3FB}", 'CHARACTER_OLDER_ADULT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D3}\u{1F3FC}", 'CHARACTER_OLDER_ADULT_MEDIUM_SKIN_TONE' => "\u{1F9D3}\u{1F3FD}", 'CHARACTER_OLDER_ADULT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D3}\u{1F3FE}", 'CHARACTER_OLDER_ADULT_DARK_SKIN_TONE' => "\u{1F9D3}\u{1F3FF}", 'CHARACTER_OLD_MAN' => "\u{1F474}", 'CHARACTER_OLD_MAN_LIGHT_SKIN_TONE' => "\u{1F474}\u{1F3FB}", 'CHARACTER_OLD_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F474}\u{1F3FC}", 'CHARACTER_OLD_MAN_MEDIUM_SKIN_TONE' => "\u{1F474}\u{1F3FD}", 'CHARACTER_OLD_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F474}\u{1F3FE}", 'CHARACTER_OLD_MAN_DARK_SKIN_TONE' => "\u{1F474}\u{1F3FF}", 'CHARACTER_OLD_WOMAN' => "\u{1F475}", 'CHARACTER_OLD_WOMAN_LIGHT_SKIN_TONE' => "\u{1F475}\u{1F3FB}", 'CHARACTER_OLD_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F475}\u{1F3FC}", 'CHARACTER_OLD_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F475}\u{1F3FD}", 'CHARACTER_OLD_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F475}\u{1F3FE}", 'CHARACTER_OLD_WOMAN_DARK_SKIN_TONE' => "\u{1F475}\u{1F3FF}", 'CHARACTER_MAN_HEALTH_WORKER' => "\u{1F468}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_HEALTH_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER' => "\u{1F469}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_WOMAN_HEALTH_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2695}\u{FE0F}", 'CHARACTER_MAN_STUDENT' => "\u{1F468}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F393}", 'CHARACTER_MAN_STUDENT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT' => "\u{1F469}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F393}", 'CHARACTER_WOMAN_STUDENT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F393}", 'CHARACTER_MAN_TEACHER' => "\u{1F468}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_TEACHER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER' => "\u{1F469}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3EB}", 'CHARACTER_WOMAN_TEACHER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3EB}", 'CHARACTER_MAN_JUDGE' => "\u{1F468}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_JUDGE_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE' => "\u{1F469}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_WOMAN_JUDGE_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2696}\u{FE0F}", 'CHARACTER_MAN_FARMER' => "\u{1F468}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F33E}", 'CHARACTER_MAN_FARMER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER' => "\u{1F469}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F33E}", 'CHARACTER_WOMAN_FARMER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F33E}", 'CHARACTER_MAN_COOK' => "\u{1F468}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F373}", 'CHARACTER_MAN_COOK_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK' => "\u{1F469}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F373}", 'CHARACTER_WOMAN_COOK_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F373}", 'CHARACTER_MAN_MECHANIC' => "\u{1F468}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F527}", 'CHARACTER_MAN_MECHANIC_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC' => "\u{1F469}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F527}", 'CHARACTER_WOMAN_MECHANIC_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F527}", 'CHARACTER_MAN_FACTORY_WORKER' => "\u{1F468}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_FACTORY_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER' => "\u{1F469}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3ED}", 'CHARACTER_WOMAN_FACTORY_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3ED}", 'CHARACTER_MAN_OFFICE_WORKER' => "\u{1F468}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_OFFICE_WORKER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER' => "\u{1F469}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F4BC}", 'CHARACTER_WOMAN_OFFICE_WORKER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F4BC}", 'CHARACTER_MAN_SCIENTIST' => "\u{1F468}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F52C}", 'CHARACTER_MAN_SCIENTIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST' => "\u{1F469}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F52C}", 'CHARACTER_WOMAN_SCIENTIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F52C}", 'CHARACTER_MAN_TECHNOLOGIST' => "\u{1F468}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_TECHNOLOGIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST' => "\u{1F469}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F4BB}", 'CHARACTER_WOMAN_TECHNOLOGIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F4BB}", 'CHARACTER_MAN_SINGER' => "\u{1F468}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_SINGER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER' => "\u{1F469}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3A4}", 'CHARACTER_WOMAN_SINGER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3A4}", 'CHARACTER_MAN_ARTIST' => "\u{1F468}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_ARTIST_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST' => "\u{1F469}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F3A8}", 'CHARACTER_WOMAN_ARTIST_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F3A8}", 'CHARACTER_MAN_PILOT' => "\u{1F468}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_PILOT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT' => "\u{1F469}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_WOMAN_PILOT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{2708}\u{FE0F}", 'CHARACTER_MAN_ASTRONAUT' => "\u{1F468}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F680}", 'CHARACTER_MAN_ASTRONAUT_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT' => "\u{1F469}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F680}", 'CHARACTER_WOMAN_ASTRONAUT_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F680}", 'CHARACTER_MAN_FIREFIGHTER' => "\u{1F468}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F692}", 'CHARACTER_MAN_FIREFIGHTER_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER' => "\u{1F469}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F692}", 'CHARACTER_WOMAN_FIREFIGHTER_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F692}", 'CHARACTER_POLICE_OFFICER' => "\u{1F46E}", 'CHARACTER_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}", 'CHARACTER_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}", 'CHARACTER_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}", 'CHARACTER_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}", 'CHARACTER_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}", 'CHARACTER_MAN_POLICE_OFFICER' => "\u{1F46E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER' => "\u{1F46E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F46E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_SKIN_TONE' => "\u{1F46E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_MEDIUM_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POLICE_OFFICER_DARK_SKIN_TONE' => "\u{1F46E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_DETECTIVE' => "\u{1F575}\u{FE0F}", 'CHARACTER_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}", 'CHARACTER_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}", 'CHARACTER_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}", 'CHARACTER_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}", 'CHARACTER_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}", 'CHARACTER_MAN_DETECTIVE' => "\u{1F575}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE' => "\u{1F575}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F575}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_SKIN_TONE' => "\u{1F575}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_MEDIUM_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DETECTIVE_DARK_SKIN_TONE' => "\u{1F575}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_GUARD' => "\u{1F482}", 'CHARACTER_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}", 'CHARACTER_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}", 'CHARACTER_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}", 'CHARACTER_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}", 'CHARACTER_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}", 'CHARACTER_MAN_GUARD' => "\u{1F482}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GUARD' => "\u{1F482}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F482}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_SKIN_TONE' => "\u{1F482}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_MEDIUM_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GUARD_DARK_SKIN_TONE' => "\u{1F482}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_CONSTRUCTION_WORKER' => "\u{1F477}", 'CHARACTER_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}", 'CHARACTER_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}", 'CHARACTER_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}", 'CHARACTER_MAN_CONSTRUCTION_WORKER' => "\u{1F477}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER' => "\u{1F477}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F477}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_SKIN_TONE' => "\u{1F477}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_MEDIUM_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CONSTRUCTION_WORKER_DARK_SKIN_TONE' => "\u{1F477}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PRINCE' => "\u{1F934}", 'CHARACTER_PRINCE_LIGHT_SKIN_TONE' => "\u{1F934}\u{1F3FB}", 'CHARACTER_PRINCE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F934}\u{1F3FC}", 'CHARACTER_PRINCE_MEDIUM_SKIN_TONE' => "\u{1F934}\u{1F3FD}", 'CHARACTER_PRINCE_MEDIUM_DARK_SKIN_TONE' => "\u{1F934}\u{1F3FE}", 'CHARACTER_PRINCE_DARK_SKIN_TONE' => "\u{1F934}\u{1F3FF}", 'CHARACTER_PRINCESS' => "\u{1F478}", 'CHARACTER_PRINCESS_LIGHT_SKIN_TONE' => "\u{1F478}\u{1F3FB}", 'CHARACTER_PRINCESS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F478}\u{1F3FC}", 'CHARACTER_PRINCESS_MEDIUM_SKIN_TONE' => "\u{1F478}\u{1F3FD}", 'CHARACTER_PRINCESS_MEDIUM_DARK_SKIN_TONE' => "\u{1F478}\u{1F3FE}", 'CHARACTER_PRINCESS_DARK_SKIN_TONE' => "\u{1F478}\u{1F3FF}", 'CHARACTER_PERSON_WEARING_TURBAN' => "\u{1F473}", 'CHARACTER_PERSON_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}", 'CHARACTER_PERSON_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}", 'CHARACTER_PERSON_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}", 'CHARACTER_MAN_WEARING_TURBAN' => "\u{1F473}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN' => "\u{1F473}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F473}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_SKIN_TONE' => "\u{1F473}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WEARING_TURBAN_DARK_SKIN_TONE' => "\u{1F473}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_WITH_CHINESE_CAP' => "\u{1F472}", 'CHARACTER_MAN_WITH_CHINESE_CAP_LIGHT_SKIN_TONE' => "\u{1F472}\u{1F3FB}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F472}\u{1F3FC}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_SKIN_TONE' => "\u{1F472}\u{1F3FD}", 'CHARACTER_MAN_WITH_CHINESE_CAP_MEDIUM_DARK_SKIN_TONE' => "\u{1F472}\u{1F3FE}", 'CHARACTER_MAN_WITH_CHINESE_CAP_DARK_SKIN_TONE' => "\u{1F472}\u{1F3FF}", 'CHARACTER_WOMAN_WITH_HEADSCARF' => "\u{1F9D5}", 'CHARACTER_WOMAN_WITH_HEADSCARF_LIGHT_SKIN_TONE' => "\u{1F9D5}\u{1F3FB}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D5}\u{1F3FC}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE' => "\u{1F9D5}\u{1F3FD}", 'CHARACTER_WOMAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D5}\u{1F3FE}", 'CHARACTER_WOMAN_WITH_HEADSCARF_DARK_SKIN_TONE' => "\u{1F9D5}\u{1F3FF}", 'CHARACTER_BEARDED_PERSON' => "\u{1F9D4}", 'CHARACTER_BEARDED_PERSON_LIGHT_SKIN_TONE' => "\u{1F9D4}\u{1F3FB}", 'CHARACTER_BEARDED_PERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D4}\u{1F3FC}", 'CHARACTER_BEARDED_PERSON_MEDIUM_SKIN_TONE' => "\u{1F9D4}\u{1F3FD}", 'CHARACTER_BEARDED_PERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D4}\u{1F3FE}", 'CHARACTER_BEARDED_PERSON_DARK_SKIN_TONE' => "\u{1F9D4}\u{1F3FF}", 'CHARACTER_BLOND_HAIRED_PERSON' => "\u{1F471}", 'CHARACTER_BLOND_HAIRED_PERSON_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}", 'CHARACTER_BLOND_HAIRED_PERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}", 'CHARACTER_BLOND_HAIRED_PERSON_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}", 'CHARACTER_BLOND_HAIRED_MAN' => "\u{1F471}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_MAN_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN' => "\u{1F471}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F471}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F471}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_BLOND_HAIRED_WOMAN_DARK_SKIN_TONE' => "\u{1F471}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_RED_HAIRED' => "\u{1F468}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_RED_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED' => "\u{1F469}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B0}", 'CHARACTER_WOMAN_RED_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B0}", 'CHARACTER_MAN_CURLY_HAIRED' => "\u{1F468}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_CURLY_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED' => "\u{1F469}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B1}", 'CHARACTER_WOMAN_CURLY_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B1}", 'CHARACTER_MAN_BALD' => "\u{1F468}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_BALD_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD' => "\u{1F469}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B2}", 'CHARACTER_WOMAN_BALD_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B2}", 'CHARACTER_MAN_WHITE_HAIRED' => "\u{1F468}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FB}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F468}\u{1F3FC}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F468}\u{1F3FD}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FE}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_WHITE_HAIRED_DARK_SKIN_TONE' => "\u{1F468}\u{1F3FF}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED' => "\u{1F469}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FB}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F469}\u{1F3FC}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_SKIN_TONE' => "\u{1F469}\u{1F3FD}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_MEDIUM_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FE}\u{200D}\u{1F9B3}", 'CHARACTER_WOMAN_WHITE_HAIRED_DARK_SKIN_TONE' => "\u{1F469}\u{1F3FF}\u{200D}\u{1F9B3}", 'CHARACTER_MAN_IN_TUXEDO' => "\u{1F935}", 'CHARACTER_MAN_IN_TUXEDO_LIGHT_SKIN_TONE' => "\u{1F935}\u{1F3FB}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F935}\u{1F3FC}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_SKIN_TONE' => "\u{1F935}\u{1F3FD}", 'CHARACTER_MAN_IN_TUXEDO_MEDIUM_DARK_SKIN_TONE' => "\u{1F935}\u{1F3FE}", 'CHARACTER_MAN_IN_TUXEDO_DARK_SKIN_TONE' => "\u{1F935}\u{1F3FF}", 'CHARACTER_BRIDE_WITH_VEIL' => "\u{1F470}", 'CHARACTER_BRIDE_WITH_VEIL_LIGHT_SKIN_TONE' => "\u{1F470}\u{1F3FB}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F470}\u{1F3FC}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_SKIN_TONE' => "\u{1F470}\u{1F3FD}", 'CHARACTER_BRIDE_WITH_VEIL_MEDIUM_DARK_SKIN_TONE' => "\u{1F470}\u{1F3FE}", 'CHARACTER_BRIDE_WITH_VEIL_DARK_SKIN_TONE' => "\u{1F470}\u{1F3FF}", 'CHARACTER_PREGNANT_WOMAN' => "\u{1F930}", 'CHARACTER_PREGNANT_WOMAN_LIGHT_SKIN_TONE' => "\u{1F930}\u{1F3FB}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F930}\u{1F3FC}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_SKIN_TONE' => "\u{1F930}\u{1F3FD}", 'CHARACTER_PREGNANT_WOMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F930}\u{1F3FE}", 'CHARACTER_PREGNANT_WOMAN_DARK_SKIN_TONE' => "\u{1F930}\u{1F3FF}", 'CHARACTER_BREAST_FEEDING' => "\u{1F931}", 'CHARACTER_BREAST_FEEDING_LIGHT_SKIN_TONE' => "\u{1F931}\u{1F3FB}", 'CHARACTER_BREAST_FEEDING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F931}\u{1F3FC}", 'CHARACTER_BREAST_FEEDING_MEDIUM_SKIN_TONE' => "\u{1F931}\u{1F3FD}", 'CHARACTER_BREAST_FEEDING_MEDIUM_DARK_SKIN_TONE' => "\u{1F931}\u{1F3FE}", 'CHARACTER_BREAST_FEEDING_DARK_SKIN_TONE' => "\u{1F931}\u{1F3FF}", 'CHARACTER_BABY_ANGEL' => "\u{1F47C}", 'CHARACTER_BABY_ANGEL_LIGHT_SKIN_TONE' => "\u{1F47C}\u{1F3FB}", 'CHARACTER_BABY_ANGEL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F47C}\u{1F3FC}", 'CHARACTER_BABY_ANGEL_MEDIUM_SKIN_TONE' => "\u{1F47C}\u{1F3FD}", 'CHARACTER_BABY_ANGEL_MEDIUM_DARK_SKIN_TONE' => "\u{1F47C}\u{1F3FE}", 'CHARACTER_BABY_ANGEL_DARK_SKIN_TONE' => "\u{1F47C}\u{1F3FF}", 'CHARACTER_SANTA_CLAUS' => "\u{1F385}", 'CHARACTER_SANTA_CLAUS_LIGHT_SKIN_TONE' => "\u{1F385}\u{1F3FB}", 'CHARACTER_SANTA_CLAUS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F385}\u{1F3FC}", 'CHARACTER_SANTA_CLAUS_MEDIUM_SKIN_TONE' => "\u{1F385}\u{1F3FD}", 'CHARACTER_SANTA_CLAUS_MEDIUM_DARK_SKIN_TONE' => "\u{1F385}\u{1F3FE}", 'CHARACTER_SANTA_CLAUS_DARK_SKIN_TONE' => "\u{1F385}\u{1F3FF}", 'CHARACTER_MRS_CLAUS' => "\u{1F936}", 'CHARACTER_MRS_CLAUS_LIGHT_SKIN_TONE' => "\u{1F936}\u{1F3FB}", 'CHARACTER_MRS_CLAUS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F936}\u{1F3FC}", 'CHARACTER_MRS_CLAUS_MEDIUM_SKIN_TONE' => "\u{1F936}\u{1F3FD}", 'CHARACTER_MRS_CLAUS_MEDIUM_DARK_SKIN_TONE' => "\u{1F936}\u{1F3FE}", 'CHARACTER_MRS_CLAUS_DARK_SKIN_TONE' => "\u{1F936}\u{1F3FF}", 'CHARACTER_SUPERHERO' => "\u{1F9B8}", 'CHARACTER_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}", 'CHARACTER_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}", 'CHARACTER_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}", 'CHARACTER_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}", 'CHARACTER_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}", 'CHARACTER_WOMAN_SUPERHERO' => "\u{1F9B8}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO' => "\u{1F9B8}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B8}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_SKIN_TONE' => "\u{1F9B8}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERHERO_DARK_SKIN_TONE' => "\u{1F9B8}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_SUPERVILLAIN' => "\u{1F9B9}", 'CHARACTER_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}", 'CHARACTER_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}", 'CHARACTER_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}", 'CHARACTER_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}", 'CHARACTER_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}", 'CHARACTER_WOMAN_SUPERVILLAIN' => "\u{1F9B9}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN' => "\u{1F9B9}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_SKIN_TONE' => "\u{1F9B9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SUPERVILLAIN_DARK_SKIN_TONE' => "\u{1F9B9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAGE' => "\u{1F9D9}", 'CHARACTER_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}", 'CHARACTER_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}", 'CHARACTER_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}", 'CHARACTER_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}", 'CHARACTER_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}", 'CHARACTER_WOMAN_MAGE' => "\u{1F9D9}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_MAGE' => "\u{1F9D9}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_SKIN_TONE' => "\u{1F9D9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MAGE_DARK_SKIN_TONE' => "\u{1F9D9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_FAIRY' => "\u{1F9DA}", 'CHARACTER_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}", 'CHARACTER_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}", 'CHARACTER_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}", 'CHARACTER_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}", 'CHARACTER_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}", 'CHARACTER_WOMAN_FAIRY' => "\u{1F9DA}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_FAIRY' => "\u{1F9DA}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DA}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_SKIN_TONE' => "\u{1F9DA}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FAIRY_DARK_SKIN_TONE' => "\u{1F9DA}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_VAMPIRE' => "\u{1F9DB}", 'CHARACTER_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}", 'CHARACTER_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}", 'CHARACTER_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}", 'CHARACTER_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}", 'CHARACTER_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}", 'CHARACTER_WOMAN_VAMPIRE' => "\u{1F9DB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE' => "\u{1F9DB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DB}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_SKIN_TONE' => "\u{1F9DB}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_VAMPIRE_DARK_SKIN_TONE' => "\u{1F9DB}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERPERSON' => "\u{1F9DC}", 'CHARACTER_MERPERSON_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}", 'CHARACTER_MERPERSON_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}", 'CHARACTER_MERPERSON_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}", 'CHARACTER_MERPERSON_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}", 'CHARACTER_MERPERSON_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}", 'CHARACTER_MERMAID' => "\u{1F9DC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAID_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MERMAN' => "\u{1F9DC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DC}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_SKIN_TONE' => "\u{1F9DC}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MERMAN_DARK_SKIN_TONE' => "\u{1F9DC}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_ELF' => "\u{1F9DD}", 'CHARACTER_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}", 'CHARACTER_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}", 'CHARACTER_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}", 'CHARACTER_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}", 'CHARACTER_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}", 'CHARACTER_WOMAN_ELF' => "\u{1F9DD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_ELF' => "\u{1F9DD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9DD}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_SKIN_TONE' => "\u{1F9DD}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_MEDIUM_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ELF_DARK_SKIN_TONE' => "\u{1F9DD}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_GENIE' => "\u{1F9DE}", 'CHARACTER_WOMAN_GENIE' => "\u{1F9DE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_GENIE' => "\u{1F9DE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_ZOMBIE' => "\u{1F9DF}", 'CHARACTER_WOMAN_ZOMBIE' => "\u{1F9DF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_ZOMBIE' => "\u{1F9DF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_FROWNING' => "\u{1F64D}", 'CHARACTER_PERSON_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}", 'CHARACTER_PERSON_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}", 'CHARACTER_PERSON_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}", 'CHARACTER_PERSON_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}", 'CHARACTER_PERSON_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}", 'CHARACTER_MAN_FROWNING' => "\u{1F64D}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING' => "\u{1F64D}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64D}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_SKIN_TONE' => "\u{1F64D}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FROWNING_DARK_SKIN_TONE' => "\u{1F64D}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_POUTING' => "\u{1F64E}", 'CHARACTER_PERSON_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}", 'CHARACTER_PERSON_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}", 'CHARACTER_PERSON_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}", 'CHARACTER_PERSON_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}", 'CHARACTER_PERSON_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}", 'CHARACTER_MAN_POUTING' => "\u{1F64E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_POUTING' => "\u{1F64E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_SKIN_TONE' => "\u{1F64E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_MEDIUM_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_POUTING_DARK_SKIN_TONE' => "\u{1F64E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GESTURING_NO' => "\u{1F645}", 'CHARACTER_PERSON_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}", 'CHARACTER_PERSON_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}", 'CHARACTER_PERSON_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}", 'CHARACTER_MAN_GESTURING_NO' => "\u{1F645}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO' => "\u{1F645}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F645}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_SKIN_TONE' => "\u{1F645}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_MEDIUM_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_NO_DARK_SKIN_TONE' => "\u{1F645}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GESTURING_OK' => "\u{1F646}", 'CHARACTER_PERSON_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}", 'CHARACTER_PERSON_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}", 'CHARACTER_PERSON_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}", 'CHARACTER_MAN_GESTURING_OK' => "\u{1F646}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK' => "\u{1F646}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F646}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_SKIN_TONE' => "\u{1F646}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_MEDIUM_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GESTURING_OK_DARK_SKIN_TONE' => "\u{1F646}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_TIPPING_HAND' => "\u{1F481}", 'CHARACTER_PERSON_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}", 'CHARACTER_PERSON_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}", 'CHARACTER_PERSON_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}", 'CHARACTER_MAN_TIPPING_HAND' => "\u{1F481}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND' => "\u{1F481}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F481}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_SKIN_TONE' => "\u{1F481}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_TIPPING_HAND_DARK_SKIN_TONE' => "\u{1F481}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_RAISING_HAND' => "\u{1F64B}", 'CHARACTER_PERSON_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}", 'CHARACTER_PERSON_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}", 'CHARACTER_PERSON_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}", 'CHARACTER_MAN_RAISING_HAND' => "\u{1F64B}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND' => "\u{1F64B}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64B}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_SKIN_TONE' => "\u{1F64B}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RAISING_HAND_DARK_SKIN_TONE' => "\u{1F64B}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BOWING' => "\u{1F647}", 'CHARACTER_PERSON_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}", 'CHARACTER_PERSON_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}", 'CHARACTER_PERSON_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}", 'CHARACTER_PERSON_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}", 'CHARACTER_PERSON_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}", 'CHARACTER_MAN_BOWING' => "\u{1F647}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BOWING' => "\u{1F647}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F647}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_SKIN_TONE' => "\u{1F647}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_MEDIUM_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOWING_DARK_SKIN_TONE' => "\u{1F647}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_FACEPALMING' => "\u{1F926}", 'CHARACTER_PERSON_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}", 'CHARACTER_PERSON_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}", 'CHARACTER_PERSON_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}", 'CHARACTER_MAN_FACEPALMING' => "\u{1F926}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING' => "\u{1F926}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F926}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_SKIN_TONE' => "\u{1F926}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_FACEPALMING_DARK_SKIN_TONE' => "\u{1F926}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SHRUGGING' => "\u{1F937}", 'CHARACTER_PERSON_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}", 'CHARACTER_PERSON_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}", 'CHARACTER_PERSON_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}", 'CHARACTER_MAN_SHRUGGING' => "\u{1F937}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING' => "\u{1F937}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F937}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_SKIN_TONE' => "\u{1F937}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_MEDIUM_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SHRUGGING_DARK_SKIN_TONE' => "\u{1F937}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GETTING_MASSAGE' => "\u{1F486}", 'CHARACTER_PERSON_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}", 'CHARACTER_PERSON_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}", 'CHARACTER_PERSON_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}", 'CHARACTER_MAN_GETTING_MASSAGE' => "\u{1F486}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE' => "\u{1F486}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F486}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_SKIN_TONE' => "\u{1F486}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_MEDIUM_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_MASSAGE_DARK_SKIN_TONE' => "\u{1F486}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_GETTING_HAIRCUT' => "\u{1F487}", 'CHARACTER_PERSON_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}", 'CHARACTER_PERSON_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}", 'CHARACTER_PERSON_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}", 'CHARACTER_MAN_GETTING_HAIRCUT' => "\u{1F487}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT' => "\u{1F487}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F487}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_SKIN_TONE' => "\u{1F487}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_MEDIUM_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GETTING_HAIRCUT_DARK_SKIN_TONE' => "\u{1F487}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_WALKING' => "\u{1F6B6}", 'CHARACTER_PERSON_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}", 'CHARACTER_PERSON_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}", 'CHARACTER_PERSON_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}", 'CHARACTER_PERSON_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}", 'CHARACTER_PERSON_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}", 'CHARACTER_MAN_WALKING' => "\u{1F6B6}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_WALKING' => "\u{1F6B6}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B6}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_SKIN_TONE' => "\u{1F6B6}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_WALKING_DARK_SKIN_TONE' => "\u{1F6B6}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_RUNNING' => "\u{1F3C3}", 'CHARACTER_PERSON_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}", 'CHARACTER_PERSON_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}", 'CHARACTER_PERSON_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}", 'CHARACTER_PERSON_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}", 'CHARACTER_PERSON_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}", 'CHARACTER_MAN_RUNNING' => "\u{1F3C3}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING' => "\u{1F3C3}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C3}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_SKIN_TONE' => "\u{1F3C3}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_RUNNING_DARK_SKIN_TONE' => "\u{1F3C3}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_DANCING' => "\u{1F483}", 'CHARACTER_WOMAN_DANCING_LIGHT_SKIN_TONE' => "\u{1F483}\u{1F3FB}", 'CHARACTER_WOMAN_DANCING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F483}\u{1F3FC}", 'CHARACTER_WOMAN_DANCING_MEDIUM_SKIN_TONE' => "\u{1F483}\u{1F3FD}", 'CHARACTER_WOMAN_DANCING_MEDIUM_DARK_SKIN_TONE' => "\u{1F483}\u{1F3FE}", 'CHARACTER_WOMAN_DANCING_DARK_SKIN_TONE' => "\u{1F483}\u{1F3FF}", 'CHARACTER_MAN_DANCING' => "\u{1F57A}", 'CHARACTER_MAN_DANCING_LIGHT_SKIN_TONE' => "\u{1F57A}\u{1F3FB}", 'CHARACTER_MAN_DANCING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F57A}\u{1F3FC}", 'CHARACTER_MAN_DANCING_MEDIUM_SKIN_TONE' => "\u{1F57A}\u{1F3FD}", 'CHARACTER_MAN_DANCING_MEDIUM_DARK_SKIN_TONE' => "\u{1F57A}\u{1F3FE}", 'CHARACTER_MAN_DANCING_DARK_SKIN_TONE' => "\u{1F57A}\u{1F3FF}", 'CHARACTER_PEOPLE_WITH_BUNNY_EARS' => "\u{1F46F}", 'CHARACTER_MEN_WITH_BUNNY_EARS' => "\u{1F46F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMEN_WITH_BUNNY_EARS' => "\u{1F46F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_IN_STEAMY_ROOM' => "\u{1F9D6}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}", 'CHARACTER_PERSON_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM' => "\u{1F9D6}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM' => "\u{1F9D6}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D6}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_SKIN_TONE' => "\u{1F9D6}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_STEAMY_ROOM_DARK_SKIN_TONE' => "\u{1F9D6}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_CLIMBING' => "\u{1F9D7}", 'CHARACTER_PERSON_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}", 'CHARACTER_PERSON_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}", 'CHARACTER_PERSON_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}", 'CHARACTER_WOMAN_CLIMBING' => "\u{1F9D7}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_CLIMBING' => "\u{1F9D7}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D7}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_SKIN_TONE' => "\u{1F9D7}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CLIMBING_DARK_SKIN_TONE' => "\u{1F9D7}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_IN_LOTUS_POSITION' => "\u{1F9D8}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}", 'CHARACTER_PERSON_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION' => "\u{1F9D8}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION' => "\u{1F9D8}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9D8}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_SKIN_TONE' => "\u{1F9D8}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_MEDIUM_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_IN_LOTUS_POSITION_DARK_SKIN_TONE' => "\u{1F9D8}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_PERSON_TAKING_BATH' => "\u{1F6C0}", 'CHARACTER_PERSON_TAKING_BATH_LIGHT_SKIN_TONE' => "\u{1F6C0}\u{1F3FB}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6C0}\u{1F3FC}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_SKIN_TONE' => "\u{1F6C0}\u{1F3FD}", 'CHARACTER_PERSON_TAKING_BATH_MEDIUM_DARK_SKIN_TONE' => "\u{1F6C0}\u{1F3FE}", 'CHARACTER_PERSON_TAKING_BATH_DARK_SKIN_TONE' => "\u{1F6C0}\u{1F3FF}", 'CHARACTER_PERSON_IN_BED' => "\u{1F6CC}", 'CHARACTER_PERSON_IN_BED_LIGHT_SKIN_TONE' => "\u{1F6CC}\u{1F3FB}", 'CHARACTER_PERSON_IN_BED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6CC}\u{1F3FC}", 'CHARACTER_PERSON_IN_BED_MEDIUM_SKIN_TONE' => "\u{1F6CC}\u{1F3FD}", 'CHARACTER_PERSON_IN_BED_MEDIUM_DARK_SKIN_TONE' => "\u{1F6CC}\u{1F3FE}", 'CHARACTER_PERSON_IN_BED_DARK_SKIN_TONE' => "\u{1F6CC}\u{1F3FF}", 'CHARACTER_MAN_IN_SUIT_LEVITATING' => "\u{1F574}\u{FE0F}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_LIGHT_SKIN_TONE' => "\u{1F574}\u{1F3FB}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F574}\u{1F3FC}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_SKIN_TONE' => "\u{1F574}\u{1F3FD}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_MEDIUM_DARK_SKIN_TONE' => "\u{1F574}\u{1F3FE}", 'CHARACTER_MAN_IN_SUIT_LEVITATING_DARK_SKIN_TONE' => "\u{1F574}\u{1F3FF}", 'CHARACTER_SPEAKING_HEAD' => "\u{1F5E3}\u{FE0F}", 'CHARACTER_BUST_IN_SILHOUETTE' => "\u{1F464}", 'CHARACTER_BUSTS_IN_SILHOUETTE' => "\u{1F465}", 'CHARACTER_PERSON_FENCING' => "\u{1F93A}", 'CHARACTER_HORSE_RACING' => "\u{1F3C7}", 'CHARACTER_HORSE_RACING_LIGHT_SKIN_TONE' => "\u{1F3C7}\u{1F3FB}", 'CHARACTER_HORSE_RACING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C7}\u{1F3FC}", 'CHARACTER_HORSE_RACING_MEDIUM_SKIN_TONE' => "\u{1F3C7}\u{1F3FD}", 'CHARACTER_HORSE_RACING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C7}\u{1F3FE}", 'CHARACTER_HORSE_RACING_DARK_SKIN_TONE' => "\u{1F3C7}\u{1F3FF}", 'CHARACTER_SKIER' => "\u{26F7}\u{FE0F}", 'CHARACTER_SNOWBOARDER' => "\u{1F3C2}", 'CHARACTER_SNOWBOARDER_LIGHT_SKIN_TONE' => "\u{1F3C2}\u{1F3FB}", 'CHARACTER_SNOWBOARDER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C2}\u{1F3FC}", 'CHARACTER_SNOWBOARDER_MEDIUM_SKIN_TONE' => "\u{1F3C2}\u{1F3FD}", 'CHARACTER_SNOWBOARDER_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C2}\u{1F3FE}", 'CHARACTER_SNOWBOARDER_DARK_SKIN_TONE' => "\u{1F3C2}\u{1F3FF}", 'CHARACTER_PERSON_GOLFING' => "\u{1F3CC}\u{FE0F}", 'CHARACTER_PERSON_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}", 'CHARACTER_PERSON_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}", 'CHARACTER_PERSON_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}", 'CHARACTER_PERSON_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}", 'CHARACTER_PERSON_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}", 'CHARACTER_MAN_GOLFING' => "\u{1F3CC}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING' => "\u{1F3CC}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CC}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_SKIN_TONE' => "\u{1F3CC}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_GOLFING_DARK_SKIN_TONE' => "\u{1F3CC}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SURFING' => "\u{1F3C4}", 'CHARACTER_PERSON_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}", 'CHARACTER_PERSON_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}", 'CHARACTER_PERSON_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}", 'CHARACTER_PERSON_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}", 'CHARACTER_PERSON_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}", 'CHARACTER_MAN_SURFING' => "\u{1F3C4}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SURFING' => "\u{1F3C4}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3C4}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_SKIN_TONE' => "\u{1F3C4}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SURFING_DARK_SKIN_TONE' => "\u{1F3C4}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_ROWING_BOAT' => "\u{1F6A3}", 'CHARACTER_PERSON_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}", 'CHARACTER_PERSON_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}", 'CHARACTER_PERSON_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}", 'CHARACTER_MAN_ROWING_BOAT' => "\u{1F6A3}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT' => "\u{1F6A3}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6A3}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_SKIN_TONE' => "\u{1F6A3}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_MEDIUM_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_ROWING_BOAT_DARK_SKIN_TONE' => "\u{1F6A3}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_SWIMMING' => "\u{1F3CA}", 'CHARACTER_PERSON_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}", 'CHARACTER_PERSON_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}", 'CHARACTER_PERSON_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}", 'CHARACTER_MAN_SWIMMING' => "\u{1F3CA}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING' => "\u{1F3CA}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CA}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_SKIN_TONE' => "\u{1F3CA}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_SWIMMING_DARK_SKIN_TONE' => "\u{1F3CA}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BOUNCING_BALL' => "\u{26F9}\u{FE0F}", 'CHARACTER_PERSON_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}", 'CHARACTER_PERSON_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}", 'CHARACTER_PERSON_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}", 'CHARACTER_MAN_BOUNCING_BALL' => "\u{26F9}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL' => "\u{26F9}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{26F9}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_SKIN_TONE' => "\u{26F9}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_MEDIUM_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BOUNCING_BALL_DARK_SKIN_TONE' => "\u{26F9}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}", 'CHARACTER_PERSON_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}", 'CHARACTER_MAN_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS' => "\u{1F3CB}\u{FE0F}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F3CB}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_SKIN_TONE' => "\u{1F3CB}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_MEDIUM_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_LIFTING_WEIGHTS_DARK_SKIN_TONE' => "\u{1F3CB}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_BIKING' => "\u{1F6B4}", 'CHARACTER_PERSON_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}", 'CHARACTER_PERSON_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}", 'CHARACTER_PERSON_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}", 'CHARACTER_PERSON_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}", 'CHARACTER_PERSON_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}", 'CHARACTER_MAN_BIKING' => "\u{1F6B4}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_BIKING' => "\u{1F6B4}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B4}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B4}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_BIKING_DARK_SKIN_TONE' => "\u{1F6B4}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_MOUNTAIN_BIKING' => "\u{1F6B5}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}", 'CHARACTER_PERSON_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}", 'CHARACTER_MAN_MOUNTAIN_BIKING' => "\u{1F6B5}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING' => "\u{1F6B5}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F6B5}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_SKIN_TONE' => "\u{1F6B5}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_MEDIUM_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_MOUNTAIN_BIKING_DARK_SKIN_TONE' => "\u{1F6B5}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_RACING_CAR' => "\u{1F3CE}\u{FE0F}", 'CHARACTER_MOTORCYCLE' => "\u{1F3CD}\u{FE0F}", 'CHARACTER_PERSON_CARTWHEELING' => "\u{1F938}", 'CHARACTER_PERSON_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}", 'CHARACTER_PERSON_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}", 'CHARACTER_PERSON_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}", 'CHARACTER_MAN_CARTWHEELING' => "\u{1F938}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING' => "\u{1F938}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F938}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_SKIN_TONE' => "\u{1F938}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_CARTWHEELING_DARK_SKIN_TONE' => "\u{1F938}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PEOPLE_WRESTLING' => "\u{1F93C}", 'CHARACTER_MEN_WRESTLING' => "\u{1F93C}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMEN_WRESTLING' => "\u{1F93C}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_PLAYING_WATER_POLO' => "\u{1F93D}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}", 'CHARACTER_PERSON_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}", 'CHARACTER_MAN_PLAYING_WATER_POLO' => "\u{1F93D}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO' => "\u{1F93D}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93D}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_SKIN_TONE' => "\u{1F93D}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_MEDIUM_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_WATER_POLO_DARK_SKIN_TONE' => "\u{1F93D}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_PLAYING_HANDBALL' => "\u{1F93E}", 'CHARACTER_PERSON_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}", 'CHARACTER_PERSON_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}", 'CHARACTER_PERSON_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}", 'CHARACTER_MAN_PLAYING_HANDBALL' => "\u{1F93E}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL' => "\u{1F93E}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F93E}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_SKIN_TONE' => "\u{1F93E}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_MEDIUM_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_PLAYING_HANDBALL_DARK_SKIN_TONE' => "\u{1F93E}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_PERSON_JUGGLING' => "\u{1F939}", 'CHARACTER_PERSON_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}", 'CHARACTER_PERSON_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}", 'CHARACTER_PERSON_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}", 'CHARACTER_MAN_JUGGLING' => "\u{1F939}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_MAN_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}\u{200D}\u{2642}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING' => "\u{1F939}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FB}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F939}\u{1F3FC}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_SKIN_TONE' => "\u{1F939}\u{1F3FD}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_MEDIUM_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FE}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_WOMAN_JUGGLING_DARK_SKIN_TONE' => "\u{1F939}\u{1F3FF}\u{200D}\u{2640}\u{FE0F}", 'CHARACTER_MAN_AND_WOMAN_HOLDING_HANDS' => "\u{1F46B}", 'CHARACTER_TWO_MEN_HOLDING_HANDS' => "\u{1F46C}", 'CHARACTER_TWO_WOMEN_HOLDING_HANDS' => "\u{1F46D}", 'CHARACTER_KISS' => "\u{1F48F}", 'CHARACTER_KISS_WOMAN_MAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F468}", 'CHARACTER_KISS_MAN_MAN' => "\u{1F468}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F468}", 'CHARACTER_KISS_WOMAN_WOMAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F469}", 'CHARACTER_COUPLE_WITH_HEART' => "\u{1F491}", 'CHARACTER_COUPLE_WITH_HEART_WOMAN_MAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F468}", 'CHARACTER_COUPLE_WITH_HEART_MAN_MAN' => "\u{1F468}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F468}", 'CHARACTER_COUPLE_WITH_HEART_WOMAN_WOMAN' => "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F469}", 'CHARACTER_FAMILY' => "\u{1F46A}", 'CHARACTER_FAMILY_MAN_WOMAN_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_WOMAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_MAN_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_GIRL' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_MAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_MAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_WOMAN_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_BOY_BOY' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_WOMAN_GIRL_GIRL' => "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_BOY' => "\u{1F468}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_BOY_BOY' => "\u{1F468}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_GIRL' => "\u{1F468}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_MAN_GIRL_BOY' => "\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_MAN_GIRL_GIRL' => "\u{1F468}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_BOY' => "\u{1F469}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_BOY_BOY' => "\u{1F469}\u{200D}\u{1F466}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_GIRL' => "\u{1F469}\u{200D}\u{1F467}", 'CHARACTER_FAMILY_WOMAN_GIRL_BOY' => "\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}", 'CHARACTER_FAMILY_WOMAN_GIRL_GIRL' => "\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F467}", 'CHARACTER_SELFIE' => "\u{1F933}", 'CHARACTER_SELFIE_LIGHT_SKIN_TONE' => "\u{1F933}\u{1F3FB}", 'CHARACTER_SELFIE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F933}\u{1F3FC}", 'CHARACTER_SELFIE_MEDIUM_SKIN_TONE' => "\u{1F933}\u{1F3FD}", 'CHARACTER_SELFIE_MEDIUM_DARK_SKIN_TONE' => "\u{1F933}\u{1F3FE}", 'CHARACTER_SELFIE_DARK_SKIN_TONE' => "\u{1F933}\u{1F3FF}", 'CHARACTER_FLEXED_BICEPS' => "\u{1F4AA}", 'CHARACTER_FLEXED_BICEPS_LIGHT_SKIN_TONE' => "\u{1F4AA}\u{1F3FB}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F4AA}\u{1F3FC}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_SKIN_TONE' => "\u{1F4AA}\u{1F3FD}", 'CHARACTER_FLEXED_BICEPS_MEDIUM_DARK_SKIN_TONE' => "\u{1F4AA}\u{1F3FE}", 'CHARACTER_FLEXED_BICEPS_DARK_SKIN_TONE' => "\u{1F4AA}\u{1F3FF}", 'CHARACTER_LEG' => "\u{1F9B5}", 'CHARACTER_LEG_LIGHT_SKIN_TONE' => "\u{1F9B5}\u{1F3FB}", 'CHARACTER_LEG_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B5}\u{1F3FC}", 'CHARACTER_LEG_MEDIUM_SKIN_TONE' => "\u{1F9B5}\u{1F3FD}", 'CHARACTER_LEG_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B5}\u{1F3FE}", 'CHARACTER_LEG_DARK_SKIN_TONE' => "\u{1F9B5}\u{1F3FF}", 'CHARACTER_FOOT' => "\u{1F9B6}", 'CHARACTER_FOOT_LIGHT_SKIN_TONE' => "\u{1F9B6}\u{1F3FB}", 'CHARACTER_FOOT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F9B6}\u{1F3FC}", 'CHARACTER_FOOT_MEDIUM_SKIN_TONE' => "\u{1F9B6}\u{1F3FD}", 'CHARACTER_FOOT_MEDIUM_DARK_SKIN_TONE' => "\u{1F9B6}\u{1F3FE}", 'CHARACTER_FOOT_DARK_SKIN_TONE' => "\u{1F9B6}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT' => "\u{1F448}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_LIGHT_SKIN_TONE' => "\u{1F448}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F448}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_SKIN_TONE' => "\u{1F448}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_MEDIUM_DARK_SKIN_TONE' => "\u{1F448}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_LEFT_DARK_SKIN_TONE' => "\u{1F448}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT' => "\u{1F449}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_LIGHT_SKIN_TONE' => "\u{1F449}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F449}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_SKIN_TONE' => "\u{1F449}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_MEDIUM_DARK_SKIN_TONE' => "\u{1F449}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_RIGHT_DARK_SKIN_TONE' => "\u{1F449}\u{1F3FF}", 'CHARACTER_INDEX_POINTING_UP' => "\u{261D}\u{FE0F}", 'CHARACTER_INDEX_POINTING_UP_LIGHT_SKIN_TONE' => "\u{261D}\u{1F3FB}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{261D}\u{1F3FC}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_SKIN_TONE' => "\u{261D}\u{1F3FD}", 'CHARACTER_INDEX_POINTING_UP_MEDIUM_DARK_SKIN_TONE' => "\u{261D}\u{1F3FE}", 'CHARACTER_INDEX_POINTING_UP_DARK_SKIN_TONE' => "\u{261D}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP' => "\u{1F446}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_LIGHT_SKIN_TONE' => "\u{1F446}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F446}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_SKIN_TONE' => "\u{1F446}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_MEDIUM_DARK_SKIN_TONE' => "\u{1F446}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_UP_DARK_SKIN_TONE' => "\u{1F446}\u{1F3FF}", 'CHARACTER_MIDDLE_FINGER' => "\u{1F595}", 'CHARACTER_MIDDLE_FINGER_LIGHT_SKIN_TONE' => "\u{1F595}\u{1F3FB}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F595}\u{1F3FC}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_SKIN_TONE' => "\u{1F595}\u{1F3FD}", 'CHARACTER_MIDDLE_FINGER_MEDIUM_DARK_SKIN_TONE' => "\u{1F595}\u{1F3FE}", 'CHARACTER_MIDDLE_FINGER_DARK_SKIN_TONE' => "\u{1F595}\u{1F3FF}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN' => "\u{1F447}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_LIGHT_SKIN_TONE' => "\u{1F447}\u{1F3FB}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F447}\u{1F3FC}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_SKIN_TONE' => "\u{1F447}\u{1F3FD}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_MEDIUM_DARK_SKIN_TONE' => "\u{1F447}\u{1F3FE}", 'CHARACTER_BACKHAND_INDEX_POINTING_DOWN_DARK_SKIN_TONE' => "\u{1F447}\u{1F3FF}", 'CHARACTER_VICTORY_HAND' => "\u{270C}\u{FE0F}", 'CHARACTER_VICTORY_HAND_LIGHT_SKIN_TONE' => "\u{270C}\u{1F3FB}", 'CHARACTER_VICTORY_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270C}\u{1F3FC}", 'CHARACTER_VICTORY_HAND_MEDIUM_SKIN_TONE' => "\u{270C}\u{1F3FD}", 'CHARACTER_VICTORY_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270C}\u{1F3FE}", 'CHARACTER_VICTORY_HAND_DARK_SKIN_TONE' => "\u{270C}\u{1F3FF}", 'CHARACTER_CROSSED_FINGERS' => "\u{1F91E}", 'CHARACTER_CROSSED_FINGERS_LIGHT_SKIN_TONE' => "\u{1F91E}\u{1F3FB}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91E}\u{1F3FC}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_SKIN_TONE' => "\u{1F91E}\u{1F3FD}", 'CHARACTER_CROSSED_FINGERS_MEDIUM_DARK_SKIN_TONE' => "\u{1F91E}\u{1F3FE}", 'CHARACTER_CROSSED_FINGERS_DARK_SKIN_TONE' => "\u{1F91E}\u{1F3FF}", 'CHARACTER_VULCAN_SALUTE' => "\u{1F596}", 'CHARACTER_VULCAN_SALUTE_LIGHT_SKIN_TONE' => "\u{1F596}\u{1F3FB}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F596}\u{1F3FC}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_SKIN_TONE' => "\u{1F596}\u{1F3FD}", 'CHARACTER_VULCAN_SALUTE_MEDIUM_DARK_SKIN_TONE' => "\u{1F596}\u{1F3FE}", 'CHARACTER_VULCAN_SALUTE_DARK_SKIN_TONE' => "\u{1F596}\u{1F3FF}", 'CHARACTER_SIGN_OF_THE_HORNS' => "\u{1F918}", 'CHARACTER_SIGN_OF_THE_HORNS_LIGHT_SKIN_TONE' => "\u{1F918}\u{1F3FB}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F918}\u{1F3FC}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_SKIN_TONE' => "\u{1F918}\u{1F3FD}", 'CHARACTER_SIGN_OF_THE_HORNS_MEDIUM_DARK_SKIN_TONE' => "\u{1F918}\u{1F3FE}", 'CHARACTER_SIGN_OF_THE_HORNS_DARK_SKIN_TONE' => "\u{1F918}\u{1F3FF}", 'CHARACTER_CALL_ME_HAND' => "\u{1F919}", 'CHARACTER_CALL_ME_HAND_LIGHT_SKIN_TONE' => "\u{1F919}\u{1F3FB}", 'CHARACTER_CALL_ME_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F919}\u{1F3FC}", 'CHARACTER_CALL_ME_HAND_MEDIUM_SKIN_TONE' => "\u{1F919}\u{1F3FD}", 'CHARACTER_CALL_ME_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F919}\u{1F3FE}", 'CHARACTER_CALL_ME_HAND_DARK_SKIN_TONE' => "\u{1F919}\u{1F3FF}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED' => "\u{1F590}\u{FE0F}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_LIGHT_SKIN_TONE' => "\u{1F590}\u{1F3FB}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F590}\u{1F3FC}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_SKIN_TONE' => "\u{1F590}\u{1F3FD}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_MEDIUM_DARK_SKIN_TONE' => "\u{1F590}\u{1F3FE}", 'CHARACTER_HAND_WITH_FINGERS_SPLAYED_DARK_SKIN_TONE' => "\u{1F590}\u{1F3FF}", 'CHARACTER_RAISED_HAND' => "\u{270B}", 'CHARACTER_RAISED_HAND_LIGHT_SKIN_TONE' => "\u{270B}\u{1F3FB}", 'CHARACTER_RAISED_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270B}\u{1F3FC}", 'CHARACTER_RAISED_HAND_MEDIUM_SKIN_TONE' => "\u{270B}\u{1F3FD}", 'CHARACTER_RAISED_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270B}\u{1F3FE}", 'CHARACTER_RAISED_HAND_DARK_SKIN_TONE' => "\u{270B}\u{1F3FF}", 'CHARACTER_OK_HAND' => "\u{1F44C}", 'CHARACTER_OK_HAND_LIGHT_SKIN_TONE' => "\u{1F44C}\u{1F3FB}", 'CHARACTER_OK_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44C}\u{1F3FC}", 'CHARACTER_OK_HAND_MEDIUM_SKIN_TONE' => "\u{1F44C}\u{1F3FD}", 'CHARACTER_OK_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F44C}\u{1F3FE}", 'CHARACTER_OK_HAND_DARK_SKIN_TONE' => "\u{1F44C}\u{1F3FF}", 'CHARACTER_THUMBS_UP' => "\u{1F44D}", 'CHARACTER_THUMBS_UP_LIGHT_SKIN_TONE' => "\u{1F44D}\u{1F3FB}", 'CHARACTER_THUMBS_UP_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44D}\u{1F3FC}", 'CHARACTER_THUMBS_UP_MEDIUM_SKIN_TONE' => "\u{1F44D}\u{1F3FD}", 'CHARACTER_THUMBS_UP_MEDIUM_DARK_SKIN_TONE' => "\u{1F44D}\u{1F3FE}", 'CHARACTER_THUMBS_UP_DARK_SKIN_TONE' => "\u{1F44D}\u{1F3FF}", 'CHARACTER_THUMBS_DOWN' => "\u{1F44E}", 'CHARACTER_THUMBS_DOWN_LIGHT_SKIN_TONE' => "\u{1F44E}\u{1F3FB}", 'CHARACTER_THUMBS_DOWN_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44E}\u{1F3FC}", 'CHARACTER_THUMBS_DOWN_MEDIUM_SKIN_TONE' => "\u{1F44E}\u{1F3FD}", 'CHARACTER_THUMBS_DOWN_MEDIUM_DARK_SKIN_TONE' => "\u{1F44E}\u{1F3FE}", 'CHARACTER_THUMBS_DOWN_DARK_SKIN_TONE' => "\u{1F44E}\u{1F3FF}", 'CHARACTER_RAISED_FIST' => "\u{270A}", 'CHARACTER_RAISED_FIST_LIGHT_SKIN_TONE' => "\u{270A}\u{1F3FB}", 'CHARACTER_RAISED_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{270A}\u{1F3FC}", 'CHARACTER_RAISED_FIST_MEDIUM_SKIN_TONE' => "\u{270A}\u{1F3FD}", 'CHARACTER_RAISED_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{270A}\u{1F3FE}", 'CHARACTER_RAISED_FIST_DARK_SKIN_TONE' => "\u{270A}\u{1F3FF}", 'CHARACTER_ONCOMING_FIST' => "\u{1F44A}", 'CHARACTER_ONCOMING_FIST_LIGHT_SKIN_TONE' => "\u{1F44A}\u{1F3FB}", 'CHARACTER_ONCOMING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44A}\u{1F3FC}", 'CHARACTER_ONCOMING_FIST_MEDIUM_SKIN_TONE' => "\u{1F44A}\u{1F3FD}", 'CHARACTER_ONCOMING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F44A}\u{1F3FE}", 'CHARACTER_ONCOMING_FIST_DARK_SKIN_TONE' => "\u{1F44A}\u{1F3FF}", 'CHARACTER_LEFT_FACING_FIST' => "\u{1F91B}", 'CHARACTER_LEFT_FACING_FIST_LIGHT_SKIN_TONE' => "\u{1F91B}\u{1F3FB}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91B}\u{1F3FC}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_SKIN_TONE' => "\u{1F91B}\u{1F3FD}", 'CHARACTER_LEFT_FACING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F91B}\u{1F3FE}", 'CHARACTER_LEFT_FACING_FIST_DARK_SKIN_TONE' => "\u{1F91B}\u{1F3FF}", 'CHARACTER_RIGHT_FACING_FIST' => "\u{1F91C}", 'CHARACTER_RIGHT_FACING_FIST_LIGHT_SKIN_TONE' => "\u{1F91C}\u{1F3FB}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91C}\u{1F3FC}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_SKIN_TONE' => "\u{1F91C}\u{1F3FD}", 'CHARACTER_RIGHT_FACING_FIST_MEDIUM_DARK_SKIN_TONE' => "\u{1F91C}\u{1F3FE}", 'CHARACTER_RIGHT_FACING_FIST_DARK_SKIN_TONE' => "\u{1F91C}\u{1F3FF}", 'CHARACTER_RAISED_BACK_OF_HAND' => "\u{1F91A}", 'CHARACTER_RAISED_BACK_OF_HAND_LIGHT_SKIN_TONE' => "\u{1F91A}\u{1F3FB}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91A}\u{1F3FC}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_SKIN_TONE' => "\u{1F91A}\u{1F3FD}", 'CHARACTER_RAISED_BACK_OF_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F91A}\u{1F3FE}", 'CHARACTER_RAISED_BACK_OF_HAND_DARK_SKIN_TONE' => "\u{1F91A}\u{1F3FF}", 'CHARACTER_WAVING_HAND' => "\u{1F44B}", 'CHARACTER_WAVING_HAND_LIGHT_SKIN_TONE' => "\u{1F44B}\u{1F3FB}", 'CHARACTER_WAVING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44B}\u{1F3FC}", 'CHARACTER_WAVING_HAND_MEDIUM_SKIN_TONE' => "\u{1F44B}\u{1F3FD}", 'CHARACTER_WAVING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{1F44B}\u{1F3FE}", 'CHARACTER_WAVING_HAND_DARK_SKIN_TONE' => "\u{1F44B}\u{1F3FF}", 'CHARACTER_LOVE_YOU_GESTURE' => "\u{1F91F}", 'CHARACTER_LOVE_YOU_GESTURE_LIGHT_SKIN_TONE' => "\u{1F91F}\u{1F3FB}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F91F}\u{1F3FC}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_SKIN_TONE' => "\u{1F91F}\u{1F3FD}", 'CHARACTER_LOVE_YOU_GESTURE_MEDIUM_DARK_SKIN_TONE' => "\u{1F91F}\u{1F3FE}", 'CHARACTER_LOVE_YOU_GESTURE_DARK_SKIN_TONE' => "\u{1F91F}\u{1F3FF}", 'CHARACTER_WRITING_HAND' => "\u{270D}\u{FE0F}", 'CHARACTER_WRITING_HAND_LIGHT_SKIN_TONE' => "\u{270D}\u{1F3FB}", 'CHARACTER_WRITING_HAND_MEDIUM_LIGHT_SKIN_TONE' => "\u{270D}\u{1F3FC}", 'CHARACTER_WRITING_HAND_MEDIUM_SKIN_TONE' => "\u{270D}\u{1F3FD}", 'CHARACTER_WRITING_HAND_MEDIUM_DARK_SKIN_TONE' => "\u{270D}\u{1F3FE}", 'CHARACTER_WRITING_HAND_DARK_SKIN_TONE' => "\u{270D}\u{1F3FF}", 'CHARACTER_CLAPPING_HANDS' => "\u{1F44F}", 'CHARACTER_CLAPPING_HANDS_LIGHT_SKIN_TONE' => "\u{1F44F}\u{1F3FB}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F44F}\u{1F3FC}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_SKIN_TONE' => "\u{1F44F}\u{1F3FD}", 'CHARACTER_CLAPPING_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F44F}\u{1F3FE}", 'CHARACTER_CLAPPING_HANDS_DARK_SKIN_TONE' => "\u{1F44F}\u{1F3FF}", 'CHARACTER_OPEN_HANDS' => "\u{1F450}", 'CHARACTER_OPEN_HANDS_LIGHT_SKIN_TONE' => "\u{1F450}\u{1F3FB}", 'CHARACTER_OPEN_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F450}\u{1F3FC}", 'CHARACTER_OPEN_HANDS_MEDIUM_SKIN_TONE' => "\u{1F450}\u{1F3FD}", 'CHARACTER_OPEN_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F450}\u{1F3FE}", 'CHARACTER_OPEN_HANDS_DARK_SKIN_TONE' => "\u{1F450}\u{1F3FF}", 'CHARACTER_RAISING_HANDS' => "\u{1F64C}", 'CHARACTER_RAISING_HANDS_LIGHT_SKIN_TONE' => "\u{1F64C}\u{1F3FB}", 'CHARACTER_RAISING_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64C}\u{1F3FC}", 'CHARACTER_RAISING_HANDS_MEDIUM_SKIN_TONE' => "\u{1F64C}\u{1F3FD}", 'CHARACTER_RAISING_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F64C}\u{1F3FE}", 'CHARACTER_RAISING_HANDS_DARK_SKIN_TONE' => "\u{1F64C}\u{1F3FF}", 'CHARACTER_PALMS_UP_TOGETHER' => "\u{1F932}", 'CHARACTER_PALMS_UP_TOGETHER_LIGHT_SKIN_TONE' => "\u{1F932}\u{1F3FB}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F932}\u{1F3FC}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_SKIN_TONE' => "\u{1F932}\u{1F3FD}", 'CHARACTER_PALMS_UP_TOGETHER_MEDIUM_DARK_SKIN_TONE' => "\u{1F932}\u{1F3FE}", 'CHARACTER_PALMS_UP_TOGETHER_DARK_SKIN_TONE' => "\u{1F932}\u{1F3FF}", 'CHARACTER_FOLDED_HANDS' => "\u{1F64F}", 'CHARACTER_FOLDED_HANDS_LIGHT_SKIN_TONE' => "\u{1F64F}\u{1F3FB}", 'CHARACTER_FOLDED_HANDS_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F64F}\u{1F3FC}", 'CHARACTER_FOLDED_HANDS_MEDIUM_SKIN_TONE' => "\u{1F64F}\u{1F3FD}", 'CHARACTER_FOLDED_HANDS_MEDIUM_DARK_SKIN_TONE' => "\u{1F64F}\u{1F3FE}", 'CHARACTER_FOLDED_HANDS_DARK_SKIN_TONE' => "\u{1F64F}\u{1F3FF}", 'CHARACTER_HANDSHAKE' => "\u{1F91D}", 'CHARACTER_NAIL_POLISH' => "\u{1F485}", 'CHARACTER_NAIL_POLISH_LIGHT_SKIN_TONE' => "\u{1F485}\u{1F3FB}", 'CHARACTER_NAIL_POLISH_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F485}\u{1F3FC}", 'CHARACTER_NAIL_POLISH_MEDIUM_SKIN_TONE' => "\u{1F485}\u{1F3FD}", 'CHARACTER_NAIL_POLISH_MEDIUM_DARK_SKIN_TONE' => "\u{1F485}\u{1F3FE}", 'CHARACTER_NAIL_POLISH_DARK_SKIN_TONE' => "\u{1F485}\u{1F3FF}", 'CHARACTER_EAR' => "\u{1F442}", 'CHARACTER_EAR_LIGHT_SKIN_TONE' => "\u{1F442}\u{1F3FB}", 'CHARACTER_EAR_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F442}\u{1F3FC}", 'CHARACTER_EAR_MEDIUM_SKIN_TONE' => "\u{1F442}\u{1F3FD}", 'CHARACTER_EAR_MEDIUM_DARK_SKIN_TONE' => "\u{1F442}\u{1F3FE}", 'CHARACTER_EAR_DARK_SKIN_TONE' => "\u{1F442}\u{1F3FF}", 'CHARACTER_NOSE' => "\u{1F443}", 'CHARACTER_NOSE_LIGHT_SKIN_TONE' => "\u{1F443}\u{1F3FB}", 'CHARACTER_NOSE_MEDIUM_LIGHT_SKIN_TONE' => "\u{1F443}\u{1F3FC}", 'CHARACTER_NOSE_MEDIUM_SKIN_TONE' => "\u{1F443}\u{1F3FD}", 'CHARACTER_NOSE_MEDIUM_DARK_SKIN_TONE' => "\u{1F443}\u{1F3FE}", 'CHARACTER_NOSE_DARK_SKIN_TONE' => "\u{1F443}\u{1F3FF}", 'CHARACTER_RED_HAIRED' => "\u{1F9B0}", 'CHARACTER_CURLY_HAIRED' => "\u{1F9B1}", 'CHARACTER_BALD' => "\u{1F9B2}", 'CHARACTER_WHITE_HAIRED' => "\u{1F9B3}", 'CHARACTER_FOOTPRINTS' => "\u{1F463}", 'CHARACTER_EYES' => "\u{1F440}", 'CHARACTER_EYE' => "\u{1F441}\u{FE0F}", 'CHARACTER_EYE_IN_SPEECH_BUBBLE' => "\u{1F441}\u{FE0F}\u{200D}\u{1F5E8}\u{FE0F}", 'CHARACTER_BRAIN' => "\u{1F9E0}", 'CHARACTER_BONE' => "\u{1F9B4}", 'CHARACTER_TOOTH' => "\u{1F9B7}", 'CHARACTER_TONGUE' => "\u{1F445}", 'CHARACTER_MOUTH' => "\u{1F444}", 'CHARACTER_KISS_MARK' => "\u{1F48B}", 'CHARACTER_HEART_WITH_ARROW' => "\u{1F498}", 'CHARACTER_RED_HEART' => "\u{2764}\u{FE0F}", 'CHARACTER_BEATING_HEART' => "\u{1F493}", 'CHARACTER_BROKEN_HEART' => "\u{1F494}", 'CHARACTER_TWO_HEARTS' => "\u{1F495}", 'CHARACTER_SPARKLING_HEART' => "\u{1F496}", 'CHARACTER_GROWING_HEART' => "\u{1F497}", 'CHARACTER_BLUE_HEART' => "\u{1F499}", 'CHARACTER_GREEN_HEART' => "\u{1F49A}", 'CHARACTER_YELLOW_HEART' => "\u{1F49B}", 'CHARACTER_ORANGE_HEART' => "\u{1F9E1}", 'CHARACTER_PURPLE_HEART' => "\u{1F49C}", 'CHARACTER_BLACK_HEART' => "\u{1F5A4}", 'CHARACTER_HEART_WITH_RIBBON' => "\u{1F49D}", 'CHARACTER_REVOLVING_HEARTS' => "\u{1F49E}", 'CHARACTER_HEART_DECORATION' => "\u{1F49F}", 'CHARACTER_HEAVY_HEART_EXCLAMATION' => "\u{2763}\u{FE0F}", 'CHARACTER_LOVE_LETTER' => "\u{1F48C}", 'CHARACTER_ZZZ' => "\u{1F4A4}", 'CHARACTER_ANGER_SYMBOL' => "\u{1F4A2}", 'CHARACTER_BOMB' => "\u{1F4A3}", 'CHARACTER_COLLISION' => "\u{1F4A5}", 'CHARACTER_SWEAT_DROPLETS' => "\u{1F4A6}", 'CHARACTER_DASHING_AWAY' => "\u{1F4A8}", 'CHARACTER_DIZZY' => "\u{1F4AB}", 'CHARACTER_SPEECH_BALLOON' => "\u{1F4AC}", 'CHARACTER_LEFT_SPEECH_BUBBLE' => "\u{1F5E8}\u{FE0F}", 'CHARACTER_RIGHT_ANGER_BUBBLE' => "\u{1F5EF}\u{FE0F}", 'CHARACTER_THOUGHT_BALLOON' => "\u{1F4AD}", 'CHARACTER_HOLE' => "\u{1F573}\u{FE0F}", 'CHARACTER_GLASSES' => "\u{1F453}", 'CHARACTER_SUNGLASSES' => "\u{1F576}\u{FE0F}", 'CHARACTER_GOGGLES' => "\u{1F97D}", 'CHARACTER_LAB_COAT' => "\u{1F97C}", 'CHARACTER_NECKTIE' => "\u{1F454}", 'CHARACTER_T_SHIRT' => "\u{1F455}", 'CHARACTER_JEANS' => "\u{1F456}", 'CHARACTER_SCARF' => "\u{1F9E3}", 'CHARACTER_GLOVES' => "\u{1F9E4}", 'CHARACTER_COAT' => "\u{1F9E5}", 'CHARACTER_SOCKS' => "\u{1F9E6}", 'CHARACTER_DRESS' => "\u{1F457}", 'CHARACTER_KIMONO' => "\u{1F458}", 'CHARACTER_BIKINI' => "\u{1F459}", 'CHARACTER_WOMAN_S_CLOTHES' => "\u{1F45A}", 'CHARACTER_PURSE' => "\u{1F45B}", 'CHARACTER_HANDBAG' => "\u{1F45C}", 'CHARACTER_CLUTCH_BAG' => "\u{1F45D}", 'CHARACTER_SHOPPING_BAGS' => "\u{1F6CD}\u{FE0F}", 'CHARACTER_SCHOOL_BACKPACK' => "\u{1F392}", 'CHARACTER_MAN_S_SHOE' => "\u{1F45E}", 'CHARACTER_RUNNING_SHOE' => "\u{1F45F}", 'CHARACTER_HIKING_BOOT' => "\u{1F97E}", 'CHARACTER_WOMAN_S_FLAT_SHOE' => "\u{1F97F}", 'CHARACTER_HIGH_HEELED_SHOE' => "\u{1F460}", 'CHARACTER_WOMAN_S_SANDAL' => "\u{1F461}", 'CHARACTER_WOMAN_S_BOOT' => "\u{1F462}", 'CHARACTER_CROWN' => "\u{1F451}", 'CHARACTER_WOMAN_S_HAT' => "\u{1F452}", 'CHARACTER_TOP_HAT' => "\u{1F3A9}", 'CHARACTER_GRADUATION_CAP' => "\u{1F393}", 'CHARACTER_BILLED_CAP' => "\u{1F9E2}", 'CHARACTER_RESCUE_WORKER_S_HELMET' => "\u{26D1}\u{FE0F}", 'CHARACTER_PRAYER_BEADS' => "\u{1F4FF}", 'CHARACTER_LIPSTICK' => "\u{1F484}", 'CHARACTER_RING' => "\u{1F48D}", 'CHARACTER_GEM_STONE' => "\u{1F48E}", 'CHARACTER_MONKEY_FACE' => "\u{1F435}", 'CHARACTER_MONKEY' => "\u{1F412}", 'CHARACTER_GORILLA' => "\u{1F98D}", 'CHARACTER_DOG_FACE' => "\u{1F436}", 'CHARACTER_DOG' => "\u{1F415}", 'CHARACTER_POODLE' => "\u{1F429}", 'CHARACTER_WOLF_FACE' => "\u{1F43A}", 'CHARACTER_FOX_FACE' => "\u{1F98A}", 'CHARACTER_RACCOON' => "\u{1F99D}", 'CHARACTER_CAT_FACE' => "\u{1F431}", 'CHARACTER_CAT' => "\u{1F408}", 'CHARACTER_LION_FACE' => "\u{1F981}", 'CHARACTER_TIGER_FACE' => "\u{1F42F}", 'CHARACTER_TIGER' => "\u{1F405}", 'CHARACTER_LEOPARD' => "\u{1F406}", 'CHARACTER_HORSE_FACE' => "\u{1F434}", 'CHARACTER_HORSE' => "\u{1F40E}", 'CHARACTER_UNICORN_FACE' => "\u{1F984}", 'CHARACTER_ZEBRA' => "\u{1F993}", 'CHARACTER_DEER' => "\u{1F98C}", 'CHARACTER_COW_FACE' => "\u{1F42E}", 'CHARACTER_OX' => "\u{1F402}", 'CHARACTER_WATER_BUFFALO' => "\u{1F403}", 'CHARACTER_COW' => "\u{1F404}", 'CHARACTER_PIG_FACE' => "\u{1F437}", 'CHARACTER_PIG' => "\u{1F416}", 'CHARACTER_BOAR' => "\u{1F417}", 'CHARACTER_PIG_NOSE' => "\u{1F43D}", 'CHARACTER_RAM' => "\u{1F40F}", 'CHARACTER_EWE' => "\u{1F411}", 'CHARACTER_GOAT' => "\u{1F410}", 'CHARACTER_CAMEL' => "\u{1F42A}", 'CHARACTER_TWO_HUMP_CAMEL' => "\u{1F42B}", 'CHARACTER_LLAMA' => "\u{1F999}", 'CHARACTER_GIRAFFE' => "\u{1F992}", 'CHARACTER_ELEPHANT' => "\u{1F418}", 'CHARACTER_RHINOCEROS' => "\u{1F98F}", 'CHARACTER_HIPPOPOTAMUS' => "\u{1F99B}", 'CHARACTER_MOUSE_FACE' => "\u{1F42D}", 'CHARACTER_MOUSE' => "\u{1F401}", 'CHARACTER_RAT' => "\u{1F400}", 'CHARACTER_HAMSTER_FACE' => "\u{1F439}", 'CHARACTER_RABBIT_FACE' => "\u{1F430}", 'CHARACTER_RABBIT' => "\u{1F407}", 'CHARACTER_CHIPMUNK' => "\u{1F43F}\u{FE0F}", 'CHARACTER_HEDGEHOG' => "\u{1F994}", 'CHARACTER_BAT' => "\u{1F987}", 'CHARACTER_BEAR_FACE' => "\u{1F43B}", 'CHARACTER_KOALA' => "\u{1F428}", 'CHARACTER_PANDA_FACE' => "\u{1F43C}", 'CHARACTER_KANGAROO' => "\u{1F998}", 'CHARACTER_BADGER' => "\u{1F9A1}", 'CHARACTER_PAW_PRINTS' => "\u{1F43E}", 'CHARACTER_TURKEY' => "\u{1F983}", 'CHARACTER_CHICKEN' => "\u{1F414}", 'CHARACTER_ROOSTER' => "\u{1F413}", 'CHARACTER_HATCHING_CHICK' => "\u{1F423}", 'CHARACTER_BABY_CHICK' => "\u{1F424}", 'CHARACTER_FRONT_FACING_BABY_CHICK' => "\u{1F425}", 'CHARACTER_BIRD' => "\u{1F426}", 'CHARACTER_PENGUIN' => "\u{1F427}", 'CHARACTER_DOVE' => "\u{1F54A}\u{FE0F}", 'CHARACTER_EAGLE' => "\u{1F985}", 'CHARACTER_DUCK' => "\u{1F986}", 'CHARACTER_SWAN' => "\u{1F9A2}", 'CHARACTER_OWL' => "\u{1F989}", 'CHARACTER_PEACOCK' => "\u{1F99A}", 'CHARACTER_PARROT' => "\u{1F99C}", 'CHARACTER_FROG_FACE' => "\u{1F438}", 'CHARACTER_CROCODILE' => "\u{1F40A}", 'CHARACTER_TURTLE' => "\u{1F422}", 'CHARACTER_LIZARD' => "\u{1F98E}", 'CHARACTER_SNAKE' => "\u{1F40D}", 'CHARACTER_DRAGON_FACE' => "\u{1F432}", 'CHARACTER_DRAGON' => "\u{1F409}", 'CHARACTER_SAUROPOD' => "\u{1F995}", 'CHARACTER_T_REX' => "\u{1F996}", 'CHARACTER_SPOUTING_WHALE' => "\u{1F433}", 'CHARACTER_WHALE' => "\u{1F40B}", 'CHARACTER_DOLPHIN' => "\u{1F42C}", 'CHARACTER_FISH' => "\u{1F41F}", 'CHARACTER_TROPICAL_FISH' => "\u{1F420}", 'CHARACTER_BLOWFISH' => "\u{1F421}", 'CHARACTER_SHARK' => "\u{1F988}", 'CHARACTER_OCTOPUS' => "\u{1F419}", 'CHARACTER_SPIRAL_SHELL' => "\u{1F41A}", 'CHARACTER_CRAB' => "\u{1F980}", 'CHARACTER_LOBSTER' => "\u{1F99E}", 'CHARACTER_SHRIMP' => "\u{1F990}", 'CHARACTER_SQUID' => "\u{1F991}", 'CHARACTER_SNAIL' => "\u{1F40C}", 'CHARACTER_BUTTERFLY' => "\u{1F98B}", 'CHARACTER_BUG' => "\u{1F41B}", 'CHARACTER_ANT' => "\u{1F41C}", 'CHARACTER_HONEYBEE' => "\u{1F41D}", 'CHARACTER_LADY_BEETLE' => "\u{1F41E}", 'CHARACTER_CRICKET' => "\u{1F997}", 'CHARACTER_SPIDER' => "\u{1F577}\u{FE0F}", 'CHARACTER_SPIDER_WEB' => "\u{1F578}\u{FE0F}", 'CHARACTER_SCORPION' => "\u{1F982}", 'CHARACTER_MOSQUITO' => "\u{1F99F}", 'CHARACTER_MICROBE' => "\u{1F9A0}", 'CHARACTER_BOUQUET' => "\u{1F490}", 'CHARACTER_CHERRY_BLOSSOM' => "\u{1F338}", 'CHARACTER_WHITE_FLOWER' => "\u{1F4AE}", 'CHARACTER_ROSETTE' => "\u{1F3F5}\u{FE0F}", 'CHARACTER_ROSE' => "\u{1F339}", 'CHARACTER_WILTED_FLOWER' => "\u{1F940}", 'CHARACTER_HIBISCUS' => "\u{1F33A}", 'CHARACTER_SUNFLOWER' => "\u{1F33B}", 'CHARACTER_BLOSSOM' => "\u{1F33C}", 'CHARACTER_TULIP' => "\u{1F337}", 'CHARACTER_SEEDLING' => "\u{1F331}", 'CHARACTER_EVERGREEN_TREE' => "\u{1F332}", 'CHARACTER_DECIDUOUS_TREE' => "\u{1F333}", 'CHARACTER_PALM_TREE' => "\u{1F334}", 'CHARACTER_CACTUS' => "\u{1F335}", 'CHARACTER_SHEAF_OF_RICE' => "\u{1F33E}", 'CHARACTER_HERB' => "\u{1F33F}", 'CHARACTER_SHAMROCK' => "\u{2618}\u{FE0F}", 'CHARACTER_FOUR_LEAF_CLOVER' => "\u{1F340}", 'CHARACTER_MAPLE_LEAF' => "\u{1F341}", 'CHARACTER_FALLEN_LEAF' => "\u{1F342}", 'CHARACTER_LEAF_FLUTTERING_IN_WIND' => "\u{1F343}", 'CHARACTER_GRAPES' => "\u{1F347}", 'CHARACTER_MELON' => "\u{1F348}", 'CHARACTER_WATERMELON' => "\u{1F349}", 'CHARACTER_TANGERINE' => "\u{1F34A}", 'CHARACTER_LEMON' => "\u{1F34B}", 'CHARACTER_BANANA' => "\u{1F34C}", 'CHARACTER_PINEAPPLE' => "\u{1F34D}", 'CHARACTER_MANGO' => "\u{1F96D}", 'CHARACTER_RED_APPLE' => "\u{1F34E}", 'CHARACTER_GREEN_APPLE' => "\u{1F34F}", 'CHARACTER_PEAR' => "\u{1F350}", 'CHARACTER_PEACH' => "\u{1F351}", 'CHARACTER_CHERRIES' => "\u{1F352}", 'CHARACTER_STRAWBERRY' => "\u{1F353}", 'CHARACTER_KIWI_FRUIT' => "\u{1F95D}", 'CHARACTER_TOMATO' => "\u{1F345}", 'CHARACTER_COCONUT' => "\u{1F965}", 'CHARACTER_AVOCADO' => "\u{1F951}", 'CHARACTER_EGGPLANT' => "\u{1F346}", 'CHARACTER_POTATO' => "\u{1F954}", 'CHARACTER_CARROT' => "\u{1F955}", 'CHARACTER_EAR_OF_CORN' => "\u{1F33D}", 'CHARACTER_HOT_PEPPER' => "\u{1F336}\u{FE0F}", 'CHARACTER_CUCUMBER' => "\u{1F952}", 'CHARACTER_LEAFY_GREEN' => "\u{1F96C}", 'CHARACTER_BROCCOLI' => "\u{1F966}", 'CHARACTER_MUSHROOM' => "\u{1F344}", 'CHARACTER_PEANUTS' => "\u{1F95C}", 'CHARACTER_CHESTNUT' => "\u{1F330}", 'CHARACTER_BREAD' => "\u{1F35E}", 'CHARACTER_CROISSANT' => "\u{1F950}", 'CHARACTER_BAGUETTE_BREAD' => "\u{1F956}", 'CHARACTER_PRETZEL' => "\u{1F968}", 'CHARACTER_BAGEL' => "\u{1F96F}", 'CHARACTER_PANCAKES' => "\u{1F95E}", 'CHARACTER_CHEESE_WEDGE' => "\u{1F9C0}", 'CHARACTER_MEAT_ON_BONE' => "\u{1F356}", 'CHARACTER_POULTRY_LEG' => "\u{1F357}", 'CHARACTER_CUT_OF_MEAT' => "\u{1F969}", 'CHARACTER_BACON' => "\u{1F953}", 'CHARACTER_HAMBURGER' => "\u{1F354}", 'CHARACTER_FRENCH_FRIES' => "\u{1F35F}", 'CHARACTER_PIZZA' => "\u{1F355}", 'CHARACTER_HOT_DOG' => "\u{1F32D}", 'CHARACTER_SANDWICH' => "\u{1F96A}", 'CHARACTER_TACO' => "\u{1F32E}", 'CHARACTER_BURRITO' => "\u{1F32F}", 'CHARACTER_STUFFED_FLATBREAD' => "\u{1F959}", 'CHARACTER_EGG' => "\u{1F95A}", 'CHARACTER_COOKING' => "\u{1F373}", 'CHARACTER_SHALLOW_PAN_OF_FOOD' => "\u{1F958}", 'CHARACTER_POT_OF_FOOD' => "\u{1F372}", 'CHARACTER_BOWL_WITH_SPOON' => "\u{1F963}", 'CHARACTER_GREEN_SALAD' => "\u{1F957}", 'CHARACTER_POPCORN' => "\u{1F37F}", 'CHARACTER_SALT' => "\u{1F9C2}", 'CHARACTER_CANNED_FOOD' => "\u{1F96B}", 'CHARACTER_BENTO_BOX' => "\u{1F371}", 'CHARACTER_RICE_CRACKER' => "\u{1F358}", 'CHARACTER_RICE_BALL' => "\u{1F359}", 'CHARACTER_COOKED_RICE' => "\u{1F35A}", 'CHARACTER_CURRY_RICE' => "\u{1F35B}", 'CHARACTER_STEAMING_BOWL' => "\u{1F35C}", 'CHARACTER_SPAGHETTI' => "\u{1F35D}", 'CHARACTER_ROASTED_SWEET_POTATO' => "\u{1F360}", 'CHARACTER_ODEN' => "\u{1F362}", 'CHARACTER_SUSHI' => "\u{1F363}", 'CHARACTER_FRIED_SHRIMP' => "\u{1F364}", 'CHARACTER_FISH_CAKE_WITH_SWIRL' => "\u{1F365}", 'CHARACTER_MOON_CAKE' => "\u{1F96E}", 'CHARACTER_DANGO' => "\u{1F361}", 'CHARACTER_DUMPLING' => "\u{1F95F}", 'CHARACTER_FORTUNE_COOKIE' => "\u{1F960}", 'CHARACTER_TAKEOUT_BOX' => "\u{1F961}", 'CHARACTER_SOFT_ICE_CREAM' => "\u{1F366}", 'CHARACTER_SHAVED_ICE' => "\u{1F367}", 'CHARACTER_ICE_CREAM' => "\u{1F368}", 'CHARACTER_DOUGHNUT' => "\u{1F369}", 'CHARACTER_COOKIE' => "\u{1F36A}", 'CHARACTER_BIRTHDAY_CAKE' => "\u{1F382}", 'CHARACTER_SHORTCAKE' => "\u{1F370}", 'CHARACTER_CUPCAKE' => "\u{1F9C1}", 'CHARACTER_PIE' => "\u{1F967}", 'CHARACTER_CHOCOLATE_BAR' => "\u{1F36B}", 'CHARACTER_CANDY' => "\u{1F36C}", 'CHARACTER_LOLLIPOP' => "\u{1F36D}", 'CHARACTER_CUSTARD' => "\u{1F36E}", 'CHARACTER_HONEY_POT' => "\u{1F36F}", 'CHARACTER_BABY_BOTTLE' => "\u{1F37C}", 'CHARACTER_GLASS_OF_MILK' => "\u{1F95B}", 'CHARACTER_HOT_BEVERAGE' => "\u{2615}", 'CHARACTER_TEACUP_WITHOUT_HANDLE' => "\u{1F375}", 'CHARACTER_SAKE' => "\u{1F376}", 'CHARACTER_BOTTLE_WITH_POPPING_CORK' => "\u{1F37E}", 'CHARACTER_WINE_GLASS' => "\u{1F377}", 'CHARACTER_COCKTAIL_GLASS' => "\u{1F378}", 'CHARACTER_TROPICAL_DRINK' => "\u{1F379}", 'CHARACTER_BEER_MUG' => "\u{1F37A}", 'CHARACTER_CLINKING_BEER_MUGS' => "\u{1F37B}", 'CHARACTER_CLINKING_GLASSES' => "\u{1F942}", 'CHARACTER_TUMBLER_GLASS' => "\u{1F943}", 'CHARACTER_CUP_WITH_STRAW' => "\u{1F964}", 'CHARACTER_CHOPSTICKS' => "\u{1F962}", 'CHARACTER_FORK_AND_KNIFE_WITH_PLATE' => "\u{1F37D}\u{FE0F}", 'CHARACTER_FORK_AND_KNIFE' => "\u{1F374}", 'CHARACTER_SPOON' => "\u{1F944}", 'CHARACTER_KITCHEN_KNIFE' => "\u{1F52A}", 'CHARACTER_AMPHORA' => "\u{1F3FA}", 'CHARACTER_GLOBE_SHOWING_EUROPE_AFRICA' => "\u{1F30D}", 'CHARACTER_GLOBE_SHOWING_AMERICAS' => "\u{1F30E}", 'CHARACTER_GLOBE_SHOWING_ASIA_AUSTRALIA' => "\u{1F30F}", 'CHARACTER_GLOBE_WITH_MERIDIANS' => "\u{1F310}", 'CHARACTER_WORLD_MAP' => "\u{1F5FA}\u{FE0F}", 'CHARACTER_MAP_OF_JAPAN' => "\u{1F5FE}", 'CHARACTER_COMPASS' => "\u{1F9ED}", 'CHARACTER_SNOW_CAPPED_MOUNTAIN' => "\u{1F3D4}\u{FE0F}", 'CHARACTER_MOUNTAIN' => "\u{26F0}\u{FE0F}", 'CHARACTER_VOLCANO' => "\u{1F30B}", 'CHARACTER_MOUNT_FUJI' => "\u{1F5FB}", 'CHARACTER_CAMPING' => "\u{1F3D5}\u{FE0F}", 'CHARACTER_BEACH_WITH_UMBRELLA' => "\u{1F3D6}\u{FE0F}", 'CHARACTER_DESERT' => "\u{1F3DC}\u{FE0F}", 'CHARACTER_DESERT_ISLAND' => "\u{1F3DD}\u{FE0F}", 'CHARACTER_NATIONAL_PARK' => "\u{1F3DE}\u{FE0F}", 'CHARACTER_STADIUM' => "\u{1F3DF}\u{FE0F}", 'CHARACTER_CLASSICAL_BUILDING' => "\u{1F3DB}\u{FE0F}", 'CHARACTER_BUILDING_CONSTRUCTION' => "\u{1F3D7}\u{FE0F}", 'CHARACTER_BRICKS' => "\u{1F9F1}", 'CHARACTER_HOUSES' => "\u{1F3D8}\u{FE0F}", 'CHARACTER_DERELICT_HOUSE' => "\u{1F3DA}\u{FE0F}", 'CHARACTER_HOUSE' => "\u{1F3E0}", 'CHARACTER_HOUSE_WITH_GARDEN' => "\u{1F3E1}", 'CHARACTER_OFFICE_BUILDING' => "\u{1F3E2}", 'CHARACTER_JAPANESE_POST_OFFICE' => "\u{1F3E3}", 'CHARACTER_POST_OFFICE' => "\u{1F3E4}", 'CHARACTER_HOSPITAL' => "\u{1F3E5}", 'CHARACTER_BANK' => "\u{1F3E6}", 'CHARACTER_HOTEL' => "\u{1F3E8}", 'CHARACTER_LOVE_HOTEL' => "\u{1F3E9}", 'CHARACTER_CONVENIENCE_STORE' => "\u{1F3EA}", 'CHARACTER_SCHOOL' => "\u{1F3EB}", 'CHARACTER_DEPARTMENT_STORE' => "\u{1F3EC}", 'CHARACTER_FACTORY' => "\u{1F3ED}", 'CHARACTER_JAPANESE_CASTLE' => "\u{1F3EF}", 'CHARACTER_CASTLE' => "\u{1F3F0}", 'CHARACTER_WEDDING' => "\u{1F492}", 'CHARACTER_TOKYO_TOWER' => "\u{1F5FC}", 'CHARACTER_STATUE_OF_LIBERTY' => "\u{1F5FD}", 'CHARACTER_CHURCH' => "\u{26EA}", 'CHARACTER_MOSQUE' => "\u{1F54C}", 'CHARACTER_SYNAGOGUE' => "\u{1F54D}", 'CHARACTER_SHINTO_SHRINE' => "\u{26E9}\u{FE0F}", 'CHARACTER_KAABA' => "\u{1F54B}", 'CHARACTER_FOUNTAIN' => "\u{26F2}", 'CHARACTER_TENT' => "\u{26FA}", 'CHARACTER_FOGGY' => "\u{1F301}", 'CHARACTER_NIGHT_WITH_STARS' => "\u{1F303}", 'CHARACTER_CITYSCAPE' => "\u{1F3D9}\u{FE0F}", 'CHARACTER_SUNRISE_OVER_MOUNTAINS' => "\u{1F304}", 'CHARACTER_SUNRISE' => "\u{1F305}", 'CHARACTER_CITYSCAPE_AT_DUSK' => "\u{1F306}", 'CHARACTER_SUNSET' => "\u{1F307}", 'CHARACTER_BRIDGE_AT_NIGHT' => "\u{1F309}", 'CHARACTER_HOT_SPRINGS' => "\u{2668}\u{FE0F}", 'CHARACTER_MILKY_WAY' => "\u{1F30C}", 'CHARACTER_CAROUSEL_HORSE' => "\u{1F3A0}", 'CHARACTER_FERRIS_WHEEL' => "\u{1F3A1}", 'CHARACTER_ROLLER_COASTER' => "\u{1F3A2}", 'CHARACTER_BARBER_POLE' => "\u{1F488}", 'CHARACTER_CIRCUS_TENT' => "\u{1F3AA}", 'CHARACTER_LOCOMOTIVE' => "\u{1F682}", 'CHARACTER_RAILWAY_CAR' => "\u{1F683}", 'CHARACTER_HIGH_SPEED_TRAIN' => "\u{1F684}", 'CHARACTER_BULLET_TRAIN' => "\u{1F685}", 'CHARACTER_TRAIN' => "\u{1F686}", 'CHARACTER_METRO' => "\u{1F687}", 'CHARACTER_LIGHT_RAIL' => "\u{1F688}", 'CHARACTER_STATION' => "\u{1F689}", 'CHARACTER_TRAM' => "\u{1F68A}", 'CHARACTER_MONORAIL' => "\u{1F69D}", 'CHARACTER_MOUNTAIN_RAILWAY' => "\u{1F69E}", 'CHARACTER_TRAM_CAR' => "\u{1F68B}", 'CHARACTER_BUS' => "\u{1F68C}", 'CHARACTER_ONCOMING_BUS' => "\u{1F68D}", 'CHARACTER_TROLLEYBUS' => "\u{1F68E}", 'CHARACTER_MINIBUS' => "\u{1F690}", 'CHARACTER_AMBULANCE' => "\u{1F691}", 'CHARACTER_FIRE_ENGINE' => "\u{1F692}", 'CHARACTER_POLICE_CAR' => "\u{1F693}", 'CHARACTER_ONCOMING_POLICE_CAR' => "\u{1F694}", 'CHARACTER_TAXI' => "\u{1F695}", 'CHARACTER_ONCOMING_TAXI' => "\u{1F696}", 'CHARACTER_AUTOMOBILE' => "\u{1F697}", 'CHARACTER_ONCOMING_AUTOMOBILE' => "\u{1F698}", 'CHARACTER_SPORT_UTILITY_VEHICLE' => "\u{1F699}", 'CHARACTER_DELIVERY_TRUCK' => "\u{1F69A}", 'CHARACTER_ARTICULATED_LORRY' => "\u{1F69B}", 'CHARACTER_TRACTOR' => "\u{1F69C}", 'CHARACTER_BICYCLE' => "\u{1F6B2}", 'CHARACTER_KICK_SCOOTER' => "\u{1F6F4}", 'CHARACTER_SKATEBOARD' => "\u{1F6F9}", 'CHARACTER_MOTOR_SCOOTER' => "\u{1F6F5}", 'CHARACTER_BUS_STOP' => "\u{1F68F}", 'CHARACTER_MOTORWAY' => "\u{1F6E3}\u{FE0F}", 'CHARACTER_RAILWAY_TRACK' => "\u{1F6E4}\u{FE0F}", 'CHARACTER_OIL_DRUM' => "\u{1F6E2}\u{FE0F}", 'CHARACTER_FUEL_PUMP' => "\u{26FD}", 'CHARACTER_POLICE_CAR_LIGHT' => "\u{1F6A8}", 'CHARACTER_HORIZONTAL_TRAFFIC_LIGHT' => "\u{1F6A5}", 'CHARACTER_VERTICAL_TRAFFIC_LIGHT' => "\u{1F6A6}", 'CHARACTER_STOP_SIGN' => "\u{1F6D1}", 'CHARACTER_CONSTRUCTION' => "\u{1F6A7}", 'CHARACTER_ANCHOR' => "\u{2693}", 'CHARACTER_SAILBOAT' => "\u{26F5}", 'CHARACTER_CANOE' => "\u{1F6F6}", 'CHARACTER_SPEEDBOAT' => "\u{1F6A4}", 'CHARACTER_PASSENGER_SHIP' => "\u{1F6F3}\u{FE0F}", 'CHARACTER_FERRY' => "\u{26F4}\u{FE0F}", 'CHARACTER_MOTOR_BOAT' => "\u{1F6E5}\u{FE0F}", 'CHARACTER_SHIP' => "\u{1F6A2}", 'CHARACTER_AIRPLANE' => "\u{2708}\u{FE0F}", 'CHARACTER_SMALL_AIRPLANE' => "\u{1F6E9}\u{FE0F}", 'CHARACTER_AIRPLANE_DEPARTURE' => "\u{1F6EB}", 'CHARACTER_AIRPLANE_ARRIVAL' => "\u{1F6EC}", 'CHARACTER_SEAT' => "\u{1F4BA}", 'CHARACTER_HELICOPTER' => "\u{1F681}", 'CHARACTER_SUSPENSION_RAILWAY' => "\u{1F69F}", 'CHARACTER_MOUNTAIN_CABLEWAY' => "\u{1F6A0}", 'CHARACTER_AERIAL_TRAMWAY' => "\u{1F6A1}", 'CHARACTER_SATELLITE' => "\u{1F6F0}\u{FE0F}", 'CHARACTER_ROCKET' => "\u{1F680}", 'CHARACTER_FLYING_SAUCER' => "\u{1F6F8}", 'CHARACTER_BELLHOP_BELL' => "\u{1F6CE}\u{FE0F}", 'CHARACTER_LUGGAGE' => "\u{1F9F3}", 'CHARACTER_HOURGLASS_DONE' => "\u{231B}", 'CHARACTER_HOURGLASS_NOT_DONE' => "\u{23F3}", 'CHARACTER_WATCH' => "\u{231A}", 'CHARACTER_ALARM_CLOCK' => "\u{23F0}", 'CHARACTER_STOPWATCH' => "\u{23F1}\u{FE0F}", 'CHARACTER_TIMER_CLOCK' => "\u{23F2}\u{FE0F}", 'CHARACTER_MANTELPIECE_CLOCK' => "\u{1F570}\u{FE0F}", 'CHARACTER_TWELVE_O_CLOCK' => "\u{1F55B}", 'CHARACTER_TWELVE_THIRTY' => "\u{1F567}", 'CHARACTER_ONE_O_CLOCK' => "\u{1F550}", 'CHARACTER_ONE_THIRTY' => "\u{1F55C}", 'CHARACTER_TWO_O_CLOCK' => "\u{1F551}", 'CHARACTER_TWO_THIRTY' => "\u{1F55D}", 'CHARACTER_THREE_O_CLOCK' => "\u{1F552}", 'CHARACTER_THREE_THIRTY' => "\u{1F55E}", 'CHARACTER_FOUR_O_CLOCK' => "\u{1F553}", 'CHARACTER_FOUR_THIRTY' => "\u{1F55F}", 'CHARACTER_FIVE_O_CLOCK' => "\u{1F554}", 'CHARACTER_FIVE_THIRTY' => "\u{1F560}", 'CHARACTER_SIX_O_CLOCK' => "\u{1F555}", 'CHARACTER_SIX_THIRTY' => "\u{1F561}", 'CHARACTER_SEVEN_O_CLOCK' => "\u{1F556}", 'CHARACTER_SEVEN_THIRTY' => "\u{1F562}", 'CHARACTER_EIGHT_O_CLOCK' => "\u{1F557}", 'CHARACTER_EIGHT_THIRTY' => "\u{1F563}", 'CHARACTER_NINE_O_CLOCK' => "\u{1F558}", 'CHARACTER_NINE_THIRTY' => "\u{1F564}", 'CHARACTER_TEN_O_CLOCK' => "\u{1F559}", 'CHARACTER_TEN_THIRTY' => "\u{1F565}", 'CHARACTER_ELEVEN_O_CLOCK' => "\u{1F55A}", 'CHARACTER_ELEVEN_THIRTY' => "\u{1F566}", 'CHARACTER_NEW_MOON' => "\u{1F311}", 'CHARACTER_WAXING_CRESCENT_MOON' => "\u{1F312}", 'CHARACTER_FIRST_QUARTER_MOON' => "\u{1F313}", 'CHARACTER_WAXING_GIBBOUS_MOON' => "\u{1F314}", 'CHARACTER_FULL_MOON' => "\u{1F315}", 'CHARACTER_WANING_GIBBOUS_MOON' => "\u{1F316}", 'CHARACTER_LAST_QUARTER_MOON' => "\u{1F317}", 'CHARACTER_WANING_CRESCENT_MOON' => "\u{1F318}", 'CHARACTER_CRESCENT_MOON' => "\u{1F319}", 'CHARACTER_NEW_MOON_FACE' => "\u{1F31A}", 'CHARACTER_FIRST_QUARTER_MOON_FACE' => "\u{1F31B}", 'CHARACTER_LAST_QUARTER_MOON_FACE' => "\u{1F31C}", 'CHARACTER_THERMOMETER' => "\u{1F321}\u{FE0F}", 'CHARACTER_SUN' => "\u{2600}\u{FE0F}", 'CHARACTER_FULL_MOON_FACE' => "\u{1F31D}", 'CHARACTER_SUN_WITH_FACE' => "\u{1F31E}", 'CHARACTER_STAR' => "\u{2B50}", 'CHARACTER_GLOWING_STAR' => "\u{1F31F}", 'CHARACTER_SHOOTING_STAR' => "\u{1F320}", 'CHARACTER_CLOUD' => "\u{2601}\u{FE0F}", 'CHARACTER_SUN_BEHIND_CLOUD' => "\u{26C5}", 'CHARACTER_CLOUD_WITH_LIGHTNING_AND_RAIN' => "\u{26C8}\u{FE0F}", 'CHARACTER_SUN_BEHIND_SMALL_CLOUD' => "\u{1F324}\u{FE0F}", 'CHARACTER_SUN_BEHIND_LARGE_CLOUD' => "\u{1F325}\u{FE0F}", 'CHARACTER_SUN_BEHIND_RAIN_CLOUD' => "\u{1F326}\u{FE0F}", 'CHARACTER_CLOUD_WITH_RAIN' => "\u{1F327}\u{FE0F}", 'CHARACTER_CLOUD_WITH_SNOW' => "\u{1F328}\u{FE0F}", 'CHARACTER_CLOUD_WITH_LIGHTNING' => "\u{1F329}\u{FE0F}", 'CHARACTER_TORNADO' => "\u{1F32A}\u{FE0F}", 'CHARACTER_FOG' => "\u{1F32B}\u{FE0F}", 'CHARACTER_WIND_FACE' => "\u{1F32C}\u{FE0F}", 'CHARACTER_CYCLONE' => "\u{1F300}", 'CHARACTER_RAINBOW' => "\u{1F308}", 'CHARACTER_CLOSED_UMBRELLA' => "\u{1F302}", 'CHARACTER_UMBRELLA' => "\u{2602}\u{FE0F}", 'CHARACTER_UMBRELLA_WITH_RAIN_DROPS' => "\u{2614}", 'CHARACTER_UMBRELLA_ON_GROUND' => "\u{26F1}\u{FE0F}", 'CHARACTER_HIGH_VOLTAGE' => "\u{26A1}", 'CHARACTER_SNOWFLAKE' => "\u{2744}\u{FE0F}", 'CHARACTER_SNOWMAN' => "\u{2603}\u{FE0F}", 'CHARACTER_SNOWMAN_WITHOUT_SNOW' => "\u{26C4}", 'CHARACTER_COMET' => "\u{2604}\u{FE0F}", 'CHARACTER_FIRE' => "\u{1F525}", 'CHARACTER_DROPLET' => "\u{1F4A7}", 'CHARACTER_WATER_WAVE' => "\u{1F30A}", 'CHARACTER_JACK_O_LANTERN' => "\u{1F383}", 'CHARACTER_CHRISTMAS_TREE' => "\u{1F384}", 'CHARACTER_FIREWORKS' => "\u{1F386}", 'CHARACTER_SPARKLER' => "\u{1F387}", 'CHARACTER_FIRECRACKER' => "\u{1F9E8}", 'CHARACTER_SPARKLES' => "\u{2728}", 'CHARACTER_BALLOON' => "\u{1F388}", 'CHARACTER_PARTY_POPPER' => "\u{1F389}", 'CHARACTER_CONFETTI_BALL' => "\u{1F38A}", 'CHARACTER_TANABATA_TREE' => "\u{1F38B}", 'CHARACTER_PINE_DECORATION' => "\u{1F38D}", 'CHARACTER_JAPANESE_DOLLS' => "\u{1F38E}", 'CHARACTER_CARP_STREAMER' => "\u{1F38F}", 'CHARACTER_WIND_CHIME' => "\u{1F390}", 'CHARACTER_MOON_VIEWING_CEREMONY' => "\u{1F391}", 'CHARACTER_RED_ENVELOPE' => "\u{1F9E7}", 'CHARACTER_RIBBON' => "\u{1F380}", 'CHARACTER_WRAPPED_GIFT' => "\u{1F381}", 'CHARACTER_REMINDER_RIBBON' => "\u{1F397}\u{FE0F}", 'CHARACTER_ADMISSION_TICKETS' => "\u{1F39F}\u{FE0F}", 'CHARACTER_TICKET' => "\u{1F3AB}", 'CHARACTER_MILITARY_MEDAL' => "\u{1F396}\u{FE0F}", 'CHARACTER_TROPHY' => "\u{1F3C6}", 'CHARACTER_SPORTS_MEDAL' => "\u{1F3C5}", 'CHARACTER_1ST_PLACE_MEDAL' => "\u{1F947}", 'CHARACTER_2ND_PLACE_MEDAL' => "\u{1F948}", 'CHARACTER_3RD_PLACE_MEDAL' => "\u{1F949}", 'CHARACTER_SOCCER_BALL' => "\u{26BD}", 'CHARACTER_BASEBALL' => "\u{26BE}", 'CHARACTER_SOFTBALL' => "\u{1F94E}", 'CHARACTER_BASKETBALL' => "\u{1F3C0}", 'CHARACTER_VOLLEYBALL' => "\u{1F3D0}", 'CHARACTER_AMERICAN_FOOTBALL' => "\u{1F3C8}", 'CHARACTER_RUGBY_FOOTBALL' => "\u{1F3C9}", 'CHARACTER_TENNIS' => "\u{1F3BE}", 'CHARACTER_FLYING_DISC' => "\u{1F94F}", 'CHARACTER_BOWLING' => "\u{1F3B3}", 'CHARACTER_CRICKET_GAME' => "\u{1F3CF}", 'CHARACTER_FIELD_HOCKEY' => "\u{1F3D1}", 'CHARACTER_ICE_HOCKEY' => "\u{1F3D2}", 'CHARACTER_LACROSSE' => "\u{1F94D}", 'CHARACTER_PING_PONG' => "\u{1F3D3}", 'CHARACTER_BADMINTON' => "\u{1F3F8}", 'CHARACTER_BOXING_GLOVE' => "\u{1F94A}", 'CHARACTER_MARTIAL_ARTS_UNIFORM' => "\u{1F94B}", 'CHARACTER_GOAL_NET' => "\u{1F945}", 'CHARACTER_FLAG_IN_HOLE' => "\u{26F3}", 'CHARACTER_ICE_SKATE' => "\u{26F8}\u{FE0F}", 'CHARACTER_FISHING_POLE' => "\u{1F3A3}", 'CHARACTER_RUNNING_SHIRT' => "\u{1F3BD}", 'CHARACTER_SKIS' => "\u{1F3BF}", 'CHARACTER_SLED' => "\u{1F6F7}", 'CHARACTER_CURLING_STONE' => "\u{1F94C}", 'CHARACTER_DIRECT_HIT' => "\u{1F3AF}", 'CHARACTER_POOL_8_BALL' => "\u{1F3B1}", 'CHARACTER_CRYSTAL_BALL' => "\u{1F52E}", 'CHARACTER_NAZAR_AMULET' => "\u{1F9FF}", 'CHARACTER_VIDEO_GAME' => "\u{1F3AE}", 'CHARACTER_JOYSTICK' => "\u{1F579}\u{FE0F}", 'CHARACTER_SLOT_MACHINE' => "\u{1F3B0}", 'CHARACTER_GAME_DIE' => "\u{1F3B2}", 'CHARACTER_JIGSAW' => "\u{1F9E9}", 'CHARACTER_TEDDY_BEAR' => "\u{1F9F8}", 'CHARACTER_SPADE_SUIT' => "\u{2660}\u{FE0F}", 'CHARACTER_HEART_SUIT' => "\u{2665}\u{FE0F}", 'CHARACTER_DIAMOND_SUIT' => "\u{2666}\u{FE0F}", 'CHARACTER_CLUB_SUIT' => "\u{2663}\u{FE0F}", 'CHARACTER_CHESS_PAWN' => "\u{265F}\u{FE0F}", 'CHARACTER_JOKER' => "\u{1F0CF}", 'CHARACTER_MAHJONG_RED_DRAGON' => "\u{1F004}", 'CHARACTER_FLOWER_PLAYING_CARDS' => "\u{1F3B4}", 'CHARACTER_PERFORMING_ARTS' => "\u{1F3AD}", 'CHARACTER_FRAMED_PICTURE' => "\u{1F5BC}\u{FE0F}", 'CHARACTER_ARTIST_PALETTE' => "\u{1F3A8}", 'CHARACTER_THREAD' => "\u{1F9F5}", 'CHARACTER_YARN' => "\u{1F9F6}", 'CHARACTER_MUTED_SPEAKER' => "\u{1F507}", 'CHARACTER_SPEAKER_LOW_VOLUME' => "\u{1F508}", 'CHARACTER_SPEAKER_MEDIUM_VOLUME' => "\u{1F509}", 'CHARACTER_SPEAKER_HIGH_VOLUME' => "\u{1F50A}", 'CHARACTER_LOUDSPEAKER' => "\u{1F4E2}", 'CHARACTER_MEGAPHONE' => "\u{1F4E3}", 'CHARACTER_POSTAL_HORN' => "\u{1F4EF}", 'CHARACTER_BELL' => "\u{1F514}", 'CHARACTER_BELL_WITH_SLASH' => "\u{1F515}", 'CHARACTER_MUSICAL_SCORE' => "\u{1F3BC}", 'CHARACTER_MUSICAL_NOTE' => "\u{1F3B5}", 'CHARACTER_MUSICAL_NOTES' => "\u{1F3B6}", 'CHARACTER_STUDIO_MICROPHONE' => "\u{1F399}\u{FE0F}", 'CHARACTER_LEVEL_SLIDER' => "\u{1F39A}\u{FE0F}", 'CHARACTER_CONTROL_KNOBS' => "\u{1F39B}\u{FE0F}", 'CHARACTER_MICROPHONE' => "\u{1F3A4}", 'CHARACTER_HEADPHONE' => "\u{1F3A7}", 'CHARACTER_RADIO' => "\u{1F4FB}", 'CHARACTER_SAXOPHONE' => "\u{1F3B7}", 'CHARACTER_GUITAR' => "\u{1F3B8}", 'CHARACTER_MUSICAL_KEYBOARD' => "\u{1F3B9}", 'CHARACTER_TRUMPET' => "\u{1F3BA}", 'CHARACTER_VIOLIN' => "\u{1F3BB}", 'CHARACTER_DRUM' => "\u{1F941}", 'CHARACTER_MOBILE_PHONE' => "\u{1F4F1}", 'CHARACTER_MOBILE_PHONE_WITH_ARROW' => "\u{1F4F2}", 'CHARACTER_TELEPHONE' => "\u{260E}\u{FE0F}", 'CHARACTER_TELEPHONE_RECEIVER' => "\u{1F4DE}", 'CHARACTER_PAGER' => "\u{1F4DF}", 'CHARACTER_FAX_MACHINE' => "\u{1F4E0}", 'CHARACTER_BATTERY' => "\u{1F50B}", 'CHARACTER_ELECTRIC_PLUG' => "\u{1F50C}", 'CHARACTER_LAPTOP_COMPUTER' => "\u{1F4BB}", 'CHARACTER_DESKTOP_COMPUTER' => "\u{1F5A5}\u{FE0F}", 'CHARACTER_PRINTER' => "\u{1F5A8}\u{FE0F}", 'CHARACTER_KEYBOARD' => "\u{2328}\u{FE0F}", 'CHARACTER_COMPUTER_MOUSE' => "\u{1F5B1}\u{FE0F}", 'CHARACTER_TRACKBALL' => "\u{1F5B2}\u{FE0F}", 'CHARACTER_COMPUTER_DISK' => "\u{1F4BD}", 'CHARACTER_FLOPPY_DISK' => "\u{1F4BE}", 'CHARACTER_OPTICAL_DISK' => "\u{1F4BF}", 'CHARACTER_DVD' => "\u{1F4C0}", 'CHARACTER_ABACUS' => "\u{1F9EE}", 'CHARACTER_MOVIE_CAMERA' => "\u{1F3A5}", 'CHARACTER_FILM_FRAMES' => "\u{1F39E}\u{FE0F}", 'CHARACTER_FILM_PROJECTOR' => "\u{1F4FD}\u{FE0F}", 'CHARACTER_CLAPPER_BOARD' => "\u{1F3AC}", 'CHARACTER_TELEVISION' => "\u{1F4FA}", 'CHARACTER_CAMERA' => "\u{1F4F7}", 'CHARACTER_CAMERA_WITH_FLASH' => "\u{1F4F8}", 'CHARACTER_VIDEO_CAMERA' => "\u{1F4F9}", 'CHARACTER_VIDEOCASSETTE' => "\u{1F4FC}", 'CHARACTER_MAGNIFYING_GLASS_TILTED_LEFT' => "\u{1F50D}", 'CHARACTER_MAGNIFYING_GLASS_TILTED_RIGHT' => "\u{1F50E}", 'CHARACTER_CANDLE' => "\u{1F56F}\u{FE0F}", 'CHARACTER_LIGHT_BULB' => "\u{1F4A1}", 'CHARACTER_FLASHLIGHT' => "\u{1F526}", 'CHARACTER_RED_PAPER_LANTERN' => "\u{1F3EE}", 'CHARACTER_NOTEBOOK_WITH_DECORATIVE_COVER' => "\u{1F4D4}", 'CHARACTER_CLOSED_BOOK' => "\u{1F4D5}", 'CHARACTER_OPEN_BOOK' => "\u{1F4D6}", 'CHARACTER_GREEN_BOOK' => "\u{1F4D7}", 'CHARACTER_BLUE_BOOK' => "\u{1F4D8}", 'CHARACTER_ORANGE_BOOK' => "\u{1F4D9}", 'CHARACTER_BOOKS' => "\u{1F4DA}", 'CHARACTER_NOTEBOOK' => "\u{1F4D3}", 'CHARACTER_LEDGER' => "\u{1F4D2}", 'CHARACTER_PAGE_WITH_CURL' => "\u{1F4C3}", 'CHARACTER_SCROLL' => "\u{1F4DC}", 'CHARACTER_PAGE_FACING_UP' => "\u{1F4C4}", 'CHARACTER_NEWSPAPER' => "\u{1F4F0}", 'CHARACTER_ROLLED_UP_NEWSPAPER' => "\u{1F5DE}\u{FE0F}", 'CHARACTER_BOOKMARK_TABS' => "\u{1F4D1}", 'CHARACTER_BOOKMARK' => "\u{1F516}", 'CHARACTER_LABEL' => "\u{1F3F7}\u{FE0F}", 'CHARACTER_MONEY_BAG' => "\u{1F4B0}", 'CHARACTER_YEN_BANKNOTE' => "\u{1F4B4}", 'CHARACTER_DOLLAR_BANKNOTE' => "\u{1F4B5}", 'CHARACTER_EURO_BANKNOTE' => "\u{1F4B6}", 'CHARACTER_POUND_BANKNOTE' => "\u{1F4B7}", 'CHARACTER_MONEY_WITH_WINGS' => "\u{1F4B8}", 'CHARACTER_CREDIT_CARD' => "\u{1F4B3}", 'CHARACTER_RECEIPT' => "\u{1F9FE}", 'CHARACTER_CHART_INCREASING_WITH_YEN' => "\u{1F4B9}", 'CHARACTER_CURRENCY_EXCHANGE' => "\u{1F4B1}", 'CHARACTER_HEAVY_DOLLAR_SIGN' => "\u{1F4B2}", 'CHARACTER_ENVELOPE' => "\u{2709}\u{FE0F}", 'CHARACTER_E_MAIL' => "\u{1F4E7}", 'CHARACTER_INCOMING_ENVELOPE' => "\u{1F4E8}", 'CHARACTER_ENVELOPE_WITH_ARROW' => "\u{1F4E9}", 'CHARACTER_OUTBOX_TRAY' => "\u{1F4E4}", 'CHARACTER_INBOX_TRAY' => "\u{1F4E5}", 'CHARACTER_PACKAGE' => "\u{1F4E6}", 'CHARACTER_CLOSED_MAILBOX_WITH_RAISED_FLAG' => "\u{1F4EB}", 'CHARACTER_CLOSED_MAILBOX_WITH_LOWERED_FLAG' => "\u{1F4EA}", 'CHARACTER_OPEN_MAILBOX_WITH_RAISED_FLAG' => "\u{1F4EC}", 'CHARACTER_OPEN_MAILBOX_WITH_LOWERED_FLAG' => "\u{1F4ED}", 'CHARACTER_POSTBOX' => "\u{1F4EE}", 'CHARACTER_BALLOT_BOX_WITH_BALLOT' => "\u{1F5F3}\u{FE0F}", 'CHARACTER_PENCIL' => "\u{270F}\u{FE0F}", 'CHARACTER_BLACK_NIB' => "\u{2712}\u{FE0F}", 'CHARACTER_FOUNTAIN_PEN' => "\u{1F58B}\u{FE0F}", 'CHARACTER_PEN' => "\u{1F58A}\u{FE0F}", 'CHARACTER_PAINTBRUSH' => "\u{1F58C}\u{FE0F}", 'CHARACTER_CRAYON' => "\u{1F58D}\u{FE0F}", 'CHARACTER_MEMO' => "\u{1F4DD}", 'CHARACTER_BRIEFCASE' => "\u{1F4BC}", 'CHARACTER_FILE_FOLDER' => "\u{1F4C1}", 'CHARACTER_OPEN_FILE_FOLDER' => "\u{1F4C2}", 'CHARACTER_CARD_INDEX_DIVIDERS' => "\u{1F5C2}\u{FE0F}", 'CHARACTER_CALENDAR' => "\u{1F4C5}", 'CHARACTER_TEAR_OFF_CALENDAR' => "\u{1F4C6}", 'CHARACTER_SPIRAL_NOTEPAD' => "\u{1F5D2}\u{FE0F}", 'CHARACTER_SPIRAL_CALENDAR' => "\u{1F5D3}\u{FE0F}", 'CHARACTER_CARD_INDEX' => "\u{1F4C7}", 'CHARACTER_CHART_INCREASING' => "\u{1F4C8}", 'CHARACTER_CHART_DECREASING' => "\u{1F4C9}", 'CHARACTER_BAR_CHART' => "\u{1F4CA}", 'CHARACTER_CLIPBOARD' => "\u{1F4CB}", 'CHARACTER_PUSHPIN' => "\u{1F4CC}", 'CHARACTER_ROUND_PUSHPIN' => "\u{1F4CD}", 'CHARACTER_PAPERCLIP' => "\u{1F4CE}", 'CHARACTER_LINKED_PAPERCLIPS' => "\u{1F587}\u{FE0F}", 'CHARACTER_STRAIGHT_RULER' => "\u{1F4CF}", 'CHARACTER_TRIANGULAR_RULER' => "\u{1F4D0}", 'CHARACTER_SCISSORS' => "\u{2702}\u{FE0F}", 'CHARACTER_CARD_FILE_BOX' => "\u{1F5C3}\u{FE0F}", 'CHARACTER_FILE_CABINET' => "\u{1F5C4}\u{FE0F}", 'CHARACTER_WASTEBASKET' => "\u{1F5D1}\u{FE0F}", 'CHARACTER_LOCKED' => "\u{1F512}", 'CHARACTER_UNLOCKED' => "\u{1F513}", 'CHARACTER_LOCKED_WITH_PEN' => "\u{1F50F}", 'CHARACTER_LOCKED_WITH_KEY' => "\u{1F510}", 'CHARACTER_KEY' => "\u{1F511}", 'CHARACTER_OLD_KEY' => "\u{1F5DD}\u{FE0F}", 'CHARACTER_HAMMER' => "\u{1F528}", 'CHARACTER_PICK' => "\u{26CF}\u{FE0F}", 'CHARACTER_HAMMER_AND_PICK' => "\u{2692}\u{FE0F}", 'CHARACTER_HAMMER_AND_WRENCH' => "\u{1F6E0}\u{FE0F}", 'CHARACTER_DAGGER' => "\u{1F5E1}\u{FE0F}", 'CHARACTER_CROSSED_SWORDS' => "\u{2694}\u{FE0F}", 'CHARACTER_PISTOL' => "\u{1F52B}", 'CHARACTER_BOW_AND_ARROW' => "\u{1F3F9}", 'CHARACTER_SHIELD' => "\u{1F6E1}\u{FE0F}", 'CHARACTER_WRENCH' => "\u{1F527}", 'CHARACTER_NUT_AND_BOLT' => "\u{1F529}", 'CHARACTER_GEAR' => "\u{2699}\u{FE0F}", 'CHARACTER_CLAMP' => "\u{1F5DC}\u{FE0F}", 'CHARACTER_BALANCE_SCALE' => "\u{2696}\u{FE0F}", 'CHARACTER_LINK' => "\u{1F517}", 'CHARACTER_CHAINS' => "\u{26D3}\u{FE0F}", 'CHARACTER_TOOLBOX' => "\u{1F9F0}", 'CHARACTER_MAGNET' => "\u{1F9F2}", 'CHARACTER_ALEMBIC' => "\u{2697}\u{FE0F}", 'CHARACTER_TEST_TUBE' => "\u{1F9EA}", 'CHARACTER_PETRI_DISH' => "\u{1F9EB}", 'CHARACTER_DNA' => "\u{1F9EC}", 'CHARACTER_MICROSCOPE' => "\u{1F52C}", 'CHARACTER_TELESCOPE' => "\u{1F52D}", 'CHARACTER_SATELLITE_ANTENNA' => "\u{1F4E1}", 'CHARACTER_SYRINGE' => "\u{1F489}", 'CHARACTER_PILL' => "\u{1F48A}", 'CHARACTER_DOOR' => "\u{1F6AA}", 'CHARACTER_BED' => "\u{1F6CF}\u{FE0F}", 'CHARACTER_COUCH_AND_LAMP' => "\u{1F6CB}\u{FE0F}", 'CHARACTER_TOILET' => "\u{1F6BD}", 'CHARACTER_SHOWER' => "\u{1F6BF}", 'CHARACTER_BATHTUB' => "\u{1F6C1}", 'CHARACTER_LOTION_BOTTLE' => "\u{1F9F4}", 'CHARACTER_SAFETY_PIN' => "\u{1F9F7}", 'CHARACTER_BROOM' => "\u{1F9F9}", 'CHARACTER_BASKET' => "\u{1F9FA}", 'CHARACTER_ROLL_OF_PAPER' => "\u{1F9FB}", 'CHARACTER_SOAP' => "\u{1F9FC}", 'CHARACTER_SPONGE' => "\u{1F9FD}", 'CHARACTER_FIRE_EXTINGUISHER' => "\u{1F9EF}", 'CHARACTER_SHOPPING_CART' => "\u{1F6D2}", 'CHARACTER_CIGARETTE' => "\u{1F6AC}", 'CHARACTER_COFFIN' => "\u{26B0}\u{FE0F}", 'CHARACTER_FUNERAL_URN' => "\u{26B1}\u{FE0F}", 'CHARACTER_MOAI' => "\u{1F5FF}", 'CHARACTER_ATM_SIGN' => "\u{1F3E7}", 'CHARACTER_LITTER_IN_BIN_SIGN' => "\u{1F6AE}", 'CHARACTER_POTABLE_WATER' => "\u{1F6B0}", 'CHARACTER_WHEELCHAIR_SYMBOL' => "\u{267F}", 'CHARACTER_MEN_S_ROOM' => "\u{1F6B9}", 'CHARACTER_WOMEN_S_ROOM' => "\u{1F6BA}", 'CHARACTER_RESTROOM' => "\u{1F6BB}", 'CHARACTER_BABY_SYMBOL' => "\u{1F6BC}", 'CHARACTER_WATER_CLOSET' => "\u{1F6BE}", 'CHARACTER_PASSPORT_CONTROL' => "\u{1F6C2}", 'CHARACTER_CUSTOMS' => "\u{1F6C3}", 'CHARACTER_BAGGAGE_CLAIM' => "\u{1F6C4}", 'CHARACTER_LEFT_LUGGAGE' => "\u{1F6C5}", 'CHARACTER_WARNING' => "\u{26A0}\u{FE0F}", 'CHARACTER_CHILDREN_CROSSING' => "\u{1F6B8}", 'CHARACTER_NO_ENTRY' => "\u{26D4}", 'CHARACTER_PROHIBITED' => "\u{1F6AB}", 'CHARACTER_NO_BICYCLES' => "\u{1F6B3}", 'CHARACTER_NO_SMOKING' => "\u{1F6AD}", 'CHARACTER_NO_LITTERING' => "\u{1F6AF}", 'CHARACTER_NON_POTABLE_WATER' => "\u{1F6B1}", 'CHARACTER_NO_PEDESTRIANS' => "\u{1F6B7}", 'CHARACTER_NO_MOBILE_PHONES' => "\u{1F4F5}", 'CHARACTER_NO_ONE_UNDER_EIGHTEEN' => "\u{1F51E}", 'CHARACTER_RADIOACTIVE' => "\u{2622}\u{FE0F}", 'CHARACTER_BIOHAZARD' => "\u{2623}\u{FE0F}", 'CHARACTER_UP_ARROW' => "\u{2B06}\u{FE0F}", 'CHARACTER_UP_RIGHT_ARROW' => "\u{2197}\u{FE0F}", 'CHARACTER_RIGHT_ARROW' => "\u{27A1}\u{FE0F}", 'CHARACTER_DOWN_RIGHT_ARROW' => "\u{2198}\u{FE0F}", 'CHARACTER_DOWN_ARROW' => "\u{2B07}\u{FE0F}", 'CHARACTER_DOWN_LEFT_ARROW' => "\u{2199}\u{FE0F}", 'CHARACTER_LEFT_ARROW' => "\u{2B05}\u{FE0F}", 'CHARACTER_UP_LEFT_ARROW' => "\u{2196}\u{FE0F}", 'CHARACTER_UP_DOWN_ARROW' => "\u{2195}\u{FE0F}", 'CHARACTER_LEFT_RIGHT_ARROW' => "\u{2194}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_LEFT' => "\u{21A9}\u{FE0F}", 'CHARACTER_LEFT_ARROW_CURVING_RIGHT' => "\u{21AA}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_UP' => "\u{2934}\u{FE0F}", 'CHARACTER_RIGHT_ARROW_CURVING_DOWN' => "\u{2935}\u{FE0F}", 'CHARACTER_CLOCKWISE_VERTICAL_ARROWS' => "\u{1F503}", 'CHARACTER_COUNTERCLOCKWISE_ARROWS_BUTTON' => "\u{1F504}", 'CHARACTER_BACK_ARROW' => "\u{1F519}", 'CHARACTER_END_ARROW' => "\u{1F51A}", 'CHARACTER_ON_ARROW' => "\u{1F51B}", 'CHARACTER_SOON_ARROW' => "\u{1F51C}", 'CHARACTER_TOP_ARROW' => "\u{1F51D}", 'CHARACTER_PLACE_OF_WORSHIP' => "\u{1F6D0}", 'CHARACTER_ATOM_SYMBOL' => "\u{269B}\u{FE0F}", 'CHARACTER_OM' => "\u{1F549}\u{FE0F}", 'CHARACTER_STAR_OF_DAVID' => "\u{2721}\u{FE0F}", 'CHARACTER_WHEEL_OF_DHARMA' => "\u{2638}\u{FE0F}", 'CHARACTER_YIN_YANG' => "\u{262F}\u{FE0F}", 'CHARACTER_LATIN_CROSS' => "\u{271D}\u{FE0F}", 'CHARACTER_ORTHODOX_CROSS' => "\u{2626}\u{FE0F}", 'CHARACTER_STAR_AND_CRESCENT' => "\u{262A}\u{FE0F}", 'CHARACTER_PEACE_SYMBOL' => "\u{262E}\u{FE0F}", 'CHARACTER_MENORAH' => "\u{1F54E}", 'CHARACTER_DOTTED_SIX_POINTED_STAR' => "\u{1F52F}", 'CHARACTER_ARIES' => "\u{2648}", 'CHARACTER_TAURUS' => "\u{2649}", 'CHARACTER_GEMINI' => "\u{264A}", 'CHARACTER_CANCER' => "\u{264B}", 'CHARACTER_LEO' => "\u{264C}", 'CHARACTER_VIRGO' => "\u{264D}", 'CHARACTER_LIBRA' => "\u{264E}", 'CHARACTER_SCORPIO' => "\u{264F}", 'CHARACTER_SAGITTARIUS' => "\u{2650}", 'CHARACTER_CAPRICORN' => "\u{2651}", 'CHARACTER_AQUARIUS' => "\u{2652}", 'CHARACTER_PISCES' => "\u{2653}", 'CHARACTER_OPHIUCHUS' => "\u{26CE}", 'CHARACTER_SHUFFLE_TRACKS_BUTTON' => "\u{1F500}", 'CHARACTER_REPEAT_BUTTON' => "\u{1F501}", 'CHARACTER_REPEAT_SINGLE_BUTTON' => "\u{1F502}", 'CHARACTER_PLAY_BUTTON' => "\u{25B6}\u{FE0F}", 'CHARACTER_FAST_FORWARD_BUTTON' => "\u{23E9}", 'CHARACTER_NEXT_TRACK_BUTTON' => "\u{23ED}\u{FE0F}", 'CHARACTER_PLAY_OR_PAUSE_BUTTON' => "\u{23EF}\u{FE0F}", 'CHARACTER_REVERSE_BUTTON' => "\u{25C0}\u{FE0F}", 'CHARACTER_FAST_REVERSE_BUTTON' => "\u{23EA}", 'CHARACTER_LAST_TRACK_BUTTON' => "\u{23EE}\u{FE0F}", 'CHARACTER_UPWARDS_BUTTON' => "\u{1F53C}", 'CHARACTER_FAST_UP_BUTTON' => "\u{23EB}", 'CHARACTER_DOWNWARDS_BUTTON' => "\u{1F53D}", 'CHARACTER_FAST_DOWN_BUTTON' => "\u{23EC}", 'CHARACTER_PAUSE_BUTTON' => "\u{23F8}\u{FE0F}", 'CHARACTER_STOP_BUTTON' => "\u{23F9}\u{FE0F}", 'CHARACTER_RECORD_BUTTON' => "\u{23FA}\u{FE0F}", 'CHARACTER_EJECT_BUTTON' => "\u{23CF}\u{FE0F}", 'CHARACTER_CINEMA' => "\u{1F3A6}", 'CHARACTER_DIM_BUTTON' => "\u{1F505}", 'CHARACTER_BRIGHT_BUTTON' => "\u{1F506}", 'CHARACTER_ANTENNA_BARS' => "\u{1F4F6}", 'CHARACTER_VIBRATION_MODE' => "\u{1F4F3}", 'CHARACTER_MOBILE_PHONE_OFF' => "\u{1F4F4}", 'CHARACTER_FEMALE_SIGN' => "\u{2640}\u{FE0F}", 'CHARACTER_MALE_SIGN' => "\u{2642}\u{FE0F}", 'CHARACTER_MEDICAL_SYMBOL' => "\u{2695}\u{FE0F}", 'CHARACTER_INFINITY' => "\u{267E}\u{FE0F}", 'CHARACTER_RECYCLING_SYMBOL' => "\u{267B}\u{FE0F}", 'CHARACTER_FLEUR_DE_LIS' => "\u{269C}\u{FE0F}", 'CHARACTER_TRIDENT_EMBLEM' => "\u{1F531}", 'CHARACTER_NAME_BADGE' => "\u{1F4DB}", 'CHARACTER_JAPANESE_SYMBOL_FOR_BEGINNER' => "\u{1F530}", 'CHARACTER_HEAVY_LARGE_CIRCLE' => "\u{2B55}", 'CHARACTER_WHITE_HEAVY_CHECK_MARK' => "\u{2705}", 'CHARACTER_BALLOT_BOX_WITH_CHECK' => "\u{2611}\u{FE0F}", 'CHARACTER_HEAVY_CHECK_MARK' => "\u{2714}\u{FE0F}", 'CHARACTER_HEAVY_MULTIPLICATION_X' => "\u{2716}\u{FE0F}", 'CHARACTER_CROSS_MARK' => "\u{274C}", 'CHARACTER_CROSS_MARK_BUTTON' => "\u{274E}", 'CHARACTER_HEAVY_PLUS_SIGN' => "\u{2795}", 'CHARACTER_HEAVY_MINUS_SIGN' => "\u{2796}", 'CHARACTER_HEAVY_DIVISION_SIGN' => "\u{2797}", 'CHARACTER_CURLY_LOOP' => "\u{27B0}", 'CHARACTER_DOUBLE_CURLY_LOOP' => "\u{27BF}", 'CHARACTER_PART_ALTERNATION_MARK' => "\u{303D}\u{FE0F}", 'CHARACTER_EIGHT_SPOKED_ASTERISK' => "\u{2733}\u{FE0F}", 'CHARACTER_EIGHT_POINTED_STAR' => "\u{2734}\u{FE0F}", 'CHARACTER_SPARKLE' => "\u{2747}\u{FE0F}", 'CHARACTER_DOUBLE_EXCLAMATION_MARK' => "\u{203C}\u{FE0F}", 'CHARACTER_EXCLAMATION_QUESTION_MARK' => "\u{2049}\u{FE0F}", 'CHARACTER_QUESTION_MARK' => "\u{2753}", 'CHARACTER_WHITE_QUESTION_MARK' => "\u{2754}", 'CHARACTER_WHITE_EXCLAMATION_MARK' => "\u{2755}", 'CHARACTER_EXCLAMATION_MARK' => "\u{2757}", 'CHARACTER_WAVY_DASH' => "\u{3030}\u{FE0F}", 'CHARACTER_COPYRIGHT' => "\u{00A9}\u{FE0F}", 'CHARACTER_REGISTERED' => "\u{00AE}\u{FE0F}", 'CHARACTER_TRADE_MARK' => "\u{2122}\u{FE0F}", 'CHARACTER_KEYCAP_HASH' => "\u{0023}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_ASTERISK' => "\u{002A}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_0' => "\u{0030}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_1' => "\u{0031}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_2' => "\u{0032}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_3' => "\u{0033}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_4' => "\u{0034}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_5' => "\u{0035}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_6' => "\u{0036}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_7' => "\u{0037}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_8' => "\u{0038}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_9' => "\u{0039}\u{FE0F}\u{20E3}", 'CHARACTER_KEYCAP_10' => "\u{1F51F}", 'CHARACTER_HUNDRED_POINTS' => "\u{1F4AF}", 'CHARACTER_INPUT_LATIN_UPPERCASE' => "\u{1F520}", 'CHARACTER_INPUT_LATIN_LOWERCASE' => "\u{1F521}", 'CHARACTER_INPUT_NUMBERS' => "\u{1F522}", 'CHARACTER_INPUT_SYMBOLS' => "\u{1F523}", 'CHARACTER_INPUT_LATIN_LETTERS' => "\u{1F524}", 'CHARACTER_A_BUTTON_BLOOD_TYPE' => "\u{1F170}\u{FE0F}", 'CHARACTER_AB_BUTTON_BLOOD_TYPE' => "\u{1F18E}", 'CHARACTER_B_BUTTON_BLOOD_TYPE' => "\u{1F171}\u{FE0F}", 'CHARACTER_CL_BUTTON' => "\u{1F191}", 'CHARACTER_COOL_BUTTON' => "\u{1F192}", 'CHARACTER_FREE_BUTTON' => "\u{1F193}", 'CHARACTER_INFORMATION' => "\u{2139}\u{FE0F}", 'CHARACTER_ID_BUTTON' => "\u{1F194}", 'CHARACTER_CIRCLED_M' => "\u{24C2}\u{FE0F}", 'CHARACTER_NEW_BUTTON' => "\u{1F195}", 'CHARACTER_NG_BUTTON' => "\u{1F196}", 'CHARACTER_O_BUTTON_BLOOD_TYPE' => "\u{1F17E}\u{FE0F}", 'CHARACTER_OK_BUTTON' => "\u{1F197}", 'CHARACTER_P_BUTTON' => "\u{1F17F}\u{FE0F}", 'CHARACTER_SOS_BUTTON' => "\u{1F198}", 'CHARACTER_UP_BUTTON' => "\u{1F199}", 'CHARACTER_VS_BUTTON' => "\u{1F19A}", 'CHARACTER_JAPANESE_HERE_BUTTON' => "\u{1F201}", 'CHARACTER_JAPANESE_SERVICE_CHARGE_BUTTON' => "\u{1F202}\u{FE0F}", 'CHARACTER_JAPANESE_MONTHLY_AMOUNT_BUTTON' => "\u{1F237}\u{FE0F}", 'CHARACTER_JAPANESE_NOT_FREE_OF_CHARGE_BUTTON' => "\u{1F236}", 'CHARACTER_JAPANESE_RESERVED_BUTTON' => "\u{1F22F}", 'CHARACTER_JAPANESE_BARGAIN_BUTTON' => "\u{1F250}", 'CHARACTER_JAPANESE_DISCOUNT_BUTTON' => "\u{1F239}", 'CHARACTER_JAPANESE_FREE_OF_CHARGE_BUTTON' => "\u{1F21A}", 'CHARACTER_JAPANESE_PROHIBITED_BUTTON' => "\u{1F232}", 'CHARACTER_JAPANESE_ACCEPTABLE_BUTTON' => "\u{1F251}", 'CHARACTER_JAPANESE_APPLICATION_BUTTON' => "\u{1F238}", 'CHARACTER_JAPANESE_PASSING_GRADE_BUTTON' => "\u{1F234}", 'CHARACTER_JAPANESE_VACANCY_BUTTON' => "\u{1F233}", 'CHARACTER_JAPANESE_CONGRATULATIONS_BUTTON' => "\u{3297}\u{FE0F}", 'CHARACTER_JAPANESE_SECRET_BUTTON' => "\u{3299}\u{FE0F}", 'CHARACTER_JAPANESE_OPEN_FOR_BUSINESS_BUTTON' => "\u{1F23A}", 'CHARACTER_JAPANESE_NO_VACANCY_BUTTON' => "\u{1F235}", 'CHARACTER_BLACK_SMALL_SQUARE' => "\u{25AA}\u{FE0F}", 'CHARACTER_WHITE_SMALL_SQUARE' => "\u{25AB}\u{FE0F}", 'CHARACTER_WHITE_MEDIUM_SQUARE' => "\u{25FB}\u{FE0F}", 'CHARACTER_BLACK_MEDIUM_SQUARE' => "\u{25FC}\u{FE0F}", 'CHARACTER_WHITE_MEDIUM_SMALL_SQUARE' => "\u{25FD}", 'CHARACTER_BLACK_MEDIUM_SMALL_SQUARE' => "\u{25FE}", 'CHARACTER_BLACK_LARGE_SQUARE' => "\u{2B1B}", 'CHARACTER_WHITE_LARGE_SQUARE' => "\u{2B1C}", 'CHARACTER_LARGE_ORANGE_DIAMOND' => "\u{1F536}", 'CHARACTER_LARGE_BLUE_DIAMOND' => "\u{1F537}", 'CHARACTER_SMALL_ORANGE_DIAMOND' => "\u{1F538}", 'CHARACTER_SMALL_BLUE_DIAMOND' => "\u{1F539}", 'CHARACTER_RED_TRIANGLE_POINTED_UP' => "\u{1F53A}", 'CHARACTER_RED_TRIANGLE_POINTED_DOWN' => "\u{1F53B}", 'CHARACTER_DIAMOND_WITH_A_DOT' => "\u{1F4A0}", 'CHARACTER_RADIO_BUTTON' => "\u{1F518}", 'CHARACTER_BLACK_SQUARE_BUTTON' => "\u{1F532}", 'CHARACTER_WHITE_SQUARE_BUTTON' => "\u{1F533}", 'CHARACTER_WHITE_CIRCLE' => "\u{26AA}", 'CHARACTER_BLACK_CIRCLE' => "\u{26AB}", 'CHARACTER_RED_CIRCLE' => "\u{1F534}", 'CHARACTER_BLUE_CIRCLE' => "\u{1F535}", 'CHARACTER_CHEQUERED_FLAG' => "\u{1F3C1}", 'CHARACTER_TRIANGULAR_FLAG' => "\u{1F6A9}", 'CHARACTER_CROSSED_FLAGS' => "\u{1F38C}", 'CHARACTER_BLACK_FLAG' => "\u{1F3F4}", 'CHARACTER_WHITE_FLAG' => "\u{1F3F3}\u{FE0F}", 'CHARACTER_RAINBOW_FLAG' => "\u{1F3F3}\u{FE0F}\u{200D}\u{1F308}", 'CHARACTER_PIRATE_FLAG' => "\u{1F3F4}\u{200D}\u{2620}\u{FE0F}", 'CHARACTER_FLAGS_FOR_ASCENSION_ISLAND' => "\u{1F1E6}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_ANDORRA' => "\u{1F1E6}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_UNITED_ARAB_EMIRATES' => "\u{1F1E6}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_AFGHANISTAN' => "\u{1F1E6}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_ANTIGUA_AND_BARBUDA' => "\u{1F1E6}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_ANGUILLA' => "\u{1F1E6}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_ALBANIA' => "\u{1F1E6}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ARMENIA' => "\u{1F1E6}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ANGOLA' => "\u{1F1E6}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_ANTARCTICA' => "\u{1F1E6}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_ARGENTINA' => "\u{1F1E6}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_AMERICAN_SAMOA' => "\u{1F1E6}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_AUSTRIA' => "\u{1F1E6}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_AUSTRALIA' => "\u{1F1E6}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_ARUBA' => "\u{1F1E6}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_ALAND_ISLANDS' => "\u{1F1E6}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_AZERBAIJAN' => "\u{1F1E6}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_BOSNIA_AND_HERZEGOVINA' => "\u{1F1E7}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_BARBADOS' => "\u{1F1E7}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_BANGLADESH' => "\u{1F1E7}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_BELGIUM' => "\u{1F1E7}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_BURKINA_FASO' => "\u{1F1E7}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_BULGARIA' => "\u{1F1E7}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_BAHRAIN' => "\u{1F1E7}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_BURUNDI' => "\u{1F1E7}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_BENIN' => "\u{1F1E7}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_ST_BARTHELEMY' => "\u{1F1E7}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_BERMUDA' => "\u{1F1E7}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_BRUNEI' => "\u{1F1E7}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_BOLIVIA' => "\u{1F1E7}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_CARIBBEAN_NETHERLANDS' => "\u{1F1E7}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_BRAZIL' => "\u{1F1E7}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_BAHAMAS' => "\u{1F1E7}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_BHUTAN' => "\u{1F1E7}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_BOUVET_ISLAND' => "\u{1F1E7}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_BOTSWANA' => "\u{1F1E7}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_BELARUS' => "\u{1F1E7}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_BELIZE' => "\u{1F1E7}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_CANADA' => "\u{1F1E8}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_COCOS_KEELING_ISLANDS' => "\u{1F1E8}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_CONGO_KINSHASA' => "\u{1F1E8}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_CENTRAL_AFRICAN_REPUBLIC' => "\u{1F1E8}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_CONGO_BRAZZAVILLE' => "\u{1F1E8}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_SWITZERLAND' => "\u{1F1E8}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_COTE_D_IVOIRE' => "\u{1F1E8}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_COOK_ISLANDS' => "\u{1F1E8}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_CHILE' => "\u{1F1E8}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_CAMEROON' => "\u{1F1E8}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_CHINA' => "\u{1F1E8}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_COLOMBIA' => "\u{1F1E8}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_CLIPPERTON_ISLAND' => "\u{1F1E8}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_COSTA_RICA' => "\u{1F1E8}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_CUBA' => "\u{1F1E8}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_CAPE_VERDE' => "\u{1F1E8}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_CURACAO' => "\u{1F1E8}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_CHRISTMAS_ISLAND' => "\u{1F1E8}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_CYPRUS' => "\u{1F1E8}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_CZECHIA' => "\u{1F1E8}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_GERMANY' => "\u{1F1E9}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_DIEGO_GARCIA' => "\u{1F1E9}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_DJIBOUTI' => "\u{1F1E9}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_DENMARK' => "\u{1F1E9}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_DOMINICA' => "\u{1F1E9}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_DOMINICAN_REPUBLIC' => "\u{1F1E9}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_ALGERIA' => "\u{1F1E9}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_CEUTA_AND_MELILLA' => "\u{1F1EA}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ECUADOR' => "\u{1F1EA}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_ESTONIA' => "\u{1F1EA}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_EGYPT' => "\u{1F1EA}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_WESTERN_SAHARA' => "\u{1F1EA}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_ERITREA' => "\u{1F1EA}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SPAIN' => "\u{1F1EA}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_ETHIOPIA' => "\u{1F1EA}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_EUROPEAN_UNION' => "\u{1F1EA}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_FINLAND' => "\u{1F1EB}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_FIJI' => "\u{1F1EB}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_FALKLAND_ISLANDS' => "\u{1F1EB}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_MICRONESIA' => "\u{1F1EB}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_FAROE_ISLANDS' => "\u{1F1EB}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_FRANCE' => "\u{1F1EB}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_GABON' => "\u{1F1EC}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_UNITED_KINGDOM' => "\u{1F1EC}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_GRENADA' => "\u{1F1EC}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_GEORGIA' => "\u{1F1EC}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_FRENCH_GUIANA' => "\u{1F1EC}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_GUERNSEY' => "\u{1F1EC}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_GHANA' => "\u{1F1EC}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_GIBRALTAR' => "\u{1F1EC}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_GREENLAND' => "\u{1F1EC}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_GAMBIA' => "\u{1F1EC}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_GUINEA' => "\u{1F1EC}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_GUADELOUPE' => "\u{1F1EC}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_EQUATORIAL_GUINEA' => "\u{1F1EC}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_GREECE' => "\u{1F1EC}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SOUTH_GEORGIA_AND_SOUTH_SANDWICH_ISLANDS' => "\u{1F1EC}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_GUATEMALA' => "\u{1F1EC}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_GUAM' => "\u{1F1EC}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_GUINEA_BISSAU' => "\u{1F1EC}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_GUYANA' => "\u{1F1EC}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_HONG_KONG_SAR_CHINA' => "\u{1F1ED}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_HEARD_AND_MCDONALD_ISLANDS' => "\u{1F1ED}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_HONDURAS' => "\u{1F1ED}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_CROATIA' => "\u{1F1ED}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_HAITI' => "\u{1F1ED}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_HUNGARY' => "\u{1F1ED}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_CANARY_ISLANDS' => "\u{1F1EE}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_INDONESIA' => "\u{1F1EE}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_IRELAND' => "\u{1F1EE}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ISRAEL' => "\u{1F1EE}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ISLE_OF_MAN' => "\u{1F1EE}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_INDIA' => "\u{1F1EE}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_BRITISH_INDIAN_OCEAN_TERRITORY' => "\u{1F1EE}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_IRAQ' => "\u{1F1EE}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_IRAN' => "\u{1F1EE}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_ICELAND' => "\u{1F1EE}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_ITALY' => "\u{1F1EE}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_JERSEY' => "\u{1F1EF}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_JAMAICA' => "\u{1F1EF}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_JORDAN' => "\u{1F1EF}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_JAPAN' => "\u{1F1EF}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_KENYA' => "\u{1F1F0}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_KYRGYZSTAN' => "\u{1F1F0}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_CAMBODIA' => "\u{1F1F0}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_KIRIBATI' => "\u{1F1F0}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_COMOROS' => "\u{1F1F0}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ST_KITTS_AND_NEVIS' => "\u{1F1F0}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_NORTH_KOREA' => "\u{1F1F0}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_SOUTH_KOREA' => "\u{1F1F0}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_KUWAIT' => "\u{1F1F0}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_CAYMAN_ISLANDS' => "\u{1F1F0}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_KAZAKHSTAN' => "\u{1F1F0}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_LAOS' => "\u{1F1F1}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_LEBANON' => "\u{1F1F1}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_ST_LUCIA' => "\u{1F1F1}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_LIECHTENSTEIN' => "\u{1F1F1}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_SRI_LANKA' => "\u{1F1F1}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_LIBERIA' => "\u{1F1F1}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_LESOTHO' => "\u{1F1F1}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_LITHUANIA' => "\u{1F1F1}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_LUXEMBOURG' => "\u{1F1F1}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_LATVIA' => "\u{1F1F1}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_LIBYA' => "\u{1F1F1}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_MOROCCO' => "\u{1F1F2}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_MONACO' => "\u{1F1F2}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_MOLDOVA' => "\u{1F1F2}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_MONTENEGRO' => "\u{1F1F2}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ST_MARTIN' => "\u{1F1F2}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_MADAGASCAR' => "\u{1F1F2}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_MARSHALL_ISLANDS' => "\u{1F1F2}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_MACEDONIA' => "\u{1F1F2}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_MALI' => "\u{1F1F2}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_MYANMAR_BURMA' => "\u{1F1F2}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_MONGOLIA' => "\u{1F1F2}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_MACAU_SAR_CHINA' => "\u{1F1F2}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_NORTHERN_MARIANA_ISLANDS' => "\u{1F1F2}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_MARTINIQUE' => "\u{1F1F2}\u{1F1F6}", 'CHARACTER_FLAGS_FOR_MAURITANIA' => "\u{1F1F2}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_MONTSERRAT' => "\u{1F1F2}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_MALTA' => "\u{1F1F2}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_MAURITIUS' => "\u{1F1F2}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_MALDIVES' => "\u{1F1F2}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_MALAWI' => "\u{1F1F2}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_MEXICO' => "\u{1F1F2}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_MALAYSIA' => "\u{1F1F2}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_MOZAMBIQUE' => "\u{1F1F2}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_NAMIBIA' => "\u{1F1F3}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_NEW_CALEDONIA' => "\u{1F1F3}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_NIGER' => "\u{1F1F3}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_NORFOLK_ISLAND' => "\u{1F1F3}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_NIGERIA' => "\u{1F1F3}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_NICARAGUA' => "\u{1F1F3}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_NETHERLANDS' => "\u{1F1F3}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_NORWAY' => "\u{1F1F3}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_NEPAL' => "\u{1F1F3}\u{1F1F5}", 'CHARACTER_FLAGS_FOR_NAURU' => "\u{1F1F3}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_NIUE' => "\u{1F1F3}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_NEW_ZEALAND' => "\u{1F1F3}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_OMAN' => "\u{1F1F4}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_PANAMA' => "\u{1F1F5}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_PERU' => "\u{1F1F5}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_FRENCH_POLYNESIA' => "\u{1F1F5}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_PAPUA_NEW_GUINEA' => "\u{1F1F5}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_PHILIPPINES' => "\u{1F1F5}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_PAKISTAN' => "\u{1F1F5}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_POLAND' => "\u{1F1F5}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_ST_PIERRE_AND_MIQUELON' => "\u{1F1F5}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_PITCAIRN_ISLANDS' => "\u{1F1F5}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_PUERTO_RICO' => "\u{1F1F5}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_PALESTINIAN_TERRITORIES' => "\u{1F1F5}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_PORTUGAL' => "\u{1F1F5}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_PALAU' => "\u{1F1F5}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_PARAGUAY' => "\u{1F1F5}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_QATAR' => "\u{1F1F6}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_REUNION' => "\u{1F1F7}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_ROMANIA' => "\u{1F1F7}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_SERBIA' => "\u{1F1F7}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_RUSSIA' => "\u{1F1F7}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_RWANDA' => "\u{1F1F7}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_SAUDI_ARABIA' => "\u{1F1F8}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_SOLOMON_ISLANDS' => "\u{1F1F8}\u{1F1E7}", 'CHARACTER_FLAGS_FOR_SEYCHELLES' => "\u{1F1F8}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_SUDAN' => "\u{1F1F8}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_SWEDEN' => "\u{1F1F8}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_SINGAPORE' => "\u{1F1F8}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_ST_HELENA' => "\u{1F1F8}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_SLOVENIA' => "\u{1F1F8}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_SVALBARD_AND_JAN_MAYEN' => "\u{1F1F8}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_SLOVAKIA' => "\u{1F1F8}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_SIERRA_LEONE' => "\u{1F1F8}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_SAN_MARINO' => "\u{1F1F8}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_SENEGAL' => "\u{1F1F8}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_SOMALIA' => "\u{1F1F8}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_SURINAME' => "\u{1F1F8}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_SOUTH_SUDAN' => "\u{1F1F8}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_SAO_TOME_AND_PRINCIPE' => "\u{1F1F8}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_EL_SALVADOR' => "\u{1F1F8}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_SINT_MAARTEN' => "\u{1F1F8}\u{1F1FD}", 'CHARACTER_FLAGS_FOR_SYRIA' => "\u{1F1F8}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_SWAZILAND' => "\u{1F1F8}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_TRISTAN_DA_CUNHA' => "\u{1F1F9}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_TURKS_AND_CAICOS_ISLANDS' => "\u{1F1F9}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_CHAD' => "\u{1F1F9}\u{1F1E9}", 'CHARACTER_FLAGS_FOR_FRENCH_SOUTHERN_TERRITORIES' => "\u{1F1F9}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_TOGO' => "\u{1F1F9}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_THAILAND' => "\u{1F1F9}\u{1F1ED}", 'CHARACTER_FLAGS_FOR_TAJIKISTAN' => "\u{1F1F9}\u{1F1EF}", 'CHARACTER_FLAGS_FOR_TOKELAU' => "\u{1F1F9}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_TIMOR_LESTE' => "\u{1F1F9}\u{1F1F1}", 'CHARACTER_FLAGS_FOR_TURKMENISTAN' => "\u{1F1F9}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_TUNISIA' => "\u{1F1F9}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_TONGA' => "\u{1F1F9}\u{1F1F4}", 'CHARACTER_FLAGS_FOR_TURKEY' => "\u{1F1F9}\u{1F1F7}", 'CHARACTER_FLAGS_FOR_TRINIDAD_AND_TOBAGO' => "\u{1F1F9}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_TUVALU' => "\u{1F1F9}\u{1F1FB}", 'CHARACTER_FLAGS_FOR_TAIWAN' => "\u{1F1F9}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_TANZANIA' => "\u{1F1F9}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_UKRAINE' => "\u{1F1FA}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_UGANDA' => "\u{1F1FA}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_US_OUTLYING_ISLANDS' => "\u{1F1FA}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_UNITED_NATIONS' => "\u{1F1FA}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_UNITED_STATES' => "\u{1F1FA}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_URUGUAY' => "\u{1F1FA}\u{1F1FE}", 'CHARACTER_FLAGS_FOR_UZBEKISTAN' => "\u{1F1FA}\u{1F1FF}", 'CHARACTER_FLAGS_FOR_VATICAN_CITY' => "\u{1F1FB}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ST_VINCENT_AND_GRENADINES' => "\u{1F1FB}\u{1F1E8}", 'CHARACTER_FLAGS_FOR_VENEZUELA' => "\u{1F1FB}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_BRITISH_VIRGIN_ISLANDS' => "\u{1F1FB}\u{1F1EC}", 'CHARACTER_FLAGS_FOR_US_VIRGIN_ISLANDS' => "\u{1F1FB}\u{1F1EE}", 'CHARACTER_FLAGS_FOR_VIETNAM' => "\u{1F1FB}\u{1F1F3}", 'CHARACTER_FLAGS_FOR_VANUATU' => "\u{1F1FB}\u{1F1FA}", 'CHARACTER_FLAGS_FOR_WALLIS_AND_FUTUNA' => "\u{1F1FC}\u{1F1EB}", 'CHARACTER_FLAGS_FOR_SAMOA' => "\u{1F1FC}\u{1F1F8}", 'CHARACTER_FLAGS_FOR_KOSOVO' => "\u{1F1FD}\u{1F1F0}", 'CHARACTER_FLAGS_FOR_YEMEN' => "\u{1F1FE}\u{1F1EA}", 'CHARACTER_FLAGS_FOR_MAYOTTE' => "\u{1F1FE}\u{1F1F9}", 'CHARACTER_FLAGS_FOR_SOUTH_AFRICA' => "\u{1F1FF}\u{1F1E6}", 'CHARACTER_FLAGS_FOR_ZAMBIA' => "\u{1F1FF}\u{1F1F2}", 'CHARACTER_FLAGS_FOR_ZIMBABWE' => "\u{1F1FF}\u{1F1FC}", 'CHARACTER_FLAGS_FOR_ENGLAND' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}", 'CHARACTER_FLAGS_FOR_SCOTLAND' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}", 'CHARACTER_FLAGS_FOR_WALES' => "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"];
<?php return ['ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16', 'WINDOWS-1251', 'WINDOWS-1252', 'WINDOWS-1254', 'CP932', 'CP936', 'CP950', 'CP866', 'CP850', 'CP51932', 'CP50220', 'CP50221', 'CP50222', 'ISO-2022-JP', 'ISO-2022-KR', 'JIS', 'JIS-ms', 'EUC-CN', 'EUC-JP', 'ANSI_X3.4-1968', 'ANSI_X3.4-1986', 'ASCII', 'CP367', 'IBM367', 'ISO-IR-6', 'ISO646-US', 'ISO_646.IRV:1991', 'US', 'US-ASCII', 'CSASCII', 'UTF-8', 'ISO-10646-UCS-2', 'UCS-2', 'CSUNICODE', 'UCS-2BE', 'UNICODE-1-1', 'UNICODEBIG', 'CSUNICODE11', 'UCS-2LE', 'UNICODELITTLE', 'ISO-10646-UCS-4', 'UCS-4', 'CSUCS4', 'UCS-4BE', 'UCS-4LE', 'UTF-16', 'UTF-16BE', 'UTF-16LE', 'UTF-32', 'UTF-32BE', 'UTF-32LE', 'UNICODE-1-1-UTF-7', 'UTF-7', 'CSUNICODE11UTF7', 'UCS-2-INTERNAL', 'UCS-2-SWAPPED', 'UCS-4-INTERNAL', 'UCS-4-SWAPPED', 'C99', 'JAVA', 'CP819', 'IBM819', 'ISO-IR-100', 'ISO8859-1', 'ISO_8859-1', 'ISO_8859-1:1987', 'L1', 'LATIN1', 'CSISOLATIN1', 'ISO-IR-101', 'ISO8859-2', 'ISO_8859-2', 'ISO_8859-2:1987', 'L2', 'LATIN2', 'CSISOLATIN2', 'ISO-IR-109', 'ISO8859-3', 'ISO_8859-3', 'ISO_8859-3:1988', 'L3', 'LATIN3', 'CSISOLATIN3', 'ISO-IR-110', 'ISO8859-4', 'ISO_8859-4', 'ISO_8859-4:1988', 'L4', 'LATIN4', 'CSISOLATIN4', 'CYRILLIC', 'ISO-IR-144', 'ISO8859-5', 'ISO_8859-5', 'ISO_8859-5:1988', 'CSISOLATINCYRILLIC', 'ARABIC', 'ASMO-708', 'ECMA-114', 'ISO-IR-127', 'ISO8859-6', 'ISO_8859-6', 'ISO_8859-6:1987', 'CSISOLATINARABIC', 'ECMA-118', 'ELOT_928', 'GREEK', 'GREEK8', 'ISO-IR-126', 'ISO8859-7', 'ISO_8859-7', 'ISO_8859-7:1987', 'ISO_8859-7:2003', 'CSISOLATINGREEK', 'HEBREW', 'ISO-IR-138', 'ISO8859-8', 'ISO_8859-8', 'ISO_8859-8:1988', 'CSISOLATINHEBREW', 'ISO-IR-148', 'ISO8859-9', 'ISO_8859-9', 'ISO_8859-9:1989', 'L5', 'LATIN5', 'CSISOLATIN5', 'ISO-IR-157', 'ISO8859-10', 'ISO_8859-10', 'ISO_8859-10:1992', 'L6', 'LATIN6', 'CSISOLATIN6', 'ISO-8859-11', 'ISO8859-11', 'ISO_8859-11', 'ISO-IR-179', 'ISO8859-13', 'ISO_8859-13', 'L7', 'LATIN7', 'ISO-CELTIC', 'ISO-IR-199', 'ISO8859-14', 'ISO_8859-14', 'ISO_8859-14:1998', 'L8', 'LATIN8', 'ISO-IR-203', 'ISO8859-15', 'ISO_8859-15', 'ISO_8859-15:1998', 'LATIN-9', 'ISO-IR-226', 'ISO8859-16', 'ISO_8859-16', 'ISO_8859-16:2001', 'L10', 'LATIN10', 'KOI8-R', 'CSKOI8R', 'KOI8-U', 'KOI8-RU', 'CP1250', 'MS-EE', 'WINDOWS-1250', 'CP1251', 'MS-CYRL', 'CP1252', 'MS-ANSI', 'CP1253', 'MS-GREEK', 'WINDOWS-1253', 'CP1254', 'MS-TURK', 'CP1255', 'MS-HEBR', 'WINDOWS-1255', 'CP1256', 'MS-ARAB', 'WINDOWS-1256', 'CP1257', 'WINBALTRIM', 'WINDOWS-1257', 'CP1258', 'WINDOWS-1258', '850', 'IBM850', 'CSPC850MULTILINGUAL', '862', 'CP862', 'IBM862', 'CSPC862LATINHEBREW', '866', 'IBM866', 'CSIBM866', 'MAC', 'MACINTOSH', 'MACROMAN', 'CSMACINTOSH', 'MACCENTRALEUROPE', 'MACICELAND', 'MACCROATIAN', 'MACROMANIA', 'MACCYRILLIC', 'MACUKRAINE', 'MACGREEK', 'MACTURKISH', 'MACHEBREW', 'MACARABIC', 'MACTHAI', 'HP-ROMAN8', 'R8', 'ROMAN8', 'CSHPROMAN8', 'NEXTSTEP', 'ARMSCII-8', 'GEORGIAN-ACADEMY', 'GEORGIAN-PS', 'KOI8-T', 'CP154', 'CYRILLIC-ASIAN', 'PT154', 'PTCP154', 'CSPTCP154', 'KZ-1048', 'RK1048', 'STRK1048-2002', 'CSKZ1048', 'MULELAO-1', 'CP1133', 'IBM-CP1133', 'ISO-IR-166', 'TIS-620', 'TIS620', 'TIS620-0', 'TIS620.2529-1', 'TIS620.2533-0', 'TIS620.2533-1', 'CP874', 'WINDOWS-874', 'VISCII', 'VISCII1.1-1', 'CSVISCII', 'TCVN', 'TCVN-5712', 'TCVN5712-1', 'TCVN5712-1:1993', 'ISO-IR-14', 'ISO646-JP', 'JIS_C6220-1969-RO', 'JP', 'CSISO14JISC6220RO', 'JISX0201-1976', 'JIS_X0201', 'X0201', 'CSHALFWIDTHKATAKANA', 'ISO-IR-87', 'JIS0208', 'JIS_C6226-1983', 'JIS_X0208', 'JIS_X0208-1983', 'JIS_X0208-1990', 'X0208', 'CSISO87JISX0208', 'ISO-IR-159', 'JIS_X0212', 'JIS_X0212-1990', 'JIS_X0212.1990-0', 'X0212', 'CSISO159JISX02121990', 'CN', 'GB_1988-80', 'ISO-IR-57', 'ISO646-CN', 'CSISO57GB1988', 'CHINESE', 'GB_2312-80', 'ISO-IR-58', 'CSISO58GB231280', 'CN-GB-ISOIR165', 'ISO-IR-165', 'ISO-IR-149', 'KOREAN', 'KSC_5601', 'KS_C_5601-1987', 'KS_C_5601-1989', 'CSKSC56011987', 'EUCJP', 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE', 'CSEUCPKDFMTJAPANESE', 'MS_KANJI', 'SHIFT-JIS', 'SHIFT_JIS', 'SJIS', 'CSSHIFTJIS', 'CSISO2022JP', 'ISO-2022-JP-1', 'ISO-2022-JP-2', 'CSISO2022JP2', 'CN-GB', 'EUCCN', 'GB2312', 'CSGB2312', 'GBK', 'MS936', 'WINDOWS-936', 'GB18030', 'ISO-2022-CN', 'CSISO2022CN', 'ISO-2022-CN-EXT', 'HZ', 'HZ-GB-2312', 'EUC-TW', 'EUCTW', 'CSEUCTW', 'BIG-5', 'BIG-FIVE', 'BIG5', 'BIGFIVE', 'CN-BIG5', 'CSBIG5', 'BIG5-HKSCS:1999', 'BIG5-HKSCS:2001', 'BIG5-HKSCS', 'BIG5-HKSCS:2004', 'BIG5HKSCS', 'EUC-KR', 'EUCKR', 'CSEUCKR', 'CP949', 'UHC', 'CP1361', 'JOHAB', 'CSISO2022KR', 'CP856', 'CP922', 'CP943', 'CP1046', 'CP1124', 'CP1129', 'CP1161', 'IBM-1161', 'IBM1161', 'CSIBM1161', 'CP1162', 'IBM-1162', 'IBM1162', 'CSIBM1162', 'CP1163', 'IBM-1163', 'IBM1163', 'CSIBM1163', 'DEC-KANJI', 'DEC-HANYU', '437', 'CP437', 'IBM437', 'CSPC8CODEPAGE437', 'CP737', 'CP775', 'IBM775', 'CSPC775BALTIC', '852', 'CP852', 'IBM852', 'CSPCP852', 'CP853', '855', 'CP855', 'IBM855', 'CSIBM855', '857', 'CP857', 'IBM857', 'CSIBM857', 'CP858', '860', 'CP860', 'IBM860', 'CSIBM860', '861', 'CP-IS', 'CP861', 'IBM861', 'CSIBM861', '863', 'CP863', 'IBM863', 'CSIBM863', 'CP864', 'IBM864', 'CSIBM864', '865', 'CP865', 'IBM865', 'CSIBM865', '869', 'CP-GR', 'CP869', 'IBM869', 'CSIBM869', 'CP1125', 'EUC-JISX0213', 'SHIFT_JISX0213', 'ISO-2022-JP-3', 'BIG5-2003', 'ISO-IR-230', 'TDS565', 'ATARI', 'ATARIST', 'RISCOS-LATIN1'];
<?php return ['' => 0, "\x00" => 0, "\x01" => 1, "\x02" => 2, "\x03" => 3, "\x04" => 4, "\x05" => 5, "\x06" => 6, "\x07" => 7, "\x08" => 8, "\x09" => 9, "\x0A" => 10, "\x0B" => 11, "\x0C" => 12, "\x0D" => 13, "\x0E" => 14, "\x0F" => 15, "\x10" => 16, "\x11" => 17, "\x12" => 18, "\x13" => 19, "\x14" => 20, "\x15" => 21, "\x16" => 22, "\x17" => 23, "\x18" => 24, "\x19" => 25, "\x1A" => 26, "\x1B" => 27, "\x1C" => 28, "\x1D" => 29, "\x1E" => 30, "\x1F" => 31, "\x20" => 32, "\x21" => 33, "\x22" => 34, "\x23" => 35, "\x24" => 36, "\x25" => 37, "\x26" => 38, "\x27" => 39, "\x28" => 40, "\x29" => 41, "\x2A" => 42, "\x2B" => 43, "\x2C" => 44, "\x2D" => 45, "\x2E" => 46, "\x2F" => 47, "\x30" => 48, "\x31" => 49, "\x32" => 50, "\x33" => 51, "\x34" => 52, "\x35" => 53, "\x36" => 54, "\x37" => 55, "\x38" => 56, "\x39" => 57, "\x3A" => 58, "\x3B" => 59, "\x3C" => 60, "\x3D" => 61, "\x3E" => 62, "\x3F" => 63, "\x40" => 64, "\x41" => 65, "\x42" => 66,  "\x43" => 67,  "\x44" => 68,  "\x45" => 69,  "\x46" => 70,  "\x47" => 71,  "\x48" => 72,  "\x49" => 73,  "\x4A" => 74,  "\x4B" => 75,  "\x4C" => 76,  "\x4D" => 77,  "\x4E" => 78,  "\x4F" => 79,  "\x50" => 80,  "\x51" => 81,  "\x52" => 82,  "\x53" => 83,  "\x54" => 84,  "\x55" => 85,  "\x56" => 86,  "\x57" => 87,  "\x58" => 88,  "\x59" => 89,  "\x5A" => 90,  "\x5B" => 91,  "\x5C" => 92,  "\x5D" => 93,  "\x5E" => 94,  "\x5F" => 95,  "\x60" => 96,  "\x61" => 97,  "\x62" => 98,  "\x63" => 99,  "\x64" => 100,  "\x65" => 101,  "\x66" => 102,  "\x67" => 103,  "\x68" => 104,  "\x69" => 105,  "\x6A" => 106,  "\x6B" => 107,  "\x6C" => 108,  "\x6D" => 109,  "\x6E" => 110,  "\x6F" => 111,  "\x70" => 112,  "\x71" => 113,  "\x72" => 114,  "\x73" => 115,  "\x74" => 116,  "\x75" => 117,  "\x76" => 118,  "\x77" => 119,  "\x78" => 120,  "\x79" => 121,  "\x7A" => 122,  "\x7B" => 123,  "\x7C" => 124,  "\x7D" => 125,  "\x7E" => 126,  "\x7F" => 127,  "\x80" => 128,  "\x81" => 129,  "\x82" => 130,  "\x83" => 131,  "\x84" => 132,  "\x85" => 133,  "\x86" => 134,  "\x87" => 135,  "\x88" => 136,  "\x89" => 137,  "\x8A" => 138,  "\x8B" => 139,  "\x8C" => 140,  "\x8D" => 141,  "\x8E" => 142,  "\x8F" => 143,  "\x90" => 144,  "\x91" => 145,  "\x92" => 146,  "\x93" => 147,  "\x94" => 148,  "\x95" => 149,  "\x96" => 150,  "\x97" => 151,  "\x98" => 152,  "\x99" => 153,  "\x9A" => 154,  "\x9B" => 155,  "\x9C" => 156,  "\x9D" => 157,  "\x9E" => 158,  "\x9F" => 159,  "\xA0" => 160,  "\xA1" => 161,  "\xA2" => 162,  "\xA3" => 163,  "\xA4" => 164,  "\xA5" => 165,  "\xA6" => 166,  "\xA7" => 167,  "\xA8" => 168,  "\xA9" => 169,  "\xAA" => 170,  "\xAB" => 171,  "\xAC" => 172,  "\xAD" => 173,  "\xAE" => 174,  "\xAF" => 175,  "\xB0" => 176,  "\xB1" => 177,  "\xB2" => 178,  "\xB3" => 179,  "\xB4" => 180,  "\xB5" => 181,  "\xB6" => 182,  "\xB7" => 183,  "\xB8" => 184,  "\xB9" => 185,  "\xBA" => 186,  "\xBB" => 187,  "\xBC" => 188,  "\xBD" => 189,  "\xBE" => 190,  "\xBF" => 191,  "\xC0" => 192,  "\xC1" => 193,  "\xC2" => 194,  "\xC3" => 195,  "\xC4" => 196,  "\xC5" => 197,  "\xC6" => 198,  "\xC7" => 199,  "\xC8" => 200,  "\xC9" => 201,  "\xCA" => 202,  "\xCB" => 203,  "\xCC" => 204,  "\xCD" => 205,  "\xCE" => 206,  "\xCF" => 207,  "\xD0" => 208,  "\xD1" => 209,  "\xD2" => 210,  "\xD3" => 211,  "\xD4" => 212,  "\xD5" => 213,  "\xD6" => 214,  "\xD7" => 215,  "\xD8" => 216,  "\xD9" => 217,  "\xDA" => 218,  "\xDB" => 219,  "\xDC" => 220,  "\xDD" => 221,  "\xDE" => 222,  "\xDF" => 223,  "\xE0" => 224,  "\xE1" => 225,  "\xE2" => 226,  "\xE3" => 227,  "\xE4" => 228,  "\xE5" => 229,  "\xE6" => 230,  "\xE7" => 231,  "\xE8" => 232,  "\xE9" => 233,  "\xEA" => 234,  "\xEB" => 235,  "\xEC" => 236,  "\xED" => 237,  "\xEE" => 238,  "\xEF" => 239,  "\xF0" => 240,  "\xF1" => 241,  "\xF2" => 242,  "\xF3" => 243,  "\xF4" => 244,  "\xF5" => 245,  "\xF6" => 246,  "\xF7" => 247,  "\xF8" => 248,  "\xF9" => 249,  "\xFA" => 250,  "\xFB" => 251,  "\xFC" => 252,  "\xFD" => 253,  "\xFE" => 254,  "\xFF" => 255];
<?php return [0 => 'ASCII-Latin', 1 => 'Accents-Any', 2 => 'Amharic-Latin/BGN', 3 => 'Any-Accents', 4 => 'Any-Publishing', 5 => 'Arab-Latn', 6 => 'Arabic-Latin', 7 => 'Arabic-Latin/BGN', 8 => 'Armenian-Latin', 9 => 'Armenian-Latin/BGN', 10 => 'Armn-Latn', 11 => 'Azerbaijani-Latin/BGN', 12 => 'Belarusian-Latin/BGN', 13 => 'Beng-Arab', 14 => 'Beng-Deva', 15 => 'Beng-Gujr', 16 => 'Beng-Guru', 17 => 'Beng-Knda', 18 => 'Beng-Latn', 19 => 'Beng-Mlym', 20 => 'Beng-Orya', 21 => 'Beng-Taml', 22 => 'Beng-Telu', 23 => 'Beng-ur', 24 => 'Bengali-Arabic', 25 => 'Bengali-Devanagari', 26 => 'Bengali-Gujarati', 27 => 'Bengali-Gurmukhi', 28 => 'Bengali-Kannada', 29 => 'Bengali-Latin', 30 => 'Bengali-Malayalam', 31 => 'Bengali-Oriya', 32 => 'Bengali-Tamil', 33 => 'Bengali-Telugu', 34 => 'Bopo-Latn', 35 => 'Bopomofo-Latin', 36 => 'Bulgarian-Latin/BGN', 37 => 'Cyrillic-Latin', 38 => 'Cyrl-Latn', 39 => 'Deva-Arab', 40 => 'Deva-Beng', 41 => 'Deva-Gujr', 42 => 'Deva-Guru', 43 => 'Deva-Knda', 44 => 'Deva-Latn', 45 => 'Deva-Mlym', 46 => 'Deva-Orya', 47 => 'Deva-Taml', 48 => 'Deva-Telu', 49 => 'Deva-ur', 50 => 'Devanagari-Arabic', 51 => 'Devanagari-Bengali', 52 => 'Devanagari-Gujarati', 53 => 'Devanagari-Gurmukhi', 54 => 'Devanagari-Kannada', 55 => 'Devanagari-Latin', 56 => 'Devanagari-Malayalam', 57 => 'Devanagari-Oriya', 58 => 'Devanagari-Tamil', 59 => 'Devanagari-Telugu', 60 => 'Digit-Tone', 61 => 'Fullwidth-Halfwidth', 62 => 'Geor-Latn', 63 => 'Georgian-Latin', 64 => 'Georgian-Latin/BGN', 65 => 'Greek-Latin', 66 => 'Greek-Latin/BGN', 67 => 'Greek-Latin/UNGEGN', 68 => 'Grek-Latn', 69 => 'Grek-Latn/UNGEGN', 70 => 'Gujarati-Arabic', 71 => 'Gujarati-Bengali', 72 => 'Gujarati-Devanagari', 73 => 'Gujarati-Gurmukhi', 74 => 'Gujarati-Kannada', 75 => 'Gujarati-Latin', 76 => 'Gujarati-Malayalam', 77 => 'Gujarati-Oriya', 78 => 'Gujarati-Tamil', 79 => 'Gujarati-Telugu', 80 => 'Gujr-Arab', 81 => 'Gujr-Beng', 82 => 'Gujr-Deva', 83 => 'Gujr-Guru', 84 => 'Gujr-Knda', 85 => 'Gujr-Latn', 86 => 'Gujr-Mlym', 87 => 'Gujr-Orya', 88 => 'Gujr-Taml', 89 => 'Gujr-Telu', 90 => 'Gujr-ur', 91 => 'Gurmukhi-Arabic', 92 => 'Gurmukhi-Bengali', 93 => 'Gurmukhi-Devanagari', 94 => 'Gurmukhi-Gujarati', 95 => 'Gurmukhi-Kannada', 96 => 'Gurmukhi-Latin', 97 => 'Gurmukhi-Malayalam', 98 => 'Gurmukhi-Oriya', 99 => 'Gurmukhi-Tamil', 100 => 'Gurmukhi-Telugu', 101 => 'Guru-Arab', 102 => 'Guru-Beng', 103 => 'Guru-Deva', 104 => 'Guru-Gujr', 105 => 'Guru-Knda', 106 => 'Guru-Latn', 107 => 'Guru-Mlym', 108 => 'Guru-Orya', 109 => 'Guru-Taml', 110 => 'Guru-Telu', 111 => 'Guru-ur', 112 => 'Halfwidth-Fullwidth', 113 => 'Han-Latin', 114 => 'Han-Latin/Names', 115 => 'Hang-Latn', 116 => 'Hangul-Latin', 117 => 'Hani-Latn', 118 => 'Hans-Hant', 119 => 'Hant-Hans', 120 => 'Hebr-Latn', 121 => 'Hebrew-Latin', 122 => 'Hebrew-Latin/BGN', 123 => 'Hira-Kana', 124 => 'Hira-Latn', 125 => 'Hiragana-Katakana', 126 => 'Hiragana-Latin', 127 => 'IPA-XSampa', 128 => 'Jamo-Latin', 129 => 'Jamo-Latn', 130 => 'Kana-Hira', 131 => 'Kana-Latn', 132 => 'Kannada-Arabic', 133 => 'Kannada-Bengali', 134 => 'Kannada-Devanagari', 135 => 'Kannada-Gujarati', 136 => 'Kannada-Gurmukhi', 137 => 'Kannada-Latin', 138 => 'Kannada-Malayalam', 139 => 'Kannada-Oriya', 140 => 'Kannada-Tamil', 141 => 'Kannada-Telugu', 142 => 'Katakana-Hiragana', 143 => 'Katakana-Latin', 144 => 'Katakana-Latin/BGN', 145 => 'Kazakh-Latin/BGN', 146 => 'Kirghiz-Latin/BGN', 147 => 'Knda-Arab', 148 => 'Knda-Beng', 149 => 'Knda-Deva', 150 => 'Knda-Gujr', 151 => 'Knda-Guru', 152 => 'Knda-Latn', 153 => 'Knda-Mlym', 154 => 'Knda-Orya', 155 => 'Knda-Taml', 156 => 'Knda-Telu', 157 => 'Knda-ur', 158 => 'Korean-Latin/BGN', 159 => 'Latin-ASCII', 160 => 'Latin-Arabic', 161 => 'Latin-Armenian', 162 => 'Latin-Bengali', 163 => 'Latin-Bopomofo', 164 => 'Latin-Cyrillic', 165 => 'Latin-Devanagari', 166 => 'Latin-Georgian', 167 => 'Latin-Greek', 168 => 'Latin-Greek/UNGEGN', 169 => 'Latin-Gujarati', 170 => 'Latin-Gurmukhi', 171 => 'Latin-Hangul', 172 => 'Latin-Hebrew', 173 => 'Latin-Hiragana', 174 => 'Latin-Jamo', 175 => 'Latin-Kannada', 176 => 'Latin-Katakana', 177 => 'Latin-Malayalam', 178 => 'Latin-NumericPinyin', 179 => 'Latin-Oriya', 180 => 'Latin-Russian/BGN', 181 => 'Latin-Syriac', 182 => 'Latin-Tamil', 183 => 'Latin-Telugu', 184 => 'Latin-Thaana', 185 => 'Latin-Thai', 186 => 'Latn-Arab', 187 => 'Latn-Armn', 188 => 'Latn-Beng', 189 => 'Latn-Bopo', 190 => 'Latn-Cyrl', 191 => 'Latn-Deva', 192 => 'Latn-Geor', 193 => 'Latn-Grek', 194 => 'Latn-Grek/UNGEGN', 195 => 'Latn-Gujr', 196 => 'Latn-Guru', 197 => 'Latn-Hang', 198 => 'Latn-Hebr', 199 => 'Latn-Hira', 200 => 'Latn-Jamo', 201 => 'Latn-Kana', 202 => 'Latn-Knda', 203 => 'Latn-Mlym', 204 => 'Latn-Orya', 205 => 'Latn-Syrc', 206 => 'Latn-Taml', 207 => 'Latn-Telu', 208 => 'Latn-Thaa', 209 => 'Latn-Thai', 210 => 'Macedonian-Latin/BGN', 211 => 'Malayalam-Arabic', 212 => 'Malayalam-Bengali', 213 => 'Malayalam-Devanagari', 214 => 'Malayalam-Gujarati', 215 => 'Malayalam-Gurmukhi', 216 => 'Malayalam-Kannada', 217 => 'Malayalam-Latin', 218 => 'Malayalam-Oriya', 219 => 'Malayalam-Tamil', 220 => 'Malayalam-Telugu', 221 => 'Maldivian-Latin/BGN', 222 => 'Mlym-Arab', 223 => 'Mlym-Beng', 224 => 'Mlym-Deva', 225 => 'Mlym-Gujr', 226 => 'Mlym-Guru', 227 => 'Mlym-Knda', 228 => 'Mlym-Latn', 229 => 'Mlym-Orya', 230 => 'Mlym-Taml', 231 => 'Mlym-Telu', 232 => 'Mlym-ur', 233 => 'Mongolian-Latin/BGN', 234 => 'NumericPinyin-Latin', 235 => 'NumericPinyin-Pinyin', 236 => 'Oriya-Arabic', 237 => 'Oriya-Bengali', 238 => 'Oriya-Devanagari', 239 => 'Oriya-Gujarati', 240 => 'Oriya-Gurmukhi', 241 => 'Oriya-Kannada', 242 => 'Oriya-Latin', 243 => 'Oriya-Malayalam', 244 => 'Oriya-Tamil', 245 => 'Oriya-Telugu', 246 => 'Orya-Arab', 247 => 'Orya-Beng', 248 => 'Orya-Deva', 249 => 'Orya-Gujr', 250 => 'Orya-Guru', 251 => 'Orya-Knda', 252 => 'Orya-Latn', 253 => 'Orya-Mlym', 254 => 'Orya-Taml', 255 => 'Orya-Telu', 256 => 'Orya-ur', 257 => 'Pashto-Latin/BGN', 258 => 'Persian-Latin/BGN', 259 => 'Pinyin-NumericPinyin', 260 => 'Publishing-Any', 261 => 'Russian-Latin/BGN', 262 => 'Serbian-Latin/BGN', 263 => 'Simplified-Traditional', 264 => 'Syrc-Latn', 265 => 'Syriac-Latin', 266 => 'Tamil-Arabic', 267 => 'Tamil-Bengali', 268 => 'Tamil-Devanagari', 269 => 'Tamil-Gujarati', 270 => 'Tamil-Gurmukhi', 271 => 'Tamil-Kannada', 272 => 'Tamil-Latin', 273 => 'Tamil-Malayalam', 274 => 'Tamil-Oriya', 275 => 'Tamil-Telugu', 276 => 'Taml-Arab', 277 => 'Taml-Beng', 278 => 'Taml-Deva', 279 => 'Taml-Gujr', 280 => 'Taml-Guru', 281 => 'Taml-Knda', 282 => 'Taml-Latn', 283 => 'Taml-Mlym', 284 => 'Taml-Orya', 285 => 'Taml-Telu', 286 => 'Taml-ur', 287 => 'Telu-Arab', 288 => 'Telu-Beng', 289 => 'Telu-Deva', 290 => 'Telu-Gujr', 291 => 'Telu-Guru', 292 => 'Telu-Knda', 293 => 'Telu-Latn', 294 => 'Telu-Mlym', 295 => 'Telu-Orya', 296 => 'Telu-Taml', 297 => 'Telu-ur', 298 => 'Telugu-Arabic', 299 => 'Telugu-Bengali', 300 => 'Telugu-Devanagari', 301 => 'Telugu-Gujarati', 302 => 'Telugu-Gurmukhi', 303 => 'Telugu-Kannada', 304 => 'Telugu-Latin', 305 => 'Telugu-Malayalam', 306 => 'Telugu-Oriya', 307 => 'Telugu-Tamil', 308 => 'Thaa-Latn', 309 => 'Thaana-Latin', 310 => 'Thai-Latin', 311 => 'Thai-Latn', 312 => 'Tone-Digit', 313 => 'Traditional-Simplified', 314 => 'Turkmen-Latin/BGN', 315 => 'Ukrainian-Latin/BGN', 316 => 'Uzbek-Latin/BGN', 317 => 'XSampa-IPA', 318 => 'Zawgyi-my', 319 => 'am-am_FONIPA', 320 => 'am-am_Latn/BGN', 321 => 'am-ar', 322 => 'am-chr', 323 => 'am-fa', 324 => 'am_FONIPA-am', 325 => 'ar-ar_Latn/BGN', 326 => 'az-Lower', 327 => 'az-Title', 328 => 'az-Upper', 329 => 'az_Cyrl-az/BGN', 330 => 'be-be_Latn/BGN', 331 => 'bg-bg_Latn/BGN', 332 => 'blt-blt_FONIPA', 333 => 'ch-am', 334 => 'ch-ar', 335 => 'ch-ch_FONIPA', 336 => 'ch-chr', 337 => 'ch-fa', 338 => 'chr-chr_FONIPA', 339 => 'cs-am', 340 => 'cs-ar', 341 => 'cs-chr', 342 => 'cs-cs_FONIPA', 343 => 'cs-fa', 344 => 'cs-ja', 345 => 'cs-ko', 346 => 'cs_FONIPA-ja', 347 => 'cs_FONIPA-ko', 348 => 'cy-cy_FONIPA', 349 => 'de-ASCII', 350 => 'dsb-dsb_FONIPA', 351 => 'dv-dv_Latn/BGN', 352 => 'el-Lower', 353 => 'el-Title', 354 => 'el-Upper', 355 => 'el-el_Latn/BGN', 356 => 'eo-am', 357 => 'eo-ar', 358 => 'eo-chr', 359 => 'eo-eo_FONIPA', 360 => 'eo-fa', 361 => 'es-am', 362 => 'es-ar', 363 => 'es-chr', 364 => 'es-es_FONIPA', 365 => 'es-fa', 366 => 'es-ja', 367 => 'es-zh', 368 => 'es_419-am', 369 => 'es_419-ar', 370 => 'es_419-chr', 371 => 'es_419-fa', 372 => 'es_419-ja', 373 => 'es_419-zh', 374 => 'es_FONIPA-am', 375 => 'es_FONIPA-es_419_FONIPA', 376 => 'es_FONIPA-ja', 377 => 'es_FONIPA-zh', 378 => 'fa-fa_FONIPA', 379 => 'fa-fa_Latn/BGN', 380 => 'ha-ha_NE', 381 => 'he-he_Latn/BGN', 382 => 'hy-am', 383 => 'hy-ar', 384 => 'hy-chr', 385 => 'hy-fa', 386 => 'hy-hy_FONIPA', 387 => 'hy-hy_Latn/BGN', 388 => 'hy_AREVMDA-am', 389 => 'hy_AREVMDA-ar', 390 => 'hy_AREVMDA-chr', 391 => 'hy_AREVMDA-fa', 392 => 'hy_AREVMDA-hy_AREVMDA_FONIPA', 393 => 'ia-am', 394 => 'ia-ar', 395 => 'ia-chr', 396 => 'ia-fa', 397 => 'ia-ia_FONIPA', 398 => 'it-am', 399 => 'it-ja', 400 => 'ja_Hrkt-ja_Latn/BGN', 401 => 'ja_Latn-ko', 402 => 'ja_Latn-ru', 403 => 'ka-ka_Latn/BGN', 404 => 'ka-ka_Latn/BGN_1981', 405 => 'kk-am', 406 => 'kk-ar', 407 => 'kk-chr', 408 => 'kk-fa', 409 => 'kk-kk_FONIPA', 410 => 'kk-kk_Latn/BGN', 411 => 'ko-ko_Latn/BGN', 412 => 'ky-am', 413 => 'ky-ar', 414 => 'ky-chr', 415 => 'ky-fa', 416 => 'ky-ky_FONIPA', 417 => 'ky-ky_Latn/BGN', 418 => 'la-la_FONIPA', 419 => 'lt-Lower', 420 => 'lt-Title', 421 => 'lt-Upper', 422 => 'mk-mk_Latn/BGN', 423 => 'mn-mn_Latn/BGN', 424 => 'mn-mn_Latn/MNS', 425 => 'my-Zawgyi', 426 => 'my-am', 427 => 'my-ar', 428 => 'my-chr', 429 => 'my-fa', 430 => 'my-my_FONIPA', 431 => 'nl-Title', 432 => 'nv-nv_FONIPA', 433 => 'pl-am', 434 => 'pl-ar', 435 => 'pl-chr', 436 => 'pl-fa', 437 => 'pl-ja', 438 => 'pl-pl_FONIPA', 439 => 'pl_FONIPA-ja', 440 => 'ps-ps_Latn/BGN', 441 => 'rm_SURSILV-am', 442 => 'rm_SURSILV-ar', 443 => 'rm_SURSILV-chr', 444 => 'rm_SURSILV-fa', 445 => 'rm_SURSILV-rm_FONIPA_SURSILV', 446 => 'ro-am', 447 => 'ro-ar', 448 => 'ro-chr', 449 => 'ro-fa', 450 => 'ro-ja', 451 => 'ro-ro_FONIPA', 452 => 'ro_FONIPA-ja', 453 => 'ru-ja', 454 => 'ru-ru_Latn/BGN', 455 => 'ru-zh', 456 => 'ru_Latn-ru/BGN', 457 => 'sat-am', 458 => 'sat-ar', 459 => 'sat-chr', 460 => 'sat-fa', 461 => 'sat_Olck-sat_FONIPA', 462 => 'si-am', 463 => 'si-ar', 464 => 'si-chr', 465 => 'si-fa', 466 => 'si-si_FONIPA', 467 => 'si-si_Latn', 468 => 'sk-am', 469 => 'sk-ar', 470 => 'sk-chr', 471 => 'sk-fa', 472 => 'sk-ja', 473 => 'sk-sk_FONIPA', 474 => 'sk_FONIPA-ja', 475 => 'sr-sr_Latn/BGN', 476 => 'ta-ta_FONIPA', 477 => 'tk_Cyrl-tk/BGN', 478 => 'tlh-am', 479 => 'tlh-ar', 480 => 'tlh-chr', 481 => 'tlh-fa', 482 => 'tlh-tlh_FONIPA', 483 => 'tr-Lower', 484 => 'tr-Title', 485 => 'tr-Upper', 486 => 'ug-ug_FONIPA', 487 => 'uk-uk_Latn/BGN', 488 => 'und_FONIPA-ar', 489 => 'und_FONIPA-chr', 490 => 'und_FONIPA-fa', 491 => 'und_FONIPA-und_FONXSAMP', 492 => 'und_FONXSAMP-und_FONIPA', 493 => 'uz_Cyrl-uz/BGN', 494 => 'uz_Cyrl-uz_Latn', 495 => 'uz_Latn-uz_Cyrl', 496 => 'vec-vec_FONIPA', 497 => 'xh-am', 498 => 'xh-ar', 499 => 'xh-chr', 500 => 'xh-fa', 501 => 'xh-xh_FONIPA', 502 => 'yo-yo_BJ', 503 => 'zh_Latn_PINYIN-ru', 504 => 'zu-am', 505 => 'zu-ar', 506 => 'zu-chr', 507 => 'zu-fa', 508 => 'zu-zu_FONIPA', 509 => 'Any-Null', 510 => 'Any-Lower', 511 => 'Any-Upper', 512 => 'Any-Title', 513 => 'Any-Name', 514 => 'Name-Any', 515 => 'Any-Remove', 516 => 'Any-Hex/Unicode', 517 => 'Any-Hex/Java', 518 => 'Any-Hex/C', 519 => 'Any-Hex/XML', 520 => 'Any-Hex/XML10', 521 => 'Any-Hex/Perl', 522 => 'Any-Hex', 523 => 'Hex-Any/Unicode', 524 => 'Hex-Any/Java', 525 => 'Hex-Any/C', 526 => 'Hex-Any/XML', 527 => 'Hex-Any/XML10', 528 => 'Hex-Any/Perl', 529 => 'Hex-Any', 530 => 'Any-NFC', 531 => 'Any-NFKC', 532 => 'Any-NFD', 533 => 'Any-NFKD', 534 => 'Any-FCD', 535 => 'Any-FCC', 536 => 'Any-fa', 537 => 'Any-ar', 538 => 'Any-chr', 539 => 'Any-rm_FONIPA_SURSILV', 540 => 'Any-am', 541 => 'Any-Latn', 542 => 'Any-dv_Latn/BGN', 543 => 'Any-ro_FONIPA', 544 => 'Any-dsb_FONIPA', 545 => 'Any-Latin', 546 => 'Any-he_Latn/BGN', 547 => 'Any-el_Latn/BGN', 548 => 'Any-eo_FONIPA', 549 => 'Any-si_Latn', 550 => 'Any-si_FONIPA', 551 => 'Any-zh', 552 => 'Any-es_FONIPA', 553 => 'Any-sk_FONIPA', 554 => 'Any-und_FONIPA', 555 => 'Any-und_FONXSAMP', 556 => 'Any-az/BGN', 557 => 'Any-Deva', 558 => 'Any-Arab', 559 => 'Any-Telu', 560 => 'Any-Beng', 561 => 'Any-ur', 562 => 'Any-Orya', 563 => 'Any-Guru', 564 => 'Any-Taml', 565 => 'Any-Gujr', 566 => 'Any-Knda', 567 => 'Any-Armenian', 568 => 'Any-Thaana', 569 => 'Any-Hiragana', 570 => 'Any-Syriac', 571 => 'Any-Jamo', 572 => 'Any-Hangul', 573 => 'Any-Kannada', 574 => 'Any-Georgian', 575 => 'Any-Telugu', 576 => 'Any-Cyrillic', 577 => 'Any-Thai', 578 => 'Any-Oriya', 579 => 'Any-Bopomofo', 580 => 'Any-Malayalam', 581 => 'Any-Gurmukhi', 582 => 'Any-Gujarati', 583 => 'Any-Tamil', 584 => 'Any-Katakana', 585 => 'Any-Hebrew', 586 => 'Any-Bengali', 587 => 'Any-Arabic', 588 => 'Any-Greek', 589 => 'Any-Greek/UNGEGN', 590 => 'Any-Devanagari', 591 => 'Any-fa_FONIPA', 592 => 'Any-fa_Latn/BGN', 593 => 'Any-ta_FONIPA', 594 => 'Any-Mlym', 595 => 'Any-Any', 596 => 'Any-Hant', 597 => 'Any-Hans', 598 => 'Any-uz_Cyrl', 599 => 'Any-blt_FONIPA', 600 => 'Any-ug_FONIPA', 601 => 'Any-uk_Latn/BGN', 602 => 'Any-ha_NE', 603 => 'Any-hy_AREVMDA_FONIPA', 604 => 'Any-hy_FONIPA', 605 => 'Any-hy_Latn/BGN', 606 => 'Any-ia_FONIPA', 607 => 'Any-uz/BGN', 608 => 'Any-uz_Latn', 609 => 'Any-vec_FONIPA', 610 => 'Any-xh_FONIPA', 611 => 'Any-ka_Latn/BGN', 612 => 'Any-ka_Latn/BGN_1981', 613 => 'Any-kk_FONIPA', 614 => 'Any-kk_Latn/BGN', 615 => 'Any-yo_BJ', 616 => 'Any-ky_FONIPA', 617 => 'Any-ky_Latn/BGN', 618 => 'Any-la_FONIPA', 619 => 'Any-ru_Latn/BGN', 620 => 'Any-chr_FONIPA', 621 => 'Any-zu_FONIPA', 622 => 'Any-ru', 623 => 'Any-Geor', 624 => 'Any-Cyrl', 625 => 'Any-Armn', 626 => 'Any-Thaa', 627 => 'Any-Hebr', 628 => 'Any-Grek', 629 => 'Any-Grek/UNGEGN', 630 => 'Any-Syrc', 631 => 'Any-Hira', 632 => 'Any-Hang', 633 => 'Any-Kana', 634 => 'Any-Bopo', 635 => 'Any-mn_Latn/BGN', 636 => 'Any-mn_Latn/MNS', 637 => 'Any-my_FONIPA', 638 => 'Any-sr_Latn/BGN', 639 => 'Any-nv_FONIPA', 640 => 'Any-sat_FONIPA', 641 => 'Any-my', 642 => 'Any-am_FONIPA', 643 => 'Any-am_Latn/BGN', 644 => 'Any-ar_Latn/BGN', 645 => 'Any-mk_Latn/BGN', 646 => 'Any-be_Latn/BGN', 647 => 'Any-bg_Latn/BGN', 648 => 'Any-es_419_FONIPA', 649 => 'Any-pl_FONIPA', 650 => 'Any-ps_Latn/BGN', 651 => 'Any-tk/BGN', 652 => 'Any-ch_FONIPA', 653 => 'Any-cs_FONIPA', 654 => 'Any-cy_FONIPA'];
<?php

// code source:  https://github.com/devgeniem/wp-sanitize-accented-uploads/blob/master/plugin.php#L152
// table source: http://www.i18nqa.com/debug/utf8-debug.html

return [
    // 3 char errors
    'â€š' => '‚',
    'â€ž' => '„',
    'â€¦' => '…',
    'â€¡' => '‡',
    'â€°' => '‰',
    'â€¹' => '‹',
    'â€˜' => '‘',
    'â€™' => '’',
    'â€œ' => '“',
    'â€¢' => '•',
    'â€“' => '–',
    'â€”' => '—',
    'â„¢' => '™',
    'â€º' => '›',
    'â‚¬' => '€',
    // 2 char errors
    "\xc2\x80" => "\xe2\x82\xac", // EURO SIGN
    "\xc2\x82" => "\xe2\x80\x9a", // SINGLE LOW-9 QUOTATION MARK
    "\xc2\x83" => "\xc6\x92", // LATIN SMALL LETTER F WITH HOOK
    "\xc2\x84" => "\xe2\x80\x9e", // DOUBLE LOW-9 QUOTATION MARK
    "\xc2\x85" => "\xe2\x80\xa6", // HORIZONTAL ELLIPSIS
    "\xc2\x86" => "\xe2\x80\xa0", // DAGGER
    "\xc2\x87" => "\xe2\x80\xa1", // DOUBLE DAGGER
    "\xc2\x88" => "\xcb\x86", // MODIFIER LETTER CIRCUMFLEX ACCENT
    "\xc2\x89" => "\xe2\x80\xb0", // PER MILLE SIGN
    "\xc2\x8a" => "\xc5\xa0", // LATIN CAPITAL LETTER S WITH CARON
    "\xc2\x8b" => "\xe2\x80\xb9", // SINGLE LEFT-POINTING ANGLE QUOTE
    "\xc2\x8c" => "\xc5\x92", // LATIN CAPITAL LIGATURE OE
    "\xc2\x8e" => "\xc5\xbd", // LATIN CAPITAL LETTER Z WITH CARON
    "\xc2\x91" => "\xe2\x80\x98", // LEFT SINGLE QUOTATION MARK
    "\xc2\x92" => "\xe2\x80\x99", // RIGHT SINGLE QUOTATION MARK
    "\xc2\x93" => "\xe2\x80\x9c", // LEFT DOUBLE QUOTATION MARK
    "\xc2\x94" => "\xe2\x80\x9d", // RIGHT DOUBLE QUOTATION MARK
    "\xc2\x95" => "\xe2\x80\xa2", // BULLET
    "\xc2\x96" => "\xe2\x80\x93", // EN DASH
    "\xc2\x97" => "\xe2\x80\x94", // EM DASH
    "\xc2\x98" => "\xcb\x9c", // SMALL TILDE
    'Ã‚'       => 'Â',
    'Æ’'       => 'ƒ',
    'Ãƒ'       => 'Ã',
    'Ã„'       => 'Ä',
    'Ã…'       => 'Å',
    //'â€'       => '†', // duplicate key
    'Ã†' => 'Æ',
    'Ã‡' => 'Ç',
    'Ë†' => 'ˆ',
    'Ãˆ' => 'È',
    'Ã‰' => 'É',
    'ÃŠ' => 'Ê',
    'Ã‹' => 'Ë',
    'Å’' => 'Œ',
    'ÃŒ' => 'Ì',
    'Å½' => 'Ž',
    'ÃŽ' => 'Î',
    'Ã‘' => 'Ñ',
    'Ã’' => 'Ò',
    'Ã“' => 'Ó',
    'â€' => '”',
    'Ã”' => 'Ô',
    'Ã•' => 'Õ',
    'Ã–' => 'Ö',
    'Ã—' => '×',
    'Ëœ' => '˜',
    'Ã˜' => 'Ø',
    'Ã™' => 'Ù',
    'Å¡' => 'š',
    'Ãš' => 'Ú',
    'Ã›' => 'Û',
    'Å“' => 'œ',
    'Ãœ' => 'Ü',
    'Å¾' => 'ž',
    'Ãž' => 'Þ',
    'Å¸' => 'Ÿ',
    'ÃŸ' => 'ß',
    'Â¡' => '¡',
    'Ã¡' => 'á',
    'Â¢' => '¢',
    'Ã¢' => 'â',
    'Â£' => '£',
    'Ã£' => 'ã',
    'Â¤' => '¤',
    'Ã¤' => 'ä',
    'Â¥' => '¥',
    'Ã¥' => 'å',
    'Â¦' => '¦',
    'Ã¦' => 'æ',
    'Â§' => '§',
    'Ã§' => 'ç',
    'Â¨' => '¨',
    'Ã¨' => 'è',
    'Â©' => '©',
    'Ã©' => 'é',
    'Âª' => 'ª',
    'Ãª' => 'ê',
    'Â«' => '«',
    'Ã«' => 'ë',
    'Â¬' => '¬',
    'Ã¬' => 'ì',
    'Â®' => '®',
    'Ã®' => 'î',
    'Â¯' => '¯',
    'Ã¯' => 'ï',
    'Â°' => '°',
    'Ã°' => 'ð',
    'Â±' => '±',
    'Ã±' => 'ñ',
    'Â²' => '²',
    'Ã²' => 'ò',
    'Â³' => '³',
    'Ã³' => 'ó',
    'Â´' => '´',
    'Ã´' => 'ô',
    'Âµ' => 'µ',
    'Ãµ' => 'õ',
    'Â¶' => '¶',
    'Ã¶' => 'ö',
    'Â·' => '·',
    'Ã·' => '÷',
    'Â¸' => '¸',
    'Ã¸' => 'ø',
    'Â¹' => '¹',
    'Ã¹' => 'ù',
    'Âº' => 'º',
    'Ãº' => 'ú',
    'Â»' => '»',
    'Ã»' => 'û',
    'Â¼' => '¼',
    'Ã¼' => 'ü',
    'Â½' => '½',
    'Ã½' => 'ý',
    'Â¾' => '¾',
    'Ã¾' => 'þ',
    'Â¿' => '¿',
    'Ã¿' => 'ÿ',
    'Ã€' => 'À',
    // 1 char errors last (don't use them, because of false-positives)
    //'Ã'        => 'Á',
    //'Å'        => 'Š',
    //'Ã'        => 'Í',
    //'Ã'        => 'Ï',
    //'Ã'        => 'Ð',
    //'Ã'        => 'Ý',
    //'Ã'        => 'à',
    //'Ã'        => 'í',
];
<?php

return [
    0x80 => "\xe2\x82\xac", // €
    0x82 => "\xe2\x80\x9a", // ‚
    0x83 => "\xc6\x92",     // ƒ
    0x84 => "\xe2\x80\x9e", // „
    0x85 => "\xe2\x80\xa6", // …
    0x86 => "\xe2\x80\xa0", // †
    0x87 => "\xe2\x80\xa1", // ‡
    0x88 => "\xcb\x86",     // ˆ
    0x89 => "\xe2\x80\xb0", // ‰
    0x8a => "\xc5\xa0",     // Š
    0x8b => "\xe2\x80\xb9", // ‹
    0x8c => "\xc5\x92",     // Œ
    0x8e => "\xc5\xbd",     // Ž
    0x91 => "\xe2\x80\x98", // ‘
    0x92 => "\xe2\x80\x99", // ’
    0x93 => "\xe2\x80\x9c", // “
    0x94 => "\xe2\x80\x9d", // ”
    0x95 => "\xe2\x80\xa2", // •
    0x96 => "\xe2\x80\x93", // –
    0x97 => "\xe2\x80\x94", // —
    0x98 => "\xcb\x9c",     // ˜
    0x99 => "\xe2\x84\xa2", // ™
    0x9a => "\xc5\xa1",     // š
    0x9b => "\xe2\x80\xba", // ›
    0x9c => "\xc5\x93",     // œ
    0x9e => "\xc5\xbe",     // ž
    0x9f => "\xc5\xb8",     // Ÿ
    0xa0 => "\xc2\xa0",
    0xa1 => "\xc2\xa1",     // ¡
    0xa2 => "\xc2\xa2",     // ¢
    0xa3 => "\xc2\xa3",     // £
    0xa4 => "\xc2\xa4",     // ¤
    0xa5 => "\xc2\xa5",     // ¥
    0xa6 => "\xc2\xa6",     // ¦
    0xa7 => "\xc2\xa7",     // §
    0xa8 => "\xc2\xa8",     // ¨
    0xa9 => "\xc2\xa9",     // ©
    0xaa => "\xc2\xaa",     // ª
    0xab => "\xc2\xab",     // «
    0xac => "\xc2\xac",     // ¬
    0xad => "\xc2\xad",     // ­
    0xae => "\xc2\xae",     // ®
    0xaf => "\xc2\xaf",     // ¯
    0xb0 => "\xc2\xb0",     // °
    0xb1 => "\xc2\xb1",     // ±
    0xb2 => "\xc2\xb2",     // ²
    0xb3 => "\xc2\xb3",     // ³
    0xb4 => "\xc2\xb4",     // ´
    0xb5 => "\xc2\xb5",     // µ
    0xb6 => "\xc2\xb6",     // ¶
    0xb7 => "\xc2\xb7",     // ·
    0xb8 => "\xc2\xb8",     // ¸
    0xb9 => "\xc2\xb9",     // ¹
    0xba => "\xc2\xba",     // º
    0xbb => "\xc2\xbb",     // »
    0xbc => "\xc2\xbc",     // ¼
    0xbd => "\xc2\xbd",     // ½
    0xbe => "\xc2\xbe",     // ¾
    0xbf => "\xc2\xbf",     // ¿
    0xc0 => "\xc3\x80",     // À
    0xc1 => "\xc3\x81",     // Á
    0xc2 => "\xc3\x82",     // Â
    0xc3 => "\xc3\x83",     // Ã
    0xc4 => "\xc3\x84",     // Ä
    0xc5 => "\xc3\x85",     // Å
    0xc6 => "\xc3\x86",     // Æ
    0xc7 => "\xc3\x87",     // Ç
    0xc8 => "\xc3\x88",     // È
    0xc9 => "\xc3\x89",     // É
    0xca => "\xc3\x8a",     // Ê
    0xcb => "\xc3\x8b",     // Ë
    0xcc => "\xc3\x8c",     // Ì
    0xcd => "\xc3\x8d",     // Í
    0xce => "\xc3\x8e",     // Î
    0xcf => "\xc3\x8f",     // Ï
    0xd0 => "\xc3\x90",     // Ð
    0xd1 => "\xc3\x91",     // Ñ
    0xd2 => "\xc3\x92",     // Ò
    0xd3 => "\xc3\x93",     // Ó
    0xd4 => "\xc3\x94",     // Ô
    0xd5 => "\xc3\x95",     // Õ
    0xd6 => "\xc3\x96",     // Ö
    0xd7 => "\xc3\x97",     // ×
    0xd8 => "\xc3\x98",     // Ø
    0xd9 => "\xc3\x99",     // Ù
    0xda => "\xc3\x9a",     // Ú
    0xdb => "\xc3\x9b",     // Û
    0xdc => "\xc3\x9c",     // Ü
    0xdd => "\xc3\x9d",     // Ý
    0xde => "\xc3\x9e",     // Þ
    0xdf => "\xc3\x9f",     // ß
    0xe0 => "\xc3\xa0",     // à
    0xe1 => "\xc3\xa1",     // á
    0xe2 => "\xc3\xa2",     // â
    0xe3 => "\xc3\xa3",     // ã
    0xe4 => "\xc3\xa4",     // ä
    0xe5 => "\xc3\xa5",     // å
    0xe6 => "\xc3\xa6",     // æ
    0xe7 => "\xc3\xa7",     // ç
    0xe8 => "\xc3\xa8",     // è
    0xe9 => "\xc3\xa9",     // é
    0xea => "\xc3\xaa",     // ê
    0xeb => "\xc3\xab",     // ë
    0xec => "\xc3\xac",     // ì
    0xed => "\xc3\xad",     // í
    0xee => "\xc3\xae",     // î
    0xef => "\xc3\xaf",     // ï
    0xf0 => "\xc3\xb0",     // ð
    0xf1 => "\xc3\xb1",     // ñ
    0xf2 => "\xc3\xb2",     // ò
    0xf3 => "\xc3\xb3",     // ó
    0xf4 => "\xc3\xb4",     // ô
    0xf5 => "\xc3\xb5",     // õ
    0xf6 => "\xc3\xb6",     // ö
    0xf7 => "\xc3\xb7",     // ÷
    0xf8 => "\xc3\xb8",     // ø
    0xf9 => "\xc3\xb9",     // ù
    0xfa => "\xc3\xba",     // ú
    0xfb => "\xc3\xbb",     // û
    0xfc => "\xc3\xbc",     // ü
    0xfd => "\xc3\xbd",     // ý
    0xfe => "\xc3\xbe",     // þ
];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '', 'EUR',  // "\xc2\x80" => "\xe2\x82\xac" => EURO SIGN
    '', ',', 'f', ',,',   // "\xc2\x84" => "\xe2\x80\x9e" => DOUBLE LOW-9 QUOTATION MARK
    '...',  // "\xc2\x85" => "\xe2\x80\xa6" =>  HORIZONTAL ELLIPSIS
    '+', '++',   // "\xc2\x87" => "\xe2\x80\xa1" => DOUBLE DAGGER
    '^', '%0',   // "\xc2\x89" => "\xe2\x80\xb0" => PER MILLE SIGN
    'S', '<', 'OE',   // "\xc2\x8c" => "\xc5\x92" => LATIN CAPITAL LIGATURE OE
    '', 'Z', '', '', '\'',   // "\xc2\x91" => "\xe2\x80\x98" => LEFT SINGLE QUOTATION MARK
    '\'',   // "\xc2\x92" => "\xe2\x80\x99" => RIGHT SINGLE QUOTATION MARK
    '"', '"', '*', '-', '--',   // "\xc2\x97" => "\xe2\x80\x94" => EM DASH
    '~', 'tm', 's', '>', 'oe', '', 'z', 'Y', ' ', '!', 'C/', 'PS', '$?', 'Y=', '|', 'SS', '"', '(c)', 'a', '<<', '!', '', '(r)', '-', 'deg', '+-', '2', '3', '\'', 'u', 'P', '*', ',', '1', 'o', '>>', '1/4', '1/2', '3/4', '?', 'A', 'A', 'A', 'A', // Not "AE" - used in languages other than German
    'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', // Not "OE" - used in languages other than German
    'O', 'x', 'O', 'U', 'U', 'U', // Not "UE" - used in languages other than German
    'U', 'Y', 'Th', 'ss', 'a', 'a', 'a', 'a', // Not "ae" - used in languages other than German
    'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'd', 'n', 'o', 'o', 'o', 'o', // Not "oe" - used in languages other than German
    'o', '/', 'o', 'u', 'u', 'u', // Not "ue" - used in languages other than German
    'u', 'y', 'th', 'y', ];
<?php return ['A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '\'n', 'ng', 'NG', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'b', 'B', 'B', 'b', '6', '6', 'O', 'C', 'c', 'D', 'D', 'D', 'd', 'd', '3', '@', 'E', 'F', 'f', 'G', 'G', 'hv', 'I', 'I', 'K', 'k', 'l', 'l', 'W', 'N', 'n', 'O', 'O', 'o', 'OI', 'oi', 'P', 'p', 'YR', '2', '2', 'SH', 'sh', 't', 'T', 't', 'T', 'U', 'u', 'Y', 'V', 'Y', 'y', 'Z', 'z', 'ZH', 'ZH', 'zh', 'zh', '2', '5', '5', 'ts', 'w', '|', '||', '|=', '!', 'DZ', 'Dz', 'dz', 'LJ', 'Lj', 'lj', 'NJ', 'Nj', 'nj', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '@', 'A', 'a', 'A', 'a', 'AE', 'ae', 'G', 'g', 'G', 'g', 'K', 'k', 'O', 'o', 'O', 'o', 'ZH', 'zh', 'j', 'DZ', 'Dz', 'dz', 'G', 'g', 'HV', 'W', 'N', 'n', 'A', 'a', 'AE', 'ae', 'O', 'o'];
<?php return ['A', 'a', 'A', 'a', 'E', 'e', 'E', 'e', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'R', 'r', 'R', 'r', 'U', 'u', 'U', 'u', 'S', 's', 'T', 't', 'Y', 'y', 'H', 'h', 'N', 'd', 'OU', 'ou', 'Z', 'z', 'A', 'a', 'E', 'e', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'Y', 'y', 'l', 'n', 't', 'j', 'db', 'qp', 'A', 'C', 'c', 'L', 'T', 's', 'z', '[?]', '[?]', 'B', 'U', '^', 'E', 'e', 'J', 'j', 'q', 'q', 'R', 'r', 'Y', 'y', 'a', 'a', 'a', 'b', 'o', 'c', 'd', 'd', 'e', '@', '@', 'e', 'e', 'e', 'e', 'j', 'g', 'g', 'g', 'g', 'u', 'Y', 'h', 'h', 'i', 'i', 'I', 'l', 'l', 'l', 'lZ', 'W', 'W', 'm', 'n', 'n', 'n', 'o', 'OE', 'O', 'F', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'R', 'R', 's', 'S', 'j', 'S', 'S', 't', 't', 'u', 'U', 'v', '^', 'w', 'y', 'Y', 'z', 'z', 'Z', 'Z', '?', '?', '?', 'C', '@', 'B', 'E', 'G', 'H', 'j', 'k', 'L', 'q', '?', '?', 'dz', 'dZ', 'dz', 'ts', 'tS', 'tC', 'fN', 'ls', 'lz', 'WW', ']]', 'h', 'h', 'h', 'h', 'j', 'r', 'r', 'r', 'r', 'w', 'y', '\'', '"', '`', '\'', '`', '`', '\'', '?', '?', '<', '>', '^', 'V', '^', 'V', '\'', '-', '/', '\\', ',', '_', '\\', '/', ':', '.', '`', '\'', '^', 'V', '+', '-', 'V', '.', '@', ',', '~', '"', 'R', 'X', 'G', 'l', 's', 'x', '?', '', '', '', '', '', '', '', 'V', '=', '"', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', 'a', 'e', 'i', 'o', 'u', 'c', 'd', 'h', 'm', 'r', 't', 'v', 'x', '[?]', '[?]', '[?]', '[?]', '\'', ',', '[?]', '[?]', '[?]', '[?]', '', '[?]', '[?]', '[?]', '?', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', 'A', ';', 'E', 'E', 'I', '[?]', 'O', '[?]', 'U', 'O', 'I', 'A', 'B', 'G', 'D', 'E', 'Z', 'E', 'Th', 'I', 'K', 'L', 'M', 'N', 'Ks', 'O', 'P', 'R', '[?]', 'S', 'T', 'U', 'Ph', 'Kh', 'Ps', 'O', 'I', 'U', 'a', 'e', 'e', 'i', 'u', 'a', 'b', 'g', 'd', 'e', 'z', 'e', 'th', 'i', 'k', 'l', 'm', 'n', 'x', 'o', 'p', 'r', 's', 's', 't', 'u', 'ph', 'kh', 'ps', 'o', 'i', 'u', 'o', 'u', 'o', '[?]', 'b', 'th', 'U', 'U', 'U', 'ph', 'p', '&', '[?]', '[?]', 'St', 'st', 'W', 'w', 'Q', 'q', 'Sp', 'sp', 'Sh', 'sh', 'F', 'f', 'Kh', 'kh', 'H', 'h', 'G', 'g', 'CH', 'ch', 'Ti', 'ti', 'k', 'r', 'c', 'j', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['Ie', 'Io', 'Dj', 'Gj', 'Ie', 'Dz', 'I', 'Yi', 'J', 'Lj', 'Nj', 'Tsh', 'Kj', 'I', 'U', 'Dzh', 'A', 'B', 'V', 'G', 'D', 'E', 'Zh', 'Z', 'I', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'Kh', 'Ts', 'Ch', 'Sh', 'Shch', '\'', 'Y', '\'', 'E', 'Iu', 'Ia', 'a', 'b', 'v', 'g', 'd', 'e', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'kh', 'ts', 'ch', 'sh', 'shch', '\'', 'y', '\'', 'e', 'iu', 'ia', 'ie', 'io', 'dj', 'gj', 'ie', 'dz', 'i', 'yi', 'j', 'lj', 'nj', 'tsh', 'kj', 'i', 'u', 'dzh', 'O', 'o', 'E', 'e', 'Ie', 'ie', 'E', 'e', 'Ie', 'ie', 'O', 'o', 'Io', 'io', 'Ks', 'ks', 'Ps', 'ps', 'F', 'f', 'Y', 'y', 'Y', 'y', 'u', 'u', 'O', 'o', 'O', 'o', 'Ot', 'ot', 'Q', 'q', '*1000*', '', '', '', '', '[?]', '*100.000*', '*1.000.000*', '[?]', '[?]', '"', '"', 'R\'', 'r\'', 'G\'', 'g\'', 'G\'', 'g\'', 'G\'', 'g\'', 'Zh\'', 'zh\'', 'Z\'', 'z\'', 'K\'', 'k\'', 'K\'', 'k\'', 'K\'', 'k\'', 'K\'', 'k\'', 'N\'', 'n\'', 'Ng', 'ng', 'P\'', 'p\'', 'Kh', 'kh', 'S\'', 's\'', 'T\'', 't\'', 'U', 'u', 'U\'', 'u\'', 'Kh\'', 'kh\'', 'Tts', 'tts', 'Ch\'', 'ch\'', 'Ch\'', 'ch\'', 'H', 'h', 'Ch', 'ch', 'Ch\'', 'ch\'', '`', 'Zh', 'zh', 'K\'', 'k\'', '[?]', '[?]', 'N\'', 'n\'', '[?]', '[?]', 'Ch', 'ch', '[?]', '[?]', '[?]', 'a', 'a', 'A', 'a', 'Ae', 'ae', 'Ie', 'ie', '@', '@', '@', '@', 'Zh', 'zh', 'Z', 'z', 'Dz', 'dz', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'O', 'o', 'E', 'e', 'U', 'u', 'U', 'u', 'U', 'u', 'Ch', 'ch', '[?]', '[?]', 'Y', 'y', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'B', 'G', 'D', 'E', 'Z', 'E', 'E', 'T`', 'Zh', 'I', 'L', 'Kh', 'Ts', 'K', 'H', 'Dz', 'Gh', 'Ch', 'M', 'Y', 'N', 'Sh', 'O', 'Ch`', 'P', 'J', 'Rh', 'S', 'V', 'T', 'R', 'Ts`', 'W', 'P`', 'K`', 'O', 'F', '[?]', '[?]', '<', '\'', '/', '!', ',', '?', '.', '[?]', 'a', 'b', 'g', 'd', 'e', 'z', 'e', 'e', 't`', 'zh', 'i', 'l', 'kh', 'ts', 'k', 'h', 'dz', 'gh', 'ch', 'm', 'y', 'n', 'sh', 'o', 'ch`', 'p', 'j', 'rh', 's', 'v', 't', 'r', 'ts`', 'w', 'p`', 'k`', 'o', 'f', 'ew', '[?]', ':', '-', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '@', 'e', 'a', 'o', 'i', 'e', 'e', 'a', 'a', 'o', 'o', 'u', '\'', '', '-', '-', '|', '', '', ':', '', '', 'n', 'o', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'b', 'g', 'd', 'h', 'v', 'z', 'KH', 't', 'y', 'k', 'k', 'l', 'm', 'm', 'n', 'n', 's', '`', 'p', 'p', 'TS', 'TS', 'q', 'r', 'SH', 't', '[?]', '[?]', '[?]', '[?]', '[?]', 'V', 'OY', 'i', '\'', '"', 'v', 'n', 'q', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ',', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ';', '[?]', '[?]', '[?]', '?', '[?]', '', 'a', 'a', 'w\'', '', 'y\'', '', 'b', '@', 't', 'th', 'j', 'H', 'kh', 'd', 'dh', 'r', 'z', 's', 'sh', 'S', 'D', 'T', 'Z', '`', 'G', '[?]', '[?]', '[?]', '[?]', '[?]', '', 'f', 'q', 'k', 'l', 'm', 'n', 'h', 'w', '~', 'y', 'an', 'un', 'in', 'a', 'u', 'i', 'W', '', '', '\'', '\'', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '%', '.', ',', '*', '[?]', '[?]', '', '\'', '\'', '\'', '', '\'', '\'w', '\'u', '\'y', 'tt', 'tth', 'b', 't', 'T', 'p', 'th', 'bh', '\'h', 'H', 'ny', 'dy', 'H', 'ch', 'cch', 'dd', 'D', 'D', 'Dt', 'dh', 'ddh', 'd', 'D', 'D', 'rr', 'R', 'R', 'R', 'R', 'R', 'R', 'j', 'R', 'S', 'S', 'S', 'S', 'S', 'T', 'GH', 'F', 'F', 'F', 'v', 'f', 'ph', 'Q', 'Q', 'kh', 'k', 'K', 'K', 'ng', 'K', 'g', 'G', 'N', 'G', 'G', 'G', 'L', 'L', 'L', 'L', 'N', 'N', 'N', 'N', 'N', 'h', 'Ch', 'hy', 'h', 'H', '@', 'W', 'oe', 'oe', 'u', 'yu', 'yu', 'W', 'v', 'y', 'Y', 'Y', 'W', '', '', 'y', 'y\'', '.', 'ae', '', '', '', '', '', '', '', '@', '#', '', '', '', '', '', '', '', '', '', '', '^', '', '', '', '', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'Sh', 'D', 'Gh', '&', '+m', 'h'];
<?php return ['//', '/', ',', '!', '!', '-', ',', ',', ';', '?', '~', '{', '}', '*', '[?]', '', '\'', '', 'b', 'g', 'g', 'd', 'd', 'h', 'w', 'z', 'H', 't', 't', 'y', 'yh', 'k', 'l', 'm', 'n', 's', 's', '`', 'p', 'p', 'S', 'q', 'r', 'sh', 't', '[?]', '[?]', '[?]', 'a', 'a', 'a', 'A', 'A', 'A', 'e', 'e', 'e', 'E', 'i', 'i', 'u', 'u', 'u', 'o', '', '`', '\'', '', '', 'X', 'Q', '@', '@', '|', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'h', 'sh', 'n', 'r', 'b', 'L', 'k', '\'', 'v', 'm', 'f', 'dh', 'th', 'l', 'g', 'ny', 's', 'd', 'z', 't', 'y', 'p', 'j', 'ch', 'tt', 'hh', 'kh', 'th', 'z', 'sh', 's', 'd', 't', 'z', '`', 'gh', 'q', 'w', 'a', 'aa', 'i', 'ee', 'u', 'oo', 'e', 'ey', 'o', 'oa', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', 'eN', 'e', 'e', 'ai', 'oN', 'o', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'nnn', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'l', 'lll', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'eN', 'e', 'e', 'ai', 'oN', 'o', 'o', 'au', '', '[?]', '[?]', 'AUM', '\'', '\'', '`', '\'', '[?]', '[?]', '[?]', 'q', 'khh', 'ghh', 'z', 'dddh', 'rh', 'f', 'yy', 'RR', 'LL', 'L', 'LL', ' / ', ' // ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', '[?]', 'l', '[?]', '[?]', '[?]', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', 'rr', 'rh', '[?]', 'yy', 'RR', 'LL', 'L', 'LL', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'r\'', 'r`', 'Rs', 'Rs', '1/', '2/', '3/', '4/', ' 1 - 1/', '/16', '', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', 'N', '[?]', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', '[?]', 'ee', 'ai', '[?]', '[?]', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bb', 'm', 'y', 'r', '[?]', 'l', 'll', '[?]', 'v', 'sh', '[?]', 's', 'h', '[?]', '[?]', '\'', '[?]', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', '[?]', 'ee', 'ai', '[?]', '[?]', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'khh', 'ghh', 'z', 'rr', '[?]', 'f', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'N', 'H', '', '', 'G.E.O.', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', 'eN', '[?]', 'e', 'ai', 'oN', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'ya', 'r', '[?]', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'eN', '[?]', 'e', 'ai', 'oN', '[?]', 'o', 'au', '', '[?]', '[?]', 'AUM', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', '[?]', 'l', 'll', '[?]', '', 'sh', 'ss', 's', 'h', '[?]', '[?]', '\'', '\'', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', '[?]', '[?]', 'e', 'ai', '[?]', '[?]', 'o', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', 'rr', 'rh', '[?]', 'yy', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', '[?]', '[?]', '[?]', 'ng', 'c', '[?]', 'j', '[?]', 'ny', 'tt', '[?]', '[?]', '[?]', 'nn', 't', '[?]', '[?]', '[?]', 'n', 'nnn', 'p', '[?]', '[?]', '[?]', 'm', 'y', 'r', 'rr', 'l', 'll', 'lll', 'v', '[?]', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', '[?]', '[?]', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+10+', '+100+', '+1000+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', 'N', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', '[?]', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'lll', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'L', '[?]', 'e', 'ee', 'ai', '[?]', 'o', 'oo', 'au', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', '[?]', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'rr', 'l', 'll', 'lll', 'v', 'sh', 'ss', 's', 'h', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', '[?]', '[?]', 'e', 'ee', 'ai', '', 'o', 'oo', 'au', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'N', 'H', '[?]', 'a', 'aa', 'ae', 'aae', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'L', 'LL', 'e', 'ee', 'ai', 'o', 'oo', 'au', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'nng', 'c', 'ch', 'j', 'jh', 'ny', 'jny', 'nyj', 'tt', 'tth', 'dd', 'ddh', 'nn', 'nndd', 't', 'th', 'd', 'dh', 'n', '[?]', 'nd', 'p', 'ph', 'b', 'bh', 'm', 'mb', 'y', 'r', '[?]', 'l', '[?]', '[?]', 'v', 'sh', 'ss', 's', 'h', 'll', 'f', '[?]', '[?]', '[?]', '', '[?]', '[?]', '[?]', '[?]', 'aa', 'ae', 'aae', 'i', 'ii', 'u', '[?]', 'uu', '[?]', 'R', 'e', 'ee', 'ai', 'o', 'oo', 'au', 'L', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'RR', 'LL', ' . ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', 'k', 'kh', 'kh', 'kh', 'kh', 'kh', 'ng', 'cch', 'ch', 'ch', 'ch', 'ch', 'y', 'd', 't', 'th', 'th', 'th', 'n', 'd', 't', 'th', 'th', 'th', 'n', 'b', 'p', 'ph', 'f', 'ph', 'f', 'ph', 'm', 'y', 'r', 'R', 'l', 'L', 'w', 's', 's', 's', 'h', 'l', '`', 'h', '~', 'a', 'a', 'aa', 'am', 'i', 'ii', 'ue', 'uue', 'u', 'uu', '\'', '[?]', '[?]', '[?]', '[?]', 'Bh.', 'e', 'ae', 'o', 'ai', 'ai', 'ao', '+', '', '', '', '', '', '', 'M', '', ' * ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' // ', ' /// ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', '[?]', 'kh', '[?]', '[?]', 'ng', 'ch', '[?]', 's', '[?]', '[?]', 'ny', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'd', 'h', 'th', 'th', '[?]', 'n', 'b', 'p', 'ph', 'f', 'ph', 'f', '[?]', 'm', 'y', 'r', '[?]', 'l', '[?]', 'w', '[?]', '[?]', 's', 'h', '[?]', '`', '', '~', 'a', '', 'aa', 'am', 'i', 'ii', 'y', 'yy', 'u', 'uu', '[?]', 'o', 'l', 'ny', '[?]', '[?]', 'e', 'ei', 'o', 'ay', 'ai', '[?]', '+', '[?]', '', '', '', '', '', 'M', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', 'hn', 'hm', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['AUM', '', '', '', '', '', '', '', ' // ', ' * ', '', '-', ' / ', ' / ', ' // ', ' -/ ', ' +/ ', ' X/ ', ' /XX/ ', ' /X/ ', ', ', '', '', '', '', '', '', '', '', '', '', '', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.5', '1.5', '2.5', '3.5', '4.5', '5.5', '6.5', '7.5', '8.5', '-.5', '+', '*', '^', '_', '', '~', '[?]', ']', '[[', ']]', '', '', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', '[?]', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'ts', 'tsh', 'dz', 'dzh', 'w', 'zh', 'z', '\'', 'y', 'r', 'l', 'sh', 'ssh', 's', 'h', 'a', 'kss', 'r', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'R', 'RR', 'L', 'LL', 'e', 'ee', 'o', 'oo', 'M', 'H', 'i', 'ii', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', '[?]', 'ny', 'tt', 'tth', 'dd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'ts', 'tsh', 'dz', 'dzh', 'w', 'zh', 'z', '\'', 'y', 'r', 'l', 'sh', 'ss', 's', 'h', 'a', 'kss', 'w', 'y', 'r', '[?]', 'X', ' :X: ', ' /O/ ', ' /o/ ', ' \\o\\ ', ' (O) ', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 'nny', 'tt', 'tth', 'dd', 'ddh', 'nn', 'tt', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'l', 'w', 's', 'h', 'll', 'a', '[?]', 'i', 'ii', 'u', 'uu', 'e', '[?]', 'o', 'au', '[?]', 'aa', 'i', 'ii', 'u', 'uu', 'e', 'ai', '[?]', '[?]', '[?]', 'N', '\'', ':', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' / ', ' // ', 'n*', 'r*', 'l*', 'e*', 'sh', 'ss', 'R', 'RR', 'L', 'LL', 'R', 'RR', 'L', 'LL', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'A', 'B', 'G', 'D', 'E', 'V', 'Z', 'T`', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Zh', 'R', 'S', 'T', 'U', 'P`', 'K`', 'G\'', 'Q', 'Sh', 'Ch`', 'C`', 'Z\'', 'C', 'Ch', 'X', 'J', 'H', 'E', 'Y', 'W', 'Xh', 'OE', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'b', 'g', 'd', 'e', 'v', 'z', 't`', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'zh', 'r', 's', 't', 'u', 'p`', 'k`', 'g\'', 'q', 'sh', 'ch`', 'c`', 'z\'', 'c', 'ch', 'x', 'j', 'h', 'e', 'y', 'w', 'xh', 'oe', 'f', '[?]', '[?]', '[?]', '[?]', ' // ', '[?]', '[?]', '[?]'];
<?php return ['g', 'gg', 'n', 'd', 'dd', 'r', 'm', 'b', 'bb', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', 'ng', 'nn', 'nd', 'nb', 'dg', 'rn', 'rr', 'rh', 'rN', 'mb', 'mN', 'bg', 'bn', '', 'bs', 'bsg', 'bst', 'bsb', 'bss', 'bsj', 'bj', 'bc', 'bt', 'bp', 'bN', 'bbN', 'sg', 'sn', 'sd', 'sr', 'sm', 'sb', 'sbg', 'sss', 's', 'sj', 'sc', 'sk', 'st', 'sp', 'sh', '', '', '', '', 'Z', 'g', 'd', 'm', 'b', 's', 'Z', '', 'j', 'c', 't', 'p', 'N', 'j', '', '', '', '', 'ck', 'ch', '', '', 'pb', 'pN', 'hh', 'Q', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', 'a', 'ae', 'ya', 'yae', 'eo', 'e', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', 'yo', 'u', 'weo', 'we', 'wi', 'yu', 'eu', 'yi', 'i', 'a-o', 'a-u', 'ya-o', 'ya-yo', 'eo-o', 'eo-u', 'eo-eu', 'yeo-o', 'yeo-u', 'o-eo', 'o-e', 'o-ye', 'o-o', 'o-u', 'yo-ya', 'yo-yae', 'yo-yeo', 'yo-o', 'yo-i', 'u-a', 'u-ae', 'u-eo-eu', 'u-ye', 'u-u', 'yu-a', 'yu-eo', 'yu-e', 'yu-yeo', 'yu-ye', 'yu-u', 'yu-i', 'eu-u', 'eu-eu', 'yi-u', 'i-a', 'i-ya', 'i-o', 'i-u', 'i-eu', 'i-U', 'U', 'U-eo', 'U-u', 'U-i', 'UU', '[?]', '[?]', '[?]', '[?]', '[?]', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'l', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'lh', 'm', 'b', 'bs', 's', 'ss', 'ng', 'j', 'c', 'k', 't', 'p', 'h', 'gl', 'gsg', 'ng', 'nd', 'ns', 'nZ', 'nt', 'dg', 'tl', 'lgs', 'ln', 'ld', 'lth', 'll', 'lmg', 'lms', 'lbs', 'lbh', 'rNp', 'lss', 'lZ', 'lk', 'lQ', 'mg', 'ml', 'mb', 'ms', 'mss', 'mZ', 'mc', 'mh', 'mN', 'bl', 'bp', 'ph', 'pN', 'sg', 'sd', 'sl', 'sb', 'Z', 'g', 'ss', '', 'kh', 'N', 'Ns', 'NZ', 'pb', 'pN', 'hn', 'hl', 'hm', 'hb', 'Q', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['ha', 'hu', 'hi', 'haa', 'hee', 'he', 'ho', '[?]', 'la', 'lu', 'li', 'laa', 'lee', 'le', 'lo', 'lwa', 'hha', 'hhu', 'hhi', 'hhaa', 'hhee', 'hhe', 'hho', 'hhwa', 'ma', 'mu', 'mi', 'maa', 'mee', 'me', 'mo', 'mwa', 'sza', 'szu', 'szi', 'szaa', 'szee', 'sze', 'szo', 'szwa', 'ra', 'ru', 'ri', 'raa', 'ree', 're', 'ro', 'rwa', 'sa', 'su', 'si', 'saa', 'see', 'se', 'so', 'swa', 'sha', 'shu', 'shi', 'shaa', 'shee', 'she', 'sho', 'shwa', 'qa', 'qu', 'qi', 'qaa', 'qee', 'qe', 'qo', '[?]', 'qwa', '[?]', 'qwi', 'qwaa', 'qwee', 'qwe', '[?]', '[?]', 'qha', 'qhu', 'qhi', 'qhaa', 'qhee', 'qhe', 'qho', '[?]', 'qhwa', '[?]', 'qhwi', 'qhwaa', 'qhwee', 'qhwe', '[?]', '[?]', 'ba', 'bu', 'bi', 'baa', 'bee', 'be', 'bo', 'bwa', 'va', 'vu', 'vi', 'vaa', 'vee', 've', 'vo', 'vwa', 'ta', 'tu', 'ti', 'taa', 'tee', 'te', 'to', 'twa', 'ca', 'cu', 'ci', 'caa', 'cee', 'ce', 'co', 'cwa', 'xa', 'xu', 'xi', 'xaa', 'xee', 'xe', 'xo', '[?]', 'xwa', '[?]', 'xwi', 'xwaa', 'xwee', 'xwe', '[?]', '[?]', 'na', 'nu', 'ni', 'naa', 'nee', 'ne', 'no', 'nwa', 'nya', 'nyu', 'nyi', 'nyaa', 'nyee', 'nye', 'nyo', 'nywa', '\'a', '\'u', '[?]', '\'aa', '\'ee', '\'e', '\'o', '\'wa', 'ka', 'ku', 'ki', 'kaa', 'kee', 'ke', 'ko', '[?]', 'kwa', '[?]', 'kwi', 'kwaa', 'kwee', 'kwe', '[?]', '[?]', 'kxa', 'kxu', 'kxi', 'kxaa', 'kxee', 'kxe', 'kxo', '[?]', 'kxwa', '[?]', 'kxwi', 'kxwaa', 'kxwee', 'kxwe', '[?]', '[?]', 'wa', 'wu', 'wi', 'waa', 'wee', 'we', 'wo', '[?]', '`a', '`u', '`i', '`aa', '`ee', '`e', '`o', '[?]', 'za', 'zu', 'zi', 'zaa', 'zee', 'ze', 'zo', 'zwa', 'zha', 'zhu', 'zhi', 'zhaa', 'zhee', 'zhe', 'zho', 'zhwa', 'ya', 'yu', 'yi', 'yaa', 'yee', 'ye', 'yo', '[?]', 'da', 'du', 'di', 'daa', 'dee', 'de', 'do', 'dwa', 'dda', 'ddu', 'ddi', 'ddaa', 'ddee', 'dde', 'ddo', 'ddwa'];
<?php return ['ja', 'ju', 'ji', 'jaa', 'jee', 'je', 'jo', 'jwa', 'ga', 'gu', 'gi', 'gaa', 'gee', 'ge', 'go', '[?]', 'gwa', '[?]', 'gwi', 'gwaa', 'gwee', 'gwe', '[?]', '[?]', 'gga', 'ggu', 'ggi', 'ggaa', 'ggee', 'gge', 'ggo', '[?]', 'tha', 'thu', 'thi', 'thaa', 'thee', 'the', 'tho', 'thwa', 'cha', 'chu', 'chi', 'chaa', 'chee', 'che', 'cho', 'chwa', 'pha', 'phu', 'phi', 'phaa', 'phee', 'phe', 'pho', 'phwa', 'tsa', 'tsu', 'tsi', 'tsaa', 'tsee', 'tse', 'tso', 'tswa', 'tza', 'tzu', 'tzi', 'tzaa', 'tzee', 'tze', 'tzo', '[?]', 'fa', 'fu', 'fi', 'faa', 'fee', 'fe', 'fo', 'fwa', 'pa', 'pu', 'pi', 'paa', 'pee', 'pe', 'po', 'pwa', 'rya', 'mya', 'fya', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', '.', ',', ';', ':', ':: ', '?', '//', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10+', '20+', '30+', '40+', '50+', '60+', '70+', '80+', '90+', '100+', '10,000+', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'e', 'i', 'o', 'u', 'v', 'ga', 'ka', 'ge', 'gi', 'go', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hu', 'hv', 'la', 'le', 'li', 'lo', 'lu', 'lv', 'ma', 'me', 'mi', 'mo', 'mu', 'na', 'hna', 'nah', 'ne', 'ni', 'no', 'nu', 'nv', 'qua', 'que', 'qui', 'quo', 'quu', 'quv', 'sa', 's', 'se', 'si', 'so', 'su', 'sv', 'da', 'ta', 'de', 'te', 'di', 'ti', 'do', 'du', 'dv', 'dla', 'tla', 'tle', 'tli', 'tlo', 'tlu', 'tlv', 'tsa', 'tse', 'tsi', 'tso', 'tsu', 'tsv', 'wa', 'we', 'wi', 'wo', 'wu', 'wv', 'ya', 'ye', 'yi', 'yo', 'yu', 'yv', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', 'e', 'aai', 'i', 'ii', 'o', 'oo', 'oo', 'ee', 'i', 'a', 'aa', 'we', 'we', 'wi', 'wi', 'wii', 'wii', 'wo', 'wo', 'woo', 'woo', 'woo', 'wa', 'wa', 'waa', 'waa', 'waa', 'ai', 'w', '\'', 't', 'k', 'sh', 's', 'n', 'w', 'n', '[?]', 'w', 'c', '?', 'l', 'en', 'in', 'on', 'an', 'pe', 'paai', 'pi', 'pii', 'po', 'poo', 'poo', 'hee', 'hi', 'pa', 'paa', 'pwe', 'pwe', 'pwi', 'pwi', 'pwii', 'pwii', 'pwo', 'pwo', 'pwoo', 'pwoo', 'pwa', 'pwa', 'pwaa', 'pwaa', 'pwaa', 'p', 'p', 'h', 'te', 'taai', 'ti', 'tii', 'to', 'too', 'too', 'dee', 'di', 'ta', 'taa', 'twe', 'twe', 'twi', 'twi', 'twii', 'twii', 'two', 'two', 'twoo', 'twoo', 'twa', 'twa', 'twaa', 'twaa', 'twaa', 't', 'tte', 'tti', 'tto', 'tta', 'ke', 'kaai', 'ki', 'kii', 'ko', 'koo', 'koo', 'ka', 'kaa', 'kwe', 'kwe', 'kwi', 'kwi', 'kwii', 'kwii', 'kwo', 'kwo', 'kwoo', 'kwoo', 'kwa', 'kwa', 'kwaa', 'kwaa', 'kwaa', 'k', 'kw', 'keh', 'kih', 'koh', 'kah', 'ce', 'caai', 'ci', 'cii', 'co', 'coo', 'coo', 'ca', 'caa', 'cwe', 'cwe', 'cwi', 'cwi', 'cwii', 'cwii', 'cwo', 'cwo', 'cwoo', 'cwoo', 'cwa', 'cwa', 'cwaa', 'cwaa', 'cwaa', 'c', 'th', 'me', 'maai', 'mi', 'mii', 'mo', 'moo', 'moo', 'ma', 'maa', 'mwe', 'mwe', 'mwi', 'mwi', 'mwii', 'mwii', 'mwo', 'mwo', 'mwoo', 'mwoo', 'mwa', 'mwa', 'mwaa', 'mwaa', 'mwaa', 'm', 'm', 'mh', 'm', 'm', 'ne', 'naai', 'ni', 'nii', 'no', 'noo', 'noo', 'na', 'naa', 'nwe', 'nwe', 'nwa', 'nwa', 'nwaa', 'nwaa', 'nwaa', 'n', 'ng', 'nh', 'le', 'laai', 'li', 'lii', 'lo', 'loo', 'loo', 'la', 'laa', 'lwe', 'lwe', 'lwi', 'lwi', 'lwii', 'lwii', 'lwo', 'lwo', 'lwoo', 'lwoo', 'lwa', 'lwa', 'lwaa', 'lwaa', 'l', 'l', 'l', 'se', 'saai', 'si', 'sii', 'so', 'soo', 'soo', 'sa', 'saa', 'swe', 'swe', 'swi', 'swi', 'swii', 'swii', 'swo', 'swo', 'swoo', 'swoo'];
<?php return ['swa', 'swa', 'swaa', 'swaa', 'swaa', 's', 's', 'sw', 's', 'sk', 'skw', 'sW', 'spwa', 'stwa', 'skwa', 'scwa', 'she', 'shi', 'shii', 'sho', 'shoo', 'sha', 'shaa', 'shwe', 'shwe', 'shwi', 'shwi', 'shwii', 'shwii', 'shwo', 'shwo', 'shwoo', 'shwoo', 'shwa', 'shwa', 'shwaa', 'shwaa', 'sh', 'ye', 'yaai', 'yi', 'yii', 'yo', 'yoo', 'yoo', 'ya', 'yaa', 'ywe', 'ywe', 'ywi', 'ywi', 'ywii', 'ywii', 'ywo', 'ywo', 'ywoo', 'ywoo', 'ywa', 'ywa', 'ywaa', 'ywaa', 'ywaa', 'y', 'y', 'y', 'yi', 're', 're', 'le', 'raai', 'ri', 'rii', 'ro', 'roo', 'lo', 'ra', 'raa', 'la', 'rwaa', 'rwaa', 'r', 'r', 'r', 'fe', 'faai', 'fi', 'fii', 'fo', 'foo', 'fa', 'faa', 'fwaa', 'fwaa', 'f', 'the', 'the', 'thi', 'thi', 'thii', 'thii', 'tho', 'thoo', 'tha', 'thaa', 'thwaa', 'thwaa', 'th', 'tthe', 'tthi', 'ttho', 'ttha', 'tth', 'tye', 'tyi', 'tyo', 'tya', 'he', 'hi', 'hii', 'ho', 'hoo', 'ha', 'haa', 'h', 'h', 'hk', 'qaai', 'qi', 'qii', 'qo', 'qoo', 'qa', 'qaa', 'q', 'tlhe', 'tlhi', 'tlho', 'tlha', 're', 'ri', 'ro', 'ra', 'ngaai', 'ngi', 'ngii', 'ngo', 'ngoo', 'nga', 'ngaa', 'ng', 'nng', 'she', 'shi', 'sho', 'sha', 'the', 'thi', 'tho', 'tha', 'th', 'lhi', 'lhii', 'lho', 'lhoo', 'lha', 'lhaa', 'lh', 'the', 'thi', 'thii', 'tho', 'thoo', 'tha', 'thaa', 'th', 'b', 'e', 'i', 'o', 'a', 'we', 'wi', 'wo', 'wa', 'ne', 'ni', 'no', 'na', 'ke', 'ki', 'ko', 'ka', 'he', 'hi', 'ho', 'ha', 'ghu', 'gho', 'ghe', 'ghee', 'ghi', 'gha', 'ru', 'ro', 're', 'ree', 'ri', 'ra', 'wu', 'wo', 'we', 'wee', 'wi', 'wa', 'hwu', 'hwo', 'hwe', 'hwee', 'hwi', 'hwa', 'thu', 'tho', 'the', 'thee', 'thi', 'tha', 'ttu', 'tto', 'tte', 'ttee', 'tti', 'tta', 'pu', 'po', 'pe', 'pee', 'pi', 'pa', 'p', 'gu', 'go', 'ge', 'gee', 'gi', 'ga', 'khu', 'kho', 'khe', 'khee', 'khi', 'kha', 'kku', 'kko', 'kke', 'kkee', 'kki'];
<?php return ['kka', 'kk', 'nu', 'no', 'ne', 'nee', 'ni', 'na', 'mu', 'mo', 'me', 'mee', 'mi', 'ma', 'yu', 'yo', 'ye', 'yee', 'yi', 'ya', 'ju', 'ju', 'jo', 'je', 'jee', 'ji', 'ji', 'ja', 'jju', 'jjo', 'jje', 'jjee', 'jji', 'jja', 'lu', 'lo', 'le', 'lee', 'li', 'la', 'dlu', 'dlo', 'dle', 'dlee', 'dli', 'dla', 'lhu', 'lho', 'lhe', 'lhee', 'lhi', 'lha', 'tlhu', 'tlho', 'tlhe', 'tlhee', 'tlhi', 'tlha', 'tlu', 'tlo', 'tle', 'tlee', 'tli', 'tla', 'zu', 'zo', 'ze', 'zee', 'zi', 'za', 'z', 'z', 'dzu', 'dzo', 'dze', 'dzee', 'dzi', 'dza', 'su', 'so', 'se', 'see', 'si', 'sa', 'shu', 'sho', 'she', 'shee', 'shi', 'sha', 'sh', 'tsu', 'tso', 'tse', 'tsee', 'tsi', 'tsa', 'chu', 'cho', 'che', 'chee', 'chi', 'cha', 'ttsu', 'ttso', 'ttse', 'ttsee', 'ttsi', 'ttsa', 'X', '.', 'qai', 'ngai', 'nngi', 'nngii', 'nngo', 'nngoo', 'nnga', 'nngaa', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', 'b', 'l', 'f', 's', 'n', 'h', 'd', 't', 'c', 'q', 'm', 'g', 'ng', 'z', 'r', 'a', 'o', 'u', 'e', 'i', 'ch', 'th', 'ph', 'p', 'x', 'p', '<', '>', '[?]', '[?]', '[?]', 'f', 'v', 'u', 'yr', 'y', 'w', 'th', 'th', 'a', 'o', 'ac', 'ae', 'o', 'o', 'o', 'oe', 'on', 'r', 'k', 'c', 'k', 'g', 'ng', 'g', 'g', 'w', 'h', 'h', 'h', 'h', 'n', 'n', 'n', 'i', 'e', 'j', 'g', 'ae', 'a', 'eo', 'p', 'z', 's', 's', 's', 'c', 'z', 't', 't', 'd', 'b', 'b', 'p', 'p', 'e', 'm', 'm', 'm', 'l', 'l', 'ng', 'ng', 'd', 'o', 'ear', 'ior', 'qu', 'qu', 'qu', 's', 'yr', 'yr', 'yr', 'q', 'x', '.', ':', '+', '17', '18', '19', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'k', 'kh', 'g', 'gh', 'ng', 'c', 'ch', 'j', 'jh', 'ny', 't', 'tth', 'd', 'ddh', 'nn', 't', 'th', 'd', 'dh', 'n', 'p', 'ph', 'b', 'bh', 'm', 'y', 'r', 'l', 'v', 'sh', 'ss', 's', 'h', 'l', 'q', 'a', 'aa', 'i', 'ii', 'u', 'uk', 'uu', 'uuv', 'ry', 'ryy', 'ly', 'lyy', 'e', 'ai', 'oo', 'oo', 'au', 'a', 'aa', 'aa', 'i', 'ii', 'y', 'yy', 'u', 'uu', 'ua', 'oe', 'ya', 'ie', 'e', 'ae', 'ai', 'oo', 'au', 'M', 'H', 'a`', '', '', '', 'r', '', '!', '', '', '', '', '', '.', ' // ', ':', '+', '++', ' * ', ' /// ', 'KR', '\'', '[?]', '[?]', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return [' @ ', ' ... ', ', ', '. ', ': ', ' // ', '', '-', ', ', '. ', '', '', '', '', '', '[?]', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'a', 'e', 'i', 'o', 'u', 'O', 'U', 'ee', 'n', 'ng', 'b', 'p', 'q', 'g', 'm', 'l', 's', 'sh', 't', 'd', 'ch', 'j', 'y', 'r', 'w', 'f', 'k', 'kha', 'ts', 'z', 'h', 'zr', 'lh', 'zh', 'ch', '-', 'e', 'i', 'o', 'u', 'O', 'U', 'ng', 'b', 'p', 'q', 'g', 'm', 't', 'd', 'ch', 'j', 'ts', 'y', 'w', 'k', 'g', 'h', 'jy', 'ny', 'dz', 'e', 'i', 'iy', 'U', 'u', 'ng', 'k', 'g', 'h', 'p', 'sh', 't', 'd', 'j', 'f', 'g', 'h', 'ts', 'z', 'r', 'ch', 'zh', 'i', 'k', 'r', 'f', 'zh', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'H', 'X', 'W', 'M', ' 3 ', ' 333 ', 'a', 'i', 'k', 'ng', 'c', 'tt', 'tth', 'dd', 'nn', 't', 'd', 'p', 'ph', 'ss', 'zh', 'z', 'a', 't', 'zh', 'gh', 'ng', 'c', 'jh', 'tta', 'ddh', 't', 'dh', 'ss', 'cy', 'zh', 'z', 'u', 'y', 'bh', '\'', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['A', 'AE', 'ae', 'B', 'C', 'D', 'D', 'E', 'e', 'i', 'J', 'K', 'L', 'M', 'N', 'O', '', 'O', '', 'O', 'Oe', 'Ou', '', '', 'P', 'R', 'R', 'T', 'U', 'u', 'u', 'm', 'V', 'W', 'Z', '', '', '', '', '', '', '', '', '', 'A', 'AE', 'B', 'B', 'D', 'E', 'E', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'N', 'O', 'Ou', 'P', 'R', 'T', 'U', 'W', 'a', 'a', 'a', 'ae', 'b', 'd', 'e', '', 'e', 'e', 'g', 'i', 'k', 'm', '', 'o', '', '', '', 'p', 't', 'u', 'u', 'm', 'v', '', 'b', 'g', 'd', 'f', '', 'i', 'r', 'u', 'v', 'b', 'g', 'r', 'f', '', '', 'b', 'd', 'f', 'm', 'n', 'p', 'r', 'r', 's', 't', 'z', 'g', '', '', '', '', '', 'p', '', '', 'b', 'd', 'f', 'g', 'k', 'l', 'm', 'n', 'p', 'r', 's', '', 'v', 'x', 'z', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['A', 'a', 'B', 'b', 'B', 'b', 'B', 'b', 'C', 'c', 'D', 'd', 'D', 'd', 'D', 'd', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'H', 'h', 'H', 'h', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'K', 'k', 'K', 'k', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'M', 'm', 'M', 'm', 'M', 'm', 'N', 'n', 'N', 'n', 'N', 'n', 'N', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'P', 'p', 'P', 'p', 'R', 'r', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'V', 'v', 'V', 'v', 'W', 'w', 'W', 'w', 'W', 'w', 'W', 'w', 'W', 'w', 'X', 'x', 'X', 'x', 'Y', 'y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 'h', 't', 'w', 'y', 'a', 's', 's', 's', 'Ss', 'd', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'Y', 'y', 'Y', 'y', 'Y', 'y', 'Y', 'y', 'LL', 'll', 'V', 'v', 'Y', 'y'];
<?php return ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'e', 'e', 'e', 'e', 'e', 'e', '[?]', '[?]', 'E', 'E', 'E', 'E', 'E', 'E', '[?]', '[?]', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'o', 'o', 'o', 'o', 'o', 'o', '[?]', '[?]', 'O', 'O', 'O', 'O', 'O', 'O', '[?]', '[?]', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', '[?]', 'U', '[?]', 'U', '[?]', 'U', '[?]', 'U', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'o', 'o', '[?]', '[?]', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'a', 'a', 'a', 'a', 'a', '[?]', 'a', 'a', 'A', 'A', 'A', 'A', 'A', '\'', 'i', '\'', '~', '"~', 'e', 'e', 'e', '[?]', 'e', 'e', 'E', 'E', 'E', 'E', 'E', '\'`', '\'\'', '\'~', 'i', 'i', 'i', 'i', '[?]', '[?]', 'i', 'i', 'I', 'I', 'I', 'I', '[?]', '`\'', '`\'', '`~', 'u', 'u', 'u', 'u', 'R', 'R', 'u', 'u', 'U', 'U', 'U', 'U', 'R', '"`', '"\'', '`', '[?]', '[?]', 'o', 'o', 'o', '[?]', 'o', 'o', 'O', 'O', 'O', 'O', 'O', '\'', '`', '[?]'];
<?php return [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '-', '-', '-', '-', '--', '--', '||', '_', '\'', '\'', ',', '\'', '"', '"', ',,', '"', '+', '++', '*', '*>', '.', '..', '...', '.', "\n",
    "\n\n",
    '', '', '', '', '', ' ', '%0', '%00', '\'', '\'\'', '\'\'\'', '`', '``', '```', '^', '<', '>', '*', '!!', '!?', '-', '_', '-', '^', '***', '--', '/', '-[', ']-', '??', '?!', '!?', '7', 'PP', '(]', '[)', '*', '[?]', '[?]', '[?]', '%', '~', '[?]', '[?]', '[?]', "''''",    // 0x57
    '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '0', 'i', '', '', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', 'n', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', '[?]', 'a', 'e', 'o', 'x', '[?]', 'h', 'k', 'l', 'm', 'n', 'p', 's', 't', '[?]', '[?]', '[?]', 'ECU', 'CL', 'Cr', 'Fr.', 'L.', 'mil', 'N', 'Pts', 'Rs', 'W', 'NS', 'D', 'EUR', 'K', 'T', 'Dr', 'Pf', 'P', 'G', 'A', 'UAH', 'C|', 'L', 'Sm', 'T', 'Rs', 'L', 'M', 'm', 'R', 'l', 'BTC', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ];
<?php return [' a/c ', ' a/s ', 'C', '', '', ' c/o ', ' c/u ', '', '', '', 'g', 'H', 'H', 'H', 'h', '', 'I', 'I', 'L', 'l', '', 'N', 'No. ', '', '', 'P', 'Q', 'R', 'R', 'R', '', '', '(sm)', 'TEL', '(tm)', '', 'Z', '', '', '', 'Z', '', 'K', 'A', 'B', 'C', 'e', 'e', 'E', 'F', 'F', 'M', 'o', '', '', '', '', 'i', '', 'FAX', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', 'D', 'd', 'e', 'i', 'j', '[?]', '[?]', '[?]', '[?]', 'F', '[?]', ' 1/7 ', ' 1/9 ', ' 1/10 ', ' 1/3 ', ' 2/3 ', ' 1/5 ', ' 2/5 ', ' 3/5 ', ' 4/5 ', ' 1/6 ', ' 5/6 ', ' 1/8 ', ' 3/8 ', ' 5/8 ', ' 7/8 ', ' 1/', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'L', 'C', 'D', 'M', 'i', 'ii', 'iii', 'iv', 'v', 'vi', 'vii', 'viii', 'ix', 'x', 'xi', 'xii', 'l', 'c', 'd', 'm', '(D', 'D)', '((|))', ')', '[?]', '[?]', '[?]', '[?]', '[?]', ' 0/3 ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '-', '|', '-', '|', '-', '|', '\\', '/', '\\', '/', '-', '-', '~', '~', '-', '|', '-', '|', '-', '-', '-', '|', '-', '|', '|', '-', '-', '-', '-', '-', '-', '|', '|', '|', '|', '|', '|', '|', '^', 'V', '\\', '=', 'V', '^', '-', '-', '|', '|', '-', '-', '|', '|', '=', '|', '=', '=', '|', '=', '|', '=', '=', '=', '=', '=', '=', '|', '=', '|', '=', '|', '\\', '/', '\\', '/', '=', '=', '~', '~', '|', '|', '-', '|', '-', '|', '-', '-', '-', '|', '-', '|', '|', '|', '|', '|', '|', '|', '-', '\\', '\\', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '-', '[?]', '[?]', '/', '\\', '*', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ':', '[?]', '[?]', '[?]', '[?]', '[?]', '~', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '<=', '>=', '<=', '>=', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '^', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '<', '> ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '(1)', '(2)', '(3)', '(4)', '(5)', '(6)', '(7)', '(8)', '(9)', '(10)', '(11)', '(12)', '(13)', '(14)', '(15)', '(16)', '(17)', '(18)', '(19)', '(20)', '1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.', '10.', '11.', '12.', '13.', '14.', '15.', '16.', '17.', '18.', '19.', '20.', '(a)', '(b)', '(c)', '(d)', '(e)', '(f)', '(g)', '(h)', '(i)', '(j)', '(k)', '(l)', '(m)', '(n)', '(o)', '(p)', '(q)', '(r)', '(s)', '(t)', '(u)', '(v)', '(w)', '(x)', '(y)', '(z)', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '0'];
<?php return ['-', '-', '|', '|', '-', '-', '|', '|', '-', '-', '|', '|', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '-', '-', '|', '|', '-', '|', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', '/', '\\', 'X', '-', '|', '-', '|', '-', '|', '-', '|', '-', '|', '-', '|', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '|', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '^', '^', '^', '^', '>', '>', '>', '>', '>', '>', 'V', 'V', 'V', 'V', '<', '<', '<', '<', '<', '<', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '#', '#', '#', '#', '#', '^', '^', '^', 'O', '#', '#', '#', '#', 'O', 'O', 'O', 'O', '/', '\\\\', '\\\\', '#', '#', '#', '#', '/'];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '#', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '*', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '|', '', '', '', '', '', '', '[?]', '[?]', '', '!', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[', '[?]', '<', '> ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return [' ', 'a', '1', 'b', '\'', 'k', '2', 'l', '@', 'c', 'i', 'f', '/', 'm', 's', 'p', '"', 'e', '3', 'h', '9', 'o', '6', 'r', '^', 'd', 'j', 'g', '>', 'n', 't', 'q', ',', '*', '5', '<', '-', 'u', '8', 'v', '.', '%', '[', '$', '+', 'x', '!', '&', ';', ':', '4', '\\', '0', 'z', '7', '(', '_', '?', 'w', ']', '#', 'y', ')', '=', '[d7]', '[d17]', '[d27]', '[d127]', '[d37]', '[d137]', '[d237]', '[d1237]', '[d47]', '[d147]', '[d247]', '[d1247]', '[d347]', '[d1347]', '[d2347]', '[d12347]', '[d57]', '[d157]', '[d257]', '[d1257]', '[d357]', '[d1357]', '[d2357]', '[d12357]', '[d457]', '[d1457]', '[d2457]', '[d12457]', '[d3457]', '[d13457]', '[d23457]', '[d123457]', '[d67]', '[d167]', '[d267]', '[d1267]', '[d367]', '[d1367]', '[d2367]', '[d12367]', '[d467]', '[d1467]', '[d2467]', '[d12467]', '[d3467]', '[d13467]', '[d23467]', '[d123467]', '[d567]', '[d1567]', '[d2567]', '[d12567]', '[d3567]', '[d13567]', '[d23567]', '[d123567]', '[d4567]', '[d14567]', '[d24567]', '[d124567]', '[d34567]', '[d134567]', '[d234567]', '[d1234567]', '[d8]', '[d18]', '[d28]', '[d128]', '[d38]', '[d138]', '[d238]', '[d1238]', '[d48]', '[d148]', '[d248]', '[d1248]', '[d348]', '[d1348]', '[d2348]', '[d12348]', '[d58]', '[d158]', '[d258]', '[d1258]', '[d358]', '[d1358]', '[d2358]', '[d12358]', '[d458]', '[d1458]', '[d2458]', '[d12458]', '[d3458]', '[d13458]', '[d23458]', '[d123458]', '[d68]', '[d168]', '[d268]', '[d1268]', '[d368]', '[d1368]', '[d2368]', '[d12368]', '[d468]', '[d1468]', '[d2468]', '[d12468]', '[d3468]', '[d13468]', '[d23468]', '[d123468]', '[d568]', '[d1568]', '[d2568]', '[d12568]', '[d3568]', '[d13568]', '[d23568]', '[d123568]', '[d4568]', '[d14568]', '[d24568]', '[d124568]', '[d34568]', '[d134568]', '[d234568]', '[d1234568]', '[d78]', '[d178]', '[d278]', '[d1278]', '[d378]', '[d1378]', '[d2378]', '[d12378]', '[d478]', '[d1478]', '[d2478]', '[d12478]', '[d3478]', '[d13478]', '[d23478]', '[d123478]', '[d578]', '[d1578]', '[d2578]', '[d12578]', '[d3578]', '[d13578]', '[d23578]', '[d123578]', '[d4578]', '[d14578]', '[d24578]', '[d124578]', '[d34578]', '[d134578]', '[d234578]', '[d1234578]', '[d678]', '[d1678]', '[d2678]', '[d12678]', '[d3678]', '[d13678]', '[d23678]', '[d123678]', '[d4678]', '[d14678]', '[d24678]', '[d124678]', '[d34678]', '[d134678]', '[d234678]', '[d1234678]', '[d5678]', '[d15678]', '[d25678]', '[d125678]', '[d35678]', '[d135678]', '[d235678]', '[d1235678]', '[d45678]', '[d145678]', '[d245678]', '[d1245678]', '[d345678]', '[d1345678]', '[d2345678]', '[d12345678]'];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '{', '} ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '::=', '==', '===', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'L', 'l', 'L', 'P', 'R', 'a', 't', 'H', 'h', 'K', 'k', 'Z', 'z', '', 'M', 'A', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['r', 'r.', '[?]', '[?]', '[?]', '[?]', 'T', 'T.', '[?]', 's', '[?]', '[]', '\\', '/', '[?]', '__', '[?]', '[?]', '>', '%', '[?]', '[?]', '>', '=', '[?]', '/', '-', '~', '\\', '/', '~', '~', '|-', '-|', '[?]', '[?]', '[?]', '[?]', '<=', '=>', '((', '))', '[?]', '[?]', '::', '[?]', '?', '\'', 'o', '.', ',', '.', ',', ';', '[?]', '[?]', '[?]', '[?]', '----', '------', 'x', '|', '[?]', '[?]', '=', ',', '"', '`--', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]'];
<?php return [' ', ', ', '. ', '"', '[JIS]', '"', '/', '0', '<', '> ', '<<', '>> ', '[', '] ', '{', '} ', '[(', ')] ', '@', 'X ', '[', '] ', '[[', ']] ', '((', ')) ', '[[', ']] ', '~ ', '``', '\'\'', ',,', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '', '', '', '', '', '', '~', '+', '+', '+', '+', '', '@', ' // ', '+10+', '+20+', '+30+', '[?]', '[?]', '[?]', '', '', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi',   // 0x57
    'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi',   // 0x61
    'di', 'tsu',   // 0x63
    'tsu',   // 0x64
    'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '"', '"', '[?]', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi',   // 0xb7
    'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi',   // 0xc1
    'di', 'tsu',   // 0xc3
    'tsu',   // 0xc4
    'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', 'ka', 'ke', 'va', 'vi', 've', 'vo', '', '', '"', '"', ];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', 'B', 'P', 'M', 'F', 'D', 'T', 'N', 'L', 'G', 'K', 'H', 'J', 'Q', 'X', 'ZH', 'CH', 'SH', 'R', 'Z', 'C', 'S', 'A', 'O', 'E', 'EH', 'AI', 'EI', 'AU', 'OU', 'AN', 'EN', 'ANG', 'ENG', 'ER', 'I', 'U', 'IU', 'V', 'NG', 'GN', '[?]', '[?]', '[?]', '[?]', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'dd', 'r', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'rh', 'm', 'b', 'bb', 'bs', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', 'a', 'ae', 'ya', 'yae', 'eo', 'e', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', 'yo', 'u', 'weo', 'we', 'wi', 'yu', 'eu', 'yi', 'i', '', 'nn', 'nd', 'ns', 'nZ', 'lgs', 'ld', 'lbs', 'lZ', 'lQ', 'mb', 'ms', 'mZ', 'mN', 'bg', '', 'bsg', 'bst', 'bj', 'bt', 'bN', 'bbN', 'sg', 'sn', 'sd', 'sb', 'sj', 'Z', '', 'N', 'Ns', 'NZ', 'pN', 'hh', 'Q', 'yo-ya', 'yo-yae', 'yo-i', 'yu-yeo', 'yu-ye', 'yu-i', 'U', 'U-i', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'BU', 'ZI', 'JI', 'GU', 'EE', 'ENN', 'OO', 'ONN', 'IR', 'ANN', 'INN', 'UNN', 'IM', 'NGG', 'AINN', 'AUNN', 'AM', 'OM', 'ONG', 'INNN', 'P', 'T', 'K', 'H', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['(g)', '(n)', '(d)', '(r)', '(m)', '(b)', '(s)', '()', '(j)', '(c)', '(k)', '(t)', '(p)', '(h)', '(ga)', '(na)', '(da)', '(ra)', '(ma)', '(ba)', '(sa)', '(a)', '(ja)', '(ca)', '(ka)', '(ta)', '(pa)', '(ha)', '(ju)', '[?]', '[?]', '[?]', '(1) ', '(2) ', '(3) ', '(4) ', '(5) ', '(6) ', '(7) ', '(8) ', '(9) ', '(10) ', '(Yue) ', '(Huo) ', '(Shui) ', '(Mu) ', '(Jin) ', '(Tu) ', '(Ri) ', '(Zhu) ', '(You) ', '(She) ', '(Ming) ', '(Te) ', '(Cai) ', '(Zhu) ', '(Lao) ', '(Dai) ', '(Hu) ', '(Xue) ', '(Jian) ', '(Qi) ', '(Zi) ', '(Xie) ', '(Ji) ', '(Xiu) ', '<<', '>>', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '(g)', '(n)', '(d)', '(r)', '(m)', '(b)', '(s)', '()', '(j)', '(c)', '(k)', '(t)', '(p)', '(h)', '(ga)', '(na)', '(da)', '(ra)', '(ma)', '(ba)', '(sa)', '(a)', '(ja)', '(ca)', '(ka)', '(ta)', '(pa)', '(ha)', '[?]', '[?]', '[?]', 'KIS ', '(1) ', '(2) ', '(3) ', '(4) ', '(5) ', '(6) ', '(7) ', '(8) ', '(9) ', '(10) ', '(Yue) ', '(Huo) ', '(Shui) ', '(Mu) ', '(Jin) ', '(Tu) ', '(Ri) ', '(Zhu) ', '(You) ', '(She) ', '(Ming) ', '(Te) ', '(Cai) ', '(Zhu) ', '(Lao) ', '(Mi) ', '(Nan) ', '(Nu) ', '(Shi) ', '(You) ', '(Yin) ', '(Zhu) ', '(Xiang) ', '(Xiu) ', '(Xie) ', '(Zheng) ', '(Shang) ', '(Zhong) ', '(Xia) ', '(Zuo) ', '(You) ', '(Yi) ', '(Zong) ', '(Xue) ', '(Jian) ', '(Qi) ', '(Zi) ', '(Xie) ', '(Ye) ', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '1M', '2M', '3M', '4M', '5M', '6M', '7M', '8M', '9M', '10M', '11M', '12M', 'Hg', 'erg', 'eV', 'LTD', 'a', 'i', 'u', 'u', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wi', 'we', 'wo'];
<?php return ['apartment', 'alpha', 'ampere', 'are', 'inning', 'inch', 'won', 'escudo', 'acre', 'ounce', 'ohm', 'kai-ri', 'carat', 'calorie', 'gallon', 'gamma', 'giga', 'guinea', 'curie', 'guilder', 'kilo', 'kilogram', 'kilometer', 'kilowatt', 'gram', 'gram ton', 'cruzeiro', 'krone', 'case', 'koruna', 'co-op', 'cycle', 'centime', 'shilling', 'centi', 'cent', 'dozen', 'desi', 'dollar', 'ton', 'nano', 'knot', 'heights', 'percent', 'parts', 'barrel', 'piaster', 'picul', 'pico', 'building', 'farad', 'feet', 'bushel', 'franc', 'hectare', 'peso', 'pfennig', 'hertz', 'pence', 'page', 'beta', 'point', 'volt', 'hon', 'pound', 'hall', 'horn', 'micro', 'mile', 'mach', 'mark', 'mansion', 'micron', 'milli', 'millibar', 'mega', 'megaton', 'meter', 'yard', 'yard', 'yuan', 'liter', 'lira', 'rupee', 'ruble', 'rem', 'roentgen', 'watt', '0h', '1h', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', '10h', '11h', '12h', '13h', '14h', '15h', '16h', '17h', '18h', '19h', '20h', '21h', '22h', '23h', '24h', 'hPa', 'da', 'AU', 'bar', 'oV', 'pc', 'dm', 'dm^2', 'dm^3', 'IU', 'Heisei', 'Syouwa', 'Taisyou', 'Meiji', 'Inc.', 'pA', 'nA', 'microamp', 'mA', 'kA', 'kB', 'MB', 'GB', 'cal', 'kcal', 'pF', 'nF', 'microFarad', 'microgram', 'mg', 'kg', 'Hz', 'kHz', 'MHz', 'GHz', 'THz', 'microliter', 'ml', 'dl', 'kl', 'fm', 'nm', 'micrometer', 'mm', 'cm', 'km', 'mm^2', 'cm^2', 'm^2', 'km^2', 'mm^3', 'cm^3', 'm^3', 'km^3', 'm/s', 'm/s^2', 'Pa', 'kPa', 'MPa', 'GPa', 'rad', 'rad/s', 'rad/s^2', 'ps', 'ns', 'microsecond', 'ms', 'pV', 'nV', 'microvolt', 'mV', 'kV', 'MV', 'pW', 'nW', 'microwatt', 'mW', 'kW', 'MW', 'kOhm', 'MOhm', 'a.m.', 'Bq', 'cc', 'cd', 'C/kg', 'Co.', 'dB', 'Gy', 'ha', 'HP', 'in', 'K.K.', 'KM', 'kt', 'lm', 'ln', 'log', 'lx', 'mb', 'mil', 'mol', 'pH', 'p.m.', 'PPM', 'PR', 'sr', 'Sv', 'Wb', '[?]', '[?]', '1d', '2d', '3d', '4d', '5d', '6d', '7d', '8d', '9d', '10d', '11d', '12d', '13d', '14d', '15d', '16d', '17d', '18d', '19d', '20d', '21d', '22d', '23d', '24d', '25d', '26d', '27d', '28d', '29d', '30d', '31d', 'gal'];
<?php return ['[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['Yi ', 'Ding ', 'Kao ', 'Qi ', 'Shang ', 'Xia ', '[?] ', 'Mo ', 'Zhang ', 'San ', 'Shang ', 'Xia ', 'Ji ', 'Bu ', 'Yu ', 'Mian ', 'Gai ', 'Chou ', 'Chou ', 'Zhuan ', 'Qie ', 'Pi ', 'Shi ', 'Shi ', 'Qiu ', 'Bing ', 'Ye ', 'Cong ', 'Dong ', 'Si ', 'Cheng ', 'Diu ', 'Qiu ', 'Liang ', 'Diu ', 'You ', 'Liang ', 'Yan ', 'Bing ', 'Sang ', 'Gun ', 'Jiu ', 'Ge ', 'Ya ', 'Qiang ', 'Zhong ', 'Ji ', 'Jie ', 'Feng ', 'Guan ', 'Chuan ', 'Chan ', 'Lin ', 'Zhuo ', 'Zhu ', 'Ha ', 'Wan ', 'Dan ', 'Wei ', 'Zhu ', 'Jing ', 'Li ', 'Ju ', 'Pie ', 'Fu ', 'Yi ', 'Yi ', 'Nai ', 'Shime ', 'Jiu ', 'Jiu ', 'Zhe ', 'Yao ', 'Yi ', '[?] ', 'Zhi ', 'Wu ', 'Zha ', 'Hu ', 'Fa ', 'Le ', 'Zhong ', 'Ping ', 'Pang ', 'Qiao ', 'Hu ', 'Guai ', 'Cheng ', 'Cheng ', 'Yi ', 'Yin ', '[?] ', 'Mie ', 'Jiu ', 'Qi ', 'Ye ', 'Xi ', 'Xiang ', 'Gai ', 'Diu ', 'Hal ', '[?] ', 'Shu ', 'Twul ', 'Shi ', 'Ji ', 'Nang ', 'Jia ', 'Kel ', 'Shi ', '[?] ', 'Ol ', 'Mai ', 'Luan ', 'Cal ', 'Ru ', 'Xue ', 'Yan ', 'Fu ', 'Sha ', 'Na ', 'Gan ', 'Sol ', 'El ', 'Cwul ', '[?] ', 'Gan ', 'Chi ', 'Gui ', 'Gan ', 'Luan ', 'Lin ', 'Yi ', 'Jue ', 'Liao ', 'Ma ', 'Yu ', 'Zheng ', 'Shi ', 'Shi ', 'Er ', 'Chu ', 'Yu ', 'Yu ', 'Yu ', 'Yun ', 'Hu ', 'Qi ', 'Wu ', 'Jing ', 'Si ', 'Sui ', 'Gen ', 'Gen ', 'Ya ', 'Xie ', 'Ya ', 'Qi ', 'Ya ', 'Ji ', 'Tou ', 'Wang ', 'Kang ', 'Ta ', 'Jiao ', 'Hai ', 'Yi ', 'Chan ', 'Heng ', 'Mu ', '[?] ', 'Xiang ', 'Jing ', 'Ting ', 'Liang ', 'Xiang ', 'Jing ', 'Ye ', 'Qin ', 'Bo ', 'You ', 'Xie ', 'Dan ', 'Lian ', 'Duo ', 'Wei ', 'Ren ', 'Ren ', 'Ji ', 'La ', 'Wang ', 'Yi ', 'Shi ', 'Ren ', 'Le ', 'Ding ', 'Ze ', 'Jin ', 'Pu ', 'Chou ', 'Ba ', 'Zhang ', 'Jin ', 'Jie ', 'Bing ', 'Reng ', 'Cong ', 'Fo ', 'San ', 'Lun ', 'Sya ', 'Cang ', 'Zi ', 'Shi ', 'Ta ', 'Zhang ', 'Fu ', 'Xian ', 'Xian ', 'Tuo ', 'Hong ', 'Tong ', 'Ren ', 'Qian ', 'Gan ', 'Yi ', 'Di ', 'Dai ', 'Ling ', 'Yi ', 'Chao ', 'Chang ', 'Sa ', '[?] ', 'Yi ', 'Mu ', 'Men ', 'Ren ', 'Jia ', 'Chao ', 'Yang ', 'Qian ', 'Zhong ', 'Pi ', 'Wan ', 'Wu ', 'Jian ', 'Jie ', 'Yao ', 'Feng ', 'Cang ', 'Ren ', 'Wang ', 'Fen ', 'Di ', 'Fang '];
<?php return ['Zhong ', 'Qi ', 'Pei ', 'Yu ', 'Diao ', 'Dun ', 'Wen ', 'Yi ', 'Xin ', 'Kang ', 'Yi ', 'Ji ', 'Ai ', 'Wu ', 'Ji ', 'Fu ', 'Fa ', 'Xiu ', 'Jin ', 'Bei ', 'Dan ', 'Fu ', 'Tang ', 'Zhong ', 'You ', 'Huo ', 'Hui ', 'Yu ', 'Cui ', 'Chuan ', 'San ', 'Wei ', 'Chuan ', 'Che ', 'Ya ', 'Xian ', 'Shang ', 'Chang ', 'Lun ', 'Cang ', 'Xun ', 'Xin ', 'Wei ', 'Zhu ', '[?] ', 'Xuan ', 'Nu ', 'Bo ', 'Gu ', 'Ni ', 'Ni ', 'Xie ', 'Ban ', 'Xu ', 'Ling ', 'Zhou ', 'Shen ', 'Qu ', 'Si ', 'Beng ', 'Si ', 'Jia ', 'Pi ', 'Yi ', 'Si ', 'Ai ', 'Zheng ', 'Dian ', 'Han ', 'Mai ', 'Dan ', 'Zhu ', 'Bu ', 'Qu ', 'Bi ', 'Shao ', 'Ci ', 'Wei ', 'Di ', 'Zhu ', 'Zuo ', 'You ', 'Yang ', 'Ti ', 'Zhan ', 'He ', 'Bi ', 'Tuo ', 'She ', 'Yu ', 'Yi ', 'Fo ', 'Zuo ', 'Kou ', 'Ning ', 'Tong ', 'Ni ', 'Xuan ', 'Qu ', 'Yong ', 'Wa ', 'Qian ', '[?] ', 'Ka ', '[?] ', 'Pei ', 'Huai ', 'He ', 'Lao ', 'Xiang ', 'Ge ', 'Yang ', 'Bai ', 'Fa ', 'Ming ', 'Jia ', 'Er ', 'Bing ', 'Ji ', 'Hen ', 'Huo ', 'Gui ', 'Quan ', 'Tiao ', 'Jiao ', 'Ci ', 'Yi ', 'Shi ', 'Xing ', 'Shen ', 'Tuo ', 'Kan ', 'Zhi ', 'Gai ', 'Lai ', 'Yi ', 'Chi ', 'Kua ', 'Guang ', 'Li ', 'Yin ', 'Shi ', 'Mi ', 'Zhu ', 'Xu ', 'You ', 'An ', 'Lu ', 'Mou ', 'Er ', 'Lun ', 'Tong ', 'Cha ', 'Chi ', 'Xun ', 'Gong ', 'Zhou ', 'Yi ', 'Ru ', 'Jian ', 'Xia ', 'Jia ', 'Zai ', 'Lu ', 'Ko ', 'Jiao ', 'Zhen ', 'Ce ', 'Qiao ', 'Kuai ', 'Chai ', 'Ning ', 'Nong ', 'Jin ', 'Wu ', 'Hou ', 'Jiong ', 'Cheng ', 'Zhen ', 'Zuo ', 'Chou ', 'Qin ', 'Lu ', 'Ju ', 'Shu ', 'Ting ', 'Shen ', 'Tuo ', 'Bo ', 'Nan ', 'Hao ', 'Bian ', 'Tui ', 'Yu ', 'Xi ', 'Cu ', 'E ', 'Qiu ', 'Xu ', 'Kuang ', 'Ku ', 'Wu ', 'Jun ', 'Yi ', 'Fu ', 'Lang ', 'Zu ', 'Qiao ', 'Li ', 'Yong ', 'Hun ', 'Jing ', 'Xian ', 'San ', 'Pai ', 'Su ', 'Fu ', 'Xi ', 'Li ', 'Fu ', 'Ping ', 'Bao ', 'Yu ', 'Si ', 'Xia ', 'Xin ', 'Xiu ', 'Yu ', 'Ti ', 'Che ', 'Chou ', '[?] ', 'Yan ', 'Lia ', 'Li ', 'Lai ', '[?] ', 'Jian ', 'Xiu ', 'Fu ', 'He ', 'Ju ', 'Xiao ', 'Pai ', 'Jian ', 'Biao ', 'Chu ', 'Fei ', 'Feng ', 'Ya ', 'An ', 'Bei ', 'Yu ', 'Xin ', 'Bi ', 'Jian '];
<?php return ['Chang ', 'Chi ', 'Bing ', 'Zan ', 'Yao ', 'Cui ', 'Lia ', 'Wan ', 'Lai ', 'Cang ', 'Zong ', 'Ge ', 'Guan ', 'Bei ', 'Tian ', 'Shu ', 'Shu ', 'Men ', 'Dao ', 'Tan ', 'Jue ', 'Chui ', 'Xing ', 'Peng ', 'Tang ', 'Hou ', 'Yi ', 'Qi ', 'Ti ', 'Gan ', 'Jing ', 'Jie ', 'Sui ', 'Chang ', 'Jie ', 'Fang ', 'Zhi ', 'Kong ', 'Juan ', 'Zong ', 'Ju ', 'Qian ', 'Ni ', 'Lun ', 'Zhuo ', 'Wei ', 'Luo ', 'Song ', 'Leng ', 'Hun ', 'Dong ', 'Zi ', 'Ben ', 'Wu ', 'Ju ', 'Nai ', 'Cai ', 'Jian ', 'Zhai ', 'Ye ', 'Zhi ', 'Sha ', 'Qing ', '[?] ', 'Ying ', 'Cheng ', 'Jian ', 'Yan ', 'Nuan ', 'Zhong ', 'Chun ', 'Jia ', 'Jie ', 'Wei ', 'Yu ', 'Bing ', 'Ruo ', 'Ti ', 'Wei ', 'Pian ', 'Yan ', 'Feng ', 'Tang ', 'Wo ', 'E ', 'Xie ', 'Che ', 'Sheng ', 'Kan ', 'Di ', 'Zuo ', 'Cha ', 'Ting ', 'Bei ', 'Ye ', 'Huang ', 'Yao ', 'Zhan ', 'Chou ', 'Yan ', 'You ', 'Jian ', 'Xu ', 'Zha ', 'Ci ', 'Fu ', 'Bi ', 'Zhi ', 'Zong ', 'Mian ', 'Ji ', 'Yi ', 'Xie ', 'Xun ', 'Si ', 'Duan ', 'Ce ', 'Zhen ', 'Ou ', 'Tou ', 'Tou ', 'Bei ', 'Za ', 'Lu ', 'Jie ', 'Wei ', 'Fen ', 'Chang ', 'Gui ', 'Sou ', 'Zhi ', 'Su ', 'Xia ', 'Fu ', 'Yuan ', 'Rong ', 'Li ', 'Ru ', 'Yun ', 'Gou ', 'Ma ', 'Bang ', 'Dian ', 'Tang ', 'Hao ', 'Jie ', 'Xi ', 'Shan ', 'Qian ', 'Jue ', 'Cang ', 'Chu ', 'San ', 'Bei ', 'Xiao ', 'Yong ', 'Yao ', 'Tan ', 'Suo ', 'Yang ', 'Fa ', 'Bing ', 'Jia ', 'Dai ', 'Zai ', 'Tang ', '[?] ', 'Bin ', 'Chu ', 'Nuo ', 'Can ', 'Lei ', 'Cui ', 'Yong ', 'Zao ', 'Zong ', 'Peng ', 'Song ', 'Ao ', 'Chuan ', 'Yu ', 'Zhai ', 'Cou ', 'Shang ', 'Qiang ', 'Jing ', 'Chi ', 'Sha ', 'Han ', 'Zhang ', 'Qing ', 'Yan ', 'Di ', 'Xi ', 'Lu ', 'Bei ', 'Piao ', 'Jin ', 'Lian ', 'Lu ', 'Man ', 'Qian ', 'Xian ', 'Tan ', 'Ying ', 'Dong ', 'Zhuan ', 'Xiang ', 'Shan ', 'Qiao ', 'Jiong ', 'Tui ', 'Zun ', 'Pu ', 'Xi ', 'Lao ', 'Chang ', 'Guang ', 'Liao ', 'Qi ', 'Deng ', 'Chan ', 'Wei ', 'Ji ', 'Fan ', 'Hui ', 'Chuan ', 'Jian ', 'Dan ', 'Jiao ', 'Jiu ', 'Seng ', 'Fen ', 'Xian ', 'Jue ', 'E ', 'Jiao ', 'Jian ', 'Tong ', 'Lin ', 'Bo ', 'Gu ', '[?] ', 'Su ', 'Xian ', 'Jiang ', 'Min ', 'Ye ', 'Jin ', 'Jia ', 'Qiao ', 'Pi ', 'Feng ', 'Zhou ', 'Ai ', 'Sai '];
<?php return ['Yi ', 'Jun ', 'Nong ', 'Chan ', 'Yi ', 'Dang ', 'Jing ', 'Xuan ', 'Kuai ', 'Jian ', 'Chu ', 'Dan ', 'Jiao ', 'Sha ', 'Zai ', '[?] ', 'Bin ', 'An ', 'Ru ', 'Tai ', 'Chou ', 'Chai ', 'Lan ', 'Ni ', 'Jin ', 'Qian ', 'Meng ', 'Wu ', 'Ning ', 'Qiong ', 'Ni ', 'Chang ', 'Lie ', 'Lei ', 'Lu ', 'Kuang ', 'Bao ', 'Du ', 'Biao ', 'Zan ', 'Zhi ', 'Si ', 'You ', 'Hao ', 'Chen ', 'Chen ', 'Li ', 'Teng ', 'Wei ', 'Long ', 'Chu ', 'Chan ', 'Rang ', 'Shu ', 'Hui ', 'Li ', 'Luo ', 'Zan ', 'Nuo ', 'Tang ', 'Yan ', 'Lei ', 'Nang ', 'Er ', 'Wu ', 'Yun ', 'Zan ', 'Yuan ', 'Xiong ', 'Chong ', 'Zhao ', 'Xiong ', 'Xian ', 'Guang ', 'Dui ', 'Ke ', 'Dui ', 'Mian ', 'Tu ', 'Chang ', 'Er ', 'Dui ', 'Er ', 'Xin ', 'Tu ', 'Si ', 'Yan ', 'Yan ', 'Shi ', 'Shi ', 'Dang ', 'Qian ', 'Dou ', 'Fen ', 'Mao ', 'Shen ', 'Dou ', 'Bai ', 'Jing ', 'Li ', 'Huang ', 'Ru ', 'Wang ', 'Nei ', 'Quan ', 'Liang ', 'Yu ', 'Ba ', 'Gong ', 'Liu ', 'Xi ', '[?] ', 'Lan ', 'Gong ', 'Tian ', 'Guan ', 'Xing ', 'Bing ', 'Qi ', 'Ju ', 'Dian ', 'Zi ', 'Ppwun ', 'Yang ', 'Jian ', 'Shou ', 'Ji ', 'Yi ', 'Ji ', 'Chan ', 'Jiong ', 'Mao ', 'Ran ', 'Nei ', 'Yuan ', 'Mao ', 'Gang ', 'Ran ', 'Ce ', 'Jiong ', 'Ce ', 'Zai ', 'Gua ', 'Jiong ', 'Mao ', 'Zhou ', 'Mou ', 'Gou ', 'Xu ', 'Mian ', 'Mi ', 'Rong ', 'Yin ', 'Xie ', 'Kan ', 'Jun ', 'Nong ', 'Yi ', 'Mi ', 'Shi ', 'Guan ', 'Meng ', 'Zhong ', 'Ju ', 'Yuan ', 'Ming ', 'Kou ', 'Lam ', 'Fu ', 'Xie ', 'Mi ', 'Bing ', 'Dong ', 'Tai ', 'Gang ', 'Feng ', 'Bing ', 'Hu ', 'Chong ', 'Jue ', 'Hu ', 'Kuang ', 'Ye ', 'Leng ', 'Pan ', 'Fu ', 'Min ', 'Dong ', 'Xian ', 'Lie ', 'Xia ', 'Jian ', 'Jing ', 'Shu ', 'Mei ', 'Tu ', 'Qi ', 'Gu ', 'Zhun ', 'Song ', 'Jing ', 'Liang ', 'Qing ', 'Diao ', 'Ling ', 'Dong ', 'Gan ', 'Jian ', 'Yin ', 'Cou ', 'Yi ', 'Li ', 'Cang ', 'Ming ', 'Zhuen ', 'Cui ', 'Si ', 'Duo ', 'Jin ', 'Lin ', 'Lin ', 'Ning ', 'Xi ', 'Du ', 'Ji ', 'Fan ', 'Fan ', 'Fan ', 'Feng ', 'Ju ', 'Chu ', 'Tako ', 'Feng ', 'Mok ', 'Ci ', 'Fu ', 'Feng ', 'Ping ', 'Feng ', 'Kai ', 'Huang ', 'Kai ', 'Gan ', 'Deng ', 'Ping ', 'Qu ', 'Xiong ', 'Kuai ', 'Tu ', 'Ao ', 'Chu ', 'Ji ', 'Dang ', 'Han ', 'Han ', 'Zao '];
<?php return ['Dao ', 'Diao ', 'Dao ', 'Ren ', 'Ren ', 'Chuang ', 'Fen ', 'Qie ', 'Yi ', 'Ji ', 'Kan ', 'Qian ', 'Cun ', 'Chu ', 'Wen ', 'Ji ', 'Dan ', 'Xing ', 'Hua ', 'Wan ', 'Jue ', 'Li ', 'Yue ', 'Lie ', 'Liu ', 'Ze ', 'Gang ', 'Chuang ', 'Fu ', 'Chu ', 'Qu ', 'Ju ', 'Shan ', 'Min ', 'Ling ', 'Zhong ', 'Pan ', 'Bie ', 'Jie ', 'Jie ', 'Bao ', 'Li ', 'Shan ', 'Bie ', 'Chan ', 'Jing ', 'Gua ', 'Gen ', 'Dao ', 'Chuang ', 'Kui ', 'Ku ', 'Duo ', 'Er ', 'Zhi ', 'Shua ', 'Quan ', 'Cha ', 'Ci ', 'Ke ', 'Jie ', 'Gui ', 'Ci ', 'Gui ', 'Kai ', 'Duo ', 'Ji ', 'Ti ', 'Jing ', 'Lou ', 'Gen ', 'Ze ', 'Yuan ', 'Cuo ', 'Xue ', 'Ke ', 'La ', 'Qian ', 'Cha ', 'Chuang ', 'Gua ', 'Jian ', 'Cuo ', 'Li ', 'Ti ', 'Fei ', 'Pou ', 'Chan ', 'Qi ', 'Chuang ', 'Zi ', 'Gang ', 'Wan ', 'Bo ', 'Ji ', 'Duo ', 'Qing ', 'Yan ', 'Zhuo ', 'Jian ', 'Ji ', 'Bo ', 'Yan ', 'Ju ', 'Huo ', 'Sheng ', 'Jian ', 'Duo ', 'Duan ', 'Wu ', 'Gua ', 'Fu ', 'Sheng ', 'Jian ', 'Ge ', 'Zha ', 'Kai ', 'Chuang ', 'Juan ', 'Chan ', 'Tuan ', 'Lu ', 'Li ', 'Fou ', 'Shan ', 'Piao ', 'Kou ', 'Jiao ', 'Gua ', 'Qiao ', 'Jue ', 'Hua ', 'Zha ', 'Zhuo ', 'Lian ', 'Ju ', 'Pi ', 'Liu ', 'Gui ', 'Jiao ', 'Gui ', 'Jian ', 'Jian ', 'Tang ', 'Huo ', 'Ji ', 'Jian ', 'Yi ', 'Jian ', 'Zhi ', 'Chan ', 'Cuan ', 'Mo ', 'Li ', 'Zhu ', 'Li ', 'Ya ', 'Quan ', 'Ban ', 'Gong ', 'Jia ', 'Wu ', 'Mai ', 'Lie ', 'Jin ', 'Keng ', 'Xie ', 'Zhi ', 'Dong ', 'Zhu ', 'Nu ', 'Jie ', 'Qu ', 'Shao ', 'Yi ', 'Zhu ', 'Miao ', 'Li ', 'Jing ', 'Lao ', 'Lao ', 'Juan ', 'Kou ', 'Yang ', 'Wa ', 'Xiao ', 'Mou ', 'Kuang ', 'Jie ', 'Lie ', 'He ', 'Shi ', 'Ke ', 'Jing ', 'Hao ', 'Bo ', 'Min ', 'Chi ', 'Lang ', 'Yong ', 'Yong ', 'Mian ', 'Ke ', 'Xun ', 'Juan ', 'Qing ', 'Lu ', 'Pou ', 'Meng ', 'Lai ', 'Le ', 'Kai ', 'Mian ', 'Dong ', 'Xu ', 'Xu ', 'Kan ', 'Wu ', 'Yi ', 'Xun ', 'Weng ', 'Sheng ', 'Lao ', 'Mu ', 'Lu ', 'Piao ', 'Shi ', 'Ji ', 'Qin ', 'Qiang ', 'Jiao ', 'Quan ', 'Yang ', 'Yi ', 'Jue ', 'Fan ', 'Juan ', 'Tong ', 'Ju ', 'Dan ', 'Xie ', 'Mai ', 'Xun ', 'Xun ', 'Lu ', 'Li ', 'Che ', 'Rang ', 'Quan ', 'Bao ', 'Shao ', 'Yun ', 'Jiu ', 'Bao ', 'Gou ', 'Wu '];
<?php return ['Yun ', 'Mwun ', 'Nay ', 'Gai ', 'Gai ', 'Bao ', 'Cong ', '[?] ', 'Xiong ', 'Peng ', 'Ju ', 'Tao ', 'Ge ', 'Pu ', 'An ', 'Pao ', 'Fu ', 'Gong ', 'Da ', 'Jiu ', 'Qiong ', 'Bi ', 'Hua ', 'Bei ', 'Nao ', 'Chi ', 'Fang ', 'Jiu ', 'Yi ', 'Za ', 'Jiang ', 'Kang ', 'Jiang ', 'Kuang ', 'Hu ', 'Xia ', 'Qu ', 'Bian ', 'Gui ', 'Qie ', 'Zang ', 'Kuang ', 'Fei ', 'Hu ', 'Tou ', 'Gui ', 'Gui ', 'Hui ', 'Dan ', 'Gui ', 'Lian ', 'Lian ', 'Suan ', 'Du ', 'Jiu ', 'Qu ', 'Xi ', 'Pi ', 'Qu ', 'Yi ', 'Qia ', 'Yan ', 'Bian ', 'Ni ', 'Qu ', 'Shi ', 'Xin ', 'Qian ', 'Nian ', 'Sa ', 'Zu ', 'Sheng ', 'Wu ', 'Hui ', 'Ban ', 'Shi ', 'Xi ', 'Wan ', 'Hua ', 'Xie ', 'Wan ', 'Bei ', 'Zu ', 'Zhuo ', 'Xie ', 'Dan ', 'Mai ', 'Nan ', 'Dan ', 'Ji ', 'Bo ', 'Shuai ', 'Bu ', 'Kuang ', 'Bian ', 'Bu ', 'Zhan ', 'Qia ', 'Lu ', 'You ', 'Lu ', 'Xi ', 'Gua ', 'Wo ', 'Xie ', 'Jie ', 'Jie ', 'Wei ', 'Ang ', 'Qiong ', 'Zhi ', 'Mao ', 'Yin ', 'Wei ', 'Shao ', 'Ji ', 'Que ', 'Luan ', 'Shi ', 'Juan ', 'Xie ', 'Xu ', 'Jin ', 'Que ', 'Wu ', 'Ji ', 'E ', 'Qing ', 'Xi ', '[?] ', 'Han ', 'Zhan ', 'E ', 'Ting ', 'Li ', 'Zhe ', 'Han ', 'Li ', 'Ya ', 'Ya ', 'Yan ', 'She ', 'Zhi ', 'Zha ', 'Pang ', '[?] ', 'He ', 'Ya ', 'Zhi ', 'Ce ', 'Pang ', 'Ti ', 'Li ', 'She ', 'Hou ', 'Ting ', 'Zui ', 'Cuo ', 'Fei ', 'Yuan ', 'Ce ', 'Yuan ', 'Xiang ', 'Yan ', 'Li ', 'Jue ', 'Sha ', 'Dian ', 'Chu ', 'Jiu ', 'Qin ', 'Ao ', 'Gui ', 'Yan ', 'Si ', 'Li ', 'Chang ', 'Lan ', 'Li ', 'Yan ', 'Yan ', 'Yuan ', 'Si ', 'Gong ', 'Lin ', 'Qiu ', 'Qu ', 'Qu ', 'Uk ', 'Lei ', 'Du ', 'Xian ', 'Zhuan ', 'San ', 'Can ', 'Can ', 'Can ', 'Can ', 'Ai ', 'Dai ', 'You ', 'Cha ', 'Ji ', 'You ', 'Shuang ', 'Fan ', 'Shou ', 'Guai ', 'Ba ', 'Fa ', 'Ruo ', 'Shi ', 'Shu ', 'Zhuo ', 'Qu ', 'Shou ', 'Bian ', 'Xu ', 'Jia ', 'Pan ', 'Sou ', 'Gao ', 'Wei ', 'Sou ', 'Die ', 'Rui ', 'Cong ', 'Kou ', 'Gu ', 'Ju ', 'Ling ', 'Gua ', 'Tao ', 'Kou ', 'Zhi ', 'Jiao ', 'Zhao ', 'Ba ', 'Ding ', 'Ke ', 'Tai ', 'Chi ', 'Shi ', 'You ', 'Qiu ', 'Po ', 'Xie ', 'Hao ', 'Si ', 'Tan ', 'Chi ', 'Le ', 'Diao ', 'Ji ', '[?] ', 'Hong '];
<?php return ['Mie ', 'Xu ', 'Mang ', 'Chi ', 'Ge ', 'Xuan ', 'Yao ', 'Zi ', 'He ', 'Ji ', 'Diao ', 'Cun ', 'Tong ', 'Ming ', 'Hou ', 'Li ', 'Tu ', 'Xiang ', 'Zha ', 'Xia ', 'Ye ', 'Lu ', 'A ', 'Ma ', 'Ou ', 'Xue ', 'Yi ', 'Jun ', 'Chou ', 'Lin ', 'Tun ', 'Yin ', 'Fei ', 'Bi ', 'Qin ', 'Qin ', 'Jie ', 'Bu ', 'Fou ', 'Ba ', 'Dun ', 'Fen ', 'E ', 'Han ', 'Ting ', 'Hang ', 'Shun ', 'Qi ', 'Hong ', 'Zhi ', 'Shen ', 'Wu ', 'Wu ', 'Chao ', 'Ne ', 'Xue ', 'Xi ', 'Chui ', 'Dou ', 'Wen ', 'Hou ', 'Ou ', 'Wu ', 'Gao ', 'Ya ', 'Jun ', 'Lu ', 'E ', 'Ge ', 'Mei ', 'Ai ', 'Qi ', 'Cheng ', 'Wu ', 'Gao ', 'Fu ', 'Jiao ', 'Hong ', 'Chi ', 'Sheng ', 'Ne ', 'Tun ', 'Fu ', 'Yi ', 'Dai ', 'Ou ', 'Li ', 'Bai ', 'Yuan ', 'Kuai ', '[?] ', 'Qiang ', 'Wu ', 'E ', 'Shi ', 'Quan ', 'Pen ', 'Wen ', 'Ni ', 'M ', 'Ling ', 'Ran ', 'You ', 'Di ', 'Zhou ', 'Shi ', 'Zhou ', 'Tie ', 'Xi ', 'Yi ', 'Qi ', 'Ping ', 'Zi ', 'Gu ', 'Zi ', 'Wei ', 'Xu ', 'He ', 'Nao ', 'Xia ', 'Pei ', 'Yi ', 'Xiao ', 'Shen ', 'Hu ', 'Ming ', 'Da ', 'Qu ', 'Ju ', 'Gem ', 'Za ', 'Tuo ', 'Duo ', 'Pou ', 'Pao ', 'Bi ', 'Fu ', 'Yang ', 'He ', 'Zha ', 'He ', 'Hai ', 'Jiu ', 'Yong ', 'Fu ', 'Que ', 'Zhou ', 'Wa ', 'Ka ', 'Gu ', 'Ka ', 'Zuo ', 'Bu ', 'Long ', 'Dong ', 'Ning ', 'Tha ', 'Si ', 'Xian ', 'Huo ', 'Qi ', 'Er ', 'E ', 'Guang ', 'Zha ', 'Xi ', 'Yi ', 'Lie ', 'Zi ', 'Mie ', 'Mi ', 'Zhi ', 'Yao ', 'Ji ', 'Zhou ', 'Ge ', 'Shuai ', 'Zan ', 'Xiao ', 'Ke ', 'Hui ', 'Kua ', 'Huai ', 'Tao ', 'Xian ', 'E ', 'Xuan ', 'Xiu ', 'Wai ', 'Yan ', 'Lao ', 'Yi ', 'Ai ', 'Pin ', 'Shen ', 'Tong ', 'Hong ', 'Xiong ', 'Chi ', 'Wa ', 'Ha ', 'Zai ', 'Yu ', 'Di ', 'Pai ', 'Xiang ', 'Ai ', 'Hen ', 'Kuang ', 'Ya ', 'Da ', 'Xiao ', 'Bi ', 'Yue ', '[?] ', 'Hua ', 'Sasou ', 'Kuai ', 'Duo ', '[?] ', 'Ji ', 'Nong ', 'Mou ', 'Yo ', 'Hao ', 'Yuan ', 'Long ', 'Pou ', 'Mang ', 'Ge ', 'E ', 'Chi ', 'Shao ', 'Li ', 'Na ', 'Zu ', 'He ', 'Ku ', 'Xiao ', 'Xian ', 'Lao ', 'Bo ', 'Zhe ', 'Zha ', 'Liang ', 'Ba ', 'Mie ', 'Le ', 'Sui ', 'Fou ', 'Bu ', 'Han ', 'Heng ', 'Geng ', 'Shuo ', 'Ge '];
<?php return ['You ', 'Yan ', 'Gu ', 'Gu ', 'Bai ', 'Han ', 'Suo ', 'Chun ', 'Yi ', 'Ai ', 'Jia ', 'Tu ', 'Xian ', 'Huan ', 'Li ', 'Xi ', 'Tang ', 'Zuo ', 'Qiu ', 'Che ', 'Wu ', 'Zao ', 'Ya ', 'Dou ', 'Qi ', 'Di ', 'Qin ', 'Ma ', 'Mal ', 'Hong ', 'Dou ', 'Kes ', 'Lao ', 'Liang ', 'Suo ', 'Zao ', 'Huan ', 'Lang ', 'Sha ', 'Ji ', 'Zuo ', 'Wo ', 'Feng ', 'Yin ', 'Hu ', 'Qi ', 'Shou ', 'Wei ', 'Shua ', 'Chang ', 'Er ', 'Li ', 'Qiang ', 'An ', 'Jie ', 'Yo ', 'Nian ', 'Yu ', 'Tian ', 'Lai ', 'Sha ', 'Xi ', 'Tuo ', 'Hu ', 'Ai ', 'Zhou ', 'Nou ', 'Ken ', 'Zhuo ', 'Zhuo ', 'Shang ', 'Di ', 'Heng ', 'Lan ', 'A ', 'Xiao ', 'Xiang ', 'Tun ', 'Wu ', 'Wen ', 'Cui ', 'Sha ', 'Hu ', 'Qi ', 'Qi ', 'Tao ', 'Dan ', 'Dan ', 'Ye ', 'Zi ', 'Bi ', 'Cui ', 'Chuo ', 'He ', 'Ya ', 'Qi ', 'Zhe ', 'Pei ', 'Liang ', 'Xian ', 'Pi ', 'Sha ', 'La ', 'Ze ', 'Qing ', 'Gua ', 'Pa ', 'Zhe ', 'Se ', 'Zhuan ', 'Nie ', 'Guo ', 'Luo ', 'Yan ', 'Di ', 'Quan ', 'Tan ', 'Bo ', 'Ding ', 'Lang ', 'Xiao ', '[?] ', 'Tang ', 'Chi ', 'Ti ', 'An ', 'Jiu ', 'Dan ', 'Ke ', 'Yong ', 'Wei ', 'Nan ', 'Shan ', 'Yu ', 'Zhe ', 'La ', 'Jie ', 'Hou ', 'Han ', 'Die ', 'Zhou ', 'Chai ', 'Wai ', 'Re ', 'Yu ', 'Yin ', 'Zan ', 'Yao ', 'Wo ', 'Mian ', 'Hu ', 'Yun ', 'Chuan ', 'Hui ', 'Huan ', 'Huan ', 'Xi ', 'He ', 'Ji ', 'Kui ', 'Zhong ', 'Wei ', 'Sha ', 'Xu ', 'Huang ', 'Du ', 'Nie ', 'Xuan ', 'Liang ', 'Yu ', 'Sang ', 'Chi ', 'Qiao ', 'Yan ', 'Dan ', 'Pen ', 'Can ', 'Li ', 'Yo ', 'Zha ', 'Wei ', 'Miao ', 'Ying ', 'Pen ', 'Phos ', 'Kui ', 'Xi ', 'Yu ', 'Jie ', 'Lou ', 'Ku ', 'Sao ', 'Huo ', 'Ti ', 'Yao ', 'He ', 'A ', 'Xiu ', 'Qiang ', 'Se ', 'Yong ', 'Su ', 'Hong ', 'Xie ', 'Yi ', 'Suo ', 'Ma ', 'Cha ', 'Hai ', 'Ke ', 'Ta ', 'Sang ', 'Tian ', 'Ru ', 'Sou ', 'Wa ', 'Ji ', 'Pang ', 'Wu ', 'Xian ', 'Shi ', 'Ge ', 'Zi ', 'Jie ', 'Luo ', 'Weng ', 'Wa ', 'Si ', 'Chi ', 'Hao ', 'Suo ', 'Jia ', 'Hai ', 'Suo ', 'Qin ', 'Nie ', 'He ', 'Cis ', 'Sai ', 'Ng ', 'Ge ', 'Na ', 'Dia ', 'Ai ', '[?] ', 'Tong ', 'Bi ', 'Ao ', 'Ao ', 'Lian ', 'Cui ', 'Zhe ', 'Mo ', 'Sou ', 'Sou ', 'Tan '];
<?php return ['Di ', 'Qi ', 'Jiao ', 'Chong ', 'Jiao ', 'Kai ', 'Tan ', 'San ', 'Cao ', 'Jia ', 'Ai ', 'Xiao ', 'Piao ', 'Lou ', 'Ga ', 'Gu ', 'Xiao ', 'Hu ', 'Hui ', 'Guo ', 'Ou ', 'Xian ', 'Ze ', 'Chang ', 'Xu ', 'Po ', 'De ', 'Ma ', 'Ma ', 'Hu ', 'Lei ', 'Du ', 'Ga ', 'Tang ', 'Ye ', 'Beng ', 'Ying ', 'Saai ', 'Jiao ', 'Mi ', 'Xiao ', 'Hua ', 'Mai ', 'Ran ', 'Zuo ', 'Peng ', 'Lao ', 'Xiao ', 'Ji ', 'Zhu ', 'Chao ', 'Kui ', 'Zui ', 'Xiao ', 'Si ', 'Hao ', 'Fu ', 'Liao ', 'Qiao ', 'Xi ', 'Xiu ', 'Tan ', 'Tan ', 'Mo ', 'Xun ', 'E ', 'Zun ', 'Fan ', 'Chi ', 'Hui ', 'Zan ', 'Chuang ', 'Cu ', 'Dan ', 'Yu ', 'Tun ', 'Cheng ', 'Jiao ', 'Ye ', 'Xi ', 'Qi ', 'Hao ', 'Lian ', 'Xu ', 'Deng ', 'Hui ', 'Yin ', 'Pu ', 'Jue ', 'Qin ', 'Xun ', 'Nie ', 'Lu ', 'Si ', 'Yan ', 'Ying ', 'Da ', 'Dan ', 'Yu ', 'Zhou ', 'Jin ', 'Nong ', 'Yue ', 'Hui ', 'Qi ', 'E ', 'Zao ', 'Yi ', 'Shi ', 'Jiao ', 'Yuan ', 'Ai ', 'Yong ', 'Jue ', 'Kuai ', 'Yu ', 'Pen ', 'Dao ', 'Ge ', 'Xin ', 'Dun ', 'Dang ', 'Sin ', 'Sai ', 'Pi ', 'Pi ', 'Yin ', 'Zui ', 'Ning ', 'Di ', 'Lan ', 'Ta ', 'Huo ', 'Ru ', 'Hao ', 'Xia ', 'Ya ', 'Duo ', 'Xi ', 'Chou ', 'Ji ', 'Jin ', 'Hao ', 'Ti ', 'Chang ', '[?] ', '[?] ', 'Ca ', 'Ti ', 'Lu ', 'Hui ', 'Bo ', 'You ', 'Nie ', 'Yin ', 'Hu ', 'Mo ', 'Huang ', 'Zhe ', 'Li ', 'Liu ', 'Haai ', 'Nang ', 'Xiao ', 'Mo ', 'Yan ', 'Li ', 'Lu ', 'Long ', 'Fu ', 'Dan ', 'Chen ', 'Pin ', 'Pi ', 'Xiang ', 'Huo ', 'Mo ', 'Xi ', 'Duo ', 'Ku ', 'Yan ', 'Chan ', 'Ying ', 'Rang ', 'Dian ', 'La ', 'Ta ', 'Xiao ', 'Jiao ', 'Chuo ', 'Huan ', 'Huo ', 'Zhuan ', 'Nie ', 'Xiao ', 'Ca ', 'Li ', 'Chan ', 'Chai ', 'Li ', 'Yi ', 'Luo ', 'Nang ', 'Zan ', 'Su ', 'Xi ', 'So ', 'Jian ', 'Za ', 'Zhu ', 'Lan ', 'Nie ', 'Nang ', '[?] ', '[?] ', 'Wei ', 'Hui ', 'Yin ', 'Qiu ', 'Si ', 'Nin ', 'Jian ', 'Hui ', 'Xin ', 'Yin ', 'Nan ', 'Tuan ', 'Tuan ', 'Dun ', 'Kang ', 'Yuan ', 'Jiong ', 'Pian ', 'Yun ', 'Cong ', 'Hu ', 'Hui ', 'Yuan ', 'You ', 'Guo ', 'Kun ', 'Cong ', 'Wei ', 'Tu ', 'Wei ', 'Lun ', 'Guo ', 'Qun ', 'Ri ', 'Ling ', 'Gu ', 'Guo ', 'Tai ', 'Guo ', 'Tu ', 'You '];
<?php return ['Guo ', 'Yin ', 'Hun ', 'Pu ', 'Yu ', 'Han ', 'Yuan ', 'Lun ', 'Quan ', 'Yu ', 'Qing ', 'Guo ', 'Chuan ', 'Wei ', 'Yuan ', 'Quan ', 'Ku ', 'Fu ', 'Yuan ', 'Yuan ', 'E ', 'Tu ', 'Tu ', 'Tu ', 'Tuan ', 'Lue ', 'Hui ', 'Yi ', 'Yuan ', 'Luan ', 'Luan ', 'Tu ', 'Ya ', 'Tu ', 'Ting ', 'Sheng ', 'Pu ', 'Lu ', 'Iri ', 'Ya ', 'Zai ', 'Wei ', 'Ge ', 'Yu ', 'Wu ', 'Gui ', 'Pi ', 'Yi ', 'Di ', 'Qian ', 'Qian ', 'Zhen ', 'Zhuo ', 'Dang ', 'Qia ', 'Akutsu ', 'Yama ', 'Kuang ', 'Chang ', 'Qi ', 'Nie ', 'Mo ', 'Ji ', 'Jia ', 'Zhi ', 'Zhi ', 'Ban ', 'Xun ', 'Tou ', 'Qin ', 'Fen ', 'Jun ', 'Keng ', 'Tun ', 'Fang ', 'Fen ', 'Ben ', 'Tan ', 'Kan ', 'Pi ', 'Zuo ', 'Keng ', 'Bi ', 'Xing ', 'Di ', 'Jing ', 'Ji ', 'Kuai ', 'Di ', 'Jing ', 'Jian ', 'Tan ', 'Li ', 'Ba ', 'Wu ', 'Fen ', 'Zhui ', 'Po ', 'Pan ', 'Tang ', 'Kun ', 'Qu ', 'Tan ', 'Zhi ', 'Tuo ', 'Gan ', 'Ping ', 'Dian ', 'Gua ', 'Ni ', 'Tai ', 'Pi ', 'Jiong ', 'Yang ', 'Fo ', 'Ao ', 'Liu ', 'Qiu ', 'Mu ', 'Ke ', 'Gou ', 'Xue ', 'Ba ', 'Chi ', 'Che ', 'Ling ', 'Zhu ', 'Fu ', 'Hu ', 'Zhi ', 'Chui ', 'La ', 'Long ', 'Long ', 'Lu ', 'Ao ', 'Tay ', 'Pao ', '[?] ', 'Xing ', 'Dong ', 'Ji ', 'Ke ', 'Lu ', 'Ci ', 'Chi ', 'Lei ', 'Gai ', 'Yin ', 'Hou ', 'Dui ', 'Zhao ', 'Fu ', 'Guang ', 'Yao ', 'Duo ', 'Duo ', 'Gui ', 'Cha ', 'Yang ', 'Yin ', 'Fa ', 'Gou ', 'Yuan ', 'Die ', 'Xie ', 'Ken ', 'Jiong ', 'Shou ', 'E ', 'Ha ', 'Dian ', 'Hong ', 'Wu ', 'Kua ', '[?] ', 'Tao ', 'Dang ', 'Kai ', 'Gake ', 'Nao ', 'An ', 'Xing ', 'Xian ', 'Huan ', 'Bang ', 'Pei ', 'Ba ', 'Yi ', 'Yin ', 'Han ', 'Xu ', 'Chui ', 'Cen ', 'Geng ', 'Ai ', 'Peng ', 'Fang ', 'Que ', 'Yong ', 'Xun ', 'Jia ', 'Di ', 'Mai ', 'Lang ', 'Xuan ', 'Cheng ', 'Yan ', 'Jin ', 'Zhe ', 'Lei ', 'Lie ', 'Bu ', 'Cheng ', 'Gomi ', 'Bu ', 'Shi ', 'Xun ', 'Guo ', 'Jiong ', 'Ye ', 'Nian ', 'Di ', 'Yu ', 'Bu ', 'Ya ', 'Juan ', 'Sui ', 'Pi ', 'Cheng ', 'Wan ', 'Ju ', 'Lun ', 'Zheng ', 'Kong ', 'Chong ', 'Dong ', 'Dai ', 'Tan ', 'An ', 'Cai ', 'Shu ', 'Beng ', 'Kan ', 'Zhi ', 'Duo ', 'Yi ', 'Zhi ', 'Yi ', 'Pei ', 'Ji ', 'Zhun ', 'Qi ', 'Sao ', 'Ju ', 'Ni '];
<?php return ['Ku ', 'Ke ', 'Tang ', 'Kun ', 'Ni ', 'Jian ', 'Dui ', 'Jin ', 'Gang ', 'Yu ', 'E ', 'Peng ', 'Gu ', 'Tu ', 'Leng ', '[?] ', 'Ya ', 'Qian ', '[?] ', 'An ', '[?] ', 'Duo ', 'Nao ', 'Tu ', 'Cheng ', 'Yin ', 'Hun ', 'Bi ', 'Lian ', 'Guo ', 'Die ', 'Zhuan ', 'Hou ', 'Bao ', 'Bao ', 'Yu ', 'Di ', 'Mao ', 'Jie ', 'Ruan ', 'E ', 'Geng ', 'Kan ', 'Zong ', 'Yu ', 'Huang ', 'E ', 'Yao ', 'Yan ', 'Bao ', 'Ji ', 'Mei ', 'Chang ', 'Du ', 'Tuo ', 'Yin ', 'Feng ', 'Zhong ', 'Jie ', 'Zhen ', 'Feng ', 'Gang ', 'Chuan ', 'Jian ', 'Pyeng ', 'Toride ', 'Xiang ', 'Huang ', 'Leng ', 'Duan ', '[?] ', 'Xuan ', 'Ji ', 'Ji ', 'Kuai ', 'Ying ', 'Ta ', 'Cheng ', 'Yong ', 'Kai ', 'Su ', 'Su ', 'Shi ', 'Mi ', 'Ta ', 'Weng ', 'Cheng ', 'Tu ', 'Tang ', 'Que ', 'Zhong ', 'Li ', 'Peng ', 'Bang ', 'Sai ', 'Zang ', 'Dui ', 'Tian ', 'Wu ', 'Cheng ', 'Xun ', 'Ge ', 'Zhen ', 'Ai ', 'Gong ', 'Yan ', 'Kan ', 'Tian ', 'Yuan ', 'Wen ', 'Xie ', 'Liu ', 'Ama ', 'Lang ', 'Chang ', 'Peng ', 'Beng ', 'Chen ', 'Cu ', 'Lu ', 'Ou ', 'Qian ', 'Mei ', 'Mo ', 'Zhuan ', 'Shuang ', 'Shu ', 'Lou ', 'Chi ', 'Man ', 'Biao ', 'Jing ', 'Qi ', 'Shu ', 'Di ', 'Zhang ', 'Kan ', 'Yong ', 'Dian ', 'Chen ', 'Zhi ', 'Xi ', 'Guo ', 'Qiang ', 'Jin ', 'Di ', 'Shang ', 'Mu ', 'Cui ', 'Yan ', 'Ta ', 'Zeng ', 'Qi ', 'Qiang ', 'Liang ', '[?] ', 'Zhui ', 'Qiao ', 'Zeng ', 'Xu ', 'Shan ', 'Shan ', 'Ba ', 'Pu ', 'Kuai ', 'Dong ', 'Fan ', 'Que ', 'Mo ', 'Dun ', 'Dun ', 'Dun ', 'Di ', 'Sheng ', 'Duo ', 'Duo ', 'Tan ', 'Deng ', 'Wu ', 'Fen ', 'Huang ', 'Tan ', 'Da ', 'Ye ', 'Sho ', 'Mama ', 'Yu ', 'Qiang ', 'Ji ', 'Qiao ', 'Ken ', 'Yi ', 'Pi ', 'Bi ', 'Dian ', 'Jiang ', 'Ye ', 'Yong ', 'Bo ', 'Tan ', 'Lan ', 'Ju ', 'Huai ', 'Dang ', 'Rang ', 'Qian ', 'Xun ', 'Lan ', 'Xi ', 'He ', 'Ai ', 'Ya ', 'Dao ', 'Hao ', 'Ruan ', 'Mama ', 'Lei ', 'Kuang ', 'Lu ', 'Yan ', 'Tan ', 'Wei ', 'Huai ', 'Long ', 'Long ', 'Rui ', 'Li ', 'Lin ', 'Rang ', 'Ten ', 'Xun ', 'Yan ', 'Lei ', 'Ba ', '[?] ', 'Shi ', 'Ren ', '[?] ', 'Zhuang ', 'Zhuang ', 'Sheng ', 'Yi ', 'Mai ', 'Ke ', 'Zhu ', 'Zhuang ', 'Hu ', 'Hu ', 'Kun ', 'Yi ', 'Hu ', 'Xu ', 'Kun ', 'Shou ', 'Mang ', 'Zun '];
<?php return ['Shou ', 'Yi ', 'Zhi ', 'Gu ', 'Chu ', 'Jiang ', 'Feng ', 'Bei ', 'Cay ', 'Bian ', 'Sui ', 'Qun ', 'Ling ', 'Fu ', 'Zuo ', 'Xia ', 'Xiong ', '[?] ', 'Nao ', 'Xia ', 'Kui ', 'Xi ', 'Wai ', 'Yuan ', 'Mao ', 'Su ', 'Duo ', 'Duo ', 'Ye ', 'Qing ', 'Uys ', 'Gou ', 'Gou ', 'Qi ', 'Meng ', 'Meng ', 'Yin ', 'Huo ', 'Chen ', 'Da ', 'Ze ', 'Tian ', 'Tai ', 'Fu ', 'Guai ', 'Yao ', 'Yang ', 'Hang ', 'Gao ', 'Shi ', 'Ben ', 'Tai ', 'Tou ', 'Yan ', 'Bi ', 'Yi ', 'Kua ', 'Jia ', 'Duo ', 'Kwu ', 'Kuang ', 'Yun ', 'Jia ', 'Pa ', 'En ', 'Lian ', 'Huan ', 'Di ', 'Yan ', 'Pao ', 'Quan ', 'Qi ', 'Nai ', 'Feng ', 'Xie ', 'Fen ', 'Dian ', '[?] ', 'Kui ', 'Zou ', 'Huan ', 'Qi ', 'Kai ', 'Zha ', 'Ben ', 'Yi ', 'Jiang ', 'Tao ', 'Zang ', 'Ben ', 'Xi ', 'Xiang ', 'Fei ', 'Diao ', 'Xun ', 'Keng ', 'Dian ', 'Ao ', 'She ', 'Weng ', 'Pan ', 'Ao ', 'Wu ', 'Ao ', 'Jiang ', 'Lian ', 'Duo ', 'Yun ', 'Jiang ', 'Shi ', 'Fen ', 'Huo ', 'Bi ', 'Lian ', 'Duo ', 'Nu ', 'Nu ', 'Ding ', 'Nai ', 'Qian ', 'Jian ', 'Ta ', 'Jiu ', 'Nan ', 'Cha ', 'Hao ', 'Xian ', 'Fan ', 'Ji ', 'Shuo ', 'Ru ', 'Fei ', 'Wang ', 'Hong ', 'Zhuang ', 'Fu ', 'Ma ', 'Dan ', 'Ren ', 'Fu ', 'Jing ', 'Yan ', 'Xie ', 'Wen ', 'Zhong ', 'Pa ', 'Du ', 'Ji ', 'Keng ', 'Zhong ', 'Yao ', 'Jin ', 'Yun ', 'Miao ', 'Pei ', 'Shi ', 'Yue ', 'Zhuang ', 'Niu ', 'Yan ', 'Na ', 'Xin ', 'Fen ', 'Bi ', 'Yu ', 'Tuo ', 'Feng ', 'Yuan ', 'Fang ', 'Wu ', 'Yu ', 'Gui ', 'Du ', 'Ba ', 'Ni ', 'Zhou ', 'Zhuo ', 'Zhao ', 'Da ', 'Nai ', 'Yuan ', 'Tou ', 'Xuan ', 'Zhi ', 'E ', 'Mei ', 'Mo ', 'Qi ', 'Bi ', 'Shen ', 'Qie ', 'E ', 'He ', 'Xu ', 'Fa ', 'Zheng ', 'Min ', 'Ban ', 'Mu ', 'Fu ', 'Ling ', 'Zi ', 'Zi ', 'Shi ', 'Ran ', 'Shan ', 'Yang ', 'Man ', 'Jie ', 'Gu ', 'Si ', 'Xing ', 'Wei ', 'Zi ', 'Ju ', 'Shan ', 'Pin ', 'Ren ', 'Yao ', 'Tong ', 'Jiang ', 'Shu ', 'Ji ', 'Gai ', 'Shang ', 'Kuo ', 'Juan ', 'Jiao ', 'Gou ', 'Mu ', 'Jian ', 'Jian ', 'Yi ', 'Nian ', 'Zhi ', 'Ji ', 'Ji ', 'Xian ', 'Heng ', 'Guang ', 'Jun ', 'Kua ', 'Yan ', 'Ming ', 'Lie ', 'Pei ', 'Yan ', 'You ', 'Yan ', 'Cha ', 'Shen ', 'Yin ', 'Chi ', 'Gui ', 'Quan ', 'Zi '];
<?php return ['Song ', 'Wei ', 'Hong ', 'Wa ', 'Lou ', 'Ya ', 'Rao ', 'Jiao ', 'Luan ', 'Ping ', 'Xian ', 'Shao ', 'Li ', 'Cheng ', 'Xiao ', 'Mang ', 'Fu ', 'Suo ', 'Wu ', 'Wei ', 'Ke ', 'Lai ', 'Chuo ', 'Ding ', 'Niang ', 'Xing ', 'Nan ', 'Yu ', 'Nuo ', 'Pei ', 'Nei ', 'Juan ', 'Shen ', 'Zhi ', 'Han ', 'Di ', 'Zhuang ', 'E ', 'Pin ', 'Tui ', 'Han ', 'Mian ', 'Wu ', 'Yan ', 'Wu ', 'Xi ', 'Yan ', 'Yu ', 'Si ', 'Yu ', 'Wa ', '[?] ', 'Xian ', 'Ju ', 'Qu ', 'Shui ', 'Qi ', 'Xian ', 'Zhui ', 'Dong ', 'Chang ', 'Lu ', 'Ai ', 'E ', 'E ', 'Lou ', 'Mian ', 'Cong ', 'Pou ', 'Ju ', 'Po ', 'Cai ', 'Ding ', 'Wan ', 'Biao ', 'Xiao ', 'Shu ', 'Qi ', 'Hui ', 'Fu ', 'E ', 'Wo ', 'Tan ', 'Fei ', 'Wei ', 'Jie ', 'Tian ', 'Ni ', 'Quan ', 'Jing ', 'Hun ', 'Jing ', 'Qian ', 'Dian ', 'Xing ', 'Hu ', 'Wa ', 'Lai ', 'Bi ', 'Yin ', 'Chou ', 'Chuo ', 'Fu ', 'Jing ', 'Lun ', 'Yan ', 'Lan ', 'Kun ', 'Yin ', 'Ya ', 'Ju ', 'Li ', 'Dian ', 'Xian ', 'Hwa ', 'Hua ', 'Ying ', 'Chan ', 'Shen ', 'Ting ', 'Dang ', 'Yao ', 'Wu ', 'Nan ', 'Ruo ', 'Jia ', 'Tou ', 'Xu ', 'Yu ', 'Wei ', 'Ti ', 'Rou ', 'Mei ', 'Dan ', 'Ruan ', 'Qin ', 'Hui ', 'Wu ', 'Qian ', 'Chun ', 'Mao ', 'Fu ', 'Jie ', 'Duan ', 'Xi ', 'Zhong ', 'Mei ', 'Huang ', 'Mian ', 'An ', 'Ying ', 'Xuan ', 'Jie ', 'Wei ', 'Mei ', 'Yuan ', 'Zhen ', 'Qiu ', 'Ti ', 'Xie ', 'Tuo ', 'Lian ', 'Mao ', 'Ran ', 'Si ', 'Pian ', 'Wei ', 'Wa ', 'Jiu ', 'Hu ', 'Ao ', '[?] ', 'Bou ', 'Xu ', 'Tou ', 'Gui ', 'Zou ', 'Yao ', 'Pi ', 'Xi ', 'Yuan ', 'Ying ', 'Rong ', 'Ru ', 'Chi ', 'Liu ', 'Mei ', 'Pan ', 'Ao ', 'Ma ', 'Gou ', 'Kui ', 'Qin ', 'Jia ', 'Sao ', 'Zhen ', 'Yuan ', 'Cha ', 'Yong ', 'Ming ', 'Ying ', 'Ji ', 'Su ', 'Niao ', 'Xian ', 'Tao ', 'Pang ', 'Lang ', 'Nao ', 'Bao ', 'Ai ', 'Pi ', 'Pin ', 'Yi ', 'Piao ', 'Yu ', 'Lei ', 'Xuan ', 'Man ', 'Yi ', 'Zhang ', 'Kang ', 'Yong ', 'Ni ', 'Li ', 'Di ', 'Gui ', 'Yan ', 'Jin ', 'Zhuan ', 'Chang ', 'Ce ', 'Han ', 'Nen ', 'Lao ', 'Mo ', 'Zhe ', 'Hu ', 'Hu ', 'Ao ', 'Nen ', 'Qiang ', 'Ma ', 'Pie ', 'Gu ', 'Wu ', 'Jiao ', 'Tuo ', 'Zhan ', 'Mao ', 'Xian ', 'Xian ', 'Mo ', 'Liao ', 'Lian ', 'Hua '];
<?php return ['Gui ', 'Deng ', 'Zhi ', 'Xu ', 'Yi ', 'Hua ', 'Xi ', 'Hui ', 'Rao ', 'Xi ', 'Yan ', 'Chan ', 'Jiao ', 'Mei ', 'Fan ', 'Fan ', 'Xian ', 'Yi ', 'Wei ', 'Jiao ', 'Fu ', 'Shi ', 'Bi ', 'Shan ', 'Sui ', 'Qiang ', 'Lian ', 'Huan ', 'Xin ', 'Niao ', 'Dong ', 'Yi ', 'Can ', 'Ai ', 'Niang ', 'Neng ', 'Ma ', 'Tiao ', 'Chou ', 'Jin ', 'Ci ', 'Yu ', 'Pin ', 'Yong ', 'Xu ', 'Nai ', 'Yan ', 'Tai ', 'Ying ', 'Can ', 'Niao ', 'Wo ', 'Ying ', 'Mian ', 'Kaka ', 'Ma ', 'Shen ', 'Xing ', 'Ni ', 'Du ', 'Liu ', 'Yuan ', 'Lan ', 'Yan ', 'Shuang ', 'Ling ', 'Jiao ', 'Niang ', 'Lan ', 'Xian ', 'Ying ', 'Shuang ', 'Shuai ', 'Quan ', 'Mi ', 'Li ', 'Luan ', 'Yan ', 'Zhu ', 'Lan ', 'Zi ', 'Jie ', 'Jue ', 'Jue ', 'Kong ', 'Yun ', 'Zi ', 'Zi ', 'Cun ', 'Sun ', 'Fu ', 'Bei ', 'Zi ', 'Xiao ', 'Xin ', 'Meng ', 'Si ', 'Tai ', 'Bao ', 'Ji ', 'Gu ', 'Nu ', 'Xue ', '[?] ', 'Zhuan ', 'Hai ', 'Luan ', 'Sun ', 'Huai ', 'Mie ', 'Cong ', 'Qian ', 'Shu ', 'Chan ', 'Ya ', 'Zi ', 'Ni ', 'Fu ', 'Zi ', 'Li ', 'Xue ', 'Bo ', 'Ru ', 'Lai ', 'Nie ', 'Nie ', 'Ying ', 'Luan ', 'Mian ', 'Zhu ', 'Rong ', 'Ta ', 'Gui ', 'Zhai ', 'Qiong ', 'Yu ', 'Shou ', 'An ', 'Tu ', 'Song ', 'Wan ', 'Rou ', 'Yao ', 'Hong ', 'Yi ', 'Jing ', 'Zhun ', 'Mi ', 'Zhu ', 'Dang ', 'Hong ', 'Zong ', 'Guan ', 'Zhou ', 'Ding ', 'Wan ', 'Yi ', 'Bao ', 'Shi ', 'Shi ', 'Chong ', 'Shen ', 'Ke ', 'Xuan ', 'Shi ', 'You ', 'Huan ', 'Yi ', 'Tiao ', 'Shi ', 'Xian ', 'Gong ', 'Cheng ', 'Qun ', 'Gong ', 'Xiao ', 'Zai ', 'Zha ', 'Bao ', 'Hai ', 'Yan ', 'Xiao ', 'Jia ', 'Shen ', 'Chen ', 'Rong ', 'Huang ', 'Mi ', 'Kou ', 'Kuan ', 'Bin ', 'Su ', 'Cai ', 'Zan ', 'Ji ', 'Yuan ', 'Ji ', 'Yin ', 'Mi ', 'Kou ', 'Qing ', 'Que ', 'Zhen ', 'Jian ', 'Fu ', 'Ning ', 'Bing ', 'Huan ', 'Mei ', 'Qin ', 'Han ', 'Yu ', 'Shi ', 'Ning ', 'Qin ', 'Ning ', 'Zhi ', 'Yu ', 'Bao ', 'Kuan ', 'Ning ', 'Qin ', 'Mo ', 'Cha ', 'Ju ', 'Gua ', 'Qin ', 'Hu ', 'Wu ', 'Liao ', 'Shi ', 'Zhu ', 'Zhai ', 'Shen ', 'Wei ', 'Xie ', 'Kuan ', 'Hui ', 'Liao ', 'Jun ', 'Huan ', 'Yi ', 'Yi ', 'Bao ', 'Qin ', 'Chong ', 'Bao ', 'Feng ', 'Cun ', 'Dui ', 'Si ', 'Xun ', 'Dao ', 'Lu ', 'Dui ', 'Shou '];
<?php return ['Po ', 'Feng ', 'Zhuan ', 'Fu ', 'She ', 'Ke ', 'Jiang ', 'Jiang ', 'Zhuan ', 'Wei ', 'Zun ', 'Xun ', 'Shu ', 'Dui ', 'Dao ', 'Xiao ', 'Ji ', 'Shao ', 'Er ', 'Er ', 'Er ', 'Ga ', 'Jian ', 'Shu ', 'Chen ', 'Shang ', 'Shang ', 'Mo ', 'Ga ', 'Chang ', 'Liao ', 'Xian ', 'Xian ', '[?] ', 'Wang ', 'Wang ', 'You ', 'Liao ', 'Liao ', 'Yao ', 'Mang ', 'Wang ', 'Wang ', 'Wang ', 'Ga ', 'Yao ', 'Duo ', 'Kui ', 'Zhong ', 'Jiu ', 'Gan ', 'Gu ', 'Gan ', 'Tui ', 'Gan ', 'Gan ', 'Shi ', 'Yin ', 'Chi ', 'Kao ', 'Ni ', 'Jin ', 'Wei ', 'Niao ', 'Ju ', 'Pi ', 'Ceng ', 'Xi ', 'Bi ', 'Ju ', 'Jie ', 'Tian ', 'Qu ', 'Ti ', 'Jie ', 'Wu ', 'Diao ', 'Shi ', 'Shi ', 'Ping ', 'Ji ', 'Xie ', 'Chen ', 'Xi ', 'Ni ', 'Zhan ', 'Xi ', '[?] ', 'Man ', 'E ', 'Lou ', 'Ping ', 'Ti ', 'Fei ', 'Shu ', 'Xie ', 'Tu ', 'Lu ', 'Lu ', 'Xi ', 'Ceng ', 'Lu ', 'Ju ', 'Xie ', 'Ju ', 'Jue ', 'Liao ', 'Jue ', 'Shu ', 'Xi ', 'Che ', 'Tun ', 'Ni ', 'Shan ', '[?] ', 'Xian ', 'Li ', 'Xue ', 'Nata ', '[?] ', 'Long ', 'Yi ', 'Qi ', 'Ren ', 'Wu ', 'Han ', 'Shen ', 'Yu ', 'Chu ', 'Sui ', 'Qi ', '[?] ', 'Yue ', 'Ban ', 'Yao ', 'Ang ', 'Ya ', 'Wu ', 'Jie ', 'E ', 'Ji ', 'Qian ', 'Fen ', 'Yuan ', 'Qi ', 'Cen ', 'Qian ', 'Qi ', 'Cha ', 'Jie ', 'Qu ', 'Gang ', 'Xian ', 'Ao ', 'Lan ', 'Dao ', 'Ba ', 'Zuo ', 'Zuo ', 'Yang ', 'Ju ', 'Gang ', 'Ke ', 'Gou ', 'Xue ', 'Bei ', 'Li ', 'Tiao ', 'Ju ', 'Yan ', 'Fu ', 'Xiu ', 'Jia ', 'Ling ', 'Tuo ', 'Pei ', 'You ', 'Dai ', 'Kuang ', 'Yue ', 'Qu ', 'Hu ', 'Po ', 'Min ', 'An ', 'Tiao ', 'Ling ', 'Chi ', 'Yuri ', 'Dong ', 'Cem ', 'Kui ', 'Xiu ', 'Mao ', 'Tong ', 'Xue ', 'Yi ', 'Kura ', 'He ', 'Ke ', 'Luo ', 'E ', 'Fu ', 'Xun ', 'Die ', 'Lu ', 'An ', 'Er ', 'Gai ', 'Quan ', 'Tong ', 'Yi ', 'Mu ', 'Shi ', 'An ', 'Wei ', 'Hu ', 'Zhi ', 'Mi ', 'Li ', 'Ji ', 'Tong ', 'Wei ', 'You ', 'Sang ', 'Xia ', 'Li ', 'Yao ', 'Jiao ', 'Zheng ', 'Luan ', 'Jiao ', 'E ', 'E ', 'Yu ', 'Ye ', 'Bu ', 'Qiao ', 'Qun ', 'Feng ', 'Feng ', 'Nao ', 'Li ', 'You ', 'Xian ', 'Hong ', 'Dao ', 'Shen ', 'Cheng ', 'Tu ', 'Geng ', 'Jun ', 'Hao ', 'Xia ', 'Yin ', 'Yu '];
<?php return ['Lang ', 'Kan ', 'Lao ', 'Lai ', 'Xian ', 'Que ', 'Kong ', 'Chong ', 'Chong ', 'Ta ', 'Lin ', 'Hua ', 'Ju ', 'Lai ', 'Qi ', 'Min ', 'Kun ', 'Kun ', 'Zu ', 'Gu ', 'Cui ', 'Ya ', 'Ya ', 'Gang ', 'Lun ', 'Lun ', 'Leng ', 'Jue ', 'Duo ', 'Zheng ', 'Guo ', 'Yin ', 'Dong ', 'Han ', 'Zheng ', 'Wei ', 'Yao ', 'Pi ', 'Yan ', 'Song ', 'Jie ', 'Beng ', 'Zu ', 'Jue ', 'Dong ', 'Zhan ', 'Gu ', 'Yin ', '[?] ', 'Ze ', 'Huang ', 'Yu ', 'Wei ', 'Yang ', 'Feng ', 'Qiu ', 'Dun ', 'Ti ', 'Yi ', 'Zhi ', 'Shi ', 'Zai ', 'Yao ', 'E ', 'Zhu ', 'Kan ', 'Lu ', 'Yan ', 'Mei ', 'Gan ', 'Ji ', 'Ji ', 'Huan ', 'Ting ', 'Sheng ', 'Mei ', 'Qian ', 'Wu ', 'Yu ', 'Zong ', 'Lan ', 'Jue ', 'Yan ', 'Yan ', 'Wei ', 'Zong ', 'Cha ', 'Sui ', 'Rong ', 'Yamashina ', 'Qin ', 'Yu ', 'Kewashii ', 'Lou ', 'Tu ', 'Dui ', 'Xi ', 'Weng ', 'Cang ', 'Dang ', 'Hong ', 'Jie ', 'Ai ', 'Liu ', 'Wu ', 'Song ', 'Qiao ', 'Zi ', 'Wei ', 'Beng ', 'Dian ', 'Cuo ', 'Qian ', 'Yong ', 'Nie ', 'Cuo ', 'Ji ', '[?] ', 'Tao ', 'Song ', 'Zong ', 'Jiang ', 'Liao ', 'Kang ', 'Chan ', 'Die ', 'Cen ', 'Ding ', 'Tu ', 'Lou ', 'Zhang ', 'Zhan ', 'Zhan ', 'Ao ', 'Cao ', 'Qu ', 'Qiang ', 'Zui ', 'Zui ', 'Dao ', 'Dao ', 'Xi ', 'Yu ', 'Bo ', 'Long ', 'Xiang ', 'Ceng ', 'Bo ', 'Qin ', 'Jiao ', 'Yan ', 'Lao ', 'Zhan ', 'Lin ', 'Liao ', 'Liao ', 'Jin ', 'Deng ', 'Duo ', 'Zun ', 'Jiao ', 'Gui ', 'Yao ', 'Qiao ', 'Yao ', 'Jue ', 'Zhan ', 'Yi ', 'Xue ', 'Nao ', 'Ye ', 'Ye ', 'Yi ', 'E ', 'Xian ', 'Ji ', 'Xie ', 'Ke ', 'Xi ', 'Di ', 'Ao ', 'Zui ', '[?] ', 'Ni ', 'Rong ', 'Dao ', 'Ling ', 'Za ', 'Yu ', 'Yue ', 'Yin ', '[?] ', 'Jie ', 'Li ', 'Sui ', 'Long ', 'Long ', 'Dian ', 'Ying ', 'Xi ', 'Ju ', 'Chan ', 'Ying ', 'Kui ', 'Yan ', 'Wei ', 'Nao ', 'Quan ', 'Chao ', 'Cuan ', 'Luan ', 'Dian ', 'Dian ', '[?] ', 'Yan ', 'Yan ', 'Yan ', 'Nao ', 'Yan ', 'Chuan ', 'Gui ', 'Chuan ', 'Zhou ', 'Huang ', 'Jing ', 'Xun ', 'Chao ', 'Chao ', 'Lie ', 'Gong ', 'Zuo ', 'Qiao ', 'Ju ', 'Gong ', 'Kek ', 'Wu ', 'Pwu ', 'Pwu ', 'Chai ', 'Qiu ', 'Qiu ', 'Ji ', 'Yi ', 'Si ', 'Ba ', 'Zhi ', 'Zhao ', 'Xiang ', 'Yi ', 'Jin ', 'Xun ', 'Juan ', 'Phas ', 'Xun ', 'Jin ', 'Fu '];
<?php return ['Za ', 'Bi ', 'Shi ', 'Bu ', 'Ding ', 'Shuai ', 'Fan ', 'Nie ', 'Shi ', 'Fen ', 'Pa ', 'Zhi ', 'Xi ', 'Hu ', 'Dan ', 'Wei ', 'Zhang ', 'Tang ', 'Dai ', 'Ma ', 'Pei ', 'Pa ', 'Tie ', 'Fu ', 'Lian ', 'Zhi ', 'Zhou ', 'Bo ', 'Zhi ', 'Di ', 'Mo ', 'Yi ', 'Yi ', 'Ping ', 'Qia ', 'Juan ', 'Ru ', 'Shuai ', 'Dai ', 'Zheng ', 'Shui ', 'Qiao ', 'Zhen ', 'Shi ', 'Qun ', 'Xi ', 'Bang ', 'Dai ', 'Gui ', 'Chou ', 'Ping ', 'Zhang ', 'Sha ', 'Wan ', 'Dai ', 'Wei ', 'Chang ', 'Sha ', 'Qi ', 'Ze ', 'Guo ', 'Mao ', 'Du ', 'Hou ', 'Zheng ', 'Xu ', 'Mi ', 'Wei ', 'Wo ', 'Fu ', 'Yi ', 'Bang ', 'Ping ', 'Tazuna ', 'Gong ', 'Pan ', 'Huang ', 'Dao ', 'Mi ', 'Jia ', 'Teng ', 'Hui ', 'Zhong ', 'Shan ', 'Man ', 'Mu ', 'Biao ', 'Guo ', 'Ze ', 'Mu ', 'Bang ', 'Zhang ', 'Jiong ', 'Chan ', 'Fu ', 'Zhi ', 'Hu ', 'Fan ', 'Chuang ', 'Bi ', 'Hei ', '[?] ', 'Mi ', 'Qiao ', 'Chan ', 'Fen ', 'Meng ', 'Bang ', 'Chou ', 'Mie ', 'Chu ', 'Jie ', 'Xian ', 'Lan ', 'Gan ', 'Ping ', 'Nian ', 'Qian ', 'Bing ', 'Bing ', 'Xing ', 'Gan ', 'Yao ', 'Huan ', 'You ', 'You ', 'Ji ', 'Yan ', 'Pi ', 'Ting ', 'Ze ', 'Guang ', 'Zhuang ', 'Mo ', 'Qing ', 'Bi ', 'Qin ', 'Dun ', 'Chuang ', 'Gui ', 'Ya ', 'Bai ', 'Jie ', 'Xu ', 'Lu ', 'Wu ', '[?] ', 'Ku ', 'Ying ', 'Di ', 'Pao ', 'Dian ', 'Ya ', 'Miao ', 'Geng ', 'Ci ', 'Fu ', 'Tong ', 'Pang ', 'Fei ', 'Xiang ', 'Yi ', 'Zhi ', 'Tiao ', 'Zhi ', 'Xiu ', 'Du ', 'Zuo ', 'Xiao ', 'Tu ', 'Gui ', 'Ku ', 'Pang ', 'Ting ', 'You ', 'Bu ', 'Ding ', 'Cheng ', 'Lai ', 'Bei ', 'Ji ', 'An ', 'Shu ', 'Kang ', 'Yong ', 'Tuo ', 'Song ', 'Shu ', 'Qing ', 'Yu ', 'Yu ', 'Miao ', 'Sou ', 'Ce ', 'Xiang ', 'Fei ', 'Jiu ', 'He ', 'Hui ', 'Liu ', 'Sha ', 'Lian ', 'Lang ', 'Sou ', 'Jian ', 'Pou ', 'Qing ', 'Jiu ', 'Jiu ', 'Qin ', 'Ao ', 'Kuo ', 'Lou ', 'Yin ', 'Liao ', 'Dai ', 'Lu ', 'Yi ', 'Chu ', 'Chan ', 'Tu ', 'Si ', 'Xin ', 'Miao ', 'Chang ', 'Wu ', 'Fei ', 'Guang ', 'Koc ', 'Kuai ', 'Bi ', 'Qiang ', 'Xie ', 'Lin ', 'Lin ', 'Liao ', 'Lu ', '[?] ', 'Ying ', 'Xian ', 'Ting ', 'Yong ', 'Li ', 'Ting ', 'Yin ', 'Xun ', 'Yan ', 'Ting ', 'Di ', 'Po ', 'Jian ', 'Hui ', 'Nai ', 'Hui ', 'Gong ', 'Nian '];
<?php return ['Kai ', 'Bian ', 'Yi ', 'Qi ', 'Nong ', 'Fen ', 'Ju ', 'Yan ', 'Yi ', 'Zang ', 'Bi ', 'Yi ', 'Yi ', 'Er ', 'San ', 'Shi ', 'Er ', 'Shi ', 'Shi ', 'Gong ', 'Diao ', 'Yin ', 'Hu ', 'Fu ', 'Hong ', 'Wu ', 'Tui ', 'Chi ', 'Jiang ', 'Ba ', 'Shen ', 'Di ', 'Zhang ', 'Jue ', 'Tao ', 'Fu ', 'Di ', 'Mi ', 'Xian ', 'Hu ', 'Chao ', 'Nu ', 'Jing ', 'Zhen ', 'Yi ', 'Mi ', 'Quan ', 'Wan ', 'Shao ', 'Ruo ', 'Xuan ', 'Jing ', 'Dun ', 'Zhang ', 'Jiang ', 'Qiang ', 'Peng ', 'Dan ', 'Qiang ', 'Bi ', 'Bi ', 'She ', 'Dan ', 'Jian ', 'Gou ', 'Sei ', 'Fa ', 'Bi ', 'Kou ', 'Nagi ', 'Bie ', 'Xiao ', 'Dan ', 'Kuo ', 'Qiang ', 'Hong ', 'Mi ', 'Kuo ', 'Wan ', 'Jue ', 'Ji ', 'Ji ', 'Gui ', 'Dang ', 'Lu ', 'Lu ', 'Tuan ', 'Hui ', 'Zhi ', 'Hui ', 'Hui ', 'Yi ', 'Yi ', 'Yi ', 'Yi ', 'Huo ', 'Huo ', 'Shan ', 'Xing ', 'Wen ', 'Tong ', 'Yan ', 'Yan ', 'Yu ', 'Chi ', 'Cai ', 'Biao ', 'Diao ', 'Bin ', 'Peng ', 'Yong ', 'Piao ', 'Zhang ', 'Ying ', 'Chi ', 'Chi ', 'Zhuo ', 'Tuo ', 'Ji ', 'Pang ', 'Zhong ', 'Yi ', 'Wang ', 'Che ', 'Bi ', 'Chi ', 'Ling ', 'Fu ', 'Wang ', 'Zheng ', 'Cu ', 'Wang ', 'Jing ', 'Dai ', 'Xi ', 'Xun ', 'Hen ', 'Yang ', 'Huai ', 'Lu ', 'Hou ', 'Wa ', 'Cheng ', 'Zhi ', 'Xu ', 'Jing ', 'Tu ', 'Cong ', '[?] ', 'Lai ', 'Cong ', 'De ', 'Pai ', 'Xi ', '[?] ', 'Qi ', 'Chang ', 'Zhi ', 'Cong ', 'Zhou ', 'Lai ', 'Yu ', 'Xie ', 'Jie ', 'Jian ', 'Chi ', 'Jia ', 'Bian ', 'Huang ', 'Fu ', 'Xun ', 'Wei ', 'Pang ', 'Yao ', 'Wei ', 'Xi ', 'Zheng ', 'Piao ', 'Chi ', 'De ', 'Zheng ', 'Zheng ', 'Bie ', 'De ', 'Chong ', 'Che ', 'Jiao ', 'Wei ', 'Jiao ', 'Hui ', 'Mei ', 'Long ', 'Xiang ', 'Bao ', 'Qu ', 'Xin ', 'Shu ', 'Bi ', 'Yi ', 'Le ', 'Ren ', 'Dao ', 'Ding ', 'Gai ', 'Ji ', 'Ren ', 'Ren ', 'Chan ', 'Tan ', 'Te ', 'Te ', 'Gan ', 'Qi ', 'Shi ', 'Cun ', 'Zhi ', 'Wang ', 'Mang ', 'Xi ', 'Fan ', 'Ying ', 'Tian ', 'Min ', 'Min ', 'Zhong ', 'Chong ', 'Wu ', 'Ji ', 'Wu ', 'Xi ', 'Ye ', 'You ', 'Wan ', 'Cong ', 'Zhong ', 'Kuai ', 'Yu ', 'Bian ', 'Zhi ', 'Qi ', 'Cui ', 'Chen ', 'Tai ', 'Tun ', 'Qian ', 'Nian ', 'Hun ', 'Xiong ', 'Niu ', 'Wang ', 'Xian ', 'Xin ', 'Kang ', 'Hu ', 'Kai ', 'Fen '];
<?php return ['Huai ', 'Tai ', 'Song ', 'Wu ', 'Ou ', 'Chang ', 'Chuang ', 'Ju ', 'Yi ', 'Bao ', 'Chao ', 'Min ', 'Pei ', 'Zuo ', 'Zen ', 'Yang ', 'Kou ', 'Ban ', 'Nu ', 'Nao ', 'Zheng ', 'Pa ', 'Bu ', 'Tie ', 'Gu ', 'Hu ', 'Ju ', 'Da ', 'Lian ', 'Si ', 'Chou ', 'Di ', 'Dai ', 'Yi ', 'Tu ', 'You ', 'Fu ', 'Ji ', 'Peng ', 'Xing ', 'Yuan ', 'Ni ', 'Guai ', 'Fu ', 'Xi ', 'Bi ', 'You ', 'Qie ', 'Xuan ', 'Cong ', 'Bing ', 'Huang ', 'Xu ', 'Chu ', 'Pi ', 'Xi ', 'Xi ', 'Tan ', 'Koraeru ', 'Zong ', 'Dui ', '[?] ', 'Ki ', 'Yi ', 'Chi ', 'Ren ', 'Xun ', 'Shi ', 'Xi ', 'Lao ', 'Heng ', 'Kuang ', 'Mu ', 'Zhi ', 'Xie ', 'Lian ', 'Tiao ', 'Huang ', 'Die ', 'Hao ', 'Kong ', 'Gui ', 'Heng ', 'Xi ', 'Xiao ', 'Shu ', 'S ', 'Kua ', 'Qiu ', 'Yang ', 'Hui ', 'Hui ', 'Chi ', 'Jia ', 'Yi ', 'Xiong ', 'Guai ', 'Lin ', 'Hui ', 'Zi ', 'Xu ', 'Chi ', 'Xiang ', 'Nu ', 'Hen ', 'En ', 'Ke ', 'Tong ', 'Tian ', 'Gong ', 'Quan ', 'Xi ', 'Qia ', 'Yue ', 'Peng ', 'Ken ', 'De ', 'Hui ', 'E ', 'Kyuu ', 'Tong ', 'Yan ', 'Kai ', 'Ce ', 'Nao ', 'Yun ', 'Mang ', 'Yong ', 'Yong ', 'Yuan ', 'Pi ', 'Kun ', 'Qiao ', 'Yue ', 'Yu ', 'Yu ', 'Jie ', 'Xi ', 'Zhe ', 'Lin ', 'Ti ', 'Han ', 'Hao ', 'Qie ', 'Ti ', 'Bu ', 'Yi ', 'Qian ', 'Hui ', 'Xi ', 'Bei ', 'Man ', 'Yi ', 'Heng ', 'Song ', 'Quan ', 'Cheng ', 'Hui ', 'Wu ', 'Wu ', 'You ', 'Li ', 'Liang ', 'Huan ', 'Cong ', 'Yi ', 'Yue ', 'Li ', 'Nin ', 'Nao ', 'E ', 'Que ', 'Xuan ', 'Qian ', 'Wu ', 'Min ', 'Cong ', 'Fei ', 'Bei ', 'Duo ', 'Cui ', 'Chang ', 'Men ', 'Li ', 'Ji ', 'Guan ', 'Guan ', 'Xing ', 'Dao ', 'Qi ', 'Kong ', 'Tian ', 'Lun ', 'Xi ', 'Kan ', 'Kun ', 'Ni ', 'Qing ', 'Chou ', 'Dun ', 'Guo ', 'Chan ', 'Liang ', 'Wan ', 'Yuan ', 'Jin ', 'Ji ', 'Lin ', 'Yu ', 'Huo ', 'He ', 'Quan ', 'Tan ', 'Ti ', 'Ti ', 'Nie ', 'Wang ', 'Chuo ', 'Bu ', 'Hun ', 'Xi ', 'Tang ', 'Xin ', 'Wei ', 'Hui ', 'E ', 'Rui ', 'Zong ', 'Jian ', 'Yong ', 'Dian ', 'Ju ', 'Can ', 'Cheng ', 'De ', 'Bei ', 'Qie ', 'Can ', 'Dan ', 'Guan ', 'Duo ', 'Nao ', 'Yun ', 'Xiang ', 'Zhui ', 'Die ', 'Huang ', 'Chun ', 'Qiong ', 'Re ', 'Xing ', 'Ce ', 'Bian ', 'Hun ', 'Zong ', 'Ti '];
<?php return ['Qiao ', 'Chou ', 'Bei ', 'Xuan ', 'Wei ', 'Ge ', 'Qian ', 'Wei ', 'Yu ', 'Yu ', 'Bi ', 'Xuan ', 'Huan ', 'Min ', 'Bi ', 'Yi ', 'Mian ', 'Yong ', 'Kai ', 'Dang ', 'Yin ', 'E ', 'Chen ', 'Mou ', 'Ke ', 'Ke ', 'Yu ', 'Ai ', 'Qie ', 'Yan ', 'Nuo ', 'Gan ', 'Yun ', 'Zong ', 'Sai ', 'Leng ', 'Fen ', '[?] ', 'Kui ', 'Kui ', 'Que ', 'Gong ', 'Yun ', 'Su ', 'Su ', 'Qi ', 'Yao ', 'Song ', 'Huang ', 'Ji ', 'Gu ', 'Ju ', 'Chuang ', 'Ni ', 'Xie ', 'Kai ', 'Zheng ', 'Yong ', 'Cao ', 'Sun ', 'Shen ', 'Bo ', 'Kai ', 'Yuan ', 'Xie ', 'Hun ', 'Yong ', 'Yang ', 'Li ', 'Sao ', 'Tao ', 'Yin ', 'Ci ', 'Xu ', 'Qian ', 'Tai ', 'Huang ', 'Yun ', 'Shen ', 'Ming ', '[?] ', 'She ', 'Cong ', 'Piao ', 'Mo ', 'Mu ', 'Guo ', 'Chi ', 'Can ', 'Can ', 'Can ', 'Cui ', 'Min ', 'Te ', 'Zhang ', 'Tong ', 'Ao ', 'Shuang ', 'Man ', 'Guan ', 'Que ', 'Zao ', 'Jiu ', 'Hui ', 'Kai ', 'Lian ', 'Ou ', 'Song ', 'Jin ', 'Yin ', 'Lu ', 'Shang ', 'Wei ', 'Tuan ', 'Man ', 'Qian ', 'She ', 'Yong ', 'Qing ', 'Kang ', 'Di ', 'Zhi ', 'Lou ', 'Juan ', 'Qi ', 'Qi ', 'Yu ', 'Ping ', 'Liao ', 'Cong ', 'You ', 'Chong ', 'Zhi ', 'Tong ', 'Cheng ', 'Qi ', 'Qu ', 'Peng ', 'Bei ', 'Bie ', 'Chun ', 'Jiao ', 'Zeng ', 'Chi ', 'Lian ', 'Ping ', 'Kui ', 'Hui ', 'Qiao ', 'Cheng ', 'Yin ', 'Yin ', 'Xi ', 'Xi ', 'Dan ', 'Tan ', 'Duo ', 'Dui ', 'Dui ', 'Su ', 'Jue ', 'Ce ', 'Xiao ', 'Fan ', 'Fen ', 'Lao ', 'Lao ', 'Chong ', 'Han ', 'Qi ', 'Xian ', 'Min ', 'Jing ', 'Liao ', 'Wu ', 'Can ', 'Jue ', 'Cu ', 'Xian ', 'Tan ', 'Sheng ', 'Pi ', 'Yi ', 'Chu ', 'Xian ', 'Nao ', 'Dan ', 'Tan ', 'Jing ', 'Song ', 'Han ', 'Jiao ', 'Wai ', 'Huan ', 'Dong ', 'Qin ', 'Qin ', 'Qu ', 'Cao ', 'Ken ', 'Xie ', 'Ying ', 'Ao ', 'Mao ', 'Yi ', 'Lin ', 'Se ', 'Jun ', 'Huai ', 'Men ', 'Lan ', 'Ai ', 'Lin ', 'Yan ', 'Gua ', 'Xia ', 'Chi ', 'Yu ', 'Yin ', 'Dai ', 'Meng ', 'Ai ', 'Meng ', 'Dui ', 'Qi ', 'Mo ', 'Lan ', 'Men ', 'Chou ', 'Zhi ', 'Nuo ', 'Nuo ', 'Yan ', 'Yang ', 'Bo ', 'Zhi ', 'Kuang ', 'Kuang ', 'You ', 'Fu ', 'Liu ', 'Mie ', 'Cheng ', '[?] ', 'Chan ', 'Meng ', 'Lan ', 'Huai ', 'Xuan ', 'Rang ', 'Chan ', 'Ji ', 'Ju ', 'Huan ', 'She ', 'Yi '];
<?php return ['Lian ', 'Nan ', 'Mi ', 'Tang ', 'Jue ', 'Gang ', 'Gang ', 'Gang ', 'Ge ', 'Yue ', 'Wu ', 'Jian ', 'Xu ', 'Shu ', 'Rong ', 'Xi ', 'Cheng ', 'Wo ', 'Jie ', 'Ge ', 'Jian ', 'Qiang ', 'Huo ', 'Qiang ', 'Zhan ', 'Dong ', 'Qi ', 'Jia ', 'Die ', 'Zei ', 'Jia ', 'Ji ', 'Shi ', 'Kan ', 'Ji ', 'Kui ', 'Gai ', 'Deng ', 'Zhan ', 'Chuang ', 'Ge ', 'Jian ', 'Jie ', 'Yu ', 'Jian ', 'Yan ', 'Lu ', 'Xi ', 'Zhan ', 'Xi ', 'Xi ', 'Chuo ', 'Dai ', 'Qu ', 'Hu ', 'Hu ', 'Hu ', 'E ', 'Shi ', 'Li ', 'Mao ', 'Hu ', 'Li ', 'Fang ', 'Suo ', 'Bian ', 'Dian ', 'Jiong ', 'Shang ', 'Yi ', 'Yi ', 'Shan ', 'Hu ', 'Fei ', 'Yan ', 'Shou ', 'T ', 'Cai ', 'Zha ', 'Qiu ', 'Le ', 'Bu ', 'Ba ', 'Da ', 'Reng ', 'Fu ', 'Hameru ', 'Zai ', 'Tuo ', 'Zhang ', 'Diao ', 'Kang ', 'Yu ', 'Ku ', 'Han ', 'Shen ', 'Cha ', 'Yi ', 'Gu ', 'Kou ', 'Wu ', 'Tuo ', 'Qian ', 'Zhi ', 'Ren ', 'Kuo ', 'Men ', 'Sao ', 'Yang ', 'Niu ', 'Ban ', 'Che ', 'Rao ', 'Xi ', 'Qian ', 'Ban ', 'Jia ', 'Yu ', 'Fu ', 'Ao ', 'Xi ', 'Pi ', 'Zhi ', 'Zi ', 'E ', 'Dun ', 'Zhao ', 'Cheng ', 'Ji ', 'Yan ', 'Kuang ', 'Bian ', 'Chao ', 'Ju ', 'Wen ', 'Hu ', 'Yue ', 'Jue ', 'Ba ', 'Qin ', 'Zhen ', 'Zheng ', 'Yun ', 'Wan ', 'Nu ', 'Yi ', 'Shu ', 'Zhua ', 'Pou ', 'Tou ', 'Dou ', 'Kang ', 'Zhe ', 'Pou ', 'Fu ', 'Pao ', 'Ba ', 'Ao ', 'Ze ', 'Tuan ', 'Kou ', 'Lun ', 'Qiang ', '[?] ', 'Hu ', 'Bao ', 'Bing ', 'Zhi ', 'Peng ', 'Tan ', 'Pu ', 'Pi ', 'Tai ', 'Yao ', 'Zhen ', 'Zha ', 'Yang ', 'Bao ', 'He ', 'Ni ', 'Yi ', 'Di ', 'Chi ', 'Pi ', 'Za ', 'Mo ', 'Mo ', 'Shen ', 'Ya ', 'Chou ', 'Qu ', 'Min ', 'Chu ', 'Jia ', 'Fu ', 'Zhan ', 'Zhu ', 'Dan ', 'Chai ', 'Mu ', 'Nian ', 'La ', 'Fu ', 'Pao ', 'Ban ', 'Pai ', 'Ling ', 'Na ', 'Guai ', 'Qian ', 'Ju ', 'Tuo ', 'Ba ', 'Tuo ', 'Tuo ', 'Ao ', 'Ju ', 'Zhuo ', 'Pan ', 'Zhao ', 'Bai ', 'Bai ', 'Di ', 'Ni ', 'Ju ', 'Kuo ', 'Long ', 'Jian ', '[?] ', 'Yong ', 'Lan ', 'Ning ', 'Bo ', 'Ze ', 'Qian ', 'Hen ', 'Gua ', 'Shi ', 'Jie ', 'Zheng ', 'Nin ', 'Gong ', 'Gong ', 'Quan ', 'Shuan ', 'Cun ', 'Zan ', 'Kao ', 'Chi ', 'Xie ', 'Ce ', 'Hui ', 'Pin ', 'Zhuai ', 'Shi ', 'Na '];
<?php return ['Bo ', 'Chi ', 'Gua ', 'Zhi ', 'Kuo ', 'Duo ', 'Duo ', 'Zhi ', 'Qie ', 'An ', 'Nong ', 'Zhen ', 'Ge ', 'Jiao ', 'Ku ', 'Dong ', 'Ru ', 'Tiao ', 'Lie ', 'Zha ', 'Lu ', 'Die ', 'Wa ', 'Jue ', 'Mushiru ', 'Ju ', 'Zhi ', 'Luan ', 'Ya ', 'Zhua ', 'Ta ', 'Xie ', 'Nao ', 'Dang ', 'Jiao ', 'Zheng ', 'Ji ', 'Hui ', 'Xun ', 'Ku ', 'Ai ', 'Tuo ', 'Nuo ', 'Cuo ', 'Bo ', 'Geng ', 'Ti ', 'Zhen ', 'Cheng ', 'Suo ', 'Suo ', 'Keng ', 'Mei ', 'Long ', 'Ju ', 'Peng ', 'Jian ', 'Yi ', 'Ting ', 'Shan ', 'Nuo ', 'Wan ', 'Xie ', 'Cha ', 'Feng ', 'Jiao ', 'Wu ', 'Jun ', 'Jiu ', 'Tong ', 'Kun ', 'Huo ', 'Tu ', 'Zhuo ', 'Pou ', 'Le ', 'Ba ', 'Han ', 'Shao ', 'Nie ', 'Juan ', 'Ze ', 'Song ', 'Ye ', 'Jue ', 'Bu ', 'Huan ', 'Bu ', 'Zun ', 'Yi ', 'Zhai ', 'Lu ', 'Sou ', 'Tuo ', 'Lao ', 'Sun ', 'Bang ', 'Jian ', 'Huan ', 'Dao ', '[?] ', 'Wan ', 'Qin ', 'Peng ', 'She ', 'Lie ', 'Min ', 'Men ', 'Fu ', 'Bai ', 'Ju ', 'Dao ', 'Wo ', 'Ai ', 'Juan ', 'Yue ', 'Zong ', 'Chen ', 'Chui ', 'Jie ', 'Tu ', 'Ben ', 'Na ', 'Nian ', 'Nuo ', 'Zu ', 'Wo ', 'Xi ', 'Xian ', 'Cheng ', 'Dian ', 'Sao ', 'Lun ', 'Qing ', 'Gang ', 'Duo ', 'Shou ', 'Diao ', 'Pou ', 'Di ', 'Zhang ', 'Gun ', 'Ji ', 'Tao ', 'Qia ', 'Qi ', 'Pai ', 'Shu ', 'Qian ', 'Ling ', 'Yi ', 'Ya ', 'Jue ', 'Zheng ', 'Liang ', 'Gua ', 'Yi ', 'Huo ', 'Shan ', 'Zheng ', 'Lue ', 'Cai ', 'Tan ', 'Che ', 'Bing ', 'Jie ', 'Ti ', 'Kong ', 'Tui ', 'Yan ', 'Cuo ', 'Zou ', 'Ju ', 'Tian ', 'Qian ', 'Ken ', 'Bai ', 'Shou ', 'Jie ', 'Lu ', 'Guo ', 'Haba ', '[?] ', 'Zhi ', 'Dan ', 'Mang ', 'Xian ', 'Sao ', 'Guan ', 'Peng ', 'Yuan ', 'Nuo ', 'Jian ', 'Zhen ', 'Jiu ', 'Jian ', 'Yu ', 'Yan ', 'Kui ', 'Nan ', 'Hong ', 'Rou ', 'Pi ', 'Wei ', 'Sai ', 'Zou ', 'Xuan ', 'Miao ', 'Ti ', 'Nie ', 'Cha ', 'Shi ', 'Zong ', 'Zhen ', 'Yi ', 'Shun ', 'Heng ', 'Bian ', 'Yang ', 'Huan ', 'Yan ', 'Zuan ', 'An ', 'Xu ', 'Ya ', 'Wo ', 'Ke ', 'Chuai ', 'Ji ', 'Ti ', 'La ', 'La ', 'Cheng ', 'Kai ', 'Jiu ', 'Jiu ', 'Tu ', 'Jie ', 'Hui ', 'Geng ', 'Chong ', 'Shuo ', 'She ', 'Xie ', 'Yuan ', 'Qian ', 'Ye ', 'Cha ', 'Zha ', 'Bei ', 'Yao ', '[?] ', '[?] ', 'Lan ', 'Wen ', 'Qin '];
<?php return ['Chan ', 'Ge ', 'Lou ', 'Zong ', 'Geng ', 'Jiao ', 'Gou ', 'Qin ', 'Yong ', 'Que ', 'Chou ', 'Chi ', 'Zhan ', 'Sun ', 'Sun ', 'Bo ', 'Chu ', 'Rong ', 'Beng ', 'Cuo ', 'Sao ', 'Ke ', 'Yao ', 'Dao ', 'Zhi ', 'Nu ', 'Xie ', 'Jian ', 'Sou ', 'Qiu ', 'Gao ', 'Xian ', 'Shuo ', 'Sang ', 'Jin ', 'Mie ', 'E ', 'Chui ', 'Nuo ', 'Shan ', 'Ta ', 'Jie ', 'Tang ', 'Pan ', 'Ban ', 'Da ', 'Li ', 'Tao ', 'Hu ', 'Zhi ', 'Wa ', 'Xia ', 'Qian ', 'Wen ', 'Qiang ', 'Tian ', 'Zhen ', 'E ', 'Xi ', 'Nuo ', 'Quan ', 'Cha ', 'Zha ', 'Ge ', 'Wu ', 'En ', 'She ', 'Kang ', 'She ', 'Shu ', 'Bai ', 'Yao ', 'Bin ', 'Sou ', 'Tan ', 'Sa ', 'Chan ', 'Suo ', 'Liao ', 'Chong ', 'Chuang ', 'Guo ', 'Bing ', 'Feng ', 'Shuai ', 'Di ', 'Qi ', 'Sou ', 'Zhai ', 'Lian ', 'Tang ', 'Chi ', 'Guan ', 'Lu ', 'Luo ', 'Lou ', 'Zong ', 'Gai ', 'Hu ', 'Zha ', 'Chuang ', 'Tang ', 'Hua ', 'Cui ', 'Nai ', 'Mo ', 'Jiang ', 'Gui ', 'Ying ', 'Zhi ', 'Ao ', 'Zhi ', 'Nie ', 'Man ', 'Shan ', 'Kou ', 'Shu ', 'Suo ', 'Tuan ', 'Jiao ', 'Mo ', 'Mo ', 'Zhe ', 'Xian ', 'Keng ', 'Piao ', 'Jiang ', 'Yin ', 'Gou ', 'Qian ', 'Lue ', 'Ji ', 'Ying ', 'Jue ', 'Pie ', 'Pie ', 'Lao ', 'Dun ', 'Xian ', 'Ruan ', 'Kui ', 'Zan ', 'Yi ', 'Xun ', 'Cheng ', 'Cheng ', 'Sa ', 'Nao ', 'Heng ', 'Si ', 'Qian ', 'Huang ', 'Da ', 'Zun ', 'Nian ', 'Lin ', 'Zheng ', 'Hui ', 'Zhuang ', 'Jiao ', 'Ji ', 'Cao ', 'Dan ', 'Dan ', 'Che ', 'Bo ', 'Che ', 'Jue ', 'Xiao ', 'Liao ', 'Ben ', 'Fu ', 'Qiao ', 'Bo ', 'Cuo ', 'Zhuo ', 'Zhuan ', 'Tuo ', 'Pu ', 'Qin ', 'Dun ', 'Nian ', '[?] ', 'Xie ', 'Lu ', 'Jiao ', 'Cuan ', 'Ta ', 'Han ', 'Qiao ', 'Zhua ', 'Jian ', 'Gan ', 'Yong ', 'Lei ', 'Kuo ', 'Lu ', 'Shan ', 'Zhuo ', 'Ze ', 'Pu ', 'Chuo ', 'Ji ', 'Dang ', 'Suo ', 'Cao ', 'Qing ', 'Jing ', 'Huan ', 'Jie ', 'Qin ', 'Kuai ', 'Dan ', 'Xi ', 'Ge ', 'Pi ', 'Bo ', 'Ao ', 'Ju ', 'Ye ', '[?] ', 'Mang ', 'Sou ', 'Mi ', 'Ji ', 'Tai ', 'Zhuo ', 'Dao ', 'Xing ', 'Lan ', 'Ca ', 'Ju ', 'Ye ', 'Ru ', 'Ye ', 'Ye ', 'Ni ', 'Hu ', 'Ji ', 'Bin ', 'Ning ', 'Ge ', 'Zhi ', 'Jie ', 'Kuo ', 'Mo ', 'Jian ', 'Xie ', 'Lie ', 'Tan ', 'Bai ', 'Sou ', 'Lu ', 'Lue ', 'Rao ', 'Zhi '];
<?php return ['Pan ', 'Yang ', 'Lei ', 'Sa ', 'Shu ', 'Zan ', 'Nian ', 'Xian ', 'Jun ', 'Huo ', 'Li ', 'La ', 'Han ', 'Ying ', 'Lu ', 'Long ', 'Qian ', 'Qian ', 'Zan ', 'Qian ', 'Lan ', 'San ', 'Ying ', 'Mei ', 'Rang ', 'Chan ', '[?] ', 'Cuan ', 'Xi ', 'She ', 'Luo ', 'Jun ', 'Mi ', 'Li ', 'Zan ', 'Luan ', 'Tan ', 'Zuan ', 'Li ', 'Dian ', 'Wa ', 'Dang ', 'Jiao ', 'Jue ', 'Lan ', 'Li ', 'Nang ', 'Zhi ', 'Gui ', 'Gui ', 'Qi ', 'Xin ', 'Pu ', 'Sui ', 'Shou ', 'Kao ', 'You ', 'Gai ', 'Yi ', 'Gong ', 'Gan ', 'Ban ', 'Fang ', 'Zheng ', 'Bo ', 'Dian ', 'Kou ', 'Min ', 'Wu ', 'Gu ', 'He ', 'Ce ', 'Xiao ', 'Mi ', 'Chu ', 'Ge ', 'Di ', 'Xu ', 'Jiao ', 'Min ', 'Chen ', 'Jiu ', 'Zhen ', 'Duo ', 'Yu ', 'Chi ', 'Ao ', 'Bai ', 'Xu ', 'Jiao ', 'Duo ', 'Lian ', 'Nie ', 'Bi ', 'Chang ', 'Dian ', 'Duo ', 'Yi ', 'Gan ', 'San ', 'Ke ', 'Yan ', 'Dun ', 'Qi ', 'Dou ', 'Xiao ', 'Duo ', 'Jiao ', 'Jing ', 'Yang ', 'Xia ', 'Min ', 'Shu ', 'Ai ', 'Qiao ', 'Ai ', 'Zheng ', 'Di ', 'Zhen ', 'Fu ', 'Shu ', 'Liao ', 'Qu ', 'Xiong ', 'Xi ', 'Jiao ', 'Sen ', 'Jiao ', 'Zhuo ', 'Yi ', 'Lian ', 'Bi ', 'Li ', 'Xiao ', 'Xiao ', 'Wen ', 'Xue ', 'Qi ', 'Qi ', 'Zhai ', 'Bin ', 'Jue ', 'Zhai ', '[?] ', 'Fei ', 'Ban ', 'Ban ', 'Lan ', 'Yu ', 'Lan ', 'Wei ', 'Dou ', 'Sheng ', 'Liao ', 'Jia ', 'Hu ', 'Xie ', 'Jia ', 'Yu ', 'Zhen ', 'Jiao ', 'Wo ', 'Tou ', 'Chu ', 'Jin ', 'Chi ', 'Yin ', 'Fu ', 'Qiang ', 'Zhan ', 'Qu ', 'Zhuo ', 'Zhan ', 'Duan ', 'Zhuo ', 'Si ', 'Xin ', 'Zhuo ', 'Zhuo ', 'Qin ', 'Lin ', 'Zhuo ', 'Chu ', 'Duan ', 'Zhu ', 'Fang ', 'Xie ', 'Hang ', 'Yu ', 'Shi ', 'Pei ', 'You ', 'Mye ', 'Pang ', 'Qi ', 'Zhan ', 'Mao ', 'Lu ', 'Pei ', 'Pi ', 'Liu ', 'Fu ', 'Fang ', 'Xuan ', 'Jing ', 'Jing ', 'Ni ', 'Zu ', 'Zhao ', 'Yi ', 'Liu ', 'Shao ', 'Jian ', 'Es ', 'Yi ', 'Qi ', 'Zhi ', 'Fan ', 'Piao ', 'Fan ', 'Zhan ', 'Guai ', 'Sui ', 'Yu ', 'Wu ', 'Ji ', 'Ji ', 'Ji ', 'Huo ', 'Ri ', 'Dan ', 'Jiu ', 'Zhi ', 'Zao ', 'Xie ', 'Tiao ', 'Xun ', 'Xu ', 'Xu ', 'Xu ', 'Gan ', 'Han ', 'Tai ', 'Di ', 'Xu ', 'Chan ', 'Shi ', 'Kuang ', 'Yang ', 'Shi ', 'Wang ', 'Min ', 'Min ', 'Tun ', 'Chun ', 'Wu '];
<?php return ['Yun ', 'Bei ', 'Ang ', 'Ze ', 'Ban ', 'Jie ', 'Kun ', 'Sheng ', 'Hu ', 'Fang ', 'Hao ', 'Gui ', 'Chang ', 'Xuan ', 'Ming ', 'Hun ', 'Fen ', 'Qin ', 'Hu ', 'Yi ', 'Xi ', 'Xin ', 'Yan ', 'Ze ', 'Fang ', 'Tan ', 'Shen ', 'Ju ', 'Yang ', 'Zan ', 'Bing ', 'Xing ', 'Ying ', 'Xuan ', 'Pei ', 'Zhen ', 'Ling ', 'Chun ', 'Hao ', 'Mei ', 'Zuo ', 'Mo ', 'Bian ', 'Xu ', 'Hun ', 'Zhao ', 'Zong ', 'Shi ', 'Shi ', 'Yu ', 'Fei ', 'Die ', 'Mao ', 'Ni ', 'Chang ', 'Wen ', 'Dong ', 'Ai ', 'Bing ', 'Ang ', 'Zhou ', 'Long ', 'Xian ', 'Kuang ', 'Tiao ', 'Chao ', 'Shi ', 'Huang ', 'Huang ', 'Xuan ', 'Kui ', 'Xu ', 'Jiao ', 'Jin ', 'Zhi ', 'Jin ', 'Shang ', 'Tong ', 'Hong ', 'Yan ', 'Gai ', 'Xiang ', 'Shai ', 'Xiao ', 'Ye ', 'Yun ', 'Hui ', 'Han ', 'Han ', 'Jun ', 'Wan ', 'Xian ', 'Kun ', 'Zhou ', 'Xi ', 'Cheng ', 'Sheng ', 'Bu ', 'Zhe ', 'Zhe ', 'Wu ', 'Han ', 'Hui ', 'Hao ', 'Chen ', 'Wan ', 'Tian ', 'Zhuo ', 'Zui ', 'Zhou ', 'Pu ', 'Jing ', 'Xi ', 'Shan ', 'Yi ', 'Xi ', 'Qing ', 'Qi ', 'Jing ', 'Gui ', 'Zhen ', 'Yi ', 'Zhi ', 'An ', 'Wan ', 'Lin ', 'Liang ', 'Chang ', 'Wang ', 'Xiao ', 'Zan ', 'Hi ', 'Xuan ', 'Xuan ', 'Yi ', 'Xia ', 'Yun ', 'Hui ', 'Fu ', 'Min ', 'Kui ', 'He ', 'Ying ', 'Du ', 'Wei ', 'Shu ', 'Qing ', 'Mao ', 'Nan ', 'Jian ', 'Nuan ', 'An ', 'Yang ', 'Chun ', 'Yao ', 'Suo ', 'Jin ', 'Ming ', 'Jiao ', 'Kai ', 'Gao ', 'Weng ', 'Chang ', 'Qi ', 'Hao ', 'Yan ', 'Li ', 'Ai ', 'Ji ', 'Gui ', 'Men ', 'Zan ', 'Xie ', 'Hao ', 'Mu ', 'Mo ', 'Cong ', 'Ni ', 'Zhang ', 'Hui ', 'Bao ', 'Han ', 'Xuan ', 'Chuan ', 'Liao ', 'Xian ', 'Dan ', 'Jing ', 'Pie ', 'Lin ', 'Tun ', 'Xi ', 'Yi ', 'Ji ', 'Huang ', 'Tai ', 'Ye ', 'Ye ', 'Li ', 'Tan ', 'Tong ', 'Xiao ', 'Fei ', 'Qin ', 'Zhao ', 'Hao ', 'Yi ', 'Xiang ', 'Xing ', 'Sen ', 'Jiao ', 'Bao ', 'Jing ', 'Yian ', 'Ai ', 'Ye ', 'Ru ', 'Shu ', 'Meng ', 'Xun ', 'Yao ', 'Pu ', 'Li ', 'Chen ', 'Kuang ', 'Die ', '[?] ', 'Yan ', 'Huo ', 'Lu ', 'Xi ', 'Rong ', 'Long ', 'Nang ', 'Luo ', 'Luan ', 'Shai ', 'Tang ', 'Yan ', 'Chu ', 'Yue ', 'Yue ', 'Qu ', 'Yi ', 'Geng ', 'Ye ', 'Hu ', 'He ', 'Shu ', 'Cao ', 'Cao ', 'Noboru ', 'Man ', 'Ceng ', 'Ceng ', 'Ti '];
<?php return ['Zui ', 'Can ', 'Xu ', 'Hui ', 'Yin ', 'Qie ', 'Fen ', 'Pi ', 'Yue ', 'You ', 'Ruan ', 'Peng ', 'Ban ', 'Fu ', 'Ling ', 'Fei ', 'Qu ', '[?] ', 'Nu ', 'Tiao ', 'Shuo ', 'Zhen ', 'Lang ', 'Lang ', 'Juan ', 'Ming ', 'Huang ', 'Wang ', 'Tun ', 'Zhao ', 'Ji ', 'Qi ', 'Ying ', 'Zong ', 'Wang ', 'Tong ', 'Lang ', '[?] ', 'Meng ', 'Long ', 'Mu ', 'Deng ', 'Wei ', 'Mo ', 'Ben ', 'Zha ', 'Zhu ', 'Zhu ', '[?] ', 'Zhu ', 'Ren ', 'Ba ', 'Po ', 'Duo ', 'Duo ', 'Dao ', 'Li ', 'Qiu ', 'Ji ', 'Jiu ', 'Bi ', 'Xiu ', 'Ting ', 'Ci ', 'Sha ', 'Eburi ', 'Za ', 'Quan ', 'Qian ', 'Yu ', 'Gan ', 'Wu ', 'Cha ', 'Shan ', 'Xun ', 'Fan ', 'Wu ', 'Zi ', 'Li ', 'Xing ', 'Cai ', 'Cun ', 'Ren ', 'Shao ', 'Tuo ', 'Di ', 'Zhang ', 'Mang ', 'Chi ', 'Yi ', 'Gu ', 'Gong ', 'Du ', 'Yi ', 'Qi ', 'Shu ', 'Gang ', 'Tiao ', 'Moku ', 'Soma ', 'Tochi ', 'Lai ', 'Sugi ', 'Mang ', 'Yang ', 'Ma ', 'Miao ', 'Si ', 'Yuan ', 'Hang ', 'Fei ', 'Bei ', 'Jie ', 'Dong ', 'Gao ', 'Yao ', 'Xian ', 'Chu ', 'Qun ', 'Pa ', 'Shu ', 'Hua ', 'Xin ', 'Chou ', 'Zhu ', 'Chou ', 'Song ', 'Ban ', 'Song ', 'Ji ', 'Yue ', 'Jin ', 'Gou ', 'Ji ', 'Mao ', 'Pi ', 'Bi ', 'Wang ', 'Ang ', 'Fang ', 'Fen ', 'Yi ', 'Fu ', 'Nan ', 'Xi ', 'Hu ', 'Ya ', 'Dou ', 'Xun ', 'Zhen ', 'Yao ', 'Lin ', 'Rui ', 'E ', 'Mei ', 'Zhao ', 'Guo ', 'Zhi ', 'Cong ', 'Yun ', 'Waku ', 'Dou ', 'Shu ', 'Zao ', '[?] ', 'Li ', 'Haze ', 'Jian ', 'Cheng ', 'Matsu ', 'Qiang ', 'Feng ', 'Nan ', 'Xiao ', 'Xian ', 'Ku ', 'Ping ', 'Yi ', 'Xi ', 'Zhi ', 'Guai ', 'Xiao ', 'Jia ', 'Jia ', 'Gou ', 'Fu ', 'Mo ', 'Yi ', 'Ye ', 'Ye ', 'Shi ', 'Nie ', 'Bi ', 'Duo ', 'Yi ', 'Ling ', 'Bing ', 'Ni ', 'La ', 'He ', 'Pan ', 'Fan ', 'Zhong ', 'Dai ', 'Ci ', 'Yang ', 'Fu ', 'Bo ', 'Mou ', 'Gan ', 'Qi ', 'Ran ', 'Rou ', 'Mao ', 'Zhao ', 'Song ', 'Zhe ', 'Xia ', 'You ', 'Shen ', 'Ju ', 'Tuo ', 'Zuo ', 'Nan ', 'Ning ', 'Yong ', 'Di ', 'Zhi ', 'Zha ', 'Cha ', 'Dan ', 'Gu ', 'Pu ', 'Jiu ', 'Ao ', 'Fu ', 'Jian ', 'Bo ', 'Duo ', 'Ke ', 'Nai ', 'Zhu ', 'Bi ', 'Liu ', 'Chai ', 'Zha ', 'Si ', 'Zhu ', 'Pei ', 'Shi ', 'Guai ', 'Cha ', 'Yao ', 'Jue ', 'Jiu ', 'Shi '];
<?php return ['Zhi ', 'Liu ', 'Mei ', 'Hoy ', 'Rong ', 'Zha ', '[?] ', 'Biao ', 'Zhan ', 'Jie ', 'Long ', 'Dong ', 'Lu ', 'Sayng ', 'Li ', 'Lan ', 'Yong ', 'Shu ', 'Xun ', 'Shuan ', 'Qi ', 'Zhen ', 'Qi ', 'Li ', 'Yi ', 'Xiang ', 'Zhen ', 'Li ', 'Su ', 'Gua ', 'Kan ', 'Bing ', 'Ren ', 'Xiao ', 'Bo ', 'Ren ', 'Bing ', 'Zi ', 'Chou ', 'Yi ', 'Jie ', 'Xu ', 'Zhu ', 'Jian ', 'Zui ', 'Er ', 'Er ', 'You ', 'Fa ', 'Gong ', 'Kao ', 'Lao ', 'Zhan ', 'Li ', 'Yin ', 'Yang ', 'He ', 'Gen ', 'Zhi ', 'Chi ', 'Ge ', 'Zai ', 'Luan ', 'Fu ', 'Jie ', 'Hang ', 'Gui ', 'Tao ', 'Guang ', 'Wei ', 'Kuang ', 'Ru ', 'An ', 'An ', 'Juan ', 'Yi ', 'Zhuo ', 'Ku ', 'Zhi ', 'Qiong ', 'Tong ', 'Sang ', 'Sang ', 'Huan ', 'Jie ', 'Jiu ', 'Xue ', 'Duo ', 'Zhui ', 'Yu ', 'Zan ', 'Kasei ', 'Ying ', 'Masu ', '[?] ', 'Zhan ', 'Ya ', 'Nao ', 'Zhen ', 'Dang ', 'Qi ', 'Qiao ', 'Hua ', 'Kuai ', 'Jiang ', 'Zhuang ', 'Xun ', 'Suo ', 'Sha ', 'Zhen ', 'Bei ', 'Ting ', 'Gua ', 'Jing ', 'Bo ', 'Ben ', 'Fu ', 'Rui ', 'Tong ', 'Jue ', 'Xi ', 'Lang ', 'Liu ', 'Feng ', 'Qi ', 'Wen ', 'Jun ', 'Gan ', 'Cu ', 'Liang ', 'Qiu ', 'Ting ', 'You ', 'Mei ', 'Bang ', 'Long ', 'Peng ', 'Zhuang ', 'Di ', 'Xuan ', 'Tu ', 'Zao ', 'Ao ', 'Gu ', 'Bi ', 'Di ', 'Han ', 'Zi ', 'Zhi ', 'Ren ', 'Bei ', 'Geng ', 'Jian ', 'Huan ', 'Wan ', 'Nuo ', 'Jia ', 'Tiao ', 'Ji ', 'Xiao ', 'Lu ', 'Huan ', 'Shao ', 'Cen ', 'Fen ', 'Song ', 'Meng ', 'Wu ', 'Li ', 'Li ', 'Dou ', 'Cen ', 'Ying ', 'Suo ', 'Ju ', 'Ti ', 'Jie ', 'Kun ', 'Zhuo ', 'Shu ', 'Chan ', 'Fan ', 'Wei ', 'Jing ', 'Li ', 'Bing ', 'Fumoto ', 'Shikimi ', 'Tao ', 'Zhi ', 'Lai ', 'Lian ', 'Jian ', 'Zhuo ', 'Ling ', 'Li ', 'Qi ', 'Bing ', 'Zhun ', 'Cong ', 'Qian ', 'Mian ', 'Qi ', 'Qi ', 'Cai ', 'Gun ', 'Chan ', 'Te ', 'Fei ', 'Pai ', 'Bang ', 'Pou ', 'Hun ', 'Zong ', 'Cheng ', 'Zao ', 'Ji ', 'Li ', 'Peng ', 'Yu ', 'Yu ', 'Gu ', 'Hun ', 'Dong ', 'Tang ', 'Gang ', 'Wang ', 'Di ', 'Xi ', 'Fan ', 'Cheng ', 'Zhan ', 'Qi ', 'Yuan ', 'Yan ', 'Yu ', 'Quan ', 'Yi ', 'Sen ', 'Ren ', 'Chui ', 'Leng ', 'Qi ', 'Zhuo ', 'Fu ', 'Ke ', 'Lai ', 'Zou ', 'Zou ', 'Zhuo ', 'Guan ', 'Fen ', 'Fen ', 'Chen ', 'Qiong ', 'Nie '];
<?php return ['Wan ', 'Guo ', 'Lu ', 'Hao ', 'Jie ', 'Yi ', 'Chou ', 'Ju ', 'Ju ', 'Cheng ', 'Zuo ', 'Liang ', 'Qiang ', 'Zhi ', 'Zhui ', 'Ya ', 'Ju ', 'Bei ', 'Jiao ', 'Zhuo ', 'Zi ', 'Bin ', 'Peng ', 'Ding ', 'Chu ', 'Chang ', 'Kunugi ', 'Momiji ', 'Jian ', 'Gui ', 'Xi ', 'Du ', 'Qian ', 'Kunugi ', 'Soko ', 'Shide ', 'Luo ', 'Zhi ', 'Ken ', 'Myeng ', 'Tafu ', '[?] ', 'Peng ', 'Zhan ', '[?] ', 'Tuo ', 'Sen ', 'Duo ', 'Ye ', 'Fou ', 'Wei ', 'Wei ', 'Duan ', 'Jia ', 'Zong ', 'Jian ', 'Yi ', 'Shen ', 'Xi ', 'Yan ', 'Yan ', 'Chuan ', 'Zhan ', 'Chun ', 'Yu ', 'He ', 'Zha ', 'Wo ', 'Pian ', 'Bi ', 'Yao ', 'Huo ', 'Xu ', 'Ruo ', 'Yang ', 'La ', 'Yan ', 'Ben ', 'Hun ', 'Kui ', 'Jie ', 'Kui ', 'Si ', 'Feng ', 'Xie ', 'Tuo ', 'Zhi ', 'Jian ', 'Mu ', 'Mao ', 'Chu ', 'Hu ', 'Hu ', 'Lian ', 'Leng ', 'Ting ', 'Nan ', 'Yu ', 'You ', 'Mei ', 'Song ', 'Xuan ', 'Xuan ', 'Ying ', 'Zhen ', 'Pian ', 'Ye ', 'Ji ', 'Jie ', 'Ye ', 'Chu ', 'Shun ', 'Yu ', 'Cou ', 'Wei ', 'Mei ', 'Di ', 'Ji ', 'Jie ', 'Kai ', 'Qiu ', 'Ying ', 'Rou ', 'Heng ', 'Lou ', 'Le ', 'Hazou ', 'Katsura ', 'Pin ', 'Muro ', 'Gai ', 'Tan ', 'Lan ', 'Yun ', 'Yu ', 'Chen ', 'Lu ', 'Ju ', 'Sakaki ', '[?] ', 'Pi ', 'Xie ', 'Jia ', 'Yi ', 'Zhan ', 'Fu ', 'Nai ', 'Mi ', 'Lang ', 'Rong ', 'Gu ', 'Jian ', 'Ju ', 'Ta ', 'Yao ', 'Zhen ', 'Bang ', 'Sha ', 'Yuan ', 'Zi ', 'Ming ', 'Su ', 'Jia ', 'Yao ', 'Jie ', 'Huang ', 'Gan ', 'Fei ', 'Zha ', 'Qian ', 'Ma ', 'Sun ', 'Yuan ', 'Xie ', 'Rong ', 'Shi ', 'Zhi ', 'Cui ', 'Yun ', 'Ting ', 'Liu ', 'Rong ', 'Tang ', 'Que ', 'Zhai ', 'Si ', 'Sheng ', 'Ta ', 'Ke ', 'Xi ', 'Gu ', 'Qi ', 'Kao ', 'Gao ', 'Sun ', 'Pan ', 'Tao ', 'Ge ', 'Xun ', 'Dian ', 'Nou ', 'Ji ', 'Shuo ', 'Gou ', 'Chui ', 'Qiang ', 'Cha ', 'Qian ', 'Huai ', 'Mei ', 'Xu ', 'Gang ', 'Gao ', 'Zhuo ', 'Tuo ', 'Hashi ', 'Yang ', 'Dian ', 'Jia ', 'Jian ', 'Zui ', 'Kashi ', 'Ori ', 'Bin ', 'Zhu ', '[?] ', 'Xi ', 'Qi ', 'Lian ', 'Hui ', 'Yong ', 'Qian ', 'Guo ', 'Gai ', 'Gai ', 'Tuan ', 'Hua ', 'Cu ', 'Sen ', 'Cui ', 'Beng ', 'You ', 'Hu ', 'Jiang ', 'Hu ', 'Huan ', 'Kui ', 'Yi ', 'Nie ', 'Gao ', 'Kang ', 'Gui ', 'Gui ', 'Cao ', 'Man ', 'Jin '];
<?php return ['Di ', 'Zhuang ', 'Le ', 'Lang ', 'Chen ', 'Cong ', 'Li ', 'Xiu ', 'Qing ', 'Shuang ', 'Fan ', 'Tong ', 'Guan ', 'Ji ', 'Suo ', 'Lei ', 'Lu ', 'Liang ', 'Mi ', 'Lou ', 'Chao ', 'Su ', 'Ke ', 'Shu ', 'Tang ', 'Biao ', 'Lu ', 'Jiu ', 'Shu ', 'Zha ', 'Shu ', 'Zhang ', 'Men ', 'Mo ', 'Niao ', 'Yang ', 'Tiao ', 'Peng ', 'Zhu ', 'Sha ', 'Xi ', 'Quan ', 'Heng ', 'Jian ', 'Cong ', '[?] ', 'Hokuso ', 'Qiang ', 'Tara ', 'Ying ', 'Er ', 'Xin ', 'Zhi ', 'Qiao ', 'Zui ', 'Cong ', 'Pu ', 'Shu ', 'Hua ', 'Kui ', 'Zhen ', 'Zun ', 'Yue ', 'Zhan ', 'Xi ', 'Xun ', 'Dian ', 'Fa ', 'Gan ', 'Mo ', 'Wu ', 'Qiao ', 'Nao ', 'Lin ', 'Liu ', 'Qiao ', 'Xian ', 'Run ', 'Fan ', 'Zhan ', 'Tuo ', 'Lao ', 'Yun ', 'Shun ', 'Tui ', 'Cheng ', 'Tang ', 'Meng ', 'Ju ', 'Cheng ', 'Su ', 'Jue ', 'Jue ', 'Tan ', 'Hui ', 'Ji ', 'Nuo ', 'Xiang ', 'Tuo ', 'Ning ', 'Rui ', 'Zhu ', 'Chuang ', 'Zeng ', 'Fen ', 'Qiong ', 'Ran ', 'Heng ', 'Cen ', 'Gu ', 'Liu ', 'Lao ', 'Gao ', 'Chu ', 'Zusa ', 'Nude ', 'Ca ', 'San ', 'Ji ', 'Dou ', 'Shou ', 'Lu ', '[?] ', '[?] ', 'Yuan ', 'Ta ', 'Shu ', 'Jiang ', 'Tan ', 'Lin ', 'Nong ', 'Yin ', 'Xi ', 'Sui ', 'Shan ', 'Zui ', 'Xuan ', 'Cheng ', 'Gan ', 'Ju ', 'Zui ', 'Yi ', 'Qin ', 'Pu ', 'Yan ', 'Lei ', 'Feng ', 'Hui ', 'Dang ', 'Ji ', 'Sui ', 'Bo ', 'Bi ', 'Ding ', 'Chu ', 'Zhua ', 'Kuai ', 'Ji ', 'Jie ', 'Jia ', 'Qing ', 'Zhe ', 'Jian ', 'Qiang ', 'Dao ', 'Yi ', 'Biao ', 'Song ', 'She ', 'Lin ', 'Kunugi ', 'Cha ', 'Meng ', 'Yin ', 'Tao ', 'Tai ', 'Mian ', 'Qi ', 'Toan ', 'Bin ', 'Huo ', 'Ji ', 'Qian ', 'Mi ', 'Ning ', 'Yi ', 'Gao ', 'Jian ', 'Yin ', 'Er ', 'Qing ', 'Yan ', 'Qi ', 'Mi ', 'Zhao ', 'Gui ', 'Chun ', 'Ji ', 'Kui ', 'Po ', 'Deng ', 'Chu ', '[?] ', 'Mian ', 'You ', 'Zhi ', 'Guang ', 'Qian ', 'Lei ', 'Lei ', 'Sa ', 'Lu ', 'Li ', 'Cuan ', 'Lu ', 'Mie ', 'Hui ', 'Ou ', 'Lu ', 'Jie ', 'Gao ', 'Du ', 'Yuan ', 'Li ', 'Fei ', 'Zhuo ', 'Sou ', 'Lian ', 'Tamo ', 'Chu ', '[?] ', 'Zhu ', 'Lu ', 'Yan ', 'Li ', 'Zhu ', 'Chen ', 'Jie ', 'E ', 'Su ', 'Huai ', 'Nie ', 'Yu ', 'Long ', 'Lai ', '[?] ', 'Xian ', 'Kwi ', 'Ju ', 'Xiao ', 'Ling ', 'Ying ', 'Jian ', 'Yin ', 'You ', 'Ying '];
<?php return ['Xiang ', 'Nong ', 'Bo ', 'Chan ', 'Lan ', 'Ju ', 'Shuang ', 'She ', 'Wei ', 'Cong ', 'Quan ', 'Qu ', 'Cang ', '[?] ', 'Yu ', 'Luo ', 'Li ', 'Zan ', 'Luan ', 'Dang ', 'Jue ', 'Em ', 'Lan ', 'Lan ', 'Zhu ', 'Lei ', 'Li ', 'Ba ', 'Nang ', 'Yu ', 'Ling ', 'Tsuki ', 'Qian ', 'Ci ', 'Huan ', 'Xin ', 'Yu ', 'Yu ', 'Qian ', 'Ou ', 'Xu ', 'Chao ', 'Chu ', 'Chi ', 'Kai ', 'Yi ', 'Jue ', 'Xi ', 'Xu ', 'Xia ', 'Yu ', 'Kuai ', 'Lang ', 'Kuan ', 'Shuo ', 'Xi ', 'Ai ', 'Yi ', 'Qi ', 'Hu ', 'Chi ', 'Qin ', 'Kuan ', 'Kan ', 'Kuan ', 'Kan ', 'Chuan ', 'Sha ', 'Gua ', 'Yin ', 'Xin ', 'Xie ', 'Yu ', 'Qian ', 'Xiao ', 'Yi ', 'Ge ', 'Wu ', 'Tan ', 'Jin ', 'Ou ', 'Hu ', 'Ti ', 'Huan ', 'Xu ', 'Pen ', 'Xi ', 'Xiao ', 'Xu ', 'Xi ', 'Sen ', 'Lian ', 'Chu ', 'Yi ', 'Kan ', 'Yu ', 'Chuo ', 'Huan ', 'Zhi ', 'Zheng ', 'Ci ', 'Bu ', 'Wu ', 'Qi ', 'Bu ', 'Bu ', 'Wai ', 'Ju ', 'Qian ', 'Chi ', 'Se ', 'Chi ', 'Se ', 'Zhong ', 'Sui ', 'Sui ', 'Li ', 'Cuo ', 'Yu ', 'Li ', 'Gui ', 'Dai ', 'Dai ', 'Si ', 'Jian ', 'Zhe ', 'Mo ', 'Mo ', 'Yao ', 'Mo ', 'Cu ', 'Yang ', 'Tian ', 'Sheng ', 'Dai ', 'Shang ', 'Xu ', 'Xun ', 'Shu ', 'Can ', 'Jue ', 'Piao ', 'Qia ', 'Qiu ', 'Su ', 'Qing ', 'Yun ', 'Lian ', 'Yi ', 'Fou ', 'Zhi ', 'Ye ', 'Can ', 'Hun ', 'Dan ', 'Ji ', 'Ye ', 'Zhen ', 'Yun ', 'Wen ', 'Chou ', 'Bin ', 'Ti ', 'Jin ', 'Shang ', 'Yin ', 'Diao ', 'Cu ', 'Hui ', 'Cuan ', 'Yi ', 'Dan ', 'Du ', 'Jiang ', 'Lian ', 'Bin ', 'Du ', 'Tsukusu ', 'Jian ', 'Shu ', 'Ou ', 'Duan ', 'Zhu ', 'Yin ', 'Qing ', 'Yi ', 'Sha ', 'Que ', 'Ke ', 'Yao ', 'Jun ', 'Dian ', 'Hui ', 'Hui ', 'Gu ', 'Que ', 'Ji ', 'Yi ', 'Ou ', 'Hui ', 'Duan ', 'Yi ', 'Xiao ', 'Wu ', 'Guan ', 'Mu ', 'Mei ', 'Mei ', 'Ai ', 'Zuo ', 'Du ', 'Yu ', 'Bi ', 'Bi ', 'Bi ', 'Pi ', 'Pi ', 'Bi ', 'Chan ', 'Mao ', '[?] ', '[?] ', 'Pu ', 'Mushiru ', 'Jia ', 'Zhan ', 'Sai ', 'Mu ', 'Tuo ', 'Xun ', 'Er ', 'Rong ', 'Xian ', 'Ju ', 'Mu ', 'Hao ', 'Qiu ', 'Dou ', 'Mushiru ', 'Tan ', 'Pei ', 'Ju ', 'Duo ', 'Cui ', 'Bi ', 'San ', '[?] ', 'Mao ', 'Sui ', 'Yu ', 'Yu ', 'Tuo ', 'He ', 'Jian ', 'Ta ', 'San '];
<?php return ['Lu ', 'Mu ', 'Li ', 'Tong ', 'Rong ', 'Chang ', 'Pu ', 'Luo ', 'Zhan ', 'Sao ', 'Zhan ', 'Meng ', 'Luo ', 'Qu ', 'Die ', 'Shi ', 'Di ', 'Min ', 'Jue ', 'Mang ', 'Qi ', 'Pie ', 'Nai ', 'Qi ', 'Dao ', 'Xian ', 'Chuan ', 'Fen ', 'Ri ', 'Nei ', '[?] ', 'Fu ', 'Shen ', 'Dong ', 'Qing ', 'Qi ', 'Yin ', 'Xi ', 'Hai ', 'Yang ', 'An ', 'Ya ', 'Ke ', 'Qing ', 'Ya ', 'Dong ', 'Dan ', 'Lu ', 'Qing ', 'Yang ', 'Yun ', 'Yun ', 'Shui ', 'San ', 'Zheng ', 'Bing ', 'Yong ', 'Dang ', 'Shitamizu ', 'Le ', 'Ni ', 'Tun ', 'Fan ', 'Gui ', 'Ting ', 'Zhi ', 'Qiu ', 'Bin ', 'Ze ', 'Mian ', 'Cuan ', 'Hui ', 'Diao ', 'Yi ', 'Cha ', 'Zhuo ', 'Chuan ', 'Wan ', 'Fan ', 'Dai ', 'Xi ', 'Tuo ', 'Mang ', 'Qiu ', 'Qi ', 'Shan ', 'Pai ', 'Han ', 'Qian ', 'Wu ', 'Wu ', 'Xun ', 'Si ', 'Ru ', 'Gong ', 'Jiang ', 'Chi ', 'Wu ', 'Tsuchi ', '[?] ', 'Tang ', 'Zhi ', 'Chi ', 'Qian ', 'Mi ', 'Yu ', 'Wang ', 'Qing ', 'Jing ', 'Rui ', 'Jun ', 'Hong ', 'Tai ', 'Quan ', 'Ji ', 'Bian ', 'Bian ', 'Gan ', 'Wen ', 'Zhong ', 'Fang ', 'Xiong ', 'Jue ', 'Hang ', 'Niou ', 'Qi ', 'Fen ', 'Xu ', 'Xu ', 'Qin ', 'Yi ', 'Wo ', 'Yun ', 'Yuan ', 'Hang ', 'Yan ', 'Chen ', 'Chen ', 'Dan ', 'You ', 'Dun ', 'Hu ', 'Huo ', 'Qie ', 'Mu ', 'Rou ', 'Mei ', 'Ta ', 'Mian ', 'Wu ', 'Chong ', 'Tian ', 'Bi ', 'Sha ', 'Zhi ', 'Pei ', 'Pan ', 'Zhui ', 'Za ', 'Gou ', 'Liu ', 'Mei ', 'Ze ', 'Feng ', 'Ou ', 'Li ', 'Lun ', 'Cang ', 'Feng ', 'Wei ', 'Hu ', 'Mo ', 'Mei ', 'Shu ', 'Ju ', 'Zan ', 'Tuo ', 'Tuo ', 'Tuo ', 'He ', 'Li ', 'Mi ', 'Yi ', 'Fa ', 'Fei ', 'You ', 'Tian ', 'Zhi ', 'Zhao ', 'Gu ', 'Zhan ', 'Yan ', 'Si ', 'Kuang ', 'Jiong ', 'Ju ', 'Xie ', 'Qiu ', 'Yi ', 'Jia ', 'Zhong ', 'Quan ', 'Bo ', 'Hui ', 'Mi ', 'Ben ', 'Zhuo ', 'Chu ', 'Le ', 'You ', 'Gu ', 'Hong ', 'Gan ', 'Fa ', 'Mao ', 'Si ', 'Hu ', 'Ping ', 'Ci ', 'Fan ', 'Chi ', 'Su ', 'Ning ', 'Cheng ', 'Ling ', 'Pao ', 'Bo ', 'Qi ', 'Si ', 'Ni ', 'Ju ', 'Yue ', 'Zhu ', 'Sheng ', 'Lei ', 'Xuan ', 'Xue ', 'Fu ', 'Pan ', 'Min ', 'Tai ', 'Yang ', 'Ji ', 'Yong ', 'Guan ', 'Beng ', 'Xue ', 'Long ', 'Lu ', '[?] ', 'Bo ', 'Xie ', 'Po ', 'Ze ', 'Jing ', 'Yin '];
<?php return ['Zhou ', 'Ji ', 'Yi ', 'Hui ', 'Hui ', 'Zui ', 'Cheng ', 'Yin ', 'Wei ', 'Hou ', 'Jian ', 'Yang ', 'Lie ', 'Si ', 'Ji ', 'Er ', 'Xing ', 'Fu ', 'Sa ', 'Suo ', 'Zhi ', 'Yin ', 'Wu ', 'Xi ', 'Kao ', 'Zhu ', 'Jiang ', 'Luo ', '[?] ', 'An ', 'Dong ', 'Yi ', 'Mou ', 'Lei ', 'Yi ', 'Mi ', 'Quan ', 'Jin ', 'Mo ', 'Wei ', 'Xiao ', 'Xie ', 'Hong ', 'Xu ', 'Shuo ', 'Kuang ', 'Tao ', 'Qie ', 'Ju ', 'Er ', 'Zhou ', 'Ru ', 'Ping ', 'Xun ', 'Xiong ', 'Zhi ', 'Guang ', 'Huan ', 'Ming ', 'Huo ', 'Wa ', 'Qia ', 'Pai ', 'Wu ', 'Qu ', 'Liu ', 'Yi ', 'Jia ', 'Jing ', 'Qian ', 'Jiang ', 'Jiao ', 'Cheng ', 'Shi ', 'Zhuo ', 'Ce ', 'Pal ', 'Kuai ', 'Ji ', 'Liu ', 'Chan ', 'Hun ', 'Hu ', 'Nong ', 'Xun ', 'Jin ', 'Lie ', 'Qiu ', 'Wei ', 'Zhe ', 'Jun ', 'Han ', 'Bang ', 'Mang ', 'Zhuo ', 'You ', 'Xi ', 'Bo ', 'Dou ', 'Wan ', 'Hong ', 'Yi ', 'Pu ', 'Ying ', 'Lan ', 'Hao ', 'Lang ', 'Han ', 'Li ', 'Geng ', 'Fu ', 'Wu ', 'Lian ', 'Chun ', 'Feng ', 'Yi ', 'Yu ', 'Tong ', 'Lao ', 'Hai ', 'Jin ', 'Jia ', 'Chong ', 'Weng ', 'Mei ', 'Sui ', 'Cheng ', 'Pei ', 'Xian ', 'Shen ', 'Tu ', 'Kun ', 'Pin ', 'Nie ', 'Han ', 'Jing ', 'Xiao ', 'She ', 'Nian ', 'Tu ', 'Yong ', 'Xiao ', 'Xian ', 'Ting ', 'E ', 'Su ', 'Tun ', 'Juan ', 'Cen ', 'Ti ', 'Li ', 'Shui ', 'Si ', 'Lei ', 'Shui ', 'Tao ', 'Du ', 'Lao ', 'Lai ', 'Lian ', 'Wei ', 'Wo ', 'Yun ', 'Huan ', 'Di ', '[?] ', 'Run ', 'Jian ', 'Zhang ', 'Se ', 'Fu ', 'Guan ', 'Xing ', 'Shou ', 'Shuan ', 'Ya ', 'Chuo ', 'Zhang ', 'Ye ', 'Kong ', 'Wo ', 'Han ', 'Tuo ', 'Dong ', 'He ', 'Wo ', 'Ju ', 'Gan ', 'Liang ', 'Hun ', 'Ta ', 'Zhuo ', 'Dian ', 'Qie ', 'De ', 'Juan ', 'Zi ', 'Xi ', 'Yao ', 'Qi ', 'Gu ', 'Guo ', 'Han ', 'Lin ', 'Tang ', 'Zhou ', 'Peng ', 'Hao ', 'Chang ', 'Shu ', 'Qi ', 'Fang ', 'Chi ', 'Lu ', 'Nao ', 'Ju ', 'Tao ', 'Cong ', 'Lei ', 'Zhi ', 'Peng ', 'Fei ', 'Song ', 'Tian ', 'Pi ', 'Dan ', 'Yu ', 'Ni ', 'Yu ', 'Lu ', 'Gan ', 'Mi ', 'Jing ', 'Ling ', 'Lun ', 'Yin ', 'Cui ', 'Qu ', 'Huai ', 'Yu ', 'Nian ', 'Shen ', 'Piao ', 'Chun ', 'Wa ', 'Yuan ', 'Lai ', 'Hun ', 'Qing ', 'Yan ', 'Qian ', 'Tian ', 'Miao ', 'Zhi ', 'Yin ', 'Mi '];
<?php return ['Ben ', 'Yuan ', 'Wen ', 'Re ', 'Fei ', 'Qing ', 'Yuan ', 'Ke ', 'Ji ', 'She ', 'Yuan ', 'Shibui ', 'Lu ', 'Zi ', 'Du ', '[?] ', 'Jian ', 'Min ', 'Pi ', 'Tani ', 'Yu ', 'Yuan ', 'Shen ', 'Shen ', 'Rou ', 'Huan ', 'Zhu ', 'Jian ', 'Nuan ', 'Yu ', 'Qiu ', 'Ting ', 'Qu ', 'Du ', 'Feng ', 'Zha ', 'Bo ', 'Wo ', 'Wo ', 'Di ', 'Wei ', 'Wen ', 'Ru ', 'Xie ', 'Ce ', 'Wei ', 'Ge ', 'Gang ', 'Yan ', 'Hong ', 'Xuan ', 'Mi ', 'Ke ', 'Mao ', 'Ying ', 'Yan ', 'You ', 'Hong ', 'Miao ', 'Xing ', 'Mei ', 'Zai ', 'Hun ', 'Nai ', 'Kui ', 'Shi ', 'E ', 'Pai ', 'Mei ', 'Lian ', 'Qi ', 'Qi ', 'Mei ', 'Tian ', 'Cou ', 'Wei ', 'Can ', 'Tuan ', 'Mian ', 'Hui ', 'Mo ', 'Xu ', 'Ji ', 'Pen ', 'Jian ', 'Jian ', 'Hu ', 'Feng ', 'Xiang ', 'Yi ', 'Yin ', 'Zhan ', 'Shi ', 'Jie ', 'Cheng ', 'Huang ', 'Tan ', 'Yu ', 'Bi ', 'Min ', 'Shi ', 'Tu ', 'Sheng ', 'Yong ', 'Qu ', 'Zhong ', 'Suei ', 'Jiu ', 'Jiao ', 'Qiou ', 'Yin ', 'Tang ', 'Long ', 'Huo ', 'Yuan ', 'Nan ', 'Ban ', 'You ', 'Quan ', 'Chui ', 'Liang ', 'Chan ', 'Yan ', 'Chun ', 'Nie ', 'Zi ', 'Wan ', 'Shi ', 'Man ', 'Ying ', 'Ratsu ', 'Kui ', '[?] ', 'Jian ', 'Xu ', 'Lu ', 'Gui ', 'Gai ', '[?] ', '[?] ', 'Po ', 'Jin ', 'Gui ', 'Tang ', 'Yuan ', 'Suo ', 'Yuan ', 'Lian ', 'Yao ', 'Meng ', 'Zhun ', 'Sheng ', 'Ke ', 'Tai ', 'Da ', 'Wa ', 'Liu ', 'Gou ', 'Sao ', 'Ming ', 'Zha ', 'Shi ', 'Yi ', 'Lun ', 'Ma ', 'Pu ', 'Wei ', 'Li ', 'Cai ', 'Wu ', 'Xi ', 'Wen ', 'Qiang ', 'Ze ', 'Shi ', 'Su ', 'Yi ', 'Zhen ', 'Sou ', 'Yun ', 'Xiu ', 'Yin ', 'Rong ', 'Hun ', 'Su ', 'Su ', 'Ni ', 'Ta ', 'Shi ', 'Ru ', 'Wei ', 'Pan ', 'Chu ', 'Chu ', 'Pang ', 'Weng ', 'Cang ', 'Mie ', 'He ', 'Dian ', 'Hao ', 'Huang ', 'Xi ', 'Zi ', 'Di ', 'Zhi ', 'Ying ', 'Fu ', 'Jie ', 'Hua ', 'Ge ', 'Zi ', 'Tao ', 'Teng ', 'Sui ', 'Bi ', 'Jiao ', 'Hui ', 'Gun ', 'Yin ', 'Gao ', 'Long ', 'Zhi ', 'Yan ', 'She ', 'Man ', 'Ying ', 'Chun ', 'Lu ', 'Lan ', 'Luan ', '[?] ', 'Bin ', 'Tan ', 'Yu ', 'Sou ', 'Hu ', 'Bi ', 'Biao ', 'Zhi ', 'Jiang ', 'Kou ', 'Shen ', 'Shang ', 'Di ', 'Mi ', 'Ao ', 'Lu ', 'Hu ', 'Hu ', 'You ', 'Chan ', 'Fan ', 'Yong ', 'Gun ', 'Man '];
<?php return ['Qing ', 'Yu ', 'Piao ', 'Ji ', 'Ya ', 'Jiao ', 'Qi ', 'Xi ', 'Ji ', 'Lu ', 'Lu ', 'Long ', 'Jin ', 'Guo ', 'Cong ', 'Lou ', 'Zhi ', 'Gai ', 'Qiang ', 'Li ', 'Yan ', 'Cao ', 'Jiao ', 'Cong ', 'Qun ', 'Tuan ', 'Ou ', 'Teng ', 'Ye ', 'Xi ', 'Mi ', 'Tang ', 'Mo ', 'Shang ', 'Han ', 'Lian ', 'Lan ', 'Wa ', 'Li ', 'Qian ', 'Feng ', 'Xuan ', 'Yi ', 'Man ', 'Zi ', 'Mang ', 'Kang ', 'Lei ', 'Peng ', 'Shu ', 'Zhang ', 'Zhang ', 'Chong ', 'Xu ', 'Huan ', 'Kuo ', 'Jian ', 'Yan ', 'Chuang ', 'Liao ', 'Cui ', 'Ti ', 'Yang ', 'Jiang ', 'Cong ', 'Ying ', 'Hong ', 'Xun ', 'Shu ', 'Guan ', 'Ying ', 'Xiao ', '[?] ', '[?] ', 'Xu ', 'Lian ', 'Zhi ', 'Wei ', 'Pi ', 'Jue ', 'Jiao ', 'Po ', 'Dang ', 'Hui ', 'Jie ', 'Wu ', 'Pa ', 'Ji ', 'Pan ', 'Gui ', 'Xiao ', 'Qian ', 'Qian ', 'Xi ', 'Lu ', 'Xi ', 'Xuan ', 'Dun ', 'Huang ', 'Min ', 'Run ', 'Su ', 'Liao ', 'Zhen ', 'Zhong ', 'Yi ', 'Di ', 'Wan ', 'Dan ', 'Tan ', 'Chao ', 'Xun ', 'Kui ', 'Yie ', 'Shao ', 'Tu ', 'Zhu ', 'San ', 'Hei ', 'Bi ', 'Shan ', 'Chan ', 'Chan ', 'Shu ', 'Tong ', 'Pu ', 'Lin ', 'Wei ', 'Se ', 'Se ', 'Cheng ', 'Jiong ', 'Cheng ', 'Hua ', 'Jiao ', 'Lao ', 'Che ', 'Gan ', 'Cun ', 'Heng ', 'Si ', 'Shu ', 'Peng ', 'Han ', 'Yun ', 'Liu ', 'Hong ', 'Fu ', 'Hao ', 'He ', 'Xian ', 'Jian ', 'Shan ', 'Xi ', 'Oki ', '[?] ', 'Lan ', '[?] ', 'Yu ', 'Lin ', 'Min ', 'Zao ', 'Dang ', 'Wan ', 'Ze ', 'Xie ', 'Yu ', 'Li ', 'Shi ', 'Xue ', 'Ling ', 'Man ', 'Zi ', 'Yong ', 'Kuai ', 'Can ', 'Lian ', 'Dian ', 'Ye ', 'Ao ', 'Huan ', 'Zhen ', 'Chan ', 'Man ', 'Dan ', 'Dan ', 'Yi ', 'Sui ', 'Pi ', 'Ju ', 'Ta ', 'Qin ', 'Ji ', 'Zhuo ', 'Lian ', 'Nong ', 'Guo ', 'Jin ', 'Fen ', 'Se ', 'Ji ', 'Sui ', 'Hui ', 'Chu ', 'Ta ', 'Song ', 'Ding ', '[?] ', 'Zhu ', 'Lai ', 'Bin ', 'Lian ', 'Mi ', 'Shi ', 'Shu ', 'Mi ', 'Ning ', 'Ying ', 'Ying ', 'Meng ', 'Jin ', 'Qi ', 'Pi ', 'Ji ', 'Hao ', 'Ru ', 'Zui ', 'Wo ', 'Tao ', 'Yin ', 'Yin ', 'Dui ', 'Ci ', 'Huo ', 'Jing ', 'Lan ', 'Jun ', 'Ai ', 'Pu ', 'Zhuo ', 'Wei ', 'Bin ', 'Gu ', 'Qian ', 'Xing ', 'Hama ', 'Kuo ', 'Fei ', '[?] ', 'Boku ', 'Jian ', 'Wei ', 'Luo ', 'Zan ', 'Lu ', 'Li '];
<?php return ['You ', 'Yang ', 'Lu ', 'Si ', 'Jie ', 'Ying ', 'Du ', 'Wang ', 'Hui ', 'Xie ', 'Pan ', 'Shen ', 'Biao ', 'Chan ', 'Mo ', 'Liu ', 'Jian ', 'Pu ', 'Se ', 'Cheng ', 'Gu ', 'Bin ', 'Huo ', 'Xian ', 'Lu ', 'Qin ', 'Han ', 'Ying ', 'Yong ', 'Li ', 'Jing ', 'Xiao ', 'Ying ', 'Sui ', 'Wei ', 'Xie ', 'Huai ', 'Hao ', 'Zhu ', 'Long ', 'Lai ', 'Dui ', 'Fan ', 'Hu ', 'Lai ', '[?] ', '[?] ', 'Ying ', 'Mi ', 'Ji ', 'Lian ', 'Jian ', 'Ying ', 'Fen ', 'Lin ', 'Yi ', 'Jian ', 'Yue ', 'Chan ', 'Dai ', 'Rang ', 'Jian ', 'Lan ', 'Fan ', 'Shuang ', 'Yuan ', 'Zhuo ', 'Feng ', 'She ', 'Lei ', 'Lan ', 'Cong ', 'Qu ', 'Yong ', 'Qian ', 'Fa ', 'Guan ', 'Que ', 'Yan ', 'Hao ', 'Hyeng ', 'Sa ', 'Zan ', 'Luan ', 'Yan ', 'Li ', 'Mi ', 'Shan ', 'Tan ', 'Dang ', 'Jiao ', 'Chan ', '[?] ', 'Hao ', 'Ba ', 'Zhu ', 'Lan ', 'Lan ', 'Nang ', 'Wan ', 'Luan ', 'Xun ', 'Xian ', 'Yan ', 'Gan ', 'Yan ', 'Yu ', 'Huo ', 'Si ', 'Mie ', 'Guang ', 'Deng ', 'Hui ', 'Xiao ', 'Xiao ', 'Hu ', 'Hong ', 'Ling ', 'Zao ', 'Zhuan ', 'Jiu ', 'Zha ', 'Xie ', 'Chi ', 'Zhuo ', 'Zai ', 'Zai ', 'Can ', 'Yang ', 'Qi ', 'Zhong ', 'Fen ', 'Niu ', 'Jiong ', 'Wen ', 'Po ', 'Yi ', 'Lu ', 'Chui ', 'Pi ', 'Kai ', 'Pan ', 'Yan ', 'Kai ', 'Pang ', 'Mu ', 'Chao ', 'Liao ', 'Gui ', 'Kang ', 'Tun ', 'Guang ', 'Xin ', 'Zhi ', 'Guang ', 'Guang ', 'Wei ', 'Qiang ', '[?] ', 'Da ', 'Xia ', 'Zheng ', 'Zhu ', 'Ke ', 'Zhao ', 'Fu ', 'Ba ', 'Duo ', 'Duo ', 'Ling ', 'Zhuo ', 'Xuan ', 'Ju ', 'Tan ', 'Pao ', 'Jiong ', 'Pao ', 'Tai ', 'Tai ', 'Bing ', 'Yang ', 'Tong ', 'Han ', 'Zhu ', 'Zha ', 'Dian ', 'Wei ', 'Shi ', 'Lian ', 'Chi ', 'Huang ', '[?] ', 'Hu ', 'Shuo ', 'Lan ', 'Jing ', 'Jiao ', 'Xu ', 'Xing ', 'Quan ', 'Lie ', 'Huan ', 'Yang ', 'Xiao ', 'Xiu ', 'Xian ', 'Yin ', 'Wu ', 'Zhou ', 'Yao ', 'Shi ', 'Wei ', 'Tong ', 'Xue ', 'Zai ', 'Kai ', 'Hong ', 'Luo ', 'Xia ', 'Zhu ', 'Xuan ', 'Zheng ', 'Po ', 'Yan ', 'Hui ', 'Guang ', 'Zhe ', 'Hui ', 'Kao ', '[?] ', 'Fan ', 'Shao ', 'Ye ', 'Hui ', '[?] ', 'Tang ', 'Jin ', 'Re ', '[?] ', 'Xi ', 'Fu ', 'Jiong ', 'Che ', 'Pu ', 'Jing ', 'Zhuo ', 'Ting ', 'Wan ', 'Hai ', 'Peng ', 'Lang ', 'Shan ', 'Hu ', 'Feng ', 'Chi ', 'Rong '];
<?php return ['Hu ', 'Xi ', 'Shu ', 'He ', 'Xun ', 'Ku ', 'Jue ', 'Xiao ', 'Xi ', 'Yan ', 'Han ', 'Zhuang ', 'Jun ', 'Di ', 'Xie ', 'Ji ', 'Wu ', '[?] ', '[?] ', 'Han ', 'Yan ', 'Huan ', 'Men ', 'Ju ', 'Chou ', 'Bei ', 'Fen ', 'Lin ', 'Kun ', 'Hun ', 'Tun ', 'Xi ', 'Cui ', 'Wu ', 'Hong ', 'Ju ', 'Fu ', 'Wo ', 'Jiao ', 'Cong ', 'Feng ', 'Ping ', 'Qiong ', 'Ruo ', 'Xi ', 'Qiong ', 'Xin ', 'Zhuo ', 'Yan ', 'Yan ', 'Yi ', 'Jue ', 'Yu ', 'Gang ', 'Ran ', 'Pi ', 'Gu ', '[?] ', 'Sheng ', 'Chang ', 'Shao ', '[?] ', '[?] ', '[?] ', '[?] ', 'Chen ', 'He ', 'Kui ', 'Zhong ', 'Duan ', 'Xia ', 'Hui ', 'Feng ', 'Lian ', 'Xuan ', 'Xing ', 'Huang ', 'Jiao ', 'Jian ', 'Bi ', 'Ying ', 'Zhu ', 'Wei ', 'Tuan ', 'Tian ', 'Xi ', 'Nuan ', 'Nuan ', 'Chan ', 'Yan ', 'Jiong ', 'Jiong ', 'Yu ', 'Mei ', 'Sha ', 'Wei ', 'Ye ', 'Xin ', 'Qiong ', 'Rou ', 'Mei ', 'Huan ', 'Xu ', 'Zhao ', 'Wei ', 'Fan ', 'Qiu ', 'Sui ', 'Yang ', 'Lie ', 'Zhu ', 'Jie ', 'Gao ', 'Gua ', 'Bao ', 'Hu ', 'Yun ', 'Xia ', '[?] ', '[?] ', 'Bian ', 'Gou ', 'Tui ', 'Tang ', 'Chao ', 'Shan ', 'N ', 'Bo ', 'Huang ', 'Xie ', 'Xi ', 'Wu ', 'Xi ', 'Yun ', 'He ', 'He ', 'Xi ', 'Yun ', 'Xiong ', 'Nai ', 'Shan ', 'Qiong ', 'Yao ', 'Xun ', 'Mi ', 'Lian ', 'Ying ', 'Wen ', 'Rong ', 'Oozutsu ', '[?] ', 'Qiang ', 'Liu ', 'Xi ', 'Bi ', 'Biao ', 'Zong ', 'Lu ', 'Jian ', 'Shou ', 'Yi ', 'Lou ', 'Feng ', 'Sui ', 'Yi ', 'Tong ', 'Jue ', 'Zong ', 'Yun ', 'Hu ', 'Yi ', 'Zhi ', 'Ao ', 'Wei ', 'Liao ', 'Han ', 'Ou ', 'Re ', 'Jiong ', 'Man ', '[?] ', 'Shang ', 'Cuan ', 'Zeng ', 'Jian ', 'Xi ', 'Xi ', 'Xi ', 'Yi ', 'Xiao ', 'Chi ', 'Huang ', 'Chan ', 'Ye ', 'Qian ', 'Ran ', 'Yan ', 'Xian ', 'Qiao ', 'Zun ', 'Deng ', 'Dun ', 'Shen ', 'Jiao ', 'Fen ', 'Si ', 'Liao ', 'Yu ', 'Lin ', 'Tong ', 'Shao ', 'Fen ', 'Fan ', 'Yan ', 'Xun ', 'Lan ', 'Mei ', 'Tang ', 'Yi ', 'Jing ', 'Men ', '[?] ', '[?] ', 'Ying ', 'Yu ', 'Yi ', 'Xue ', 'Lan ', 'Tai ', 'Zao ', 'Can ', 'Sui ', 'Xi ', 'Que ', 'Cong ', 'Lian ', 'Hui ', 'Zhu ', 'Xie ', 'Ling ', 'Wei ', 'Yi ', 'Xie ', 'Zhao ', 'Hui ', 'Tatsu ', 'Nung ', 'Lan ', 'Ru ', 'Xian ', 'Kao ', 'Xun ', 'Jin ', 'Chou ', 'Chou ', 'Yao '];
<?php return ['He ', 'Lan ', 'Biao ', 'Rong ', 'Li ', 'Mo ', 'Bao ', 'Ruo ', 'Lu ', 'La ', 'Ao ', 'Xun ', 'Kuang ', 'Shuo ', '[?] ', 'Li ', 'Lu ', 'Jue ', 'Liao ', 'Yan ', 'Xi ', 'Xie ', 'Long ', 'Ye ', '[?] ', 'Rang ', 'Yue ', 'Lan ', 'Cong ', 'Jue ', 'Tong ', 'Guan ', '[?] ', 'Che ', 'Mi ', 'Tang ', 'Lan ', 'Zhu ', '[?] ', 'Ling ', 'Cuan ', 'Yu ', 'Zhua ', 'Tsumekanmuri ', 'Pa ', 'Zheng ', 'Pao ', 'Cheng ', 'Yuan ', 'Ai ', 'Wei ', '[?] ', 'Jue ', 'Jue ', 'Fu ', 'Ye ', 'Ba ', 'Die ', 'Ye ', 'Yao ', 'Zu ', 'Shuang ', 'Er ', 'Qiang ', 'Chuang ', 'Ge ', 'Zang ', 'Die ', 'Qiang ', 'Yong ', 'Qiang ', 'Pian ', 'Ban ', 'Pan ', 'Shao ', 'Jian ', 'Pai ', 'Du ', 'Chuang ', 'Tou ', 'Zha ', 'Bian ', 'Die ', 'Bang ', 'Bo ', 'Chuang ', 'You ', '[?] ', 'Du ', 'Ya ', 'Cheng ', 'Niu ', 'Ushihen ', 'Pin ', 'Jiu ', 'Mou ', 'Tuo ', 'Mu ', 'Lao ', 'Ren ', 'Mang ', 'Fang ', 'Mao ', 'Mu ', 'Gang ', 'Wu ', 'Yan ', 'Ge ', 'Bei ', 'Si ', 'Jian ', 'Gu ', 'You ', 'Ge ', 'Sheng ', 'Mu ', 'Di ', 'Qian ', 'Quan ', 'Quan ', 'Zi ', 'Te ', 'Xi ', 'Mang ', 'Keng ', 'Qian ', 'Wu ', 'Gu ', 'Xi ', 'Li ', 'Li ', 'Pou ', 'Ji ', 'Gang ', 'Zhi ', 'Ben ', 'Quan ', 'Run ', 'Du ', 'Ju ', 'Jia ', 'Jian ', 'Feng ', 'Pian ', 'Ke ', 'Ju ', 'Kao ', 'Chu ', 'Xi ', 'Bei ', 'Luo ', 'Jie ', 'Ma ', 'San ', 'Wei ', 'Li ', 'Dun ', 'Tong ', '[?] ', 'Jiang ', 'Ikenie ', 'Li ', 'Du ', 'Lie ', 'Pi ', 'Piao ', 'Bao ', 'Xi ', 'Chou ', 'Wei ', 'Kui ', 'Chou ', 'Quan ', 'Fan ', 'Ba ', 'Fan ', 'Qiu ', 'Ji ', 'Cai ', 'Chuo ', 'An ', 'Jie ', 'Zhuang ', 'Guang ', 'Ma ', 'You ', 'Kang ', 'Bo ', 'Hou ', 'Ya ', 'Yin ', 'Huan ', 'Zhuang ', 'Yun ', 'Kuang ', 'Niu ', 'Di ', 'Qing ', 'Zhong ', 'Mu ', 'Bei ', 'Pi ', 'Ju ', 'Ni ', 'Sheng ', 'Pao ', 'Xia ', 'Tuo ', 'Hu ', 'Ling ', 'Fei ', 'Pi ', 'Ni ', 'Ao ', 'You ', 'Gou ', 'Yue ', 'Ju ', 'Dan ', 'Po ', 'Gu ', 'Xian ', 'Ning ', 'Huan ', 'Hen ', 'Jiao ', 'He ', 'Zhao ', 'Ji ', 'Xun ', 'Shan ', 'Ta ', 'Rong ', 'Shou ', 'Tong ', 'Lao ', 'Du ', 'Xia ', 'Shi ', 'Hua ', 'Zheng ', 'Yu ', 'Sun ', 'Yu ', 'Bi ', 'Mang ', 'Xi ', 'Juan ', 'Li ', 'Xia ', 'Yin ', 'Suan ', 'Lang ', 'Bei ', 'Zhi ', 'Yan '];
<?php return ['Sha ', 'Li ', 'Han ', 'Xian ', 'Jing ', 'Pai ', 'Fei ', 'Yao ', 'Ba ', 'Qi ', 'Ni ', 'Biao ', 'Yin ', 'Lai ', 'Xi ', 'Jian ', 'Qiang ', 'Kun ', 'Yan ', 'Guo ', 'Zong ', 'Mi ', 'Chang ', 'Yi ', 'Zhi ', 'Zheng ', 'Ya ', 'Meng ', 'Cai ', 'Cu ', 'She ', 'Kari ', 'Cen ', 'Luo ', 'Hu ', 'Zong ', 'Ji ', 'Wei ', 'Feng ', 'Wo ', 'Yuan ', 'Xing ', 'Zhu ', 'Mao ', 'Wei ', 'Yuan ', 'Xian ', 'Tuan ', 'Ya ', 'Nao ', 'Xie ', 'Jia ', 'Hou ', 'Bian ', 'You ', 'You ', 'Mei ', 'Zha ', 'Yao ', 'Sun ', 'Bo ', 'Ming ', 'Hua ', 'Yuan ', 'Sou ', 'Ma ', 'Yuan ', 'Dai ', 'Yu ', 'Shi ', 'Hao ', '[?] ', 'Yi ', 'Zhen ', 'Chuang ', 'Hao ', 'Man ', 'Jing ', 'Jiang ', 'Mu ', 'Zhang ', 'Chan ', 'Ao ', 'Ao ', 'Hao ', 'Cui ', 'Fen ', 'Jue ', 'Bi ', 'Bi ', 'Huang ', 'Pu ', 'Lin ', 'Yu ', 'Tong ', 'Yao ', 'Liao ', 'Shuo ', 'Xiao ', 'Swu ', 'Ton ', 'Xi ', 'Ge ', 'Juan ', 'Du ', 'Hui ', 'Kuai ', 'Xian ', 'Xie ', 'Ta ', 'Xian ', 'Xun ', 'Ning ', 'Pin ', 'Huo ', 'Nou ', 'Meng ', 'Lie ', 'Nao ', 'Guang ', 'Shou ', 'Lu ', 'Ta ', 'Xian ', 'Mi ', 'Rang ', 'Huan ', 'Nao ', 'Luo ', 'Xian ', 'Qi ', 'Jue ', 'Xuan ', 'Miao ', 'Zi ', 'Lu ', 'Lu ', 'Yu ', 'Su ', 'Wang ', 'Qiu ', 'Ga ', 'Ding ', 'Le ', 'Ba ', 'Ji ', 'Hong ', 'Di ', 'Quan ', 'Gan ', 'Jiu ', 'Yu ', 'Ji ', 'Yu ', 'Yang ', 'Ma ', 'Gong ', 'Wu ', 'Fu ', 'Wen ', 'Jie ', 'Ya ', 'Fen ', 'Bian ', 'Beng ', 'Yue ', 'Jue ', 'Yun ', 'Jue ', 'Wan ', 'Jian ', 'Mei ', 'Dan ', 'Pi ', 'Wei ', 'Huan ', 'Xian ', 'Qiang ', 'Ling ', 'Dai ', 'Yi ', 'An ', 'Ping ', 'Dian ', 'Fu ', 'Xuan ', 'Xi ', 'Bo ', 'Ci ', 'Gou ', 'Jia ', 'Shao ', 'Po ', 'Ci ', 'Ke ', 'Ran ', 'Sheng ', 'Shen ', 'Yi ', 'Zu ', 'Jia ', 'Min ', 'Shan ', 'Liu ', 'Bi ', 'Zhen ', 'Zhen ', 'Jue ', 'Fa ', 'Long ', 'Jin ', 'Jiao ', 'Jian ', 'Li ', 'Guang ', 'Xian ', 'Zhou ', 'Gong ', 'Yan ', 'Xiu ', 'Yang ', 'Xu ', 'Luo ', 'Su ', 'Zhu ', 'Qin ', 'Ken ', 'Xun ', 'Bao ', 'Er ', 'Xiang ', 'Yao ', 'Xia ', 'Heng ', 'Gui ', 'Chong ', 'Xu ', 'Ban ', 'Pei ', '[?] ', 'Dang ', 'Ei ', 'Hun ', 'Wen ', 'E ', 'Cheng ', 'Ti ', 'Wu ', 'Wu ', 'Cheng ', 'Jun ', 'Mei ', 'Bei ', 'Ting ', 'Xian ', 'Chuo '];
<?php return ['Han ', 'Xuan ', 'Yan ', 'Qiu ', 'Quan ', 'Lang ', 'Li ', 'Xiu ', 'Fu ', 'Liu ', 'Ye ', 'Xi ', 'Ling ', 'Li ', 'Jin ', 'Lian ', 'Suo ', 'Chiisai ', '[?] ', 'Wan ', 'Dian ', 'Pin ', 'Zhan ', 'Cui ', 'Min ', 'Yu ', 'Ju ', 'Chen ', 'Lai ', 'Wen ', 'Sheng ', 'Wei ', 'Dian ', 'Chu ', 'Zhuo ', 'Pei ', 'Cheng ', 'Hu ', 'Qi ', 'E ', 'Kun ', 'Chang ', 'Qi ', 'Beng ', 'Wan ', 'Lu ', 'Cong ', 'Guan ', 'Yan ', 'Diao ', 'Bei ', 'Lin ', 'Qin ', 'Pi ', 'Pa ', 'Que ', 'Zhuo ', 'Qin ', 'Fa ', '[?] ', 'Qiong ', 'Du ', 'Jie ', 'Hun ', 'Yu ', 'Mao ', 'Mei ', 'Chun ', 'Xuan ', 'Ti ', 'Xing ', 'Dai ', 'Rou ', 'Min ', 'Zhen ', 'Wei ', 'Ruan ', 'Huan ', 'Jie ', 'Chuan ', 'Jian ', 'Zhuan ', 'Yang ', 'Lian ', 'Quan ', 'Xia ', 'Duan ', 'Yuan ', 'Ye ', 'Nao ', 'Hu ', 'Ying ', 'Yu ', 'Huang ', 'Rui ', 'Se ', 'Liu ', 'Shi ', 'Rong ', 'Suo ', 'Yao ', 'Wen ', 'Wu ', 'Jin ', 'Jin ', 'Ying ', 'Ma ', 'Tao ', 'Liu ', 'Tang ', 'Li ', 'Lang ', 'Gui ', 'Zhen ', 'Qiang ', 'Cuo ', 'Jue ', 'Zhao ', 'Yao ', 'Ai ', 'Bin ', 'Tu ', 'Chang ', 'Kun ', 'Zhuan ', 'Cong ', 'Jin ', 'Yi ', 'Cui ', 'Cong ', 'Qi ', 'Li ', 'Ying ', 'Suo ', 'Qiu ', 'Xuan ', 'Ao ', 'Lian ', 'Man ', 'Zhang ', 'Yin ', '[?] ', 'Ying ', 'Zhi ', 'Lu ', 'Wu ', 'Deng ', 'Xiou ', 'Zeng ', 'Xun ', 'Qu ', 'Dang ', 'Lin ', 'Liao ', 'Qiong ', 'Su ', 'Huang ', 'Gui ', 'Pu ', 'Jing ', 'Fan ', 'Jin ', 'Liu ', 'Ji ', '[?] ', 'Jing ', 'Ai ', 'Bi ', 'Can ', 'Qu ', 'Zao ', 'Dang ', 'Jiao ', 'Gun ', 'Tan ', 'Hui ', 'Huan ', 'Se ', 'Sui ', 'Tian ', '[?] ', 'Yu ', 'Jin ', 'Lu ', 'Bin ', 'Shou ', 'Wen ', 'Zui ', 'Lan ', 'Xi ', 'Ji ', 'Xuan ', 'Ruan ', 'Huo ', 'Gai ', 'Lei ', 'Du ', 'Li ', 'Zhi ', 'Rou ', 'Li ', 'Zan ', 'Qiong ', 'Zhe ', 'Gui ', 'Sui ', 'La ', 'Long ', 'Lu ', 'Li ', 'Zan ', 'Lan ', 'Ying ', 'Mi ', 'Xiang ', 'Xi ', 'Guan ', 'Dao ', 'Zan ', 'Huan ', 'Gua ', 'Bo ', 'Die ', 'Bao ', 'Hu ', 'Zhi ', 'Piao ', 'Ban ', 'Rang ', 'Li ', 'Wa ', 'Dekaguramu ', 'Jiang ', 'Qian ', 'Fan ', 'Pen ', 'Fang ', 'Dan ', 'Weng ', 'Ou ', 'Deshiguramu ', 'Miriguramu ', 'Thon ', 'Hu ', 'Ling ', 'Yi ', 'Ping ', 'Ci ', 'Hekutogura ', 'Juan ', 'Chang ', 'Chi ', 'Sarake ', 'Dang ', 'Meng ', 'Pou '];
<?php return ['Zhui ', 'Ping ', 'Bian ', 'Zhou ', 'Zhen ', 'Senchigura ', 'Ci ', 'Ying ', 'Qi ', 'Xian ', 'Lou ', 'Di ', 'Ou ', 'Meng ', 'Zhuan ', 'Peng ', 'Lin ', 'Zeng ', 'Wu ', 'Pi ', 'Dan ', 'Weng ', 'Ying ', 'Yan ', 'Gan ', 'Dai ', 'Shen ', 'Tian ', 'Tian ', 'Han ', 'Chang ', 'Sheng ', 'Qing ', 'Sheng ', 'Chan ', 'Chan ', 'Rui ', 'Sheng ', 'Su ', 'Sen ', 'Yong ', 'Shuai ', 'Lu ', 'Fu ', 'Yong ', 'Beng ', 'Feng ', 'Ning ', 'Tian ', 'You ', 'Jia ', 'Shen ', 'Zha ', 'Dian ', 'Fu ', 'Nan ', 'Dian ', 'Ping ', 'Ting ', 'Hua ', 'Ting ', 'Quan ', 'Zi ', 'Meng ', 'Bi ', 'Qi ', 'Liu ', 'Xun ', 'Liu ', 'Chang ', 'Mu ', 'Yun ', 'Fan ', 'Fu ', 'Geng ', 'Tian ', 'Jie ', 'Jie ', 'Quan ', 'Wei ', 'Fu ', 'Tian ', 'Mu ', 'Tap ', 'Pan ', 'Jiang ', 'Wa ', 'Da ', 'Nan ', 'Liu ', 'Ben ', 'Zhen ', 'Chu ', 'Mu ', 'Mu ', 'Ce ', 'Cen ', 'Gai ', 'Bi ', 'Da ', 'Zhi ', 'Lue ', 'Qi ', 'Lue ', 'Pan ', 'Kesa ', 'Fan ', 'Hua ', 'Yu ', 'Yu ', 'Mu ', 'Jun ', 'Yi ', 'Liu ', 'Yu ', 'Die ', 'Chou ', 'Hua ', 'Dang ', 'Chuo ', 'Ji ', 'Wan ', 'Jiang ', 'Sheng ', 'Chang ', 'Tuan ', 'Lei ', 'Ji ', 'Cha ', 'Liu ', 'Tatamu ', 'Tuan ', 'Lin ', 'Jiang ', 'Jiang ', 'Chou ', 'Bo ', 'Die ', 'Die ', 'Pi ', 'Nie ', 'Dan ', 'Shu ', 'Shu ', 'Zhi ', 'Yi ', 'Chuang ', 'Nai ', 'Ding ', 'Bi ', 'Jie ', 'Liao ', 'Gong ', 'Ge ', 'Jiu ', 'Zhou ', 'Xia ', 'Shan ', 'Xu ', 'Nue ', 'Li ', 'Yang ', 'Chen ', 'You ', 'Ba ', 'Jie ', 'Jue ', 'Zhi ', 'Xia ', 'Cui ', 'Bi ', 'Yi ', 'Li ', 'Zong ', 'Chuang ', 'Feng ', 'Zhu ', 'Pao ', 'Pi ', 'Gan ', 'Ke ', 'Ci ', 'Xie ', 'Qi ', 'Dan ', 'Zhen ', 'Fa ', 'Zhi ', 'Teng ', 'Ju ', 'Ji ', 'Fei ', 'Qu ', 'Dian ', 'Jia ', 'Xian ', 'Cha ', 'Bing ', 'Ni ', 'Zheng ', 'Yong ', 'Jing ', 'Quan ', 'Chong ', 'Tong ', 'Yi ', 'Kai ', 'Wei ', 'Hui ', 'Duo ', 'Yang ', 'Chi ', 'Zhi ', 'Hen ', 'Ya ', 'Mei ', 'Dou ', 'Jing ', 'Xiao ', 'Tong ', 'Tu ', 'Mang ', 'Pi ', 'Xiao ', 'Suan ', 'Pu ', 'Li ', 'Zhi ', 'Cuo ', 'Duo ', 'Wu ', 'Sha ', 'Lao ', 'Shou ', 'Huan ', 'Xian ', 'Yi ', 'Peng ', 'Zhang ', 'Guan ', 'Tan ', 'Fei ', 'Ma ', 'Lin ', 'Chi ', 'Ji ', 'Dian ', 'An ', 'Chi ', 'Bi ', 'Bei ', 'Min ', 'Gu ', 'Dui ', 'E ', 'Wei '];
<?php return ['Yu ', 'Cui ', 'Ya ', 'Zhu ', 'Cu ', 'Dan ', 'Shen ', 'Zhung ', 'Ji ', 'Yu ', 'Hou ', 'Feng ', 'La ', 'Yang ', 'Shen ', 'Tu ', 'Yu ', 'Gua ', 'Wen ', 'Huan ', 'Ku ', 'Jia ', 'Yin ', 'Yi ', 'Lu ', 'Sao ', 'Jue ', 'Chi ', 'Xi ', 'Guan ', 'Yi ', 'Wen ', 'Ji ', 'Chuang ', 'Ban ', 'Lei ', 'Liu ', 'Chai ', 'Shou ', 'Nue ', 'Dian ', 'Da ', 'Pie ', 'Tan ', 'Zhang ', 'Biao ', 'Shen ', 'Cu ', 'Luo ', 'Yi ', 'Zong ', 'Chou ', 'Zhang ', 'Zhai ', 'Sou ', 'Suo ', 'Que ', 'Diao ', 'Lou ', 'Lu ', 'Mo ', 'Jin ', 'Yin ', 'Ying ', 'Huang ', 'Fu ', 'Liao ', 'Long ', 'Qiao ', 'Liu ', 'Lao ', 'Xian ', 'Fei ', 'Dan ', 'Yin ', 'He ', 'Yan ', 'Ban ', 'Xian ', 'Guan ', 'Guai ', 'Nong ', 'Yu ', 'Wei ', 'Yi ', 'Yong ', 'Pi ', 'Lei ', 'Li ', 'Shu ', 'Dan ', 'Lin ', 'Dian ', 'Lin ', 'Lai ', 'Pie ', 'Ji ', 'Chi ', 'Yang ', 'Xian ', 'Jie ', 'Zheng ', '[?] ', 'Li ', 'Huo ', 'Lai ', 'Shaku ', 'Dian ', 'Xian ', 'Ying ', 'Yin ', 'Qu ', 'Yong ', 'Tan ', 'Dian ', 'Luo ', 'Luan ', 'Luan ', 'Bo ', '[?] ', 'Gui ', 'Po ', 'Fa ', 'Deng ', 'Fa ', 'Bai ', 'Bai ', 'Qie ', 'Bi ', 'Zao ', 'Zao ', 'Mao ', 'De ', 'Pa ', 'Jie ', 'Huang ', 'Gui ', 'Ci ', 'Ling ', 'Gao ', 'Mo ', 'Ji ', 'Jiao ', 'Peng ', 'Gao ', 'Ai ', 'E ', 'Hao ', 'Han ', 'Bi ', 'Wan ', 'Chou ', 'Qian ', 'Xi ', 'Ai ', 'Jiong ', 'Hao ', 'Huang ', 'Hao ', 'Ze ', 'Cui ', 'Hao ', 'Xiao ', 'Ye ', 'Po ', 'Hao ', 'Jiao ', 'Ai ', 'Xing ', 'Huang ', 'Li ', 'Piao ', 'He ', 'Jiao ', 'Pi ', 'Gan ', 'Pao ', 'Zhou ', 'Jun ', 'Qiu ', 'Cun ', 'Que ', 'Zha ', 'Gu ', 'Jun ', 'Jun ', 'Zhou ', 'Zha ', 'Gu ', 'Zhan ', 'Du ', 'Min ', 'Qi ', 'Ying ', 'Yu ', 'Bei ', 'Zhao ', 'Zhong ', 'Pen ', 'He ', 'Ying ', 'He ', 'Yi ', 'Bo ', 'Wan ', 'He ', 'Ang ', 'Zhan ', 'Yan ', 'Jian ', 'He ', 'Yu ', 'Kui ', 'Fan ', 'Gai ', 'Dao ', 'Pan ', 'Fu ', 'Qiu ', 'Sheng ', 'Dao ', 'Lu ', 'Zhan ', 'Meng ', 'Li ', 'Jin ', 'Xu ', 'Jian ', 'Pan ', 'Guan ', 'An ', 'Lu ', 'Shu ', 'Zhou ', 'Dang ', 'An ', 'Gu ', 'Li ', 'Mu ', 'Cheng ', 'Gan ', 'Xu ', 'Mang ', 'Mang ', 'Zhi ', 'Qi ', 'Ruan ', 'Tian ', 'Xiang ', 'Dun ', 'Xin ', 'Xi ', 'Pan ', 'Feng ', 'Dun ', 'Min '];
<?php return ['Ming ', 'Sheng ', 'Shi ', 'Yun ', 'Mian ', 'Pan ', 'Fang ', 'Miao ', 'Dan ', 'Mei ', 'Mao ', 'Kan ', 'Xian ', 'Ou ', 'Shi ', 'Yang ', 'Zheng ', 'Yao ', 'Shen ', 'Huo ', 'Da ', 'Zhen ', 'Kuang ', 'Ju ', 'Shen ', 'Chi ', 'Sheng ', 'Mei ', 'Mo ', 'Zhu ', 'Zhen ', 'Zhen ', 'Mian ', 'Di ', 'Yuan ', 'Die ', 'Yi ', 'Zi ', 'Zi ', 'Chao ', 'Zha ', 'Xuan ', 'Bing ', 'Mi ', 'Long ', 'Sui ', 'Dong ', 'Mi ', 'Die ', 'Yi ', 'Er ', 'Ming ', 'Xuan ', 'Chi ', 'Kuang ', 'Juan ', 'Mou ', 'Zhen ', 'Tiao ', 'Yang ', 'Yan ', 'Mo ', 'Zhong ', 'Mai ', 'Zhao ', 'Zheng ', 'Mei ', 'Jun ', 'Shao ', 'Han ', 'Huan ', 'Di ', 'Cheng ', 'Cuo ', 'Juan ', 'E ', 'Wan ', 'Xian ', 'Xi ', 'Kun ', 'Lai ', 'Jian ', 'Shan ', 'Tian ', 'Hun ', 'Wan ', 'Ling ', 'Shi ', 'Qiong ', 'Lie ', 'Yai ', 'Jing ', 'Zheng ', 'Li ', 'Lai ', 'Sui ', 'Juan ', 'Shui ', 'Sui ', 'Du ', 'Bi ', 'Bi ', 'Mu ', 'Hun ', 'Ni ', 'Lu ', 'Yi ', 'Jie ', 'Cai ', 'Zhou ', 'Yu ', 'Hun ', 'Ma ', 'Xia ', 'Xing ', 'Xi ', 'Gun ', 'Cai ', 'Chun ', 'Jian ', 'Mei ', 'Du ', 'Hou ', 'Xuan ', 'Ti ', 'Kui ', 'Gao ', 'Rui ', 'Mou ', 'Xu ', 'Fa ', 'Wen ', 'Miao ', 'Chou ', 'Kui ', 'Mi ', 'Weng ', 'Kou ', 'Dang ', 'Chen ', 'Ke ', 'Sou ', 'Xia ', 'Qiong ', 'Mao ', 'Ming ', 'Man ', 'Shui ', 'Ze ', 'Zhang ', 'Yi ', 'Diao ', 'Ou ', 'Mo ', 'Shun ', 'Cong ', 'Lou ', 'Chi ', 'Man ', 'Piao ', 'Cheng ', 'Ji ', 'Meng ', '[?] ', 'Run ', 'Pie ', 'Xi ', 'Qiao ', 'Pu ', 'Zhu ', 'Deng ', 'Shen ', 'Shun ', 'Liao ', 'Che ', 'Xian ', 'Kan ', 'Ye ', 'Xu ', 'Tong ', 'Mou ', 'Lin ', 'Kui ', 'Xian ', 'Ye ', 'Ai ', 'Hui ', 'Zhan ', 'Jian ', 'Gu ', 'Zhao ', 'Qu ', 'Wei ', 'Chou ', 'Sao ', 'Ning ', 'Xun ', 'Yao ', 'Huo ', 'Meng ', 'Mian ', 'Bin ', 'Mian ', 'Li ', 'Kuang ', 'Jue ', 'Xuan ', 'Mian ', 'Huo ', 'Lu ', 'Meng ', 'Long ', 'Guan ', 'Man ', 'Xi ', 'Chu ', 'Tang ', 'Kan ', 'Zhu ', 'Mao ', 'Jin ', 'Lin ', 'Yu ', 'Shuo ', 'Ce ', 'Jue ', 'Shi ', 'Yi ', 'Shen ', 'Zhi ', 'Hou ', 'Shen ', 'Ying ', 'Ju ', 'Zhou ', 'Jiao ', 'Cuo ', 'Duan ', 'Ai ', 'Jiao ', 'Zeng ', 'Huo ', 'Bai ', 'Shi ', 'Ding ', 'Qi ', 'Ji ', 'Zi ', 'Gan ', 'Wu ', 'Tuo ', 'Ku ', 'Qiang ', 'Xi ', 'Fan ', 'Kuang '];
<?php return ['Dang ', 'Ma ', 'Sha ', 'Dan ', 'Jue ', 'Li ', 'Fu ', 'Min ', 'Nuo ', 'Huo ', 'Kang ', 'Zhi ', 'Qi ', 'Kan ', 'Jie ', 'Fen ', 'E ', 'Ya ', 'Pi ', 'Zhe ', 'Yan ', 'Sui ', 'Zhuan ', 'Che ', 'Dun ', 'Pan ', 'Yan ', '[?] ', 'Feng ', 'Fa ', 'Mo ', 'Zha ', 'Qu ', 'Yu ', 'Luo ', 'Tuo ', 'Tuo ', 'Di ', 'Zhai ', 'Zhen ', 'Ai ', 'Fei ', 'Mu ', 'Zhu ', 'Li ', 'Bian ', 'Nu ', 'Ping ', 'Peng ', 'Ling ', 'Pao ', 'Le ', 'Po ', 'Bo ', 'Po ', 'Shen ', 'Za ', 'Nuo ', 'Li ', 'Long ', 'Tong ', '[?] ', 'Li ', 'Aragane ', 'Chu ', 'Keng ', 'Quan ', 'Zhu ', 'Kuang ', 'Huo ', 'E ', 'Nao ', 'Jia ', 'Lu ', 'Wei ', 'Ai ', 'Luo ', 'Ken ', 'Xing ', 'Yan ', 'Tong ', 'Peng ', 'Xi ', '[?] ', 'Hong ', 'Shuo ', 'Xia ', 'Qiao ', '[?] ', 'Wei ', 'Qiao ', '[?] ', 'Keng ', 'Xiao ', 'Que ', 'Chan ', 'Lang ', 'Hong ', 'Yu ', 'Xiao ', 'Xia ', 'Mang ', 'Long ', 'Iong ', 'Che ', 'Che ', 'E ', 'Liu ', 'Ying ', 'Mang ', 'Que ', 'Yan ', 'Sha ', 'Kun ', 'Yu ', '[?] ', 'Kaki ', 'Lu ', 'Chen ', 'Jian ', 'Nue ', 'Song ', 'Zhuo ', 'Keng ', 'Peng ', 'Yan ', 'Zhui ', 'Kong ', 'Ceng ', 'Qi ', 'Zong ', 'Qing ', 'Lin ', 'Jun ', 'Bo ', 'Ding ', 'Min ', 'Diao ', 'Jian ', 'He ', 'Lu ', 'Ai ', 'Sui ', 'Que ', 'Ling ', 'Bei ', 'Yin ', 'Dui ', 'Wu ', 'Qi ', 'Lun ', 'Wan ', 'Dian ', 'Gang ', 'Pei ', 'Qi ', 'Chen ', 'Ruan ', 'Yan ', 'Die ', 'Ding ', 'Du ', 'Tuo ', 'Jie ', 'Ying ', 'Bian ', 'Ke ', 'Bi ', 'Wei ', 'Shuo ', 'Zhen ', 'Duan ', 'Xia ', 'Dang ', 'Ti ', 'Nao ', 'Peng ', 'Jian ', 'Di ', 'Tan ', 'Cha ', 'Seki ', 'Qi ', '[?] ', 'Feng ', 'Xuan ', 'Que ', 'Que ', 'Ma ', 'Gong ', 'Nian ', 'Su ', 'E ', 'Ci ', 'Liu ', 'Si ', 'Tang ', 'Bang ', 'Hua ', 'Pi ', 'Wei ', 'Sang ', 'Lei ', 'Cuo ', 'Zhen ', 'Xia ', 'Qi ', 'Lian ', 'Pan ', 'Wei ', 'Yun ', 'Dui ', 'Zhe ', 'Ke ', 'La ', '[?] ', 'Qing ', 'Gun ', 'Zhuan ', 'Chan ', 'Qi ', 'Ao ', 'Peng ', 'Lu ', 'Lu ', 'Kan ', 'Qiang ', 'Chen ', 'Yin ', 'Lei ', 'Biao ', 'Qi ', 'Mo ', 'Qi ', 'Cui ', 'Zong ', 'Qing ', 'Chuo ', '[?] ', 'Ji ', 'Shan ', 'Lao ', 'Qu ', 'Zeng ', 'Deng ', 'Jian ', 'Xi ', 'Lin ', 'Ding ', 'Dian ', 'Huang ', 'Pan ', 'Za ', 'Qiao ', 'Di ', 'Li '];
<?php return ['Tani ', 'Jiao ', '[?] ', 'Zhang ', 'Qiao ', 'Dun ', 'Xian ', 'Yu ', 'Zhui ', 'He ', 'Huo ', 'Zhai ', 'Lei ', 'Ke ', 'Chu ', 'Ji ', 'Que ', 'Dang ', 'Yi ', 'Jiang ', 'Pi ', 'Pi ', 'Yu ', 'Pin ', 'Qi ', 'Ai ', 'Kai ', 'Jian ', 'Yu ', 'Ruan ', 'Meng ', 'Pao ', 'Ci ', '[?] ', '[?] ', 'Mie ', 'Ca ', 'Xian ', 'Kuang ', 'Lei ', 'Lei ', 'Zhi ', 'Li ', 'Li ', 'Fan ', 'Que ', 'Pao ', 'Ying ', 'Li ', 'Long ', 'Long ', 'Mo ', 'Bo ', 'Shuang ', 'Guan ', 'Lan ', 'Zan ', 'Yan ', 'Shi ', 'Shi ', 'Li ', 'Reng ', 'She ', 'Yue ', 'Si ', 'Qi ', 'Ta ', 'Ma ', 'Xie ', 'Xian ', 'Xian ', 'Zhi ', 'Qi ', 'Zhi ', 'Beng ', 'Dui ', 'Zhong ', '[?] ', 'Yi ', 'Shi ', 'You ', 'Zhi ', 'Tiao ', 'Fu ', 'Fu ', 'Mi ', 'Zu ', 'Zhi ', 'Suan ', 'Mei ', 'Zuo ', 'Qu ', 'Hu ', 'Zhu ', 'Shen ', 'Sui ', 'Ci ', 'Chai ', 'Mi ', 'Lu ', 'Yu ', 'Xiang ', 'Wu ', 'Tiao ', 'Piao ', 'Zhu ', 'Gui ', 'Xia ', 'Zhi ', 'Ji ', 'Gao ', 'Zhen ', 'Gao ', 'Shui ', 'Jin ', 'Chen ', 'Gai ', 'Kun ', 'Di ', 'Dao ', 'Huo ', 'Tao ', 'Qi ', 'Gu ', 'Guan ', 'Zui ', 'Ling ', 'Lu ', 'Bing ', 'Jin ', 'Dao ', 'Zhi ', 'Lu ', 'Shan ', 'Bei ', 'Zhe ', 'Hui ', 'You ', 'Xi ', 'Yin ', 'Zi ', 'Huo ', 'Zhen ', 'Fu ', 'Yuan ', 'Wu ', 'Xian ', 'Yang ', 'Ti ', 'Yi ', 'Mei ', 'Si ', 'Di ', '[?] ', 'Zhuo ', 'Zhen ', 'Yong ', 'Ji ', 'Gao ', 'Tang ', 'Si ', 'Ma ', 'Ta ', '[?] ', 'Xuan ', 'Qi ', 'Yu ', 'Xi ', 'Ji ', 'Si ', 'Chan ', 'Tan ', 'Kuai ', 'Sui ', 'Li ', 'Nong ', 'Ni ', 'Dao ', 'Li ', 'Rang ', 'Yue ', 'Ti ', 'Zan ', 'Lei ', 'Rou ', 'Yu ', 'Yu ', 'Chi ', 'Xie ', 'Qin ', 'He ', 'Tu ', 'Xiu ', 'Si ', 'Ren ', 'Tu ', 'Zi ', 'Cha ', 'Gan ', 'Yi ', 'Xian ', 'Bing ', 'Nian ', 'Qiu ', 'Qiu ', 'Chong ', 'Fen ', 'Hao ', 'Yun ', 'Ke ', 'Miao ', 'Zhi ', 'Geng ', 'Bi ', 'Zhi ', 'Yu ', 'Mi ', 'Ku ', 'Ban ', 'Pi ', 'Ni ', 'Li ', 'You ', 'Zu ', 'Pi ', 'Ba ', 'Ling ', 'Mo ', 'Cheng ', 'Nian ', 'Qin ', 'Yang ', 'Zuo ', 'Zhi ', 'Zhi ', 'Shu ', 'Ju ', 'Zi ', 'Huo ', 'Ji ', 'Cheng ', 'Tong ', 'Zhi ', 'Huo ', 'He ', 'Yin ', 'Zi ', 'Zhi ', 'Jie ', 'Ren ', 'Du ', 'Yi ', 'Zhu ', 'Hui ', 'Nong ', 'Fu '];
<?php return ['Xi ', 'Kao ', 'Lang ', 'Fu ', 'Ze ', 'Shui ', 'Lu ', 'Kun ', 'Gan ', 'Geng ', 'Ti ', 'Cheng ', 'Tu ', 'Shao ', 'Shui ', 'Ya ', 'Lun ', 'Lu ', 'Gu ', 'Zuo ', 'Ren ', 'Zhun ', 'Bang ', 'Bai ', 'Ji ', 'Zhi ', 'Zhi ', 'Kun ', 'Leng ', 'Peng ', 'Ke ', 'Bing ', 'Chou ', 'Zu ', 'Yu ', 'Su ', 'Lue ', '[?] ', 'Yi ', 'Xi ', 'Bian ', 'Ji ', 'Fu ', 'Bi ', 'Nuo ', 'Jie ', 'Zhong ', 'Zong ', 'Xu ', 'Cheng ', 'Dao ', 'Wen ', 'Lian ', 'Zi ', 'Yu ', 'Ji ', 'Xu ', 'Zhen ', 'Zhi ', 'Dao ', 'Jia ', 'Ji ', 'Gao ', 'Gao ', 'Gu ', 'Rong ', 'Sui ', 'You ', 'Ji ', 'Kang ', 'Mu ', 'Shan ', 'Men ', 'Zhi ', 'Ji ', 'Lu ', 'Su ', 'Ji ', 'Ying ', 'Wen ', 'Qiu ', 'Se ', '[?] ', 'Yi ', 'Huang ', 'Qie ', 'Ji ', 'Sui ', 'Xiao ', 'Pu ', 'Jiao ', 'Zhuo ', 'Tong ', 'Sai ', 'Lu ', 'Sui ', 'Nong ', 'Se ', 'Hui ', 'Rang ', 'Nuo ', 'Yu ', 'Bin ', 'Ji ', 'Tui ', 'Wen ', 'Cheng ', 'Huo ', 'Gong ', 'Lu ', 'Biao ', '[?] ', 'Rang ', 'Zhuo ', 'Li ', 'Zan ', 'Xue ', 'Wa ', 'Jiu ', 'Qiong ', 'Xi ', 'Qiong ', 'Kong ', 'Yu ', 'Sen ', 'Jing ', 'Yao ', 'Chuan ', 'Zhun ', 'Tu ', 'Lao ', 'Qie ', 'Zhai ', 'Yao ', 'Bian ', 'Bao ', 'Yao ', 'Bing ', 'Wa ', 'Zhu ', 'Jiao ', 'Qiao ', 'Diao ', 'Wu ', 'Gui ', 'Yao ', 'Zhi ', 'Chuang ', 'Yao ', 'Tiao ', 'Jiao ', 'Chuang ', 'Jiong ', 'Xiao ', 'Cheng ', 'Kou ', 'Cuan ', 'Wo ', 'Dan ', 'Ku ', 'Ke ', 'Zhui ', 'Xu ', 'Su ', 'Guan ', 'Kui ', 'Dou ', '[?] ', 'Yin ', 'Wo ', 'Wa ', 'Ya ', 'Yu ', 'Ju ', 'Qiong ', 'Yao ', 'Yao ', 'Tiao ', 'Chao ', 'Yu ', 'Tian ', 'Diao ', 'Ju ', 'Liao ', 'Xi ', 'Wu ', 'Kui ', 'Chuang ', 'Zhao ', '[?] ', 'Kuan ', 'Long ', 'Cheng ', 'Cui ', 'Piao ', 'Zao ', 'Cuan ', 'Qiao ', 'Qiong ', 'Dou ', 'Zao ', 'Long ', 'Qie ', 'Li ', 'Chu ', 'Shi ', 'Fou ', 'Qian ', 'Chu ', 'Hong ', 'Qi ', 'Qian ', 'Gong ', 'Shi ', 'Shu ', 'Miao ', 'Ju ', 'Zhan ', 'Zhu ', 'Ling ', 'Long ', 'Bing ', 'Jing ', 'Jing ', 'Zhang ', 'Yi ', 'Si ', 'Jun ', 'Hong ', 'Tong ', 'Song ', 'Jing ', 'Diao ', 'Yi ', 'Shu ', 'Jing ', 'Qu ', 'Jie ', 'Ping ', 'Duan ', 'Shao ', 'Zhuan ', 'Ceng ', 'Deng ', 'Cui ', 'Huai ', 'Jing ', 'Kan ', 'Jing ', 'Zhu ', 'Zhu ', 'Le ', 'Peng ', 'Yu ', 'Chi ', 'Gan '];
<?php return ['Mang ', 'Zhu ', 'Utsubo ', 'Du ', 'Ji ', 'Xiao ', 'Ba ', 'Suan ', 'Ji ', 'Zhen ', 'Zhao ', 'Sun ', 'Ya ', 'Zhui ', 'Yuan ', 'Hu ', 'Gang ', 'Xiao ', 'Cen ', 'Pi ', 'Bi ', 'Jian ', 'Yi ', 'Dong ', 'Shan ', 'Sheng ', 'Xia ', 'Di ', 'Zhu ', 'Na ', 'Chi ', 'Gu ', 'Li ', 'Qie ', 'Min ', 'Bao ', 'Tiao ', 'Si ', 'Fu ', 'Ce ', 'Ben ', 'Pei ', 'Da ', 'Zi ', 'Di ', 'Ling ', 'Ze ', 'Nu ', 'Fu ', 'Gou ', 'Fan ', 'Jia ', 'Ge ', 'Fan ', 'Shi ', 'Mao ', 'Po ', 'Sey ', 'Jian ', 'Qiong ', 'Long ', 'Souke ', 'Bian ', 'Luo ', 'Gui ', 'Qu ', 'Chi ', 'Yin ', 'Yao ', 'Xian ', 'Bi ', 'Qiong ', 'Gua ', 'Deng ', 'Jiao ', 'Jin ', 'Quan ', 'Sun ', 'Ru ', 'Fa ', 'Kuang ', 'Zhu ', 'Tong ', 'Ji ', 'Da ', 'Xing ', 'Ce ', 'Zhong ', 'Kou ', 'Lai ', 'Bi ', 'Shai ', 'Dang ', 'Zheng ', 'Ce ', 'Fu ', 'Yun ', 'Tu ', 'Pa ', 'Li ', 'Lang ', 'Ju ', 'Guan ', 'Jian ', 'Han ', 'Tong ', 'Xia ', 'Zhi ', 'Cheng ', 'Suan ', 'Shi ', 'Zhu ', 'Zuo ', 'Xiao ', 'Shao ', 'Ting ', 'Ce ', 'Yan ', 'Gao ', 'Kuai ', 'Gan ', 'Chou ', 'Kago ', 'Gang ', 'Yun ', 'O ', 'Qian ', 'Xiao ', 'Jian ', 'Pu ', 'Lai ', 'Zou ', 'Bi ', 'Bi ', 'Bi ', 'Ge ', 'Chi ', 'Guai ', 'Yu ', 'Jian ', 'Zhao ', 'Gu ', 'Chi ', 'Zheng ', 'Jing ', 'Sha ', 'Zhou ', 'Lu ', 'Bo ', 'Ji ', 'Lin ', 'Suan ', 'Jun ', 'Fu ', 'Zha ', 'Gu ', 'Kong ', 'Qian ', 'Quan ', 'Jun ', 'Chui ', 'Guan ', 'Yuan ', 'Ce ', 'Ju ', 'Bo ', 'Ze ', 'Qie ', 'Tuo ', 'Luo ', 'Dan ', 'Xiao ', 'Ruo ', 'Jian ', 'Xuan ', 'Bian ', 'Sun ', 'Xiang ', 'Xian ', 'Ping ', 'Zhen ', 'Sheng ', 'Hu ', 'Shi ', 'Zhu ', 'Yue ', 'Chun ', 'Lu ', 'Wu ', 'Dong ', 'Xiao ', 'Ji ', 'Jie ', 'Huang ', 'Xing ', 'Mei ', 'Fan ', 'Chui ', 'Zhuan ', 'Pian ', 'Feng ', 'Zhu ', 'Hong ', 'Qie ', 'Hou ', 'Qiu ', 'Miao ', 'Qian ', '[?] ', 'Kui ', 'Sik ', 'Lou ', 'Yun ', 'He ', 'Tang ', 'Yue ', 'Chou ', 'Gao ', 'Fei ', 'Ruo ', 'Zheng ', 'Gou ', 'Nie ', 'Qian ', 'Xiao ', 'Cuan ', 'Gong ', 'Pang ', 'Du ', 'Li ', 'Bi ', 'Zhuo ', 'Chu ', 'Shai ', 'Chi ', 'Zhu ', 'Qiang ', 'Long ', 'Lan ', 'Jian ', 'Bu ', 'Li ', 'Hui ', 'Bi ', 'Di ', 'Cong ', 'Yan ', 'Peng ', 'Sen ', 'Zhuan ', 'Pai ', 'Piao ', 'Dou ', 'Yu ', 'Mie ', 'Zhuan '];
<?php return ['Ze ', 'Xi ', 'Guo ', 'Yi ', 'Hu ', 'Chan ', 'Kou ', 'Cu ', 'Ping ', 'Chou ', 'Ji ', 'Gui ', 'Su ', 'Lou ', 'Zha ', 'Lu ', 'Nian ', 'Suo ', 'Cuan ', 'Sasara ', 'Suo ', 'Le ', 'Duan ', 'Yana ', 'Xiao ', 'Bo ', 'Mi ', 'Si ', 'Dang ', 'Liao ', 'Dan ', 'Dian ', 'Fu ', 'Jian ', 'Min ', 'Kui ', 'Dai ', 'Qiao ', 'Deng ', 'Huang ', 'Sun ', 'Lao ', 'Zan ', 'Xiao ', 'Du ', 'Shi ', 'Zan ', '[?] ', 'Pai ', 'Hata ', 'Pai ', 'Gan ', 'Ju ', 'Du ', 'Lu ', 'Yan ', 'Bo ', 'Dang ', 'Sai ', 'Ke ', 'Long ', 'Qian ', 'Lian ', 'Bo ', 'Zhou ', 'Lai ', '[?] ', 'Lan ', 'Kui ', 'Yu ', 'Yue ', 'Hao ', 'Zhen ', 'Tai ', 'Ti ', 'Mi ', 'Chou ', 'Ji ', '[?] ', 'Hata ', 'Teng ', 'Zhuan ', 'Zhou ', 'Fan ', 'Sou ', 'Zhou ', 'Kuji ', 'Zhuo ', 'Teng ', 'Lu ', 'Lu ', 'Jian ', 'Tuo ', 'Ying ', 'Yu ', 'Lai ', 'Long ', 'Shinshi ', 'Lian ', 'Lan ', 'Qian ', 'Yue ', 'Zhong ', 'Qu ', 'Lian ', 'Bian ', 'Duan ', 'Zuan ', 'Li ', 'Si ', 'Luo ', 'Ying ', 'Yue ', 'Zhuo ', 'Xu ', 'Mi ', 'Di ', 'Fan ', 'Shen ', 'Zhe ', 'Shen ', 'Nu ', 'Xie ', 'Lei ', 'Xian ', 'Zi ', 'Ni ', 'Cun ', '[?] ', 'Qian ', 'Kume ', 'Bi ', 'Ban ', 'Wu ', 'Sha ', 'Kang ', 'Rou ', 'Fen ', 'Bi ', 'Cui ', '[?] ', 'Li ', 'Chi ', 'Nukamiso ', 'Ro ', 'Ba ', 'Li ', 'Gan ', 'Ju ', 'Po ', 'Mo ', 'Cu ', 'Nian ', 'Zhou ', 'Li ', 'Su ', 'Tiao ', 'Li ', 'Qi ', 'Su ', 'Hong ', 'Tong ', 'Zi ', 'Ce ', 'Yue ', 'Zhou ', 'Lin ', 'Zhuang ', 'Bai ', '[?] ', 'Fen ', 'Ji ', '[?] ', 'Sukumo ', 'Liang ', 'Xian ', 'Fu ', 'Liang ', 'Can ', 'Geng ', 'Li ', 'Yue ', 'Lu ', 'Ju ', 'Qi ', 'Cui ', 'Bai ', 'Zhang ', 'Lin ', 'Zong ', 'Jing ', 'Guo ', 'Kouji ', 'San ', 'San ', 'Tang ', 'Bian ', 'Rou ', 'Mian ', 'Hou ', 'Xu ', 'Zong ', 'Hu ', 'Jian ', 'Zan ', 'Ci ', 'Li ', 'Xie ', 'Fu ', 'Ni ', 'Bei ', 'Gu ', 'Xiu ', 'Gao ', 'Tang ', 'Qiu ', 'Sukumo ', 'Cao ', 'Zhuang ', 'Tang ', 'Mi ', 'San ', 'Fen ', 'Zao ', 'Kang ', 'Jiang ', 'Mo ', 'San ', 'San ', 'Nuo ', 'Xi ', 'Liang ', 'Jiang ', 'Kuai ', 'Bo ', 'Huan ', '[?] ', 'Zong ', 'Xian ', 'Nuo ', 'Tuan ', 'Nie ', 'Li ', 'Zuo ', 'Di ', 'Nie ', 'Tiao ', 'Lan ', 'Mi ', 'Jiao ', 'Jiu ', 'Xi ', 'Gong ', 'Zheng ', 'Jiu ', 'You '];
<?php return ['Ji ', 'Cha ', 'Zhou ', 'Xun ', 'Yue ', 'Hong ', 'Yu ', 'He ', 'Wan ', 'Ren ', 'Wen ', 'Wen ', 'Qiu ', 'Na ', 'Zi ', 'Tou ', 'Niu ', 'Fou ', 'Jie ', 'Shu ', 'Chun ', 'Pi ', 'Yin ', 'Sha ', 'Hong ', 'Zhi ', 'Ji ', 'Fen ', 'Yun ', 'Ren ', 'Dan ', 'Jin ', 'Su ', 'Fang ', 'Suo ', 'Cui ', 'Jiu ', 'Zha ', 'Kinu ', 'Jin ', 'Fu ', 'Zhi ', 'Ci ', 'Zi ', 'Chou ', 'Hong ', 'Zha ', 'Lei ', 'Xi ', 'Fu ', 'Xie ', 'Shen ', 'Bei ', 'Zhu ', 'Qu ', 'Ling ', 'Zhu ', 'Shao ', 'Gan ', 'Yang ', 'Fu ', 'Tuo ', 'Zhen ', 'Dai ', 'Zhuo ', 'Shi ', 'Zhong ', 'Xian ', 'Zu ', 'Jiong ', 'Ban ', 'Ju ', 'Mo ', 'Shu ', 'Zui ', 'Wata ', 'Jing ', 'Ren ', 'Heng ', 'Xie ', 'Jie ', 'Zhu ', 'Chou ', 'Gua ', 'Bai ', 'Jue ', 'Kuang ', 'Hu ', 'Ci ', 'Geng ', 'Geng ', 'Tao ', 'Xie ', 'Ku ', 'Jiao ', 'Quan ', 'Gai ', 'Luo ', 'Xuan ', 'Bing ', 'Xian ', 'Fu ', 'Gei ', 'Tong ', 'Rong ', 'Tiao ', 'Yin ', 'Lei ', 'Xie ', 'Quan ', 'Xu ', 'Lun ', 'Die ', 'Tong ', 'Si ', 'Jiang ', 'Xiang ', 'Hui ', 'Jue ', 'Zhi ', 'Jian ', 'Juan ', 'Chi ', 'Mian ', 'Zhen ', 'Lu ', 'Cheng ', 'Qiu ', 'Shu ', 'Bang ', 'Tong ', 'Xiao ', 'Wan ', 'Qin ', 'Geng ', 'Xiu ', 'Ti ', 'Xiu ', 'Xie ', 'Hong ', 'Xi ', 'Fu ', 'Ting ', 'Sui ', 'Dui ', 'Kun ', 'Fu ', 'Jing ', 'Hu ', 'Zhi ', 'Yan ', 'Jiong ', 'Feng ', 'Ji ', 'Sok ', 'Kase ', 'Zong ', 'Lin ', 'Duo ', 'Li ', 'Lu ', 'Liang ', 'Chou ', 'Quan ', 'Shao ', 'Qi ', 'Qi ', 'Zhun ', 'Qi ', 'Wan ', 'Qian ', 'Xian ', 'Shou ', 'Wei ', 'Qi ', 'Tao ', 'Wan ', 'Gang ', 'Wang ', 'Beng ', 'Zhui ', 'Cai ', 'Guo ', 'Cui ', 'Lun ', 'Liu ', 'Qi ', 'Zhan ', 'Bei ', 'Chuo ', 'Ling ', 'Mian ', 'Qi ', 'Qie ', 'Tan ', 'Zong ', 'Gun ', 'Zou ', 'Yi ', 'Zi ', 'Xing ', 'Liang ', 'Jin ', 'Fei ', 'Rui ', 'Min ', 'Yu ', 'Zong ', 'Fan ', 'Lu ', 'Xu ', 'Yingl ', 'Zhang ', 'Kasuri ', 'Xu ', 'Xiang ', 'Jian ', 'Ke ', 'Xian ', 'Ruan ', 'Mian ', 'Qi ', 'Duan ', 'Zhong ', 'Di ', 'Min ', 'Miao ', 'Yuan ', 'Xie ', 'Bao ', 'Si ', 'Qiu ', 'Bian ', 'Huan ', 'Geng ', 'Cong ', 'Mian ', 'Wei ', 'Fu ', 'Wei ', 'Yu ', 'Gou ', 'Miao ', 'Xie ', 'Lian ', 'Zong ', 'Bian ', 'Yun ', 'Yin ', 'Ti ', 'Gua ', 'Zhi ', 'Yun ', 'Cheng ', 'Chan ', 'Dai '];
<?php return ['Xia ', 'Yuan ', 'Zong ', 'Xu ', 'Nawa ', 'Odoshi ', 'Geng ', 'Sen ', 'Ying ', 'Jin ', 'Yi ', 'Zhui ', 'Ni ', 'Bang ', 'Gu ', 'Pan ', 'Zhou ', 'Jian ', 'Cuo ', 'Quan ', 'Shuang ', 'Yun ', 'Xia ', 'Shuai ', 'Xi ', 'Rong ', 'Tao ', 'Fu ', 'Yun ', 'Zhen ', 'Gao ', 'Ru ', 'Hu ', 'Zai ', 'Teng ', 'Xian ', 'Su ', 'Zhen ', 'Zong ', 'Tao ', 'Horo ', 'Cai ', 'Bi ', 'Feng ', 'Cu ', 'Li ', 'Suo ', 'Yin ', 'Xi ', 'Zong ', 'Lei ', 'Zhuan ', 'Qian ', 'Man ', 'Zhi ', 'Lu ', 'Mo ', 'Piao ', 'Lian ', 'Mi ', 'Xuan ', 'Zong ', 'Ji ', 'Shan ', 'Sui ', 'Fan ', 'Shuai ', 'Beng ', 'Yi ', 'Sao ', 'Mou ', 'Zhou ', 'Qiang ', 'Hun ', 'Sem ', 'Xi ', 'Jung ', 'Xiu ', 'Ran ', 'Xuan ', 'Hui ', 'Qiao ', 'Zeng ', 'Zuo ', 'Zhi ', 'Shan ', 'San ', 'Lin ', 'Yu ', 'Fan ', 'Liao ', 'Chuo ', 'Zun ', 'Jian ', 'Rao ', 'Chan ', 'Rui ', 'Xiu ', 'Hui ', 'Hua ', 'Zuan ', 'Xi ', 'Qiang ', 'Un ', 'Da ', 'Sheng ', 'Hui ', 'Xi ', 'Se ', 'Jian ', 'Jiang ', 'Huan ', 'Zao ', 'Cong ', 'Jie ', 'Jiao ', 'Bo ', 'Chan ', 'Yi ', 'Nao ', 'Sui ', 'Yi ', 'Shai ', 'Xu ', 'Ji ', 'Bin ', 'Qian ', 'Lan ', 'Pu ', 'Xun ', 'Zuan ', 'Qi ', 'Peng ', 'Li ', 'Mo ', 'Lei ', 'Xie ', 'Zuan ', 'Kuang ', 'You ', 'Xu ', 'Lei ', 'Xian ', 'Chan ', 'Kou ', 'Lu ', 'Chan ', 'Ying ', 'Cai ', 'Xiang ', 'Xian ', 'Zui ', 'Zuan ', 'Luo ', 'Xi ', 'Dao ', 'Lan ', 'Lei ', 'Lian ', 'Si ', 'Jiu ', 'Yu ', 'Hong ', 'Zhou ', 'Xian ', 'He ', 'Yue ', 'Ji ', 'Wan ', 'Kuang ', 'Ji ', 'Ren ', 'Wei ', 'Yun ', 'Hong ', 'Chun ', 'Pi ', 'Sha ', 'Gang ', 'Na ', 'Ren ', 'Zong ', 'Lun ', 'Fen ', 'Zhi ', 'Wen ', 'Fang ', 'Zhu ', 'Yin ', 'Niu ', 'Shu ', 'Xian ', 'Gan ', 'Xie ', 'Fu ', 'Lian ', 'Zu ', 'Shen ', 'Xi ', 'Zhi ', 'Zhong ', 'Zhou ', 'Ban ', 'Fu ', 'Zhuo ', 'Shao ', 'Yi ', 'Jing ', 'Dai ', 'Bang ', 'Rong ', 'Jie ', 'Ku ', 'Rao ', 'Die ', 'Heng ', 'Hui ', 'Gei ', 'Xuan ', 'Jiang ', 'Luo ', 'Jue ', 'Jiao ', 'Tong ', 'Geng ', 'Xiao ', 'Juan ', 'Xiu ', 'Xi ', 'Sui ', 'Tao ', 'Ji ', 'Ti ', 'Ji ', 'Xu ', 'Ling ', '[?] ', 'Xu ', 'Qi ', 'Fei ', 'Chuo ', 'Zhang ', 'Gun ', 'Sheng ', 'Wei ', 'Mian ', 'Shou ', 'Beng ', 'Chou ', 'Tao ', 'Liu ', 'Quan ', 'Zong ', 'Zhan ', 'Wan ', 'Lu '];
<?php return ['Zhui ', 'Zi ', 'Ke ', 'Xiang ', 'Jian ', 'Mian ', 'Lan ', 'Ti ', 'Miao ', 'Qi ', 'Yun ', 'Hui ', 'Si ', 'Duo ', 'Duan ', 'Bian ', 'Xian ', 'Gou ', 'Zhui ', 'Huan ', 'Di ', 'Lu ', 'Bian ', 'Min ', 'Yuan ', 'Jin ', 'Fu ', 'Ru ', 'Zhen ', 'Feng ', 'Shuai ', 'Gao ', 'Chan ', 'Li ', 'Yi ', 'Jian ', 'Bin ', 'Piao ', 'Man ', 'Lei ', 'Ying ', 'Suo ', 'Mou ', 'Sao ', 'Xie ', 'Liao ', 'Shan ', 'Zeng ', 'Jiang ', 'Qian ', 'Zao ', 'Huan ', 'Jiao ', 'Zuan ', 'Fou ', 'Xie ', 'Gang ', 'Fou ', 'Que ', 'Fou ', 'Kaakeru ', 'Bo ', 'Ping ', 'Hou ', '[?] ', 'Gang ', 'Ying ', 'Ying ', 'Qing ', 'Xia ', 'Guan ', 'Zun ', 'Tan ', 'Chang ', 'Qi ', 'Weng ', 'Ying ', 'Lei ', 'Tan ', 'Lu ', 'Guan ', 'Wang ', 'Wang ', 'Gang ', 'Wang ', 'Han ', '[?] ', 'Luo ', 'Fu ', 'Mi ', 'Fa ', 'Gu ', 'Zhu ', 'Ju ', 'Mao ', 'Gu ', 'Min ', 'Gang ', 'Ba ', 'Gua ', 'Ti ', 'Juan ', 'Fu ', 'Lin ', 'Yan ', 'Zhao ', 'Zui ', 'Gua ', 'Zhuo ', 'Yu ', 'Zhi ', 'An ', 'Fa ', 'Nan ', 'Shu ', 'Si ', 'Pi ', 'Ma ', 'Liu ', 'Ba ', 'Fa ', 'Li ', 'Chao ', 'Wei ', 'Bi ', 'Ji ', 'Zeng ', 'Tong ', 'Liu ', 'Ji ', 'Juan ', 'Mi ', 'Zhao ', 'Luo ', 'Pi ', 'Ji ', 'Ji ', 'Luan ', 'Yang ', 'Mie ', 'Qiang ', 'Ta ', 'Mei ', 'Yang ', 'You ', 'You ', 'Fen ', 'Ba ', 'Gao ', 'Yang ', 'Gu ', 'Qiang ', 'Zang ', 'Gao ', 'Ling ', 'Yi ', 'Zhu ', 'Di ', 'Xiu ', 'Qian ', 'Yi ', 'Xian ', 'Rong ', 'Qun ', 'Qun ', 'Qian ', 'Huan ', 'Zui ', 'Xian ', 'Yi ', 'Yashinau ', 'Qiang ', 'Xian ', 'Yu ', 'Geng ', 'Jie ', 'Tang ', 'Yuan ', 'Xi ', 'Fan ', 'Shan ', 'Fen ', 'Shan ', 'Lian ', 'Lei ', 'Geng ', 'Nou ', 'Qiang ', 'Chan ', 'Yu ', 'Gong ', 'Yi ', 'Chong ', 'Weng ', 'Fen ', 'Hong ', 'Chi ', 'Chi ', 'Cui ', 'Fu ', 'Xia ', 'Pen ', 'Yi ', 'La ', 'Yi ', 'Pi ', 'Ling ', 'Liu ', 'Zhi ', 'Qu ', 'Xi ', 'Xie ', 'Xiang ', 'Xi ', 'Xi ', 'Qi ', 'Qiao ', 'Hui ', 'Hui ', 'Xiao ', 'Se ', 'Hong ', 'Jiang ', 'Di ', 'Cui ', 'Fei ', 'Tao ', 'Sha ', 'Chi ', 'Zhu ', 'Jian ', 'Xuan ', 'Shi ', 'Pian ', 'Zong ', 'Wan ', 'Hui ', 'Hou ', 'He ', 'He ', 'Han ', 'Ao ', 'Piao ', 'Yi ', 'Lian ', 'Qu ', '[?] ', 'Lin ', 'Pen ', 'Qiao ', 'Ao ', 'Fan ', 'Yi ', 'Hui ', 'Xuan ', 'Dao '];
<?php return ['Yao ', 'Lao ', '[?] ', 'Kao ', 'Mao ', 'Zhe ', 'Qi ', 'Gou ', 'Gou ', 'Gou ', 'Die ', 'Die ', 'Er ', 'Shua ', 'Ruan ', 'Er ', 'Nai ', 'Zhuan ', 'Lei ', 'Ting ', 'Zi ', 'Geng ', 'Chao ', 'Hao ', 'Yun ', 'Pa ', 'Pi ', 'Chi ', 'Si ', 'Chu ', 'Jia ', 'Ju ', 'He ', 'Chu ', 'Lao ', 'Lun ', 'Ji ', 'Tang ', 'Ou ', 'Lou ', 'Nou ', 'Gou ', 'Pang ', 'Ze ', 'Lou ', 'Ji ', 'Lao ', 'Huo ', 'You ', 'Mo ', 'Huai ', 'Er ', 'Zhe ', 'Ting ', 'Ye ', 'Da ', 'Song ', 'Qin ', 'Yun ', 'Chi ', 'Dan ', 'Dan ', 'Hong ', 'Geng ', 'Zhi ', '[?] ', 'Nie ', 'Dan ', 'Zhen ', 'Che ', 'Ling ', 'Zheng ', 'You ', 'Wa ', 'Liao ', 'Long ', 'Zhi ', 'Ning ', 'Tiao ', 'Er ', 'Ya ', 'Die ', 'Gua ', '[?] ', 'Lian ', 'Hao ', 'Sheng ', 'Lie ', 'Pin ', 'Jing ', 'Ju ', 'Bi ', 'Di ', 'Guo ', 'Wen ', 'Xu ', 'Ping ', 'Cong ', 'Shikato ', '[?] ', 'Ting ', 'Yu ', 'Cong ', 'Kui ', 'Tsuraneru ', 'Kui ', 'Cong ', 'Lian ', 'Weng ', 'Kui ', 'Lian ', 'Lian ', 'Cong ', 'Ao ', 'Sheng ', 'Song ', 'Ting ', 'Kui ', 'Nie ', 'Zhi ', 'Dan ', 'Ning ', 'Qie ', 'Ji ', 'Ting ', 'Ting ', 'Long ', 'Yu ', 'Yu ', 'Zhao ', 'Si ', 'Su ', 'Yi ', 'Su ', 'Si ', 'Zhao ', 'Zhao ', 'Rou ', 'Yi ', 'Le ', 'Ji ', 'Qiu ', 'Ken ', 'Cao ', 'Ge ', 'Di ', 'Huan ', 'Huang ', 'Yi ', 'Ren ', 'Xiao ', 'Ru ', 'Zhou ', 'Yuan ', 'Du ', 'Gang ', 'Rong ', 'Gan ', 'Cha ', 'Wo ', 'Chang ', 'Gu ', 'Zhi ', 'Han ', 'Fu ', 'Fei ', 'Fen ', 'Pei ', 'Pang ', 'Jian ', 'Fang ', 'Zhun ', 'You ', 'Na ', 'Hang ', 'Ken ', 'Ran ', 'Gong ', 'Yu ', 'Wen ', 'Yao ', 'Jin ', 'Pi ', 'Qian ', 'Xi ', 'Xi ', 'Fei ', 'Ken ', 'Jing ', 'Tai ', 'Shen ', 'Zhong ', 'Zhang ', 'Xie ', 'Shen ', 'Wei ', 'Zhou ', 'Die ', 'Dan ', 'Fei ', 'Ba ', 'Bo ', 'Qu ', 'Tian ', 'Bei ', 'Gua ', 'Tai ', 'Zi ', 'Ku ', 'Zhi ', 'Ni ', 'Ping ', 'Zi ', 'Fu ', 'Pang ', 'Zhen ', 'Xian ', 'Zuo ', 'Pei ', 'Jia ', 'Sheng ', 'Zhi ', 'Bao ', 'Mu ', 'Qu ', 'Hu ', 'Ke ', 'Yi ', 'Yin ', 'Xu ', 'Yang ', 'Long ', 'Dong ', 'Ka ', 'Lu ', 'Jing ', 'Nu ', 'Yan ', 'Pang ', 'Kua ', 'Yi ', 'Guang ', 'Gai ', 'Ge ', 'Dong ', 'Zhi ', 'Xiao ', 'Xiong ', 'Xiong ', 'Er ', 'E ', 'Xing ', 'Pian ', 'Neng ', 'Zi ', 'Gui '];
<?php return ['Cheng ', 'Tiao ', 'Zhi ', 'Cui ', 'Mei ', 'Xie ', 'Cui ', 'Xie ', 'Mo ', 'Mai ', 'Ji ', 'Obiyaakasu ', '[?] ', 'Kuai ', 'Sa ', 'Zang ', 'Qi ', 'Nao ', 'Mi ', 'Nong ', 'Luan ', 'Wan ', 'Bo ', 'Wen ', 'Guan ', 'Qiu ', 'Jiao ', 'Jing ', 'Rou ', 'Heng ', 'Cuo ', 'Lie ', 'Shan ', 'Ting ', 'Mei ', 'Chun ', 'Shen ', 'Xie ', 'De ', 'Zui ', 'Cu ', 'Xiu ', 'Xin ', 'Tuo ', 'Pao ', 'Cheng ', 'Nei ', 'Fu ', 'Dou ', 'Tuo ', 'Niao ', 'Noy ', 'Pi ', 'Gu ', 'Gua ', 'Li ', 'Lian ', 'Zhang ', 'Cui ', 'Jie ', 'Liang ', 'Zhou ', 'Pi ', 'Biao ', 'Lun ', 'Pian ', 'Guo ', 'Kui ', 'Chui ', 'Dan ', 'Tian ', 'Nei ', 'Jing ', 'Jie ', 'La ', 'Yi ', 'An ', 'Ren ', 'Shen ', 'Chuo ', 'Fu ', 'Fu ', 'Ju ', 'Fei ', 'Qiang ', 'Wan ', 'Dong ', 'Pi ', 'Guo ', 'Zong ', 'Ding ', 'Wu ', 'Mei ', 'Ruan ', 'Zhuan ', 'Zhi ', 'Cou ', 'Gua ', 'Ou ', 'Di ', 'An ', 'Xing ', 'Nao ', 'Yu ', 'Chuan ', 'Nan ', 'Yun ', 'Zhong ', 'Rou ', 'E ', 'Sai ', 'Tu ', 'Yao ', 'Jian ', 'Wei ', 'Jiao ', 'Yu ', 'Jia ', 'Duan ', 'Bi ', 'Chang ', 'Fu ', 'Xian ', 'Ni ', 'Mian ', 'Wa ', 'Teng ', 'Tui ', 'Bang ', 'Qian ', 'Lu ', 'Wa ', 'Sou ', 'Tang ', 'Su ', 'Zhui ', 'Ge ', 'Yi ', 'Bo ', 'Liao ', 'Ji ', 'Pi ', 'Xie ', 'Gao ', 'Lu ', 'Bin ', 'Ou ', 'Chang ', 'Lu ', 'Guo ', 'Pang ', 'Chuai ', 'Piao ', 'Jiang ', 'Fu ', 'Tang ', 'Mo ', 'Xi ', 'Zhuan ', 'Lu ', 'Jiao ', 'Ying ', 'Lu ', 'Zhi ', 'Tara ', 'Chun ', 'Lian ', 'Tong ', 'Peng ', 'Ni ', 'Zha ', 'Liao ', 'Cui ', 'Gui ', 'Xiao ', 'Teng ', 'Fan ', 'Zhi ', 'Jiao ', 'Shan ', 'Wu ', 'Cui ', 'Run ', 'Xiang ', 'Sui ', 'Fen ', 'Ying ', 'Tan ', 'Zhua ', 'Dan ', 'Kuai ', 'Nong ', 'Tun ', 'Lian ', 'Bi ', 'Yong ', 'Jue ', 'Chu ', 'Yi ', 'Juan ', 'La ', 'Lian ', 'Sao ', 'Tun ', 'Gu ', 'Qi ', 'Cui ', 'Bin ', 'Xun ', 'Ru ', 'Huo ', 'Zang ', 'Xian ', 'Biao ', 'Xing ', 'Kuan ', 'La ', 'Yan ', 'Lu ', 'Huo ', 'Zang ', 'Luo ', 'Qu ', 'Zang ', 'Luan ', 'Ni ', 'Zang ', 'Chen ', 'Qian ', 'Wo ', 'Guang ', 'Zang ', 'Lin ', 'Guang ', 'Zi ', 'Jiao ', 'Nie ', 'Chou ', 'Ji ', 'Gao ', 'Chou ', 'Mian ', 'Nie ', 'Zhi ', 'Zhi ', 'Ge ', 'Jian ', 'Die ', 'Zhi ', 'Xiu ', 'Tai ', 'Zhen ', 'Jiu ', 'Xian ', 'Yu ', 'Cha '];
<?php return ['Yao ', 'Yu ', 'Chong ', 'Xi ', 'Xi ', 'Jiu ', 'Yu ', 'Yu ', 'Xing ', 'Ju ', 'Jiu ', 'Xin ', 'She ', 'She ', 'Yadoru ', 'Jiu ', 'Shi ', 'Tan ', 'Shu ', 'Shi ', 'Tian ', 'Dan ', 'Pu ', 'Pu ', 'Guan ', 'Hua ', 'Tan ', 'Chuan ', 'Shun ', 'Xia ', 'Wu ', 'Zhou ', 'Dao ', 'Gang ', 'Shan ', 'Yi ', '[?] ', 'Pa ', 'Tai ', 'Fan ', 'Ban ', 'Chuan ', 'Hang ', 'Fang ', 'Ban ', 'Que ', 'Hesaki ', 'Zhong ', 'Jian ', 'Cang ', 'Ling ', 'Zhu ', 'Ze ', 'Duo ', 'Bo ', 'Xian ', 'Ge ', 'Chuan ', 'Jia ', 'Lu ', 'Hong ', 'Pang ', 'Xi ', '[?] ', 'Fu ', 'Zao ', 'Feng ', 'Li ', 'Shao ', 'Yu ', 'Lang ', 'Ting ', '[?] ', 'Wei ', 'Bo ', 'Meng ', 'Nian ', 'Ju ', 'Huang ', 'Shou ', 'Zong ', 'Bian ', 'Mao ', 'Die ', '[?] ', 'Bang ', 'Cha ', 'Yi ', 'Sao ', 'Cang ', 'Cao ', 'Lou ', 'Dai ', 'Sori ', 'Yao ', 'Tong ', 'Yofune ', 'Dang ', 'Tan ', 'Lu ', 'Yi ', 'Jie ', 'Jian ', 'Huo ', 'Meng ', 'Qi ', 'Lu ', 'Lu ', 'Chan ', 'Shuang ', 'Gen ', 'Liang ', 'Jian ', 'Jian ', 'Se ', 'Yan ', 'Fu ', 'Ping ', 'Yan ', 'Yan ', 'Cao ', 'Cao ', 'Yi ', 'Le ', 'Ting ', 'Qiu ', 'Ai ', 'Nai ', 'Tiao ', 'Jiao ', 'Jie ', 'Peng ', 'Wan ', 'Yi ', 'Chai ', 'Mian ', 'Mie ', 'Gan ', 'Qian ', 'Yu ', 'Yu ', 'Shuo ', 'Qiong ', 'Tu ', 'Xia ', 'Qi ', 'Mang ', 'Zi ', 'Hui ', 'Sui ', 'Zhi ', 'Xiang ', 'Bi ', 'Fu ', 'Tun ', 'Wei ', 'Wu ', 'Zhi ', 'Qi ', 'Shan ', 'Wen ', 'Qian ', 'Ren ', 'Fou ', 'Kou ', 'Jie ', 'Lu ', 'Xu ', 'Ji ', 'Qin ', 'Qi ', 'Yuan ', 'Fen ', 'Ba ', 'Rui ', 'Xin ', 'Ji ', 'Hua ', 'Hua ', 'Fang ', 'Wu ', 'Jue ', 'Gou ', 'Zhi ', 'Yun ', 'Qin ', 'Ao ', 'Chu ', 'Mao ', 'Ya ', 'Fei ', 'Reng ', 'Hang ', 'Cong ', 'Yin ', 'You ', 'Bian ', 'Yi ', 'Susa ', 'Wei ', 'Li ', 'Pi ', 'E ', 'Xian ', 'Chang ', 'Cang ', 'Meng ', 'Su ', 'Yi ', 'Yuan ', 'Ran ', 'Ling ', 'Tai ', 'Tiao ', 'Di ', 'Miao ', 'Qiong ', 'Li ', 'Yong ', 'Ke ', 'Mu ', 'Pei ', 'Bao ', 'Gou ', 'Min ', 'Yi ', 'Yi ', 'Ju ', 'Pi ', 'Ruo ', 'Ku ', 'Zhu ', 'Ni ', 'Bo ', 'Bing ', 'Shan ', 'Qiu ', 'Yao ', 'Xian ', 'Ben ', 'Hong ', 'Ying ', 'Zha ', 'Dong ', 'Ju ', 'Die ', 'Nie ', 'Gan ', 'Hu ', 'Ping ', 'Mei ', 'Fu ', 'Sheng ', 'Gu ', 'Bi ', 'Wei '];
<?php return ['Fu ', 'Zhuo ', 'Mao ', 'Fan ', 'Qie ', 'Mao ', 'Mao ', 'Ba ', 'Zi ', 'Mo ', 'Zi ', 'Di ', 'Chi ', 'Ji ', 'Jing ', 'Long ', '[?] ', 'Niao ', '[?] ', 'Xue ', 'Ying ', 'Qiong ', 'Ge ', 'Ming ', 'Li ', 'Rong ', 'Yin ', 'Gen ', 'Qian ', 'Chai ', 'Chen ', 'Yu ', 'Xiu ', 'Zi ', 'Lie ', 'Wu ', 'Ji ', 'Kui ', 'Ce ', 'Chong ', 'Ci ', 'Gou ', 'Guang ', 'Mang ', 'Chi ', 'Jiao ', 'Jiao ', 'Fu ', 'Yu ', 'Zhu ', 'Zi ', 'Jiang ', 'Hui ', 'Yin ', 'Cha ', 'Fa ', 'Rong ', 'Ru ', 'Chong ', 'Mang ', 'Tong ', 'Zhong ', '[?] ', 'Zhu ', 'Xun ', 'Huan ', 'Kua ', 'Quan ', 'Gai ', 'Da ', 'Jing ', 'Xing ', 'Quan ', 'Cao ', 'Jing ', 'Er ', 'An ', 'Shou ', 'Chi ', 'Ren ', 'Jian ', 'Ti ', 'Huang ', 'Ping ', 'Li ', 'Jin ', 'Lao ', 'Shu ', 'Zhuang ', 'Da ', 'Jia ', 'Rao ', 'Bi ', 'Ze ', 'Qiao ', 'Hui ', 'Qi ', 'Dang ', '[?] ', 'Rong ', 'Hun ', 'Ying ', 'Luo ', 'Ying ', 'Xun ', 'Jin ', 'Sun ', 'Yin ', 'Mai ', 'Hong ', 'Zhou ', 'Yao ', 'Du ', 'Wei ', 'Chu ', 'Dou ', 'Fu ', 'Ren ', 'Yin ', 'He ', 'Bi ', 'Bu ', 'Yun ', 'Di ', 'Tu ', 'Sui ', 'Sui ', 'Cheng ', 'Chen ', 'Wu ', 'Bie ', 'Xi ', 'Geng ', 'Li ', 'Fu ', 'Zhu ', 'Mo ', 'Li ', 'Zhuang ', 'Ji ', 'Duo ', 'Qiu ', 'Sha ', 'Suo ', 'Chen ', 'Feng ', 'Ju ', 'Mei ', 'Meng ', 'Xing ', 'Jing ', 'Che ', 'Xin ', 'Jun ', 'Yan ', 'Ting ', 'Diao ', 'Cuo ', 'Wan ', 'Han ', 'You ', 'Cuo ', 'Jia ', 'Wang ', 'You ', 'Niu ', 'Shao ', 'Xian ', 'Lang ', 'Fu ', 'E ', 'Mo ', 'Wen ', 'Jie ', 'Nan ', 'Mu ', 'Kan ', 'Lai ', 'Lian ', 'Shi ', 'Wo ', 'Usagi ', 'Lian ', 'Huo ', 'You ', 'Ying ', 'Ying ', 'Nuc ', 'Chun ', 'Mang ', 'Mang ', 'Ci ', 'Wan ', 'Jing ', 'Di ', 'Qu ', 'Dong ', 'Jian ', 'Zou ', 'Gu ', 'La ', 'Lu ', 'Ju ', 'Wei ', 'Jun ', 'Nie ', 'Kun ', 'He ', 'Pu ', 'Zi ', 'Gao ', 'Guo ', 'Fu ', 'Lun ', 'Chang ', 'Chou ', 'Song ', 'Chui ', 'Zhan ', 'Men ', 'Cai ', 'Ba ', 'Li ', 'Tu ', 'Bo ', 'Han ', 'Bao ', 'Qin ', 'Juan ', 'Xi ', 'Qin ', 'Di ', 'Jie ', 'Pu ', 'Dang ', 'Jin ', 'Zhao ', 'Tai ', 'Geng ', 'Hua ', 'Gu ', 'Ling ', 'Fei ', 'Jin ', 'An ', 'Wang ', 'Beng ', 'Zhou ', 'Yan ', 'Ju ', 'Jian ', 'Lin ', 'Tan ', 'Shu ', 'Tian ', 'Dao '];
<?php return ['Hu ', 'Qi ', 'He ', 'Cui ', 'Tao ', 'Chun ', 'Bei ', 'Chang ', 'Huan ', 'Fei ', 'Lai ', 'Qi ', 'Meng ', 'Ping ', 'Wei ', 'Dan ', 'Sha ', 'Huan ', 'Yan ', 'Yi ', 'Tiao ', 'Qi ', 'Wan ', 'Ce ', 'Nai ', 'Kutabireru ', 'Tuo ', 'Jiu ', 'Tie ', 'Luo ', '[?] ', '[?] ', 'Meng ', '[?] ', 'Yaji ', '[?] ', 'Ying ', 'Ying ', 'Ying ', 'Xiao ', 'Sa ', 'Qiu ', 'Ke ', 'Xiang ', 'Wan ', 'Yu ', 'Yu ', 'Fu ', 'Lian ', 'Xuan ', 'Yuan ', 'Nan ', 'Ze ', 'Wo ', 'Chun ', 'Xiao ', 'Yu ', 'Pian ', 'Mao ', 'An ', 'E ', 'Luo ', 'Ying ', 'Huo ', 'Gua ', 'Jiang ', 'Mian ', 'Zuo ', 'Zuo ', 'Ju ', 'Bao ', 'Rou ', 'Xi ', 'Xie ', 'An ', 'Qu ', 'Jian ', 'Fu ', 'Lu ', 'Jing ', 'Pen ', 'Feng ', 'Hong ', 'Hong ', 'Hou ', 'Yan ', 'Tu ', 'Zhu ', 'Zi ', 'Xiang ', 'Shen ', 'Ge ', 'Jie ', 'Jing ', 'Mi ', 'Huang ', 'Shen ', 'Pu ', 'Gai ', 'Dong ', 'Zhou ', 'Qian ', 'Wei ', 'Bo ', 'Wei ', 'Pa ', 'Ji ', 'Hu ', 'Zang ', 'Jia ', 'Duan ', 'Yao ', 'Jun ', 'Cong ', 'Quan ', 'Wei ', 'Xian ', 'Kui ', 'Ting ', 'Hun ', 'Xi ', 'Shi ', 'Qi ', 'Lan ', 'Zong ', 'Yao ', 'Yuan ', 'Mei ', 'Yun ', 'Shu ', 'Di ', 'Zhuan ', 'Guan ', 'Sukumo ', 'Xue ', 'Chan ', 'Kai ', 'Kui ', '[?] ', 'Jiang ', 'Lou ', 'Wei ', 'Pai ', '[?] ', 'Sou ', 'Yin ', 'Shi ', 'Chun ', 'Shi ', 'Yun ', 'Zhen ', 'Lang ', 'Nu ', 'Meng ', 'He ', 'Que ', 'Suan ', 'Yuan ', 'Li ', 'Ju ', 'Xi ', 'Pang ', 'Chu ', 'Xu ', 'Tu ', 'Liu ', 'Wo ', 'Zhen ', 'Qian ', 'Zu ', 'Po ', 'Cuo ', 'Yuan ', 'Chu ', 'Yu ', 'Kuai ', 'Pan ', 'Pu ', 'Pu ', 'Na ', 'Shuo ', 'Xi ', 'Fen ', 'Yun ', 'Zheng ', 'Jian ', 'Ji ', 'Ruo ', 'Cang ', 'En ', 'Mi ', 'Hao ', 'Sun ', 'Zhen ', 'Ming ', 'Sou ', 'Xu ', 'Liu ', 'Xi ', 'Gu ', 'Lang ', 'Rong ', 'Weng ', 'Gai ', 'Cuo ', 'Shi ', 'Tang ', 'Luo ', 'Ru ', 'Suo ', 'Xian ', 'Bei ', 'Yao ', 'Gui ', 'Bi ', 'Zong ', 'Gun ', 'Za ', 'Xiu ', 'Ce ', 'Hai ', 'Lan ', '[?] ', 'Ji ', 'Li ', 'Can ', 'Lang ', 'Yu ', '[?] ', 'Ying ', 'Mo ', 'Diao ', 'Tiao ', 'Mao ', 'Tong ', 'Zhu ', 'Peng ', 'An ', 'Lian ', 'Cong ', 'Xi ', 'Ping ', 'Qiu ', 'Jin ', 'Chun ', 'Jie ', 'Wei ', 'Tui ', 'Cao ', 'Yu ', 'Yi ', 'Ji ', 'Liao ', 'Bi ', 'Lu ', 'Su '];
<?php return ['Bu ', 'Zhang ', 'Luo ', 'Jiang ', 'Man ', 'Yan ', 'Ling ', 'Ji ', 'Piao ', 'Gun ', 'Han ', 'Di ', 'Su ', 'Lu ', 'She ', 'Shang ', 'Di ', 'Mie ', 'Xun ', 'Man ', 'Bo ', 'Di ', 'Cuo ', 'Zhe ', 'Sen ', 'Xuan ', 'Wei ', 'Hu ', 'Ao ', 'Mi ', 'Lou ', 'Cu ', 'Zhong ', 'Cai ', 'Po ', 'Jiang ', 'Mi ', 'Cong ', 'Niao ', 'Hui ', 'Jun ', 'Yin ', 'Jian ', 'Yan ', 'Shu ', 'Yin ', 'Kui ', 'Chen ', 'Hu ', 'Sha ', 'Kou ', 'Qian ', 'Ma ', 'Zang ', 'Sonoko ', 'Qiang ', 'Dou ', 'Lian ', 'Lin ', 'Kou ', 'Ai ', 'Bi ', 'Li ', 'Wei ', 'Ji ', 'Xun ', 'Sheng ', 'Fan ', 'Meng ', 'Ou ', 'Chan ', 'Dian ', 'Xun ', 'Jiao ', 'Rui ', 'Rui ', 'Lei ', 'Yu ', 'Qiao ', 'Chu ', 'Hua ', 'Jian ', 'Mai ', 'Yun ', 'Bao ', 'You ', 'Qu ', 'Lu ', 'Rao ', 'Hui ', 'E ', 'Teng ', 'Fei ', 'Jue ', 'Zui ', 'Fa ', 'Ru ', 'Fen ', 'Kui ', 'Shun ', 'Rui ', 'Ya ', 'Xu ', 'Fu ', 'Jue ', 'Dang ', 'Wu ', 'Tong ', 'Si ', 'Xiao ', 'Xi ', 'Long ', 'Yun ', '[?] ', 'Qi ', 'Jian ', 'Yun ', 'Sun ', 'Ling ', 'Yu ', 'Xia ', 'Yong ', 'Ji ', 'Hong ', 'Si ', 'Nong ', 'Lei ', 'Xuan ', 'Yun ', 'Yu ', 'Xi ', 'Hao ', 'Bo ', 'Hao ', 'Ai ', 'Wei ', 'Hui ', 'Wei ', 'Ji ', 'Ci ', 'Xiang ', 'Luan ', 'Mie ', 'Yi ', 'Leng ', 'Jiang ', 'Can ', 'Shen ', 'Qiang ', 'Lian ', 'Ke ', 'Yuan ', 'Da ', 'Ti ', 'Tang ', 'Xie ', 'Bi ', 'Zhan ', 'Sun ', 'Lian ', 'Fan ', 'Ding ', 'Jie ', 'Gu ', 'Xie ', 'Shu ', 'Jian ', 'Kao ', 'Hong ', 'Sa ', 'Xin ', 'Xun ', 'Yao ', 'Hie ', 'Sou ', 'Shu ', 'Xun ', 'Dui ', 'Pin ', 'Wei ', 'Neng ', 'Chou ', 'Mai ', 'Ru ', 'Piao ', 'Tai ', 'Qi ', 'Zao ', 'Chen ', 'Zhen ', 'Er ', 'Ni ', 'Ying ', 'Gao ', 'Cong ', 'Xiao ', 'Qi ', 'Fa ', 'Jian ', 'Xu ', 'Kui ', 'Jie ', 'Bian ', 'Diao ', 'Mi ', 'Lan ', 'Jin ', 'Cang ', 'Miao ', 'Qiong ', 'Qie ', 'Xian ', '[?] ', 'Ou ', 'Xian ', 'Su ', 'Lu ', 'Yi ', 'Xu ', 'Xie ', 'Li ', 'Yi ', 'La ', 'Lei ', 'Xiao ', 'Di ', 'Zhi ', 'Bei ', 'Teng ', 'Yao ', 'Mo ', 'Huan ', 'Piao ', 'Fan ', 'Sou ', 'Tan ', 'Tui ', 'Qiong ', 'Qiao ', 'Wei ', 'Liu ', 'Hui ', '[?] ', 'Gao ', 'Yun ', '[?] ', 'Li ', 'Shu ', 'Chu ', 'Ai ', 'Lin ', 'Zao ', 'Xuan ', 'Chen ', 'Lai ', 'Huo '];
<?php return ['Tuo ', 'Wu ', 'Rui ', 'Rui ', 'Qi ', 'Heng ', 'Lu ', 'Su ', 'Tui ', 'Mang ', 'Yun ', 'Pin ', 'Yu ', 'Xun ', 'Ji ', 'Jiong ', 'Xian ', 'Mo ', 'Hagi ', 'Su ', 'Jiong ', '[?] ', 'Nie ', 'Bo ', 'Rang ', 'Yi ', 'Xian ', 'Yu ', 'Ju ', 'Lian ', 'Lian ', 'Yin ', 'Qiang ', 'Ying ', 'Long ', 'Tong ', 'Wei ', 'Yue ', 'Ling ', 'Qu ', 'Yao ', 'Fan ', 'Mi ', 'Lan ', 'Kui ', 'Lan ', 'Ji ', 'Dang ', 'Katsura ', 'Lei ', 'Lei ', 'Hua ', 'Feng ', 'Zhi ', 'Wei ', 'Kui ', 'Zhan ', 'Huai ', 'Li ', 'Ji ', 'Mi ', 'Lei ', 'Huai ', 'Luo ', 'Ji ', 'Kui ', 'Lu ', 'Jian ', 'San ', '[?] ', 'Lei ', 'Quan ', 'Xiao ', 'Yi ', 'Luan ', 'Men ', 'Bie ', 'Hu ', 'Hu ', 'Lu ', 'Nue ', 'Lu ', 'Si ', 'Xiao ', 'Qian ', 'Chu ', 'Hu ', 'Xu ', 'Cuo ', 'Fu ', 'Xu ', 'Xu ', 'Lu ', 'Hu ', 'Yu ', 'Hao ', 'Jiao ', 'Ju ', 'Guo ', 'Bao ', 'Yan ', 'Zhan ', 'Zhan ', 'Kui ', 'Ban ', 'Xi ', 'Shu ', 'Chong ', 'Qiu ', 'Diao ', 'Ji ', 'Qiu ', 'Cheng ', 'Shi ', '[?] ', 'Di ', 'Zhe ', 'She ', 'Yu ', 'Gan ', 'Zi ', 'Hong ', 'Hui ', 'Meng ', 'Ge ', 'Sui ', 'Xia ', 'Chai ', 'Shi ', 'Yi ', 'Ma ', 'Xiang ', 'Fang ', 'E ', 'Pa ', 'Chi ', 'Qian ', 'Wen ', 'Wen ', 'Rui ', 'Bang ', 'Bi ', 'Yue ', 'Yue ', 'Jun ', 'Qi ', 'Ran ', 'Yin ', 'Qi ', 'Tian ', 'Yuan ', 'Jue ', 'Hui ', 'Qin ', 'Qi ', 'Zhong ', 'Ya ', 'Ci ', 'Mu ', 'Wang ', 'Fen ', 'Fen ', 'Hang ', 'Gong ', 'Zao ', 'Fu ', 'Ran ', 'Jie ', 'Fu ', 'Chi ', 'Dou ', 'Piao ', 'Xian ', 'Ni ', 'Te ', 'Qiu ', 'You ', 'Zha ', 'Ping ', 'Chi ', 'You ', 'He ', 'Han ', 'Ju ', 'Li ', 'Fu ', 'Ran ', 'Zha ', 'Gou ', 'Pi ', 'Bo ', 'Xian ', 'Zhu ', 'Diao ', 'Bie ', 'Bing ', 'Gu ', 'Ran ', 'Qu ', 'She ', 'Tie ', 'Ling ', 'Gu ', 'Dan ', 'Gu ', 'Ying ', 'Li ', 'Cheng ', 'Qu ', 'Mou ', 'Ge ', 'Ci ', 'Hui ', 'Hui ', 'Mang ', 'Fu ', 'Yang ', 'Wa ', 'Lie ', 'Zhu ', 'Yi ', 'Xian ', 'Kuo ', 'Jiao ', 'Li ', 'Yi ', 'Ping ', 'Ji ', 'Ha ', 'She ', 'Yi ', 'Wang ', 'Mo ', 'Qiong ', 'Qie ', 'Gui ', 'Gong ', 'Zhi ', 'Man ', 'Ebi ', 'Zhi ', 'Jia ', 'Rao ', 'Si ', 'Qi ', 'Xing ', 'Lie ', 'Qiu ', 'Shao ', 'Yong ', 'Jia ', 'Shui ', 'Che ', 'Bai ', 'E ', 'Han '];
<?php return ['Shu ', 'Xuan ', 'Feng ', 'Shen ', 'Zhen ', 'Fu ', 'Xian ', 'Zhe ', 'Wu ', 'Fu ', 'Li ', 'Lang ', 'Bi ', 'Chu ', 'Yuan ', 'You ', 'Jie ', 'Dan ', 'Yan ', 'Ting ', 'Dian ', 'Shui ', 'Hui ', 'Gua ', 'Zhi ', 'Song ', 'Fei ', 'Ju ', 'Mi ', 'Qi ', 'Qi ', 'Yu ', 'Jun ', 'Zha ', 'Meng ', 'Qiang ', 'Si ', 'Xi ', 'Lun ', 'Li ', 'Die ', 'Tiao ', 'Tao ', 'Kun ', 'Gan ', 'Han ', 'Yu ', 'Bang ', 'Fei ', 'Pi ', 'Wei ', 'Dun ', 'Yi ', 'Yuan ', 'Su ', 'Quan ', 'Qian ', 'Rui ', 'Ni ', 'Qing ', 'Wei ', 'Liang ', 'Guo ', 'Wan ', 'Dong ', 'E ', 'Ban ', 'Di ', 'Wang ', 'Can ', 'Yang ', 'Ying ', 'Guo ', 'Chan ', '[?] ', 'La ', 'Ke ', 'Ji ', 'He ', 'Ting ', 'Mai ', 'Xu ', 'Mian ', 'Yu ', 'Jie ', 'Shi ', 'Xuan ', 'Huang ', 'Yan ', 'Bian ', 'Rou ', 'Wei ', 'Fu ', 'Yuan ', 'Mei ', 'Wei ', 'Fu ', 'Ruan ', 'Xie ', 'You ', 'Qiu ', 'Mao ', 'Xia ', 'Ying ', 'Shi ', 'Chong ', 'Tang ', 'Zhu ', 'Zong ', 'Ti ', 'Fu ', 'Yuan ', 'Hui ', 'Meng ', 'La ', 'Du ', 'Hu ', 'Qiu ', 'Die ', 'Li ', 'Gua ', 'Yun ', 'Ju ', 'Nan ', 'Lou ', 'Qun ', 'Rong ', 'Ying ', 'Jiang ', '[?] ', 'Lang ', 'Pang ', 'Si ', 'Xi ', 'Ci ', 'Xi ', 'Yuan ', 'Weng ', 'Lian ', 'Sou ', 'Ban ', 'Rong ', 'Rong ', 'Ji ', 'Wu ', 'Qiu ', 'Han ', 'Qin ', 'Yi ', 'Bi ', 'Hua ', 'Tang ', 'Yi ', 'Du ', 'Nai ', 'He ', 'Hu ', 'Hui ', 'Ma ', 'Ming ', 'Yi ', 'Wen ', 'Ying ', 'Teng ', 'Yu ', 'Cang ', 'So ', 'Ebi ', 'Man ', '[?] ', 'Shang ', 'Zhe ', 'Cao ', 'Chi ', 'Di ', 'Ao ', 'Lu ', 'Wei ', 'Zhi ', 'Tang ', 'Chen ', 'Piao ', 'Qu ', 'Pi ', 'Yu ', 'Jian ', 'Luo ', 'Lou ', 'Qin ', 'Zhong ', 'Yin ', 'Jiang ', 'Shuai ', 'Wen ', 'Jiao ', 'Wan ', 'Zhi ', 'Zhe ', 'Ma ', 'Ma ', 'Guo ', 'Liu ', 'Mao ', 'Xi ', 'Cong ', 'Li ', 'Man ', 'Xiao ', 'Kamakiri ', 'Zhang ', 'Mang ', 'Xiang ', 'Mo ', 'Zui ', 'Si ', 'Qiu ', 'Te ', 'Zhi ', 'Peng ', 'Peng ', 'Jiao ', 'Qu ', 'Bie ', 'Liao ', 'Pan ', 'Gui ', 'Xi ', 'Ji ', 'Zhuan ', 'Huang ', 'Fei ', 'Lao ', 'Jue ', 'Jue ', 'Hui ', 'Yin ', 'Chan ', 'Jiao ', 'Shan ', 'Rao ', 'Xiao ', 'Mou ', 'Chong ', 'Xun ', 'Si ', '[?] ', 'Cheng ', 'Dang ', 'Li ', 'Xie ', 'Shan ', 'Yi ', 'Jing ', 'Da ', 'Chan ', 'Qi '];
<?php return ['Ci ', 'Xiang ', 'She ', 'Luo ', 'Qin ', 'Ying ', 'Chai ', 'Li ', 'Ze ', 'Xuan ', 'Lian ', 'Zhu ', 'Ze ', 'Xie ', 'Mang ', 'Xie ', 'Qi ', 'Rong ', 'Jian ', 'Meng ', 'Hao ', 'Ruan ', 'Huo ', 'Zhuo ', 'Jie ', 'Bin ', 'He ', 'Mie ', 'Fan ', 'Lei ', 'Jie ', 'La ', 'Mi ', 'Li ', 'Chun ', 'Li ', 'Qiu ', 'Nie ', 'Lu ', 'Du ', 'Xiao ', 'Zhu ', 'Long ', 'Li ', 'Long ', 'Feng ', 'Ye ', 'Beng ', 'Shang ', 'Gu ', 'Juan ', 'Ying ', '[?] ', 'Xi ', 'Can ', 'Qu ', 'Quan ', 'Du ', 'Can ', 'Man ', 'Jue ', 'Jie ', 'Zhu ', 'Zha ', 'Xie ', 'Huang ', 'Niu ', 'Pei ', 'Nu ', 'Xin ', 'Zhong ', 'Mo ', 'Er ', 'Ke ', 'Mie ', 'Xi ', 'Xing ', 'Yan ', 'Kan ', 'Yuan ', '[?] ', 'Ling ', 'Xuan ', 'Shu ', 'Xian ', 'Tong ', 'Long ', 'Jie ', 'Xian ', 'Ya ', 'Hu ', 'Wei ', 'Dao ', 'Chong ', 'Wei ', 'Dao ', 'Zhun ', 'Heng ', 'Qu ', 'Yi ', 'Yi ', 'Bu ', 'Gan ', 'Yu ', 'Biao ', 'Cha ', 'Yi ', 'Shan ', 'Chen ', 'Fu ', 'Gun ', 'Fen ', 'Shuai ', 'Jie ', 'Na ', 'Zhong ', 'Dan ', 'Ri ', 'Zhong ', 'Zhong ', 'Xie ', 'Qi ', 'Xie ', 'Ran ', 'Zhi ', 'Ren ', 'Qin ', 'Jin ', 'Jun ', 'Yuan ', 'Mei ', 'Chai ', 'Ao ', 'Niao ', 'Hui ', 'Ran ', 'Jia ', 'Tuo ', 'Ling ', 'Dai ', 'Bao ', 'Pao ', 'Yao ', 'Zuo ', 'Bi ', 'Shao ', 'Tan ', 'Ju ', 'He ', 'Shu ', 'Xiu ', 'Zhen ', 'Yi ', 'Pa ', 'Bo ', 'Di ', 'Wa ', 'Fu ', 'Gun ', 'Zhi ', 'Zhi ', 'Ran ', 'Pan ', 'Yi ', 'Mao ', 'Tuo ', 'Na ', 'Kou ', 'Xian ', 'Chan ', 'Qu ', 'Bei ', 'Gun ', 'Xi ', 'Ne ', 'Bo ', 'Horo ', 'Fu ', 'Yi ', 'Chi ', 'Ku ', 'Ren ', 'Jiang ', 'Jia ', 'Cun ', 'Mo ', 'Jie ', 'Er ', 'Luo ', 'Ru ', 'Zhu ', 'Gui ', 'Yin ', 'Cai ', 'Lie ', 'Kamishimo ', 'Yuki ', 'Zhuang ', 'Dang ', '[?] ', 'Kun ', 'Ken ', 'Niao ', 'Shu ', 'Jia ', 'Kun ', 'Cheng ', 'Li ', 'Juan ', 'Shen ', 'Pou ', 'Ge ', 'Yi ', 'Yu ', 'Zhen ', 'Liu ', 'Qiu ', 'Qun ', 'Ji ', 'Yi ', 'Bu ', 'Zhuang ', 'Shui ', 'Sha ', 'Qun ', 'Li ', 'Lian ', 'Lian ', 'Ku ', 'Jian ', 'Fou ', 'Chan ', 'Bi ', 'Gun ', 'Tao ', 'Yuan ', 'Ling ', 'Chi ', 'Chang ', 'Chou ', 'Duo ', 'Biao ', 'Liang ', 'Chang ', 'Pei ', 'Pei ', 'Fei ', 'Yuan ', 'Luo ', 'Guo ', 'Yan ', 'Du ', 'Xi ', 'Zhi ', 'Ju ', 'Qi '];
<?php return ['Ji ', 'Zhi ', 'Gua ', 'Ken ', 'Che ', 'Ti ', 'Ti ', 'Fu ', 'Chong ', 'Xie ', 'Bian ', 'Die ', 'Kun ', 'Duan ', 'Xiu ', 'Xiu ', 'He ', 'Yuan ', 'Bao ', 'Bao ', 'Fu ', 'Yu ', 'Tuan ', 'Yan ', 'Hui ', 'Bei ', 'Chu ', 'Lu ', 'Ena ', 'Hitoe ', 'Yun ', 'Da ', 'Gou ', 'Da ', 'Huai ', 'Rong ', 'Yuan ', 'Ru ', 'Nai ', 'Jiong ', 'Suo ', 'Ban ', 'Tun ', 'Chi ', 'Sang ', 'Niao ', 'Ying ', 'Jie ', 'Qian ', 'Huai ', 'Ku ', 'Lian ', 'Bao ', 'Li ', 'Zhe ', 'Shi ', 'Lu ', 'Yi ', 'Die ', 'Xie ', 'Xian ', 'Wei ', 'Biao ', 'Cao ', 'Ji ', 'Jiang ', 'Sen ', 'Bao ', 'Xiang ', 'Chihaya ', 'Pu ', 'Jian ', 'Zhuan ', 'Jian ', 'Zui ', 'Ji ', 'Dan ', 'Za ', 'Fan ', 'Bo ', 'Xiang ', 'Xin ', 'Bie ', 'Rao ', 'Man ', 'Lan ', 'Ao ', 'Duo ', 'Gui ', 'Cao ', 'Sui ', 'Nong ', 'Chan ', 'Lian ', 'Bi ', 'Jin ', 'Dang ', 'Shu ', 'Tan ', 'Bi ', 'Lan ', 'Pu ', 'Ru ', 'Zhi ', '[?] ', 'Shu ', 'Wa ', 'Shi ', 'Bai ', 'Xie ', 'Bo ', 'Chen ', 'Lai ', 'Long ', 'Xi ', 'Xian ', 'Lan ', 'Zhe ', 'Dai ', 'Tasuki ', 'Zan ', 'Shi ', 'Jian ', 'Pan ', 'Yi ', 'Ran ', 'Ya ', 'Xi ', 'Xi ', 'Yao ', 'Feng ', 'Tan ', '[?] ', 'Biao ', 'Fu ', 'Ba ', 'He ', 'Ji ', 'Ji ', 'Jian ', 'Guan ', 'Bian ', 'Yan ', 'Gui ', 'Jue ', 'Pian ', 'Mao ', 'Mi ', 'Mi ', 'Mie ', 'Shi ', 'Si ', 'Zhan ', 'Luo ', 'Jue ', 'Mi ', 'Tiao ', 'Lian ', 'Yao ', 'Zhi ', 'Jun ', 'Xi ', 'Shan ', 'Wei ', 'Xi ', 'Tian ', 'Yu ', 'Lan ', 'E ', 'Du ', 'Qin ', 'Pang ', 'Ji ', 'Ming ', 'Ying ', 'Gou ', 'Qu ', 'Zhan ', 'Jin ', 'Guan ', 'Deng ', 'Jian ', 'Luo ', 'Qu ', 'Jian ', 'Wei ', 'Jue ', 'Qu ', 'Luo ', 'Lan ', 'Shen ', 'Di ', 'Guan ', 'Jian ', 'Guan ', 'Yan ', 'Gui ', 'Mi ', 'Shi ', 'Zhan ', 'Lan ', 'Jue ', 'Ji ', 'Xi ', 'Di ', 'Tian ', 'Yu ', 'Gou ', 'Jin ', 'Qu ', 'Jiao ', 'Jiu ', 'Jin ', 'Cu ', 'Jue ', 'Zhi ', 'Chao ', 'Ji ', 'Gu ', 'Dan ', 'Zui ', 'Di ', 'Shang ', 'Hua ', 'Quan ', 'Ge ', 'Chi ', 'Jie ', 'Gui ', 'Gong ', 'Hong ', 'Jie ', 'Hun ', 'Qiu ', 'Xing ', 'Su ', 'Ni ', 'Ji ', 'Lu ', 'Zhi ', 'Zha ', 'Bi ', 'Xing ', 'Hu ', 'Shang ', 'Gong ', 'Zhi ', 'Xue ', 'Chu ', 'Xi ', 'Yi ', 'Lu ', 'Jue ', 'Xi ', 'Yan ', 'Xi '];
<?php return ['Yan ', 'Yan ', 'Ding ', 'Fu ', 'Qiu ', 'Qiu ', 'Jiao ', 'Hong ', 'Ji ', 'Fan ', 'Xun ', 'Diao ', 'Hong ', 'Cha ', 'Tao ', 'Xu ', 'Jie ', 'Yi ', 'Ren ', 'Xun ', 'Yin ', 'Shan ', 'Qi ', 'Tuo ', 'Ji ', 'Xun ', 'Yin ', 'E ', 'Fen ', 'Ya ', 'Yao ', 'Song ', 'Shen ', 'Yin ', 'Xin ', 'Jue ', 'Xiao ', 'Ne ', 'Chen ', 'You ', 'Zhi ', 'Xiong ', 'Fang ', 'Xin ', 'Chao ', 'She ', 'Xian ', 'Sha ', 'Tun ', 'Xu ', 'Yi ', 'Yi ', 'Su ', 'Chi ', 'He ', 'Shen ', 'He ', 'Xu ', 'Zhen ', 'Zhu ', 'Zheng ', 'Gou ', 'Zi ', 'Zi ', 'Zhan ', 'Gu ', 'Fu ', 'Quan ', 'Die ', 'Ling ', 'Di ', 'Yang ', 'Li ', 'Nao ', 'Pan ', 'Zhou ', 'Gan ', 'Yi ', 'Ju ', 'Ao ', 'Zha ', 'Tuo ', 'Yi ', 'Qu ', 'Zhao ', 'Ping ', 'Bi ', 'Xiong ', 'Qu ', 'Ba ', 'Da ', 'Zu ', 'Tao ', 'Zhu ', 'Ci ', 'Zhe ', 'Yong ', 'Xu ', 'Xun ', 'Yi ', 'Huang ', 'He ', 'Shi ', 'Cha ', 'Jiao ', 'Shi ', 'Hen ', 'Cha ', 'Gou ', 'Gui ', 'Quan ', 'Hui ', 'Jie ', 'Hua ', 'Gai ', 'Xiang ', 'Wei ', 'Shen ', 'Chou ', 'Tong ', 'Mi ', 'Zhan ', 'Ming ', 'E ', 'Hui ', 'Yan ', 'Xiong ', 'Gua ', 'Er ', 'Beng ', 'Tiao ', 'Chi ', 'Lei ', 'Zhu ', 'Kuang ', 'Kua ', 'Wu ', 'Yu ', 'Teng ', 'Ji ', 'Zhi ', 'Ren ', 'Su ', 'Lang ', 'E ', 'Kuang ', 'E ', 'Shi ', 'Ting ', 'Dan ', 'Bo ', 'Chan ', 'You ', 'Heng ', 'Qiao ', 'Qin ', 'Shua ', 'An ', 'Yu ', 'Xiao ', 'Cheng ', 'Jie ', 'Xian ', 'Wu ', 'Wu ', 'Gao ', 'Song ', 'Pu ', 'Hui ', 'Jing ', 'Shuo ', 'Zhen ', 'Shuo ', 'Du ', 'Yasashi ', 'Chang ', 'Shui ', 'Jie ', 'Ke ', 'Qu ', 'Cong ', 'Xiao ', 'Sui ', 'Wang ', 'Xuan ', 'Fei ', 'Chi ', 'Ta ', 'Yi ', 'Na ', 'Yin ', 'Diao ', 'Pi ', 'Chuo ', 'Chan ', 'Chen ', 'Zhun ', 'Ji ', 'Qi ', 'Tan ', 'Zhui ', 'Wei ', 'Ju ', 'Qing ', 'Jian ', 'Zheng ', 'Ze ', 'Zou ', 'Qian ', 'Zhuo ', 'Liang ', 'Jian ', 'Zhu ', 'Hao ', 'Lun ', 'Shen ', 'Biao ', 'Huai ', 'Pian ', 'Yu ', 'Die ', 'Xu ', 'Pian ', 'Shi ', 'Xuan ', 'Shi ', 'Hun ', 'Hua ', 'E ', 'Zhong ', 'Di ', 'Xie ', 'Fu ', 'Pu ', 'Ting ', 'Jian ', 'Qi ', 'Yu ', 'Zi ', 'Chuan ', 'Xi ', 'Hui ', 'Yin ', 'An ', 'Xian ', 'Nan ', 'Chen ', 'Feng ', 'Zhu ', 'Yang ', 'Yan ', 'Heng ', 'Xuan ', 'Ge ', 'Nuo ', 'Qi '];
<?php return ['Mou ', 'Ye ', 'Wei ', '[?] ', 'Teng ', 'Zou ', 'Shan ', 'Jian ', 'Bo ', 'Ku ', 'Huang ', 'Huo ', 'Ge ', 'Ying ', 'Mi ', 'Xiao ', 'Mi ', 'Xi ', 'Qiang ', 'Chen ', 'Nue ', 'Ti ', 'Su ', 'Bang ', 'Chi ', 'Qian ', 'Shi ', 'Jiang ', 'Yuan ', 'Xie ', 'Xue ', 'Tao ', 'Yao ', 'Yao ', '[?] ', 'Yu ', 'Biao ', 'Cong ', 'Qing ', 'Li ', 'Mo ', 'Mo ', 'Shang ', 'Zhe ', 'Miu ', 'Jian ', 'Ze ', 'Jie ', 'Lian ', 'Lou ', 'Can ', 'Ou ', 'Guan ', 'Xi ', 'Zhuo ', 'Ao ', 'Ao ', 'Jin ', 'Zhe ', 'Yi ', 'Hu ', 'Jiang ', 'Man ', 'Chao ', 'Han ', 'Hua ', 'Chan ', 'Xu ', 'Zeng ', 'Se ', 'Xi ', 'She ', 'Dui ', 'Zheng ', 'Nao ', 'Lan ', 'E ', 'Ying ', 'Jue ', 'Ji ', 'Zun ', 'Jiao ', 'Bo ', 'Hui ', 'Zhuan ', 'Mu ', 'Zen ', 'Zha ', 'Shi ', 'Qiao ', 'Tan ', 'Zen ', 'Pu ', 'Sheng ', 'Xuan ', 'Zao ', 'Tan ', 'Dang ', 'Sui ', 'Qian ', 'Ji ', 'Jiao ', 'Jing ', 'Lian ', 'Nou ', 'Yi ', 'Ai ', 'Zhan ', 'Pi ', 'Hui ', 'Hua ', 'Yi ', 'Yi ', 'Shan ', 'Rang ', 'Nou ', 'Qian ', 'Zhui ', 'Ta ', 'Hu ', 'Zhou ', 'Hao ', 'Ye ', 'Ying ', 'Jian ', 'Yu ', 'Jian ', 'Hui ', 'Du ', 'Zhe ', 'Xuan ', 'Zan ', 'Lei ', 'Shen ', 'Wei ', 'Chan ', 'Li ', 'Yi ', 'Bian ', 'Zhe ', 'Yan ', 'E ', 'Chou ', 'Wei ', 'Chou ', 'Yao ', 'Chan ', 'Rang ', 'Yin ', 'Lan ', 'Chen ', 'Huo ', 'Zhe ', 'Huan ', 'Zan ', 'Yi ', 'Dang ', 'Zhan ', 'Yan ', 'Du ', 'Yan ', 'Ji ', 'Ding ', 'Fu ', 'Ren ', 'Ji ', 'Jie ', 'Hong ', 'Tao ', 'Rang ', 'Shan ', 'Qi ', 'Tuo ', 'Xun ', 'Yi ', 'Xun ', 'Ji ', 'Ren ', 'Jiang ', 'Hui ', 'Ou ', 'Ju ', 'Ya ', 'Ne ', 'Xu ', 'E ', 'Lun ', 'Xiong ', 'Song ', 'Feng ', 'She ', 'Fang ', 'Jue ', 'Zheng ', 'Gu ', 'He ', 'Ping ', 'Zu ', 'Shi ', 'Xiong ', 'Zha ', 'Su ', 'Zhen ', 'Di ', 'Zou ', 'Ci ', 'Qu ', 'Zhao ', 'Bi ', 'Yi ', 'Yi ', 'Kuang ', 'Lei ', 'Shi ', 'Gua ', 'Shi ', 'Jie ', 'Hui ', 'Cheng ', 'Zhu ', 'Shen ', 'Hua ', 'Dan ', 'Gou ', 'Quan ', 'Gui ', 'Xun ', 'Yi ', 'Zheng ', 'Gai ', 'Xiang ', 'Cha ', 'Hun ', 'Xu ', 'Zhou ', 'Jie ', 'Wu ', 'Yu ', 'Qiao ', 'Wu ', 'Gao ', 'You ', 'Hui ', 'Kuang ', 'Shuo ', 'Song ', 'Ai ', 'Qing ', 'Zhu ', 'Zou ', 'Nuo ', 'Du ', 'Zhuo ', 'Fei ', 'Ke ', 'Wei '];
<?php return ['Yu ', 'Shui ', 'Shen ', 'Diao ', 'Chan ', 'Liang ', 'Zhun ', 'Sui ', 'Tan ', 'Shen ', 'Yi ', 'Mou ', 'Chen ', 'Die ', 'Huang ', 'Jian ', 'Xie ', 'Nue ', 'Ye ', 'Wei ', 'E ', 'Yu ', 'Xuan ', 'Chan ', 'Zi ', 'An ', 'Yan ', 'Di ', 'Mi ', 'Pian ', 'Xu ', 'Mo ', 'Dang ', 'Su ', 'Xie ', 'Yao ', 'Bang ', 'Shi ', 'Qian ', 'Mi ', 'Jin ', 'Man ', 'Zhe ', 'Jian ', 'Miu ', 'Tan ', 'Zen ', 'Qiao ', 'Lan ', 'Pu ', 'Jue ', 'Yan ', 'Qian ', 'Zhan ', 'Chen ', 'Gu ', 'Qian ', 'Hong ', 'Xia ', 'Jue ', 'Hong ', 'Han ', 'Hong ', 'Xi ', 'Xi ', 'Huo ', 'Liao ', 'Han ', 'Du ', 'Long ', 'Dou ', 'Jiang ', 'Qi ', 'Shi ', 'Li ', 'Deng ', 'Wan ', 'Bi ', 'Shu ', 'Xian ', 'Feng ', 'Zhi ', 'Zhi ', 'Yan ', 'Yan ', 'Shi ', 'Chu ', 'Hui ', 'Tun ', 'Yi ', 'Tun ', 'Yi ', 'Jian ', 'Ba ', 'Hou ', 'E ', 'Cu ', 'Xiang ', 'Huan ', 'Jian ', 'Ken ', 'Gai ', 'Qu ', 'Fu ', 'Xi ', 'Bin ', 'Hao ', 'Yu ', 'Zhu ', 'Jia ', '[?] ', 'Xi ', 'Bo ', 'Wen ', 'Huan ', 'Bin ', 'Di ', 'Zong ', 'Fen ', 'Yi ', 'Zhi ', 'Bao ', 'Chai ', 'Han ', 'Pi ', 'Na ', 'Pi ', 'Gou ', 'Na ', 'You ', 'Diao ', 'Mo ', 'Si ', 'Xiu ', 'Huan ', 'Kun ', 'He ', 'He ', 'Mo ', 'Han ', 'Mao ', 'Li ', 'Ni ', 'Bi ', 'Yu ', 'Jia ', 'Tuan ', 'Mao ', 'Pi ', 'Xi ', 'E ', 'Ju ', 'Mo ', 'Chu ', 'Tan ', 'Huan ', 'Jue ', 'Bei ', 'Zhen ', 'Yuan ', 'Fu ', 'Cai ', 'Gong ', 'Te ', 'Yi ', 'Hang ', 'Wan ', 'Pin ', 'Huo ', 'Fan ', 'Tan ', 'Guan ', 'Ze ', 'Zhi ', 'Er ', 'Zhu ', 'Shi ', 'Bi ', 'Zi ', 'Er ', 'Gui ', 'Pian ', 'Bian ', 'Mai ', 'Dai ', 'Sheng ', 'Kuang ', 'Fei ', 'Tie ', 'Yi ', 'Chi ', 'Mao ', 'He ', 'Bi ', 'Lu ', 'Ren ', 'Hui ', 'Gai ', 'Pian ', 'Zi ', 'Jia ', 'Xu ', 'Zei ', 'Jiao ', 'Gai ', 'Zang ', 'Jian ', 'Ying ', 'Xun ', 'Zhen ', 'She ', 'Bin ', 'Bin ', 'Qiu ', 'She ', 'Chuan ', 'Zang ', 'Zhou ', 'Lai ', 'Zan ', 'Si ', 'Chen ', 'Shang ', 'Tian ', 'Pei ', 'Geng ', 'Xian ', 'Mai ', 'Jian ', 'Sui ', 'Fu ', 'Tan ', 'Cong ', 'Cong ', 'Zhi ', 'Ji ', 'Zhang ', 'Du ', 'Jin ', 'Xiong ', 'Shun ', 'Yun ', 'Bao ', 'Zai ', 'Lai ', 'Feng ', 'Cang ', 'Ji ', 'Sheng ', 'Ai ', 'Zhuan ', 'Fu ', 'Gou ', 'Sai ', 'Ze ', 'Liao '];
<?php return ['Wei ', 'Bai ', 'Chen ', 'Zhuan ', 'Zhi ', 'Zhui ', 'Biao ', 'Yun ', 'Zeng ', 'Tan ', 'Zan ', 'Yan ', '[?] ', 'Shan ', 'Wan ', 'Ying ', 'Jin ', 'Gan ', 'Xian ', 'Zang ', 'Bi ', 'Du ', 'Shu ', 'Yan ', '[?] ', 'Xuan ', 'Long ', 'Gan ', 'Zang ', 'Bei ', 'Zhen ', 'Fu ', 'Yuan ', 'Gong ', 'Cai ', 'Ze ', 'Xian ', 'Bai ', 'Zhang ', 'Huo ', 'Zhi ', 'Fan ', 'Tan ', 'Pin ', 'Bian ', 'Gou ', 'Zhu ', 'Guan ', 'Er ', 'Jian ', 'Bi ', 'Shi ', 'Tie ', 'Gui ', 'Kuang ', 'Dai ', 'Mao ', 'Fei ', 'He ', 'Yi ', 'Zei ', 'Zhi ', 'Jia ', 'Hui ', 'Zi ', 'Ren ', 'Lu ', 'Zang ', 'Zi ', 'Gai ', 'Jin ', 'Qiu ', 'Zhen ', 'Lai ', 'She ', 'Fu ', 'Du ', 'Ji ', 'Shu ', 'Shang ', 'Si ', 'Bi ', 'Zhou ', 'Geng ', 'Pei ', 'Tan ', 'Lai ', 'Feng ', 'Zhui ', 'Fu ', 'Zhuan ', 'Sai ', 'Ze ', 'Yan ', 'Zan ', 'Yun ', 'Zeng ', 'Shan ', 'Ying ', 'Gan ', 'Chi ', 'Xi ', 'She ', 'Nan ', 'Xiong ', 'Xi ', 'Cheng ', 'He ', 'Cheng ', 'Zhe ', 'Xia ', 'Tang ', 'Zou ', 'Zou ', 'Li ', 'Jiu ', 'Fu ', 'Zhao ', 'Gan ', 'Qi ', 'Shan ', 'Qiong ', 'Qin ', 'Xian ', 'Ci ', 'Jue ', 'Qin ', 'Chi ', 'Ci ', 'Chen ', 'Chen ', 'Die ', 'Ju ', 'Chao ', 'Di ', 'Se ', 'Zhan ', 'Zhu ', 'Yue ', 'Qu ', 'Jie ', 'Chi ', 'Chu ', 'Gua ', 'Xue ', 'Ci ', 'Tiao ', 'Duo ', 'Lie ', 'Gan ', 'Suo ', 'Cu ', 'Xi ', 'Zhao ', 'Su ', 'Yin ', 'Ju ', 'Jian ', 'Que ', 'Tang ', 'Chuo ', 'Cui ', 'Lu ', 'Qu ', 'Dang ', 'Qiu ', 'Zi ', 'Ti ', 'Qu ', 'Chi ', 'Huang ', 'Qiao ', 'Qiao ', 'Yao ', 'Zao ', 'Ti ', '[?] ', 'Zan ', 'Zan ', 'Zu ', 'Pa ', 'Bao ', 'Ku ', 'Ke ', 'Dun ', 'Jue ', 'Fu ', 'Chen ', 'Jian ', 'Fang ', 'Zhi ', 'Sa ', 'Yue ', 'Pa ', 'Qi ', 'Yue ', 'Qiang ', 'Tuo ', 'Tai ', 'Yi ', 'Nian ', 'Ling ', 'Mei ', 'Ba ', 'Die ', 'Ku ', 'Tuo ', 'Jia ', 'Ci ', 'Pao ', 'Qia ', 'Zhu ', 'Ju ', 'Die ', 'Zhi ', 'Fu ', 'Pan ', 'Ju ', 'Shan ', 'Bo ', 'Ni ', 'Ju ', 'Li ', 'Gen ', 'Yi ', 'Ji ', 'Dai ', 'Xian ', 'Jiao ', 'Duo ', 'Zhu ', 'Zhuan ', 'Kua ', 'Zhuai ', 'Gui ', 'Qiong ', 'Kui ', 'Xiang ', 'Chi ', 'Lu ', 'Beng ', 'Zhi ', 'Jia ', 'Tiao ', 'Cai ', 'Jian ', 'Ta ', 'Qiao ', 'Bi ', 'Xian ', 'Duo ', 'Ji ', 'Ju ', 'Ji ', 'Shu ', 'Tu '];
<?php return ['Chu ', 'Jing ', 'Nie ', 'Xiao ', 'Bo ', 'Chi ', 'Qun ', 'Mou ', 'Shu ', 'Lang ', 'Yong ', 'Jiao ', 'Chou ', 'Qiao ', '[?] ', 'Ta ', 'Jian ', 'Qi ', 'Wo ', 'Wei ', 'Zhuo ', 'Jie ', 'Ji ', 'Nie ', 'Ju ', 'Ju ', 'Lun ', 'Lu ', 'Leng ', 'Huai ', 'Ju ', 'Chi ', 'Wan ', 'Quan ', 'Ti ', 'Bo ', 'Zu ', 'Qie ', 'Ji ', 'Cu ', 'Zong ', 'Cai ', 'Zong ', 'Peng ', 'Zhi ', 'Zheng ', 'Dian ', 'Zhi ', 'Yu ', 'Duo ', 'Dun ', 'Chun ', 'Yong ', 'Zhong ', 'Di ', 'Zhe ', 'Chen ', 'Chuai ', 'Jian ', 'Gua ', 'Tang ', 'Ju ', 'Fu ', 'Zu ', 'Die ', 'Pian ', 'Rou ', 'Nuo ', 'Ti ', 'Cha ', 'Tui ', 'Jian ', 'Dao ', 'Cuo ', 'Xi ', 'Ta ', 'Qiang ', 'Zhan ', 'Dian ', 'Ti ', 'Ji ', 'Nie ', 'Man ', 'Liu ', 'Zhan ', 'Bi ', 'Chong ', 'Lu ', 'Liao ', 'Cu ', 'Tang ', 'Dai ', 'Suo ', 'Xi ', 'Kui ', 'Ji ', 'Zhi ', 'Qiang ', 'Di ', 'Man ', 'Zong ', 'Lian ', 'Beng ', 'Zao ', 'Nian ', 'Bie ', 'Tui ', 'Ju ', 'Deng ', 'Ceng ', 'Xian ', 'Fan ', 'Chu ', 'Zhong ', 'Dun ', 'Bo ', 'Cu ', 'Zu ', 'Jue ', 'Jue ', 'Lin ', 'Ta ', 'Qiao ', 'Qiao ', 'Pu ', 'Liao ', 'Dun ', 'Cuan ', 'Kuang ', 'Zao ', 'Ta ', 'Bi ', 'Bi ', 'Zhu ', 'Ju ', 'Chu ', 'Qiao ', 'Dun ', 'Chou ', 'Ji ', 'Wu ', 'Yue ', 'Nian ', 'Lin ', 'Lie ', 'Zhi ', 'Li ', 'Zhi ', 'Chan ', 'Chu ', 'Duan ', 'Wei ', 'Long ', 'Lin ', 'Xian ', 'Wei ', 'Zuan ', 'Lan ', 'Xie ', 'Rang ', 'Xie ', 'Nie ', 'Ta ', 'Qu ', 'Jie ', 'Cuan ', 'Zuan ', 'Xi ', 'Kui ', 'Jue ', 'Lin ', 'Shen ', 'Gong ', 'Dan ', 'Segare ', 'Qu ', 'Ti ', 'Duo ', 'Duo ', 'Gong ', 'Lang ', 'Nerau ', 'Luo ', 'Ai ', 'Ji ', 'Ju ', 'Tang ', 'Utsuke ', '[?] ', 'Yan ', 'Shitsuke ', 'Kang ', 'Qu ', 'Lou ', 'Lao ', 'Tuo ', 'Zhi ', 'Yagate ', 'Ti ', 'Dao ', 'Yagate ', 'Yu ', 'Che ', 'Ya ', 'Gui ', 'Jun ', 'Wei ', 'Yue ', 'Xin ', 'Di ', 'Xuan ', 'Fan ', 'Ren ', 'Shan ', 'Qiang ', 'Shu ', 'Tun ', 'Chen ', 'Dai ', 'E ', 'Na ', 'Qi ', 'Mao ', 'Ruan ', 'Ren ', 'Fan ', 'Zhuan ', 'Hong ', 'Hu ', 'Qu ', 'Huang ', 'Di ', 'Ling ', 'Dai ', 'Ao ', 'Zhen ', 'Fan ', 'Kuang ', 'Ang ', 'Peng ', 'Bei ', 'Gu ', 'Ku ', 'Pao ', 'Zhu ', 'Rong ', 'E ', 'Ba ', 'Zhou ', 'Zhi ', 'Yao ', 'Ke ', 'Yi ', 'Qing ', 'Shi ', 'Ping '];
<?php return ['Er ', 'Qiong ', 'Ju ', 'Jiao ', 'Guang ', 'Lu ', 'Kai ', 'Quan ', 'Zhou ', 'Zai ', 'Zhi ', 'She ', 'Liang ', 'Yu ', 'Shao ', 'You ', 'Huan ', 'Yun ', 'Zhe ', 'Wan ', 'Fu ', 'Qing ', 'Zhou ', 'Ni ', 'Ling ', 'Zhe ', 'Zhan ', 'Liang ', 'Zi ', 'Hui ', 'Wang ', 'Chuo ', 'Guo ', 'Kan ', 'Yi ', 'Peng ', 'Qian ', 'Gun ', 'Nian ', 'Pian ', 'Guan ', 'Bei ', 'Lun ', 'Pai ', 'Liang ', 'Ruan ', 'Rou ', 'Ji ', 'Yang ', 'Xian ', 'Chuan ', 'Cou ', 'Qun ', 'Ge ', 'You ', 'Hong ', 'Shu ', 'Fu ', 'Zi ', 'Fu ', 'Wen ', 'Ben ', 'Zhan ', 'Yu ', 'Wen ', 'Tao ', 'Gu ', 'Zhen ', 'Xia ', 'Yuan ', 'Lu ', 'Jiu ', 'Chao ', 'Zhuan ', 'Wei ', 'Hun ', 'Sori ', 'Che ', 'Jiao ', 'Zhan ', 'Pu ', 'Lao ', 'Fen ', 'Fan ', 'Lin ', 'Ge ', 'Se ', 'Kan ', 'Huan ', 'Yi ', 'Ji ', 'Dui ', 'Er ', 'Yu ', 'Xian ', 'Hong ', 'Lei ', 'Pei ', 'Li ', 'Li ', 'Lu ', 'Lin ', 'Che ', 'Ya ', 'Gui ', 'Xuan ', 'Di ', 'Ren ', 'Zhuan ', 'E ', 'Lun ', 'Ruan ', 'Hong ', 'Ku ', 'Ke ', 'Lu ', 'Zhou ', 'Zhi ', 'Yi ', 'Hu ', 'Zhen ', 'Li ', 'Yao ', 'Qing ', 'Shi ', 'Zai ', 'Zhi ', 'Jiao ', 'Zhou ', 'Quan ', 'Lu ', 'Jiao ', 'Zhe ', 'Fu ', 'Liang ', 'Nian ', 'Bei ', 'Hui ', 'Gun ', 'Wang ', 'Liang ', 'Chuo ', 'Zi ', 'Cou ', 'Fu ', 'Ji ', 'Wen ', 'Shu ', 'Pei ', 'Yuan ', 'Xia ', 'Zhan ', 'Lu ', 'Che ', 'Lin ', 'Xin ', 'Gu ', 'Ci ', 'Ci ', 'Pi ', 'Zui ', 'Bian ', 'La ', 'La ', 'Ci ', 'Xue ', 'Ban ', 'Bian ', 'Bian ', 'Bian ', '[?] ', 'Bian ', 'Ban ', 'Ci ', 'Bian ', 'Bian ', 'Chen ', 'Ru ', 'Nong ', 'Nong ', 'Zhen ', 'Chuo ', 'Chuo ', 'Suberu ', 'Reng ', 'Bian ', 'Bian ', 'Sip ', 'Ip ', 'Liao ', 'Da ', 'Chan ', 'Gan ', 'Qian ', 'Yu ', 'Yu ', 'Qi ', 'Xun ', 'Yi ', 'Guo ', 'Mai ', 'Qi ', 'Za ', 'Wang ', 'Jia ', 'Zhun ', 'Ying ', 'Ti ', 'Yun ', 'Jin ', 'Hang ', 'Ya ', 'Fan ', 'Wu ', 'Da ', 'E ', 'Huan ', 'Zhe ', 'Totemo ', 'Jin ', 'Yuan ', 'Wei ', 'Lian ', 'Chi ', 'Che ', 'Ni ', 'Tiao ', 'Zhi ', 'Yi ', 'Jiong ', 'Jia ', 'Chen ', 'Dai ', 'Er ', 'Di ', 'Po ', 'Wang ', 'Die ', 'Ze ', 'Tao ', 'Shu ', 'Tuo ', 'Kep ', 'Jing ', 'Hui ', 'Tong ', 'You ', 'Mi ', 'Beng ', 'Ji ', 'Nai ', 'Yi ', 'Jie ', 'Zhui ', 'Lie ', 'Xun '];
<?php return ['Tui ', 'Song ', 'Gua ', 'Tao ', 'Pang ', 'Hou ', 'Ni ', 'Dun ', 'Jiong ', 'Xuan ', 'Xun ', 'Bu ', 'You ', 'Xiao ', 'Qiu ', 'Tou ', 'Zhu ', 'Qiu ', 'Di ', 'Di ', 'Tu ', 'Jing ', 'Ti ', 'Dou ', 'Yi ', 'Zhe ', 'Tong ', 'Guang ', 'Wu ', 'Shi ', 'Cheng ', 'Su ', 'Zao ', 'Qun ', 'Feng ', 'Lian ', 'Suo ', 'Hui ', 'Li ', 'Sako ', 'Lai ', 'Ben ', 'Cuo ', 'Jue ', 'Beng ', 'Huan ', 'Dai ', 'Lu ', 'You ', 'Zhou ', 'Jin ', 'Yu ', 'Chuo ', 'Kui ', 'Wei ', 'Ti ', 'Yi ', 'Da ', 'Yuan ', 'Luo ', 'Bi ', 'Nuo ', 'Yu ', 'Dang ', 'Sui ', 'Dun ', 'Sui ', 'Yan ', 'Chuan ', 'Chi ', 'Ti ', 'Yu ', 'Shi ', 'Zhen ', 'You ', 'Yun ', 'E ', 'Bian ', 'Guo ', 'E ', 'Xia ', 'Huang ', 'Qiu ', 'Dao ', 'Da ', 'Wei ', 'Appare ', 'Yi ', 'Gou ', 'Yao ', 'Chu ', 'Liu ', 'Xun ', 'Ta ', 'Di ', 'Chi ', 'Yuan ', 'Su ', 'Ta ', 'Qian ', '[?] ', 'Yao ', 'Guan ', 'Zhang ', 'Ao ', 'Shi ', 'Ce ', 'Chi ', 'Su ', 'Zao ', 'Zhe ', 'Dun ', 'Di ', 'Lou ', 'Chi ', 'Cuo ', 'Lin ', 'Zun ', 'Rao ', 'Qian ', 'Xuan ', 'Yu ', 'Yi ', 'Wu ', 'Liao ', 'Ju ', 'Shi ', 'Bi ', 'Yao ', 'Mai ', 'Xie ', 'Sui ', 'Huan ', 'Zhan ', 'Teng ', 'Er ', 'Miao ', 'Bian ', 'Bian ', 'La ', 'Li ', 'Yuan ', 'Yao ', 'Luo ', 'Li ', 'Yi ', 'Ting ', 'Deng ', 'Qi ', 'Yong ', 'Shan ', 'Han ', 'Yu ', 'Mang ', 'Ru ', 'Qiong ', '[?] ', 'Kuang ', 'Fu ', 'Kang ', 'Bin ', 'Fang ', 'Xing ', 'Na ', 'Xin ', 'Shen ', 'Bang ', 'Yuan ', 'Cun ', 'Huo ', 'Xie ', 'Bang ', 'Wu ', 'Ju ', 'You ', 'Han ', 'Tai ', 'Qiu ', 'Bi ', 'Pei ', 'Bing ', 'Shao ', 'Bei ', 'Wa ', 'Di ', 'Zou ', 'Ye ', 'Lin ', 'Kuang ', 'Gui ', 'Zhu ', 'Shi ', 'Ku ', 'Yu ', 'Gai ', 'Ge ', 'Xi ', 'Zhi ', 'Ji ', 'Xun ', 'Hou ', 'Xing ', 'Jiao ', 'Xi ', 'Gui ', 'Nuo ', 'Lang ', 'Jia ', 'Kuai ', 'Zheng ', 'Otoko ', 'Yun ', 'Yan ', 'Cheng ', 'Dou ', 'Chi ', 'Lu ', 'Fu ', 'Wu ', 'Fu ', 'Gao ', 'Hao ', 'Lang ', 'Jia ', 'Geng ', 'Jun ', 'Ying ', 'Bo ', 'Xi ', 'Bei ', 'Li ', 'Yun ', 'Bu ', 'Xiao ', 'Qi ', 'Pi ', 'Qing ', 'Guo ', 'Zhou ', 'Tan ', 'Zou ', 'Ping ', 'Lai ', 'Ni ', 'Chen ', 'You ', 'Bu ', 'Xiang ', 'Dan ', 'Ju ', 'Yong ', 'Qiao ', 'Yi ', 'Du ', 'Yan ', 'Mei '];
<?php return ['Ruo ', 'Bei ', 'E ', 'Yu ', 'Juan ', 'Yu ', 'Yun ', 'Hou ', 'Kui ', 'Xiang ', 'Xiang ', 'Sou ', 'Tang ', 'Ming ', 'Xi ', 'Ru ', 'Chu ', 'Zi ', 'Zou ', 'Ju ', 'Wu ', 'Xiang ', 'Yun ', 'Hao ', 'Yong ', 'Bi ', 'Mo ', 'Chao ', 'Fu ', 'Liao ', 'Yin ', 'Zhuan ', 'Hu ', 'Qiao ', 'Yan ', 'Zhang ', 'Fan ', 'Qiao ', 'Xu ', 'Deng ', 'Bi ', 'Xin ', 'Bi ', 'Ceng ', 'Wei ', 'Zheng ', 'Mao ', 'Shan ', 'Lin ', 'Po ', 'Dan ', 'Meng ', 'Ye ', 'Cao ', 'Kuai ', 'Feng ', 'Meng ', 'Zou ', 'Kuang ', 'Lian ', 'Zan ', 'Chan ', 'You ', 'Qi ', 'Yan ', 'Chan ', 'Zan ', 'Ling ', 'Huan ', 'Xi ', 'Feng ', 'Zan ', 'Li ', 'You ', 'Ding ', 'Qiu ', 'Zhuo ', 'Pei ', 'Zhou ', 'Yi ', 'Hang ', 'Yu ', 'Jiu ', 'Yan ', 'Zui ', 'Mao ', 'Dan ', 'Xu ', 'Tou ', 'Zhen ', 'Fen ', 'Sakenomoto ', '[?] ', 'Yun ', 'Tai ', 'Tian ', 'Qia ', 'Tuo ', 'Zuo ', 'Han ', 'Gu ', 'Su ', 'Po ', 'Chou ', 'Zai ', 'Ming ', 'Luo ', 'Chuo ', 'Chou ', 'You ', 'Tong ', 'Zhi ', 'Xian ', 'Jiang ', 'Cheng ', 'Yin ', 'Tu ', 'Xiao ', 'Mei ', 'Ku ', 'Suan ', 'Lei ', 'Pu ', 'Zui ', 'Hai ', 'Yan ', 'Xi ', 'Niang ', 'Wei ', 'Lu ', 'Lan ', 'Yan ', 'Tao ', 'Pei ', 'Zhan ', 'Chun ', 'Tan ', 'Zui ', 'Chuo ', 'Cu ', 'Kun ', 'Ti ', 'Mian ', 'Du ', 'Hu ', 'Xu ', 'Xing ', 'Tan ', 'Jiu ', 'Chun ', 'Yun ', 'Po ', 'Ke ', 'Sou ', 'Mi ', 'Quan ', 'Chou ', 'Cuo ', 'Yun ', 'Yong ', 'Ang ', 'Zha ', 'Hai ', 'Tang ', 'Jiang ', 'Piao ', 'Shan ', 'Yu ', 'Li ', 'Zao ', 'Lao ', 'Yi ', 'Jiang ', 'Pu ', 'Jiao ', 'Xi ', 'Tan ', 'Po ', 'Nong ', 'Yi ', 'Li ', 'Ju ', 'Jiao ', 'Yi ', 'Niang ', 'Ru ', 'Xun ', 'Chou ', 'Yan ', 'Ling ', 'Mi ', 'Mi ', 'Niang ', 'Xin ', 'Jiao ', 'Xi ', 'Mi ', 'Yan ', 'Bian ', 'Cai ', 'Shi ', 'You ', 'Shi ', 'Shi ', 'Li ', 'Zhong ', 'Ye ', 'Liang ', 'Li ', 'Jin ', 'Jin ', 'Qiu ', 'Yi ', 'Diao ', 'Dao ', 'Zhao ', 'Ding ', 'Po ', 'Qiu ', 'He ', 'Fu ', 'Zhen ', 'Zhi ', 'Ba ', 'Luan ', 'Fu ', 'Nai ', 'Diao ', 'Shan ', 'Qiao ', 'Kou ', 'Chuan ', 'Zi ', 'Fan ', 'Yu ', 'Hua ', 'Han ', 'Gong ', 'Qi ', 'Mang ', 'Ri ', 'Di ', 'Si ', 'Xi ', 'Yi ', 'Chai ', 'Shi ', 'Tu ', 'Xi ', 'Nu ', 'Qian ', 'Ishiyumi ', 'Jian ', 'Pi ', 'Ye ', 'Yin '];
<?php return ['Ba ', 'Fang ', 'Chen ', 'Xing ', 'Tou ', 'Yue ', 'Yan ', 'Fu ', 'Pi ', 'Na ', 'Xin ', 'E ', 'Jue ', 'Dun ', 'Gou ', 'Yin ', 'Qian ', 'Ban ', 'Ji ', 'Ren ', 'Chao ', 'Niu ', 'Fen ', 'Yun ', 'Ji ', 'Qin ', 'Pi ', 'Guo ', 'Hong ', 'Yin ', 'Jun ', 'Shi ', 'Yi ', 'Zhong ', 'Nie ', 'Gai ', 'Ri ', 'Huo ', 'Tai ', 'Kang ', 'Habaki ', 'Irori ', 'Ngaak ', '[?] ', 'Duo ', 'Zi ', 'Ni ', 'Tu ', 'Shi ', 'Min ', 'Gu ', 'E ', 'Ling ', 'Bing ', 'Yi ', 'Gu ', 'Ba ', 'Pi ', 'Yu ', 'Si ', 'Zuo ', 'Bu ', 'You ', 'Dian ', 'Jia ', 'Zhen ', 'Shi ', 'Shi ', 'Tie ', 'Ju ', 'Zhan ', 'Shi ', 'She ', 'Xuan ', 'Zhao ', 'Bao ', 'He ', 'Bi ', 'Sheng ', 'Chu ', 'Shi ', 'Bo ', 'Zhu ', 'Chi ', 'Za ', 'Po ', 'Tong ', 'Qian ', 'Fu ', 'Zhai ', 'Liu ', 'Qian ', 'Fu ', 'Li ', 'Yue ', 'Pi ', 'Yang ', 'Ban ', 'Bo ', 'Jie ', 'Gou ', 'Shu ', 'Zheng ', 'Mu ', 'Ni ', 'Nie ', 'Di ', 'Jia ', 'Mu ', 'Dan ', 'Shen ', 'Yi ', 'Si ', 'Kuang ', 'Ka ', 'Bei ', 'Jian ', 'Tong ', 'Xing ', 'Hong ', 'Jiao ', 'Chi ', 'Er ', 'Ge ', 'Bing ', 'Shi ', 'Mou ', 'Jia ', 'Yin ', 'Jun ', 'Zhou ', 'Chong ', 'Shang ', 'Tong ', 'Mo ', 'Lei ', 'Ji ', 'Yu ', 'Xu ', 'Ren ', 'Zun ', 'Zhi ', 'Qiong ', 'Shan ', 'Chi ', 'Xian ', 'Xing ', 'Quan ', 'Pi ', 'Tie ', 'Zhu ', 'Hou ', 'Ming ', 'Kua ', 'Yao ', 'Xian ', 'Xian ', 'Xiu ', 'Jun ', 'Cha ', 'Lao ', 'Ji ', 'Pi ', 'Ru ', 'Mi ', 'Yi ', 'Yin ', 'Guang ', 'An ', 'Diou ', 'You ', 'Se ', 'Kao ', 'Qian ', 'Luan ', 'Kasugai ', 'Ai ', 'Diao ', 'Han ', 'Rui ', 'Shi ', 'Keng ', 'Qiu ', 'Xiao ', 'Zhe ', 'Xiu ', 'Zang ', 'Ti ', 'Cuo ', 'Gua ', 'Gong ', 'Zhong ', 'Dou ', 'Lu ', 'Mei ', 'Lang ', 'Wan ', 'Xin ', 'Yun ', 'Bei ', 'Wu ', 'Su ', 'Yu ', 'Chan ', 'Ting ', 'Bo ', 'Han ', 'Jia ', 'Hong ', 'Cuan ', 'Feng ', 'Chan ', 'Wan ', 'Zhi ', 'Si ', 'Xuan ', 'Wu ', 'Wu ', 'Tiao ', 'Gong ', 'Zhuo ', 'Lue ', 'Xing ', 'Qian ', 'Shen ', 'Han ', 'Lue ', 'Xie ', 'Chu ', 'Zheng ', 'Ju ', 'Xian ', 'Tie ', 'Mang ', 'Pu ', 'Li ', 'Pan ', 'Rui ', 'Cheng ', 'Gao ', 'Li ', 'Te ', 'Pyeng ', 'Zhu ', '[?] ', 'Tu ', 'Liu ', 'Zui ', 'Ju ', 'Chang ', 'Yuan ', 'Jian ', 'Gang ', 'Diao ', 'Tao ', 'Chang '];
<?php return ['Lun ', 'Kua ', 'Ling ', 'Bei ', 'Lu ', 'Li ', 'Qiang ', 'Pou ', 'Juan ', 'Min ', 'Zui ', 'Peng ', 'An ', 'Pi ', 'Xian ', 'Ya ', 'Zhui ', 'Lei ', 'A ', 'Kong ', 'Ta ', 'Kun ', 'Du ', 'Wei ', 'Chui ', 'Zi ', 'Zheng ', 'Ben ', 'Nie ', 'Cong ', 'Qun ', 'Tan ', 'Ding ', 'Qi ', 'Qian ', 'Zhuo ', 'Qi ', 'Yu ', 'Jin ', 'Guan ', 'Mao ', 'Chang ', 'Tian ', 'Xi ', 'Lian ', 'Tao ', 'Gu ', 'Cuo ', 'Shu ', 'Zhen ', 'Lu ', 'Meng ', 'Lu ', 'Hua ', 'Biao ', 'Ga ', 'Lai ', 'Ken ', 'Kazari ', 'Bu ', 'Nai ', 'Wan ', 'Zan ', '[?] ', 'De ', 'Xian ', '[?] ', 'Huo ', 'Liang ', '[?] ', 'Men ', 'Kai ', 'Ying ', 'Di ', 'Lian ', 'Guo ', 'Xian ', 'Du ', 'Tu ', 'Wei ', 'Cong ', 'Fu ', 'Rou ', 'Ji ', 'E ', 'Rou ', 'Chen ', 'Ti ', 'Zha ', 'Hong ', 'Yang ', 'Duan ', 'Xia ', 'Yu ', 'Keng ', 'Xing ', 'Huang ', 'Wei ', 'Fu ', 'Zhao ', 'Cha ', 'Qie ', 'She ', 'Hong ', 'Kui ', 'Tian ', 'Mou ', 'Qiao ', 'Qiao ', 'Hou ', 'Tou ', 'Cong ', 'Huan ', 'Ye ', 'Min ', 'Jian ', 'Duan ', 'Jian ', 'Song ', 'Kui ', 'Hu ', 'Xuan ', 'Duo ', 'Jie ', 'Zhen ', 'Bian ', 'Zhong ', 'Zi ', 'Xiu ', 'Ye ', 'Mei ', 'Pai ', 'Ai ', 'Jie ', '[?] ', 'Mei ', 'Chuo ', 'Ta ', 'Bang ', 'Xia ', 'Lian ', 'Suo ', 'Xi ', 'Liu ', 'Zu ', 'Ye ', 'Nou ', 'Weng ', 'Rong ', 'Tang ', 'Suo ', 'Qiang ', 'Ge ', 'Shuo ', 'Chui ', 'Bo ', 'Pan ', 'Sa ', 'Bi ', 'Sang ', 'Gang ', 'Zi ', 'Wu ', 'Ying ', 'Huang ', 'Tiao ', 'Liu ', 'Kai ', 'Sun ', 'Sha ', 'Sou ', 'Wan ', 'Hao ', 'Zhen ', 'Zhen ', 'Luo ', 'Yi ', 'Yuan ', 'Tang ', 'Nie ', 'Xi ', 'Jia ', 'Ge ', 'Ma ', 'Juan ', 'Kasugai ', 'Habaki ', 'Suo ', '[?] ', '[?] ', '[?] ', 'Na ', 'Lu ', 'Suo ', 'Ou ', 'Zu ', 'Tuan ', 'Xiu ', 'Guan ', 'Xuan ', 'Lian ', 'Shou ', 'Ao ', 'Man ', 'Mo ', 'Luo ', 'Bi ', 'Wei ', 'Liu ', 'Di ', 'Qiao ', 'Cong ', 'Yi ', 'Lu ', 'Ao ', 'Keng ', 'Qiang ', 'Cui ', 'Qi ', 'Chang ', 'Tang ', 'Man ', 'Yong ', 'Chan ', 'Feng ', 'Jing ', 'Biao ', 'Shu ', 'Lou ', 'Xiu ', 'Cong ', 'Long ', 'Zan ', 'Jian ', 'Cao ', 'Li ', 'Xia ', 'Xi ', 'Kang ', '[?] ', 'Beng ', '[?] ', '[?] ', 'Zheng ', 'Lu ', 'Hua ', 'Ji ', 'Pu ', 'Hui ', 'Qiang ', 'Po ', 'Lin ', 'Suo ', 'Xiu ', 'San ', 'Cheng '];
<?php return ['Kui ', 'Si ', 'Liu ', 'Nao ', 'Heng ', 'Pie ', 'Sui ', 'Fan ', 'Qiao ', 'Quan ', 'Yang ', 'Tang ', 'Xiang ', 'Jue ', 'Jiao ', 'Zun ', 'Liao ', 'Jie ', 'Lao ', 'Dui ', 'Tan ', 'Zan ', 'Ji ', 'Jian ', 'Zhong ', 'Deng ', 'Ya ', 'Ying ', 'Dui ', 'Jue ', 'Nou ', 'Ti ', 'Pu ', 'Tie ', '[?] ', '[?] ', 'Ding ', 'Shan ', 'Kai ', 'Jian ', 'Fei ', 'Sui ', 'Lu ', 'Juan ', 'Hui ', 'Yu ', 'Lian ', 'Zhuo ', 'Qiao ', 'Qian ', 'Zhuo ', 'Lei ', 'Bi ', 'Tie ', 'Huan ', 'Ye ', 'Duo ', 'Guo ', 'Dang ', 'Ju ', 'Fen ', 'Da ', 'Bei ', 'Yi ', 'Ai ', 'Zong ', 'Xun ', 'Diao ', 'Zhu ', 'Heng ', 'Zhui ', 'Ji ', 'Nie ', 'Ta ', 'Huo ', 'Qing ', 'Bin ', 'Ying ', 'Kui ', 'Ning ', 'Xu ', 'Jian ', 'Jian ', 'Yari ', 'Cha ', 'Zhi ', 'Mie ', 'Li ', 'Lei ', 'Ji ', 'Zuan ', 'Kuang ', 'Shang ', 'Peng ', 'La ', 'Du ', 'Shuo ', 'Chuo ', 'Lu ', 'Biao ', 'Bao ', 'Lu ', '[?] ', '[?] ', 'Long ', 'E ', 'Lu ', 'Xin ', 'Jian ', 'Lan ', 'Bo ', 'Jian ', 'Yao ', 'Chan ', 'Xiang ', 'Jian ', 'Xi ', 'Guan ', 'Cang ', 'Nie ', 'Lei ', 'Cuan ', 'Qu ', 'Pan ', 'Luo ', 'Zuan ', 'Luan ', 'Zao ', 'Nie ', 'Jue ', 'Tang ', 'Shu ', 'Lan ', 'Jin ', 'Qiu ', 'Yi ', 'Zhen ', 'Ding ', 'Zhao ', 'Po ', 'Diao ', 'Tu ', 'Qian ', 'Chuan ', 'Shan ', 'Ji ', 'Fan ', 'Diao ', 'Men ', 'Nu ', 'Xi ', 'Chai ', 'Xing ', 'Gai ', 'Bu ', 'Tai ', 'Ju ', 'Dun ', 'Chao ', 'Zhong ', 'Na ', 'Bei ', 'Gang ', 'Ban ', 'Qian ', 'Yao ', 'Qin ', 'Jun ', 'Wu ', 'Gou ', 'Kang ', 'Fang ', 'Huo ', 'Tou ', 'Niu ', 'Ba ', 'Yu ', 'Qian ', 'Zheng ', 'Qian ', 'Gu ', 'Bo ', 'E ', 'Po ', 'Bu ', 'Ba ', 'Yue ', 'Zuan ', 'Mu ', 'Dan ', 'Jia ', 'Dian ', 'You ', 'Tie ', 'Bo ', 'Ling ', 'Shuo ', 'Qian ', 'Liu ', 'Bao ', 'Shi ', 'Xuan ', 'She ', 'Bi ', 'Ni ', 'Pi ', 'Duo ', 'Xing ', 'Kao ', 'Lao ', 'Er ', 'Mang ', 'Ya ', 'You ', 'Cheng ', 'Jia ', 'Ye ', 'Nao ', 'Zhi ', 'Dang ', 'Tong ', 'Lu ', 'Diao ', 'Yin ', 'Kai ', 'Zha ', 'Zhu ', 'Xian ', 'Ting ', 'Diu ', 'Xian ', 'Hua ', 'Quan ', 'Sha ', 'Jia ', 'Yao ', 'Ge ', 'Ming ', 'Zheng ', 'Se ', 'Jiao ', 'Yi ', 'Chan ', 'Chong ', 'Tang ', 'An ', 'Yin ', 'Ru ', 'Zhu ', 'Lao ', 'Pu ', 'Wu ', 'Lai ', 'Te ', 'Lian ', 'Keng '];
<?php return ['Xiao ', 'Suo ', 'Li ', 'Zheng ', 'Chu ', 'Guo ', 'Gao ', 'Tie ', 'Xiu ', 'Cuo ', 'Lue ', 'Feng ', 'Xin ', 'Liu ', 'Kai ', 'Jian ', 'Rui ', 'Ti ', 'Lang ', 'Qian ', 'Ju ', 'A ', 'Qiang ', 'Duo ', 'Tian ', 'Cuo ', 'Mao ', 'Ben ', 'Qi ', 'De ', 'Kua ', 'Kun ', 'Chang ', 'Xi ', 'Gu ', 'Luo ', 'Chui ', 'Zhui ', 'Jin ', 'Zhi ', 'Xian ', 'Juan ', 'Huo ', 'Pou ', 'Tan ', 'Ding ', 'Jian ', 'Ju ', 'Meng ', 'Zi ', 'Qie ', 'Ying ', 'Kai ', 'Qiang ', 'Song ', 'E ', 'Cha ', 'Qiao ', 'Zhong ', 'Duan ', 'Sou ', 'Huang ', 'Huan ', 'Ai ', 'Du ', 'Mei ', 'Lou ', 'Zi ', 'Fei ', 'Mei ', 'Mo ', 'Zhen ', 'Bo ', 'Ge ', 'Nie ', 'Tang ', 'Juan ', 'Nie ', 'Na ', 'Liu ', 'Hao ', 'Bang ', 'Yi ', 'Jia ', 'Bin ', 'Rong ', 'Biao ', 'Tang ', 'Man ', 'Luo ', 'Beng ', 'Yong ', 'Jing ', 'Di ', 'Zu ', 'Xuan ', 'Liu ', 'Tan ', 'Jue ', 'Liao ', 'Pu ', 'Lu ', 'Dui ', 'Lan ', 'Pu ', 'Cuan ', 'Qiang ', 'Deng ', 'Huo ', 'Lei ', 'Huan ', 'Zhuo ', 'Lian ', 'Yi ', 'Cha ', 'Biao ', 'La ', 'Chan ', 'Xiang ', 'Chang ', 'Chang ', 'Jiu ', 'Ao ', 'Die ', 'Qu ', 'Liao ', 'Mi ', 'Chang ', 'Men ', 'Ma ', 'Shuan ', 'Shan ', 'Huo ', 'Men ', 'Yan ', 'Bi ', 'Han ', 'Bi ', 'San ', 'Kai ', 'Kang ', 'Beng ', 'Hong ', 'Run ', 'San ', 'Xian ', 'Xian ', 'Jian ', 'Min ', 'Xia ', 'Yuru ', 'Dou ', 'Zha ', 'Nao ', 'Jian ', 'Peng ', 'Xia ', 'Ling ', 'Bian ', 'Bi ', 'Run ', 'He ', 'Guan ', 'Ge ', 'Ge ', 'Fa ', 'Chu ', 'Hong ', 'Gui ', 'Min ', 'Se ', 'Kun ', 'Lang ', 'Lu ', 'Ting ', 'Sha ', 'Ju ', 'Yue ', 'Yue ', 'Chan ', 'Qu ', 'Lin ', 'Chang ', 'Shai ', 'Kun ', 'Yan ', 'Min ', 'Yan ', 'E ', 'Hun ', 'Yu ', 'Wen ', 'Xiang ', 'Bao ', 'Xiang ', 'Qu ', 'Yao ', 'Wen ', 'Ban ', 'An ', 'Wei ', 'Yin ', 'Kuo ', 'Que ', 'Lan ', 'Du ', '[?] ', 'Phwung ', 'Tian ', 'Nie ', 'Ta ', 'Kai ', 'He ', 'Que ', 'Chuang ', 'Guan ', 'Dou ', 'Qi ', 'Kui ', 'Tang ', 'Guan ', 'Piao ', 'Kan ', 'Xi ', 'Hui ', 'Chan ', 'Pi ', 'Dang ', 'Huan ', 'Ta ', 'Wen ', '[?] ', 'Men ', 'Shuan ', 'Shan ', 'Yan ', 'Han ', 'Bi ', 'Wen ', 'Chuang ', 'Run ', 'Wei ', 'Xian ', 'Hong ', 'Jian ', 'Min ', 'Kang ', 'Men ', 'Zha ', 'Nao ', 'Gui ', 'Wen ', 'Ta ', 'Min ', 'Lu ', 'Kai '];
<?php return ['Fa ', 'Ge ', 'He ', 'Kun ', 'Jiu ', 'Yue ', 'Lang ', 'Du ', 'Yu ', 'Yan ', 'Chang ', 'Xi ', 'Wen ', 'Hun ', 'Yan ', 'E ', 'Chan ', 'Lan ', 'Qu ', 'Hui ', 'Kuo ', 'Que ', 'Ge ', 'Tian ', 'Ta ', 'Que ', 'Kan ', 'Huan ', 'Fu ', 'Fu ', 'Le ', 'Dui ', 'Xin ', 'Qian ', 'Wu ', 'Yi ', 'Tuo ', 'Yin ', 'Yang ', 'Dou ', 'E ', 'Sheng ', 'Ban ', 'Pei ', 'Keng ', 'Yun ', 'Ruan ', 'Zhi ', 'Pi ', 'Jing ', 'Fang ', 'Yang ', 'Yin ', 'Zhen ', 'Jie ', 'Cheng ', 'E ', 'Qu ', 'Di ', 'Zu ', 'Zuo ', 'Dian ', 'Ling ', 'A ', 'Tuo ', 'Tuo ', 'Po ', 'Bing ', 'Fu ', 'Ji ', 'Lu ', 'Long ', 'Chen ', 'Xing ', 'Duo ', 'Lou ', 'Mo ', 'Jiang ', 'Shu ', 'Duo ', 'Xian ', 'Er ', 'Gui ', 'Yu ', 'Gai ', 'Shan ', 'Xun ', 'Qiao ', 'Xing ', 'Chun ', 'Fu ', 'Bi ', 'Xia ', 'Shan ', 'Sheng ', 'Zhi ', 'Pu ', 'Dou ', 'Yuan ', 'Zhen ', 'Chu ', 'Xian ', 'Tou ', 'Nie ', 'Yun ', 'Xian ', 'Pei ', 'Pei ', 'Zou ', 'Yi ', 'Dui ', 'Lun ', 'Yin ', 'Ju ', 'Chui ', 'Chen ', 'Pi ', 'Ling ', 'Tao ', 'Xian ', 'Lu ', 'Sheng ', 'Xian ', 'Yin ', 'Zhu ', 'Yang ', 'Reng ', 'Shan ', 'Chong ', 'Yan ', 'Yin ', 'Yu ', 'Ti ', 'Yu ', 'Long ', 'Wei ', 'Wei ', 'Nie ', 'Dui ', 'Sui ', 'An ', 'Huang ', 'Jie ', 'Sui ', 'Yin ', 'Gai ', 'Yan ', 'Hui ', 'Ge ', 'Yun ', 'Wu ', 'Wei ', 'Ai ', 'Xi ', 'Tang ', 'Ji ', 'Zhang ', 'Dao ', 'Ao ', 'Xi ', 'Yin ', '[?] ', 'Rao ', 'Lin ', 'Tui ', 'Deng ', 'Pi ', 'Sui ', 'Sui ', 'Yu ', 'Xian ', 'Fen ', 'Ni ', 'Er ', 'Ji ', 'Dao ', 'Xi ', 'Yin ', 'E ', 'Hui ', 'Long ', 'Xi ', 'Li ', 'Li ', 'Li ', 'Zhui ', 'He ', 'Zhi ', 'Zhun ', 'Jun ', 'Nan ', 'Yi ', 'Que ', 'Yan ', 'Qian ', 'Ya ', 'Xiong ', 'Ya ', 'Ji ', 'Gu ', 'Huan ', 'Zhi ', 'Gou ', 'Jun ', 'Ci ', 'Yong ', 'Ju ', 'Chu ', 'Hu ', 'Za ', 'Luo ', 'Yu ', 'Chou ', 'Diao ', 'Sui ', 'Han ', 'Huo ', 'Shuang ', 'Guan ', 'Chu ', 'Za ', 'Yong ', 'Ji ', 'Xi ', 'Chou ', 'Liu ', 'Li ', 'Nan ', 'Xue ', 'Za ', 'Ji ', 'Ji ', 'Yu ', 'Yu ', 'Xue ', 'Na ', 'Fou ', 'Se ', 'Mu ', 'Wen ', 'Fen ', 'Pang ', 'Yun ', 'Li ', 'Li ', 'Ang ', 'Ling ', 'Lei ', 'An ', 'Bao ', 'Meng ', 'Dian ', 'Dang ', 'Xing ', 'Wu ', 'Zhao '];
<?php return ['Xu ', 'Ji ', 'Mu ', 'Chen ', 'Xiao ', 'Zha ', 'Ting ', 'Zhen ', 'Pei ', 'Mei ', 'Ling ', 'Qi ', 'Chou ', 'Huo ', 'Sha ', 'Fei ', 'Weng ', 'Zhan ', 'Yin ', 'Ni ', 'Chou ', 'Tun ', 'Lin ', '[?] ', 'Dong ', 'Ying ', 'Wu ', 'Ling ', 'Shuang ', 'Ling ', 'Xia ', 'Hong ', 'Yin ', 'Mo ', 'Mai ', 'Yun ', 'Liu ', 'Meng ', 'Bin ', 'Wu ', 'Wei ', 'Huo ', 'Yin ', 'Xi ', 'Yi ', 'Ai ', 'Dan ', 'Deng ', 'Xian ', 'Yu ', 'Lu ', 'Long ', 'Dai ', 'Ji ', 'Pang ', 'Yang ', 'Ba ', 'Pi ', 'Wei ', '[?] ', 'Xi ', 'Ji ', 'Mai ', 'Meng ', 'Meng ', 'Lei ', 'Li ', 'Huo ', 'Ai ', 'Fei ', 'Dai ', 'Long ', 'Ling ', 'Ai ', 'Feng ', 'Li ', 'Bao ', '[?] ', 'He ', 'He ', 'Bing ', 'Qing ', 'Qing ', 'Jing ', 'Tian ', 'Zhen ', 'Jing ', 'Cheng ', 'Qing ', 'Jing ', 'Jing ', 'Dian ', 'Jing ', 'Tian ', 'Fei ', 'Fei ', 'Kao ', 'Mi ', 'Mian ', 'Mian ', 'Pao ', 'Ye ', 'Tian ', 'Hui ', 'Ye ', 'Ge ', 'Ding ', 'Cha ', 'Jian ', 'Ren ', 'Di ', 'Du ', 'Wu ', 'Ren ', 'Qin ', 'Jin ', 'Xue ', 'Niu ', 'Ba ', 'Yin ', 'Sa ', 'Na ', 'Mo ', 'Zu ', 'Da ', 'Ban ', 'Yi ', 'Yao ', 'Tao ', 'Tuo ', 'Jia ', 'Hong ', 'Pao ', 'Yang ', 'Tomo ', 'Yin ', 'Jia ', 'Tao ', 'Ji ', 'Xie ', 'An ', 'An ', 'Hen ', 'Gong ', 'Kohaze ', 'Da ', 'Qiao ', 'Ting ', 'Wan ', 'Ying ', 'Sui ', 'Tiao ', 'Qiao ', 'Xuan ', 'Kong ', 'Beng ', 'Ta ', 'Zhang ', 'Bing ', 'Kuo ', 'Ju ', 'La ', 'Xie ', 'Rou ', 'Bang ', 'Yi ', 'Qiu ', 'Qiu ', 'He ', 'Xiao ', 'Mu ', 'Ju ', 'Jian ', 'Bian ', 'Di ', 'Jian ', 'On ', 'Tao ', 'Gou ', 'Ta ', 'Bei ', 'Xie ', 'Pan ', 'Ge ', 'Bi ', 'Kuo ', 'Tang ', 'Lou ', 'Gui ', 'Qiao ', 'Xue ', 'Ji ', 'Jian ', 'Jiang ', 'Chan ', 'Da ', 'Huo ', 'Xian ', 'Qian ', 'Du ', 'Wa ', 'Jian ', 'Lan ', 'Wei ', 'Ren ', 'Fu ', 'Mei ', 'Juan ', 'Ge ', 'Wei ', 'Qiao ', 'Han ', 'Chang ', '[?] ', 'Rou ', 'Xun ', 'She ', 'Wei ', 'Ge ', 'Bei ', 'Tao ', 'Gou ', 'Yun ', '[?] ', 'Bi ', 'Wei ', 'Hui ', 'Du ', 'Wa ', 'Du ', 'Wei ', 'Ren ', 'Fu ', 'Han ', 'Wei ', 'Yun ', 'Tao ', 'Jiu ', 'Jiu ', 'Xian ', 'Xie ', 'Xian ', 'Ji ', 'Yin ', 'Za ', 'Yun ', 'Shao ', 'Le ', 'Peng ', 'Heng ', 'Ying ', 'Yun ', 'Peng ', 'Yin ', 'Yin ', 'Xiang '];
<?php return ['Hu ', 'Ye ', 'Ding ', 'Qing ', 'Pan ', 'Xiang ', 'Shun ', 'Han ', 'Xu ', 'Yi ', 'Xu ', 'Gu ', 'Song ', 'Kui ', 'Qi ', 'Hang ', 'Yu ', 'Wan ', 'Ban ', 'Dun ', 'Di ', 'Dan ', 'Pan ', 'Po ', 'Ling ', 'Ce ', 'Jing ', 'Lei ', 'He ', 'Qiao ', 'E ', 'E ', 'Wei ', 'Jie ', 'Gua ', 'Shen ', 'Yi ', 'Shen ', 'Hai ', 'Dui ', 'Pian ', 'Ping ', 'Lei ', 'Fu ', 'Jia ', 'Tou ', 'Hui ', 'Kui ', 'Jia ', 'Le ', 'Tian ', 'Cheng ', 'Ying ', 'Jun ', 'Hu ', 'Han ', 'Jing ', 'Tui ', 'Tui ', 'Pin ', 'Lai ', 'Tui ', 'Zi ', 'Zi ', 'Chui ', 'Ding ', 'Lai ', 'Yan ', 'Han ', 'Jian ', 'Ke ', 'Cui ', 'Jiong ', 'Qin ', 'Yi ', 'Sai ', 'Ti ', 'E ', 'E ', 'Yan ', 'Hun ', 'Kan ', 'Yong ', 'Zhuan ', 'Yan ', 'Xian ', 'Xin ', 'Yi ', 'Yuan ', 'Sang ', 'Dian ', 'Dian ', 'Jiang ', 'Ku ', 'Lei ', 'Liao ', 'Piao ', 'Yi ', 'Man ', 'Qi ', 'Rao ', 'Hao ', 'Qiao ', 'Gu ', 'Xun ', 'Qian ', 'Hui ', 'Zhan ', 'Ru ', 'Hong ', 'Bin ', 'Xian ', 'Pin ', 'Lu ', 'Lan ', 'Nie ', 'Quan ', 'Ye ', 'Ding ', 'Qing ', 'Han ', 'Xiang ', 'Shun ', 'Xu ', 'Xu ', 'Wan ', 'Gu ', 'Dun ', 'Qi ', 'Ban ', 'Song ', 'Hang ', 'Yu ', 'Lu ', 'Ling ', 'Po ', 'Jing ', 'Jie ', 'Jia ', 'Tian ', 'Han ', 'Ying ', 'Jiong ', 'Hai ', 'Yi ', 'Pin ', 'Hui ', 'Tui ', 'Han ', 'Ying ', 'Ying ', 'Ke ', 'Ti ', 'Yong ', 'E ', 'Zhuan ', 'Yan ', 'E ', 'Nie ', 'Man ', 'Dian ', 'Sang ', 'Hao ', 'Lei ', 'Zhan ', 'Ru ', 'Pin ', 'Quan ', 'Feng ', 'Biao ', 'Oroshi ', 'Fu ', 'Xia ', 'Zhan ', 'Biao ', 'Sa ', 'Ba ', 'Tai ', 'Lie ', 'Gua ', 'Xuan ', 'Shao ', 'Ju ', 'Bi ', 'Si ', 'Wei ', 'Yang ', 'Yao ', 'Sou ', 'Kai ', 'Sao ', 'Fan ', 'Liu ', 'Xi ', 'Liao ', 'Piao ', 'Piao ', 'Liu ', 'Biao ', 'Biao ', 'Biao ', 'Liao ', '[?] ', 'Se ', 'Feng ', 'Biao ', 'Feng ', 'Yang ', 'Zhan ', 'Biao ', 'Sa ', 'Ju ', 'Si ', 'Sou ', 'Yao ', 'Liu ', 'Piao ', 'Biao ', 'Biao ', 'Fei ', 'Fan ', 'Fei ', 'Fei ', 'Shi ', 'Shi ', 'Can ', 'Ji ', 'Ding ', 'Si ', 'Tuo ', 'Zhan ', 'Sun ', 'Xiang ', 'Tun ', 'Ren ', 'Yu ', 'Juan ', 'Chi ', 'Yin ', 'Fan ', 'Fan ', 'Sun ', 'Yin ', 'Zhu ', 'Yi ', 'Zhai ', 'Bi ', 'Jie ', 'Tao ', 'Liu ', 'Ci ', 'Tie ', 'Si ', 'Bao ', 'Shi ', 'Duo '];
<?php return ['Hai ', 'Ren ', 'Tian ', 'Jiao ', 'Jia ', 'Bing ', 'Yao ', 'Tong ', 'Ci ', 'Xiang ', 'Yang ', 'Yang ', 'Er ', 'Yan ', 'Le ', 'Yi ', 'Can ', 'Bo ', 'Nei ', 'E ', 'Bu ', 'Jun ', 'Dou ', 'Su ', 'Yu ', 'Shi ', 'Yao ', 'Hun ', 'Guo ', 'Shi ', 'Jian ', 'Zhui ', 'Bing ', 'Xian ', 'Bu ', 'Ye ', 'Tan ', 'Fei ', 'Zhang ', 'Wei ', 'Guan ', 'E ', 'Nuan ', 'Hun ', 'Hu ', 'Huang ', 'Tie ', 'Hui ', 'Jian ', 'Hou ', 'He ', 'Xing ', 'Fen ', 'Wei ', 'Gu ', 'Cha ', 'Song ', 'Tang ', 'Bo ', 'Gao ', 'Xi ', 'Kui ', 'Liu ', 'Sou ', 'Tao ', 'Ye ', 'Yun ', 'Mo ', 'Tang ', 'Man ', 'Bi ', 'Yu ', 'Xiu ', 'Jin ', 'San ', 'Kui ', 'Zhuan ', 'Shan ', 'Chi ', 'Dan ', 'Yi ', 'Ji ', 'Rao ', 'Cheng ', 'Yong ', 'Tao ', 'Hui ', 'Xiang ', 'Zhan ', 'Fen ', 'Hai ', 'Meng ', 'Yan ', 'Mo ', 'Chan ', 'Xiang ', 'Luo ', 'Zuan ', 'Nang ', 'Shi ', 'Ding ', 'Ji ', 'Tuo ', 'Xing ', 'Tun ', 'Xi ', 'Ren ', 'Yu ', 'Chi ', 'Fan ', 'Yin ', 'Jian ', 'Shi ', 'Bao ', 'Si ', 'Duo ', 'Yi ', 'Er ', 'Rao ', 'Xiang ', 'Jia ', 'Le ', 'Jiao ', 'Yi ', 'Bing ', 'Bo ', 'Dou ', 'E ', 'Yu ', 'Nei ', 'Jun ', 'Guo ', 'Hun ', 'Xian ', 'Guan ', 'Cha ', 'Kui ', 'Gu ', 'Sou ', 'Chan ', 'Ye ', 'Mo ', 'Bo ', 'Liu ', 'Xiu ', 'Jin ', 'Man ', 'San ', 'Zhuan ', 'Nang ', 'Shou ', 'Kui ', 'Guo ', 'Xiang ', 'Fen ', 'Ba ', 'Ni ', 'Bi ', 'Bo ', 'Tu ', 'Han ', 'Fei ', 'Jian ', 'An ', 'Ai ', 'Fu ', 'Xian ', 'Wen ', 'Xin ', 'Fen ', 'Bin ', 'Xing ', 'Ma ', 'Yu ', 'Feng ', 'Han ', 'Di ', 'Tuo ', 'Tuo ', 'Chi ', 'Xun ', 'Zhu ', 'Zhi ', 'Pei ', 'Xin ', 'Ri ', 'Sa ', 'Yin ', 'Wen ', 'Zhi ', 'Dan ', 'Lu ', 'You ', 'Bo ', 'Bao ', 'Kuai ', 'Tuo ', 'Yi ', 'Qu ', '[?] ', 'Qu ', 'Jiong ', 'Bo ', 'Zhao ', 'Yuan ', 'Peng ', 'Zhou ', 'Ju ', 'Zhu ', 'Nu ', 'Ju ', 'Pi ', 'Zang ', 'Jia ', 'Ling ', 'Zhen ', 'Tai ', 'Fu ', 'Yang ', 'Shi ', 'Bi ', 'Tuo ', 'Tuo ', 'Si ', 'Liu ', 'Ma ', 'Pian ', 'Tao ', 'Zhi ', 'Rong ', 'Teng ', 'Dong ', 'Xun ', 'Quan ', 'Shen ', 'Jiong ', 'Er ', 'Hai ', 'Bo ', 'Zhu ', 'Yin ', 'Luo ', 'Shuu ', 'Dan ', 'Xie ', 'Liu ', 'Ju ', 'Song ', 'Qin ', 'Mang ', 'Liang ', 'Han ', 'Tu ', 'Xuan ', 'Tui ', 'Jun '];
<?php return ['E ', 'Cheng ', 'Xin ', 'Ai ', 'Lu ', 'Zhui ', 'Zhou ', 'She ', 'Pian ', 'Kun ', 'Tao ', 'Lai ', 'Zong ', 'Ke ', 'Qi ', 'Qi ', 'Yan ', 'Fei ', 'Sao ', 'Yan ', 'Jie ', 'Yao ', 'Wu ', 'Pian ', 'Cong ', 'Pian ', 'Qian ', 'Fei ', 'Huang ', 'Jian ', 'Huo ', 'Yu ', 'Ti ', 'Quan ', 'Xia ', 'Zong ', 'Kui ', 'Rou ', 'Si ', 'Gua ', 'Tuo ', 'Kui ', 'Sou ', 'Qian ', 'Cheng ', 'Zhi ', 'Liu ', 'Pang ', 'Teng ', 'Xi ', 'Cao ', 'Du ', 'Yan ', 'Yuan ', 'Zou ', 'Sao ', 'Shan ', 'Li ', 'Zhi ', 'Shuang ', 'Lu ', 'Xi ', 'Luo ', 'Zhang ', 'Mo ', 'Ao ', 'Can ', 'Piao ', 'Cong ', 'Qu ', 'Bi ', 'Zhi ', 'Yu ', 'Xu ', 'Hua ', 'Bo ', 'Su ', 'Xiao ', 'Lin ', 'Chan ', 'Dun ', 'Liu ', 'Tuo ', 'Zeng ', 'Tan ', 'Jiao ', 'Tie ', 'Yan ', 'Luo ', 'Zhan ', 'Jing ', 'Yi ', 'Ye ', 'Tuo ', 'Bin ', 'Zou ', 'Yan ', 'Peng ', 'Lu ', 'Teng ', 'Xiang ', 'Ji ', 'Shuang ', 'Ju ', 'Xi ', 'Huan ', 'Li ', 'Biao ', 'Ma ', 'Yu ', 'Tuo ', 'Xun ', 'Chi ', 'Qu ', 'Ri ', 'Bo ', 'Lu ', 'Zang ', 'Shi ', 'Si ', 'Fu ', 'Ju ', 'Zou ', 'Zhu ', 'Tuo ', 'Nu ', 'Jia ', 'Yi ', 'Tai ', 'Xiao ', 'Ma ', 'Yin ', 'Jiao ', 'Hua ', 'Luo ', 'Hai ', 'Pian ', 'Biao ', 'Li ', 'Cheng ', 'Yan ', 'Xin ', 'Qin ', 'Jun ', 'Qi ', 'Qi ', 'Ke ', 'Zhui ', 'Zong ', 'Su ', 'Can ', 'Pian ', 'Zhi ', 'Kui ', 'Sao ', 'Wu ', 'Ao ', 'Liu ', 'Qian ', 'Shan ', 'Piao ', 'Luo ', 'Cong ', 'Chan ', 'Zou ', 'Ji ', 'Shuang ', 'Xiang ', 'Gu ', 'Wei ', 'Wei ', 'Wei ', 'Yu ', 'Gan ', 'Yi ', 'Ang ', 'Tou ', 'Xie ', 'Bao ', 'Bi ', 'Chi ', 'Ti ', 'Di ', 'Ku ', 'Hai ', 'Qiao ', 'Gou ', 'Kua ', 'Ge ', 'Tui ', 'Geng ', 'Pian ', 'Bi ', 'Ke ', 'Ka ', 'Yu ', 'Sui ', 'Lou ', 'Bo ', 'Xiao ', 'Pang ', 'Bo ', 'Ci ', 'Kuan ', 'Bin ', 'Mo ', 'Liao ', 'Lou ', 'Nao ', 'Du ', 'Zang ', 'Sui ', 'Ti ', 'Bin ', 'Kuan ', 'Lu ', 'Gao ', 'Gao ', 'Qiao ', 'Kao ', 'Qiao ', 'Lao ', 'Zao ', 'Biao ', 'Kun ', 'Kun ', 'Ti ', 'Fang ', 'Xiu ', 'Ran ', 'Mao ', 'Dan ', 'Kun ', 'Bin ', 'Fa ', 'Tiao ', 'Peng ', 'Zi ', 'Fa ', 'Ran ', 'Ti ', 'Pao ', 'Pi ', 'Mao ', 'Fu ', 'Er ', 'Rong ', 'Qu ', 'Gong ', 'Xiu ', 'Gua ', 'Ji ', 'Peng ', 'Zhua ', 'Shao ', 'Sha '];
<?php return ['Ti ', 'Li ', 'Bin ', 'Zong ', 'Ti ', 'Peng ', 'Song ', 'Zheng ', 'Quan ', 'Zong ', 'Shun ', 'Jian ', 'Duo ', 'Hu ', 'La ', 'Jiu ', 'Qi ', 'Lian ', 'Zhen ', 'Bin ', 'Peng ', 'Mo ', 'San ', 'Man ', 'Man ', 'Seng ', 'Xu ', 'Lie ', 'Qian ', 'Qian ', 'Nong ', 'Huan ', 'Kuai ', 'Ning ', 'Bin ', 'Lie ', 'Rang ', 'Dou ', 'Dou ', 'Nao ', 'Hong ', 'Xi ', 'Dou ', 'Han ', 'Dou ', 'Dou ', 'Jiu ', 'Chang ', 'Yu ', 'Yu ', 'Li ', 'Juan ', 'Fu ', 'Qian ', 'Gui ', 'Zong ', 'Liu ', 'Gui ', 'Shang ', 'Yu ', 'Gui ', 'Mei ', 'Ji ', 'Qi ', 'Jie ', 'Kui ', 'Hun ', 'Ba ', 'Po ', 'Mei ', 'Xu ', 'Yan ', 'Xiao ', 'Liang ', 'Yu ', 'Tui ', 'Qi ', 'Wang ', 'Liang ', 'Wei ', 'Jian ', 'Chi ', 'Piao ', 'Bi ', 'Mo ', 'Ji ', 'Xu ', 'Chou ', 'Yan ', 'Zhan ', 'Yu ', 'Dao ', 'Ren ', 'Ji ', 'Eri ', 'Gong ', 'Tuo ', 'Diao ', 'Ji ', 'Xu ', 'E ', 'E ', 'Sha ', 'Hang ', 'Tun ', 'Mo ', 'Jie ', 'Shen ', 'Fan ', 'Yuan ', 'Bi ', 'Lu ', 'Wen ', 'Hu ', 'Lu ', 'Za ', 'Fang ', 'Fen ', 'Na ', 'You ', 'Namazu ', 'Todo ', 'He ', 'Xia ', 'Qu ', 'Han ', 'Pi ', 'Ling ', 'Tuo ', 'Bo ', 'Qiu ', 'Ping ', 'Fu ', 'Bi ', 'Ji ', 'Wei ', 'Ju ', 'Diao ', 'Bo ', 'You ', 'Gun ', 'Pi ', 'Nian ', 'Xing ', 'Tai ', 'Bao ', 'Fu ', 'Zha ', 'Ju ', 'Gu ', 'Kajika ', 'Tong ', '[?] ', 'Ta ', 'Jie ', 'Shu ', 'Hou ', 'Xiang ', 'Er ', 'An ', 'Wei ', 'Tiao ', 'Zhu ', 'Yin ', 'Lie ', 'Luo ', 'Tong ', 'Yi ', 'Qi ', 'Bing ', 'Wei ', 'Jiao ', 'Bu ', 'Gui ', 'Xian ', 'Ge ', 'Hui ', 'Bora ', 'Mate ', 'Kao ', 'Gori ', 'Duo ', 'Jun ', 'Ti ', 'Man ', 'Xiao ', 'Za ', 'Sha ', 'Qin ', 'Yu ', 'Nei ', 'Zhe ', 'Gun ', 'Geng ', 'Su ', 'Wu ', 'Qiu ', 'Ting ', 'Fu ', 'Wan ', 'You ', 'Li ', 'Sha ', 'Sha ', 'Gao ', 'Meng ', 'Ugui ', 'Asari ', 'Subashiri ', 'Kazunoko ', 'Yong ', 'Ni ', 'Zi ', 'Qi ', 'Qing ', 'Xiang ', 'Nei ', 'Chun ', 'Ji ', 'Diao ', 'Qie ', 'Gu ', 'Zhou ', 'Dong ', 'Lai ', 'Fei ', 'Ni ', 'Yi ', 'Kun ', 'Lu ', 'Jiu ', 'Chang ', 'Jing ', 'Lun ', 'Ling ', 'Zou ', 'Li ', 'Meng ', 'Zong ', 'Zhi ', 'Nian ', 'Shachi ', 'Dojou ', 'Sukesou ', 'Shi ', 'Shen ', 'Hun ', 'Shi ', 'Hou ', 'Xing ', 'Zhu ', 'La ', 'Zong ', 'Ji ', 'Bian ', 'Bian '];
<?php return ['Huan ', 'Quan ', 'Ze ', 'Wei ', 'Wei ', 'Yu ', 'Qun ', 'Rou ', 'Die ', 'Huang ', 'Lian ', 'Yan ', 'Qiu ', 'Qiu ', 'Jian ', 'Bi ', 'E ', 'Yang ', 'Fu ', 'Sai ', 'Jian ', 'Xia ', 'Tuo ', 'Hu ', 'Muroaji ', 'Ruo ', 'Haraka ', 'Wen ', 'Jian ', 'Hao ', 'Wu ', 'Fang ', 'Sao ', 'Liu ', 'Ma ', 'Shi ', 'Shi ', 'Yin ', 'Z ', 'Teng ', 'Ta ', 'Yao ', 'Ge ', 'Rong ', 'Qian ', 'Qi ', 'Wen ', 'Ruo ', 'Hatahata ', 'Lian ', 'Ao ', 'Le ', 'Hui ', 'Min ', 'Ji ', 'Tiao ', 'Qu ', 'Jian ', 'Sao ', 'Man ', 'Xi ', 'Qiu ', 'Biao ', 'Ji ', 'Ji ', 'Zhu ', 'Jiang ', 'Qiu ', 'Zhuan ', 'Yong ', 'Zhang ', 'Kang ', 'Xue ', 'Bie ', 'Jue ', 'Qu ', 'Xiang ', 'Bo ', 'Jiao ', 'Xun ', 'Su ', 'Huang ', 'Zun ', 'Shan ', 'Shan ', 'Fan ', 'Jue ', 'Lin ', 'Xun ', 'Miao ', 'Xi ', 'Eso ', 'Kyou ', 'Fen ', 'Guan ', 'Hou ', 'Kuai ', 'Zei ', 'Sao ', 'Zhan ', 'Gan ', 'Gui ', 'Sheng ', 'Li ', 'Chang ', 'Hatahata ', 'Shiira ', 'Mutsu ', 'Ru ', 'Ji ', 'Xu ', 'Huo ', 'Shiira ', 'Li ', 'Lie ', 'Li ', 'Mie ', 'Zhen ', 'Xiang ', 'E ', 'Lu ', 'Guan ', 'Li ', 'Xian ', 'Yu ', 'Dao ', 'Ji ', 'You ', 'Tun ', 'Lu ', 'Fang ', 'Ba ', 'He ', 'Bo ', 'Ping ', 'Nian ', 'Lu ', 'You ', 'Zha ', 'Fu ', 'Bo ', 'Bao ', 'Hou ', 'Pi ', 'Tai ', 'Gui ', 'Jie ', 'Kao ', 'Wei ', 'Er ', 'Tong ', 'Ze ', 'Hou ', 'Kuai ', 'Ji ', 'Jiao ', 'Xian ', 'Za ', 'Xiang ', 'Xun ', 'Geng ', 'Li ', 'Lian ', 'Jian ', 'Li ', 'Shi ', 'Tiao ', 'Gun ', 'Sha ', 'Wan ', 'Jun ', 'Ji ', 'Yong ', 'Qing ', 'Ling ', 'Qi ', 'Zou ', 'Fei ', 'Kun ', 'Chang ', 'Gu ', 'Ni ', 'Nian ', 'Diao ', 'Jing ', 'Shen ', 'Shi ', 'Zi ', 'Fen ', 'Die ', 'Bi ', 'Chang ', 'Shi ', 'Wen ', 'Wei ', 'Sai ', 'E ', 'Qiu ', 'Fu ', 'Huang ', 'Quan ', 'Jiang ', 'Bian ', 'Sao ', 'Ao ', 'Qi ', 'Ta ', 'Yin ', 'Yao ', 'Fang ', 'Jian ', 'Le ', 'Biao ', 'Xue ', 'Bie ', 'Man ', 'Min ', 'Yong ', 'Wei ', 'Xi ', 'Jue ', 'Shan ', 'Lin ', 'Zun ', 'Huo ', 'Gan ', 'Li ', 'Zhan ', 'Guan ', 'Niao ', 'Yi ', 'Fu ', 'Li ', 'Jiu ', 'Bu ', 'Yan ', 'Fu ', 'Diao ', 'Ji ', 'Feng ', 'Nio ', 'Gan ', 'Shi ', 'Feng ', 'Ming ', 'Bao ', 'Yuan ', 'Zhi ', 'Hu ', 'Qin ', 'Fu ', 'Fen ', 'Wen ', 'Jian ', 'Shi ', 'Yu '];
<?php return ['Fou ', 'Yiao ', 'Jue ', 'Jue ', 'Pi ', 'Huan ', 'Zhen ', 'Bao ', 'Yan ', 'Ya ', 'Zheng ', 'Fang ', 'Feng ', 'Wen ', 'Ou ', 'Te ', 'Jia ', 'Nu ', 'Ling ', 'Mie ', 'Fu ', 'Tuo ', 'Wen ', 'Li ', 'Bian ', 'Zhi ', 'Ge ', 'Yuan ', 'Zi ', 'Qu ', 'Xiao ', 'Zhi ', 'Dan ', 'Ju ', 'You ', 'Gu ', 'Zhong ', 'Yu ', 'Yang ', 'Rong ', 'Ya ', 'Tie ', 'Yu ', 'Shigi ', 'Ying ', 'Zhui ', 'Wu ', 'Er ', 'Gua ', 'Ai ', 'Zhi ', 'Yan ', 'Heng ', 'Jiao ', 'Ji ', 'Lie ', 'Zhu ', 'Ren ', 'Yi ', 'Hong ', 'Luo ', 'Ru ', 'Mou ', 'Ge ', 'Ren ', 'Jiao ', 'Xiu ', 'Zhou ', 'Zhi ', 'Luo ', 'Chidori ', 'Toki ', 'Ten ', 'Luan ', 'Jia ', 'Ji ', 'Yu ', 'Huan ', 'Tuo ', 'Bu ', 'Wu ', 'Juan ', 'Yu ', 'Bo ', 'Xun ', 'Xun ', 'Bi ', 'Xi ', 'Jun ', 'Ju ', 'Tu ', 'Jing ', 'Ti ', 'E ', 'E ', 'Kuang ', 'Hu ', 'Wu ', 'Shen ', 'Lai ', 'Ikaruga ', 'Kakesu ', 'Lu ', 'Ping ', 'Shu ', 'Fu ', 'An ', 'Zhao ', 'Peng ', 'Qin ', 'Qian ', 'Bei ', 'Diao ', 'Lu ', 'Que ', 'Jian ', 'Ju ', 'Tu ', 'Ya ', 'Yuan ', 'Qi ', 'Li ', 'Ye ', 'Zhui ', 'Kong ', 'Zhui ', 'Kun ', 'Sheng ', 'Qi ', 'Jing ', 'Yi ', 'Yi ', 'Jing ', 'Zi ', 'Lai ', 'Dong ', 'Qi ', 'Chun ', 'Geng ', 'Ju ', 'Qu ', 'Isuka ', 'Kikuitadaki ', 'Ji ', 'Shu ', '[?] ', 'Chi ', 'Miao ', 'Rou ', 'An ', 'Qiu ', 'Ti ', 'Hu ', 'Ti ', 'E ', 'Jie ', 'Mao ', 'Fu ', 'Chun ', 'Tu ', 'Yan ', 'He ', 'Yuan ', 'Pian ', 'Yun ', 'Mei ', 'Hu ', 'Ying ', 'Dun ', 'Mu ', 'Ju ', 'Tsugumi ', 'Cang ', 'Fang ', 'Gu ', 'Ying ', 'Yuan ', 'Xuan ', 'Weng ', 'Shi ', 'He ', 'Chu ', 'Tang ', 'Xia ', 'Ruo ', 'Liu ', 'Ji ', 'Gu ', 'Jian ', 'Zhun ', 'Han ', 'Zi ', 'Zi ', 'Ni ', 'Yao ', 'Yan ', 'Ji ', 'Li ', 'Tian ', 'Kou ', 'Ti ', 'Ti ', 'Ni ', 'Tu ', 'Ma ', 'Jiao ', 'Gao ', 'Tian ', 'Chen ', 'Li ', 'Zhuan ', 'Zhe ', 'Ao ', 'Yao ', 'Yi ', 'Ou ', 'Chi ', 'Zhi ', 'Liao ', 'Rong ', 'Lou ', 'Bi ', 'Shuang ', 'Zhuo ', 'Yu ', 'Wu ', 'Jue ', 'Yin ', 'Quan ', 'Si ', 'Jiao ', 'Yi ', 'Hua ', 'Bi ', 'Ying ', 'Su ', 'Huang ', 'Fan ', 'Jiao ', 'Liao ', 'Yan ', 'Kao ', 'Jiu ', 'Xian ', 'Xian ', 'Tu ', 'Mai ', 'Zun ', 'Yu ', 'Ying ', 'Lu ', 'Tuan ', 'Xian ', 'Xue ', 'Yi ', 'Pi '];
<?php return ['Shu ', 'Luo ', 'Qi ', 'Yi ', 'Ji ', 'Zhe ', 'Yu ', 'Zhan ', 'Ye ', 'Yang ', 'Pi ', 'Ning ', 'Huo ', 'Mi ', 'Ying ', 'Meng ', 'Di ', 'Yue ', 'Yu ', 'Lei ', 'Bao ', 'Lu ', 'He ', 'Long ', 'Shuang ', 'Yue ', 'Ying ', 'Guan ', 'Qu ', 'Li ', 'Luan ', 'Niao ', 'Jiu ', 'Ji ', 'Yuan ', 'Ming ', 'Shi ', 'Ou ', 'Ya ', 'Cang ', 'Bao ', 'Zhen ', 'Gu ', 'Dong ', 'Lu ', 'Ya ', 'Xiao ', 'Yang ', 'Ling ', 'Zhi ', 'Qu ', 'Yuan ', 'Xue ', 'Tuo ', 'Si ', 'Zhi ', 'Er ', 'Gua ', 'Xiu ', 'Heng ', 'Zhou ', 'Ge ', 'Luan ', 'Hong ', 'Wu ', 'Bo ', 'Li ', 'Juan ', 'Hu ', 'E ', 'Yu ', 'Xian ', 'Ti ', 'Wu ', 'Que ', 'Miao ', 'An ', 'Kun ', 'Bei ', 'Peng ', 'Qian ', 'Chun ', 'Geng ', 'Yuan ', 'Su ', 'Hu ', 'He ', 'E ', 'Gu ', 'Qiu ', 'Zi ', 'Mei ', 'Mu ', 'Ni ', 'Yao ', 'Weng ', 'Liu ', 'Ji ', 'Ni ', 'Jian ', 'He ', 'Yi ', 'Ying ', 'Zhe ', 'Liao ', 'Liao ', 'Jiao ', 'Jiu ', 'Yu ', 'Lu ', 'Xuan ', 'Zhan ', 'Ying ', 'Huo ', 'Meng ', 'Guan ', 'Shuang ', 'Lu ', 'Jin ', 'Ling ', 'Jian ', 'Xian ', 'Cuo ', 'Jian ', 'Jian ', 'Yan ', 'Cuo ', 'Lu ', 'You ', 'Cu ', 'Ji ', 'Biao ', 'Cu ', 'Biao ', 'Zhu ', 'Jun ', 'Zhu ', 'Jian ', 'Mi ', 'Mi ', 'Wu ', 'Liu ', 'Chen ', 'Jun ', 'Lin ', 'Ni ', 'Qi ', 'Lu ', 'Jiu ', 'Jun ', 'Jing ', 'Li ', 'Xiang ', 'Yan ', 'Jia ', 'Mi ', 'Li ', 'She ', 'Zhang ', 'Lin ', 'Jing ', 'Ji ', 'Ling ', 'Yan ', 'Cu ', 'Mai ', 'Mai ', 'Ge ', 'Chao ', 'Fu ', 'Mian ', 'Mian ', 'Fu ', 'Pao ', 'Qu ', 'Qu ', 'Mou ', 'Fu ', 'Xian ', 'Lai ', 'Qu ', 'Mian ', '[?] ', 'Feng ', 'Fu ', 'Qu ', 'Mian ', 'Ma ', 'Mo ', 'Mo ', 'Hui ', 'Ma ', 'Zou ', 'Nen ', 'Fen ', 'Huang ', 'Huang ', 'Jin ', 'Guang ', 'Tian ', 'Tou ', 'Heng ', 'Xi ', 'Kuang ', 'Heng ', 'Shu ', 'Li ', 'Nian ', 'Chi ', 'Hei ', 'Hei ', 'Yi ', 'Qian ', 'Dan ', 'Xi ', 'Tuan ', 'Mo ', 'Mo ', 'Qian ', 'Dai ', 'Chu ', 'You ', 'Dian ', 'Yi ', 'Xia ', 'Yan ', 'Qu ', 'Mei ', 'Yan ', 'Jing ', 'Yu ', 'Li ', 'Dang ', 'Du ', 'Can ', 'Yin ', 'An ', 'Yan ', 'Tan ', 'An ', 'Zhen ', 'Dai ', 'Can ', 'Yi ', 'Mei ', 'Dan ', 'Yan ', 'Du ', 'Lu ', 'Zhi ', 'Fen ', 'Fu ', 'Fu ', 'Min ', 'Min ', 'Yuan '];
<?php return ['Cu ', 'Qu ', 'Chao ', 'Wa ', 'Zhu ', 'Zhi ', 'Mang ', 'Ao ', 'Bie ', 'Tuo ', 'Bi ', 'Yuan ', 'Chao ', 'Tuo ', 'Ding ', 'Mi ', 'Nai ', 'Ding ', 'Zi ', 'Gu ', 'Gu ', 'Dong ', 'Fen ', 'Tao ', 'Yuan ', 'Pi ', 'Chang ', 'Gao ', 'Qi ', 'Yuan ', 'Tang ', 'Teng ', 'Shu ', 'Shu ', 'Fen ', 'Fei ', 'Wen ', 'Ba ', 'Diao ', 'Tuo ', 'Tong ', 'Qu ', 'Sheng ', 'Shi ', 'You ', 'Shi ', 'Ting ', 'Wu ', 'Nian ', 'Jing ', 'Hun ', 'Ju ', 'Yan ', 'Tu ', 'Ti ', 'Xi ', 'Xian ', 'Yan ', 'Lei ', 'Bi ', 'Yao ', 'Qiu ', 'Han ', 'Wu ', 'Wu ', 'Hou ', 'Xi ', 'Ge ', 'Zha ', 'Xiu ', 'Weng ', 'Zha ', 'Nong ', 'Nang ', 'Qi ', 'Zhai ', 'Ji ', 'Zi ', 'Ji ', 'Ji ', 'Qi ', 'Ji ', 'Chi ', 'Chen ', 'Chen ', 'He ', 'Ya ', 'Ken ', 'Xie ', 'Pao ', 'Cuo ', 'Shi ', 'Zi ', 'Chi ', 'Nian ', 'Ju ', 'Tiao ', 'Ling ', 'Ling ', 'Chu ', 'Quan ', 'Xie ', 'Ken ', 'Nie ', 'Jiu ', 'Yao ', 'Chuo ', 'Kun ', 'Yu ', 'Chu ', 'Yi ', 'Ni ', 'Cuo ', 'Zou ', 'Qu ', 'Nen ', 'Xian ', 'Ou ', 'E ', 'Wo ', 'Yi ', 'Chuo ', 'Zou ', 'Dian ', 'Chu ', 'Jin ', 'Ya ', 'Chi ', 'Chen ', 'He ', 'Ken ', 'Ju ', 'Ling ', 'Pao ', 'Tiao ', 'Zi ', 'Ken ', 'Yu ', 'Chuo ', 'Qu ', 'Wo ', 'Long ', 'Pang ', 'Gong ', 'Pang ', 'Yan ', 'Long ', 'Long ', 'Gong ', 'Kan ', 'Ta ', 'Ling ', 'Ta ', 'Long ', 'Gong ', 'Kan ', 'Gui ', 'Qiu ', 'Bie ', 'Gui ', 'Yue ', 'Chui ', 'He ', 'Jue ', 'Xie ', 'Yu ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['it', 'ix', 'i', 'ip', 'iet', 'iex', 'ie', 'iep', 'at', 'ax', 'a', 'ap', 'uox', 'uo', 'uop', 'ot', 'ox', 'o', 'op', 'ex', 'e', 'wu', 'bit', 'bix', 'bi', 'bip', 'biet', 'biex', 'bie', 'biep', 'bat', 'bax', 'ba', 'bap', 'buox', 'buo', 'buop', 'bot', 'box', 'bo', 'bop', 'bex', 'be', 'bep', 'but', 'bux', 'bu', 'bup', 'burx', 'bur', 'byt', 'byx', 'by', 'byp', 'byrx', 'byr', 'pit', 'pix', 'pi', 'pip', 'piex', 'pie', 'piep', 'pat', 'pax', 'pa', 'pap', 'puox', 'puo', 'puop', 'pot', 'pox', 'po', 'pop', 'put', 'pux', 'pu', 'pup', 'purx', 'pur', 'pyt', 'pyx', 'py', 'pyp', 'pyrx', 'pyr', 'bbit', 'bbix', 'bbi', 'bbip', 'bbiet', 'bbiex', 'bbie', 'bbiep', 'bbat', 'bbax', 'bba', 'bbap', 'bbuox', 'bbuo', 'bbuop', 'bbot', 'bbox', 'bbo', 'bbop', 'bbex', 'bbe', 'bbep', 'bbut', 'bbux', 'bbu', 'bbup', 'bburx', 'bbur', 'bbyt', 'bbyx', 'bby', 'bbyp', 'nbit', 'nbix', 'nbi', 'nbip', 'nbiex', 'nbie', 'nbiep', 'nbat', 'nbax', 'nba', 'nbap', 'nbot', 'nbox', 'nbo', 'nbop', 'nbut', 'nbux', 'nbu', 'nbup', 'nburx', 'nbur', 'nbyt', 'nbyx', 'nby', 'nbyp', 'nbyrx', 'nbyr', 'hmit', 'hmix', 'hmi', 'hmip', 'hmiex', 'hmie', 'hmiep', 'hmat', 'hmax', 'hma', 'hmap', 'hmuox', 'hmuo', 'hmuop', 'hmot', 'hmox', 'hmo', 'hmop', 'hmut', 'hmux', 'hmu', 'hmup', 'hmurx', 'hmur', 'hmyx', 'hmy', 'hmyp', 'hmyrx', 'hmyr', 'mit', 'mix', 'mi', 'mip', 'miex', 'mie', 'miep', 'mat', 'max', 'ma', 'map', 'muot', 'muox', 'muo', 'muop', 'mot', 'mox', 'mo', 'mop', 'mex', 'me', 'mut', 'mux', 'mu', 'mup', 'murx', 'mur', 'myt', 'myx', 'my', 'myp', 'fit', 'fix', 'fi', 'fip', 'fat', 'fax', 'fa', 'fap', 'fox', 'fo', 'fop', 'fut', 'fux', 'fu', 'fup', 'furx', 'fur', 'fyt', 'fyx', 'fy', 'fyp', 'vit', 'vix', 'vi', 'vip', 'viet', 'viex', 'vie', 'viep', 'vat', 'vax', 'va', 'vap', 'vot', 'vox', 'vo', 'vop', 'vex', 'vep', 'vut', 'vux', 'vu', 'vup', 'vurx', 'vur', 'vyt', 'vyx', 'vy', 'vyp', 'vyrx', 'vyr'];
<?php return ['dit', 'dix', 'di', 'dip', 'diex', 'die', 'diep', 'dat', 'dax', 'da', 'dap', 'duox', 'duo', 'dot', 'dox', 'do', 'dop', 'dex', 'de', 'dep', 'dut', 'dux', 'du', 'dup', 'durx', 'dur', 'tit', 'tix', 'ti', 'tip', 'tiex', 'tie', 'tiep', 'tat', 'tax', 'ta', 'tap', 'tuot', 'tuox', 'tuo', 'tuop', 'tot', 'tox', 'to', 'top', 'tex', 'te', 'tep', 'tut', 'tux', 'tu', 'tup', 'turx', 'tur', 'ddit', 'ddix', 'ddi', 'ddip', 'ddiex', 'ddie', 'ddiep', 'ddat', 'ddax', 'dda', 'ddap', 'dduox', 'dduo', 'dduop', 'ddot', 'ddox', 'ddo', 'ddop', 'ddex', 'dde', 'ddep', 'ddut', 'ddux', 'ddu', 'ddup', 'ddurx', 'ddur', 'ndit', 'ndix', 'ndi', 'ndip', 'ndiex', 'ndie', 'ndat', 'ndax', 'nda', 'ndap', 'ndot', 'ndox', 'ndo', 'ndop', 'ndex', 'nde', 'ndep', 'ndut', 'ndux', 'ndu', 'ndup', 'ndurx', 'ndur', 'hnit', 'hnix', 'hni', 'hnip', 'hniet', 'hniex', 'hnie', 'hniep', 'hnat', 'hnax', 'hna', 'hnap', 'hnuox', 'hnuo', 'hnot', 'hnox', 'hnop', 'hnex', 'hne', 'hnep', 'hnut', 'nit', 'nix', 'ni', 'nip', 'niex', 'nie', 'niep', 'nax', 'na', 'nap', 'nuox', 'nuo', 'nuop', 'not', 'nox', 'no', 'nop', 'nex', 'ne', 'nep', 'nut', 'nux', 'nu', 'nup', 'nurx', 'nur', 'hlit', 'hlix', 'hli', 'hlip', 'hliex', 'hlie', 'hliep', 'hlat', 'hlax', 'hla', 'hlap', 'hluox', 'hluo', 'hluop', 'hlox', 'hlo', 'hlop', 'hlex', 'hle', 'hlep', 'hlut', 'hlux', 'hlu', 'hlup', 'hlurx', 'hlur', 'hlyt', 'hlyx', 'hly', 'hlyp', 'hlyrx', 'hlyr', 'lit', 'lix', 'li', 'lip', 'liet', 'liex', 'lie', 'liep', 'lat', 'lax', 'la', 'lap', 'luot', 'luox', 'luo', 'luop', 'lot', 'lox', 'lo', 'lop', 'lex', 'le', 'lep', 'lut', 'lux', 'lu', 'lup', 'lurx', 'lur', 'lyt', 'lyx', 'ly', 'lyp', 'lyrx', 'lyr', 'git', 'gix', 'gi', 'gip', 'giet', 'giex', 'gie', 'giep', 'gat', 'gax', 'ga', 'gap', 'guot', 'guox', 'guo', 'guop', 'got', 'gox', 'go', 'gop', 'get', 'gex', 'ge', 'gep', 'gut', 'gux', 'gu', 'gup', 'gurx', 'gur', 'kit', 'kix', 'ki', 'kip', 'kiex', 'kie', 'kiep', 'kat'];
<?php return ['kax', 'ka', 'kap', 'kuox', 'kuo', 'kuop', 'kot', 'kox', 'ko', 'kop', 'ket', 'kex', 'ke', 'kep', 'kut', 'kux', 'ku', 'kup', 'kurx', 'kur', 'ggit', 'ggix', 'ggi', 'ggiex', 'ggie', 'ggiep', 'ggat', 'ggax', 'gga', 'ggap', 'gguot', 'gguox', 'gguo', 'gguop', 'ggot', 'ggox', 'ggo', 'ggop', 'gget', 'ggex', 'gge', 'ggep', 'ggut', 'ggux', 'ggu', 'ggup', 'ggurx', 'ggur', 'mgiex', 'mgie', 'mgat', 'mgax', 'mga', 'mgap', 'mguox', 'mguo', 'mguop', 'mgot', 'mgox', 'mgo', 'mgop', 'mgex', 'mge', 'mgep', 'mgut', 'mgux', 'mgu', 'mgup', 'mgurx', 'mgur', 'hxit', 'hxix', 'hxi', 'hxip', 'hxiet', 'hxiex', 'hxie', 'hxiep', 'hxat', 'hxax', 'hxa', 'hxap', 'hxuot', 'hxuox', 'hxuo', 'hxuop', 'hxot', 'hxox', 'hxo', 'hxop', 'hxex', 'hxe', 'hxep', 'ngiex', 'ngie', 'ngiep', 'ngat', 'ngax', 'nga', 'ngap', 'nguot', 'nguox', 'nguo', 'ngot', 'ngox', 'ngo', 'ngop', 'ngex', 'nge', 'ngep', 'hit', 'hiex', 'hie', 'hat', 'hax', 'ha', 'hap', 'huot', 'huox', 'huo', 'huop', 'hot', 'hox', 'ho', 'hop', 'hex', 'he', 'hep', 'wat', 'wax', 'wa', 'wap', 'wuox', 'wuo', 'wuop', 'wox', 'wo', 'wop', 'wex', 'we', 'wep', 'zit', 'zix', 'zi', 'zip', 'ziex', 'zie', 'ziep', 'zat', 'zax', 'za', 'zap', 'zuox', 'zuo', 'zuop', 'zot', 'zox', 'zo', 'zop', 'zex', 'ze', 'zep', 'zut', 'zux', 'zu', 'zup', 'zurx', 'zur', 'zyt', 'zyx', 'zy', 'zyp', 'zyrx', 'zyr', 'cit', 'cix', 'ci', 'cip', 'ciet', 'ciex', 'cie', 'ciep', 'cat', 'cax', 'ca', 'cap', 'cuox', 'cuo', 'cuop', 'cot', 'cox', 'co', 'cop', 'cex', 'ce', 'cep', 'cut', 'cux', 'cu', 'cup', 'curx', 'cur', 'cyt', 'cyx', 'cy', 'cyp', 'cyrx', 'cyr', 'zzit', 'zzix', 'zzi', 'zzip', 'zziet', 'zziex', 'zzie', 'zziep', 'zzat', 'zzax', 'zza', 'zzap', 'zzox', 'zzo', 'zzop', 'zzex', 'zze', 'zzep', 'zzux', 'zzu', 'zzup', 'zzurx', 'zzur', 'zzyt', 'zzyx', 'zzy', 'zzyp', 'zzyrx', 'zzyr', 'nzit', 'nzix', 'nzi', 'nzip', 'nziex', 'nzie', 'nziep', 'nzat', 'nzax', 'nza', 'nzap', 'nzuox', 'nzuo', 'nzox', 'nzop', 'nzex', 'nze', 'nzux', 'nzu'];
<?php return ['nzup', 'nzurx', 'nzur', 'nzyt', 'nzyx', 'nzy', 'nzyp', 'nzyrx', 'nzyr', 'sit', 'six', 'si', 'sip', 'siex', 'sie', 'siep', 'sat', 'sax', 'sa', 'sap', 'suox', 'suo', 'suop', 'sot', 'sox', 'so', 'sop', 'sex', 'se', 'sep', 'sut', 'sux', 'su', 'sup', 'surx', 'sur', 'syt', 'syx', 'sy', 'syp', 'syrx', 'syr', 'ssit', 'ssix', 'ssi', 'ssip', 'ssiex', 'ssie', 'ssiep', 'ssat', 'ssax', 'ssa', 'ssap', 'ssot', 'ssox', 'sso', 'ssop', 'ssex', 'sse', 'ssep', 'ssut', 'ssux', 'ssu', 'ssup', 'ssyt', 'ssyx', 'ssy', 'ssyp', 'ssyrx', 'ssyr', 'zhat', 'zhax', 'zha', 'zhap', 'zhuox', 'zhuo', 'zhuop', 'zhot', 'zhox', 'zho', 'zhop', 'zhet', 'zhex', 'zhe', 'zhep', 'zhut', 'zhux', 'zhu', 'zhup', 'zhurx', 'zhur', 'zhyt', 'zhyx', 'zhy', 'zhyp', 'zhyrx', 'zhyr', 'chat', 'chax', 'cha', 'chap', 'chuot', 'chuox', 'chuo', 'chuop', 'chot', 'chox', 'cho', 'chop', 'chet', 'chex', 'che', 'chep', 'chux', 'chu', 'chup', 'churx', 'chur', 'chyt', 'chyx', 'chy', 'chyp', 'chyrx', 'chyr', 'rrax', 'rra', 'rruox', 'rruo', 'rrot', 'rrox', 'rro', 'rrop', 'rret', 'rrex', 'rre', 'rrep', 'rrut', 'rrux', 'rru', 'rrup', 'rrurx', 'rrur', 'rryt', 'rryx', 'rry', 'rryp', 'rryrx', 'rryr', 'nrat', 'nrax', 'nra', 'nrap', 'nrox', 'nro', 'nrop', 'nret', 'nrex', 'nre', 'nrep', 'nrut', 'nrux', 'nru', 'nrup', 'nrurx', 'nrur', 'nryt', 'nryx', 'nry', 'nryp', 'nryrx', 'nryr', 'shat', 'shax', 'sha', 'shap', 'shuox', 'shuo', 'shuop', 'shot', 'shox', 'sho', 'shop', 'shet', 'shex', 'she', 'shep', 'shut', 'shux', 'shu', 'shup', 'shurx', 'shur', 'shyt', 'shyx', 'shy', 'shyp', 'shyrx', 'shyr', 'rat', 'rax', 'ra', 'rap', 'ruox', 'ruo', 'ruop', 'rot', 'rox', 'ro', 'rop', 'rex', 're', 'rep', 'rut', 'rux', 'ru', 'rup', 'rurx', 'rur', 'ryt', 'ryx', 'ry', 'ryp', 'ryrx', 'ryr', 'jit', 'jix', 'ji', 'jip', 'jiet', 'jiex', 'jie', 'jiep', 'juot', 'juox', 'juo', 'juop', 'jot', 'jox', 'jo', 'jop', 'jut', 'jux', 'ju', 'jup', 'jurx', 'jur', 'jyt', 'jyx', 'jy', 'jyp', 'jyrx', 'jyr', 'qit', 'qix', 'qi', 'qip'];
<?php return ['qiet', 'qiex', 'qie', 'qiep', 'quot', 'quox', 'quo', 'quop', 'qot', 'qox', 'qo', 'qop', 'qut', 'qux', 'qu', 'qup', 'qurx', 'qur', 'qyt', 'qyx', 'qy', 'qyp', 'qyrx', 'qyr', 'jjit', 'jjix', 'jji', 'jjip', 'jjiet', 'jjiex', 'jjie', 'jjiep', 'jjuox', 'jjuo', 'jjuop', 'jjot', 'jjox', 'jjo', 'jjop', 'jjut', 'jjux', 'jju', 'jjup', 'jjurx', 'jjur', 'jjyt', 'jjyx', 'jjy', 'jjyp', 'njit', 'njix', 'nji', 'njip', 'njiet', 'njiex', 'njie', 'njiep', 'njuox', 'njuo', 'njot', 'njox', 'njo', 'njop', 'njux', 'nju', 'njup', 'njurx', 'njur', 'njyt', 'njyx', 'njy', 'njyp', 'njyrx', 'njyr', 'nyit', 'nyix', 'nyi', 'nyip', 'nyiet', 'nyiex', 'nyie', 'nyiep', 'nyuox', 'nyuo', 'nyuop', 'nyot', 'nyox', 'nyo', 'nyop', 'nyut', 'nyux', 'nyu', 'nyup', 'xit', 'xix', 'xi', 'xip', 'xiet', 'xiex', 'xie', 'xiep', 'xuox', 'xuo', 'xot', 'xox', 'xo', 'xop', 'xyt', 'xyx', 'xy', 'xyp', 'xyrx', 'xyr', 'yit', 'yix', 'yi', 'yip', 'yiet', 'yiex', 'yie', 'yiep', 'yuot', 'yuox', 'yuo', 'yuop', 'yot', 'yox', 'yo', 'yop', 'yut', 'yux', 'yu', 'yup', 'yurx', 'yur', 'yyt', 'yyx', 'yy', 'yyp', 'yyrx', 'yyr', '[?]', '[?]', '[?]', 'Qot', 'Li', 'Kit', 'Nyip', 'Cyp', 'Ssi', 'Ggop', 'Gep', 'Mi', 'Hxit', 'Lyr', 'Bbut', 'Mop', 'Yo', 'Put', 'Hxuo', 'Tat', 'Ga', '[?]', '[?]', 'Ddur', 'Bur', 'Gguo', 'Nyop', 'Tu', 'Op', 'Jjut', 'Zot', 'Pyt', 'Hmo', 'Yit', 'Vur', 'Shy', 'Vep', 'Za', 'Jo', '[?]', 'Jjy', 'Got', 'Jjie', 'Wo', 'Du', 'Shur', 'Lie', 'Cy', 'Cuop', 'Cip', 'Hxop', 'Shat', '[?]', 'Shop', 'Che', 'Zziet', '[?]', 'Ke', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['ga', 'gag', 'gagg', 'gags', 'gan', 'ganj', 'ganh', 'gad', 'gal', 'galg', 'galm', 'galb', 'gals', 'galt', 'galp', 'galh', 'gam', 'gab', 'gabs', 'gas', 'gass', 'gang', 'gaj', 'gac', 'gak', 'gat', 'gap', 'gah', 'gae', 'gaeg', 'gaegg', 'gaegs', 'gaen', 'gaenj', 'gaenh', 'gaed', 'gael', 'gaelg', 'gaelm', 'gaelb', 'gaels', 'gaelt', 'gaelp', 'gaelh', 'gaem', 'gaeb', 'gaebs', 'gaes', 'gaess', 'gaeng', 'gaej', 'gaec', 'gaek', 'gaet', 'gaep', 'gaeh', 'gya', 'gyag', 'gyagg', 'gyags', 'gyan', 'gyanj', 'gyanh', 'gyad', 'gyal', 'gyalg', 'gyalm', 'gyalb', 'gyals', 'gyalt', 'gyalp', 'gyalh', 'gyam', 'gyab', 'gyabs', 'gyas', 'gyass', 'gyang', 'gyaj', 'gyac', 'gyak', 'gyat', 'gyap', 'gyah', 'gyae', 'gyaeg', 'gyaegg', 'gyaegs', 'gyaen', 'gyaenj', 'gyaenh', 'gyaed', 'gyael', 'gyaelg', 'gyaelm', 'gyaelb', 'gyaels', 'gyaelt', 'gyaelp', 'gyaelh', 'gyaem', 'gyaeb', 'gyaebs', 'gyaes', 'gyaess', 'gyaeng', 'gyaej', 'gyaec', 'gyaek', 'gyaet', 'gyaep', 'gyaeh', 'geo', 'geog', 'geogg', 'geogs', 'geon', 'geonj', 'geonh', 'geod', 'geol', 'geolg', 'geolm', 'geolb', 'geols', 'geolt', 'geolp', 'geolh', 'geom', 'geob', 'geobs', 'geos', 'geoss', 'geong', 'geoj', 'geoc', 'geok', 'geot', 'geop', 'geoh', 'ge', 'geg', 'gegg', 'gegs', 'gen', 'genj', 'genh', 'ged', 'gel', 'gelg', 'gelm', 'gelb', 'gels', 'gelt', 'gelp', 'gelh', 'gem', 'geb', 'gebs', 'ges', 'gess', 'geng', 'gej', 'gec', 'gek', 'get', 'gep', 'geh', 'gyeo', 'gyeog', 'gyeogg', 'gyeogs', 'gyeon', 'gyeonj', 'gyeonh', 'gyeod', 'gyeol', 'gyeolg', 'gyeolm', 'gyeolb', 'gyeols', 'gyeolt', 'gyeolp', 'gyeolh', 'gyeom', 'gyeob', 'gyeobs', 'gyeos', 'gyeoss', 'gyeong', 'gyeoj', 'gyeoc', 'gyeok', 'gyeot', 'gyeop', 'gyeoh', 'gye', 'gyeg', 'gyegg', 'gyegs', 'gyen', 'gyenj', 'gyenh', 'gyed', 'gyel', 'gyelg', 'gyelm', 'gyelb', 'gyels', 'gyelt', 'gyelp', 'gyelh', 'gyem', 'gyeb', 'gyebs', 'gyes', 'gyess', 'gyeng', 'gyej', 'gyec', 'gyek', 'gyet', 'gyep', 'gyeh', 'go', 'gog', 'gogg', 'gogs', 'gon', 'gonj', 'gonh', 'god', 'gol', 'golg', 'golm', 'golb', 'gols', 'golt', 'golp', 'golh', 'gom', 'gob', 'gobs', 'gos', 'goss', 'gong', 'goj', 'goc', 'gok', 'got', 'gop', 'goh', 'gwa', 'gwag', 'gwagg', 'gwags'];
<?php return ['gwan', 'gwanj', 'gwanh', 'gwad', 'gwal', 'gwalg', 'gwalm', 'gwalb', 'gwals', 'gwalt', 'gwalp', 'gwalh', 'gwam', 'gwab', 'gwabs', 'gwas', 'gwass', 'gwang', 'gwaj', 'gwac', 'gwak', 'gwat', 'gwap', 'gwah', 'gwae', 'gwaeg', 'gwaegg', 'gwaegs', 'gwaen', 'gwaenj', 'gwaenh', 'gwaed', 'gwael', 'gwaelg', 'gwaelm', 'gwaelb', 'gwaels', 'gwaelt', 'gwaelp', 'gwaelh', 'gwaem', 'gwaeb', 'gwaebs', 'gwaes', 'gwaess', 'gwaeng', 'gwaej', 'gwaec', 'gwaek', 'gwaet', 'gwaep', 'gwaeh', 'goe', 'goeg', 'goegg', 'goegs', 'goen', 'goenj', 'goenh', 'goed', 'goel', 'goelg', 'goelm', 'goelb', 'goels', 'goelt', 'goelp', 'goelh', 'goem', 'goeb', 'goebs', 'goes', 'goess', 'goeng', 'goej', 'goec', 'goek', 'goet', 'goep', 'goeh', 'gyo', 'gyog', 'gyogg', 'gyogs', 'gyon', 'gyonj', 'gyonh', 'gyod', 'gyol', 'gyolg', 'gyolm', 'gyolb', 'gyols', 'gyolt', 'gyolp', 'gyolh', 'gyom', 'gyob', 'gyobs', 'gyos', 'gyoss', 'gyong', 'gyoj', 'gyoc', 'gyok', 'gyot', 'gyop', 'gyoh', 'gu', 'gug', 'gugg', 'gugs', 'gun', 'gunj', 'gunh', 'gud', 'gul', 'gulg', 'gulm', 'gulb', 'guls', 'gult', 'gulp', 'gulh', 'gum', 'gub', 'gubs', 'gus', 'guss', 'gung', 'guj', 'guc', 'guk', 'gut', 'gup', 'guh', 'gweo', 'gweog', 'gweogg', 'gweogs', 'gweon', 'gweonj', 'gweonh', 'gweod', 'gweol', 'gweolg', 'gweolm', 'gweolb', 'gweols', 'gweolt', 'gweolp', 'gweolh', 'gweom', 'gweob', 'gweobs', 'gweos', 'gweoss', 'gweong', 'gweoj', 'gweoc', 'gweok', 'gweot', 'gweop', 'gweoh', 'gwe', 'gweg', 'gwegg', 'gwegs', 'gwen', 'gwenj', 'gwenh', 'gwed', 'gwel', 'gwelg', 'gwelm', 'gwelb', 'gwels', 'gwelt', 'gwelp', 'gwelh', 'gwem', 'gweb', 'gwebs', 'gwes', 'gwess', 'gweng', 'gwej', 'gwec', 'gwek', 'gwet', 'gwep', 'gweh', 'gwi', 'gwig', 'gwigg', 'gwigs', 'gwin', 'gwinj', 'gwinh', 'gwid', 'gwil', 'gwilg', 'gwilm', 'gwilb', 'gwils', 'gwilt', 'gwilp', 'gwilh', 'gwim', 'gwib', 'gwibs', 'gwis', 'gwiss', 'gwing', 'gwij', 'gwic', 'gwik', 'gwit', 'gwip', 'gwih', 'gyu', 'gyug', 'gyugg', 'gyugs', 'gyun', 'gyunj', 'gyunh', 'gyud', 'gyul', 'gyulg', 'gyulm', 'gyulb', 'gyuls', 'gyult', 'gyulp', 'gyulh', 'gyum', 'gyub', 'gyubs', 'gyus', 'gyuss', 'gyung', 'gyuj', 'gyuc', 'gyuk', 'gyut', 'gyup', 'gyuh', 'geu', 'geug', 'geugg', 'geugs', 'geun', 'geunj', 'geunh', 'geud'];
<?php return ['geul', 'geulg', 'geulm', 'geulb', 'geuls', 'geult', 'geulp', 'geulh', 'geum', 'geub', 'geubs', 'geus', 'geuss', 'geung', 'geuj', 'geuc', 'geuk', 'geut', 'geup', 'geuh', 'gyi', 'gyig', 'gyigg', 'gyigs', 'gyin', 'gyinj', 'gyinh', 'gyid', 'gyil', 'gyilg', 'gyilm', 'gyilb', 'gyils', 'gyilt', 'gyilp', 'gyilh', 'gyim', 'gyib', 'gyibs', 'gyis', 'gyiss', 'gying', 'gyij', 'gyic', 'gyik', 'gyit', 'gyip', 'gyih', 'gi', 'gig', 'gigg', 'gigs', 'gin', 'ginj', 'ginh', 'gid', 'gil', 'gilg', 'gilm', 'gilb', 'gils', 'gilt', 'gilp', 'gilh', 'gim', 'gib', 'gibs', 'gis', 'giss', 'ging', 'gij', 'gic', 'gik', 'git', 'gip', 'gih', 'gga', 'ggag', 'ggagg', 'ggags', 'ggan', 'gganj', 'gganh', 'ggad', 'ggal', 'ggalg', 'ggalm', 'ggalb', 'ggals', 'ggalt', 'ggalp', 'ggalh', 'ggam', 'ggab', 'ggabs', 'ggas', 'ggass', 'ggang', 'ggaj', 'ggac', 'ggak', 'ggat', 'ggap', 'ggah', 'ggae', 'ggaeg', 'ggaegg', 'ggaegs', 'ggaen', 'ggaenj', 'ggaenh', 'ggaed', 'ggael', 'ggaelg', 'ggaelm', 'ggaelb', 'ggaels', 'ggaelt', 'ggaelp', 'ggaelh', 'ggaem', 'ggaeb', 'ggaebs', 'ggaes', 'ggaess', 'ggaeng', 'ggaej', 'ggaec', 'ggaek', 'ggaet', 'ggaep', 'ggaeh', 'ggya', 'ggyag', 'ggyagg', 'ggyags', 'ggyan', 'ggyanj', 'ggyanh', 'ggyad', 'ggyal', 'ggyalg', 'ggyalm', 'ggyalb', 'ggyals', 'ggyalt', 'ggyalp', 'ggyalh', 'ggyam', 'ggyab', 'ggyabs', 'ggyas', 'ggyass', 'ggyang', 'ggyaj', 'ggyac', 'ggyak', 'ggyat', 'ggyap', 'ggyah', 'ggyae', 'ggyaeg', 'ggyaegg', 'ggyaegs', 'ggyaen', 'ggyaenj', 'ggyaenh', 'ggyaed', 'ggyael', 'ggyaelg', 'ggyaelm', 'ggyaelb', 'ggyaels', 'ggyaelt', 'ggyaelp', 'ggyaelh', 'ggyaem', 'ggyaeb', 'ggyaebs', 'ggyaes', 'ggyaess', 'ggyaeng', 'ggyaej', 'ggyaec', 'ggyaek', 'ggyaet', 'ggyaep', 'ggyaeh', 'ggeo', 'ggeog', 'ggeogg', 'ggeogs', 'ggeon', 'ggeonj', 'ggeonh', 'ggeod', 'ggeol', 'ggeolg', 'ggeolm', 'ggeolb', 'ggeols', 'ggeolt', 'ggeolp', 'ggeolh', 'ggeom', 'ggeob', 'ggeobs', 'ggeos', 'ggeoss', 'ggeong', 'ggeoj', 'ggeoc', 'ggeok', 'ggeot', 'ggeop', 'ggeoh', 'gge', 'ggeg', 'ggegg', 'ggegs', 'ggen', 'ggenj', 'ggenh', 'gged', 'ggel', 'ggelg', 'ggelm', 'ggelb', 'ggels', 'ggelt', 'ggelp', 'ggelh', 'ggem', 'ggeb', 'ggebs', 'gges', 'ggess', 'ggeng', 'ggej', 'ggec', 'ggek', 'gget', 'ggep', 'ggeh', 'ggyeo', 'ggyeog', 'ggyeogg', 'ggyeogs', 'ggyeon', 'ggyeonj', 'ggyeonh', 'ggyeod', 'ggyeol', 'ggyeolg', 'ggyeolm', 'ggyeolb'];
<?php return ['ggyeols', 'ggyeolt', 'ggyeolp', 'ggyeolh', 'ggyeom', 'ggyeob', 'ggyeobs', 'ggyeos', 'ggyeoss', 'ggyeong', 'ggyeoj', 'ggyeoc', 'ggyeok', 'ggyeot', 'ggyeop', 'ggyeoh', 'ggye', 'ggyeg', 'ggyegg', 'ggyegs', 'ggyen', 'ggyenj', 'ggyenh', 'ggyed', 'ggyel', 'ggyelg', 'ggyelm', 'ggyelb', 'ggyels', 'ggyelt', 'ggyelp', 'ggyelh', 'ggyem', 'ggyeb', 'ggyebs', 'ggyes', 'ggyess', 'ggyeng', 'ggyej', 'ggyec', 'ggyek', 'ggyet', 'ggyep', 'ggyeh', 'ggo', 'ggog', 'ggogg', 'ggogs', 'ggon', 'ggonj', 'ggonh', 'ggod', 'ggol', 'ggolg', 'ggolm', 'ggolb', 'ggols', 'ggolt', 'ggolp', 'ggolh', 'ggom', 'ggob', 'ggobs', 'ggos', 'ggoss', 'ggong', 'ggoj', 'ggoc', 'ggok', 'ggot', 'ggop', 'ggoh', 'ggwa', 'ggwag', 'ggwagg', 'ggwags', 'ggwan', 'ggwanj', 'ggwanh', 'ggwad', 'ggwal', 'ggwalg', 'ggwalm', 'ggwalb', 'ggwals', 'ggwalt', 'ggwalp', 'ggwalh', 'ggwam', 'ggwab', 'ggwabs', 'ggwas', 'ggwass', 'ggwang', 'ggwaj', 'ggwac', 'ggwak', 'ggwat', 'ggwap', 'ggwah', 'ggwae', 'ggwaeg', 'ggwaegg', 'ggwaegs', 'ggwaen', 'ggwaenj', 'ggwaenh', 'ggwaed', 'ggwael', 'ggwaelg', 'ggwaelm', 'ggwaelb', 'ggwaels', 'ggwaelt', 'ggwaelp', 'ggwaelh', 'ggwaem', 'ggwaeb', 'ggwaebs', 'ggwaes', 'ggwaess', 'ggwaeng', 'ggwaej', 'ggwaec', 'ggwaek', 'ggwaet', 'ggwaep', 'ggwaeh', 'ggoe', 'ggoeg', 'ggoegg', 'ggoegs', 'ggoen', 'ggoenj', 'ggoenh', 'ggoed', 'ggoel', 'ggoelg', 'ggoelm', 'ggoelb', 'ggoels', 'ggoelt', 'ggoelp', 'ggoelh', 'ggoem', 'ggoeb', 'ggoebs', 'ggoes', 'ggoess', 'ggoeng', 'ggoej', 'ggoec', 'ggoek', 'ggoet', 'ggoep', 'ggoeh', 'ggyo', 'ggyog', 'ggyogg', 'ggyogs', 'ggyon', 'ggyonj', 'ggyonh', 'ggyod', 'ggyol', 'ggyolg', 'ggyolm', 'ggyolb', 'ggyols', 'ggyolt', 'ggyolp', 'ggyolh', 'ggyom', 'ggyob', 'ggyobs', 'ggyos', 'ggyoss', 'ggyong', 'ggyoj', 'ggyoc', 'ggyok', 'ggyot', 'ggyop', 'ggyoh', 'ggu', 'ggug', 'ggugg', 'ggugs', 'ggun', 'ggunj', 'ggunh', 'ggud', 'ggul', 'ggulg', 'ggulm', 'ggulb', 'gguls', 'ggult', 'ggulp', 'ggulh', 'ggum', 'ggub', 'ggubs', 'ggus', 'gguss', 'ggung', 'gguj', 'gguc', 'gguk', 'ggut', 'ggup', 'gguh', 'ggweo', 'ggweog', 'ggweogg', 'ggweogs', 'ggweon', 'ggweonj', 'ggweonh', 'ggweod', 'ggweol', 'ggweolg', 'ggweolm', 'ggweolb', 'ggweols', 'ggweolt', 'ggweolp', 'ggweolh', 'ggweom', 'ggweob', 'ggweobs', 'ggweos', 'ggweoss', 'ggweong', 'ggweoj', 'ggweoc', 'ggweok', 'ggweot', 'ggweop', 'ggweoh', 'ggwe', 'ggweg', 'ggwegg', 'ggwegs', 'ggwen', 'ggwenj', 'ggwenh', 'ggwed', 'ggwel', 'ggwelg', 'ggwelm', 'ggwelb', 'ggwels', 'ggwelt', 'ggwelp', 'ggwelh'];
<?php return ['ggwem', 'ggweb', 'ggwebs', 'ggwes', 'ggwess', 'ggweng', 'ggwej', 'ggwec', 'ggwek', 'ggwet', 'ggwep', 'ggweh', 'ggwi', 'ggwig', 'ggwigg', 'ggwigs', 'ggwin', 'ggwinj', 'ggwinh', 'ggwid', 'ggwil', 'ggwilg', 'ggwilm', 'ggwilb', 'ggwils', 'ggwilt', 'ggwilp', 'ggwilh', 'ggwim', 'ggwib', 'ggwibs', 'ggwis', 'ggwiss', 'ggwing', 'ggwij', 'ggwic', 'ggwik', 'ggwit', 'ggwip', 'ggwih', 'ggyu', 'ggyug', 'ggyugg', 'ggyugs', 'ggyun', 'ggyunj', 'ggyunh', 'ggyud', 'ggyul', 'ggyulg', 'ggyulm', 'ggyulb', 'ggyuls', 'ggyult', 'ggyulp', 'ggyulh', 'ggyum', 'ggyub', 'ggyubs', 'ggyus', 'ggyuss', 'ggyung', 'ggyuj', 'ggyuc', 'ggyuk', 'ggyut', 'ggyup', 'ggyuh', 'ggeu', 'ggeug', 'ggeugg', 'ggeugs', 'ggeun', 'ggeunj', 'ggeunh', 'ggeud', 'ggeul', 'ggeulg', 'ggeulm', 'ggeulb', 'ggeuls', 'ggeult', 'ggeulp', 'ggeulh', 'ggeum', 'ggeub', 'ggeubs', 'ggeus', 'ggeuss', 'ggeung', 'ggeuj', 'ggeuc', 'ggeuk', 'ggeut', 'ggeup', 'ggeuh', 'ggyi', 'ggyig', 'ggyigg', 'ggyigs', 'ggyin', 'ggyinj', 'ggyinh', 'ggyid', 'ggyil', 'ggyilg', 'ggyilm', 'ggyilb', 'ggyils', 'ggyilt', 'ggyilp', 'ggyilh', 'ggyim', 'ggyib', 'ggyibs', 'ggyis', 'ggyiss', 'ggying', 'ggyij', 'ggyic', 'ggyik', 'ggyit', 'ggyip', 'ggyih', 'ggi', 'ggig', 'ggigg', 'ggigs', 'ggin', 'gginj', 'gginh', 'ggid', 'ggil', 'ggilg', 'ggilm', 'ggilb', 'ggils', 'ggilt', 'ggilp', 'ggilh', 'ggim', 'ggib', 'ggibs', 'ggis', 'ggiss', 'gging', 'ggij', 'ggic', 'ggik', 'ggit', 'ggip', 'ggih', 'na', 'nag', 'nagg', 'nags', 'nan', 'nanj', 'nanh', 'nad', 'nal', 'nalg', 'nalm', 'nalb', 'nals', 'nalt', 'nalp', 'nalh', 'nam', 'nab', 'nabs', 'nas', 'nass', 'nang', 'naj', 'nac', 'nak', 'nat', 'nap', 'nah', 'nae', 'naeg', 'naegg', 'naegs', 'naen', 'naenj', 'naenh', 'naed', 'nael', 'naelg', 'naelm', 'naelb', 'naels', 'naelt', 'naelp', 'naelh', 'naem', 'naeb', 'naebs', 'naes', 'naess', 'naeng', 'naej', 'naec', 'naek', 'naet', 'naep', 'naeh', 'nya', 'nyag', 'nyagg', 'nyags', 'nyan', 'nyanj', 'nyanh', 'nyad', 'nyal', 'nyalg', 'nyalm', 'nyalb', 'nyals', 'nyalt', 'nyalp', 'nyalh', 'nyam', 'nyab', 'nyabs', 'nyas', 'nyass', 'nyang', 'nyaj', 'nyac', 'nyak', 'nyat', 'nyap', 'nyah', 'nyae', 'nyaeg', 'nyaegg', 'nyaegs', 'nyaen', 'nyaenj', 'nyaenh', 'nyaed', 'nyael', 'nyaelg', 'nyaelm', 'nyaelb', 'nyaels', 'nyaelt', 'nyaelp', 'nyaelh', 'nyaem', 'nyaeb', 'nyaebs', 'nyaes'];
<?php return ['nyaess', 'nyaeng', 'nyaej', 'nyaec', 'nyaek', 'nyaet', 'nyaep', 'nyaeh', 'neo', 'neog', 'neogg', 'neogs', 'neon', 'neonj', 'neonh', 'neod', 'neol', 'neolg', 'neolm', 'neolb', 'neols', 'neolt', 'neolp', 'neolh', 'neom', 'neob', 'neobs', 'neos', 'neoss', 'neong', 'neoj', 'neoc', 'neok', 'neot', 'neop', 'neoh', 'ne', 'neg', 'negg', 'negs', 'nen', 'nenj', 'nenh', 'ned', 'nel', 'nelg', 'nelm', 'nelb', 'nels', 'nelt', 'nelp', 'nelh', 'nem', 'neb', 'nebs', 'nes', 'ness', 'neng', 'nej', 'nec', 'nek', 'net', 'nep', 'neh', 'nyeo', 'nyeog', 'nyeogg', 'nyeogs', 'nyeon', 'nyeonj', 'nyeonh', 'nyeod', 'nyeol', 'nyeolg', 'nyeolm', 'nyeolb', 'nyeols', 'nyeolt', 'nyeolp', 'nyeolh', 'nyeom', 'nyeob', 'nyeobs', 'nyeos', 'nyeoss', 'nyeong', 'nyeoj', 'nyeoc', 'nyeok', 'nyeot', 'nyeop', 'nyeoh', 'nye', 'nyeg', 'nyegg', 'nyegs', 'nyen', 'nyenj', 'nyenh', 'nyed', 'nyel', 'nyelg', 'nyelm', 'nyelb', 'nyels', 'nyelt', 'nyelp', 'nyelh', 'nyem', 'nyeb', 'nyebs', 'nyes', 'nyess', 'nyeng', 'nyej', 'nyec', 'nyek', 'nyet', 'nyep', 'nyeh', 'no', 'nog', 'nogg', 'nogs', 'non', 'nonj', 'nonh', 'nod', 'nol', 'nolg', 'nolm', 'nolb', 'nols', 'nolt', 'nolp', 'nolh', 'nom', 'nob', 'nobs', 'nos', 'noss', 'nong', 'noj', 'noc', 'nok', 'not', 'nop', 'noh', 'nwa', 'nwag', 'nwagg', 'nwags', 'nwan', 'nwanj', 'nwanh', 'nwad', 'nwal', 'nwalg', 'nwalm', 'nwalb', 'nwals', 'nwalt', 'nwalp', 'nwalh', 'nwam', 'nwab', 'nwabs', 'nwas', 'nwass', 'nwang', 'nwaj', 'nwac', 'nwak', 'nwat', 'nwap', 'nwah', 'nwae', 'nwaeg', 'nwaegg', 'nwaegs', 'nwaen', 'nwaenj', 'nwaenh', 'nwaed', 'nwael', 'nwaelg', 'nwaelm', 'nwaelb', 'nwaels', 'nwaelt', 'nwaelp', 'nwaelh', 'nwaem', 'nwaeb', 'nwaebs', 'nwaes', 'nwaess', 'nwaeng', 'nwaej', 'nwaec', 'nwaek', 'nwaet', 'nwaep', 'nwaeh', 'noe', 'noeg', 'noegg', 'noegs', 'noen', 'noenj', 'noenh', 'noed', 'noel', 'noelg', 'noelm', 'noelb', 'noels', 'noelt', 'noelp', 'noelh', 'noem', 'noeb', 'noebs', 'noes', 'noess', 'noeng', 'noej', 'noec', 'noek', 'noet', 'noep', 'noeh', 'nyo', 'nyog', 'nyogg', 'nyogs', 'nyon', 'nyonj', 'nyonh', 'nyod', 'nyol', 'nyolg', 'nyolm', 'nyolb', 'nyols', 'nyolt', 'nyolp', 'nyolh', 'nyom', 'nyob', 'nyobs', 'nyos', 'nyoss', 'nyong', 'nyoj', 'nyoc'];
<?php return ['nyok', 'nyot', 'nyop', 'nyoh', 'nu', 'nug', 'nugg', 'nugs', 'nun', 'nunj', 'nunh', 'nud', 'nul', 'nulg', 'nulm', 'nulb', 'nuls', 'nult', 'nulp', 'nulh', 'num', 'nub', 'nubs', 'nus', 'nuss', 'nung', 'nuj', 'nuc', 'nuk', 'nut', 'nup', 'nuh', 'nweo', 'nweog', 'nweogg', 'nweogs', 'nweon', 'nweonj', 'nweonh', 'nweod', 'nweol', 'nweolg', 'nweolm', 'nweolb', 'nweols', 'nweolt', 'nweolp', 'nweolh', 'nweom', 'nweob', 'nweobs', 'nweos', 'nweoss', 'nweong', 'nweoj', 'nweoc', 'nweok', 'nweot', 'nweop', 'nweoh', 'nwe', 'nweg', 'nwegg', 'nwegs', 'nwen', 'nwenj', 'nwenh', 'nwed', 'nwel', 'nwelg', 'nwelm', 'nwelb', 'nwels', 'nwelt', 'nwelp', 'nwelh', 'nwem', 'nweb', 'nwebs', 'nwes', 'nwess', 'nweng', 'nwej', 'nwec', 'nwek', 'nwet', 'nwep', 'nweh', 'nwi', 'nwig', 'nwigg', 'nwigs', 'nwin', 'nwinj', 'nwinh', 'nwid', 'nwil', 'nwilg', 'nwilm', 'nwilb', 'nwils', 'nwilt', 'nwilp', 'nwilh', 'nwim', 'nwib', 'nwibs', 'nwis', 'nwiss', 'nwing', 'nwij', 'nwic', 'nwik', 'nwit', 'nwip', 'nwih', 'nyu', 'nyug', 'nyugg', 'nyugs', 'nyun', 'nyunj', 'nyunh', 'nyud', 'nyul', 'nyulg', 'nyulm', 'nyulb', 'nyuls', 'nyult', 'nyulp', 'nyulh', 'nyum', 'nyub', 'nyubs', 'nyus', 'nyuss', 'nyung', 'nyuj', 'nyuc', 'nyuk', 'nyut', 'nyup', 'nyuh', 'neu', 'neug', 'neugg', 'neugs', 'neun', 'neunj', 'neunh', 'neud', 'neul', 'neulg', 'neulm', 'neulb', 'neuls', 'neult', 'neulp', 'neulh', 'neum', 'neub', 'neubs', 'neus', 'neuss', 'neung', 'neuj', 'neuc', 'neuk', 'neut', 'neup', 'neuh', 'nyi', 'nyig', 'nyigg', 'nyigs', 'nyin', 'nyinj', 'nyinh', 'nyid', 'nyil', 'nyilg', 'nyilm', 'nyilb', 'nyils', 'nyilt', 'nyilp', 'nyilh', 'nyim', 'nyib', 'nyibs', 'nyis', 'nyiss', 'nying', 'nyij', 'nyic', 'nyik', 'nyit', 'nyip', 'nyih', 'ni', 'nig', 'nigg', 'nigs', 'nin', 'ninj', 'ninh', 'nid', 'nil', 'nilg', 'nilm', 'nilb', 'nils', 'nilt', 'nilp', 'nilh', 'nim', 'nib', 'nibs', 'nis', 'niss', 'ning', 'nij', 'nic', 'nik', 'nit', 'nip', 'nih', 'da', 'dag', 'dagg', 'dags', 'dan', 'danj', 'danh', 'dad', 'dal', 'dalg', 'dalm', 'dalb', 'dals', 'dalt', 'dalp', 'dalh', 'dam', 'dab', 'dabs', 'das', 'dass', 'dang', 'daj', 'dac', 'dak', 'dat', 'dap', 'dah'];
<?php return ['dae', 'daeg', 'daegg', 'daegs', 'daen', 'daenj', 'daenh', 'daed', 'dael', 'daelg', 'daelm', 'daelb', 'daels', 'daelt', 'daelp', 'daelh', 'daem', 'daeb', 'daebs', 'daes', 'daess', 'daeng', 'daej', 'daec', 'daek', 'daet', 'daep', 'daeh', 'dya', 'dyag', 'dyagg', 'dyags', 'dyan', 'dyanj', 'dyanh', 'dyad', 'dyal', 'dyalg', 'dyalm', 'dyalb', 'dyals', 'dyalt', 'dyalp', 'dyalh', 'dyam', 'dyab', 'dyabs', 'dyas', 'dyass', 'dyang', 'dyaj', 'dyac', 'dyak', 'dyat', 'dyap', 'dyah', 'dyae', 'dyaeg', 'dyaegg', 'dyaegs', 'dyaen', 'dyaenj', 'dyaenh', 'dyaed', 'dyael', 'dyaelg', 'dyaelm', 'dyaelb', 'dyaels', 'dyaelt', 'dyaelp', 'dyaelh', 'dyaem', 'dyaeb', 'dyaebs', 'dyaes', 'dyaess', 'dyaeng', 'dyaej', 'dyaec', 'dyaek', 'dyaet', 'dyaep', 'dyaeh', 'deo', 'deog', 'deogg', 'deogs', 'deon', 'deonj', 'deonh', 'deod', 'deol', 'deolg', 'deolm', 'deolb', 'deols', 'deolt', 'deolp', 'deolh', 'deom', 'deob', 'deobs', 'deos', 'deoss', 'deong', 'deoj', 'deoc', 'deok', 'deot', 'deop', 'deoh', 'de', 'deg', 'degg', 'degs', 'den', 'denj', 'denh', 'ded', 'del', 'delg', 'delm', 'delb', 'dels', 'delt', 'delp', 'delh', 'dem', 'deb', 'debs', 'des', 'dess', 'deng', 'dej', 'dec', 'dek', 'det', 'dep', 'deh', 'dyeo', 'dyeog', 'dyeogg', 'dyeogs', 'dyeon', 'dyeonj', 'dyeonh', 'dyeod', 'dyeol', 'dyeolg', 'dyeolm', 'dyeolb', 'dyeols', 'dyeolt', 'dyeolp', 'dyeolh', 'dyeom', 'dyeob', 'dyeobs', 'dyeos', 'dyeoss', 'dyeong', 'dyeoj', 'dyeoc', 'dyeok', 'dyeot', 'dyeop', 'dyeoh', 'dye', 'dyeg', 'dyegg', 'dyegs', 'dyen', 'dyenj', 'dyenh', 'dyed', 'dyel', 'dyelg', 'dyelm', 'dyelb', 'dyels', 'dyelt', 'dyelp', 'dyelh', 'dyem', 'dyeb', 'dyebs', 'dyes', 'dyess', 'dyeng', 'dyej', 'dyec', 'dyek', 'dyet', 'dyep', 'dyeh', 'do', 'dog', 'dogg', 'dogs', 'don', 'donj', 'donh', 'dod', 'dol', 'dolg', 'dolm', 'dolb', 'dols', 'dolt', 'dolp', 'dolh', 'dom', 'dob', 'dobs', 'dos', 'doss', 'dong', 'doj', 'doc', 'dok', 'dot', 'dop', 'doh', 'dwa', 'dwag', 'dwagg', 'dwags', 'dwan', 'dwanj', 'dwanh', 'dwad', 'dwal', 'dwalg', 'dwalm', 'dwalb', 'dwals', 'dwalt', 'dwalp', 'dwalh', 'dwam', 'dwab', 'dwabs', 'dwas', 'dwass', 'dwang', 'dwaj', 'dwac', 'dwak', 'dwat', 'dwap', 'dwah', 'dwae', 'dwaeg', 'dwaegg', 'dwaegs'];
<?php return ['dwaen', 'dwaenj', 'dwaenh', 'dwaed', 'dwael', 'dwaelg', 'dwaelm', 'dwaelb', 'dwaels', 'dwaelt', 'dwaelp', 'dwaelh', 'dwaem', 'dwaeb', 'dwaebs', 'dwaes', 'dwaess', 'dwaeng', 'dwaej', 'dwaec', 'dwaek', 'dwaet', 'dwaep', 'dwaeh', 'doe', 'doeg', 'doegg', 'doegs', 'doen', 'doenj', 'doenh', 'doed', 'doel', 'doelg', 'doelm', 'doelb', 'doels', 'doelt', 'doelp', 'doelh', 'doem', 'doeb', 'doebs', 'does', 'doess', 'doeng', 'doej', 'doec', 'doek', 'doet', 'doep', 'doeh', 'dyo', 'dyog', 'dyogg', 'dyogs', 'dyon', 'dyonj', 'dyonh', 'dyod', 'dyol', 'dyolg', 'dyolm', 'dyolb', 'dyols', 'dyolt', 'dyolp', 'dyolh', 'dyom', 'dyob', 'dyobs', 'dyos', 'dyoss', 'dyong', 'dyoj', 'dyoc', 'dyok', 'dyot', 'dyop', 'dyoh', 'du', 'dug', 'dugg', 'dugs', 'dun', 'dunj', 'dunh', 'dud', 'dul', 'dulg', 'dulm', 'dulb', 'duls', 'dult', 'dulp', 'dulh', 'dum', 'dub', 'dubs', 'dus', 'duss', 'dung', 'duj', 'duc', 'duk', 'dut', 'dup', 'duh', 'dweo', 'dweog', 'dweogg', 'dweogs', 'dweon', 'dweonj', 'dweonh', 'dweod', 'dweol', 'dweolg', 'dweolm', 'dweolb', 'dweols', 'dweolt', 'dweolp', 'dweolh', 'dweom', 'dweob', 'dweobs', 'dweos', 'dweoss', 'dweong', 'dweoj', 'dweoc', 'dweok', 'dweot', 'dweop', 'dweoh', 'dwe', 'dweg', 'dwegg', 'dwegs', 'dwen', 'dwenj', 'dwenh', 'dwed', 'dwel', 'dwelg', 'dwelm', 'dwelb', 'dwels', 'dwelt', 'dwelp', 'dwelh', 'dwem', 'dweb', 'dwebs', 'dwes', 'dwess', 'dweng', 'dwej', 'dwec', 'dwek', 'dwet', 'dwep', 'dweh', 'dwi', 'dwig', 'dwigg', 'dwigs', 'dwin', 'dwinj', 'dwinh', 'dwid', 'dwil', 'dwilg', 'dwilm', 'dwilb', 'dwils', 'dwilt', 'dwilp', 'dwilh', 'dwim', 'dwib', 'dwibs', 'dwis', 'dwiss', 'dwing', 'dwij', 'dwic', 'dwik', 'dwit', 'dwip', 'dwih', 'dyu', 'dyug', 'dyugg', 'dyugs', 'dyun', 'dyunj', 'dyunh', 'dyud', 'dyul', 'dyulg', 'dyulm', 'dyulb', 'dyuls', 'dyult', 'dyulp', 'dyulh', 'dyum', 'dyub', 'dyubs', 'dyus', 'dyuss', 'dyung', 'dyuj', 'dyuc', 'dyuk', 'dyut', 'dyup', 'dyuh', 'deu', 'deug', 'deugg', 'deugs', 'deun', 'deunj', 'deunh', 'deud', 'deul', 'deulg', 'deulm', 'deulb', 'deuls', 'deult', 'deulp', 'deulh', 'deum', 'deub', 'deubs', 'deus', 'deuss', 'deung', 'deuj', 'deuc', 'deuk', 'deut', 'deup', 'deuh', 'dyi', 'dyig', 'dyigg', 'dyigs', 'dyin', 'dyinj', 'dyinh', 'dyid'];
<?php return ['dyil', 'dyilg', 'dyilm', 'dyilb', 'dyils', 'dyilt', 'dyilp', 'dyilh', 'dyim', 'dyib', 'dyibs', 'dyis', 'dyiss', 'dying', 'dyij', 'dyic', 'dyik', 'dyit', 'dyip', 'dyih', 'di', 'dig', 'digg', 'digs', 'din', 'dinj', 'dinh', 'did', 'dil', 'dilg', 'dilm', 'dilb', 'dils', 'dilt', 'dilp', 'dilh', 'dim', 'dib', 'dibs', 'dis', 'diss', 'ding', 'dij', 'dic', 'dik', 'dit', 'dip', 'dih', 'dda', 'ddag', 'ddagg', 'ddags', 'ddan', 'ddanj', 'ddanh', 'ddad', 'ddal', 'ddalg', 'ddalm', 'ddalb', 'ddals', 'ddalt', 'ddalp', 'ddalh', 'ddam', 'ddab', 'ddabs', 'ddas', 'ddass', 'ddang', 'ddaj', 'ddac', 'ddak', 'ddat', 'ddap', 'ddah', 'ddae', 'ddaeg', 'ddaegg', 'ddaegs', 'ddaen', 'ddaenj', 'ddaenh', 'ddaed', 'ddael', 'ddaelg', 'ddaelm', 'ddaelb', 'ddaels', 'ddaelt', 'ddaelp', 'ddaelh', 'ddaem', 'ddaeb', 'ddaebs', 'ddaes', 'ddaess', 'ddaeng', 'ddaej', 'ddaec', 'ddaek', 'ddaet', 'ddaep', 'ddaeh', 'ddya', 'ddyag', 'ddyagg', 'ddyags', 'ddyan', 'ddyanj', 'ddyanh', 'ddyad', 'ddyal', 'ddyalg', 'ddyalm', 'ddyalb', 'ddyals', 'ddyalt', 'ddyalp', 'ddyalh', 'ddyam', 'ddyab', 'ddyabs', 'ddyas', 'ddyass', 'ddyang', 'ddyaj', 'ddyac', 'ddyak', 'ddyat', 'ddyap', 'ddyah', 'ddyae', 'ddyaeg', 'ddyaegg', 'ddyaegs', 'ddyaen', 'ddyaenj', 'ddyaenh', 'ddyaed', 'ddyael', 'ddyaelg', 'ddyaelm', 'ddyaelb', 'ddyaels', 'ddyaelt', 'ddyaelp', 'ddyaelh', 'ddyaem', 'ddyaeb', 'ddyaebs', 'ddyaes', 'ddyaess', 'ddyaeng', 'ddyaej', 'ddyaec', 'ddyaek', 'ddyaet', 'ddyaep', 'ddyaeh', 'ddeo', 'ddeog', 'ddeogg', 'ddeogs', 'ddeon', 'ddeonj', 'ddeonh', 'ddeod', 'ddeol', 'ddeolg', 'ddeolm', 'ddeolb', 'ddeols', 'ddeolt', 'ddeolp', 'ddeolh', 'ddeom', 'ddeob', 'ddeobs', 'ddeos', 'ddeoss', 'ddeong', 'ddeoj', 'ddeoc', 'ddeok', 'ddeot', 'ddeop', 'ddeoh', 'dde', 'ddeg', 'ddegg', 'ddegs', 'dden', 'ddenj', 'ddenh', 'dded', 'ddel', 'ddelg', 'ddelm', 'ddelb', 'ddels', 'ddelt', 'ddelp', 'ddelh', 'ddem', 'ddeb', 'ddebs', 'ddes', 'ddess', 'ddeng', 'ddej', 'ddec', 'ddek', 'ddet', 'ddep', 'ddeh', 'ddyeo', 'ddyeog', 'ddyeogg', 'ddyeogs', 'ddyeon', 'ddyeonj', 'ddyeonh', 'ddyeod', 'ddyeol', 'ddyeolg', 'ddyeolm', 'ddyeolb', 'ddyeols', 'ddyeolt', 'ddyeolp', 'ddyeolh', 'ddyeom', 'ddyeob', 'ddyeobs', 'ddyeos', 'ddyeoss', 'ddyeong', 'ddyeoj', 'ddyeoc', 'ddyeok', 'ddyeot', 'ddyeop', 'ddyeoh', 'ddye', 'ddyeg', 'ddyegg', 'ddyegs', 'ddyen', 'ddyenj', 'ddyenh', 'ddyed', 'ddyel', 'ddyelg', 'ddyelm', 'ddyelb'];
<?php return ['ddyels', 'ddyelt', 'ddyelp', 'ddyelh', 'ddyem', 'ddyeb', 'ddyebs', 'ddyes', 'ddyess', 'ddyeng', 'ddyej', 'ddyec', 'ddyek', 'ddyet', 'ddyep', 'ddyeh', 'ddo', 'ddog', 'ddogg', 'ddogs', 'ddon', 'ddonj', 'ddonh', 'ddod', 'ddol', 'ddolg', 'ddolm', 'ddolb', 'ddols', 'ddolt', 'ddolp', 'ddolh', 'ddom', 'ddob', 'ddobs', 'ddos', 'ddoss', 'ddong', 'ddoj', 'ddoc', 'ddok', 'ddot', 'ddop', 'ddoh', 'ddwa', 'ddwag', 'ddwagg', 'ddwags', 'ddwan', 'ddwanj', 'ddwanh', 'ddwad', 'ddwal', 'ddwalg', 'ddwalm', 'ddwalb', 'ddwals', 'ddwalt', 'ddwalp', 'ddwalh', 'ddwam', 'ddwab', 'ddwabs', 'ddwas', 'ddwass', 'ddwang', 'ddwaj', 'ddwac', 'ddwak', 'ddwat', 'ddwap', 'ddwah', 'ddwae', 'ddwaeg', 'ddwaegg', 'ddwaegs', 'ddwaen', 'ddwaenj', 'ddwaenh', 'ddwaed', 'ddwael', 'ddwaelg', 'ddwaelm', 'ddwaelb', 'ddwaels', 'ddwaelt', 'ddwaelp', 'ddwaelh', 'ddwaem', 'ddwaeb', 'ddwaebs', 'ddwaes', 'ddwaess', 'ddwaeng', 'ddwaej', 'ddwaec', 'ddwaek', 'ddwaet', 'ddwaep', 'ddwaeh', 'ddoe', 'ddoeg', 'ddoegg', 'ddoegs', 'ddoen', 'ddoenj', 'ddoenh', 'ddoed', 'ddoel', 'ddoelg', 'ddoelm', 'ddoelb', 'ddoels', 'ddoelt', 'ddoelp', 'ddoelh', 'ddoem', 'ddoeb', 'ddoebs', 'ddoes', 'ddoess', 'ddoeng', 'ddoej', 'ddoec', 'ddoek', 'ddoet', 'ddoep', 'ddoeh', 'ddyo', 'ddyog', 'ddyogg', 'ddyogs', 'ddyon', 'ddyonj', 'ddyonh', 'ddyod', 'ddyol', 'ddyolg', 'ddyolm', 'ddyolb', 'ddyols', 'ddyolt', 'ddyolp', 'ddyolh', 'ddyom', 'ddyob', 'ddyobs', 'ddyos', 'ddyoss', 'ddyong', 'ddyoj', 'ddyoc', 'ddyok', 'ddyot', 'ddyop', 'ddyoh', 'ddu', 'ddug', 'ddugg', 'ddugs', 'ddun', 'ddunj', 'ddunh', 'ddud', 'ddul', 'ddulg', 'ddulm', 'ddulb', 'dduls', 'ddult', 'ddulp', 'ddulh', 'ddum', 'ddub', 'ddubs', 'ddus', 'dduss', 'ddung', 'dduj', 'dduc', 'dduk', 'ddut', 'ddup', 'dduh', 'ddweo', 'ddweog', 'ddweogg', 'ddweogs', 'ddweon', 'ddweonj', 'ddweonh', 'ddweod', 'ddweol', 'ddweolg', 'ddweolm', 'ddweolb', 'ddweols', 'ddweolt', 'ddweolp', 'ddweolh', 'ddweom', 'ddweob', 'ddweobs', 'ddweos', 'ddweoss', 'ddweong', 'ddweoj', 'ddweoc', 'ddweok', 'ddweot', 'ddweop', 'ddweoh', 'ddwe', 'ddweg', 'ddwegg', 'ddwegs', 'ddwen', 'ddwenj', 'ddwenh', 'ddwed', 'ddwel', 'ddwelg', 'ddwelm', 'ddwelb', 'ddwels', 'ddwelt', 'ddwelp', 'ddwelh', 'ddwem', 'ddweb', 'ddwebs', 'ddwes', 'ddwess', 'ddweng', 'ddwej', 'ddwec', 'ddwek', 'ddwet', 'ddwep', 'ddweh', 'ddwi', 'ddwig', 'ddwigg', 'ddwigs', 'ddwin', 'ddwinj', 'ddwinh', 'ddwid', 'ddwil', 'ddwilg', 'ddwilm', 'ddwilb', 'ddwils', 'ddwilt', 'ddwilp', 'ddwilh'];
<?php return ['ddwim', 'ddwib', 'ddwibs', 'ddwis', 'ddwiss', 'ddwing', 'ddwij', 'ddwic', 'ddwik', 'ddwit', 'ddwip', 'ddwih', 'ddyu', 'ddyug', 'ddyugg', 'ddyugs', 'ddyun', 'ddyunj', 'ddyunh', 'ddyud', 'ddyul', 'ddyulg', 'ddyulm', 'ddyulb', 'ddyuls', 'ddyult', 'ddyulp', 'ddyulh', 'ddyum', 'ddyub', 'ddyubs', 'ddyus', 'ddyuss', 'ddyung', 'ddyuj', 'ddyuc', 'ddyuk', 'ddyut', 'ddyup', 'ddyuh', 'ddeu', 'ddeug', 'ddeugg', 'ddeugs', 'ddeun', 'ddeunj', 'ddeunh', 'ddeud', 'ddeul', 'ddeulg', 'ddeulm', 'ddeulb', 'ddeuls', 'ddeult', 'ddeulp', 'ddeulh', 'ddeum', 'ddeub', 'ddeubs', 'ddeus', 'ddeuss', 'ddeung', 'ddeuj', 'ddeuc', 'ddeuk', 'ddeut', 'ddeup', 'ddeuh', 'ddyi', 'ddyig', 'ddyigg', 'ddyigs', 'ddyin', 'ddyinj', 'ddyinh', 'ddyid', 'ddyil', 'ddyilg', 'ddyilm', 'ddyilb', 'ddyils', 'ddyilt', 'ddyilp', 'ddyilh', 'ddyim', 'ddyib', 'ddyibs', 'ddyis', 'ddyiss', 'ddying', 'ddyij', 'ddyic', 'ddyik', 'ddyit', 'ddyip', 'ddyih', 'ddi', 'ddig', 'ddigg', 'ddigs', 'ddin', 'ddinj', 'ddinh', 'ddid', 'ddil', 'ddilg', 'ddilm', 'ddilb', 'ddils', 'ddilt', 'ddilp', 'ddilh', 'ddim', 'ddib', 'ddibs', 'ddis', 'ddiss', 'dding', 'ddij', 'ddic', 'ddik', 'ddit', 'ddip', 'ddih', 'ra', 'rag', 'ragg', 'rags', 'ran', 'ranj', 'ranh', 'rad', 'ral', 'ralg', 'ralm', 'ralb', 'rals', 'ralt', 'ralp', 'ralh', 'ram', 'rab', 'rabs', 'ras', 'rass', 'rang', 'raj', 'rac', 'rak', 'rat', 'rap', 'rah', 'rae', 'raeg', 'raegg', 'raegs', 'raen', 'raenj', 'raenh', 'raed', 'rael', 'raelg', 'raelm', 'raelb', 'raels', 'raelt', 'raelp', 'raelh', 'raem', 'raeb', 'raebs', 'raes', 'raess', 'raeng', 'raej', 'raec', 'raek', 'raet', 'raep', 'raeh', 'rya', 'ryag', 'ryagg', 'ryags', 'ryan', 'ryanj', 'ryanh', 'ryad', 'ryal', 'ryalg', 'ryalm', 'ryalb', 'ryals', 'ryalt', 'ryalp', 'ryalh', 'ryam', 'ryab', 'ryabs', 'ryas', 'ryass', 'ryang', 'ryaj', 'ryac', 'ryak', 'ryat', 'ryap', 'ryah', 'ryae', 'ryaeg', 'ryaegg', 'ryaegs', 'ryaen', 'ryaenj', 'ryaenh', 'ryaed', 'ryael', 'ryaelg', 'ryaelm', 'ryaelb', 'ryaels', 'ryaelt', 'ryaelp', 'ryaelh', 'ryaem', 'ryaeb', 'ryaebs', 'ryaes', 'ryaess', 'ryaeng', 'ryaej', 'ryaec', 'ryaek', 'ryaet', 'ryaep', 'ryaeh', 'reo', 'reog', 'reogg', 'reogs', 'reon', 'reonj', 'reonh', 'reod', 'reol', 'reolg', 'reolm', 'reolb', 'reols', 'reolt', 'reolp', 'reolh', 'reom', 'reob', 'reobs', 'reos'];
<?php return ['reoss', 'reong', 'reoj', 'reoc', 'reok', 'reot', 'reop', 'reoh', 're', 'reg', 'regg', 'regs', 'ren', 'renj', 'renh', 'red', 'rel', 'relg', 'relm', 'relb', 'rels', 'relt', 'relp', 'relh', 'rem', 'reb', 'rebs', 'res', 'ress', 'reng', 'rej', 'rec', 'rek', 'ret', 'rep', 'reh', 'ryeo', 'ryeog', 'ryeogg', 'ryeogs', 'ryeon', 'ryeonj', 'ryeonh', 'ryeod', 'ryeol', 'ryeolg', 'ryeolm', 'ryeolb', 'ryeols', 'ryeolt', 'ryeolp', 'ryeolh', 'ryeom', 'ryeob', 'ryeobs', 'ryeos', 'ryeoss', 'ryeong', 'ryeoj', 'ryeoc', 'ryeok', 'ryeot', 'ryeop', 'ryeoh', 'rye', 'ryeg', 'ryegg', 'ryegs', 'ryen', 'ryenj', 'ryenh', 'ryed', 'ryel', 'ryelg', 'ryelm', 'ryelb', 'ryels', 'ryelt', 'ryelp', 'ryelh', 'ryem', 'ryeb', 'ryebs', 'ryes', 'ryess', 'ryeng', 'ryej', 'ryec', 'ryek', 'ryet', 'ryep', 'ryeh', 'ro', 'rog', 'rogg', 'rogs', 'ron', 'ronj', 'ronh', 'rod', 'rol', 'rolg', 'rolm', 'rolb', 'rols', 'rolt', 'rolp', 'rolh', 'rom', 'rob', 'robs', 'ros', 'ross', 'rong', 'roj', 'roc', 'rok', 'rot', 'rop', 'roh', 'rwa', 'rwag', 'rwagg', 'rwags', 'rwan', 'rwanj', 'rwanh', 'rwad', 'rwal', 'rwalg', 'rwalm', 'rwalb', 'rwals', 'rwalt', 'rwalp', 'rwalh', 'rwam', 'rwab', 'rwabs', 'rwas', 'rwass', 'rwang', 'rwaj', 'rwac', 'rwak', 'rwat', 'rwap', 'rwah', 'rwae', 'rwaeg', 'rwaegg', 'rwaegs', 'rwaen', 'rwaenj', 'rwaenh', 'rwaed', 'rwael', 'rwaelg', 'rwaelm', 'rwaelb', 'rwaels', 'rwaelt', 'rwaelp', 'rwaelh', 'rwaem', 'rwaeb', 'rwaebs', 'rwaes', 'rwaess', 'rwaeng', 'rwaej', 'rwaec', 'rwaek', 'rwaet', 'rwaep', 'rwaeh', 'roe', 'roeg', 'roegg', 'roegs', 'roen', 'roenj', 'roenh', 'roed', 'roel', 'roelg', 'roelm', 'roelb', 'roels', 'roelt', 'roelp', 'roelh', 'roem', 'roeb', 'roebs', 'roes', 'roess', 'roeng', 'roej', 'roec', 'roek', 'roet', 'roep', 'roeh', 'ryo', 'ryog', 'ryogg', 'ryogs', 'ryon', 'ryonj', 'ryonh', 'ryod', 'ryol', 'ryolg', 'ryolm', 'ryolb', 'ryols', 'ryolt', 'ryolp', 'ryolh', 'ryom', 'ryob', 'ryobs', 'ryos', 'ryoss', 'ryong', 'ryoj', 'ryoc', 'ryok', 'ryot', 'ryop', 'ryoh', 'ru', 'rug', 'rugg', 'rugs', 'run', 'runj', 'runh', 'rud', 'rul', 'rulg', 'rulm', 'rulb', 'ruls', 'rult', 'rulp', 'rulh', 'rum', 'rub', 'rubs', 'rus', 'russ', 'rung', 'ruj', 'ruc'];
<?php return ['ruk', 'rut', 'rup', 'ruh', 'rweo', 'rweog', 'rweogg', 'rweogs', 'rweon', 'rweonj', 'rweonh', 'rweod', 'rweol', 'rweolg', 'rweolm', 'rweolb', 'rweols', 'rweolt', 'rweolp', 'rweolh', 'rweom', 'rweob', 'rweobs', 'rweos', 'rweoss', 'rweong', 'rweoj', 'rweoc', 'rweok', 'rweot', 'rweop', 'rweoh', 'rwe', 'rweg', 'rwegg', 'rwegs', 'rwen', 'rwenj', 'rwenh', 'rwed', 'rwel', 'rwelg', 'rwelm', 'rwelb', 'rwels', 'rwelt', 'rwelp', 'rwelh', 'rwem', 'rweb', 'rwebs', 'rwes', 'rwess', 'rweng', 'rwej', 'rwec', 'rwek', 'rwet', 'rwep', 'rweh', 'rwi', 'rwig', 'rwigg', 'rwigs', 'rwin', 'rwinj', 'rwinh', 'rwid', 'rwil', 'rwilg', 'rwilm', 'rwilb', 'rwils', 'rwilt', 'rwilp', 'rwilh', 'rwim', 'rwib', 'rwibs', 'rwis', 'rwiss', 'rwing', 'rwij', 'rwic', 'rwik', 'rwit', 'rwip', 'rwih', 'ryu', 'ryug', 'ryugg', 'ryugs', 'ryun', 'ryunj', 'ryunh', 'ryud', 'ryul', 'ryulg', 'ryulm', 'ryulb', 'ryuls', 'ryult', 'ryulp', 'ryulh', 'ryum', 'ryub', 'ryubs', 'ryus', 'ryuss', 'ryung', 'ryuj', 'ryuc', 'ryuk', 'ryut', 'ryup', 'ryuh', 'reu', 'reug', 'reugg', 'reugs', 'reun', 'reunj', 'reunh', 'reud', 'reul', 'reulg', 'reulm', 'reulb', 'reuls', 'reult', 'reulp', 'reulh', 'reum', 'reub', 'reubs', 'reus', 'reuss', 'reung', 'reuj', 'reuc', 'reuk', 'reut', 'reup', 'reuh', 'ryi', 'ryig', 'ryigg', 'ryigs', 'ryin', 'ryinj', 'ryinh', 'ryid', 'ryil', 'ryilg', 'ryilm', 'ryilb', 'ryils', 'ryilt', 'ryilp', 'ryilh', 'ryim', 'ryib', 'ryibs', 'ryis', 'ryiss', 'rying', 'ryij', 'ryic', 'ryik', 'ryit', 'ryip', 'ryih', 'ri', 'rig', 'rigg', 'rigs', 'rin', 'rinj', 'rinh', 'rid', 'ril', 'rilg', 'rilm', 'rilb', 'rils', 'rilt', 'rilp', 'rilh', 'rim', 'rib', 'ribs', 'ris', 'riss', 'ring', 'rij', 'ric', 'rik', 'rit', 'rip', 'rih', 'ma', 'mag', 'magg', 'mags', 'man', 'manj', 'manh', 'mad', 'mal', 'malg', 'malm', 'malb', 'mals', 'malt', 'malp', 'malh', 'mam', 'mab', 'mabs', 'mas', 'mass', 'mang', 'maj', 'mac', 'mak', 'mat', 'map', 'mah', 'mae', 'maeg', 'maegg', 'maegs', 'maen', 'maenj', 'maenh', 'maed', 'mael', 'maelg', 'maelm', 'maelb', 'maels', 'maelt', 'maelp', 'maelh', 'maem', 'maeb', 'maebs', 'maes', 'maess', 'maeng', 'maej', 'maec', 'maek', 'maet', 'maep', 'maeh'];
<?php return ['mya', 'myag', 'myagg', 'myags', 'myan', 'myanj', 'myanh', 'myad', 'myal', 'myalg', 'myalm', 'myalb', 'myals', 'myalt', 'myalp', 'myalh', 'myam', 'myab', 'myabs', 'myas', 'myass', 'myang', 'myaj', 'myac', 'myak', 'myat', 'myap', 'myah', 'myae', 'myaeg', 'myaegg', 'myaegs', 'myaen', 'myaenj', 'myaenh', 'myaed', 'myael', 'myaelg', 'myaelm', 'myaelb', 'myaels', 'myaelt', 'myaelp', 'myaelh', 'myaem', 'myaeb', 'myaebs', 'myaes', 'myaess', 'myaeng', 'myaej', 'myaec', 'myaek', 'myaet', 'myaep', 'myaeh', 'meo', 'meog', 'meogg', 'meogs', 'meon', 'meonj', 'meonh', 'meod', 'meol', 'meolg', 'meolm', 'meolb', 'meols', 'meolt', 'meolp', 'meolh', 'meom', 'meob', 'meobs', 'meos', 'meoss', 'meong', 'meoj', 'meoc', 'meok', 'meot', 'meop', 'meoh', 'me', 'meg', 'megg', 'megs', 'men', 'menj', 'menh', 'med', 'mel', 'melg', 'melm', 'melb', 'mels', 'melt', 'melp', 'melh', 'mem', 'meb', 'mebs', 'mes', 'mess', 'meng', 'mej', 'mec', 'mek', 'met', 'mep', 'meh', 'myeo', 'myeog', 'myeogg', 'myeogs', 'myeon', 'myeonj', 'myeonh', 'myeod', 'myeol', 'myeolg', 'myeolm', 'myeolb', 'myeols', 'myeolt', 'myeolp', 'myeolh', 'myeom', 'myeob', 'myeobs', 'myeos', 'myeoss', 'myeong', 'myeoj', 'myeoc', 'myeok', 'myeot', 'myeop', 'myeoh', 'mye', 'myeg', 'myegg', 'myegs', 'myen', 'myenj', 'myenh', 'myed', 'myel', 'myelg', 'myelm', 'myelb', 'myels', 'myelt', 'myelp', 'myelh', 'myem', 'myeb', 'myebs', 'myes', 'myess', 'myeng', 'myej', 'myec', 'myek', 'myet', 'myep', 'myeh', 'mo', 'mog', 'mogg', 'mogs', 'mon', 'monj', 'monh', 'mod', 'mol', 'molg', 'molm', 'molb', 'mols', 'molt', 'molp', 'molh', 'mom', 'mob', 'mobs', 'mos', 'moss', 'mong', 'moj', 'moc', 'mok', 'mot', 'mop', 'moh', 'mwa', 'mwag', 'mwagg', 'mwags', 'mwan', 'mwanj', 'mwanh', 'mwad', 'mwal', 'mwalg', 'mwalm', 'mwalb', 'mwals', 'mwalt', 'mwalp', 'mwalh', 'mwam', 'mwab', 'mwabs', 'mwas', 'mwass', 'mwang', 'mwaj', 'mwac', 'mwak', 'mwat', 'mwap', 'mwah', 'mwae', 'mwaeg', 'mwaegg', 'mwaegs', 'mwaen', 'mwaenj', 'mwaenh', 'mwaed', 'mwael', 'mwaelg', 'mwaelm', 'mwaelb', 'mwaels', 'mwaelt', 'mwaelp', 'mwaelh', 'mwaem', 'mwaeb', 'mwaebs', 'mwaes', 'mwaess', 'mwaeng', 'mwaej', 'mwaec', 'mwaek', 'mwaet', 'mwaep', 'mwaeh', 'moe', 'moeg', 'moegg', 'moegs'];
<?php return ['moen', 'moenj', 'moenh', 'moed', 'moel', 'moelg', 'moelm', 'moelb', 'moels', 'moelt', 'moelp', 'moelh', 'moem', 'moeb', 'moebs', 'moes', 'moess', 'moeng', 'moej', 'moec', 'moek', 'moet', 'moep', 'moeh', 'myo', 'myog', 'myogg', 'myogs', 'myon', 'myonj', 'myonh', 'myod', 'myol', 'myolg', 'myolm', 'myolb', 'myols', 'myolt', 'myolp', 'myolh', 'myom', 'myob', 'myobs', 'myos', 'myoss', 'myong', 'myoj', 'myoc', 'myok', 'myot', 'myop', 'myoh', 'mu', 'mug', 'mugg', 'mugs', 'mun', 'munj', 'munh', 'mud', 'mul', 'mulg', 'mulm', 'mulb', 'muls', 'mult', 'mulp', 'mulh', 'mum', 'mub', 'mubs', 'mus', 'muss', 'mung', 'muj', 'muc', 'muk', 'mut', 'mup', 'muh', 'mweo', 'mweog', 'mweogg', 'mweogs', 'mweon', 'mweonj', 'mweonh', 'mweod', 'mweol', 'mweolg', 'mweolm', 'mweolb', 'mweols', 'mweolt', 'mweolp', 'mweolh', 'mweom', 'mweob', 'mweobs', 'mweos', 'mweoss', 'mweong', 'mweoj', 'mweoc', 'mweok', 'mweot', 'mweop', 'mweoh', 'mwe', 'mweg', 'mwegg', 'mwegs', 'mwen', 'mwenj', 'mwenh', 'mwed', 'mwel', 'mwelg', 'mwelm', 'mwelb', 'mwels', 'mwelt', 'mwelp', 'mwelh', 'mwem', 'mweb', 'mwebs', 'mwes', 'mwess', 'mweng', 'mwej', 'mwec', 'mwek', 'mwet', 'mwep', 'mweh', 'mwi', 'mwig', 'mwigg', 'mwigs', 'mwin', 'mwinj', 'mwinh', 'mwid', 'mwil', 'mwilg', 'mwilm', 'mwilb', 'mwils', 'mwilt', 'mwilp', 'mwilh', 'mwim', 'mwib', 'mwibs', 'mwis', 'mwiss', 'mwing', 'mwij', 'mwic', 'mwik', 'mwit', 'mwip', 'mwih', 'myu', 'myug', 'myugg', 'myugs', 'myun', 'myunj', 'myunh', 'myud', 'myul', 'myulg', 'myulm', 'myulb', 'myuls', 'myult', 'myulp', 'myulh', 'myum', 'myub', 'myubs', 'myus', 'myuss', 'myung', 'myuj', 'myuc', 'myuk', 'myut', 'myup', 'myuh', 'meu', 'meug', 'meugg', 'meugs', 'meun', 'meunj', 'meunh', 'meud', 'meul', 'meulg', 'meulm', 'meulb', 'meuls', 'meult', 'meulp', 'meulh', 'meum', 'meub', 'meubs', 'meus', 'meuss', 'meung', 'meuj', 'meuc', 'meuk', 'meut', 'meup', 'meuh', 'myi', 'myig', 'myigg', 'myigs', 'myin', 'myinj', 'myinh', 'myid', 'myil', 'myilg', 'myilm', 'myilb', 'myils', 'myilt', 'myilp', 'myilh', 'myim', 'myib', 'myibs', 'myis', 'myiss', 'mying', 'myij', 'myic', 'myik', 'myit', 'myip', 'myih', 'mi', 'mig', 'migg', 'migs', 'min', 'minj', 'minh', 'mid'];
<?php return ['mil', 'milg', 'milm', 'milb', 'mils', 'milt', 'milp', 'milh', 'mim', 'mib', 'mibs', 'mis', 'miss', 'ming', 'mij', 'mic', 'mik', 'mit', 'mip', 'mih', 'ba', 'bag', 'bagg', 'bags', 'ban', 'banj', 'banh', 'bad', 'bal', 'balg', 'balm', 'balb', 'bals', 'balt', 'balp', 'balh', 'bam', 'bab', 'babs', 'bas', 'bass', 'bang', 'baj', 'bac', 'bak', 'bat', 'bap', 'bah', 'bae', 'baeg', 'baegg', 'baegs', 'baen', 'baenj', 'baenh', 'baed', 'bael', 'baelg', 'baelm', 'baelb', 'baels', 'baelt', 'baelp', 'baelh', 'baem', 'baeb', 'baebs', 'baes', 'baess', 'baeng', 'baej', 'baec', 'baek', 'baet', 'baep', 'baeh', 'bya', 'byag', 'byagg', 'byags', 'byan', 'byanj', 'byanh', 'byad', 'byal', 'byalg', 'byalm', 'byalb', 'byals', 'byalt', 'byalp', 'byalh', 'byam', 'byab', 'byabs', 'byas', 'byass', 'byang', 'byaj', 'byac', 'byak', 'byat', 'byap', 'byah', 'byae', 'byaeg', 'byaegg', 'byaegs', 'byaen', 'byaenj', 'byaenh', 'byaed', 'byael', 'byaelg', 'byaelm', 'byaelb', 'byaels', 'byaelt', 'byaelp', 'byaelh', 'byaem', 'byaeb', 'byaebs', 'byaes', 'byaess', 'byaeng', 'byaej', 'byaec', 'byaek', 'byaet', 'byaep', 'byaeh', 'beo', 'beog', 'beogg', 'beogs', 'beon', 'beonj', 'beonh', 'beod', 'beol', 'beolg', 'beolm', 'beolb', 'beols', 'beolt', 'beolp', 'beolh', 'beom', 'beob', 'beobs', 'beos', 'beoss', 'beong', 'beoj', 'beoc', 'beok', 'beot', 'beop', 'beoh', 'be', 'beg', 'begg', 'begs', 'ben', 'benj', 'benh', 'bed', 'bel', 'belg', 'belm', 'belb', 'bels', 'belt', 'belp', 'belh', 'bem', 'beb', 'bebs', 'bes', 'bess', 'beng', 'bej', 'bec', 'bek', 'bet', 'bep', 'beh', 'byeo', 'byeog', 'byeogg', 'byeogs', 'byeon', 'byeonj', 'byeonh', 'byeod', 'byeol', 'byeolg', 'byeolm', 'byeolb', 'byeols', 'byeolt', 'byeolp', 'byeolh', 'byeom', 'byeob', 'byeobs', 'byeos', 'byeoss', 'byeong', 'byeoj', 'byeoc', 'byeok', 'byeot', 'byeop', 'byeoh', 'bye', 'byeg', 'byegg', 'byegs', 'byen', 'byenj', 'byenh', 'byed', 'byel', 'byelg', 'byelm', 'byelb', 'byels', 'byelt', 'byelp', 'byelh', 'byem', 'byeb', 'byebs', 'byes', 'byess', 'byeng', 'byej', 'byec', 'byek', 'byet', 'byep', 'byeh', 'bo', 'bog', 'bogg', 'bogs', 'bon', 'bonj', 'bonh', 'bod', 'bol', 'bolg', 'bolm', 'bolb'];
<?php return ['bols', 'bolt', 'bolp', 'bolh', 'bom', 'bob', 'bobs', 'bos', 'boss', 'bong', 'boj', 'boc', 'bok', 'bot', 'bop', 'boh', 'bwa', 'bwag', 'bwagg', 'bwags', 'bwan', 'bwanj', 'bwanh', 'bwad', 'bwal', 'bwalg', 'bwalm', 'bwalb', 'bwals', 'bwalt', 'bwalp', 'bwalh', 'bwam', 'bwab', 'bwabs', 'bwas', 'bwass', 'bwang', 'bwaj', 'bwac', 'bwak', 'bwat', 'bwap', 'bwah', 'bwae', 'bwaeg', 'bwaegg', 'bwaegs', 'bwaen', 'bwaenj', 'bwaenh', 'bwaed', 'bwael', 'bwaelg', 'bwaelm', 'bwaelb', 'bwaels', 'bwaelt', 'bwaelp', 'bwaelh', 'bwaem', 'bwaeb', 'bwaebs', 'bwaes', 'bwaess', 'bwaeng', 'bwaej', 'bwaec', 'bwaek', 'bwaet', 'bwaep', 'bwaeh', 'boe', 'boeg', 'boegg', 'boegs', 'boen', 'boenj', 'boenh', 'boed', 'boel', 'boelg', 'boelm', 'boelb', 'boels', 'boelt', 'boelp', 'boelh', 'boem', 'boeb', 'boebs', 'boes', 'boess', 'boeng', 'boej', 'boec', 'boek', 'boet', 'boep', 'boeh', 'byo', 'byog', 'byogg', 'byogs', 'byon', 'byonj', 'byonh', 'byod', 'byol', 'byolg', 'byolm', 'byolb', 'byols', 'byolt', 'byolp', 'byolh', 'byom', 'byob', 'byobs', 'byos', 'byoss', 'byong', 'byoj', 'byoc', 'byok', 'byot', 'byop', 'byoh', 'bu', 'bug', 'bugg', 'bugs', 'bun', 'bunj', 'bunh', 'bud', 'bul', 'bulg', 'bulm', 'bulb', 'buls', 'bult', 'bulp', 'bulh', 'bum', 'bub', 'bubs', 'bus', 'buss', 'bung', 'buj', 'buc', 'buk', 'but', 'bup', 'buh', 'bweo', 'bweog', 'bweogg', 'bweogs', 'bweon', 'bweonj', 'bweonh', 'bweod', 'bweol', 'bweolg', 'bweolm', 'bweolb', 'bweols', 'bweolt', 'bweolp', 'bweolh', 'bweom', 'bweob', 'bweobs', 'bweos', 'bweoss', 'bweong', 'bweoj', 'bweoc', 'bweok', 'bweot', 'bweop', 'bweoh', 'bwe', 'bweg', 'bwegg', 'bwegs', 'bwen', 'bwenj', 'bwenh', 'bwed', 'bwel', 'bwelg', 'bwelm', 'bwelb', 'bwels', 'bwelt', 'bwelp', 'bwelh', 'bwem', 'bweb', 'bwebs', 'bwes', 'bwess', 'bweng', 'bwej', 'bwec', 'bwek', 'bwet', 'bwep', 'bweh', 'bwi', 'bwig', 'bwigg', 'bwigs', 'bwin', 'bwinj', 'bwinh', 'bwid', 'bwil', 'bwilg', 'bwilm', 'bwilb', 'bwils', 'bwilt', 'bwilp', 'bwilh', 'bwim', 'bwib', 'bwibs', 'bwis', 'bwiss', 'bwing', 'bwij', 'bwic', 'bwik', 'bwit', 'bwip', 'bwih', 'byu', 'byug', 'byugg', 'byugs', 'byun', 'byunj', 'byunh', 'byud', 'byul', 'byulg', 'byulm', 'byulb', 'byuls', 'byult', 'byulp', 'byulh'];
<?php return ['byum', 'byub', 'byubs', 'byus', 'byuss', 'byung', 'byuj', 'byuc', 'byuk', 'byut', 'byup', 'byuh', 'beu', 'beug', 'beugg', 'beugs', 'beun', 'beunj', 'beunh', 'beud', 'beul', 'beulg', 'beulm', 'beulb', 'beuls', 'beult', 'beulp', 'beulh', 'beum', 'beub', 'beubs', 'beus', 'beuss', 'beung', 'beuj', 'beuc', 'beuk', 'beut', 'beup', 'beuh', 'byi', 'byig', 'byigg', 'byigs', 'byin', 'byinj', 'byinh', 'byid', 'byil', 'byilg', 'byilm', 'byilb', 'byils', 'byilt', 'byilp', 'byilh', 'byim', 'byib', 'byibs', 'byis', 'byiss', 'bying', 'byij', 'byic', 'byik', 'byit', 'byip', 'byih', 'bi', 'big', 'bigg', 'bigs', 'bin', 'binj', 'binh', 'bid', 'bil', 'bilg', 'bilm', 'bilb', 'bils', 'bilt', 'bilp', 'bilh', 'bim', 'bib', 'bibs', 'bis', 'biss', 'bing', 'bij', 'bic', 'bik', 'bit', 'bip', 'bih', 'bba', 'bbag', 'bbagg', 'bbags', 'bban', 'bbanj', 'bbanh', 'bbad', 'bbal', 'bbalg', 'bbalm', 'bbalb', 'bbals', 'bbalt', 'bbalp', 'bbalh', 'bbam', 'bbab', 'bbabs', 'bbas', 'bbass', 'bbang', 'bbaj', 'bbac', 'bbak', 'bbat', 'bbap', 'bbah', 'bbae', 'bbaeg', 'bbaegg', 'bbaegs', 'bbaen', 'bbaenj', 'bbaenh', 'bbaed', 'bbael', 'bbaelg', 'bbaelm', 'bbaelb', 'bbaels', 'bbaelt', 'bbaelp', 'bbaelh', 'bbaem', 'bbaeb', 'bbaebs', 'bbaes', 'bbaess', 'bbaeng', 'bbaej', 'bbaec', 'bbaek', 'bbaet', 'bbaep', 'bbaeh', 'bbya', 'bbyag', 'bbyagg', 'bbyags', 'bbyan', 'bbyanj', 'bbyanh', 'bbyad', 'bbyal', 'bbyalg', 'bbyalm', 'bbyalb', 'bbyals', 'bbyalt', 'bbyalp', 'bbyalh', 'bbyam', 'bbyab', 'bbyabs', 'bbyas', 'bbyass', 'bbyang', 'bbyaj', 'bbyac', 'bbyak', 'bbyat', 'bbyap', 'bbyah', 'bbyae', 'bbyaeg', 'bbyaegg', 'bbyaegs', 'bbyaen', 'bbyaenj', 'bbyaenh', 'bbyaed', 'bbyael', 'bbyaelg', 'bbyaelm', 'bbyaelb', 'bbyaels', 'bbyaelt', 'bbyaelp', 'bbyaelh', 'bbyaem', 'bbyaeb', 'bbyaebs', 'bbyaes', 'bbyaess', 'bbyaeng', 'bbyaej', 'bbyaec', 'bbyaek', 'bbyaet', 'bbyaep', 'bbyaeh', 'bbeo', 'bbeog', 'bbeogg', 'bbeogs', 'bbeon', 'bbeonj', 'bbeonh', 'bbeod', 'bbeol', 'bbeolg', 'bbeolm', 'bbeolb', 'bbeols', 'bbeolt', 'bbeolp', 'bbeolh', 'bbeom', 'bbeob', 'bbeobs', 'bbeos', 'bbeoss', 'bbeong', 'bbeoj', 'bbeoc', 'bbeok', 'bbeot', 'bbeop', 'bbeoh', 'bbe', 'bbeg', 'bbegg', 'bbegs', 'bben', 'bbenj', 'bbenh', 'bbed', 'bbel', 'bbelg', 'bbelm', 'bbelb', 'bbels', 'bbelt', 'bbelp', 'bbelh', 'bbem', 'bbeb', 'bbebs', 'bbes'];
<?php return ['bbess', 'bbeng', 'bbej', 'bbec', 'bbek', 'bbet', 'bbep', 'bbeh', 'bbyeo', 'bbyeog', 'bbyeogg', 'bbyeogs', 'bbyeon', 'bbyeonj', 'bbyeonh', 'bbyeod', 'bbyeol', 'bbyeolg', 'bbyeolm', 'bbyeolb', 'bbyeols', 'bbyeolt', 'bbyeolp', 'bbyeolh', 'bbyeom', 'bbyeob', 'bbyeobs', 'bbyeos', 'bbyeoss', 'bbyeong', 'bbyeoj', 'bbyeoc', 'bbyeok', 'bbyeot', 'bbyeop', 'bbyeoh', 'bbye', 'bbyeg', 'bbyegg', 'bbyegs', 'bbyen', 'bbyenj', 'bbyenh', 'bbyed', 'bbyel', 'bbyelg', 'bbyelm', 'bbyelb', 'bbyels', 'bbyelt', 'bbyelp', 'bbyelh', 'bbyem', 'bbyeb', 'bbyebs', 'bbyes', 'bbyess', 'bbyeng', 'bbyej', 'bbyec', 'bbyek', 'bbyet', 'bbyep', 'bbyeh', 'bbo', 'bbog', 'bbogg', 'bbogs', 'bbon', 'bbonj', 'bbonh', 'bbod', 'bbol', 'bbolg', 'bbolm', 'bbolb', 'bbols', 'bbolt', 'bbolp', 'bbolh', 'bbom', 'bbob', 'bbobs', 'bbos', 'bboss', 'bbong', 'bboj', 'bboc', 'bbok', 'bbot', 'bbop', 'bboh', 'bbwa', 'bbwag', 'bbwagg', 'bbwags', 'bbwan', 'bbwanj', 'bbwanh', 'bbwad', 'bbwal', 'bbwalg', 'bbwalm', 'bbwalb', 'bbwals', 'bbwalt', 'bbwalp', 'bbwalh', 'bbwam', 'bbwab', 'bbwabs', 'bbwas', 'bbwass', 'bbwang', 'bbwaj', 'bbwac', 'bbwak', 'bbwat', 'bbwap', 'bbwah', 'bbwae', 'bbwaeg', 'bbwaegg', 'bbwaegs', 'bbwaen', 'bbwaenj', 'bbwaenh', 'bbwaed', 'bbwael', 'bbwaelg', 'bbwaelm', 'bbwaelb', 'bbwaels', 'bbwaelt', 'bbwaelp', 'bbwaelh', 'bbwaem', 'bbwaeb', 'bbwaebs', 'bbwaes', 'bbwaess', 'bbwaeng', 'bbwaej', 'bbwaec', 'bbwaek', 'bbwaet', 'bbwaep', 'bbwaeh', 'bboe', 'bboeg', 'bboegg', 'bboegs', 'bboen', 'bboenj', 'bboenh', 'bboed', 'bboel', 'bboelg', 'bboelm', 'bboelb', 'bboels', 'bboelt', 'bboelp', 'bboelh', 'bboem', 'bboeb', 'bboebs', 'bboes', 'bboess', 'bboeng', 'bboej', 'bboec', 'bboek', 'bboet', 'bboep', 'bboeh', 'bbyo', 'bbyog', 'bbyogg', 'bbyogs', 'bbyon', 'bbyonj', 'bbyonh', 'bbyod', 'bbyol', 'bbyolg', 'bbyolm', 'bbyolb', 'bbyols', 'bbyolt', 'bbyolp', 'bbyolh', 'bbyom', 'bbyob', 'bbyobs', 'bbyos', 'bbyoss', 'bbyong', 'bbyoj', 'bbyoc', 'bbyok', 'bbyot', 'bbyop', 'bbyoh', 'bbu', 'bbug', 'bbugg', 'bbugs', 'bbun', 'bbunj', 'bbunh', 'bbud', 'bbul', 'bbulg', 'bbulm', 'bbulb', 'bbuls', 'bbult', 'bbulp', 'bbulh', 'bbum', 'bbub', 'bbubs', 'bbus', 'bbuss', 'bbung', 'bbuj', 'bbuc', 'bbuk', 'bbut', 'bbup', 'bbuh', 'bbweo', 'bbweog', 'bbweogg', 'bbweogs', 'bbweon', 'bbweonj', 'bbweonh', 'bbweod', 'bbweol', 'bbweolg', 'bbweolm', 'bbweolb', 'bbweols', 'bbweolt', 'bbweolp', 'bbweolh', 'bbweom', 'bbweob', 'bbweobs', 'bbweos', 'bbweoss', 'bbweong', 'bbweoj', 'bbweoc'];
<?php return ['bbweok', 'bbweot', 'bbweop', 'bbweoh', 'bbwe', 'bbweg', 'bbwegg', 'bbwegs', 'bbwen', 'bbwenj', 'bbwenh', 'bbwed', 'bbwel', 'bbwelg', 'bbwelm', 'bbwelb', 'bbwels', 'bbwelt', 'bbwelp', 'bbwelh', 'bbwem', 'bbweb', 'bbwebs', 'bbwes', 'bbwess', 'bbweng', 'bbwej', 'bbwec', 'bbwek', 'bbwet', 'bbwep', 'bbweh', 'bbwi', 'bbwig', 'bbwigg', 'bbwigs', 'bbwin', 'bbwinj', 'bbwinh', 'bbwid', 'bbwil', 'bbwilg', 'bbwilm', 'bbwilb', 'bbwils', 'bbwilt', 'bbwilp', 'bbwilh', 'bbwim', 'bbwib', 'bbwibs', 'bbwis', 'bbwiss', 'bbwing', 'bbwij', 'bbwic', 'bbwik', 'bbwit', 'bbwip', 'bbwih', 'bbyu', 'bbyug', 'bbyugg', 'bbyugs', 'bbyun', 'bbyunj', 'bbyunh', 'bbyud', 'bbyul', 'bbyulg', 'bbyulm', 'bbyulb', 'bbyuls', 'bbyult', 'bbyulp', 'bbyulh', 'bbyum', 'bbyub', 'bbyubs', 'bbyus', 'bbyuss', 'bbyung', 'bbyuj', 'bbyuc', 'bbyuk', 'bbyut', 'bbyup', 'bbyuh', 'bbeu', 'bbeug', 'bbeugg', 'bbeugs', 'bbeun', 'bbeunj', 'bbeunh', 'bbeud', 'bbeul', 'bbeulg', 'bbeulm', 'bbeulb', 'bbeuls', 'bbeult', 'bbeulp', 'bbeulh', 'bbeum', 'bbeub', 'bbeubs', 'bbeus', 'bbeuss', 'bbeung', 'bbeuj', 'bbeuc', 'bbeuk', 'bbeut', 'bbeup', 'bbeuh', 'bbyi', 'bbyig', 'bbyigg', 'bbyigs', 'bbyin', 'bbyinj', 'bbyinh', 'bbyid', 'bbyil', 'bbyilg', 'bbyilm', 'bbyilb', 'bbyils', 'bbyilt', 'bbyilp', 'bbyilh', 'bbyim', 'bbyib', 'bbyibs', 'bbyis', 'bbyiss', 'bbying', 'bbyij', 'bbyic', 'bbyik', 'bbyit', 'bbyip', 'bbyih', 'bbi', 'bbig', 'bbigg', 'bbigs', 'bbin', 'bbinj', 'bbinh', 'bbid', 'bbil', 'bbilg', 'bbilm', 'bbilb', 'bbils', 'bbilt', 'bbilp', 'bbilh', 'bbim', 'bbib', 'bbibs', 'bbis', 'bbiss', 'bbing', 'bbij', 'bbic', 'bbik', 'bbit', 'bbip', 'bbih', 'sa', 'sag', 'sagg', 'sags', 'san', 'sanj', 'sanh', 'sad', 'sal', 'salg', 'salm', 'salb', 'sals', 'salt', 'salp', 'salh', 'sam', 'sab', 'sabs', 'sas', 'sass', 'sang', 'saj', 'sac', 'sak', 'sat', 'sap', 'sah', 'sae', 'saeg', 'saegg', 'saegs', 'saen', 'saenj', 'saenh', 'saed', 'sael', 'saelg', 'saelm', 'saelb', 'saels', 'saelt', 'saelp', 'saelh', 'saem', 'saeb', 'saebs', 'saes', 'saess', 'saeng', 'saej', 'saec', 'saek', 'saet', 'saep', 'saeh', 'sya', 'syag', 'syagg', 'syags', 'syan', 'syanj', 'syanh', 'syad', 'syal', 'syalg', 'syalm', 'syalb', 'syals', 'syalt', 'syalp', 'syalh', 'syam', 'syab', 'syabs', 'syas', 'syass', 'syang', 'syaj', 'syac', 'syak', 'syat', 'syap', 'syah'];
<?php return ['syae', 'syaeg', 'syaegg', 'syaegs', 'syaen', 'syaenj', 'syaenh', 'syaed', 'syael', 'syaelg', 'syaelm', 'syaelb', 'syaels', 'syaelt', 'syaelp', 'syaelh', 'syaem', 'syaeb', 'syaebs', 'syaes', 'syaess', 'syaeng', 'syaej', 'syaec', 'syaek', 'syaet', 'syaep', 'syaeh', 'seo', 'seog', 'seogg', 'seogs', 'seon', 'seonj', 'seonh', 'seod', 'seol', 'seolg', 'seolm', 'seolb', 'seols', 'seolt', 'seolp', 'seolh', 'seom', 'seob', 'seobs', 'seos', 'seoss', 'seong', 'seoj', 'seoc', 'seok', 'seot', 'seop', 'seoh', 'se', 'seg', 'segg', 'segs', 'sen', 'senj', 'senh', 'sed', 'sel', 'selg', 'selm', 'selb', 'sels', 'selt', 'selp', 'selh', 'sem', 'seb', 'sebs', 'ses', 'sess', 'seng', 'sej', 'sec', 'sek', 'set', 'sep', 'seh', 'syeo', 'syeog', 'syeogg', 'syeogs', 'syeon', 'syeonj', 'syeonh', 'syeod', 'syeol', 'syeolg', 'syeolm', 'syeolb', 'syeols', 'syeolt', 'syeolp', 'syeolh', 'syeom', 'syeob', 'syeobs', 'syeos', 'syeoss', 'syeong', 'syeoj', 'syeoc', 'syeok', 'syeot', 'syeop', 'syeoh', 'sye', 'syeg', 'syegg', 'syegs', 'syen', 'syenj', 'syenh', 'syed', 'syel', 'syelg', 'syelm', 'syelb', 'syels', 'syelt', 'syelp', 'syelh', 'syem', 'syeb', 'syebs', 'syes', 'syess', 'syeng', 'syej', 'syec', 'syek', 'syet', 'syep', 'syeh', 'so', 'sog', 'sogg', 'sogs', 'son', 'sonj', 'sonh', 'sod', 'sol', 'solg', 'solm', 'solb', 'sols', 'solt', 'solp', 'solh', 'som', 'sob', 'sobs', 'sos', 'soss', 'song', 'soj', 'soc', 'sok', 'sot', 'sop', 'soh', 'swa', 'swag', 'swagg', 'swags', 'swan', 'swanj', 'swanh', 'swad', 'swal', 'swalg', 'swalm', 'swalb', 'swals', 'swalt', 'swalp', 'swalh', 'swam', 'swab', 'swabs', 'swas', 'swass', 'swang', 'swaj', 'swac', 'swak', 'swat', 'swap', 'swah', 'swae', 'swaeg', 'swaegg', 'swaegs', 'swaen', 'swaenj', 'swaenh', 'swaed', 'swael', 'swaelg', 'swaelm', 'swaelb', 'swaels', 'swaelt', 'swaelp', 'swaelh', 'swaem', 'swaeb', 'swaebs', 'swaes', 'swaess', 'swaeng', 'swaej', 'swaec', 'swaek', 'swaet', 'swaep', 'swaeh', 'soe', 'soeg', 'soegg', 'soegs', 'soen', 'soenj', 'soenh', 'soed', 'soel', 'soelg', 'soelm', 'soelb', 'soels', 'soelt', 'soelp', 'soelh', 'soem', 'soeb', 'soebs', 'soes', 'soess', 'soeng', 'soej', 'soec', 'soek', 'soet', 'soep', 'soeh', 'syo', 'syog', 'syogg', 'syogs'];
<?php return ['syon', 'syonj', 'syonh', 'syod', 'syol', 'syolg', 'syolm', 'syolb', 'syols', 'syolt', 'syolp', 'syolh', 'syom', 'syob', 'syobs', 'syos', 'syoss', 'syong', 'syoj', 'syoc', 'syok', 'syot', 'syop', 'syoh', 'su', 'sug', 'sugg', 'sugs', 'sun', 'sunj', 'sunh', 'sud', 'sul', 'sulg', 'sulm', 'sulb', 'suls', 'sult', 'sulp', 'sulh', 'sum', 'sub', 'subs', 'sus', 'suss', 'sung', 'suj', 'suc', 'suk', 'sut', 'sup', 'suh', 'sweo', 'sweog', 'sweogg', 'sweogs', 'sweon', 'sweonj', 'sweonh', 'sweod', 'sweol', 'sweolg', 'sweolm', 'sweolb', 'sweols', 'sweolt', 'sweolp', 'sweolh', 'sweom', 'sweob', 'sweobs', 'sweos', 'sweoss', 'sweong', 'sweoj', 'sweoc', 'sweok', 'sweot', 'sweop', 'sweoh', 'swe', 'sweg', 'swegg', 'swegs', 'swen', 'swenj', 'swenh', 'swed', 'swel', 'swelg', 'swelm', 'swelb', 'swels', 'swelt', 'swelp', 'swelh', 'swem', 'sweb', 'swebs', 'swes', 'swess', 'sweng', 'swej', 'swec', 'swek', 'swet', 'swep', 'sweh', 'swi', 'swig', 'swigg', 'swigs', 'swin', 'swinj', 'swinh', 'swid', 'swil', 'swilg', 'swilm', 'swilb', 'swils', 'swilt', 'swilp', 'swilh', 'swim', 'swib', 'swibs', 'swis', 'swiss', 'swing', 'swij', 'swic', 'swik', 'swit', 'swip', 'swih', 'syu', 'syug', 'syugg', 'syugs', 'syun', 'syunj', 'syunh', 'syud', 'syul', 'syulg', 'syulm', 'syulb', 'syuls', 'syult', 'syulp', 'syulh', 'syum', 'syub', 'syubs', 'syus', 'syuss', 'syung', 'syuj', 'syuc', 'syuk', 'syut', 'syup', 'syuh', 'seu', 'seug', 'seugg', 'seugs', 'seun', 'seunj', 'seunh', 'seud', 'seul', 'seulg', 'seulm', 'seulb', 'seuls', 'seult', 'seulp', 'seulh', 'seum', 'seub', 'seubs', 'seus', 'seuss', 'seung', 'seuj', 'seuc', 'seuk', 'seut', 'seup', 'seuh', 'syi', 'syig', 'syigg', 'syigs', 'syin', 'syinj', 'syinh', 'syid', 'syil', 'syilg', 'syilm', 'syilb', 'syils', 'syilt', 'syilp', 'syilh', 'syim', 'syib', 'syibs', 'syis', 'syiss', 'sying', 'syij', 'syic', 'syik', 'syit', 'syip', 'syih', 'si', 'sig', 'sigg', 'sigs', 'sin', 'sinj', 'sinh', 'sid', 'sil', 'silg', 'silm', 'silb', 'sils', 'silt', 'silp', 'silh', 'sim', 'sib', 'sibs', 'sis', 'siss', 'sing', 'sij', 'sic', 'sik', 'sit', 'sip', 'sih', 'ssa', 'ssag', 'ssagg', 'ssags', 'ssan', 'ssanj', 'ssanh', 'ssad'];
<?php return ['ssal', 'ssalg', 'ssalm', 'ssalb', 'ssals', 'ssalt', 'ssalp', 'ssalh', 'ssam', 'ssab', 'ssabs', 'ssas', 'ssass', 'ssang', 'ssaj', 'ssac', 'ssak', 'ssat', 'ssap', 'ssah', 'ssae', 'ssaeg', 'ssaegg', 'ssaegs', 'ssaen', 'ssaenj', 'ssaenh', 'ssaed', 'ssael', 'ssaelg', 'ssaelm', 'ssaelb', 'ssaels', 'ssaelt', 'ssaelp', 'ssaelh', 'ssaem', 'ssaeb', 'ssaebs', 'ssaes', 'ssaess', 'ssaeng', 'ssaej', 'ssaec', 'ssaek', 'ssaet', 'ssaep', 'ssaeh', 'ssya', 'ssyag', 'ssyagg', 'ssyags', 'ssyan', 'ssyanj', 'ssyanh', 'ssyad', 'ssyal', 'ssyalg', 'ssyalm', 'ssyalb', 'ssyals', 'ssyalt', 'ssyalp', 'ssyalh', 'ssyam', 'ssyab', 'ssyabs', 'ssyas', 'ssyass', 'ssyang', 'ssyaj', 'ssyac', 'ssyak', 'ssyat', 'ssyap', 'ssyah', 'ssyae', 'ssyaeg', 'ssyaegg', 'ssyaegs', 'ssyaen', 'ssyaenj', 'ssyaenh', 'ssyaed', 'ssyael', 'ssyaelg', 'ssyaelm', 'ssyaelb', 'ssyaels', 'ssyaelt', 'ssyaelp', 'ssyaelh', 'ssyaem', 'ssyaeb', 'ssyaebs', 'ssyaes', 'ssyaess', 'ssyaeng', 'ssyaej', 'ssyaec', 'ssyaek', 'ssyaet', 'ssyaep', 'ssyaeh', 'sseo', 'sseog', 'sseogg', 'sseogs', 'sseon', 'sseonj', 'sseonh', 'sseod', 'sseol', 'sseolg', 'sseolm', 'sseolb', 'sseols', 'sseolt', 'sseolp', 'sseolh', 'sseom', 'sseob', 'sseobs', 'sseos', 'sseoss', 'sseong', 'sseoj', 'sseoc', 'sseok', 'sseot', 'sseop', 'sseoh', 'sse', 'sseg', 'ssegg', 'ssegs', 'ssen', 'ssenj', 'ssenh', 'ssed', 'ssel', 'sselg', 'sselm', 'sselb', 'ssels', 'sselt', 'sselp', 'sselh', 'ssem', 'sseb', 'ssebs', 'sses', 'ssess', 'sseng', 'ssej', 'ssec', 'ssek', 'sset', 'ssep', 'sseh', 'ssyeo', 'ssyeog', 'ssyeogg', 'ssyeogs', 'ssyeon', 'ssyeonj', 'ssyeonh', 'ssyeod', 'ssyeol', 'ssyeolg', 'ssyeolm', 'ssyeolb', 'ssyeols', 'ssyeolt', 'ssyeolp', 'ssyeolh', 'ssyeom', 'ssyeob', 'ssyeobs', 'ssyeos', 'ssyeoss', 'ssyeong', 'ssyeoj', 'ssyeoc', 'ssyeok', 'ssyeot', 'ssyeop', 'ssyeoh', 'ssye', 'ssyeg', 'ssyegg', 'ssyegs', 'ssyen', 'ssyenj', 'ssyenh', 'ssyed', 'ssyel', 'ssyelg', 'ssyelm', 'ssyelb', 'ssyels', 'ssyelt', 'ssyelp', 'ssyelh', 'ssyem', 'ssyeb', 'ssyebs', 'ssyes', 'ssyess', 'ssyeng', 'ssyej', 'ssyec', 'ssyek', 'ssyet', 'ssyep', 'ssyeh', 'sso', 'ssog', 'ssogg', 'ssogs', 'sson', 'ssonj', 'ssonh', 'ssod', 'ssol', 'ssolg', 'ssolm', 'ssolb', 'ssols', 'ssolt', 'ssolp', 'ssolh', 'ssom', 'ssob', 'ssobs', 'ssos', 'ssoss', 'ssong', 'ssoj', 'ssoc', 'ssok', 'ssot', 'ssop', 'ssoh', 'sswa', 'sswag', 'sswagg', 'sswags', 'sswan', 'sswanj', 'sswanh', 'sswad', 'sswal', 'sswalg', 'sswalm', 'sswalb'];
<?php return ['sswals', 'sswalt', 'sswalp', 'sswalh', 'sswam', 'sswab', 'sswabs', 'sswas', 'sswass', 'sswang', 'sswaj', 'sswac', 'sswak', 'sswat', 'sswap', 'sswah', 'sswae', 'sswaeg', 'sswaegg', 'sswaegs', 'sswaen', 'sswaenj', 'sswaenh', 'sswaed', 'sswael', 'sswaelg', 'sswaelm', 'sswaelb', 'sswaels', 'sswaelt', 'sswaelp', 'sswaelh', 'sswaem', 'sswaeb', 'sswaebs', 'sswaes', 'sswaess', 'sswaeng', 'sswaej', 'sswaec', 'sswaek', 'sswaet', 'sswaep', 'sswaeh', 'ssoe', 'ssoeg', 'ssoegg', 'ssoegs', 'ssoen', 'ssoenj', 'ssoenh', 'ssoed', 'ssoel', 'ssoelg', 'ssoelm', 'ssoelb', 'ssoels', 'ssoelt', 'ssoelp', 'ssoelh', 'ssoem', 'ssoeb', 'ssoebs', 'ssoes', 'ssoess', 'ssoeng', 'ssoej', 'ssoec', 'ssoek', 'ssoet', 'ssoep', 'ssoeh', 'ssyo', 'ssyog', 'ssyogg', 'ssyogs', 'ssyon', 'ssyonj', 'ssyonh', 'ssyod', 'ssyol', 'ssyolg', 'ssyolm', 'ssyolb', 'ssyols', 'ssyolt', 'ssyolp', 'ssyolh', 'ssyom', 'ssyob', 'ssyobs', 'ssyos', 'ssyoss', 'ssyong', 'ssyoj', 'ssyoc', 'ssyok', 'ssyot', 'ssyop', 'ssyoh', 'ssu', 'ssug', 'ssugg', 'ssugs', 'ssun', 'ssunj', 'ssunh', 'ssud', 'ssul', 'ssulg', 'ssulm', 'ssulb', 'ssuls', 'ssult', 'ssulp', 'ssulh', 'ssum', 'ssub', 'ssubs', 'ssus', 'ssuss', 'ssung', 'ssuj', 'ssuc', 'ssuk', 'ssut', 'ssup', 'ssuh', 'ssweo', 'ssweog', 'ssweogg', 'ssweogs', 'ssweon', 'ssweonj', 'ssweonh', 'ssweod', 'ssweol', 'ssweolg', 'ssweolm', 'ssweolb', 'ssweols', 'ssweolt', 'ssweolp', 'ssweolh', 'ssweom', 'ssweob', 'ssweobs', 'ssweos', 'ssweoss', 'ssweong', 'ssweoj', 'ssweoc', 'ssweok', 'ssweot', 'ssweop', 'ssweoh', 'sswe', 'ssweg', 'sswegg', 'sswegs', 'sswen', 'sswenj', 'sswenh', 'sswed', 'sswel', 'sswelg', 'sswelm', 'sswelb', 'sswels', 'sswelt', 'sswelp', 'sswelh', 'sswem', 'ssweb', 'sswebs', 'sswes', 'sswess', 'ssweng', 'sswej', 'sswec', 'sswek', 'sswet', 'sswep', 'ssweh', 'sswi', 'sswig', 'sswigg', 'sswigs', 'sswin', 'sswinj', 'sswinh', 'sswid', 'sswil', 'sswilg', 'sswilm', 'sswilb', 'sswils', 'sswilt', 'sswilp', 'sswilh', 'sswim', 'sswib', 'sswibs', 'sswis', 'sswiss', 'sswing', 'sswij', 'sswic', 'sswik', 'sswit', 'sswip', 'sswih', 'ssyu', 'ssyug', 'ssyugg', 'ssyugs', 'ssyun', 'ssyunj', 'ssyunh', 'ssyud', 'ssyul', 'ssyulg', 'ssyulm', 'ssyulb', 'ssyuls', 'ssyult', 'ssyulp', 'ssyulh', 'ssyum', 'ssyub', 'ssyubs', 'ssyus', 'ssyuss', 'ssyung', 'ssyuj', 'ssyuc', 'ssyuk', 'ssyut', 'ssyup', 'ssyuh', 'sseu', 'sseug', 'sseugg', 'sseugs', 'sseun', 'sseunj', 'sseunh', 'sseud', 'sseul', 'sseulg', 'sseulm', 'sseulb', 'sseuls', 'sseult', 'sseulp', 'sseulh'];
<?php return ['sseum', 'sseub', 'sseubs', 'sseus', 'sseuss', 'sseung', 'sseuj', 'sseuc', 'sseuk', 'sseut', 'sseup', 'sseuh', 'ssyi', 'ssyig', 'ssyigg', 'ssyigs', 'ssyin', 'ssyinj', 'ssyinh', 'ssyid', 'ssyil', 'ssyilg', 'ssyilm', 'ssyilb', 'ssyils', 'ssyilt', 'ssyilp', 'ssyilh', 'ssyim', 'ssyib', 'ssyibs', 'ssyis', 'ssyiss', 'ssying', 'ssyij', 'ssyic', 'ssyik', 'ssyit', 'ssyip', 'ssyih', 'ssi', 'ssig', 'ssigg', 'ssigs', 'ssin', 'ssinj', 'ssinh', 'ssid', 'ssil', 'ssilg', 'ssilm', 'ssilb', 'ssils', 'ssilt', 'ssilp', 'ssilh', 'ssim', 'ssib', 'ssibs', 'ssis', 'ssiss', 'ssing', 'ssij', 'ssic', 'ssik', 'ssit', 'ssip', 'ssih', 'a', 'ag', 'agg', 'ags', 'an', 'anj', 'anh', 'ad', 'al', 'alg', 'alm', 'alb', 'als', 'alt', 'alp', 'alh', 'am', 'ab', 'abs', 'as', 'ass', 'ang', 'aj', 'ac', 'ak', 'at', 'ap', 'ah', 'ae', 'aeg', 'aegg', 'aegs', 'aen', 'aenj', 'aenh', 'aed', 'ael', 'aelg', 'aelm', 'aelb', 'aels', 'aelt', 'aelp', 'aelh', 'aem', 'aeb', 'aebs', 'aes', 'aess', 'aeng', 'aej', 'aec', 'aek', 'aet', 'aep', 'aeh', 'ya', 'yag', 'yagg', 'yags', 'yan', 'yanj', 'yanh', 'yad', 'yal', 'yalg', 'yalm', 'yalb', 'yals', 'yalt', 'yalp', 'yalh', 'yam', 'yab', 'yabs', 'yas', 'yass', 'yang', 'yaj', 'yac', 'yak', 'yat', 'yap', 'yah', 'yae', 'yaeg', 'yaegg', 'yaegs', 'yaen', 'yaenj', 'yaenh', 'yaed', 'yael', 'yaelg', 'yaelm', 'yaelb', 'yaels', 'yaelt', 'yaelp', 'yaelh', 'yaem', 'yaeb', 'yaebs', 'yaes', 'yaess', 'yaeng', 'yaej', 'yaec', 'yaek', 'yaet', 'yaep', 'yaeh', 'eo', 'eog', 'eogg', 'eogs', 'eon', 'eonj', 'eonh', 'eod', 'eol', 'eolg', 'eolm', 'eolb', 'eols', 'eolt', 'eolp', 'eolh', 'eom', 'eob', 'eobs', 'eos', 'eoss', 'eong', 'eoj', 'eoc', 'eok', 'eot', 'eop', 'eoh', 'e', 'eg', 'egg', 'egs', 'en', 'enj', 'enh', 'ed', 'el', 'elg', 'elm', 'elb', 'els', 'elt', 'elp', 'elh', 'em', 'eb', 'ebs', 'es', 'ess', 'eng', 'ej', 'ec', 'ek', 'et', 'ep', 'eh', 'yeo', 'yeog', 'yeogg', 'yeogs', 'yeon', 'yeonj', 'yeonh', 'yeod', 'yeol', 'yeolg', 'yeolm', 'yeolb', 'yeols', 'yeolt', 'yeolp', 'yeolh', 'yeom', 'yeob', 'yeobs', 'yeos'];
<?php return ['yeoss', 'yeong', 'yeoj', 'yeoc', 'yeok', 'yeot', 'yeop', 'yeoh', 'ye', 'yeg', 'yegg', 'yegs', 'yen', 'yenj', 'yenh', 'yed', 'yel', 'yelg', 'yelm', 'yelb', 'yels', 'yelt', 'yelp', 'yelh', 'yem', 'yeb', 'yebs', 'yes', 'yess', 'yeng', 'yej', 'yec', 'yek', 'yet', 'yep', 'yeh', 'o', 'og', 'ogg', 'ogs', 'on', 'onj', 'onh', 'od', 'ol', 'olg', 'olm', 'olb', 'ols', 'olt', 'olp', 'olh', 'om', 'ob', 'obs', 'os', 'oss', 'ong', 'oj', 'oc', 'ok', 'ot', 'op', 'oh', 'wa', 'wag', 'wagg', 'wags', 'wan', 'wanj', 'wanh', 'wad', 'wal', 'walg', 'walm', 'walb', 'wals', 'walt', 'walp', 'walh', 'wam', 'wab', 'wabs', 'was', 'wass', 'wang', 'waj', 'wac', 'wak', 'wat', 'wap', 'wah', 'wae', 'waeg', 'waegg', 'waegs', 'waen', 'waenj', 'waenh', 'waed', 'wael', 'waelg', 'waelm', 'waelb', 'waels', 'waelt', 'waelp', 'waelh', 'waem', 'waeb', 'waebs', 'waes', 'waess', 'waeng', 'waej', 'waec', 'waek', 'waet', 'waep', 'waeh', 'oe', 'oeg', 'oegg', 'oegs', 'oen', 'oenj', 'oenh', 'oed', 'oel', 'oelg', 'oelm', 'oelb', 'oels', 'oelt', 'oelp', 'oelh', 'oem', 'oeb', 'oebs', 'oes', 'oess', 'oeng', 'oej', 'oec', 'oek', 'oet', 'oep', 'oeh', 'yo', 'yog', 'yogg', 'yogs', 'yon', 'yonj', 'yonh', 'yod', 'yol', 'yolg', 'yolm', 'yolb', 'yols', 'yolt', 'yolp', 'yolh', 'yom', 'yob', 'yobs', 'yos', 'yoss', 'yong', 'yoj', 'yoc', 'yok', 'yot', 'yop', 'yoh', 'u', 'ug', 'ugg', 'ugs', 'un', 'unj', 'unh', 'ud', 'ul', 'ulg', 'ulm', 'ulb', 'uls', 'ult', 'ulp', 'ulh', 'um', 'ub', 'ubs', 'us', 'uss', 'ung', 'uj', 'uc', 'uk', 'ut', 'up', 'uh', 'weo', 'weog', 'weogg', 'weogs', 'weon', 'weonj', 'weonh', 'weod', 'weol', 'weolg', 'weolm', 'weolb', 'weols', 'weolt', 'weolp', 'weolh', 'weom', 'weob', 'weobs', 'weos', 'weoss', 'weong', 'weoj', 'weoc', 'weok', 'weot', 'weop', 'weoh', 'we', 'weg', 'wegg', 'wegs', 'wen', 'wenj', 'wenh', 'wed', 'wel', 'welg', 'welm', 'welb', 'wels', 'welt', 'welp', 'welh', 'wem', 'web', 'webs', 'wes', 'wess', 'weng', 'wej', 'wec'];
<?php return ['wek', 'wet', 'wep', 'weh', 'wi', 'wig', 'wigg', 'wigs', 'win', 'winj', 'winh', 'wid', 'wil', 'wilg', 'wilm', 'wilb', 'wils', 'wilt', 'wilp', 'wilh', 'wim', 'wib', 'wibs', 'wis', 'wiss', 'wing', 'wij', 'wic', 'wik', 'wit', 'wip', 'wih', 'yu', 'yug', 'yugg', 'yugs', 'yun', 'yunj', 'yunh', 'yud', 'yul', 'yulg', 'yulm', 'yulb', 'yuls', 'yult', 'yulp', 'yulh', 'yum', 'yub', 'yubs', 'yus', 'yuss', 'yung', 'yuj', 'yuc', 'yuk', 'yut', 'yup', 'yuh', 'eu', 'eug', 'eugg', 'eugs', 'eun', 'eunj', 'eunh', 'eud', 'eul', 'eulg', 'eulm', 'eulb', 'euls', 'eult', 'eulp', 'eulh', 'eum', 'eub', 'eubs', 'eus', 'euss', 'eung', 'euj', 'euc', 'euk', 'eut', 'eup', 'euh', 'yi', 'yig', 'yigg', 'yigs', 'yin', 'yinj', 'yinh', 'yid', 'yil', 'yilg', 'yilm', 'yilb', 'yils', 'yilt', 'yilp', 'yilh', 'yim', 'yib', 'yibs', 'yis', 'yiss', 'ying', 'yij', 'yic', 'yik', 'yit', 'yip', 'yih', 'i', 'ig', 'igg', 'igs', 'in', 'inj', 'inh', 'id', 'il', 'ilg', 'ilm', 'ilb', 'ils', 'ilt', 'ilp', 'ilh', 'im', 'ib', 'ibs', 'is', 'iss', 'ing', 'ij', 'ic', 'ik', 'it', 'ip', 'ih', 'ja', 'jag', 'jagg', 'jags', 'jan', 'janj', 'janh', 'jad', 'jal', 'jalg', 'jalm', 'jalb', 'jals', 'jalt', 'jalp', 'jalh', 'jam', 'jab', 'jabs', 'jas', 'jass', 'jang', 'jaj', 'jac', 'jak', 'jat', 'jap', 'jah', 'jae', 'jaeg', 'jaegg', 'jaegs', 'jaen', 'jaenj', 'jaenh', 'jaed', 'jael', 'jaelg', 'jaelm', 'jaelb', 'jaels', 'jaelt', 'jaelp', 'jaelh', 'jaem', 'jaeb', 'jaebs', 'jaes', 'jaess', 'jaeng', 'jaej', 'jaec', 'jaek', 'jaet', 'jaep', 'jaeh', 'jya', 'jyag', 'jyagg', 'jyags', 'jyan', 'jyanj', 'jyanh', 'jyad', 'jyal', 'jyalg', 'jyalm', 'jyalb', 'jyals', 'jyalt', 'jyalp', 'jyalh', 'jyam', 'jyab', 'jyabs', 'jyas', 'jyass', 'jyang', 'jyaj', 'jyac', 'jyak', 'jyat', 'jyap', 'jyah', 'jyae', 'jyaeg', 'jyaegg', 'jyaegs', 'jyaen', 'jyaenj', 'jyaenh', 'jyaed', 'jyael', 'jyaelg', 'jyaelm', 'jyaelb', 'jyaels', 'jyaelt', 'jyaelp', 'jyaelh', 'jyaem', 'jyaeb', 'jyaebs', 'jyaes', 'jyaess', 'jyaeng', 'jyaej', 'jyaec', 'jyaek', 'jyaet', 'jyaep', 'jyaeh'];
<?php return ['jeo', 'jeog', 'jeogg', 'jeogs', 'jeon', 'jeonj', 'jeonh', 'jeod', 'jeol', 'jeolg', 'jeolm', 'jeolb', 'jeols', 'jeolt', 'jeolp', 'jeolh', 'jeom', 'jeob', 'jeobs', 'jeos', 'jeoss', 'jeong', 'jeoj', 'jeoc', 'jeok', 'jeot', 'jeop', 'jeoh', 'je', 'jeg', 'jegg', 'jegs', 'jen', 'jenj', 'jenh', 'jed', 'jel', 'jelg', 'jelm', 'jelb', 'jels', 'jelt', 'jelp', 'jelh', 'jem', 'jeb', 'jebs', 'jes', 'jess', 'jeng', 'jej', 'jec', 'jek', 'jet', 'jep', 'jeh', 'jyeo', 'jyeog', 'jyeogg', 'jyeogs', 'jyeon', 'jyeonj', 'jyeonh', 'jyeod', 'jyeol', 'jyeolg', 'jyeolm', 'jyeolb', 'jyeols', 'jyeolt', 'jyeolp', 'jyeolh', 'jyeom', 'jyeob', 'jyeobs', 'jyeos', 'jyeoss', 'jyeong', 'jyeoj', 'jyeoc', 'jyeok', 'jyeot', 'jyeop', 'jyeoh', 'jye', 'jyeg', 'jyegg', 'jyegs', 'jyen', 'jyenj', 'jyenh', 'jyed', 'jyel', 'jyelg', 'jyelm', 'jyelb', 'jyels', 'jyelt', 'jyelp', 'jyelh', 'jyem', 'jyeb', 'jyebs', 'jyes', 'jyess', 'jyeng', 'jyej', 'jyec', 'jyek', 'jyet', 'jyep', 'jyeh', 'jo', 'jog', 'jogg', 'jogs', 'jon', 'jonj', 'jonh', 'jod', 'jol', 'jolg', 'jolm', 'jolb', 'jols', 'jolt', 'jolp', 'jolh', 'jom', 'job', 'jobs', 'jos', 'joss', 'jong', 'joj', 'joc', 'jok', 'jot', 'jop', 'joh', 'jwa', 'jwag', 'jwagg', 'jwags', 'jwan', 'jwanj', 'jwanh', 'jwad', 'jwal', 'jwalg', 'jwalm', 'jwalb', 'jwals', 'jwalt', 'jwalp', 'jwalh', 'jwam', 'jwab', 'jwabs', 'jwas', 'jwass', 'jwang', 'jwaj', 'jwac', 'jwak', 'jwat', 'jwap', 'jwah', 'jwae', 'jwaeg', 'jwaegg', 'jwaegs', 'jwaen', 'jwaenj', 'jwaenh', 'jwaed', 'jwael', 'jwaelg', 'jwaelm', 'jwaelb', 'jwaels', 'jwaelt', 'jwaelp', 'jwaelh', 'jwaem', 'jwaeb', 'jwaebs', 'jwaes', 'jwaess', 'jwaeng', 'jwaej', 'jwaec', 'jwaek', 'jwaet', 'jwaep', 'jwaeh', 'joe', 'joeg', 'joegg', 'joegs', 'joen', 'joenj', 'joenh', 'joed', 'joel', 'joelg', 'joelm', 'joelb', 'joels', 'joelt', 'joelp', 'joelh', 'joem', 'joeb', 'joebs', 'joes', 'joess', 'joeng', 'joej', 'joec', 'joek', 'joet', 'joep', 'joeh', 'jyo', 'jyog', 'jyogg', 'jyogs', 'jyon', 'jyonj', 'jyonh', 'jyod', 'jyol', 'jyolg', 'jyolm', 'jyolb', 'jyols', 'jyolt', 'jyolp', 'jyolh', 'jyom', 'jyob', 'jyobs', 'jyos', 'jyoss', 'jyong', 'jyoj', 'jyoc', 'jyok', 'jyot', 'jyop', 'jyoh', 'ju', 'jug', 'jugg', 'jugs'];
<?php return ['jun', 'junj', 'junh', 'jud', 'jul', 'julg', 'julm', 'julb', 'juls', 'jult', 'julp', 'julh', 'jum', 'jub', 'jubs', 'jus', 'juss', 'jung', 'juj', 'juc', 'juk', 'jut', 'jup', 'juh', 'jweo', 'jweog', 'jweogg', 'jweogs', 'jweon', 'jweonj', 'jweonh', 'jweod', 'jweol', 'jweolg', 'jweolm', 'jweolb', 'jweols', 'jweolt', 'jweolp', 'jweolh', 'jweom', 'jweob', 'jweobs', 'jweos', 'jweoss', 'jweong', 'jweoj', 'jweoc', 'jweok', 'jweot', 'jweop', 'jweoh', 'jwe', 'jweg', 'jwegg', 'jwegs', 'jwen', 'jwenj', 'jwenh', 'jwed', 'jwel', 'jwelg', 'jwelm', 'jwelb', 'jwels', 'jwelt', 'jwelp', 'jwelh', 'jwem', 'jweb', 'jwebs', 'jwes', 'jwess', 'jweng', 'jwej', 'jwec', 'jwek', 'jwet', 'jwep', 'jweh', 'jwi', 'jwig', 'jwigg', 'jwigs', 'jwin', 'jwinj', 'jwinh', 'jwid', 'jwil', 'jwilg', 'jwilm', 'jwilb', 'jwils', 'jwilt', 'jwilp', 'jwilh', 'jwim', 'jwib', 'jwibs', 'jwis', 'jwiss', 'jwing', 'jwij', 'jwic', 'jwik', 'jwit', 'jwip', 'jwih', 'jyu', 'jyug', 'jyugg', 'jyugs', 'jyun', 'jyunj', 'jyunh', 'jyud', 'jyul', 'jyulg', 'jyulm', 'jyulb', 'jyuls', 'jyult', 'jyulp', 'jyulh', 'jyum', 'jyub', 'jyubs', 'jyus', 'jyuss', 'jyung', 'jyuj', 'jyuc', 'jyuk', 'jyut', 'jyup', 'jyuh', 'jeu', 'jeug', 'jeugg', 'jeugs', 'jeun', 'jeunj', 'jeunh', 'jeud', 'jeul', 'jeulg', 'jeulm', 'jeulb', 'jeuls', 'jeult', 'jeulp', 'jeulh', 'jeum', 'jeub', 'jeubs', 'jeus', 'jeuss', 'jeung', 'jeuj', 'jeuc', 'jeuk', 'jeut', 'jeup', 'jeuh', 'jyi', 'jyig', 'jyigg', 'jyigs', 'jyin', 'jyinj', 'jyinh', 'jyid', 'jyil', 'jyilg', 'jyilm', 'jyilb', 'jyils', 'jyilt', 'jyilp', 'jyilh', 'jyim', 'jyib', 'jyibs', 'jyis', 'jyiss', 'jying', 'jyij', 'jyic', 'jyik', 'jyit', 'jyip', 'jyih', 'ji', 'jig', 'jigg', 'jigs', 'jin', 'jinj', 'jinh', 'jid', 'jil', 'jilg', 'jilm', 'jilb', 'jils', 'jilt', 'jilp', 'jilh', 'jim', 'jib', 'jibs', 'jis', 'jiss', 'jing', 'jij', 'jic', 'jik', 'jit', 'jip', 'jih', 'jja', 'jjag', 'jjagg', 'jjags', 'jjan', 'jjanj', 'jjanh', 'jjad', 'jjal', 'jjalg', 'jjalm', 'jjalb', 'jjals', 'jjalt', 'jjalp', 'jjalh', 'jjam', 'jjab', 'jjabs', 'jjas', 'jjass', 'jjang', 'jjaj', 'jjac', 'jjak', 'jjat', 'jjap', 'jjah', 'jjae', 'jjaeg', 'jjaegg', 'jjaegs', 'jjaen', 'jjaenj', 'jjaenh', 'jjaed'];
<?php return ['jjael', 'jjaelg', 'jjaelm', 'jjaelb', 'jjaels', 'jjaelt', 'jjaelp', 'jjaelh', 'jjaem', 'jjaeb', 'jjaebs', 'jjaes', 'jjaess', 'jjaeng', 'jjaej', 'jjaec', 'jjaek', 'jjaet', 'jjaep', 'jjaeh', 'jjya', 'jjyag', 'jjyagg', 'jjyags', 'jjyan', 'jjyanj', 'jjyanh', 'jjyad', 'jjyal', 'jjyalg', 'jjyalm', 'jjyalb', 'jjyals', 'jjyalt', 'jjyalp', 'jjyalh', 'jjyam', 'jjyab', 'jjyabs', 'jjyas', 'jjyass', 'jjyang', 'jjyaj', 'jjyac', 'jjyak', 'jjyat', 'jjyap', 'jjyah', 'jjyae', 'jjyaeg', 'jjyaegg', 'jjyaegs', 'jjyaen', 'jjyaenj', 'jjyaenh', 'jjyaed', 'jjyael', 'jjyaelg', 'jjyaelm', 'jjyaelb', 'jjyaels', 'jjyaelt', 'jjyaelp', 'jjyaelh', 'jjyaem', 'jjyaeb', 'jjyaebs', 'jjyaes', 'jjyaess', 'jjyaeng', 'jjyaej', 'jjyaec', 'jjyaek', 'jjyaet', 'jjyaep', 'jjyaeh', 'jjeo', 'jjeog', 'jjeogg', 'jjeogs', 'jjeon', 'jjeonj', 'jjeonh', 'jjeod', 'jjeol', 'jjeolg', 'jjeolm', 'jjeolb', 'jjeols', 'jjeolt', 'jjeolp', 'jjeolh', 'jjeom', 'jjeob', 'jjeobs', 'jjeos', 'jjeoss', 'jjeong', 'jjeoj', 'jjeoc', 'jjeok', 'jjeot', 'jjeop', 'jjeoh', 'jje', 'jjeg', 'jjegg', 'jjegs', 'jjen', 'jjenj', 'jjenh', 'jjed', 'jjel', 'jjelg', 'jjelm', 'jjelb', 'jjels', 'jjelt', 'jjelp', 'jjelh', 'jjem', 'jjeb', 'jjebs', 'jjes', 'jjess', 'jjeng', 'jjej', 'jjec', 'jjek', 'jjet', 'jjep', 'jjeh', 'jjyeo', 'jjyeog', 'jjyeogg', 'jjyeogs', 'jjyeon', 'jjyeonj', 'jjyeonh', 'jjyeod', 'jjyeol', 'jjyeolg', 'jjyeolm', 'jjyeolb', 'jjyeols', 'jjyeolt', 'jjyeolp', 'jjyeolh', 'jjyeom', 'jjyeob', 'jjyeobs', 'jjyeos', 'jjyeoss', 'jjyeong', 'jjyeoj', 'jjyeoc', 'jjyeok', 'jjyeot', 'jjyeop', 'jjyeoh', 'jjye', 'jjyeg', 'jjyegg', 'jjyegs', 'jjyen', 'jjyenj', 'jjyenh', 'jjyed', 'jjyel', 'jjyelg', 'jjyelm', 'jjyelb', 'jjyels', 'jjyelt', 'jjyelp', 'jjyelh', 'jjyem', 'jjyeb', 'jjyebs', 'jjyes', 'jjyess', 'jjyeng', 'jjyej', 'jjyec', 'jjyek', 'jjyet', 'jjyep', 'jjyeh', 'jjo', 'jjog', 'jjogg', 'jjogs', 'jjon', 'jjonj', 'jjonh', 'jjod', 'jjol', 'jjolg', 'jjolm', 'jjolb', 'jjols', 'jjolt', 'jjolp', 'jjolh', 'jjom', 'jjob', 'jjobs', 'jjos', 'jjoss', 'jjong', 'jjoj', 'jjoc', 'jjok', 'jjot', 'jjop', 'jjoh', 'jjwa', 'jjwag', 'jjwagg', 'jjwags', 'jjwan', 'jjwanj', 'jjwanh', 'jjwad', 'jjwal', 'jjwalg', 'jjwalm', 'jjwalb', 'jjwals', 'jjwalt', 'jjwalp', 'jjwalh', 'jjwam', 'jjwab', 'jjwabs', 'jjwas', 'jjwass', 'jjwang', 'jjwaj', 'jjwac', 'jjwak', 'jjwat', 'jjwap', 'jjwah', 'jjwae', 'jjwaeg', 'jjwaegg', 'jjwaegs', 'jjwaen', 'jjwaenj', 'jjwaenh', 'jjwaed', 'jjwael', 'jjwaelg', 'jjwaelm', 'jjwaelb'];
<?php return ['jjwaels', 'jjwaelt', 'jjwaelp', 'jjwaelh', 'jjwaem', 'jjwaeb', 'jjwaebs', 'jjwaes', 'jjwaess', 'jjwaeng', 'jjwaej', 'jjwaec', 'jjwaek', 'jjwaet', 'jjwaep', 'jjwaeh', 'jjoe', 'jjoeg', 'jjoegg', 'jjoegs', 'jjoen', 'jjoenj', 'jjoenh', 'jjoed', 'jjoel', 'jjoelg', 'jjoelm', 'jjoelb', 'jjoels', 'jjoelt', 'jjoelp', 'jjoelh', 'jjoem', 'jjoeb', 'jjoebs', 'jjoes', 'jjoess', 'jjoeng', 'jjoej', 'jjoec', 'jjoek', 'jjoet', 'jjoep', 'jjoeh', 'jjyo', 'jjyog', 'jjyogg', 'jjyogs', 'jjyon', 'jjyonj', 'jjyonh', 'jjyod', 'jjyol', 'jjyolg', 'jjyolm', 'jjyolb', 'jjyols', 'jjyolt', 'jjyolp', 'jjyolh', 'jjyom', 'jjyob', 'jjyobs', 'jjyos', 'jjyoss', 'jjyong', 'jjyoj', 'jjyoc', 'jjyok', 'jjyot', 'jjyop', 'jjyoh', 'jju', 'jjug', 'jjugg', 'jjugs', 'jjun', 'jjunj', 'jjunh', 'jjud', 'jjul', 'jjulg', 'jjulm', 'jjulb', 'jjuls', 'jjult', 'jjulp', 'jjulh', 'jjum', 'jjub', 'jjubs', 'jjus', 'jjuss', 'jjung', 'jjuj', 'jjuc', 'jjuk', 'jjut', 'jjup', 'jjuh', 'jjweo', 'jjweog', 'jjweogg', 'jjweogs', 'jjweon', 'jjweonj', 'jjweonh', 'jjweod', 'jjweol', 'jjweolg', 'jjweolm', 'jjweolb', 'jjweols', 'jjweolt', 'jjweolp', 'jjweolh', 'jjweom', 'jjweob', 'jjweobs', 'jjweos', 'jjweoss', 'jjweong', 'jjweoj', 'jjweoc', 'jjweok', 'jjweot', 'jjweop', 'jjweoh', 'jjwe', 'jjweg', 'jjwegg', 'jjwegs', 'jjwen', 'jjwenj', 'jjwenh', 'jjwed', 'jjwel', 'jjwelg', 'jjwelm', 'jjwelb', 'jjwels', 'jjwelt', 'jjwelp', 'jjwelh', 'jjwem', 'jjweb', 'jjwebs', 'jjwes', 'jjwess', 'jjweng', 'jjwej', 'jjwec', 'jjwek', 'jjwet', 'jjwep', 'jjweh', 'jjwi', 'jjwig', 'jjwigg', 'jjwigs', 'jjwin', 'jjwinj', 'jjwinh', 'jjwid', 'jjwil', 'jjwilg', 'jjwilm', 'jjwilb', 'jjwils', 'jjwilt', 'jjwilp', 'jjwilh', 'jjwim', 'jjwib', 'jjwibs', 'jjwis', 'jjwiss', 'jjwing', 'jjwij', 'jjwic', 'jjwik', 'jjwit', 'jjwip', 'jjwih', 'jjyu', 'jjyug', 'jjyugg', 'jjyugs', 'jjyun', 'jjyunj', 'jjyunh', 'jjyud', 'jjyul', 'jjyulg', 'jjyulm', 'jjyulb', 'jjyuls', 'jjyult', 'jjyulp', 'jjyulh', 'jjyum', 'jjyub', 'jjyubs', 'jjyus', 'jjyuss', 'jjyung', 'jjyuj', 'jjyuc', 'jjyuk', 'jjyut', 'jjyup', 'jjyuh', 'jjeu', 'jjeug', 'jjeugg', 'jjeugs', 'jjeun', 'jjeunj', 'jjeunh', 'jjeud', 'jjeul', 'jjeulg', 'jjeulm', 'jjeulb', 'jjeuls', 'jjeult', 'jjeulp', 'jjeulh', 'jjeum', 'jjeub', 'jjeubs', 'jjeus', 'jjeuss', 'jjeung', 'jjeuj', 'jjeuc', 'jjeuk', 'jjeut', 'jjeup', 'jjeuh', 'jjyi', 'jjyig', 'jjyigg', 'jjyigs', 'jjyin', 'jjyinj', 'jjyinh', 'jjyid', 'jjyil', 'jjyilg', 'jjyilm', 'jjyilb', 'jjyils', 'jjyilt', 'jjyilp', 'jjyilh'];
<?php return ['jjyim', 'jjyib', 'jjyibs', 'jjyis', 'jjyiss', 'jjying', 'jjyij', 'jjyic', 'jjyik', 'jjyit', 'jjyip', 'jjyih', 'jji', 'jjig', 'jjigg', 'jjigs', 'jjin', 'jjinj', 'jjinh', 'jjid', 'jjil', 'jjilg', 'jjilm', 'jjilb', 'jjils', 'jjilt', 'jjilp', 'jjilh', 'jjim', 'jjib', 'jjibs', 'jjis', 'jjiss', 'jjing', 'jjij', 'jjic', 'jjik', 'jjit', 'jjip', 'jjih', 'ca', 'cag', 'cagg', 'cags', 'can', 'canj', 'canh', 'cad', 'cal', 'calg', 'calm', 'calb', 'cals', 'calt', 'calp', 'calh', 'cam', 'cab', 'cabs', 'cas', 'cass', 'cang', 'caj', 'cac', 'cak', 'cat', 'cap', 'cah', 'cae', 'caeg', 'caegg', 'caegs', 'caen', 'caenj', 'caenh', 'caed', 'cael', 'caelg', 'caelm', 'caelb', 'caels', 'caelt', 'caelp', 'caelh', 'caem', 'caeb', 'caebs', 'caes', 'caess', 'caeng', 'caej', 'caec', 'caek', 'caet', 'caep', 'caeh', 'cya', 'cyag', 'cyagg', 'cyags', 'cyan', 'cyanj', 'cyanh', 'cyad', 'cyal', 'cyalg', 'cyalm', 'cyalb', 'cyals', 'cyalt', 'cyalp', 'cyalh', 'cyam', 'cyab', 'cyabs', 'cyas', 'cyass', 'cyang', 'cyaj', 'cyac', 'cyak', 'cyat', 'cyap', 'cyah', 'cyae', 'cyaeg', 'cyaegg', 'cyaegs', 'cyaen', 'cyaenj', 'cyaenh', 'cyaed', 'cyael', 'cyaelg', 'cyaelm', 'cyaelb', 'cyaels', 'cyaelt', 'cyaelp', 'cyaelh', 'cyaem', 'cyaeb', 'cyaebs', 'cyaes', 'cyaess', 'cyaeng', 'cyaej', 'cyaec', 'cyaek', 'cyaet', 'cyaep', 'cyaeh', 'ceo', 'ceog', 'ceogg', 'ceogs', 'ceon', 'ceonj', 'ceonh', 'ceod', 'ceol', 'ceolg', 'ceolm', 'ceolb', 'ceols', 'ceolt', 'ceolp', 'ceolh', 'ceom', 'ceob', 'ceobs', 'ceos', 'ceoss', 'ceong', 'ceoj', 'ceoc', 'ceok', 'ceot', 'ceop', 'ceoh', 'ce', 'ceg', 'cegg', 'cegs', 'cen', 'cenj', 'cenh', 'ced', 'cel', 'celg', 'celm', 'celb', 'cels', 'celt', 'celp', 'celh', 'cem', 'ceb', 'cebs', 'ces', 'cess', 'ceng', 'cej', 'cec', 'cek', 'cet', 'cep', 'ceh', 'cyeo', 'cyeog', 'cyeogg', 'cyeogs', 'cyeon', 'cyeonj', 'cyeonh', 'cyeod', 'cyeol', 'cyeolg', 'cyeolm', 'cyeolb', 'cyeols', 'cyeolt', 'cyeolp', 'cyeolh', 'cyeom', 'cyeob', 'cyeobs', 'cyeos', 'cyeoss', 'cyeong', 'cyeoj', 'cyeoc', 'cyeok', 'cyeot', 'cyeop', 'cyeoh', 'cye', 'cyeg', 'cyegg', 'cyegs', 'cyen', 'cyenj', 'cyenh', 'cyed', 'cyel', 'cyelg', 'cyelm', 'cyelb', 'cyels', 'cyelt', 'cyelp', 'cyelh', 'cyem', 'cyeb', 'cyebs', 'cyes'];
<?php return ['cyess', 'cyeng', 'cyej', 'cyec', 'cyek', 'cyet', 'cyep', 'cyeh', 'co', 'cog', 'cogg', 'cogs', 'con', 'conj', 'conh', 'cod', 'col', 'colg', 'colm', 'colb', 'cols', 'colt', 'colp', 'colh', 'com', 'cob', 'cobs', 'cos', 'coss', 'cong', 'coj', 'coc', 'cok', 'cot', 'cop', 'coh', 'cwa', 'cwag', 'cwagg', 'cwags', 'cwan', 'cwanj', 'cwanh', 'cwad', 'cwal', 'cwalg', 'cwalm', 'cwalb', 'cwals', 'cwalt', 'cwalp', 'cwalh', 'cwam', 'cwab', 'cwabs', 'cwas', 'cwass', 'cwang', 'cwaj', 'cwac', 'cwak', 'cwat', 'cwap', 'cwah', 'cwae', 'cwaeg', 'cwaegg', 'cwaegs', 'cwaen', 'cwaenj', 'cwaenh', 'cwaed', 'cwael', 'cwaelg', 'cwaelm', 'cwaelb', 'cwaels', 'cwaelt', 'cwaelp', 'cwaelh', 'cwaem', 'cwaeb', 'cwaebs', 'cwaes', 'cwaess', 'cwaeng', 'cwaej', 'cwaec', 'cwaek', 'cwaet', 'cwaep', 'cwaeh', 'coe', 'coeg', 'coegg', 'coegs', 'coen', 'coenj', 'coenh', 'coed', 'coel', 'coelg', 'coelm', 'coelb', 'coels', 'coelt', 'coelp', 'coelh', 'coem', 'coeb', 'coebs', 'coes', 'coess', 'coeng', 'coej', 'coec', 'coek', 'coet', 'coep', 'coeh', 'cyo', 'cyog', 'cyogg', 'cyogs', 'cyon', 'cyonj', 'cyonh', 'cyod', 'cyol', 'cyolg', 'cyolm', 'cyolb', 'cyols', 'cyolt', 'cyolp', 'cyolh', 'cyom', 'cyob', 'cyobs', 'cyos', 'cyoss', 'cyong', 'cyoj', 'cyoc', 'cyok', 'cyot', 'cyop', 'cyoh', 'cu', 'cug', 'cugg', 'cugs', 'cun', 'cunj', 'cunh', 'cud', 'cul', 'culg', 'culm', 'culb', 'culs', 'cult', 'culp', 'culh', 'cum', 'cub', 'cubs', 'cus', 'cuss', 'cung', 'cuj', 'cuc', 'cuk', 'cut', 'cup', 'cuh', 'cweo', 'cweog', 'cweogg', 'cweogs', 'cweon', 'cweonj', 'cweonh', 'cweod', 'cweol', 'cweolg', 'cweolm', 'cweolb', 'cweols', 'cweolt', 'cweolp', 'cweolh', 'cweom', 'cweob', 'cweobs', 'cweos', 'cweoss', 'cweong', 'cweoj', 'cweoc', 'cweok', 'cweot', 'cweop', 'cweoh', 'cwe', 'cweg', 'cwegg', 'cwegs', 'cwen', 'cwenj', 'cwenh', 'cwed', 'cwel', 'cwelg', 'cwelm', 'cwelb', 'cwels', 'cwelt', 'cwelp', 'cwelh', 'cwem', 'cweb', 'cwebs', 'cwes', 'cwess', 'cweng', 'cwej', 'cwec', 'cwek', 'cwet', 'cwep', 'cweh', 'cwi', 'cwig', 'cwigg', 'cwigs', 'cwin', 'cwinj', 'cwinh', 'cwid', 'cwil', 'cwilg', 'cwilm', 'cwilb', 'cwils', 'cwilt', 'cwilp', 'cwilh', 'cwim', 'cwib', 'cwibs', 'cwis', 'cwiss', 'cwing', 'cwij', 'cwic'];
<?php return ['cwik', 'cwit', 'cwip', 'cwih', 'cyu', 'cyug', 'cyugg', 'cyugs', 'cyun', 'cyunj', 'cyunh', 'cyud', 'cyul', 'cyulg', 'cyulm', 'cyulb', 'cyuls', 'cyult', 'cyulp', 'cyulh', 'cyum', 'cyub', 'cyubs', 'cyus', 'cyuss', 'cyung', 'cyuj', 'cyuc', 'cyuk', 'cyut', 'cyup', 'cyuh', 'ceu', 'ceug', 'ceugg', 'ceugs', 'ceun', 'ceunj', 'ceunh', 'ceud', 'ceul', 'ceulg', 'ceulm', 'ceulb', 'ceuls', 'ceult', 'ceulp', 'ceulh', 'ceum', 'ceub', 'ceubs', 'ceus', 'ceuss', 'ceung', 'ceuj', 'ceuc', 'ceuk', 'ceut', 'ceup', 'ceuh', 'cyi', 'cyig', 'cyigg', 'cyigs', 'cyin', 'cyinj', 'cyinh', 'cyid', 'cyil', 'cyilg', 'cyilm', 'cyilb', 'cyils', 'cyilt', 'cyilp', 'cyilh', 'cyim', 'cyib', 'cyibs', 'cyis', 'cyiss', 'cying', 'cyij', 'cyic', 'cyik', 'cyit', 'cyip', 'cyih', 'ci', 'cig', 'cigg', 'cigs', 'cin', 'cinj', 'cinh', 'cid', 'cil', 'cilg', 'cilm', 'cilb', 'cils', 'cilt', 'cilp', 'cilh', 'cim', 'cib', 'cibs', 'cis', 'ciss', 'cing', 'cij', 'cic', 'cik', 'cit', 'cip', 'cih', 'ka', 'kag', 'kagg', 'kags', 'kan', 'kanj', 'kanh', 'kad', 'kal', 'kalg', 'kalm', 'kalb', 'kals', 'kalt', 'kalp', 'kalh', 'kam', 'kab', 'kabs', 'kas', 'kass', 'kang', 'kaj', 'kac', 'kak', 'kat', 'kap', 'kah', 'kae', 'kaeg', 'kaegg', 'kaegs', 'kaen', 'kaenj', 'kaenh', 'kaed', 'kael', 'kaelg', 'kaelm', 'kaelb', 'kaels', 'kaelt', 'kaelp', 'kaelh', 'kaem', 'kaeb', 'kaebs', 'kaes', 'kaess', 'kaeng', 'kaej', 'kaec', 'kaek', 'kaet', 'kaep', 'kaeh', 'kya', 'kyag', 'kyagg', 'kyags', 'kyan', 'kyanj', 'kyanh', 'kyad', 'kyal', 'kyalg', 'kyalm', 'kyalb', 'kyals', 'kyalt', 'kyalp', 'kyalh', 'kyam', 'kyab', 'kyabs', 'kyas', 'kyass', 'kyang', 'kyaj', 'kyac', 'kyak', 'kyat', 'kyap', 'kyah', 'kyae', 'kyaeg', 'kyaegg', 'kyaegs', 'kyaen', 'kyaenj', 'kyaenh', 'kyaed', 'kyael', 'kyaelg', 'kyaelm', 'kyaelb', 'kyaels', 'kyaelt', 'kyaelp', 'kyaelh', 'kyaem', 'kyaeb', 'kyaebs', 'kyaes', 'kyaess', 'kyaeng', 'kyaej', 'kyaec', 'kyaek', 'kyaet', 'kyaep', 'kyaeh', 'keo', 'keog', 'keogg', 'keogs', 'keon', 'keonj', 'keonh', 'keod', 'keol', 'keolg', 'keolm', 'keolb', 'keols', 'keolt', 'keolp', 'keolh', 'keom', 'keob', 'keobs', 'keos', 'keoss', 'keong', 'keoj', 'keoc', 'keok', 'keot', 'keop', 'keoh'];
<?php return ['ke', 'keg', 'kegg', 'kegs', 'ken', 'kenj', 'kenh', 'ked', 'kel', 'kelg', 'kelm', 'kelb', 'kels', 'kelt', 'kelp', 'kelh', 'kem', 'keb', 'kebs', 'kes', 'kess', 'keng', 'kej', 'kec', 'kek', 'ket', 'kep', 'keh', 'kyeo', 'kyeog', 'kyeogg', 'kyeogs', 'kyeon', 'kyeonj', 'kyeonh', 'kyeod', 'kyeol', 'kyeolg', 'kyeolm', 'kyeolb', 'kyeols', 'kyeolt', 'kyeolp', 'kyeolh', 'kyeom', 'kyeob', 'kyeobs', 'kyeos', 'kyeoss', 'kyeong', 'kyeoj', 'kyeoc', 'kyeok', 'kyeot', 'kyeop', 'kyeoh', 'kye', 'kyeg', 'kyegg', 'kyegs', 'kyen', 'kyenj', 'kyenh', 'kyed', 'kyel', 'kyelg', 'kyelm', 'kyelb', 'kyels', 'kyelt', 'kyelp', 'kyelh', 'kyem', 'kyeb', 'kyebs', 'kyes', 'kyess', 'kyeng', 'kyej', 'kyec', 'kyek', 'kyet', 'kyep', 'kyeh', 'ko', 'kog', 'kogg', 'kogs', 'kon', 'konj', 'konh', 'kod', 'kol', 'kolg', 'kolm', 'kolb', 'kols', 'kolt', 'kolp', 'kolh', 'kom', 'kob', 'kobs', 'kos', 'koss', 'kong', 'koj', 'koc', 'kok', 'kot', 'kop', 'koh', 'kwa', 'kwag', 'kwagg', 'kwags', 'kwan', 'kwanj', 'kwanh', 'kwad', 'kwal', 'kwalg', 'kwalm', 'kwalb', 'kwals', 'kwalt', 'kwalp', 'kwalh', 'kwam', 'kwab', 'kwabs', 'kwas', 'kwass', 'kwang', 'kwaj', 'kwac', 'kwak', 'kwat', 'kwap', 'kwah', 'kwae', 'kwaeg', 'kwaegg', 'kwaegs', 'kwaen', 'kwaenj', 'kwaenh', 'kwaed', 'kwael', 'kwaelg', 'kwaelm', 'kwaelb', 'kwaels', 'kwaelt', 'kwaelp', 'kwaelh', 'kwaem', 'kwaeb', 'kwaebs', 'kwaes', 'kwaess', 'kwaeng', 'kwaej', 'kwaec', 'kwaek', 'kwaet', 'kwaep', 'kwaeh', 'koe', 'koeg', 'koegg', 'koegs', 'koen', 'koenj', 'koenh', 'koed', 'koel', 'koelg', 'koelm', 'koelb', 'koels', 'koelt', 'koelp', 'koelh', 'koem', 'koeb', 'koebs', 'koes', 'koess', 'koeng', 'koej', 'koec', 'koek', 'koet', 'koep', 'koeh', 'kyo', 'kyog', 'kyogg', 'kyogs', 'kyon', 'kyonj', 'kyonh', 'kyod', 'kyol', 'kyolg', 'kyolm', 'kyolb', 'kyols', 'kyolt', 'kyolp', 'kyolh', 'kyom', 'kyob', 'kyobs', 'kyos', 'kyoss', 'kyong', 'kyoj', 'kyoc', 'kyok', 'kyot', 'kyop', 'kyoh', 'ku', 'kug', 'kugg', 'kugs', 'kun', 'kunj', 'kunh', 'kud', 'kul', 'kulg', 'kulm', 'kulb', 'kuls', 'kult', 'kulp', 'kulh', 'kum', 'kub', 'kubs', 'kus', 'kuss', 'kung', 'kuj', 'kuc', 'kuk', 'kut', 'kup', 'kuh', 'kweo', 'kweog', 'kweogg', 'kweogs'];
<?php return ['kweon', 'kweonj', 'kweonh', 'kweod', 'kweol', 'kweolg', 'kweolm', 'kweolb', 'kweols', 'kweolt', 'kweolp', 'kweolh', 'kweom', 'kweob', 'kweobs', 'kweos', 'kweoss', 'kweong', 'kweoj', 'kweoc', 'kweok', 'kweot', 'kweop', 'kweoh', 'kwe', 'kweg', 'kwegg', 'kwegs', 'kwen', 'kwenj', 'kwenh', 'kwed', 'kwel', 'kwelg', 'kwelm', 'kwelb', 'kwels', 'kwelt', 'kwelp', 'kwelh', 'kwem', 'kweb', 'kwebs', 'kwes', 'kwess', 'kweng', 'kwej', 'kwec', 'kwek', 'kwet', 'kwep', 'kweh', 'kwi', 'kwig', 'kwigg', 'kwigs', 'kwin', 'kwinj', 'kwinh', 'kwid', 'kwil', 'kwilg', 'kwilm', 'kwilb', 'kwils', 'kwilt', 'kwilp', 'kwilh', 'kwim', 'kwib', 'kwibs', 'kwis', 'kwiss', 'kwing', 'kwij', 'kwic', 'kwik', 'kwit', 'kwip', 'kwih', 'kyu', 'kyug', 'kyugg', 'kyugs', 'kyun', 'kyunj', 'kyunh', 'kyud', 'kyul', 'kyulg', 'kyulm', 'kyulb', 'kyuls', 'kyult', 'kyulp', 'kyulh', 'kyum', 'kyub', 'kyubs', 'kyus', 'kyuss', 'kyung', 'kyuj', 'kyuc', 'kyuk', 'kyut', 'kyup', 'kyuh', 'keu', 'keug', 'keugg', 'keugs', 'keun', 'keunj', 'keunh', 'keud', 'keul', 'keulg', 'keulm', 'keulb', 'keuls', 'keult', 'keulp', 'keulh', 'keum', 'keub', 'keubs', 'keus', 'keuss', 'keung', 'keuj', 'keuc', 'keuk', 'keut', 'keup', 'keuh', 'kyi', 'kyig', 'kyigg', 'kyigs', 'kyin', 'kyinj', 'kyinh', 'kyid', 'kyil', 'kyilg', 'kyilm', 'kyilb', 'kyils', 'kyilt', 'kyilp', 'kyilh', 'kyim', 'kyib', 'kyibs', 'kyis', 'kyiss', 'kying', 'kyij', 'kyic', 'kyik', 'kyit', 'kyip', 'kyih', 'ki', 'kig', 'kigg', 'kigs', 'kin', 'kinj', 'kinh', 'kid', 'kil', 'kilg', 'kilm', 'kilb', 'kils', 'kilt', 'kilp', 'kilh', 'kim', 'kib', 'kibs', 'kis', 'kiss', 'king', 'kij', 'kic', 'kik', 'kit', 'kip', 'kih', 'ta', 'tag', 'tagg', 'tags', 'tan', 'tanj', 'tanh', 'tad', 'tal', 'talg', 'talm', 'talb', 'tals', 'talt', 'talp', 'talh', 'tam', 'tab', 'tabs', 'tas', 'tass', 'tang', 'taj', 'tac', 'tak', 'tat', 'tap', 'tah', 'tae', 'taeg', 'taegg', 'taegs', 'taen', 'taenj', 'taenh', 'taed', 'tael', 'taelg', 'taelm', 'taelb', 'taels', 'taelt', 'taelp', 'taelh', 'taem', 'taeb', 'taebs', 'taes', 'taess', 'taeng', 'taej', 'taec', 'taek', 'taet', 'taep', 'taeh', 'tya', 'tyag', 'tyagg', 'tyags', 'tyan', 'tyanj', 'tyanh', 'tyad'];
<?php return ['tyal', 'tyalg', 'tyalm', 'tyalb', 'tyals', 'tyalt', 'tyalp', 'tyalh', 'tyam', 'tyab', 'tyabs', 'tyas', 'tyass', 'tyang', 'tyaj', 'tyac', 'tyak', 'tyat', 'tyap', 'tyah', 'tyae', 'tyaeg', 'tyaegg', 'tyaegs', 'tyaen', 'tyaenj', 'tyaenh', 'tyaed', 'tyael', 'tyaelg', 'tyaelm', 'tyaelb', 'tyaels', 'tyaelt', 'tyaelp', 'tyaelh', 'tyaem', 'tyaeb', 'tyaebs', 'tyaes', 'tyaess', 'tyaeng', 'tyaej', 'tyaec', 'tyaek', 'tyaet', 'tyaep', 'tyaeh', 'teo', 'teog', 'teogg', 'teogs', 'teon', 'teonj', 'teonh', 'teod', 'teol', 'teolg', 'teolm', 'teolb', 'teols', 'teolt', 'teolp', 'teolh', 'teom', 'teob', 'teobs', 'teos', 'teoss', 'teong', 'teoj', 'teoc', 'teok', 'teot', 'teop', 'teoh', 'te', 'teg', 'tegg', 'tegs', 'ten', 'tenj', 'tenh', 'ted', 'tel', 'telg', 'telm', 'telb', 'tels', 'telt', 'telp', 'telh', 'tem', 'teb', 'tebs', 'tes', 'tess', 'teng', 'tej', 'tec', 'tek', 'tet', 'tep', 'teh', 'tyeo', 'tyeog', 'tyeogg', 'tyeogs', 'tyeon', 'tyeonj', 'tyeonh', 'tyeod', 'tyeol', 'tyeolg', 'tyeolm', 'tyeolb', 'tyeols', 'tyeolt', 'tyeolp', 'tyeolh', 'tyeom', 'tyeob', 'tyeobs', 'tyeos', 'tyeoss', 'tyeong', 'tyeoj', 'tyeoc', 'tyeok', 'tyeot', 'tyeop', 'tyeoh', 'tye', 'tyeg', 'tyegg', 'tyegs', 'tyen', 'tyenj', 'tyenh', 'tyed', 'tyel', 'tyelg', 'tyelm', 'tyelb', 'tyels', 'tyelt', 'tyelp', 'tyelh', 'tyem', 'tyeb', 'tyebs', 'tyes', 'tyess', 'tyeng', 'tyej', 'tyec', 'tyek', 'tyet', 'tyep', 'tyeh', 'to', 'tog', 'togg', 'togs', 'ton', 'tonj', 'tonh', 'tod', 'tol', 'tolg', 'tolm', 'tolb', 'tols', 'tolt', 'tolp', 'tolh', 'tom', 'tob', 'tobs', 'tos', 'toss', 'tong', 'toj', 'toc', 'tok', 'tot', 'top', 'toh', 'twa', 'twag', 'twagg', 'twags', 'twan', 'twanj', 'twanh', 'twad', 'twal', 'twalg', 'twalm', 'twalb', 'twals', 'twalt', 'twalp', 'twalh', 'twam', 'twab', 'twabs', 'twas', 'twass', 'twang', 'twaj', 'twac', 'twak', 'twat', 'twap', 'twah', 'twae', 'twaeg', 'twaegg', 'twaegs', 'twaen', 'twaenj', 'twaenh', 'twaed', 'twael', 'twaelg', 'twaelm', 'twaelb', 'twaels', 'twaelt', 'twaelp', 'twaelh', 'twaem', 'twaeb', 'twaebs', 'twaes', 'twaess', 'twaeng', 'twaej', 'twaec', 'twaek', 'twaet', 'twaep', 'twaeh', 'toe', 'toeg', 'toegg', 'toegs', 'toen', 'toenj', 'toenh', 'toed', 'toel', 'toelg', 'toelm', 'toelb'];
<?php return ['toels', 'toelt', 'toelp', 'toelh', 'toem', 'toeb', 'toebs', 'toes', 'toess', 'toeng', 'toej', 'toec', 'toek', 'toet', 'toep', 'toeh', 'tyo', 'tyog', 'tyogg', 'tyogs', 'tyon', 'tyonj', 'tyonh', 'tyod', 'tyol', 'tyolg', 'tyolm', 'tyolb', 'tyols', 'tyolt', 'tyolp', 'tyolh', 'tyom', 'tyob', 'tyobs', 'tyos', 'tyoss', 'tyong', 'tyoj', 'tyoc', 'tyok', 'tyot', 'tyop', 'tyoh', 'tu', 'tug', 'tugg', 'tugs', 'tun', 'tunj', 'tunh', 'tud', 'tul', 'tulg', 'tulm', 'tulb', 'tuls', 'tult', 'tulp', 'tulh', 'tum', 'tub', 'tubs', 'tus', 'tuss', 'tung', 'tuj', 'tuc', 'tuk', 'tut', 'tup', 'tuh', 'tweo', 'tweog', 'tweogg', 'tweogs', 'tweon', 'tweonj', 'tweonh', 'tweod', 'tweol', 'tweolg', 'tweolm', 'tweolb', 'tweols', 'tweolt', 'tweolp', 'tweolh', 'tweom', 'tweob', 'tweobs', 'tweos', 'tweoss', 'tweong', 'tweoj', 'tweoc', 'tweok', 'tweot', 'tweop', 'tweoh', 'twe', 'tweg', 'twegg', 'twegs', 'twen', 'twenj', 'twenh', 'twed', 'twel', 'twelg', 'twelm', 'twelb', 'twels', 'twelt', 'twelp', 'twelh', 'twem', 'tweb', 'twebs', 'twes', 'twess', 'tweng', 'twej', 'twec', 'twek', 'twet', 'twep', 'tweh', 'twi', 'twig', 'twigg', 'twigs', 'twin', 'twinj', 'twinh', 'twid', 'twil', 'twilg', 'twilm', 'twilb', 'twils', 'twilt', 'twilp', 'twilh', 'twim', 'twib', 'twibs', 'twis', 'twiss', 'twing', 'twij', 'twic', 'twik', 'twit', 'twip', 'twih', 'tyu', 'tyug', 'tyugg', 'tyugs', 'tyun', 'tyunj', 'tyunh', 'tyud', 'tyul', 'tyulg', 'tyulm', 'tyulb', 'tyuls', 'tyult', 'tyulp', 'tyulh', 'tyum', 'tyub', 'tyubs', 'tyus', 'tyuss', 'tyung', 'tyuj', 'tyuc', 'tyuk', 'tyut', 'tyup', 'tyuh', 'teu', 'teug', 'teugg', 'teugs', 'teun', 'teunj', 'teunh', 'teud', 'teul', 'teulg', 'teulm', 'teulb', 'teuls', 'teult', 'teulp', 'teulh', 'teum', 'teub', 'teubs', 'teus', 'teuss', 'teung', 'teuj', 'teuc', 'teuk', 'teut', 'teup', 'teuh', 'tyi', 'tyig', 'tyigg', 'tyigs', 'tyin', 'tyinj', 'tyinh', 'tyid', 'tyil', 'tyilg', 'tyilm', 'tyilb', 'tyils', 'tyilt', 'tyilp', 'tyilh', 'tyim', 'tyib', 'tyibs', 'tyis', 'tyiss', 'tying', 'tyij', 'tyic', 'tyik', 'tyit', 'tyip', 'tyih', 'ti', 'tig', 'tigg', 'tigs', 'tin', 'tinj', 'tinh', 'tid', 'til', 'tilg', 'tilm', 'tilb', 'tils', 'tilt', 'tilp', 'tilh'];
<?php return ['tim', 'tib', 'tibs', 'tis', 'tiss', 'ting', 'tij', 'tic', 'tik', 'tit', 'tip', 'tih', 'pa', 'pag', 'pagg', 'pags', 'pan', 'panj', 'panh', 'pad', 'pal', 'palg', 'palm', 'palb', 'pals', 'palt', 'palp', 'palh', 'pam', 'pab', 'pabs', 'pas', 'pass', 'pang', 'paj', 'pac', 'pak', 'pat', 'pap', 'pah', 'pae', 'paeg', 'paegg', 'paegs', 'paen', 'paenj', 'paenh', 'paed', 'pael', 'paelg', 'paelm', 'paelb', 'paels', 'paelt', 'paelp', 'paelh', 'paem', 'paeb', 'paebs', 'paes', 'paess', 'paeng', 'paej', 'paec', 'paek', 'paet', 'paep', 'paeh', 'pya', 'pyag', 'pyagg', 'pyags', 'pyan', 'pyanj', 'pyanh', 'pyad', 'pyal', 'pyalg', 'pyalm', 'pyalb', 'pyals', 'pyalt', 'pyalp', 'pyalh', 'pyam', 'pyab', 'pyabs', 'pyas', 'pyass', 'pyang', 'pyaj', 'pyac', 'pyak', 'pyat', 'pyap', 'pyah', 'pyae', 'pyaeg', 'pyaegg', 'pyaegs', 'pyaen', 'pyaenj', 'pyaenh', 'pyaed', 'pyael', 'pyaelg', 'pyaelm', 'pyaelb', 'pyaels', 'pyaelt', 'pyaelp', 'pyaelh', 'pyaem', 'pyaeb', 'pyaebs', 'pyaes', 'pyaess', 'pyaeng', 'pyaej', 'pyaec', 'pyaek', 'pyaet', 'pyaep', 'pyaeh', 'peo', 'peog', 'peogg', 'peogs', 'peon', 'peonj', 'peonh', 'peod', 'peol', 'peolg', 'peolm', 'peolb', 'peols', 'peolt', 'peolp', 'peolh', 'peom', 'peob', 'peobs', 'peos', 'peoss', 'peong', 'peoj', 'peoc', 'peok', 'peot', 'peop', 'peoh', 'pe', 'peg', 'pegg', 'pegs', 'pen', 'penj', 'penh', 'ped', 'pel', 'pelg', 'pelm', 'pelb', 'pels', 'pelt', 'pelp', 'pelh', 'pem', 'peb', 'pebs', 'pes', 'pess', 'peng', 'pej', 'pec', 'pek', 'pet', 'pep', 'peh', 'pyeo', 'pyeog', 'pyeogg', 'pyeogs', 'pyeon', 'pyeonj', 'pyeonh', 'pyeod', 'pyeol', 'pyeolg', 'pyeolm', 'pyeolb', 'pyeols', 'pyeolt', 'pyeolp', 'pyeolh', 'pyeom', 'pyeob', 'pyeobs', 'pyeos', 'pyeoss', 'pyeong', 'pyeoj', 'pyeoc', 'pyeok', 'pyeot', 'pyeop', 'pyeoh', 'pye', 'pyeg', 'pyegg', 'pyegs', 'pyen', 'pyenj', 'pyenh', 'pyed', 'pyel', 'pyelg', 'pyelm', 'pyelb', 'pyels', 'pyelt', 'pyelp', 'pyelh', 'pyem', 'pyeb', 'pyebs', 'pyes', 'pyess', 'pyeng', 'pyej', 'pyec', 'pyek', 'pyet', 'pyep', 'pyeh', 'po', 'pog', 'pogg', 'pogs', 'pon', 'ponj', 'ponh', 'pod', 'pol', 'polg', 'polm', 'polb', 'pols', 'polt', 'polp', 'polh', 'pom', 'pob', 'pobs', 'pos'];
<?php return ['poss', 'pong', 'poj', 'poc', 'pok', 'pot', 'pop', 'poh', 'pwa', 'pwag', 'pwagg', 'pwags', 'pwan', 'pwanj', 'pwanh', 'pwad', 'pwal', 'pwalg', 'pwalm', 'pwalb', 'pwals', 'pwalt', 'pwalp', 'pwalh', 'pwam', 'pwab', 'pwabs', 'pwas', 'pwass', 'pwang', 'pwaj', 'pwac', 'pwak', 'pwat', 'pwap', 'pwah', 'pwae', 'pwaeg', 'pwaegg', 'pwaegs', 'pwaen', 'pwaenj', 'pwaenh', 'pwaed', 'pwael', 'pwaelg', 'pwaelm', 'pwaelb', 'pwaels', 'pwaelt', 'pwaelp', 'pwaelh', 'pwaem', 'pwaeb', 'pwaebs', 'pwaes', 'pwaess', 'pwaeng', 'pwaej', 'pwaec', 'pwaek', 'pwaet', 'pwaep', 'pwaeh', 'poe', 'poeg', 'poegg', 'poegs', 'poen', 'poenj', 'poenh', 'poed', 'poel', 'poelg', 'poelm', 'poelb', 'poels', 'poelt', 'poelp', 'poelh', 'poem', 'poeb', 'poebs', 'poes', 'poess', 'poeng', 'poej', 'poec', 'poek', 'poet', 'poep', 'poeh', 'pyo', 'pyog', 'pyogg', 'pyogs', 'pyon', 'pyonj', 'pyonh', 'pyod', 'pyol', 'pyolg', 'pyolm', 'pyolb', 'pyols', 'pyolt', 'pyolp', 'pyolh', 'pyom', 'pyob', 'pyobs', 'pyos', 'pyoss', 'pyong', 'pyoj', 'pyoc', 'pyok', 'pyot', 'pyop', 'pyoh', 'pu', 'pug', 'pugg', 'pugs', 'pun', 'punj', 'punh', 'pud', 'pul', 'pulg', 'pulm', 'pulb', 'puls', 'pult', 'pulp', 'pulh', 'pum', 'pub', 'pubs', 'pus', 'puss', 'pung', 'puj', 'puc', 'puk', 'put', 'pup', 'puh', 'pweo', 'pweog', 'pweogg', 'pweogs', 'pweon', 'pweonj', 'pweonh', 'pweod', 'pweol', 'pweolg', 'pweolm', 'pweolb', 'pweols', 'pweolt', 'pweolp', 'pweolh', 'pweom', 'pweob', 'pweobs', 'pweos', 'pweoss', 'pweong', 'pweoj', 'pweoc', 'pweok', 'pweot', 'pweop', 'pweoh', 'pwe', 'pweg', 'pwegg', 'pwegs', 'pwen', 'pwenj', 'pwenh', 'pwed', 'pwel', 'pwelg', 'pwelm', 'pwelb', 'pwels', 'pwelt', 'pwelp', 'pwelh', 'pwem', 'pweb', 'pwebs', 'pwes', 'pwess', 'pweng', 'pwej', 'pwec', 'pwek', 'pwet', 'pwep', 'pweh', 'pwi', 'pwig', 'pwigg', 'pwigs', 'pwin', 'pwinj', 'pwinh', 'pwid', 'pwil', 'pwilg', 'pwilm', 'pwilb', 'pwils', 'pwilt', 'pwilp', 'pwilh', 'pwim', 'pwib', 'pwibs', 'pwis', 'pwiss', 'pwing', 'pwij', 'pwic', 'pwik', 'pwit', 'pwip', 'pwih', 'pyu', 'pyug', 'pyugg', 'pyugs', 'pyun', 'pyunj', 'pyunh', 'pyud', 'pyul', 'pyulg', 'pyulm', 'pyulb', 'pyuls', 'pyult', 'pyulp', 'pyulh', 'pyum', 'pyub', 'pyubs', 'pyus', 'pyuss', 'pyung', 'pyuj', 'pyuc'];
<?php return ['pyuk', 'pyut', 'pyup', 'pyuh', 'peu', 'peug', 'peugg', 'peugs', 'peun', 'peunj', 'peunh', 'peud', 'peul', 'peulg', 'peulm', 'peulb', 'peuls', 'peult', 'peulp', 'peulh', 'peum', 'peub', 'peubs', 'peus', 'peuss', 'peung', 'peuj', 'peuc', 'peuk', 'peut', 'peup', 'peuh', 'pyi', 'pyig', 'pyigg', 'pyigs', 'pyin', 'pyinj', 'pyinh', 'pyid', 'pyil', 'pyilg', 'pyilm', 'pyilb', 'pyils', 'pyilt', 'pyilp', 'pyilh', 'pyim', 'pyib', 'pyibs', 'pyis', 'pyiss', 'pying', 'pyij', 'pyic', 'pyik', 'pyit', 'pyip', 'pyih', 'pi', 'pig', 'pigg', 'pigs', 'pin', 'pinj', 'pinh', 'pid', 'pil', 'pilg', 'pilm', 'pilb', 'pils', 'pilt', 'pilp', 'pilh', 'pim', 'pib', 'pibs', 'pis', 'piss', 'ping', 'pij', 'pic', 'pik', 'pit', 'pip', 'pih', 'ha', 'hag', 'hagg', 'hags', 'han', 'hanj', 'hanh', 'had', 'hal', 'halg', 'halm', 'halb', 'hals', 'halt', 'halp', 'halh', 'ham', 'hab', 'habs', 'has', 'hass', 'hang', 'haj', 'hac', 'hak', 'hat', 'hap', 'hah', 'hae', 'haeg', 'haegg', 'haegs', 'haen', 'haenj', 'haenh', 'haed', 'hael', 'haelg', 'haelm', 'haelb', 'haels', 'haelt', 'haelp', 'haelh', 'haem', 'haeb', 'haebs', 'haes', 'haess', 'haeng', 'haej', 'haec', 'haek', 'haet', 'haep', 'haeh', 'hya', 'hyag', 'hyagg', 'hyags', 'hyan', 'hyanj', 'hyanh', 'hyad', 'hyal', 'hyalg', 'hyalm', 'hyalb', 'hyals', 'hyalt', 'hyalp', 'hyalh', 'hyam', 'hyab', 'hyabs', 'hyas', 'hyass', 'hyang', 'hyaj', 'hyac', 'hyak', 'hyat', 'hyap', 'hyah', 'hyae', 'hyaeg', 'hyaegg', 'hyaegs', 'hyaen', 'hyaenj', 'hyaenh', 'hyaed', 'hyael', 'hyaelg', 'hyaelm', 'hyaelb', 'hyaels', 'hyaelt', 'hyaelp', 'hyaelh', 'hyaem', 'hyaeb', 'hyaebs', 'hyaes', 'hyaess', 'hyaeng', 'hyaej', 'hyaec', 'hyaek', 'hyaet', 'hyaep', 'hyaeh', 'heo', 'heog', 'heogg', 'heogs', 'heon', 'heonj', 'heonh', 'heod', 'heol', 'heolg', 'heolm', 'heolb', 'heols', 'heolt', 'heolp', 'heolh', 'heom', 'heob', 'heobs', 'heos', 'heoss', 'heong', 'heoj', 'heoc', 'heok', 'heot', 'heop', 'heoh', 'he', 'heg', 'hegg', 'hegs', 'hen', 'henj', 'henh', 'hed', 'hel', 'helg', 'helm', 'helb', 'hels', 'helt', 'help', 'helh', 'hem', 'heb', 'hebs', 'hes', 'hess', 'heng', 'hej', 'hec', 'hek', 'het', 'hep', 'heh'];
<?php return ['hyeo', 'hyeog', 'hyeogg', 'hyeogs', 'hyeon', 'hyeonj', 'hyeonh', 'hyeod', 'hyeol', 'hyeolg', 'hyeolm', 'hyeolb', 'hyeols', 'hyeolt', 'hyeolp', 'hyeolh', 'hyeom', 'hyeob', 'hyeobs', 'hyeos', 'hyeoss', 'hyeong', 'hyeoj', 'hyeoc', 'hyeok', 'hyeot', 'hyeop', 'hyeoh', 'hye', 'hyeg', 'hyegg', 'hyegs', 'hyen', 'hyenj', 'hyenh', 'hyed', 'hyel', 'hyelg', 'hyelm', 'hyelb', 'hyels', 'hyelt', 'hyelp', 'hyelh', 'hyem', 'hyeb', 'hyebs', 'hyes', 'hyess', 'hyeng', 'hyej', 'hyec', 'hyek', 'hyet', 'hyep', 'hyeh', 'ho', 'hog', 'hogg', 'hogs', 'hon', 'honj', 'honh', 'hod', 'hol', 'holg', 'holm', 'holb', 'hols', 'holt', 'holp', 'holh', 'hom', 'hob', 'hobs', 'hos', 'hoss', 'hong', 'hoj', 'hoc', 'hok', 'hot', 'hop', 'hoh', 'hwa', 'hwag', 'hwagg', 'hwags', 'hwan', 'hwanj', 'hwanh', 'hwad', 'hwal', 'hwalg', 'hwalm', 'hwalb', 'hwals', 'hwalt', 'hwalp', 'hwalh', 'hwam', 'hwab', 'hwabs', 'hwas', 'hwass', 'hwang', 'hwaj', 'hwac', 'hwak', 'hwat', 'hwap', 'hwah', 'hwae', 'hwaeg', 'hwaegg', 'hwaegs', 'hwaen', 'hwaenj', 'hwaenh', 'hwaed', 'hwael', 'hwaelg', 'hwaelm', 'hwaelb', 'hwaels', 'hwaelt', 'hwaelp', 'hwaelh', 'hwaem', 'hwaeb', 'hwaebs', 'hwaes', 'hwaess', 'hwaeng', 'hwaej', 'hwaec', 'hwaek', 'hwaet', 'hwaep', 'hwaeh', 'hoe', 'hoeg', 'hoegg', 'hoegs', 'hoen', 'hoenj', 'hoenh', 'hoed', 'hoel', 'hoelg', 'hoelm', 'hoelb', 'hoels', 'hoelt', 'hoelp', 'hoelh', 'hoem', 'hoeb', 'hoebs', 'hoes', 'hoess', 'hoeng', 'hoej', 'hoec', 'hoek', 'hoet', 'hoep', 'hoeh', 'hyo', 'hyog', 'hyogg', 'hyogs', 'hyon', 'hyonj', 'hyonh', 'hyod', 'hyol', 'hyolg', 'hyolm', 'hyolb', 'hyols', 'hyolt', 'hyolp', 'hyolh', 'hyom', 'hyob', 'hyobs', 'hyos', 'hyoss', 'hyong', 'hyoj', 'hyoc', 'hyok', 'hyot', 'hyop', 'hyoh', 'hu', 'hug', 'hugg', 'hugs', 'hun', 'hunj', 'hunh', 'hud', 'hul', 'hulg', 'hulm', 'hulb', 'huls', 'hult', 'hulp', 'hulh', 'hum', 'hub', 'hubs', 'hus', 'huss', 'hung', 'huj', 'huc', 'huk', 'hut', 'hup', 'huh', 'hweo', 'hweog', 'hweogg', 'hweogs', 'hweon', 'hweonj', 'hweonh', 'hweod', 'hweol', 'hweolg', 'hweolm', 'hweolb', 'hweols', 'hweolt', 'hweolp', 'hweolh', 'hweom', 'hweob', 'hweobs', 'hweos', 'hweoss', 'hweong', 'hweoj', 'hweoc', 'hweok', 'hweot', 'hweop', 'hweoh', 'hwe', 'hweg', 'hwegg', 'hwegs'];
<?php return ['hwen', 'hwenj', 'hwenh', 'hwed', 'hwel', 'hwelg', 'hwelm', 'hwelb', 'hwels', 'hwelt', 'hwelp', 'hwelh', 'hwem', 'hweb', 'hwebs', 'hwes', 'hwess', 'hweng', 'hwej', 'hwec', 'hwek', 'hwet', 'hwep', 'hweh', 'hwi', 'hwig', 'hwigg', 'hwigs', 'hwin', 'hwinj', 'hwinh', 'hwid', 'hwil', 'hwilg', 'hwilm', 'hwilb', 'hwils', 'hwilt', 'hwilp', 'hwilh', 'hwim', 'hwib', 'hwibs', 'hwis', 'hwiss', 'hwing', 'hwij', 'hwic', 'hwik', 'hwit', 'hwip', 'hwih', 'hyu', 'hyug', 'hyugg', 'hyugs', 'hyun', 'hyunj', 'hyunh', 'hyud', 'hyul', 'hyulg', 'hyulm', 'hyulb', 'hyuls', 'hyult', 'hyulp', 'hyulh', 'hyum', 'hyub', 'hyubs', 'hyus', 'hyuss', 'hyung', 'hyuj', 'hyuc', 'hyuk', 'hyut', 'hyup', 'hyuh', 'heu', 'heug', 'heugg', 'heugs', 'heun', 'heunj', 'heunh', 'heud', 'heul', 'heulg', 'heulm', 'heulb', 'heuls', 'heult', 'heulp', 'heulh', 'heum', 'heub', 'heubs', 'heus', 'heuss', 'heung', 'heuj', 'heuc', 'heuk', 'heut', 'heup', 'heuh', 'hyi', 'hyig', 'hyigg', 'hyigs', 'hyin', 'hyinj', 'hyinh', 'hyid', 'hyil', 'hyilg', 'hyilm', 'hyilb', 'hyils', 'hyilt', 'hyilp', 'hyilh', 'hyim', 'hyib', 'hyibs', 'hyis', 'hyiss', 'hying', 'hyij', 'hyic', 'hyik', 'hyit', 'hyip', 'hyih', 'hi', 'hig', 'higg', 'higs', 'hin', 'hinj', 'hinh', 'hid', 'hil', 'hilg', 'hilm', 'hilb', 'hils', 'hilt', 'hilp', 'hilh', 'him', 'hib', 'hibs', 'his', 'hiss', 'hing', 'hij', 'hic', 'hik', 'hit', 'hip', 'hih', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['Kay ', 'Kayng ', 'Ke ', 'Ko ', 'Kol ', 'Koc ', 'Kwi ', 'Kwi ', 'Kyun ', 'Kul ', 'Kum ', 'Na ', 'Na ', 'Na ', 'La ', 'Na ', 'Na ', 'Na ', 'Na ', 'Na ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nak ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nan ', 'Nam ', 'Nam ', 'Nam ', 'Nam ', 'Nap ', 'Nap ', 'Nap ', 'Nang ', 'Nang ', 'Nang ', 'Nang ', 'Nang ', 'Nay ', 'Nayng ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'No ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Nok ', 'Non ', 'Nong ', 'Nong ', 'Nong ', 'Nong ', 'Noy ', 'Noy ', 'Noy ', 'Noy ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nwu ', 'Nuk ', 'Nuk ', 'Num ', 'Nung ', 'Nung ', 'Nung ', 'Nung ', 'Nung ', 'Twu ', 'La ', 'Lak ', 'Lak ', 'Lan ', 'Lyeng ', 'Lo ', 'Lyul ', 'Li ', 'Pey ', 'Pen ', 'Pyen ', 'Pwu ', 'Pwul ', 'Pi ', 'Sak ', 'Sak ', 'Sam ', 'Sayk ', 'Sayng ', 'Sep ', 'Sey ', 'Sway ', 'Sin ', 'Sim ', 'Sip ', 'Ya ', 'Yak ', 'Yak ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Yang ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Ye ', 'Yek ', 'Yek ', 'Yek ', 'Yek ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yen ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yel ', 'Yem ', 'Yem ', 'Yem ', 'Yem ', 'Yem ', 'Yep ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yeng ', 'Yey ', 'Yey ', 'Yey ', 'Yey ', 'O ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yo ', 'Yong ', 'Wun ', 'Wen ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yu ', 'Yuk ', 'Yuk ', 'Yuk ', 'Yun ', 'Yun ', 'Yun ', 'Yun ', 'Yul ', 'Yul ', 'Yul ', 'Yul ', 'Yung ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'I ', 'Ik ', 'Ik ', 'In ', 'In ', 'In ', 'In ', 'In ', 'In ', 'In ', 'Im ', 'Im ', 'Im ', 'Ip ', 'Ip ', 'Ip ', 'Cang ', 'Cek ', 'Ci ', 'Cip ', 'Cha ', 'Chek '];
<?php return ['Chey ', 'Thak ', 'Thak ', 'Thang ', 'Thayk ', 'Thong ', 'Pho ', 'Phok ', 'Hang ', 'Hang ', 'Hyen ', 'Hwak ', 'Wu ', 'Huo ', '[?] ', '[?] ', 'Zhong ', '[?] ', 'Qing ', '[?] ', '[?] ', 'Xi ', 'Zhu ', 'Yi ', 'Li ', 'Shen ', 'Xiang ', 'Fu ', 'Jing ', 'Jing ', 'Yu ', '[?] ', 'Hagi ', '[?] ', 'Zhu ', '[?] ', '[?] ', 'Yi ', 'Du ', '[?] ', '[?] ', '[?] ', 'Fan ', 'Si ', 'Guan ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]'];
<?php return ['ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', 'mn', 'me', 'mi', 'vn', 'mkh', '[?]', '[?]', '[?]', '[?]', '[?]', 'yi', '', 'ay', '`', '', 'd', 'h', 'k', 'l', 'm', 'm', 't', '+', 'sh', 's', 'sh', 's', 'a', 'a', '', 'b', 'g', 'd', 'h', 'v', 'z', '[?]', 't', 'y', 'k', 'k', 'l', '[?]', 'l', '[?]', 'n', 'n', '[?]', 'p', 'p', '[?]', 'ts', 'ts', 'r', 'sh', 't', 'vo', 'b', 'k', 'p', 'l', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '{Salla}', '{Qala}', 'Allah', 'Akbar', 'Mohammed', 'SL`M', 'Rasul', '{Alayhi}', '{WaSallam}', '{Salla}', '{Salla Llahu Alayhi WaSallam}', '{Jalla Jalalahu}', 'Rial ', '{Bismillah Ar-Rahman Ar-Rahimi}', '[?]', '[?]'];
<?php return ['[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '~', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '..', '--', '-', '_', '_', '(', ') ', '{', '} ', '[', '] ', '[(', ')] ', '<<', '>> ', '<', '> ', '[', '] ', '{', '}', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', ',', ',', '.', '', ';', ':', '?', '!', '-', '(', ')', '{', '}', '{', '}', '#', '&', '*', '+', '-', '<', '>', '=', '', '\\', '$', '%', '@', '[?]', '[?]', '[?]', '[?]', '', '', '', '[?]', '', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', ''];
<?php return ['[?]', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '[?]', '[?]', '.', '[', ']', ',', '*', 'wo', 'a', 'i', 'u', 'e', 'o', 'ya', 'yu', 'yo', 'tu', '+', 'a', 'i', 'u', 'e', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'n', ':', ';', '', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'dd', 'r', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'rh', 'm', 'b', 'bb', 'bs', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', '[?]', '[?]', '[?]', 'a', 'ae', 'ya', 'yae', 'eo', 'e', '[?]', '[?]', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', '[?]', '[?]', 'yo', 'u', 'weo', 'we', 'wi', 'yu', '[?]', '[?]', 'eu', 'yi', 'i', '[?]', '[?]', '[?]', '/C', 'PS', '!', '-', '|', 'Y=', 'W=', '[?]', '|', '-', '|', '-', '|', '#', 'O', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '{', '|', '}', '', '', '', ''];
<?php return ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 26 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 52 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 78 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 104 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 130 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 156 => 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 181 => 'Z', 182 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 208 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 234 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
<?php

return [
    0 => 'w', 'x', 'y', 'z', 4 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 30 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 56 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 82 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 108 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 134 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 160 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 186 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 212 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 238 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ];
<?php return ['s', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'i', 'j', '', '', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lamda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Theta', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'nabla', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lamda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigma', 'sigma', 'tai', 'upsilon', 'phi', 'chi', 'psi', 'omega', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];
<?php return ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
<?php return ['0.', '0,', '1,', '2,', '3,', '4,', '5,', '6,', '7,', '8,', '9,', '', '', '', '', '', '(A)', '(B)', '(C)', '(D)', '(E)', '(F)', '(G)', '(H)', '(I)', '(J)', '(K)',   // 0x1a
    '(L)', '(M)', '(N)', '(O)', '(P)', '(Q)', '(R)', '(S)', '(T)', '(U)', '(V)', '(W)', '(X)', '(Y)', '(Z)', 48 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 80 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 112 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 230 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ];
    include_once '../includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
    include_once '../includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
    include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
    include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
// Load AntiXSS
include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/ASCII.php';
include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/UTF8.php';
include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/anti-xss-master/src/voku/helper/AntiXSS.php';
$antiXss = new voku\helper\AntiXSS();

                $post_description = $antiXss->xss_clean($dataReceived['description']);
                $post_description = $antiXss->xss_clean($dataReceived['description']);