diff --git a/.maintainer-scripts/unicode-case-fold.pl b/.maintainer-scripts/unicode-case-fold.pl
new file mode 100755
index 000000000..d4b7198bd
--- /dev/null
+++ b/.maintainer-scripts/unicode-case-fold.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+# Input data: https://www.unicode.org/Public/UCD/latest/ucd/CaseFolding.txt
+
+my %map;
+
+while (<>) {
+ chomp;
+ next if /^(#|\s*$)/;
+ my($char, $status, $fold, $comment) = split /\s*;\s*/;
+ if ($status =~ /^[CS]$/) {
+ $comment =~ s/^#\s*//;
+ # print " case 0x$char: return 0x$fold; // [$status] $comment\n";
+ $map{hex($char)} = hex($fold);
+ }
+}
+
+my @valid_code_points = (0..0xD7FF, 0xE000..0x10FFFF);
+
+sub cp_to_str {
+ my $cp = shift;
+ my $fmt = $cp < 0x10000 ? "\\u%04X" : "\\U%08X";
+ return sprintf $fmt, $cp;
+}
+
+while (@valid_code_points) {
+ my @cps = splice @valid_code_points, 0, 256;
+ my $orig;
+ my $folded;
+ for my $cp (@cps) {
+ my $fold = $map{$cp} // $cp;
+ $orig .= cp_to_str($cp);
+ $folded .= cp_to_str($fold);
+ }
+ print " {u8\"$orig\"sv, u8\"$folded\"sv},\n" if $orig ne $folded;
+}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 51b6b4f39..456cdd6c2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -450,6 +450,7 @@ if(WITH_TESTS)
pcmaudio_categorizer_test
speedometer_test
terminal_test
+ unicode_test
utils_test
file_utils_test
worker_group_test
diff --git a/cmake/libdwarfs.cmake b/cmake/libdwarfs.cmake
index 9907dff04..36ebb0c60 100644
--- a/cmake/libdwarfs.cmake
+++ b/cmake/libdwarfs.cmake
@@ -49,6 +49,7 @@ add_library(
src/internal/fs_section.cpp
src/internal/glob_to_regex.cpp
src/internal/string_table.cpp
+ src/internal/unicode_case_folding.cpp
src/internal/wcwidth.c
src/internal/worker_group.cpp
diff --git a/doc/dwarfs.md b/doc/dwarfs.md
index 698ba111e..69f5136e3 100644
--- a/doc/dwarfs.md
+++ b/doc/dwarfs.md
@@ -104,6 +104,17 @@ options:
overlays and want the file system to reflect its read-only
state, you can set this option.
+- `-o case_insensitive`:
+ Perform case-insensitive lookups in the mounted file system,
+ i.e. an entry orignally named `ReadMe.txt` can be accessed as
+ `readme.txt`, `README.TXT`, or `rEaDmE.tXt`. This works across
+ all platforms. When mounting a file system with many files, this
+ may be slightly slower and consume slightly more memory as case-
+ insensitive lookup requires an additional mapping table that is
+ built on-demand. Note that this is not supported if the file
+ system contains directories with entries that only differ in
+ case.
+
- `-o (no_)cache_image`:
By default, `dwarfs` tries to ensure that the compressed file
system image will not be cached by the kernel (i.e. the default
diff --git a/include/dwarfs/internal/unicode_case_folding.h b/include/dwarfs/internal/unicode_case_folding.h
new file mode 100644
index 000000000..c91b1373b
--- /dev/null
+++ b/include/dwarfs/internal/unicode_case_folding.h
@@ -0,0 +1,32 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/**
+ * \author Marcus Holland-Moritz (github@mhxnet.de)
+ * \copyright Copyright (c) Marcus Holland-Moritz
+ *
+ * This file is part of dwarfs.
+ *
+ * dwarfs is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * dwarfs is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with dwarfs. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+
+namespace dwarfs::internal {
+
+std::string utf8_case_fold(std::string_view in);
+std::string utf8_case_fold_unchecked(std::string_view in);
+
+} // namespace dwarfs::internal
diff --git a/include/dwarfs/reader/metadata_options.h b/include/dwarfs/reader/metadata_options.h
index 5bb42fd9a..e8e629b45 100644
--- a/include/dwarfs/reader/metadata_options.h
+++ b/include/dwarfs/reader/metadata_options.h
@@ -32,6 +32,7 @@ struct metadata_options {
bool enable_nlink{false};
bool readonly{false};
bool check_consistency{false};
+ bool case_insensitive_lookup{false};
size_t block_size{512};
std::optional fs_uid{};
std::optional fs_gid{};
diff --git a/src/internal/unicode_case_folding.cpp b/src/internal/unicode_case_folding.cpp
new file mode 100644
index 000000000..406c7f449
--- /dev/null
+++ b/src/internal/unicode_case_folding.cpp
@@ -0,0 +1,3066 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/**
+ * \author Marcus Holland-Moritz (github@mhxnet.de)
+ * \copyright Copyright (c) Marcus Holland-Moritz
+ *
+ * This file is part of dwarfs.
+ *
+ * dwarfs is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * dwarfs is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with dwarfs. If not, see .
+ */
+
+#if __has_include()
+#include
+#else
+#include
+#endif
+
+#include
+
+namespace dwarfs::internal {
+
+namespace {
+
+char32_t case_fold_char(char32_t in) {
+ switch (in) {
+ case 0x0041:
+ return 0x0061; // [C] LATIN CAPITAL LETTER A
+ case 0x0042:
+ return 0x0062; // [C] LATIN CAPITAL LETTER B
+ case 0x0043:
+ return 0x0063; // [C] LATIN CAPITAL LETTER C
+ case 0x0044:
+ return 0x0064; // [C] LATIN CAPITAL LETTER D
+ case 0x0045:
+ return 0x0065; // [C] LATIN CAPITAL LETTER E
+ case 0x0046:
+ return 0x0066; // [C] LATIN CAPITAL LETTER F
+ case 0x0047:
+ return 0x0067; // [C] LATIN CAPITAL LETTER G
+ case 0x0048:
+ return 0x0068; // [C] LATIN CAPITAL LETTER H
+ case 0x0049:
+ return 0x0069; // [C] LATIN CAPITAL LETTER I
+ case 0x004A:
+ return 0x006A; // [C] LATIN CAPITAL LETTER J
+ case 0x004B:
+ return 0x006B; // [C] LATIN CAPITAL LETTER K
+ case 0x004C:
+ return 0x006C; // [C] LATIN CAPITAL LETTER L
+ case 0x004D:
+ return 0x006D; // [C] LATIN CAPITAL LETTER M
+ case 0x004E:
+ return 0x006E; // [C] LATIN CAPITAL LETTER N
+ case 0x004F:
+ return 0x006F; // [C] LATIN CAPITAL LETTER O
+ case 0x0050:
+ return 0x0070; // [C] LATIN CAPITAL LETTER P
+ case 0x0051:
+ return 0x0071; // [C] LATIN CAPITAL LETTER Q
+ case 0x0052:
+ return 0x0072; // [C] LATIN CAPITAL LETTER R
+ case 0x0053:
+ return 0x0073; // [C] LATIN CAPITAL LETTER S
+ case 0x0054:
+ return 0x0074; // [C] LATIN CAPITAL LETTER T
+ case 0x0055:
+ return 0x0075; // [C] LATIN CAPITAL LETTER U
+ case 0x0056:
+ return 0x0076; // [C] LATIN CAPITAL LETTER V
+ case 0x0057:
+ return 0x0077; // [C] LATIN CAPITAL LETTER W
+ case 0x0058:
+ return 0x0078; // [C] LATIN CAPITAL LETTER X
+ case 0x0059:
+ return 0x0079; // [C] LATIN CAPITAL LETTER Y
+ case 0x005A:
+ return 0x007A; // [C] LATIN CAPITAL LETTER Z
+ case 0x00B5:
+ return 0x03BC; // [C] MICRO SIGN
+ case 0x00C0:
+ return 0x00E0; // [C] LATIN CAPITAL LETTER A WITH GRAVE
+ case 0x00C1:
+ return 0x00E1; // [C] LATIN CAPITAL LETTER A WITH ACUTE
+ case 0x00C2:
+ return 0x00E2; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ case 0x00C3:
+ return 0x00E3; // [C] LATIN CAPITAL LETTER A WITH TILDE
+ case 0x00C4:
+ return 0x00E4; // [C] LATIN CAPITAL LETTER A WITH DIAERESIS
+ case 0x00C5:
+ return 0x00E5; // [C] LATIN CAPITAL LETTER A WITH RING ABOVE
+ case 0x00C6:
+ return 0x00E6; // [C] LATIN CAPITAL LETTER AE
+ case 0x00C7:
+ return 0x00E7; // [C] LATIN CAPITAL LETTER C WITH CEDILLA
+ case 0x00C8:
+ return 0x00E8; // [C] LATIN CAPITAL LETTER E WITH GRAVE
+ case 0x00C9:
+ return 0x00E9; // [C] LATIN CAPITAL LETTER E WITH ACUTE
+ case 0x00CA:
+ return 0x00EA; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ case 0x00CB:
+ return 0x00EB; // [C] LATIN CAPITAL LETTER E WITH DIAERESIS
+ case 0x00CC:
+ return 0x00EC; // [C] LATIN CAPITAL LETTER I WITH GRAVE
+ case 0x00CD:
+ return 0x00ED; // [C] LATIN CAPITAL LETTER I WITH ACUTE
+ case 0x00CE:
+ return 0x00EE; // [C] LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ case 0x00CF:
+ return 0x00EF; // [C] LATIN CAPITAL LETTER I WITH DIAERESIS
+ case 0x00D0:
+ return 0x00F0; // [C] LATIN CAPITAL LETTER ETH
+ case 0x00D1:
+ return 0x00F1; // [C] LATIN CAPITAL LETTER N WITH TILDE
+ case 0x00D2:
+ return 0x00F2; // [C] LATIN CAPITAL LETTER O WITH GRAVE
+ case 0x00D3:
+ return 0x00F3; // [C] LATIN CAPITAL LETTER O WITH ACUTE
+ case 0x00D4:
+ return 0x00F4; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ case 0x00D5:
+ return 0x00F5; // [C] LATIN CAPITAL LETTER O WITH TILDE
+ case 0x00D6:
+ return 0x00F6; // [C] LATIN CAPITAL LETTER O WITH DIAERESIS
+ case 0x00D8:
+ return 0x00F8; // [C] LATIN CAPITAL LETTER O WITH STROKE
+ case 0x00D9:
+ return 0x00F9; // [C] LATIN CAPITAL LETTER U WITH GRAVE
+ case 0x00DA:
+ return 0x00FA; // [C] LATIN CAPITAL LETTER U WITH ACUTE
+ case 0x00DB:
+ return 0x00FB; // [C] LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ case 0x00DC:
+ return 0x00FC; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS
+ case 0x00DD:
+ return 0x00FD; // [C] LATIN CAPITAL LETTER Y WITH ACUTE
+ case 0x00DE:
+ return 0x00FE; // [C] LATIN CAPITAL LETTER THORN
+ case 0x0100:
+ return 0x0101; // [C] LATIN CAPITAL LETTER A WITH MACRON
+ case 0x0102:
+ return 0x0103; // [C] LATIN CAPITAL LETTER A WITH BREVE
+ case 0x0104:
+ return 0x0105; // [C] LATIN CAPITAL LETTER A WITH OGONEK
+ case 0x0106:
+ return 0x0107; // [C] LATIN CAPITAL LETTER C WITH ACUTE
+ case 0x0108:
+ return 0x0109; // [C] LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ case 0x010A:
+ return 0x010B; // [C] LATIN CAPITAL LETTER C WITH DOT ABOVE
+ case 0x010C:
+ return 0x010D; // [C] LATIN CAPITAL LETTER C WITH CARON
+ case 0x010E:
+ return 0x010F; // [C] LATIN CAPITAL LETTER D WITH CARON
+ case 0x0110:
+ return 0x0111; // [C] LATIN CAPITAL LETTER D WITH STROKE
+ case 0x0112:
+ return 0x0113; // [C] LATIN CAPITAL LETTER E WITH MACRON
+ case 0x0114:
+ return 0x0115; // [C] LATIN CAPITAL LETTER E WITH BREVE
+ case 0x0116:
+ return 0x0117; // [C] LATIN CAPITAL LETTER E WITH DOT ABOVE
+ case 0x0118:
+ return 0x0119; // [C] LATIN CAPITAL LETTER E WITH OGONEK
+ case 0x011A:
+ return 0x011B; // [C] LATIN CAPITAL LETTER E WITH CARON
+ case 0x011C:
+ return 0x011D; // [C] LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ case 0x011E:
+ return 0x011F; // [C] LATIN CAPITAL LETTER G WITH BREVE
+ case 0x0120:
+ return 0x0121; // [C] LATIN CAPITAL LETTER G WITH DOT ABOVE
+ case 0x0122:
+ return 0x0123; // [C] LATIN CAPITAL LETTER G WITH CEDILLA
+ case 0x0124:
+ return 0x0125; // [C] LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ case 0x0126:
+ return 0x0127; // [C] LATIN CAPITAL LETTER H WITH STROKE
+ case 0x0128:
+ return 0x0129; // [C] LATIN CAPITAL LETTER I WITH TILDE
+ case 0x012A:
+ return 0x012B; // [C] LATIN CAPITAL LETTER I WITH MACRON
+ case 0x012C:
+ return 0x012D; // [C] LATIN CAPITAL LETTER I WITH BREVE
+ case 0x012E:
+ return 0x012F; // [C] LATIN CAPITAL LETTER I WITH OGONEK
+ case 0x0132:
+ return 0x0133; // [C] LATIN CAPITAL LIGATURE IJ
+ case 0x0134:
+ return 0x0135; // [C] LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ case 0x0136:
+ return 0x0137; // [C] LATIN CAPITAL LETTER K WITH CEDILLA
+ case 0x0139:
+ return 0x013A; // [C] LATIN CAPITAL LETTER L WITH ACUTE
+ case 0x013B:
+ return 0x013C; // [C] LATIN CAPITAL LETTER L WITH CEDILLA
+ case 0x013D:
+ return 0x013E; // [C] LATIN CAPITAL LETTER L WITH CARON
+ case 0x013F:
+ return 0x0140; // [C] LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ case 0x0141:
+ return 0x0142; // [C] LATIN CAPITAL LETTER L WITH STROKE
+ case 0x0143:
+ return 0x0144; // [C] LATIN CAPITAL LETTER N WITH ACUTE
+ case 0x0145:
+ return 0x0146; // [C] LATIN CAPITAL LETTER N WITH CEDILLA
+ case 0x0147:
+ return 0x0148; // [C] LATIN CAPITAL LETTER N WITH CARON
+ case 0x014A:
+ return 0x014B; // [C] LATIN CAPITAL LETTER ENG
+ case 0x014C:
+ return 0x014D; // [C] LATIN CAPITAL LETTER O WITH MACRON
+ case 0x014E:
+ return 0x014F; // [C] LATIN CAPITAL LETTER O WITH BREVE
+ case 0x0150:
+ return 0x0151; // [C] LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ case 0x0152:
+ return 0x0153; // [C] LATIN CAPITAL LIGATURE OE
+ case 0x0154:
+ return 0x0155; // [C] LATIN CAPITAL LETTER R WITH ACUTE
+ case 0x0156:
+ return 0x0157; // [C] LATIN CAPITAL LETTER R WITH CEDILLA
+ case 0x0158:
+ return 0x0159; // [C] LATIN CAPITAL LETTER R WITH CARON
+ case 0x015A:
+ return 0x015B; // [C] LATIN CAPITAL LETTER S WITH ACUTE
+ case 0x015C:
+ return 0x015D; // [C] LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ case 0x015E:
+ return 0x015F; // [C] LATIN CAPITAL LETTER S WITH CEDILLA
+ case 0x0160:
+ return 0x0161; // [C] LATIN CAPITAL LETTER S WITH CARON
+ case 0x0162:
+ return 0x0163; // [C] LATIN CAPITAL LETTER T WITH CEDILLA
+ case 0x0164:
+ return 0x0165; // [C] LATIN CAPITAL LETTER T WITH CARON
+ case 0x0166:
+ return 0x0167; // [C] LATIN CAPITAL LETTER T WITH STROKE
+ case 0x0168:
+ return 0x0169; // [C] LATIN CAPITAL LETTER U WITH TILDE
+ case 0x016A:
+ return 0x016B; // [C] LATIN CAPITAL LETTER U WITH MACRON
+ case 0x016C:
+ return 0x016D; // [C] LATIN CAPITAL LETTER U WITH BREVE
+ case 0x016E:
+ return 0x016F; // [C] LATIN CAPITAL LETTER U WITH RING ABOVE
+ case 0x0170:
+ return 0x0171; // [C] LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ case 0x0172:
+ return 0x0173; // [C] LATIN CAPITAL LETTER U WITH OGONEK
+ case 0x0174:
+ return 0x0175; // [C] LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ case 0x0176:
+ return 0x0177; // [C] LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ case 0x0178:
+ return 0x00FF; // [C] LATIN CAPITAL LETTER Y WITH DIAERESIS
+ case 0x0179:
+ return 0x017A; // [C] LATIN CAPITAL LETTER Z WITH ACUTE
+ case 0x017B:
+ return 0x017C; // [C] LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ case 0x017D:
+ return 0x017E; // [C] LATIN CAPITAL LETTER Z WITH CARON
+ case 0x017F:
+ return 0x0073; // [C] LATIN SMALL LETTER LONG S
+ case 0x0181:
+ return 0x0253; // [C] LATIN CAPITAL LETTER B WITH HOOK
+ case 0x0182:
+ return 0x0183; // [C] LATIN CAPITAL LETTER B WITH TOPBAR
+ case 0x0184:
+ return 0x0185; // [C] LATIN CAPITAL LETTER TONE SIX
+ case 0x0186:
+ return 0x0254; // [C] LATIN CAPITAL LETTER OPEN O
+ case 0x0187:
+ return 0x0188; // [C] LATIN CAPITAL LETTER C WITH HOOK
+ case 0x0189:
+ return 0x0256; // [C] LATIN CAPITAL LETTER AFRICAN D
+ case 0x018A:
+ return 0x0257; // [C] LATIN CAPITAL LETTER D WITH HOOK
+ case 0x018B:
+ return 0x018C; // [C] LATIN CAPITAL LETTER D WITH TOPBAR
+ case 0x018E:
+ return 0x01DD; // [C] LATIN CAPITAL LETTER REVERSED E
+ case 0x018F:
+ return 0x0259; // [C] LATIN CAPITAL LETTER SCHWA
+ case 0x0190:
+ return 0x025B; // [C] LATIN CAPITAL LETTER OPEN E
+ case 0x0191:
+ return 0x0192; // [C] LATIN CAPITAL LETTER F WITH HOOK
+ case 0x0193:
+ return 0x0260; // [C] LATIN CAPITAL LETTER G WITH HOOK
+ case 0x0194:
+ return 0x0263; // [C] LATIN CAPITAL LETTER GAMMA
+ case 0x0196:
+ return 0x0269; // [C] LATIN CAPITAL LETTER IOTA
+ case 0x0197:
+ return 0x0268; // [C] LATIN CAPITAL LETTER I WITH STROKE
+ case 0x0198:
+ return 0x0199; // [C] LATIN CAPITAL LETTER K WITH HOOK
+ case 0x019C:
+ return 0x026F; // [C] LATIN CAPITAL LETTER TURNED M
+ case 0x019D:
+ return 0x0272; // [C] LATIN CAPITAL LETTER N WITH LEFT HOOK
+ case 0x019F:
+ return 0x0275; // [C] LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+ case 0x01A0:
+ return 0x01A1; // [C] LATIN CAPITAL LETTER O WITH HORN
+ case 0x01A2:
+ return 0x01A3; // [C] LATIN CAPITAL LETTER OI
+ case 0x01A4:
+ return 0x01A5; // [C] LATIN CAPITAL LETTER P WITH HOOK
+ case 0x01A6:
+ return 0x0280; // [C] LATIN LETTER YR
+ case 0x01A7:
+ return 0x01A8; // [C] LATIN CAPITAL LETTER TONE TWO
+ case 0x01A9:
+ return 0x0283; // [C] LATIN CAPITAL LETTER ESH
+ case 0x01AC:
+ return 0x01AD; // [C] LATIN CAPITAL LETTER T WITH HOOK
+ case 0x01AE:
+ return 0x0288; // [C] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+ case 0x01AF:
+ return 0x01B0; // [C] LATIN CAPITAL LETTER U WITH HORN
+ case 0x01B1:
+ return 0x028A; // [C] LATIN CAPITAL LETTER UPSILON
+ case 0x01B2:
+ return 0x028B; // [C] LATIN CAPITAL LETTER V WITH HOOK
+ case 0x01B3:
+ return 0x01B4; // [C] LATIN CAPITAL LETTER Y WITH HOOK
+ case 0x01B5:
+ return 0x01B6; // [C] LATIN CAPITAL LETTER Z WITH STROKE
+ case 0x01B7:
+ return 0x0292; // [C] LATIN CAPITAL LETTER EZH
+ case 0x01B8:
+ return 0x01B9; // [C] LATIN CAPITAL LETTER EZH REVERSED
+ case 0x01BC:
+ return 0x01BD; // [C] LATIN CAPITAL LETTER TONE FIVE
+ case 0x01C4:
+ return 0x01C6; // [C] LATIN CAPITAL LETTER DZ WITH CARON
+ case 0x01C5:
+ return 0x01C6; // [C] LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ case 0x01C7:
+ return 0x01C9; // [C] LATIN CAPITAL LETTER LJ
+ case 0x01C8:
+ return 0x01C9; // [C] LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ case 0x01CA:
+ return 0x01CC; // [C] LATIN CAPITAL LETTER NJ
+ case 0x01CB:
+ return 0x01CC; // [C] LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ case 0x01CD:
+ return 0x01CE; // [C] LATIN CAPITAL LETTER A WITH CARON
+ case 0x01CF:
+ return 0x01D0; // [C] LATIN CAPITAL LETTER I WITH CARON
+ case 0x01D1:
+ return 0x01D2; // [C] LATIN CAPITAL LETTER O WITH CARON
+ case 0x01D3:
+ return 0x01D4; // [C] LATIN CAPITAL LETTER U WITH CARON
+ case 0x01D5:
+ return 0x01D6; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+ case 0x01D7:
+ return 0x01D8; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+ case 0x01D9:
+ return 0x01DA; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+ case 0x01DB:
+ return 0x01DC; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+ case 0x01DE:
+ return 0x01DF; // [C] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+ case 0x01E0:
+ return 0x01E1; // [C] LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+ case 0x01E2:
+ return 0x01E3; // [C] LATIN CAPITAL LETTER AE WITH MACRON
+ case 0x01E4:
+ return 0x01E5; // [C] LATIN CAPITAL LETTER G WITH STROKE
+ case 0x01E6:
+ return 0x01E7; // [C] LATIN CAPITAL LETTER G WITH CARON
+ case 0x01E8:
+ return 0x01E9; // [C] LATIN CAPITAL LETTER K WITH CARON
+ case 0x01EA:
+ return 0x01EB; // [C] LATIN CAPITAL LETTER O WITH OGONEK
+ case 0x01EC:
+ return 0x01ED; // [C] LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+ case 0x01EE:
+ return 0x01EF; // [C] LATIN CAPITAL LETTER EZH WITH CARON
+ case 0x01F1:
+ return 0x01F3; // [C] LATIN CAPITAL LETTER DZ
+ case 0x01F2:
+ return 0x01F3; // [C] LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ case 0x01F4:
+ return 0x01F5; // [C] LATIN CAPITAL LETTER G WITH ACUTE
+ case 0x01F6:
+ return 0x0195; // [C] LATIN CAPITAL LETTER HWAIR
+ case 0x01F7:
+ return 0x01BF; // [C] LATIN CAPITAL LETTER WYNN
+ case 0x01F8:
+ return 0x01F9; // [C] LATIN CAPITAL LETTER N WITH GRAVE
+ case 0x01FA:
+ return 0x01FB; // [C] LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+ case 0x01FC:
+ return 0x01FD; // [C] LATIN CAPITAL LETTER AE WITH ACUTE
+ case 0x01FE:
+ return 0x01FF; // [C] LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+ case 0x0200:
+ return 0x0201; // [C] LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+ case 0x0202:
+ return 0x0203; // [C] LATIN CAPITAL LETTER A WITH INVERTED BREVE
+ case 0x0204:
+ return 0x0205; // [C] LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+ case 0x0206:
+ return 0x0207; // [C] LATIN CAPITAL LETTER E WITH INVERTED BREVE
+ case 0x0208:
+ return 0x0209; // [C] LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+ case 0x020A:
+ return 0x020B; // [C] LATIN CAPITAL LETTER I WITH INVERTED BREVE
+ case 0x020C:
+ return 0x020D; // [C] LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+ case 0x020E:
+ return 0x020F; // [C] LATIN CAPITAL LETTER O WITH INVERTED BREVE
+ case 0x0210:
+ return 0x0211; // [C] LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+ case 0x0212:
+ return 0x0213; // [C] LATIN CAPITAL LETTER R WITH INVERTED BREVE
+ case 0x0214:
+ return 0x0215; // [C] LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+ case 0x0216:
+ return 0x0217; // [C] LATIN CAPITAL LETTER U WITH INVERTED BREVE
+ case 0x0218:
+ return 0x0219; // [C] LATIN CAPITAL LETTER S WITH COMMA BELOW
+ case 0x021A:
+ return 0x021B; // [C] LATIN CAPITAL LETTER T WITH COMMA BELOW
+ case 0x021C:
+ return 0x021D; // [C] LATIN CAPITAL LETTER YOGH
+ case 0x021E:
+ return 0x021F; // [C] LATIN CAPITAL LETTER H WITH CARON
+ case 0x0220:
+ return 0x019E; // [C] LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+ case 0x0222:
+ return 0x0223; // [C] LATIN CAPITAL LETTER OU
+ case 0x0224:
+ return 0x0225; // [C] LATIN CAPITAL LETTER Z WITH HOOK
+ case 0x0226:
+ return 0x0227; // [C] LATIN CAPITAL LETTER A WITH DOT ABOVE
+ case 0x0228:
+ return 0x0229; // [C] LATIN CAPITAL LETTER E WITH CEDILLA
+ case 0x022A:
+ return 0x022B; // [C] LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+ case 0x022C:
+ return 0x022D; // [C] LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+ case 0x022E:
+ return 0x022F; // [C] LATIN CAPITAL LETTER O WITH DOT ABOVE
+ case 0x0230:
+ return 0x0231; // [C] LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+ case 0x0232:
+ return 0x0233; // [C] LATIN CAPITAL LETTER Y WITH MACRON
+ case 0x023A:
+ return 0x2C65; // [C] LATIN CAPITAL LETTER A WITH STROKE
+ case 0x023B:
+ return 0x023C; // [C] LATIN CAPITAL LETTER C WITH STROKE
+ case 0x023D:
+ return 0x019A; // [C] LATIN CAPITAL LETTER L WITH BAR
+ case 0x023E:
+ return 0x2C66; // [C] LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+ case 0x0241:
+ return 0x0242; // [C] LATIN CAPITAL LETTER GLOTTAL STOP
+ case 0x0243:
+ return 0x0180; // [C] LATIN CAPITAL LETTER B WITH STROKE
+ case 0x0244:
+ return 0x0289; // [C] LATIN CAPITAL LETTER U BAR
+ case 0x0245:
+ return 0x028C; // [C] LATIN CAPITAL LETTER TURNED V
+ case 0x0246:
+ return 0x0247; // [C] LATIN CAPITAL LETTER E WITH STROKE
+ case 0x0248:
+ return 0x0249; // [C] LATIN CAPITAL LETTER J WITH STROKE
+ case 0x024A:
+ return 0x024B; // [C] LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+ case 0x024C:
+ return 0x024D; // [C] LATIN CAPITAL LETTER R WITH STROKE
+ case 0x024E:
+ return 0x024F; // [C] LATIN CAPITAL LETTER Y WITH STROKE
+ case 0x0345:
+ return 0x03B9; // [C] COMBINING GREEK YPOGEGRAMMENI
+ case 0x0370:
+ return 0x0371; // [C] GREEK CAPITAL LETTER HETA
+ case 0x0372:
+ return 0x0373; // [C] GREEK CAPITAL LETTER ARCHAIC SAMPI
+ case 0x0376:
+ return 0x0377; // [C] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+ case 0x037F:
+ return 0x03F3; // [C] GREEK CAPITAL LETTER YOT
+ case 0x0386:
+ return 0x03AC; // [C] GREEK CAPITAL LETTER ALPHA WITH TONOS
+ case 0x0388:
+ return 0x03AD; // [C] GREEK CAPITAL LETTER EPSILON WITH TONOS
+ case 0x0389:
+ return 0x03AE; // [C] GREEK CAPITAL LETTER ETA WITH TONOS
+ case 0x038A:
+ return 0x03AF; // [C] GREEK CAPITAL LETTER IOTA WITH TONOS
+ case 0x038C:
+ return 0x03CC; // [C] GREEK CAPITAL LETTER OMICRON WITH TONOS
+ case 0x038E:
+ return 0x03CD; // [C] GREEK CAPITAL LETTER UPSILON WITH TONOS
+ case 0x038F:
+ return 0x03CE; // [C] GREEK CAPITAL LETTER OMEGA WITH TONOS
+ case 0x0391:
+ return 0x03B1; // [C] GREEK CAPITAL LETTER ALPHA
+ case 0x0392:
+ return 0x03B2; // [C] GREEK CAPITAL LETTER BETA
+ case 0x0393:
+ return 0x03B3; // [C] GREEK CAPITAL LETTER GAMMA
+ case 0x0394:
+ return 0x03B4; // [C] GREEK CAPITAL LETTER DELTA
+ case 0x0395:
+ return 0x03B5; // [C] GREEK CAPITAL LETTER EPSILON
+ case 0x0396:
+ return 0x03B6; // [C] GREEK CAPITAL LETTER ZETA
+ case 0x0397:
+ return 0x03B7; // [C] GREEK CAPITAL LETTER ETA
+ case 0x0398:
+ return 0x03B8; // [C] GREEK CAPITAL LETTER THETA
+ case 0x0399:
+ return 0x03B9; // [C] GREEK CAPITAL LETTER IOTA
+ case 0x039A:
+ return 0x03BA; // [C] GREEK CAPITAL LETTER KAPPA
+ case 0x039B:
+ return 0x03BB; // [C] GREEK CAPITAL LETTER LAMDA
+ case 0x039C:
+ return 0x03BC; // [C] GREEK CAPITAL LETTER MU
+ case 0x039D:
+ return 0x03BD; // [C] GREEK CAPITAL LETTER NU
+ case 0x039E:
+ return 0x03BE; // [C] GREEK CAPITAL LETTER XI
+ case 0x039F:
+ return 0x03BF; // [C] GREEK CAPITAL LETTER OMICRON
+ case 0x03A0:
+ return 0x03C0; // [C] GREEK CAPITAL LETTER PI
+ case 0x03A1:
+ return 0x03C1; // [C] GREEK CAPITAL LETTER RHO
+ case 0x03A3:
+ return 0x03C3; // [C] GREEK CAPITAL LETTER SIGMA
+ case 0x03A4:
+ return 0x03C4; // [C] GREEK CAPITAL LETTER TAU
+ case 0x03A5:
+ return 0x03C5; // [C] GREEK CAPITAL LETTER UPSILON
+ case 0x03A6:
+ return 0x03C6; // [C] GREEK CAPITAL LETTER PHI
+ case 0x03A7:
+ return 0x03C7; // [C] GREEK CAPITAL LETTER CHI
+ case 0x03A8:
+ return 0x03C8; // [C] GREEK CAPITAL LETTER PSI
+ case 0x03A9:
+ return 0x03C9; // [C] GREEK CAPITAL LETTER OMEGA
+ case 0x03AA:
+ return 0x03CA; // [C] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ case 0x03AB:
+ return 0x03CB; // [C] GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ case 0x03C2:
+ return 0x03C3; // [C] GREEK SMALL LETTER FINAL SIGMA
+ case 0x03CF:
+ return 0x03D7; // [C] GREEK CAPITAL KAI SYMBOL
+ case 0x03D0:
+ return 0x03B2; // [C] GREEK BETA SYMBOL
+ case 0x03D1:
+ return 0x03B8; // [C] GREEK THETA SYMBOL
+ case 0x03D5:
+ return 0x03C6; // [C] GREEK PHI SYMBOL
+ case 0x03D6:
+ return 0x03C0; // [C] GREEK PI SYMBOL
+ case 0x03D8:
+ return 0x03D9; // [C] GREEK LETTER ARCHAIC KOPPA
+ case 0x03DA:
+ return 0x03DB; // [C] GREEK LETTER STIGMA
+ case 0x03DC:
+ return 0x03DD; // [C] GREEK LETTER DIGAMMA
+ case 0x03DE:
+ return 0x03DF; // [C] GREEK LETTER KOPPA
+ case 0x03E0:
+ return 0x03E1; // [C] GREEK LETTER SAMPI
+ case 0x03E2:
+ return 0x03E3; // [C] COPTIC CAPITAL LETTER SHEI
+ case 0x03E4:
+ return 0x03E5; // [C] COPTIC CAPITAL LETTER FEI
+ case 0x03E6:
+ return 0x03E7; // [C] COPTIC CAPITAL LETTER KHEI
+ case 0x03E8:
+ return 0x03E9; // [C] COPTIC CAPITAL LETTER HORI
+ case 0x03EA:
+ return 0x03EB; // [C] COPTIC CAPITAL LETTER GANGIA
+ case 0x03EC:
+ return 0x03ED; // [C] COPTIC CAPITAL LETTER SHIMA
+ case 0x03EE:
+ return 0x03EF; // [C] COPTIC CAPITAL LETTER DEI
+ case 0x03F0:
+ return 0x03BA; // [C] GREEK KAPPA SYMBOL
+ case 0x03F1:
+ return 0x03C1; // [C] GREEK RHO SYMBOL
+ case 0x03F4:
+ return 0x03B8; // [C] GREEK CAPITAL THETA SYMBOL
+ case 0x03F5:
+ return 0x03B5; // [C] GREEK LUNATE EPSILON SYMBOL
+ case 0x03F7:
+ return 0x03F8; // [C] GREEK CAPITAL LETTER SHO
+ case 0x03F9:
+ return 0x03F2; // [C] GREEK CAPITAL LUNATE SIGMA SYMBOL
+ case 0x03FA:
+ return 0x03FB; // [C] GREEK CAPITAL LETTER SAN
+ case 0x03FD:
+ return 0x037B; // [C] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+ case 0x03FE:
+ return 0x037C; // [C] GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+ case 0x03FF:
+ return 0x037D; // [C] GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ case 0x0400:
+ return 0x0450; // [C] CYRILLIC CAPITAL LETTER IE WITH GRAVE
+ case 0x0401:
+ return 0x0451; // [C] CYRILLIC CAPITAL LETTER IO
+ case 0x0402:
+ return 0x0452; // [C] CYRILLIC CAPITAL LETTER DJE
+ case 0x0403:
+ return 0x0453; // [C] CYRILLIC CAPITAL LETTER GJE
+ case 0x0404:
+ return 0x0454; // [C] CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ case 0x0405:
+ return 0x0455; // [C] CYRILLIC CAPITAL LETTER DZE
+ case 0x0406:
+ return 0x0456; // [C] CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ case 0x0407:
+ return 0x0457; // [C] CYRILLIC CAPITAL LETTER YI
+ case 0x0408:
+ return 0x0458; // [C] CYRILLIC CAPITAL LETTER JE
+ case 0x0409:
+ return 0x0459; // [C] CYRILLIC CAPITAL LETTER LJE
+ case 0x040A:
+ return 0x045A; // [C] CYRILLIC CAPITAL LETTER NJE
+ case 0x040B:
+ return 0x045B; // [C] CYRILLIC CAPITAL LETTER TSHE
+ case 0x040C:
+ return 0x045C; // [C] CYRILLIC CAPITAL LETTER KJE
+ case 0x040D:
+ return 0x045D; // [C] CYRILLIC CAPITAL LETTER I WITH GRAVE
+ case 0x040E:
+ return 0x045E; // [C] CYRILLIC CAPITAL LETTER SHORT U
+ case 0x040F:
+ return 0x045F; // [C] CYRILLIC CAPITAL LETTER DZHE
+ case 0x0410:
+ return 0x0430; // [C] CYRILLIC CAPITAL LETTER A
+ case 0x0411:
+ return 0x0431; // [C] CYRILLIC CAPITAL LETTER BE
+ case 0x0412:
+ return 0x0432; // [C] CYRILLIC CAPITAL LETTER VE
+ case 0x0413:
+ return 0x0433; // [C] CYRILLIC CAPITAL LETTER GHE
+ case 0x0414:
+ return 0x0434; // [C] CYRILLIC CAPITAL LETTER DE
+ case 0x0415:
+ return 0x0435; // [C] CYRILLIC CAPITAL LETTER IE
+ case 0x0416:
+ return 0x0436; // [C] CYRILLIC CAPITAL LETTER ZHE
+ case 0x0417:
+ return 0x0437; // [C] CYRILLIC CAPITAL LETTER ZE
+ case 0x0418:
+ return 0x0438; // [C] CYRILLIC CAPITAL LETTER I
+ case 0x0419:
+ return 0x0439; // [C] CYRILLIC CAPITAL LETTER SHORT I
+ case 0x041A:
+ return 0x043A; // [C] CYRILLIC CAPITAL LETTER KA
+ case 0x041B:
+ return 0x043B; // [C] CYRILLIC CAPITAL LETTER EL
+ case 0x041C:
+ return 0x043C; // [C] CYRILLIC CAPITAL LETTER EM
+ case 0x041D:
+ return 0x043D; // [C] CYRILLIC CAPITAL LETTER EN
+ case 0x041E:
+ return 0x043E; // [C] CYRILLIC CAPITAL LETTER O
+ case 0x041F:
+ return 0x043F; // [C] CYRILLIC CAPITAL LETTER PE
+ case 0x0420:
+ return 0x0440; // [C] CYRILLIC CAPITAL LETTER ER
+ case 0x0421:
+ return 0x0441; // [C] CYRILLIC CAPITAL LETTER ES
+ case 0x0422:
+ return 0x0442; // [C] CYRILLIC CAPITAL LETTER TE
+ case 0x0423:
+ return 0x0443; // [C] CYRILLIC CAPITAL LETTER U
+ case 0x0424:
+ return 0x0444; // [C] CYRILLIC CAPITAL LETTER EF
+ case 0x0425:
+ return 0x0445; // [C] CYRILLIC CAPITAL LETTER HA
+ case 0x0426:
+ return 0x0446; // [C] CYRILLIC CAPITAL LETTER TSE
+ case 0x0427:
+ return 0x0447; // [C] CYRILLIC CAPITAL LETTER CHE
+ case 0x0428:
+ return 0x0448; // [C] CYRILLIC CAPITAL LETTER SHA
+ case 0x0429:
+ return 0x0449; // [C] CYRILLIC CAPITAL LETTER SHCHA
+ case 0x042A:
+ return 0x044A; // [C] CYRILLIC CAPITAL LETTER HARD SIGN
+ case 0x042B:
+ return 0x044B; // [C] CYRILLIC CAPITAL LETTER YERU
+ case 0x042C:
+ return 0x044C; // [C] CYRILLIC CAPITAL LETTER SOFT SIGN
+ case 0x042D:
+ return 0x044D; // [C] CYRILLIC CAPITAL LETTER E
+ case 0x042E:
+ return 0x044E; // [C] CYRILLIC CAPITAL LETTER YU
+ case 0x042F:
+ return 0x044F; // [C] CYRILLIC CAPITAL LETTER YA
+ case 0x0460:
+ return 0x0461; // [C] CYRILLIC CAPITAL LETTER OMEGA
+ case 0x0462:
+ return 0x0463; // [C] CYRILLIC CAPITAL LETTER YAT
+ case 0x0464:
+ return 0x0465; // [C] CYRILLIC CAPITAL LETTER IOTIFIED E
+ case 0x0466:
+ return 0x0467; // [C] CYRILLIC CAPITAL LETTER LITTLE YUS
+ case 0x0468:
+ return 0x0469; // [C] CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+ case 0x046A:
+ return 0x046B; // [C] CYRILLIC CAPITAL LETTER BIG YUS
+ case 0x046C:
+ return 0x046D; // [C] CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+ case 0x046E:
+ return 0x046F; // [C] CYRILLIC CAPITAL LETTER KSI
+ case 0x0470:
+ return 0x0471; // [C] CYRILLIC CAPITAL LETTER PSI
+ case 0x0472:
+ return 0x0473; // [C] CYRILLIC CAPITAL LETTER FITA
+ case 0x0474:
+ return 0x0475; // [C] CYRILLIC CAPITAL LETTER IZHITSA
+ case 0x0476:
+ return 0x0477; // [C] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE
+ // ACCENT
+ case 0x0478:
+ return 0x0479; // [C] CYRILLIC CAPITAL LETTER UK
+ case 0x047A:
+ return 0x047B; // [C] CYRILLIC CAPITAL LETTER ROUND OMEGA
+ case 0x047C:
+ return 0x047D; // [C] CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+ case 0x047E:
+ return 0x047F; // [C] CYRILLIC CAPITAL LETTER OT
+ case 0x0480:
+ return 0x0481; // [C] CYRILLIC CAPITAL LETTER KOPPA
+ case 0x048A:
+ return 0x048B; // [C] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+ case 0x048C:
+ return 0x048D; // [C] CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+ case 0x048E:
+ return 0x048F; // [C] CYRILLIC CAPITAL LETTER ER WITH TICK
+ case 0x0490:
+ return 0x0491; // [C] CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ case 0x0492:
+ return 0x0493; // [C] CYRILLIC CAPITAL LETTER GHE WITH STROKE
+ case 0x0494:
+ return 0x0495; // [C] CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+ case 0x0496:
+ return 0x0497; // [C] CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+ case 0x0498:
+ return 0x0499; // [C] CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+ case 0x049A:
+ return 0x049B; // [C] CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+ case 0x049C:
+ return 0x049D; // [C] CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+ case 0x049E:
+ return 0x049F; // [C] CYRILLIC CAPITAL LETTER KA WITH STROKE
+ case 0x04A0:
+ return 0x04A1; // [C] CYRILLIC CAPITAL LETTER BASHKIR KA
+ case 0x04A2:
+ return 0x04A3; // [C] CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+ case 0x04A4:
+ return 0x04A5; // [C] CYRILLIC CAPITAL LIGATURE EN GHE
+ case 0x04A6:
+ return 0x04A7; // [C] CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+ case 0x04A8:
+ return 0x04A9; // [C] CYRILLIC CAPITAL LETTER ABKHASIAN HA
+ case 0x04AA:
+ return 0x04AB; // [C] CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+ case 0x04AC:
+ return 0x04AD; // [C] CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+ case 0x04AE:
+ return 0x04AF; // [C] CYRILLIC CAPITAL LETTER STRAIGHT U
+ case 0x04B0:
+ return 0x04B1; // [C] CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+ case 0x04B2:
+ return 0x04B3; // [C] CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+ case 0x04B4:
+ return 0x04B5; // [C] CYRILLIC CAPITAL LIGATURE TE TSE
+ case 0x04B6:
+ return 0x04B7; // [C] CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+ case 0x04B8:
+ return 0x04B9; // [C] CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+ case 0x04BA:
+ return 0x04BB; // [C] CYRILLIC CAPITAL LETTER SHHA
+ case 0x04BC:
+ return 0x04BD; // [C] CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+ case 0x04BE:
+ return 0x04BF; // [C] CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+ case 0x04C0:
+ return 0x04CF; // [C] CYRILLIC LETTER PALOCHKA
+ case 0x04C1:
+ return 0x04C2; // [C] CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+ case 0x04C3:
+ return 0x04C4; // [C] CYRILLIC CAPITAL LETTER KA WITH HOOK
+ case 0x04C5:
+ return 0x04C6; // [C] CYRILLIC CAPITAL LETTER EL WITH TAIL
+ case 0x04C7:
+ return 0x04C8; // [C] CYRILLIC CAPITAL LETTER EN WITH HOOK
+ case 0x04C9:
+ return 0x04CA; // [C] CYRILLIC CAPITAL LETTER EN WITH TAIL
+ case 0x04CB:
+ return 0x04CC; // [C] CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+ case 0x04CD:
+ return 0x04CE; // [C] CYRILLIC CAPITAL LETTER EM WITH TAIL
+ case 0x04D0:
+ return 0x04D1; // [C] CYRILLIC CAPITAL LETTER A WITH BREVE
+ case 0x04D2:
+ return 0x04D3; // [C] CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+ case 0x04D4:
+ return 0x04D5; // [C] CYRILLIC CAPITAL LIGATURE A IE
+ case 0x04D6:
+ return 0x04D7; // [C] CYRILLIC CAPITAL LETTER IE WITH BREVE
+ case 0x04D8:
+ return 0x04D9; // [C] CYRILLIC CAPITAL LETTER SCHWA
+ case 0x04DA:
+ return 0x04DB; // [C] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+ case 0x04DC:
+ return 0x04DD; // [C] CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+ case 0x04DE:
+ return 0x04DF; // [C] CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+ case 0x04E0:
+ return 0x04E1; // [C] CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+ case 0x04E2:
+ return 0x04E3; // [C] CYRILLIC CAPITAL LETTER I WITH MACRON
+ case 0x04E4:
+ return 0x04E5; // [C] CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+ case 0x04E6:
+ return 0x04E7; // [C] CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+ case 0x04E8:
+ return 0x04E9; // [C] CYRILLIC CAPITAL LETTER BARRED O
+ case 0x04EA:
+ return 0x04EB; // [C] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+ case 0x04EC:
+ return 0x04ED; // [C] CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+ case 0x04EE:
+ return 0x04EF; // [C] CYRILLIC CAPITAL LETTER U WITH MACRON
+ case 0x04F0:
+ return 0x04F1; // [C] CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+ case 0x04F2:
+ return 0x04F3; // [C] CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+ case 0x04F4:
+ return 0x04F5; // [C] CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+ case 0x04F6:
+ return 0x04F7; // [C] CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+ case 0x04F8:
+ return 0x04F9; // [C] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+ case 0x04FA:
+ return 0x04FB; // [C] CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+ case 0x04FC:
+ return 0x04FD; // [C] CYRILLIC CAPITAL LETTER HA WITH HOOK
+ case 0x04FE:
+ return 0x04FF; // [C] CYRILLIC CAPITAL LETTER HA WITH STROKE
+ case 0x0500:
+ return 0x0501; // [C] CYRILLIC CAPITAL LETTER KOMI DE
+ case 0x0502:
+ return 0x0503; // [C] CYRILLIC CAPITAL LETTER KOMI DJE
+ case 0x0504:
+ return 0x0505; // [C] CYRILLIC CAPITAL LETTER KOMI ZJE
+ case 0x0506:
+ return 0x0507; // [C] CYRILLIC CAPITAL LETTER KOMI DZJE
+ case 0x0508:
+ return 0x0509; // [C] CYRILLIC CAPITAL LETTER KOMI LJE
+ case 0x050A:
+ return 0x050B; // [C] CYRILLIC CAPITAL LETTER KOMI NJE
+ case 0x050C:
+ return 0x050D; // [C] CYRILLIC CAPITAL LETTER KOMI SJE
+ case 0x050E:
+ return 0x050F; // [C] CYRILLIC CAPITAL LETTER KOMI TJE
+ case 0x0510:
+ return 0x0511; // [C] CYRILLIC CAPITAL LETTER REVERSED ZE
+ case 0x0512:
+ return 0x0513; // [C] CYRILLIC CAPITAL LETTER EL WITH HOOK
+ case 0x0514:
+ return 0x0515; // [C] CYRILLIC CAPITAL LETTER LHA
+ case 0x0516:
+ return 0x0517; // [C] CYRILLIC CAPITAL LETTER RHA
+ case 0x0518:
+ return 0x0519; // [C] CYRILLIC CAPITAL LETTER YAE
+ case 0x051A:
+ return 0x051B; // [C] CYRILLIC CAPITAL LETTER QA
+ case 0x051C:
+ return 0x051D; // [C] CYRILLIC CAPITAL LETTER WE
+ case 0x051E:
+ return 0x051F; // [C] CYRILLIC CAPITAL LETTER ALEUT KA
+ case 0x0520:
+ return 0x0521; // [C] CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+ case 0x0522:
+ return 0x0523; // [C] CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+ case 0x0524:
+ return 0x0525; // [C] CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+ case 0x0526:
+ return 0x0527; // [C] CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+ case 0x0528:
+ return 0x0529; // [C] CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+ case 0x052A:
+ return 0x052B; // [C] CYRILLIC CAPITAL LETTER DZZHE
+ case 0x052C:
+ return 0x052D; // [C] CYRILLIC CAPITAL LETTER DCHE
+ case 0x052E:
+ return 0x052F; // [C] CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+ case 0x0531:
+ return 0x0561; // [C] ARMENIAN CAPITAL LETTER AYB
+ case 0x0532:
+ return 0x0562; // [C] ARMENIAN CAPITAL LETTER BEN
+ case 0x0533:
+ return 0x0563; // [C] ARMENIAN CAPITAL LETTER GIM
+ case 0x0534:
+ return 0x0564; // [C] ARMENIAN CAPITAL LETTER DA
+ case 0x0535:
+ return 0x0565; // [C] ARMENIAN CAPITAL LETTER ECH
+ case 0x0536:
+ return 0x0566; // [C] ARMENIAN CAPITAL LETTER ZA
+ case 0x0537:
+ return 0x0567; // [C] ARMENIAN CAPITAL LETTER EH
+ case 0x0538:
+ return 0x0568; // [C] ARMENIAN CAPITAL LETTER ET
+ case 0x0539:
+ return 0x0569; // [C] ARMENIAN CAPITAL LETTER TO
+ case 0x053A:
+ return 0x056A; // [C] ARMENIAN CAPITAL LETTER ZHE
+ case 0x053B:
+ return 0x056B; // [C] ARMENIAN CAPITAL LETTER INI
+ case 0x053C:
+ return 0x056C; // [C] ARMENIAN CAPITAL LETTER LIWN
+ case 0x053D:
+ return 0x056D; // [C] ARMENIAN CAPITAL LETTER XEH
+ case 0x053E:
+ return 0x056E; // [C] ARMENIAN CAPITAL LETTER CA
+ case 0x053F:
+ return 0x056F; // [C] ARMENIAN CAPITAL LETTER KEN
+ case 0x0540:
+ return 0x0570; // [C] ARMENIAN CAPITAL LETTER HO
+ case 0x0541:
+ return 0x0571; // [C] ARMENIAN CAPITAL LETTER JA
+ case 0x0542:
+ return 0x0572; // [C] ARMENIAN CAPITAL LETTER GHAD
+ case 0x0543:
+ return 0x0573; // [C] ARMENIAN CAPITAL LETTER CHEH
+ case 0x0544:
+ return 0x0574; // [C] ARMENIAN CAPITAL LETTER MEN
+ case 0x0545:
+ return 0x0575; // [C] ARMENIAN CAPITAL LETTER YI
+ case 0x0546:
+ return 0x0576; // [C] ARMENIAN CAPITAL LETTER NOW
+ case 0x0547:
+ return 0x0577; // [C] ARMENIAN CAPITAL LETTER SHA
+ case 0x0548:
+ return 0x0578; // [C] ARMENIAN CAPITAL LETTER VO
+ case 0x0549:
+ return 0x0579; // [C] ARMENIAN CAPITAL LETTER CHA
+ case 0x054A:
+ return 0x057A; // [C] ARMENIAN CAPITAL LETTER PEH
+ case 0x054B:
+ return 0x057B; // [C] ARMENIAN CAPITAL LETTER JHEH
+ case 0x054C:
+ return 0x057C; // [C] ARMENIAN CAPITAL LETTER RA
+ case 0x054D:
+ return 0x057D; // [C] ARMENIAN CAPITAL LETTER SEH
+ case 0x054E:
+ return 0x057E; // [C] ARMENIAN CAPITAL LETTER VEW
+ case 0x054F:
+ return 0x057F; // [C] ARMENIAN CAPITAL LETTER TIWN
+ case 0x0550:
+ return 0x0580; // [C] ARMENIAN CAPITAL LETTER REH
+ case 0x0551:
+ return 0x0581; // [C] ARMENIAN CAPITAL LETTER CO
+ case 0x0552:
+ return 0x0582; // [C] ARMENIAN CAPITAL LETTER YIWN
+ case 0x0553:
+ return 0x0583; // [C] ARMENIAN CAPITAL LETTER PIWR
+ case 0x0554:
+ return 0x0584; // [C] ARMENIAN CAPITAL LETTER KEH
+ case 0x0555:
+ return 0x0585; // [C] ARMENIAN CAPITAL LETTER OH
+ case 0x0556:
+ return 0x0586; // [C] ARMENIAN CAPITAL LETTER FEH
+ case 0x10A0:
+ return 0x2D00; // [C] GEORGIAN CAPITAL LETTER AN
+ case 0x10A1:
+ return 0x2D01; // [C] GEORGIAN CAPITAL LETTER BAN
+ case 0x10A2:
+ return 0x2D02; // [C] GEORGIAN CAPITAL LETTER GAN
+ case 0x10A3:
+ return 0x2D03; // [C] GEORGIAN CAPITAL LETTER DON
+ case 0x10A4:
+ return 0x2D04; // [C] GEORGIAN CAPITAL LETTER EN
+ case 0x10A5:
+ return 0x2D05; // [C] GEORGIAN CAPITAL LETTER VIN
+ case 0x10A6:
+ return 0x2D06; // [C] GEORGIAN CAPITAL LETTER ZEN
+ case 0x10A7:
+ return 0x2D07; // [C] GEORGIAN CAPITAL LETTER TAN
+ case 0x10A8:
+ return 0x2D08; // [C] GEORGIAN CAPITAL LETTER IN
+ case 0x10A9:
+ return 0x2D09; // [C] GEORGIAN CAPITAL LETTER KAN
+ case 0x10AA:
+ return 0x2D0A; // [C] GEORGIAN CAPITAL LETTER LAS
+ case 0x10AB:
+ return 0x2D0B; // [C] GEORGIAN CAPITAL LETTER MAN
+ case 0x10AC:
+ return 0x2D0C; // [C] GEORGIAN CAPITAL LETTER NAR
+ case 0x10AD:
+ return 0x2D0D; // [C] GEORGIAN CAPITAL LETTER ON
+ case 0x10AE:
+ return 0x2D0E; // [C] GEORGIAN CAPITAL LETTER PAR
+ case 0x10AF:
+ return 0x2D0F; // [C] GEORGIAN CAPITAL LETTER ZHAR
+ case 0x10B0:
+ return 0x2D10; // [C] GEORGIAN CAPITAL LETTER RAE
+ case 0x10B1:
+ return 0x2D11; // [C] GEORGIAN CAPITAL LETTER SAN
+ case 0x10B2:
+ return 0x2D12; // [C] GEORGIAN CAPITAL LETTER TAR
+ case 0x10B3:
+ return 0x2D13; // [C] GEORGIAN CAPITAL LETTER UN
+ case 0x10B4:
+ return 0x2D14; // [C] GEORGIAN CAPITAL LETTER PHAR
+ case 0x10B5:
+ return 0x2D15; // [C] GEORGIAN CAPITAL LETTER KHAR
+ case 0x10B6:
+ return 0x2D16; // [C] GEORGIAN CAPITAL LETTER GHAN
+ case 0x10B7:
+ return 0x2D17; // [C] GEORGIAN CAPITAL LETTER QAR
+ case 0x10B8:
+ return 0x2D18; // [C] GEORGIAN CAPITAL LETTER SHIN
+ case 0x10B9:
+ return 0x2D19; // [C] GEORGIAN CAPITAL LETTER CHIN
+ case 0x10BA:
+ return 0x2D1A; // [C] GEORGIAN CAPITAL LETTER CAN
+ case 0x10BB:
+ return 0x2D1B; // [C] GEORGIAN CAPITAL LETTER JIL
+ case 0x10BC:
+ return 0x2D1C; // [C] GEORGIAN CAPITAL LETTER CIL
+ case 0x10BD:
+ return 0x2D1D; // [C] GEORGIAN CAPITAL LETTER CHAR
+ case 0x10BE:
+ return 0x2D1E; // [C] GEORGIAN CAPITAL LETTER XAN
+ case 0x10BF:
+ return 0x2D1F; // [C] GEORGIAN CAPITAL LETTER JHAN
+ case 0x10C0:
+ return 0x2D20; // [C] GEORGIAN CAPITAL LETTER HAE
+ case 0x10C1:
+ return 0x2D21; // [C] GEORGIAN CAPITAL LETTER HE
+ case 0x10C2:
+ return 0x2D22; // [C] GEORGIAN CAPITAL LETTER HIE
+ case 0x10C3:
+ return 0x2D23; // [C] GEORGIAN CAPITAL LETTER WE
+ case 0x10C4:
+ return 0x2D24; // [C] GEORGIAN CAPITAL LETTER HAR
+ case 0x10C5:
+ return 0x2D25; // [C] GEORGIAN CAPITAL LETTER HOE
+ case 0x10C7:
+ return 0x2D27; // [C] GEORGIAN CAPITAL LETTER YN
+ case 0x10CD:
+ return 0x2D2D; // [C] GEORGIAN CAPITAL LETTER AEN
+ case 0x13F8:
+ return 0x13F0; // [C] CHEROKEE SMALL LETTER YE
+ case 0x13F9:
+ return 0x13F1; // [C] CHEROKEE SMALL LETTER YI
+ case 0x13FA:
+ return 0x13F2; // [C] CHEROKEE SMALL LETTER YO
+ case 0x13FB:
+ return 0x13F3; // [C] CHEROKEE SMALL LETTER YU
+ case 0x13FC:
+ return 0x13F4; // [C] CHEROKEE SMALL LETTER YV
+ case 0x13FD:
+ return 0x13F5; // [C] CHEROKEE SMALL LETTER MV
+ case 0x1C80:
+ return 0x0432; // [C] CYRILLIC SMALL LETTER ROUNDED VE
+ case 0x1C81:
+ return 0x0434; // [C] CYRILLIC SMALL LETTER LONG-LEGGED DE
+ case 0x1C82:
+ return 0x043E; // [C] CYRILLIC SMALL LETTER NARROW O
+ case 0x1C83:
+ return 0x0441; // [C] CYRILLIC SMALL LETTER WIDE ES
+ case 0x1C84:
+ return 0x0442; // [C] CYRILLIC SMALL LETTER TALL TE
+ case 0x1C85:
+ return 0x0442; // [C] CYRILLIC SMALL LETTER THREE-LEGGED TE
+ case 0x1C86:
+ return 0x044A; // [C] CYRILLIC SMALL LETTER TALL HARD SIGN
+ case 0x1C87:
+ return 0x0463; // [C] CYRILLIC SMALL LETTER TALL YAT
+ case 0x1C88:
+ return 0xA64B; // [C] CYRILLIC SMALL LETTER UNBLENDED UK
+ case 0x1C89:
+ return 0x1C8A; // [C] CYRILLIC CAPITAL LETTER TJE
+ case 0x1C90:
+ return 0x10D0; // [C] GEORGIAN MTAVRULI CAPITAL LETTER AN
+ case 0x1C91:
+ return 0x10D1; // [C] GEORGIAN MTAVRULI CAPITAL LETTER BAN
+ case 0x1C92:
+ return 0x10D2; // [C] GEORGIAN MTAVRULI CAPITAL LETTER GAN
+ case 0x1C93:
+ return 0x10D3; // [C] GEORGIAN MTAVRULI CAPITAL LETTER DON
+ case 0x1C94:
+ return 0x10D4; // [C] GEORGIAN MTAVRULI CAPITAL LETTER EN
+ case 0x1C95:
+ return 0x10D5; // [C] GEORGIAN MTAVRULI CAPITAL LETTER VIN
+ case 0x1C96:
+ return 0x10D6; // [C] GEORGIAN MTAVRULI CAPITAL LETTER ZEN
+ case 0x1C97:
+ return 0x10D7; // [C] GEORGIAN MTAVRULI CAPITAL LETTER TAN
+ case 0x1C98:
+ return 0x10D8; // [C] GEORGIAN MTAVRULI CAPITAL LETTER IN
+ case 0x1C99:
+ return 0x10D9; // [C] GEORGIAN MTAVRULI CAPITAL LETTER KAN
+ case 0x1C9A:
+ return 0x10DA; // [C] GEORGIAN MTAVRULI CAPITAL LETTER LAS
+ case 0x1C9B:
+ return 0x10DB; // [C] GEORGIAN MTAVRULI CAPITAL LETTER MAN
+ case 0x1C9C:
+ return 0x10DC; // [C] GEORGIAN MTAVRULI CAPITAL LETTER NAR
+ case 0x1C9D:
+ return 0x10DD; // [C] GEORGIAN MTAVRULI CAPITAL LETTER ON
+ case 0x1C9E:
+ return 0x10DE; // [C] GEORGIAN MTAVRULI CAPITAL LETTER PAR
+ case 0x1C9F:
+ return 0x10DF; // [C] GEORGIAN MTAVRULI CAPITAL LETTER ZHAR
+ case 0x1CA0:
+ return 0x10E0; // [C] GEORGIAN MTAVRULI CAPITAL LETTER RAE
+ case 0x1CA1:
+ return 0x10E1; // [C] GEORGIAN MTAVRULI CAPITAL LETTER SAN
+ case 0x1CA2:
+ return 0x10E2; // [C] GEORGIAN MTAVRULI CAPITAL LETTER TAR
+ case 0x1CA3:
+ return 0x10E3; // [C] GEORGIAN MTAVRULI CAPITAL LETTER UN
+ case 0x1CA4:
+ return 0x10E4; // [C] GEORGIAN MTAVRULI CAPITAL LETTER PHAR
+ case 0x1CA5:
+ return 0x10E5; // [C] GEORGIAN MTAVRULI CAPITAL LETTER KHAR
+ case 0x1CA6:
+ return 0x10E6; // [C] GEORGIAN MTAVRULI CAPITAL LETTER GHAN
+ case 0x1CA7:
+ return 0x10E7; // [C] GEORGIAN MTAVRULI CAPITAL LETTER QAR
+ case 0x1CA8:
+ return 0x10E8; // [C] GEORGIAN MTAVRULI CAPITAL LETTER SHIN
+ case 0x1CA9:
+ return 0x10E9; // [C] GEORGIAN MTAVRULI CAPITAL LETTER CHIN
+ case 0x1CAA:
+ return 0x10EA; // [C] GEORGIAN MTAVRULI CAPITAL LETTER CAN
+ case 0x1CAB:
+ return 0x10EB; // [C] GEORGIAN MTAVRULI CAPITAL LETTER JIL
+ case 0x1CAC:
+ return 0x10EC; // [C] GEORGIAN MTAVRULI CAPITAL LETTER CIL
+ case 0x1CAD:
+ return 0x10ED; // [C] GEORGIAN MTAVRULI CAPITAL LETTER CHAR
+ case 0x1CAE:
+ return 0x10EE; // [C] GEORGIAN MTAVRULI CAPITAL LETTER XAN
+ case 0x1CAF:
+ return 0x10EF; // [C] GEORGIAN MTAVRULI CAPITAL LETTER JHAN
+ case 0x1CB0:
+ return 0x10F0; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HAE
+ case 0x1CB1:
+ return 0x10F1; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HE
+ case 0x1CB2:
+ return 0x10F2; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HIE
+ case 0x1CB3:
+ return 0x10F3; // [C] GEORGIAN MTAVRULI CAPITAL LETTER WE
+ case 0x1CB4:
+ return 0x10F4; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HAR
+ case 0x1CB5:
+ return 0x10F5; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HOE
+ case 0x1CB6:
+ return 0x10F6; // [C] GEORGIAN MTAVRULI CAPITAL LETTER FI
+ case 0x1CB7:
+ return 0x10F7; // [C] GEORGIAN MTAVRULI CAPITAL LETTER YN
+ case 0x1CB8:
+ return 0x10F8; // [C] GEORGIAN MTAVRULI CAPITAL LETTER ELIFI
+ case 0x1CB9:
+ return 0x10F9; // [C] GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN
+ case 0x1CBA:
+ return 0x10FA; // [C] GEORGIAN MTAVRULI CAPITAL LETTER AIN
+ case 0x1CBD:
+ return 0x10FD; // [C] GEORGIAN MTAVRULI CAPITAL LETTER AEN
+ case 0x1CBE:
+ return 0x10FE; // [C] GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN
+ case 0x1CBF:
+ return 0x10FF; // [C] GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+ case 0x1E00:
+ return 0x1E01; // [C] LATIN CAPITAL LETTER A WITH RING BELOW
+ case 0x1E02:
+ return 0x1E03; // [C] LATIN CAPITAL LETTER B WITH DOT ABOVE
+ case 0x1E04:
+ return 0x1E05; // [C] LATIN CAPITAL LETTER B WITH DOT BELOW
+ case 0x1E06:
+ return 0x1E07; // [C] LATIN CAPITAL LETTER B WITH LINE BELOW
+ case 0x1E08:
+ return 0x1E09; // [C] LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+ case 0x1E0A:
+ return 0x1E0B; // [C] LATIN CAPITAL LETTER D WITH DOT ABOVE
+ case 0x1E0C:
+ return 0x1E0D; // [C] LATIN CAPITAL LETTER D WITH DOT BELOW
+ case 0x1E0E:
+ return 0x1E0F; // [C] LATIN CAPITAL LETTER D WITH LINE BELOW
+ case 0x1E10:
+ return 0x1E11; // [C] LATIN CAPITAL LETTER D WITH CEDILLA
+ case 0x1E12:
+ return 0x1E13; // [C] LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+ case 0x1E14:
+ return 0x1E15; // [C] LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+ case 0x1E16:
+ return 0x1E17; // [C] LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+ case 0x1E18:
+ return 0x1E19; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+ case 0x1E1A:
+ return 0x1E1B; // [C] LATIN CAPITAL LETTER E WITH TILDE BELOW
+ case 0x1E1C:
+ return 0x1E1D; // [C] LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+ case 0x1E1E:
+ return 0x1E1F; // [C] LATIN CAPITAL LETTER F WITH DOT ABOVE
+ case 0x1E20:
+ return 0x1E21; // [C] LATIN CAPITAL LETTER G WITH MACRON
+ case 0x1E22:
+ return 0x1E23; // [C] LATIN CAPITAL LETTER H WITH DOT ABOVE
+ case 0x1E24:
+ return 0x1E25; // [C] LATIN CAPITAL LETTER H WITH DOT BELOW
+ case 0x1E26:
+ return 0x1E27; // [C] LATIN CAPITAL LETTER H WITH DIAERESIS
+ case 0x1E28:
+ return 0x1E29; // [C] LATIN CAPITAL LETTER H WITH CEDILLA
+ case 0x1E2A:
+ return 0x1E2B; // [C] LATIN CAPITAL LETTER H WITH BREVE BELOW
+ case 0x1E2C:
+ return 0x1E2D; // [C] LATIN CAPITAL LETTER I WITH TILDE BELOW
+ case 0x1E2E:
+ return 0x1E2F; // [C] LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+ case 0x1E30:
+ return 0x1E31; // [C] LATIN CAPITAL LETTER K WITH ACUTE
+ case 0x1E32:
+ return 0x1E33; // [C] LATIN CAPITAL LETTER K WITH DOT BELOW
+ case 0x1E34:
+ return 0x1E35; // [C] LATIN CAPITAL LETTER K WITH LINE BELOW
+ case 0x1E36:
+ return 0x1E37; // [C] LATIN CAPITAL LETTER L WITH DOT BELOW
+ case 0x1E38:
+ return 0x1E39; // [C] LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+ case 0x1E3A:
+ return 0x1E3B; // [C] LATIN CAPITAL LETTER L WITH LINE BELOW
+ case 0x1E3C:
+ return 0x1E3D; // [C] LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+ case 0x1E3E:
+ return 0x1E3F; // [C] LATIN CAPITAL LETTER M WITH ACUTE
+ case 0x1E40:
+ return 0x1E41; // [C] LATIN CAPITAL LETTER M WITH DOT ABOVE
+ case 0x1E42:
+ return 0x1E43; // [C] LATIN CAPITAL LETTER M WITH DOT BELOW
+ case 0x1E44:
+ return 0x1E45; // [C] LATIN CAPITAL LETTER N WITH DOT ABOVE
+ case 0x1E46:
+ return 0x1E47; // [C] LATIN CAPITAL LETTER N WITH DOT BELOW
+ case 0x1E48:
+ return 0x1E49; // [C] LATIN CAPITAL LETTER N WITH LINE BELOW
+ case 0x1E4A:
+ return 0x1E4B; // [C] LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+ case 0x1E4C:
+ return 0x1E4D; // [C] LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+ case 0x1E4E:
+ return 0x1E4F; // [C] LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+ case 0x1E50:
+ return 0x1E51; // [C] LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+ case 0x1E52:
+ return 0x1E53; // [C] LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+ case 0x1E54:
+ return 0x1E55; // [C] LATIN CAPITAL LETTER P WITH ACUTE
+ case 0x1E56:
+ return 0x1E57; // [C] LATIN CAPITAL LETTER P WITH DOT ABOVE
+ case 0x1E58:
+ return 0x1E59; // [C] LATIN CAPITAL LETTER R WITH DOT ABOVE
+ case 0x1E5A:
+ return 0x1E5B; // [C] LATIN CAPITAL LETTER R WITH DOT BELOW
+ case 0x1E5C:
+ return 0x1E5D; // [C] LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+ case 0x1E5E:
+ return 0x1E5F; // [C] LATIN CAPITAL LETTER R WITH LINE BELOW
+ case 0x1E60:
+ return 0x1E61; // [C] LATIN CAPITAL LETTER S WITH DOT ABOVE
+ case 0x1E62:
+ return 0x1E63; // [C] LATIN CAPITAL LETTER S WITH DOT BELOW
+ case 0x1E64:
+ return 0x1E65; // [C] LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+ case 0x1E66:
+ return 0x1E67; // [C] LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+ case 0x1E68:
+ return 0x1E69; // [C] LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+ case 0x1E6A:
+ return 0x1E6B; // [C] LATIN CAPITAL LETTER T WITH DOT ABOVE
+ case 0x1E6C:
+ return 0x1E6D; // [C] LATIN CAPITAL LETTER T WITH DOT BELOW
+ case 0x1E6E:
+ return 0x1E6F; // [C] LATIN CAPITAL LETTER T WITH LINE BELOW
+ case 0x1E70:
+ return 0x1E71; // [C] LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+ case 0x1E72:
+ return 0x1E73; // [C] LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+ case 0x1E74:
+ return 0x1E75; // [C] LATIN CAPITAL LETTER U WITH TILDE BELOW
+ case 0x1E76:
+ return 0x1E77; // [C] LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+ case 0x1E78:
+ return 0x1E79; // [C] LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+ case 0x1E7A:
+ return 0x1E7B; // [C] LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+ case 0x1E7C:
+ return 0x1E7D; // [C] LATIN CAPITAL LETTER V WITH TILDE
+ case 0x1E7E:
+ return 0x1E7F; // [C] LATIN CAPITAL LETTER V WITH DOT BELOW
+ case 0x1E80:
+ return 0x1E81; // [C] LATIN CAPITAL LETTER W WITH GRAVE
+ case 0x1E82:
+ return 0x1E83; // [C] LATIN CAPITAL LETTER W WITH ACUTE
+ case 0x1E84:
+ return 0x1E85; // [C] LATIN CAPITAL LETTER W WITH DIAERESIS
+ case 0x1E86:
+ return 0x1E87; // [C] LATIN CAPITAL LETTER W WITH DOT ABOVE
+ case 0x1E88:
+ return 0x1E89; // [C] LATIN CAPITAL LETTER W WITH DOT BELOW
+ case 0x1E8A:
+ return 0x1E8B; // [C] LATIN CAPITAL LETTER X WITH DOT ABOVE
+ case 0x1E8C:
+ return 0x1E8D; // [C] LATIN CAPITAL LETTER X WITH DIAERESIS
+ case 0x1E8E:
+ return 0x1E8F; // [C] LATIN CAPITAL LETTER Y WITH DOT ABOVE
+ case 0x1E90:
+ return 0x1E91; // [C] LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ case 0x1E92:
+ return 0x1E93; // [C] LATIN CAPITAL LETTER Z WITH DOT BELOW
+ case 0x1E94:
+ return 0x1E95; // [C] LATIN CAPITAL LETTER Z WITH LINE BELOW
+ case 0x1E9B:
+ return 0x1E61; // [C] LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ case 0x1E9E:
+ return 0x00DF; // [S] LATIN CAPITAL LETTER SHARP S
+ case 0x1EA0:
+ return 0x1EA1; // [C] LATIN CAPITAL LETTER A WITH DOT BELOW
+ case 0x1EA2:
+ return 0x1EA3; // [C] LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ case 0x1EA4:
+ return 0x1EA5; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+ case 0x1EA6:
+ return 0x1EA7; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+ case 0x1EA8:
+ return 0x1EA9; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ case 0x1EAA:
+ return 0x1EAB; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+ case 0x1EAC:
+ return 0x1EAD; // [C] LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ case 0x1EAE:
+ return 0x1EAF; // [C] LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+ case 0x1EB0:
+ return 0x1EB1; // [C] LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+ case 0x1EB2:
+ return 0x1EB3; // [C] LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+ case 0x1EB4:
+ return 0x1EB5; // [C] LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+ case 0x1EB6:
+ return 0x1EB7; // [C] LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+ case 0x1EB8:
+ return 0x1EB9; // [C] LATIN CAPITAL LETTER E WITH DOT BELOW
+ case 0x1EBA:
+ return 0x1EBB; // [C] LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ case 0x1EBC:
+ return 0x1EBD; // [C] LATIN CAPITAL LETTER E WITH TILDE
+ case 0x1EBE:
+ return 0x1EBF; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+ case 0x1EC0:
+ return 0x1EC1; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+ case 0x1EC2:
+ return 0x1EC3; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ case 0x1EC4:
+ return 0x1EC5; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+ case 0x1EC6:
+ return 0x1EC7; // [C] LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ case 0x1EC8:
+ return 0x1EC9; // [C] LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ case 0x1ECA:
+ return 0x1ECB; // [C] LATIN CAPITAL LETTER I WITH DOT BELOW
+ case 0x1ECC:
+ return 0x1ECD; // [C] LATIN CAPITAL LETTER O WITH DOT BELOW
+ case 0x1ECE:
+ return 0x1ECF; // [C] LATIN CAPITAL LETTER O WITH HOOK ABOVE
+ case 0x1ED0:
+ return 0x1ED1; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+ case 0x1ED2:
+ return 0x1ED3; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+ case 0x1ED4:
+ return 0x1ED5; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ case 0x1ED6:
+ return 0x1ED7; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+ case 0x1ED8:
+ return 0x1ED9; // [C] LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ case 0x1EDA:
+ return 0x1EDB; // [C] LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+ case 0x1EDC:
+ return 0x1EDD; // [C] LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+ case 0x1EDE:
+ return 0x1EDF; // [C] LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+ case 0x1EE0:
+ return 0x1EE1; // [C] LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ case 0x1EE2:
+ return 0x1EE3; // [C] LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+ case 0x1EE4:
+ return 0x1EE5; // [C] LATIN CAPITAL LETTER U WITH DOT BELOW
+ case 0x1EE6:
+ return 0x1EE7; // [C] LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ case 0x1EE8:
+ return 0x1EE9; // [C] LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+ case 0x1EEA:
+ return 0x1EEB; // [C] LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+ case 0x1EEC:
+ return 0x1EED; // [C] LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+ case 0x1EEE:
+ return 0x1EEF; // [C] LATIN CAPITAL LETTER U WITH HORN AND TILDE
+ case 0x1EF0:
+ return 0x1EF1; // [C] LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+ case 0x1EF2:
+ return 0x1EF3; // [C] LATIN CAPITAL LETTER Y WITH GRAVE
+ case 0x1EF4:
+ return 0x1EF5; // [C] LATIN CAPITAL LETTER Y WITH DOT BELOW
+ case 0x1EF6:
+ return 0x1EF7; // [C] LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+ case 0x1EF8:
+ return 0x1EF9; // [C] LATIN CAPITAL LETTER Y WITH TILDE
+ case 0x1EFA:
+ return 0x1EFB; // [C] LATIN CAPITAL LETTER MIDDLE-WELSH LL
+ case 0x1EFC:
+ return 0x1EFD; // [C] LATIN CAPITAL LETTER MIDDLE-WELSH V
+ case 0x1EFE:
+ return 0x1EFF; // [C] LATIN CAPITAL LETTER Y WITH LOOP
+ case 0x1F08:
+ return 0x1F00; // [C] GREEK CAPITAL LETTER ALPHA WITH PSILI
+ case 0x1F09:
+ return 0x1F01; // [C] GREEK CAPITAL LETTER ALPHA WITH DASIA
+ case 0x1F0A:
+ return 0x1F02; // [C] GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+ case 0x1F0B:
+ return 0x1F03; // [C] GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+ case 0x1F0C:
+ return 0x1F04; // [C] GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+ case 0x1F0D:
+ return 0x1F05; // [C] GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+ case 0x1F0E:
+ return 0x1F06; // [C] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ case 0x1F0F:
+ return 0x1F07; // [C] GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ case 0x1F18:
+ return 0x1F10; // [C] GREEK CAPITAL LETTER EPSILON WITH PSILI
+ case 0x1F19:
+ return 0x1F11; // [C] GREEK CAPITAL LETTER EPSILON WITH DASIA
+ case 0x1F1A:
+ return 0x1F12; // [C] GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+ case 0x1F1B:
+ return 0x1F13; // [C] GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+ case 0x1F1C:
+ return 0x1F14; // [C] GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+ case 0x1F1D:
+ return 0x1F15; // [C] GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ case 0x1F28:
+ return 0x1F20; // [C] GREEK CAPITAL LETTER ETA WITH PSILI
+ case 0x1F29:
+ return 0x1F21; // [C] GREEK CAPITAL LETTER ETA WITH DASIA
+ case 0x1F2A:
+ return 0x1F22; // [C] GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+ case 0x1F2B:
+ return 0x1F23; // [C] GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+ case 0x1F2C:
+ return 0x1F24; // [C] GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+ case 0x1F2D:
+ return 0x1F25; // [C] GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+ case 0x1F2E:
+ return 0x1F26; // [C] GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+ case 0x1F2F:
+ return 0x1F27; // [C] GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ case 0x1F38:
+ return 0x1F30; // [C] GREEK CAPITAL LETTER IOTA WITH PSILI
+ case 0x1F39:
+ return 0x1F31; // [C] GREEK CAPITAL LETTER IOTA WITH DASIA
+ case 0x1F3A:
+ return 0x1F32; // [C] GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+ case 0x1F3B:
+ return 0x1F33; // [C] GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+ case 0x1F3C:
+ return 0x1F34; // [C] GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+ case 0x1F3D:
+ return 0x1F35; // [C] GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+ case 0x1F3E:
+ return 0x1F36; // [C] GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+ case 0x1F3F:
+ return 0x1F37; // [C] GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+ case 0x1F48:
+ return 0x1F40; // [C] GREEK CAPITAL LETTER OMICRON WITH PSILI
+ case 0x1F49:
+ return 0x1F41; // [C] GREEK CAPITAL LETTER OMICRON WITH DASIA
+ case 0x1F4A:
+ return 0x1F42; // [C] GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+ case 0x1F4B:
+ return 0x1F43; // [C] GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+ case 0x1F4C:
+ return 0x1F44; // [C] GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+ case 0x1F4D:
+ return 0x1F45; // [C] GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ case 0x1F59:
+ return 0x1F51; // [C] GREEK CAPITAL LETTER UPSILON WITH DASIA
+ case 0x1F5B:
+ return 0x1F53; // [C] GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ case 0x1F5D:
+ return 0x1F55; // [C] GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ case 0x1F5F:
+ return 0x1F57; // [C] GREEK CAPITAL LETTER UPSILON WITH DASIA AND
+ // PERISPOMENI
+ case 0x1F68:
+ return 0x1F60; // [C] GREEK CAPITAL LETTER OMEGA WITH PSILI
+ case 0x1F69:
+ return 0x1F61; // [C] GREEK CAPITAL LETTER OMEGA WITH DASIA
+ case 0x1F6A:
+ return 0x1F62; // [C] GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+ case 0x1F6B:
+ return 0x1F63; // [C] GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+ case 0x1F6C:
+ return 0x1F64; // [C] GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+ case 0x1F6D:
+ return 0x1F65; // [C] GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+ case 0x1F6E:
+ return 0x1F66; // [C] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ case 0x1F6F:
+ return 0x1F67; // [C] GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ case 0x1F88:
+ return 0x1F80; // [S] GREEK CAPITAL LETTER ALPHA WITH PSILI AND
+ // PROSGEGRAMMENI
+ case 0x1F89:
+ return 0x1F81; // [S] GREEK CAPITAL LETTER ALPHA WITH DASIA AND
+ // PROSGEGRAMMENI
+ case 0x1F8A:
+ return 0x1F82; // [S] GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1F8B:
+ return 0x1F83; // [S] GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1F8C:
+ return 0x1F84; // [S] GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1F8D:
+ return 0x1F85; // [S] GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1F8E:
+ return 0x1F86; // [S] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1F8F:
+ return 0x1F87; // [S] GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1F98:
+ return 0x1F90; // [S] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+ case 0x1F99:
+ return 0x1F91; // [S] GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+ case 0x1F9A:
+ return 0x1F92; // [S] GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1F9B:
+ return 0x1F93; // [S] GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1F9C:
+ return 0x1F94; // [S] GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1F9D:
+ return 0x1F95; // [S] GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1F9E:
+ return 0x1F96; // [S] GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1F9F:
+ return 0x1F97; // [S] GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1FA8:
+ return 0x1FA0; // [S] GREEK CAPITAL LETTER OMEGA WITH PSILI AND
+ // PROSGEGRAMMENI
+ case 0x1FA9:
+ return 0x1FA1; // [S] GREEK CAPITAL LETTER OMEGA WITH DASIA AND
+ // PROSGEGRAMMENI
+ case 0x1FAA:
+ return 0x1FA2; // [S] GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1FAB:
+ return 0x1FA3; // [S] GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND
+ // PROSGEGRAMMENI
+ case 0x1FAC:
+ return 0x1FA4; // [S] GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1FAD:
+ return 0x1FA5; // [S] GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND
+ // PROSGEGRAMMENI
+ case 0x1FAE:
+ return 0x1FA6; // [S] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1FAF:
+ return 0x1FA7; // [S] GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ // AND PROSGEGRAMMENI
+ case 0x1FB8:
+ return 0x1FB0; // [C] GREEK CAPITAL LETTER ALPHA WITH VRACHY
+ case 0x1FB9:
+ return 0x1FB1; // [C] GREEK CAPITAL LETTER ALPHA WITH MACRON
+ case 0x1FBA:
+ return 0x1F70; // [C] GREEK CAPITAL LETTER ALPHA WITH VARIA
+ case 0x1FBB:
+ return 0x1F71; // [C] GREEK CAPITAL LETTER ALPHA WITH OXIA
+ case 0x1FBC:
+ return 0x1FB3; // [S] GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ case 0x1FBE:
+ return 0x03B9; // [C] GREEK PROSGEGRAMMENI
+ case 0x1FC8:
+ return 0x1F72; // [C] GREEK CAPITAL LETTER EPSILON WITH VARIA
+ case 0x1FC9:
+ return 0x1F73; // [C] GREEK CAPITAL LETTER EPSILON WITH OXIA
+ case 0x1FCA:
+ return 0x1F74; // [C] GREEK CAPITAL LETTER ETA WITH VARIA
+ case 0x1FCB:
+ return 0x1F75; // [C] GREEK CAPITAL LETTER ETA WITH OXIA
+ case 0x1FCC:
+ return 0x1FC3; // [S] GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ case 0x1FD3:
+ return 0x0390; // [S] GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ case 0x1FD8:
+ return 0x1FD0; // [C] GREEK CAPITAL LETTER IOTA WITH VRACHY
+ case 0x1FD9:
+ return 0x1FD1; // [C] GREEK CAPITAL LETTER IOTA WITH MACRON
+ case 0x1FDA:
+ return 0x1F76; // [C] GREEK CAPITAL LETTER IOTA WITH VARIA
+ case 0x1FDB:
+ return 0x1F77; // [C] GREEK CAPITAL LETTER IOTA WITH OXIA
+ case 0x1FE3:
+ return 0x03B0; // [S] GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+ case 0x1FE8:
+ return 0x1FE0; // [C] GREEK CAPITAL LETTER UPSILON WITH VRACHY
+ case 0x1FE9:
+ return 0x1FE1; // [C] GREEK CAPITAL LETTER UPSILON WITH MACRON
+ case 0x1FEA:
+ return 0x1F7A; // [C] GREEK CAPITAL LETTER UPSILON WITH VARIA
+ case 0x1FEB:
+ return 0x1F7B; // [C] GREEK CAPITAL LETTER UPSILON WITH OXIA
+ case 0x1FEC:
+ return 0x1FE5; // [C] GREEK CAPITAL LETTER RHO WITH DASIA
+ case 0x1FF8:
+ return 0x1F78; // [C] GREEK CAPITAL LETTER OMICRON WITH VARIA
+ case 0x1FF9:
+ return 0x1F79; // [C] GREEK CAPITAL LETTER OMICRON WITH OXIA
+ case 0x1FFA:
+ return 0x1F7C; // [C] GREEK CAPITAL LETTER OMEGA WITH VARIA
+ case 0x1FFB:
+ return 0x1F7D; // [C] GREEK CAPITAL LETTER OMEGA WITH OXIA
+ case 0x1FFC:
+ return 0x1FF3; // [S] GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ case 0x2126:
+ return 0x03C9; // [C] OHM SIGN
+ case 0x212A:
+ return 0x006B; // [C] KELVIN SIGN
+ case 0x212B:
+ return 0x00E5; // [C] ANGSTROM SIGN
+ case 0x2132:
+ return 0x214E; // [C] TURNED CAPITAL F
+ case 0x2160:
+ return 0x2170; // [C] ROMAN NUMERAL ONE
+ case 0x2161:
+ return 0x2171; // [C] ROMAN NUMERAL TWO
+ case 0x2162:
+ return 0x2172; // [C] ROMAN NUMERAL THREE
+ case 0x2163:
+ return 0x2173; // [C] ROMAN NUMERAL FOUR
+ case 0x2164:
+ return 0x2174; // [C] ROMAN NUMERAL FIVE
+ case 0x2165:
+ return 0x2175; // [C] ROMAN NUMERAL SIX
+ case 0x2166:
+ return 0x2176; // [C] ROMAN NUMERAL SEVEN
+ case 0x2167:
+ return 0x2177; // [C] ROMAN NUMERAL EIGHT
+ case 0x2168:
+ return 0x2178; // [C] ROMAN NUMERAL NINE
+ case 0x2169:
+ return 0x2179; // [C] ROMAN NUMERAL TEN
+ case 0x216A:
+ return 0x217A; // [C] ROMAN NUMERAL ELEVEN
+ case 0x216B:
+ return 0x217B; // [C] ROMAN NUMERAL TWELVE
+ case 0x216C:
+ return 0x217C; // [C] ROMAN NUMERAL FIFTY
+ case 0x216D:
+ return 0x217D; // [C] ROMAN NUMERAL ONE HUNDRED
+ case 0x216E:
+ return 0x217E; // [C] ROMAN NUMERAL FIVE HUNDRED
+ case 0x216F:
+ return 0x217F; // [C] ROMAN NUMERAL ONE THOUSAND
+ case 0x2183:
+ return 0x2184; // [C] ROMAN NUMERAL REVERSED ONE HUNDRED
+ case 0x24B6:
+ return 0x24D0; // [C] CIRCLED LATIN CAPITAL LETTER A
+ case 0x24B7:
+ return 0x24D1; // [C] CIRCLED LATIN CAPITAL LETTER B
+ case 0x24B8:
+ return 0x24D2; // [C] CIRCLED LATIN CAPITAL LETTER C
+ case 0x24B9:
+ return 0x24D3; // [C] CIRCLED LATIN CAPITAL LETTER D
+ case 0x24BA:
+ return 0x24D4; // [C] CIRCLED LATIN CAPITAL LETTER E
+ case 0x24BB:
+ return 0x24D5; // [C] CIRCLED LATIN CAPITAL LETTER F
+ case 0x24BC:
+ return 0x24D6; // [C] CIRCLED LATIN CAPITAL LETTER G
+ case 0x24BD:
+ return 0x24D7; // [C] CIRCLED LATIN CAPITAL LETTER H
+ case 0x24BE:
+ return 0x24D8; // [C] CIRCLED LATIN CAPITAL LETTER I
+ case 0x24BF:
+ return 0x24D9; // [C] CIRCLED LATIN CAPITAL LETTER J
+ case 0x24C0:
+ return 0x24DA; // [C] CIRCLED LATIN CAPITAL LETTER K
+ case 0x24C1:
+ return 0x24DB; // [C] CIRCLED LATIN CAPITAL LETTER L
+ case 0x24C2:
+ return 0x24DC; // [C] CIRCLED LATIN CAPITAL LETTER M
+ case 0x24C3:
+ return 0x24DD; // [C] CIRCLED LATIN CAPITAL LETTER N
+ case 0x24C4:
+ return 0x24DE; // [C] CIRCLED LATIN CAPITAL LETTER O
+ case 0x24C5:
+ return 0x24DF; // [C] CIRCLED LATIN CAPITAL LETTER P
+ case 0x24C6:
+ return 0x24E0; // [C] CIRCLED LATIN CAPITAL LETTER Q
+ case 0x24C7:
+ return 0x24E1; // [C] CIRCLED LATIN CAPITAL LETTER R
+ case 0x24C8:
+ return 0x24E2; // [C] CIRCLED LATIN CAPITAL LETTER S
+ case 0x24C9:
+ return 0x24E3; // [C] CIRCLED LATIN CAPITAL LETTER T
+ case 0x24CA:
+ return 0x24E4; // [C] CIRCLED LATIN CAPITAL LETTER U
+ case 0x24CB:
+ return 0x24E5; // [C] CIRCLED LATIN CAPITAL LETTER V
+ case 0x24CC:
+ return 0x24E6; // [C] CIRCLED LATIN CAPITAL LETTER W
+ case 0x24CD:
+ return 0x24E7; // [C] CIRCLED LATIN CAPITAL LETTER X
+ case 0x24CE:
+ return 0x24E8; // [C] CIRCLED LATIN CAPITAL LETTER Y
+ case 0x24CF:
+ return 0x24E9; // [C] CIRCLED LATIN CAPITAL LETTER Z
+ case 0x2C00:
+ return 0x2C30; // [C] GLAGOLITIC CAPITAL LETTER AZU
+ case 0x2C01:
+ return 0x2C31; // [C] GLAGOLITIC CAPITAL LETTER BUKY
+ case 0x2C02:
+ return 0x2C32; // [C] GLAGOLITIC CAPITAL LETTER VEDE
+ case 0x2C03:
+ return 0x2C33; // [C] GLAGOLITIC CAPITAL LETTER GLAGOLI
+ case 0x2C04:
+ return 0x2C34; // [C] GLAGOLITIC CAPITAL LETTER DOBRO
+ case 0x2C05:
+ return 0x2C35; // [C] GLAGOLITIC CAPITAL LETTER YESTU
+ case 0x2C06:
+ return 0x2C36; // [C] GLAGOLITIC CAPITAL LETTER ZHIVETE
+ case 0x2C07:
+ return 0x2C37; // [C] GLAGOLITIC CAPITAL LETTER DZELO
+ case 0x2C08:
+ return 0x2C38; // [C] GLAGOLITIC CAPITAL LETTER ZEMLJA
+ case 0x2C09:
+ return 0x2C39; // [C] GLAGOLITIC CAPITAL LETTER IZHE
+ case 0x2C0A:
+ return 0x2C3A; // [C] GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+ case 0x2C0B:
+ return 0x2C3B; // [C] GLAGOLITIC CAPITAL LETTER I
+ case 0x2C0C:
+ return 0x2C3C; // [C] GLAGOLITIC CAPITAL LETTER DJERVI
+ case 0x2C0D:
+ return 0x2C3D; // [C] GLAGOLITIC CAPITAL LETTER KAKO
+ case 0x2C0E:
+ return 0x2C3E; // [C] GLAGOLITIC CAPITAL LETTER LJUDIJE
+ case 0x2C0F:
+ return 0x2C3F; // [C] GLAGOLITIC CAPITAL LETTER MYSLITE
+ case 0x2C10:
+ return 0x2C40; // [C] GLAGOLITIC CAPITAL LETTER NASHI
+ case 0x2C11:
+ return 0x2C41; // [C] GLAGOLITIC CAPITAL LETTER ONU
+ case 0x2C12:
+ return 0x2C42; // [C] GLAGOLITIC CAPITAL LETTER POKOJI
+ case 0x2C13:
+ return 0x2C43; // [C] GLAGOLITIC CAPITAL LETTER RITSI
+ case 0x2C14:
+ return 0x2C44; // [C] GLAGOLITIC CAPITAL LETTER SLOVO
+ case 0x2C15:
+ return 0x2C45; // [C] GLAGOLITIC CAPITAL LETTER TVRIDO
+ case 0x2C16:
+ return 0x2C46; // [C] GLAGOLITIC CAPITAL LETTER UKU
+ case 0x2C17:
+ return 0x2C47; // [C] GLAGOLITIC CAPITAL LETTER FRITU
+ case 0x2C18:
+ return 0x2C48; // [C] GLAGOLITIC CAPITAL LETTER HERU
+ case 0x2C19:
+ return 0x2C49; // [C] GLAGOLITIC CAPITAL LETTER OTU
+ case 0x2C1A:
+ return 0x2C4A; // [C] GLAGOLITIC CAPITAL LETTER PE
+ case 0x2C1B:
+ return 0x2C4B; // [C] GLAGOLITIC CAPITAL LETTER SHTA
+ case 0x2C1C:
+ return 0x2C4C; // [C] GLAGOLITIC CAPITAL LETTER TSI
+ case 0x2C1D:
+ return 0x2C4D; // [C] GLAGOLITIC CAPITAL LETTER CHRIVI
+ case 0x2C1E:
+ return 0x2C4E; // [C] GLAGOLITIC CAPITAL LETTER SHA
+ case 0x2C1F:
+ return 0x2C4F; // [C] GLAGOLITIC CAPITAL LETTER YERU
+ case 0x2C20:
+ return 0x2C50; // [C] GLAGOLITIC CAPITAL LETTER YERI
+ case 0x2C21:
+ return 0x2C51; // [C] GLAGOLITIC CAPITAL LETTER YATI
+ case 0x2C22:
+ return 0x2C52; // [C] GLAGOLITIC CAPITAL LETTER SPIDERY HA
+ case 0x2C23:
+ return 0x2C53; // [C] GLAGOLITIC CAPITAL LETTER YU
+ case 0x2C24:
+ return 0x2C54; // [C] GLAGOLITIC CAPITAL LETTER SMALL YUS
+ case 0x2C25:
+ return 0x2C55; // [C] GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+ case 0x2C26:
+ return 0x2C56; // [C] GLAGOLITIC CAPITAL LETTER YO
+ case 0x2C27:
+ return 0x2C57; // [C] GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+ case 0x2C28:
+ return 0x2C58; // [C] GLAGOLITIC CAPITAL LETTER BIG YUS
+ case 0x2C29:
+ return 0x2C59; // [C] GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+ case 0x2C2A:
+ return 0x2C5A; // [C] GLAGOLITIC CAPITAL LETTER FITA
+ case 0x2C2B:
+ return 0x2C5B; // [C] GLAGOLITIC CAPITAL LETTER IZHITSA
+ case 0x2C2C:
+ return 0x2C5C; // [C] GLAGOLITIC CAPITAL LETTER SHTAPIC
+ case 0x2C2D:
+ return 0x2C5D; // [C] GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+ case 0x2C2E:
+ return 0x2C5E; // [C] GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+ case 0x2C2F:
+ return 0x2C5F; // [C] GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+ case 0x2C60:
+ return 0x2C61; // [C] LATIN CAPITAL LETTER L WITH DOUBLE BAR
+ case 0x2C62:
+ return 0x026B; // [C] LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+ case 0x2C63:
+ return 0x1D7D; // [C] LATIN CAPITAL LETTER P WITH STROKE
+ case 0x2C64:
+ return 0x027D; // [C] LATIN CAPITAL LETTER R WITH TAIL
+ case 0x2C67:
+ return 0x2C68; // [C] LATIN CAPITAL LETTER H WITH DESCENDER
+ case 0x2C69:
+ return 0x2C6A; // [C] LATIN CAPITAL LETTER K WITH DESCENDER
+ case 0x2C6B:
+ return 0x2C6C; // [C] LATIN CAPITAL LETTER Z WITH DESCENDER
+ case 0x2C6D:
+ return 0x0251; // [C] LATIN CAPITAL LETTER ALPHA
+ case 0x2C6E:
+ return 0x0271; // [C] LATIN CAPITAL LETTER M WITH HOOK
+ case 0x2C6F:
+ return 0x0250; // [C] LATIN CAPITAL LETTER TURNED A
+ case 0x2C70:
+ return 0x0252; // [C] LATIN CAPITAL LETTER TURNED ALPHA
+ case 0x2C72:
+ return 0x2C73; // [C] LATIN CAPITAL LETTER W WITH HOOK
+ case 0x2C75:
+ return 0x2C76; // [C] LATIN CAPITAL LETTER HALF H
+ case 0x2C7E:
+ return 0x023F; // [C] LATIN CAPITAL LETTER S WITH SWASH TAIL
+ case 0x2C7F:
+ return 0x0240; // [C] LATIN CAPITAL LETTER Z WITH SWASH TAIL
+ case 0x2C80:
+ return 0x2C81; // [C] COPTIC CAPITAL LETTER ALFA
+ case 0x2C82:
+ return 0x2C83; // [C] COPTIC CAPITAL LETTER VIDA
+ case 0x2C84:
+ return 0x2C85; // [C] COPTIC CAPITAL LETTER GAMMA
+ case 0x2C86:
+ return 0x2C87; // [C] COPTIC CAPITAL LETTER DALDA
+ case 0x2C88:
+ return 0x2C89; // [C] COPTIC CAPITAL LETTER EIE
+ case 0x2C8A:
+ return 0x2C8B; // [C] COPTIC CAPITAL LETTER SOU
+ case 0x2C8C:
+ return 0x2C8D; // [C] COPTIC CAPITAL LETTER ZATA
+ case 0x2C8E:
+ return 0x2C8F; // [C] COPTIC CAPITAL LETTER HATE
+ case 0x2C90:
+ return 0x2C91; // [C] COPTIC CAPITAL LETTER THETHE
+ case 0x2C92:
+ return 0x2C93; // [C] COPTIC CAPITAL LETTER IAUDA
+ case 0x2C94:
+ return 0x2C95; // [C] COPTIC CAPITAL LETTER KAPA
+ case 0x2C96:
+ return 0x2C97; // [C] COPTIC CAPITAL LETTER LAULA
+ case 0x2C98:
+ return 0x2C99; // [C] COPTIC CAPITAL LETTER MI
+ case 0x2C9A:
+ return 0x2C9B; // [C] COPTIC CAPITAL LETTER NI
+ case 0x2C9C:
+ return 0x2C9D; // [C] COPTIC CAPITAL LETTER KSI
+ case 0x2C9E:
+ return 0x2C9F; // [C] COPTIC CAPITAL LETTER O
+ case 0x2CA0:
+ return 0x2CA1; // [C] COPTIC CAPITAL LETTER PI
+ case 0x2CA2:
+ return 0x2CA3; // [C] COPTIC CAPITAL LETTER RO
+ case 0x2CA4:
+ return 0x2CA5; // [C] COPTIC CAPITAL LETTER SIMA
+ case 0x2CA6:
+ return 0x2CA7; // [C] COPTIC CAPITAL LETTER TAU
+ case 0x2CA8:
+ return 0x2CA9; // [C] COPTIC CAPITAL LETTER UA
+ case 0x2CAA:
+ return 0x2CAB; // [C] COPTIC CAPITAL LETTER FI
+ case 0x2CAC:
+ return 0x2CAD; // [C] COPTIC CAPITAL LETTER KHI
+ case 0x2CAE:
+ return 0x2CAF; // [C] COPTIC CAPITAL LETTER PSI
+ case 0x2CB0:
+ return 0x2CB1; // [C] COPTIC CAPITAL LETTER OOU
+ case 0x2CB2:
+ return 0x2CB3; // [C] COPTIC CAPITAL LETTER DIALECT-P ALEF
+ case 0x2CB4:
+ return 0x2CB5; // [C] COPTIC CAPITAL LETTER OLD COPTIC AIN
+ case 0x2CB6:
+ return 0x2CB7; // [C] COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+ case 0x2CB8:
+ return 0x2CB9; // [C] COPTIC CAPITAL LETTER DIALECT-P KAPA
+ case 0x2CBA:
+ return 0x2CBB; // [C] COPTIC CAPITAL LETTER DIALECT-P NI
+ case 0x2CBC:
+ return 0x2CBD; // [C] COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+ case 0x2CBE:
+ return 0x2CBF; // [C] COPTIC CAPITAL LETTER OLD COPTIC OOU
+ case 0x2CC0:
+ return 0x2CC1; // [C] COPTIC CAPITAL LETTER SAMPI
+ case 0x2CC2:
+ return 0x2CC3; // [C] COPTIC CAPITAL LETTER CROSSED SHEI
+ case 0x2CC4:
+ return 0x2CC5; // [C] COPTIC CAPITAL LETTER OLD COPTIC SHEI
+ case 0x2CC6:
+ return 0x2CC7; // [C] COPTIC CAPITAL LETTER OLD COPTIC ESH
+ case 0x2CC8:
+ return 0x2CC9; // [C] COPTIC CAPITAL LETTER AKHMIMIC KHEI
+ case 0x2CCA:
+ return 0x2CCB; // [C] COPTIC CAPITAL LETTER DIALECT-P HORI
+ case 0x2CCC:
+ return 0x2CCD; // [C] COPTIC CAPITAL LETTER OLD COPTIC HORI
+ case 0x2CCE:
+ return 0x2CCF; // [C] COPTIC CAPITAL LETTER OLD COPTIC HA
+ case 0x2CD0:
+ return 0x2CD1; // [C] COPTIC CAPITAL LETTER L-SHAPED HA
+ case 0x2CD2:
+ return 0x2CD3; // [C] COPTIC CAPITAL LETTER OLD COPTIC HEI
+ case 0x2CD4:
+ return 0x2CD5; // [C] COPTIC CAPITAL LETTER OLD COPTIC HAT
+ case 0x2CD6:
+ return 0x2CD7; // [C] COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+ case 0x2CD8:
+ return 0x2CD9; // [C] COPTIC CAPITAL LETTER OLD COPTIC DJA
+ case 0x2CDA:
+ return 0x2CDB; // [C] COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+ case 0x2CDC:
+ return 0x2CDD; // [C] COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+ case 0x2CDE:
+ return 0x2CDF; // [C] COPTIC CAPITAL LETTER OLD NUBIAN NGI
+ case 0x2CE0:
+ return 0x2CE1; // [C] COPTIC CAPITAL LETTER OLD NUBIAN NYI
+ case 0x2CE2:
+ return 0x2CE3; // [C] COPTIC CAPITAL LETTER OLD NUBIAN WAU
+ case 0x2CEB:
+ return 0x2CEC; // [C] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+ case 0x2CED:
+ return 0x2CEE; // [C] COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+ case 0x2CF2:
+ return 0x2CF3; // [C] COPTIC CAPITAL LETTER BOHAIRIC KHEI
+ case 0xA640:
+ return 0xA641; // [C] CYRILLIC CAPITAL LETTER ZEMLYA
+ case 0xA642:
+ return 0xA643; // [C] CYRILLIC CAPITAL LETTER DZELO
+ case 0xA644:
+ return 0xA645; // [C] CYRILLIC CAPITAL LETTER REVERSED DZE
+ case 0xA646:
+ return 0xA647; // [C] CYRILLIC CAPITAL LETTER IOTA
+ case 0xA648:
+ return 0xA649; // [C] CYRILLIC CAPITAL LETTER DJERV
+ case 0xA64A:
+ return 0xA64B; // [C] CYRILLIC CAPITAL LETTER MONOGRAPH UK
+ case 0xA64C:
+ return 0xA64D; // [C] CYRILLIC CAPITAL LETTER BROAD OMEGA
+ case 0xA64E:
+ return 0xA64F; // [C] CYRILLIC CAPITAL LETTER NEUTRAL YER
+ case 0xA650:
+ return 0xA651; // [C] CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+ case 0xA652:
+ return 0xA653; // [C] CYRILLIC CAPITAL LETTER IOTIFIED YAT
+ case 0xA654:
+ return 0xA655; // [C] CYRILLIC CAPITAL LETTER REVERSED YU
+ case 0xA656:
+ return 0xA657; // [C] CYRILLIC CAPITAL LETTER IOTIFIED A
+ case 0xA658:
+ return 0xA659; // [C] CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+ case 0xA65A:
+ return 0xA65B; // [C] CYRILLIC CAPITAL LETTER BLENDED YUS
+ case 0xA65C:
+ return 0xA65D; // [C] CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+ case 0xA65E:
+ return 0xA65F; // [C] CYRILLIC CAPITAL LETTER YN
+ case 0xA660:
+ return 0xA661; // [C] CYRILLIC CAPITAL LETTER REVERSED TSE
+ case 0xA662:
+ return 0xA663; // [C] CYRILLIC CAPITAL LETTER SOFT DE
+ case 0xA664:
+ return 0xA665; // [C] CYRILLIC CAPITAL LETTER SOFT EL
+ case 0xA666:
+ return 0xA667; // [C] CYRILLIC CAPITAL LETTER SOFT EM
+ case 0xA668:
+ return 0xA669; // [C] CYRILLIC CAPITAL LETTER MONOCULAR O
+ case 0xA66A:
+ return 0xA66B; // [C] CYRILLIC CAPITAL LETTER BINOCULAR O
+ case 0xA66C:
+ return 0xA66D; // [C] CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+ case 0xA680:
+ return 0xA681; // [C] CYRILLIC CAPITAL LETTER DWE
+ case 0xA682:
+ return 0xA683; // [C] CYRILLIC CAPITAL LETTER DZWE
+ case 0xA684:
+ return 0xA685; // [C] CYRILLIC CAPITAL LETTER ZHWE
+ case 0xA686:
+ return 0xA687; // [C] CYRILLIC CAPITAL LETTER CCHE
+ case 0xA688:
+ return 0xA689; // [C] CYRILLIC CAPITAL LETTER DZZE
+ case 0xA68A:
+ return 0xA68B; // [C] CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+ case 0xA68C:
+ return 0xA68D; // [C] CYRILLIC CAPITAL LETTER TWE
+ case 0xA68E:
+ return 0xA68F; // [C] CYRILLIC CAPITAL LETTER TSWE
+ case 0xA690:
+ return 0xA691; // [C] CYRILLIC CAPITAL LETTER TSSE
+ case 0xA692:
+ return 0xA693; // [C] CYRILLIC CAPITAL LETTER TCHE
+ case 0xA694:
+ return 0xA695; // [C] CYRILLIC CAPITAL LETTER HWE
+ case 0xA696:
+ return 0xA697; // [C] CYRILLIC CAPITAL LETTER SHWE
+ case 0xA698:
+ return 0xA699; // [C] CYRILLIC CAPITAL LETTER DOUBLE O
+ case 0xA69A:
+ return 0xA69B; // [C] CYRILLIC CAPITAL LETTER CROSSED O
+ case 0xA722:
+ return 0xA723; // [C] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+ case 0xA724:
+ return 0xA725; // [C] LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+ case 0xA726:
+ return 0xA727; // [C] LATIN CAPITAL LETTER HENG
+ case 0xA728:
+ return 0xA729; // [C] LATIN CAPITAL LETTER TZ
+ case 0xA72A:
+ return 0xA72B; // [C] LATIN CAPITAL LETTER TRESILLO
+ case 0xA72C:
+ return 0xA72D; // [C] LATIN CAPITAL LETTER CUATRILLO
+ case 0xA72E:
+ return 0xA72F; // [C] LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+ case 0xA732:
+ return 0xA733; // [C] LATIN CAPITAL LETTER AA
+ case 0xA734:
+ return 0xA735; // [C] LATIN CAPITAL LETTER AO
+ case 0xA736:
+ return 0xA737; // [C] LATIN CAPITAL LETTER AU
+ case 0xA738:
+ return 0xA739; // [C] LATIN CAPITAL LETTER AV
+ case 0xA73A:
+ return 0xA73B; // [C] LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+ case 0xA73C:
+ return 0xA73D; // [C] LATIN CAPITAL LETTER AY
+ case 0xA73E:
+ return 0xA73F; // [C] LATIN CAPITAL LETTER REVERSED C WITH DOT
+ case 0xA740:
+ return 0xA741; // [C] LATIN CAPITAL LETTER K WITH STROKE
+ case 0xA742:
+ return 0xA743; // [C] LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+ case 0xA744:
+ return 0xA745; // [C] LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+ case 0xA746:
+ return 0xA747; // [C] LATIN CAPITAL LETTER BROKEN L
+ case 0xA748:
+ return 0xA749; // [C] LATIN CAPITAL LETTER L WITH HIGH STROKE
+ case 0xA74A:
+ return 0xA74B; // [C] LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+ case 0xA74C:
+ return 0xA74D; // [C] LATIN CAPITAL LETTER O WITH LOOP
+ case 0xA74E:
+ return 0xA74F; // [C] LATIN CAPITAL LETTER OO
+ case 0xA750:
+ return 0xA751; // [C] LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+ case 0xA752:
+ return 0xA753; // [C] LATIN CAPITAL LETTER P WITH FLOURISH
+ case 0xA754:
+ return 0xA755; // [C] LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+ case 0xA756:
+ return 0xA757; // [C] LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+ case 0xA758:
+ return 0xA759; // [C] LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+ case 0xA75A:
+ return 0xA75B; // [C] LATIN CAPITAL LETTER R ROTUNDA
+ case 0xA75C:
+ return 0xA75D; // [C] LATIN CAPITAL LETTER RUM ROTUNDA
+ case 0xA75E:
+ return 0xA75F; // [C] LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+ case 0xA760:
+ return 0xA761; // [C] LATIN CAPITAL LETTER VY
+ case 0xA762:
+ return 0xA763; // [C] LATIN CAPITAL LETTER VISIGOTHIC Z
+ case 0xA764:
+ return 0xA765; // [C] LATIN CAPITAL LETTER THORN WITH STROKE
+ case 0xA766:
+ return 0xA767; // [C] LATIN CAPITAL LETTER THORN WITH STROKE THROUGH
+ // DESCENDER
+ case 0xA768:
+ return 0xA769; // [C] LATIN CAPITAL LETTER VEND
+ case 0xA76A:
+ return 0xA76B; // [C] LATIN CAPITAL LETTER ET
+ case 0xA76C:
+ return 0xA76D; // [C] LATIN CAPITAL LETTER IS
+ case 0xA76E:
+ return 0xA76F; // [C] LATIN CAPITAL LETTER CON
+ case 0xA779:
+ return 0xA77A; // [C] LATIN CAPITAL LETTER INSULAR D
+ case 0xA77B:
+ return 0xA77C; // [C] LATIN CAPITAL LETTER INSULAR F
+ case 0xA77D:
+ return 0x1D79; // [C] LATIN CAPITAL LETTER INSULAR G
+ case 0xA77E:
+ return 0xA77F; // [C] LATIN CAPITAL LETTER TURNED INSULAR G
+ case 0xA780:
+ return 0xA781; // [C] LATIN CAPITAL LETTER TURNED L
+ case 0xA782:
+ return 0xA783; // [C] LATIN CAPITAL LETTER INSULAR R
+ case 0xA784:
+ return 0xA785; // [C] LATIN CAPITAL LETTER INSULAR S
+ case 0xA786:
+ return 0xA787; // [C] LATIN CAPITAL LETTER INSULAR T
+ case 0xA78B:
+ return 0xA78C; // [C] LATIN CAPITAL LETTER SALTILLO
+ case 0xA78D:
+ return 0x0265; // [C] LATIN CAPITAL LETTER TURNED H
+ case 0xA790:
+ return 0xA791; // [C] LATIN CAPITAL LETTER N WITH DESCENDER
+ case 0xA792:
+ return 0xA793; // [C] LATIN CAPITAL LETTER C WITH BAR
+ case 0xA796:
+ return 0xA797; // [C] LATIN CAPITAL LETTER B WITH FLOURISH
+ case 0xA798:
+ return 0xA799; // [C] LATIN CAPITAL LETTER F WITH STROKE
+ case 0xA79A:
+ return 0xA79B; // [C] LATIN CAPITAL LETTER VOLAPUK AE
+ case 0xA79C:
+ return 0xA79D; // [C] LATIN CAPITAL LETTER VOLAPUK OE
+ case 0xA79E:
+ return 0xA79F; // [C] LATIN CAPITAL LETTER VOLAPUK UE
+ case 0xA7A0:
+ return 0xA7A1; // [C] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+ case 0xA7A2:
+ return 0xA7A3; // [C] LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+ case 0xA7A4:
+ return 0xA7A5; // [C] LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+ case 0xA7A6:
+ return 0xA7A7; // [C] LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+ case 0xA7A8:
+ return 0xA7A9; // [C] LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+ case 0xA7AA:
+ return 0x0266; // [C] LATIN CAPITAL LETTER H WITH HOOK
+ case 0xA7AB:
+ return 0x025C; // [C] LATIN CAPITAL LETTER REVERSED OPEN E
+ case 0xA7AC:
+ return 0x0261; // [C] LATIN CAPITAL LETTER SCRIPT G
+ case 0xA7AD:
+ return 0x026C; // [C] LATIN CAPITAL LETTER L WITH BELT
+ case 0xA7AE:
+ return 0x026A; // [C] LATIN CAPITAL LETTER SMALL CAPITAL I
+ case 0xA7B0:
+ return 0x029E; // [C] LATIN CAPITAL LETTER TURNED K
+ case 0xA7B1:
+ return 0x0287; // [C] LATIN CAPITAL LETTER TURNED T
+ case 0xA7B2:
+ return 0x029D; // [C] LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+ case 0xA7B3:
+ return 0xAB53; // [C] LATIN CAPITAL LETTER CHI
+ case 0xA7B4:
+ return 0xA7B5; // [C] LATIN CAPITAL LETTER BETA
+ case 0xA7B6:
+ return 0xA7B7; // [C] LATIN CAPITAL LETTER OMEGA
+ case 0xA7B8:
+ return 0xA7B9; // [C] LATIN CAPITAL LETTER U WITH STROKE
+ case 0xA7BA:
+ return 0xA7BB; // [C] LATIN CAPITAL LETTER GLOTTAL A
+ case 0xA7BC:
+ return 0xA7BD; // [C] LATIN CAPITAL LETTER GLOTTAL I
+ case 0xA7BE:
+ return 0xA7BF; // [C] LATIN CAPITAL LETTER GLOTTAL U
+ case 0xA7C0:
+ return 0xA7C1; // [C] LATIN CAPITAL LETTER OLD POLISH O
+ case 0xA7C2:
+ return 0xA7C3; // [C] LATIN CAPITAL LETTER ANGLICANA W
+ case 0xA7C4:
+ return 0xA794; // [C] LATIN CAPITAL LETTER C WITH PALATAL HOOK
+ case 0xA7C5:
+ return 0x0282; // [C] LATIN CAPITAL LETTER S WITH HOOK
+ case 0xA7C6:
+ return 0x1D8E; // [C] LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+ case 0xA7C7:
+ return 0xA7C8; // [C] LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+ case 0xA7C9:
+ return 0xA7CA; // [C] LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+ case 0xA7CB:
+ return 0x0264; // [C] LATIN CAPITAL LETTER RAMS HORN
+ case 0xA7CC:
+ return 0xA7CD; // [C] LATIN CAPITAL LETTER S WITH DIAGONAL STROKE
+ case 0xA7D0:
+ return 0xA7D1; // [C] LATIN CAPITAL LETTER CLOSED INSULAR G
+ case 0xA7D6:
+ return 0xA7D7; // [C] LATIN CAPITAL LETTER MIDDLE SCOTS S
+ case 0xA7D8:
+ return 0xA7D9; // [C] LATIN CAPITAL LETTER SIGMOID S
+ case 0xA7DA:
+ return 0xA7DB; // [C] LATIN CAPITAL LETTER LAMBDA
+ case 0xA7DC:
+ return 0x019B; // [C] LATIN CAPITAL LETTER LAMBDA WITH STROKE
+ case 0xA7F5:
+ return 0xA7F6; // [C] LATIN CAPITAL LETTER REVERSED HALF H
+ case 0xAB70:
+ return 0x13A0; // [C] CHEROKEE SMALL LETTER A
+ case 0xAB71:
+ return 0x13A1; // [C] CHEROKEE SMALL LETTER E
+ case 0xAB72:
+ return 0x13A2; // [C] CHEROKEE SMALL LETTER I
+ case 0xAB73:
+ return 0x13A3; // [C] CHEROKEE SMALL LETTER O
+ case 0xAB74:
+ return 0x13A4; // [C] CHEROKEE SMALL LETTER U
+ case 0xAB75:
+ return 0x13A5; // [C] CHEROKEE SMALL LETTER V
+ case 0xAB76:
+ return 0x13A6; // [C] CHEROKEE SMALL LETTER GA
+ case 0xAB77:
+ return 0x13A7; // [C] CHEROKEE SMALL LETTER KA
+ case 0xAB78:
+ return 0x13A8; // [C] CHEROKEE SMALL LETTER GE
+ case 0xAB79:
+ return 0x13A9; // [C] CHEROKEE SMALL LETTER GI
+ case 0xAB7A:
+ return 0x13AA; // [C] CHEROKEE SMALL LETTER GO
+ case 0xAB7B:
+ return 0x13AB; // [C] CHEROKEE SMALL LETTER GU
+ case 0xAB7C:
+ return 0x13AC; // [C] CHEROKEE SMALL LETTER GV
+ case 0xAB7D:
+ return 0x13AD; // [C] CHEROKEE SMALL LETTER HA
+ case 0xAB7E:
+ return 0x13AE; // [C] CHEROKEE SMALL LETTER HE
+ case 0xAB7F:
+ return 0x13AF; // [C] CHEROKEE SMALL LETTER HI
+ case 0xAB80:
+ return 0x13B0; // [C] CHEROKEE SMALL LETTER HO
+ case 0xAB81:
+ return 0x13B1; // [C] CHEROKEE SMALL LETTER HU
+ case 0xAB82:
+ return 0x13B2; // [C] CHEROKEE SMALL LETTER HV
+ case 0xAB83:
+ return 0x13B3; // [C] CHEROKEE SMALL LETTER LA
+ case 0xAB84:
+ return 0x13B4; // [C] CHEROKEE SMALL LETTER LE
+ case 0xAB85:
+ return 0x13B5; // [C] CHEROKEE SMALL LETTER LI
+ case 0xAB86:
+ return 0x13B6; // [C] CHEROKEE SMALL LETTER LO
+ case 0xAB87:
+ return 0x13B7; // [C] CHEROKEE SMALL LETTER LU
+ case 0xAB88:
+ return 0x13B8; // [C] CHEROKEE SMALL LETTER LV
+ case 0xAB89:
+ return 0x13B9; // [C] CHEROKEE SMALL LETTER MA
+ case 0xAB8A:
+ return 0x13BA; // [C] CHEROKEE SMALL LETTER ME
+ case 0xAB8B:
+ return 0x13BB; // [C] CHEROKEE SMALL LETTER MI
+ case 0xAB8C:
+ return 0x13BC; // [C] CHEROKEE SMALL LETTER MO
+ case 0xAB8D:
+ return 0x13BD; // [C] CHEROKEE SMALL LETTER MU
+ case 0xAB8E:
+ return 0x13BE; // [C] CHEROKEE SMALL LETTER NA
+ case 0xAB8F:
+ return 0x13BF; // [C] CHEROKEE SMALL LETTER HNA
+ case 0xAB90:
+ return 0x13C0; // [C] CHEROKEE SMALL LETTER NAH
+ case 0xAB91:
+ return 0x13C1; // [C] CHEROKEE SMALL LETTER NE
+ case 0xAB92:
+ return 0x13C2; // [C] CHEROKEE SMALL LETTER NI
+ case 0xAB93:
+ return 0x13C3; // [C] CHEROKEE SMALL LETTER NO
+ case 0xAB94:
+ return 0x13C4; // [C] CHEROKEE SMALL LETTER NU
+ case 0xAB95:
+ return 0x13C5; // [C] CHEROKEE SMALL LETTER NV
+ case 0xAB96:
+ return 0x13C6; // [C] CHEROKEE SMALL LETTER QUA
+ case 0xAB97:
+ return 0x13C7; // [C] CHEROKEE SMALL LETTER QUE
+ case 0xAB98:
+ return 0x13C8; // [C] CHEROKEE SMALL LETTER QUI
+ case 0xAB99:
+ return 0x13C9; // [C] CHEROKEE SMALL LETTER QUO
+ case 0xAB9A:
+ return 0x13CA; // [C] CHEROKEE SMALL LETTER QUU
+ case 0xAB9B:
+ return 0x13CB; // [C] CHEROKEE SMALL LETTER QUV
+ case 0xAB9C:
+ return 0x13CC; // [C] CHEROKEE SMALL LETTER SA
+ case 0xAB9D:
+ return 0x13CD; // [C] CHEROKEE SMALL LETTER S
+ case 0xAB9E:
+ return 0x13CE; // [C] CHEROKEE SMALL LETTER SE
+ case 0xAB9F:
+ return 0x13CF; // [C] CHEROKEE SMALL LETTER SI
+ case 0xABA0:
+ return 0x13D0; // [C] CHEROKEE SMALL LETTER SO
+ case 0xABA1:
+ return 0x13D1; // [C] CHEROKEE SMALL LETTER SU
+ case 0xABA2:
+ return 0x13D2; // [C] CHEROKEE SMALL LETTER SV
+ case 0xABA3:
+ return 0x13D3; // [C] CHEROKEE SMALL LETTER DA
+ case 0xABA4:
+ return 0x13D4; // [C] CHEROKEE SMALL LETTER TA
+ case 0xABA5:
+ return 0x13D5; // [C] CHEROKEE SMALL LETTER DE
+ case 0xABA6:
+ return 0x13D6; // [C] CHEROKEE SMALL LETTER TE
+ case 0xABA7:
+ return 0x13D7; // [C] CHEROKEE SMALL LETTER DI
+ case 0xABA8:
+ return 0x13D8; // [C] CHEROKEE SMALL LETTER TI
+ case 0xABA9:
+ return 0x13D9; // [C] CHEROKEE SMALL LETTER DO
+ case 0xABAA:
+ return 0x13DA; // [C] CHEROKEE SMALL LETTER DU
+ case 0xABAB:
+ return 0x13DB; // [C] CHEROKEE SMALL LETTER DV
+ case 0xABAC:
+ return 0x13DC; // [C] CHEROKEE SMALL LETTER DLA
+ case 0xABAD:
+ return 0x13DD; // [C] CHEROKEE SMALL LETTER TLA
+ case 0xABAE:
+ return 0x13DE; // [C] CHEROKEE SMALL LETTER TLE
+ case 0xABAF:
+ return 0x13DF; // [C] CHEROKEE SMALL LETTER TLI
+ case 0xABB0:
+ return 0x13E0; // [C] CHEROKEE SMALL LETTER TLO
+ case 0xABB1:
+ return 0x13E1; // [C] CHEROKEE SMALL LETTER TLU
+ case 0xABB2:
+ return 0x13E2; // [C] CHEROKEE SMALL LETTER TLV
+ case 0xABB3:
+ return 0x13E3; // [C] CHEROKEE SMALL LETTER TSA
+ case 0xABB4:
+ return 0x13E4; // [C] CHEROKEE SMALL LETTER TSE
+ case 0xABB5:
+ return 0x13E5; // [C] CHEROKEE SMALL LETTER TSI
+ case 0xABB6:
+ return 0x13E6; // [C] CHEROKEE SMALL LETTER TSO
+ case 0xABB7:
+ return 0x13E7; // [C] CHEROKEE SMALL LETTER TSU
+ case 0xABB8:
+ return 0x13E8; // [C] CHEROKEE SMALL LETTER TSV
+ case 0xABB9:
+ return 0x13E9; // [C] CHEROKEE SMALL LETTER WA
+ case 0xABBA:
+ return 0x13EA; // [C] CHEROKEE SMALL LETTER WE
+ case 0xABBB:
+ return 0x13EB; // [C] CHEROKEE SMALL LETTER WI
+ case 0xABBC:
+ return 0x13EC; // [C] CHEROKEE SMALL LETTER WO
+ case 0xABBD:
+ return 0x13ED; // [C] CHEROKEE SMALL LETTER WU
+ case 0xABBE:
+ return 0x13EE; // [C] CHEROKEE SMALL LETTER WV
+ case 0xABBF:
+ return 0x13EF; // [C] CHEROKEE SMALL LETTER YA
+ case 0xFB05:
+ return 0xFB06; // [S] LATIN SMALL LIGATURE LONG S T
+ case 0xFF21:
+ return 0xFF41; // [C] FULLWIDTH LATIN CAPITAL LETTER A
+ case 0xFF22:
+ return 0xFF42; // [C] FULLWIDTH LATIN CAPITAL LETTER B
+ case 0xFF23:
+ return 0xFF43; // [C] FULLWIDTH LATIN CAPITAL LETTER C
+ case 0xFF24:
+ return 0xFF44; // [C] FULLWIDTH LATIN CAPITAL LETTER D
+ case 0xFF25:
+ return 0xFF45; // [C] FULLWIDTH LATIN CAPITAL LETTER E
+ case 0xFF26:
+ return 0xFF46; // [C] FULLWIDTH LATIN CAPITAL LETTER F
+ case 0xFF27:
+ return 0xFF47; // [C] FULLWIDTH LATIN CAPITAL LETTER G
+ case 0xFF28:
+ return 0xFF48; // [C] FULLWIDTH LATIN CAPITAL LETTER H
+ case 0xFF29:
+ return 0xFF49; // [C] FULLWIDTH LATIN CAPITAL LETTER I
+ case 0xFF2A:
+ return 0xFF4A; // [C] FULLWIDTH LATIN CAPITAL LETTER J
+ case 0xFF2B:
+ return 0xFF4B; // [C] FULLWIDTH LATIN CAPITAL LETTER K
+ case 0xFF2C:
+ return 0xFF4C; // [C] FULLWIDTH LATIN CAPITAL LETTER L
+ case 0xFF2D:
+ return 0xFF4D; // [C] FULLWIDTH LATIN CAPITAL LETTER M
+ case 0xFF2E:
+ return 0xFF4E; // [C] FULLWIDTH LATIN CAPITAL LETTER N
+ case 0xFF2F:
+ return 0xFF4F; // [C] FULLWIDTH LATIN CAPITAL LETTER O
+ case 0xFF30:
+ return 0xFF50; // [C] FULLWIDTH LATIN CAPITAL LETTER P
+ case 0xFF31:
+ return 0xFF51; // [C] FULLWIDTH LATIN CAPITAL LETTER Q
+ case 0xFF32:
+ return 0xFF52; // [C] FULLWIDTH LATIN CAPITAL LETTER R
+ case 0xFF33:
+ return 0xFF53; // [C] FULLWIDTH LATIN CAPITAL LETTER S
+ case 0xFF34:
+ return 0xFF54; // [C] FULLWIDTH LATIN CAPITAL LETTER T
+ case 0xFF35:
+ return 0xFF55; // [C] FULLWIDTH LATIN CAPITAL LETTER U
+ case 0xFF36:
+ return 0xFF56; // [C] FULLWIDTH LATIN CAPITAL LETTER V
+ case 0xFF37:
+ return 0xFF57; // [C] FULLWIDTH LATIN CAPITAL LETTER W
+ case 0xFF38:
+ return 0xFF58; // [C] FULLWIDTH LATIN CAPITAL LETTER X
+ case 0xFF39:
+ return 0xFF59; // [C] FULLWIDTH LATIN CAPITAL LETTER Y
+ case 0xFF3A:
+ return 0xFF5A; // [C] FULLWIDTH LATIN CAPITAL LETTER Z
+ case 0x10400:
+ return 0x10428; // [C] DESERET CAPITAL LETTER LONG I
+ case 0x10401:
+ return 0x10429; // [C] DESERET CAPITAL LETTER LONG E
+ case 0x10402:
+ return 0x1042A; // [C] DESERET CAPITAL LETTER LONG A
+ case 0x10403:
+ return 0x1042B; // [C] DESERET CAPITAL LETTER LONG AH
+ case 0x10404:
+ return 0x1042C; // [C] DESERET CAPITAL LETTER LONG O
+ case 0x10405:
+ return 0x1042D; // [C] DESERET CAPITAL LETTER LONG OO
+ case 0x10406:
+ return 0x1042E; // [C] DESERET CAPITAL LETTER SHORT I
+ case 0x10407:
+ return 0x1042F; // [C] DESERET CAPITAL LETTER SHORT E
+ case 0x10408:
+ return 0x10430; // [C] DESERET CAPITAL LETTER SHORT A
+ case 0x10409:
+ return 0x10431; // [C] DESERET CAPITAL LETTER SHORT AH
+ case 0x1040A:
+ return 0x10432; // [C] DESERET CAPITAL LETTER SHORT O
+ case 0x1040B:
+ return 0x10433; // [C] DESERET CAPITAL LETTER SHORT OO
+ case 0x1040C:
+ return 0x10434; // [C] DESERET CAPITAL LETTER AY
+ case 0x1040D:
+ return 0x10435; // [C] DESERET CAPITAL LETTER OW
+ case 0x1040E:
+ return 0x10436; // [C] DESERET CAPITAL LETTER WU
+ case 0x1040F:
+ return 0x10437; // [C] DESERET CAPITAL LETTER YEE
+ case 0x10410:
+ return 0x10438; // [C] DESERET CAPITAL LETTER H
+ case 0x10411:
+ return 0x10439; // [C] DESERET CAPITAL LETTER PEE
+ case 0x10412:
+ return 0x1043A; // [C] DESERET CAPITAL LETTER BEE
+ case 0x10413:
+ return 0x1043B; // [C] DESERET CAPITAL LETTER TEE
+ case 0x10414:
+ return 0x1043C; // [C] DESERET CAPITAL LETTER DEE
+ case 0x10415:
+ return 0x1043D; // [C] DESERET CAPITAL LETTER CHEE
+ case 0x10416:
+ return 0x1043E; // [C] DESERET CAPITAL LETTER JEE
+ case 0x10417:
+ return 0x1043F; // [C] DESERET CAPITAL LETTER KAY
+ case 0x10418:
+ return 0x10440; // [C] DESERET CAPITAL LETTER GAY
+ case 0x10419:
+ return 0x10441; // [C] DESERET CAPITAL LETTER EF
+ case 0x1041A:
+ return 0x10442; // [C] DESERET CAPITAL LETTER VEE
+ case 0x1041B:
+ return 0x10443; // [C] DESERET CAPITAL LETTER ETH
+ case 0x1041C:
+ return 0x10444; // [C] DESERET CAPITAL LETTER THEE
+ case 0x1041D:
+ return 0x10445; // [C] DESERET CAPITAL LETTER ES
+ case 0x1041E:
+ return 0x10446; // [C] DESERET CAPITAL LETTER ZEE
+ case 0x1041F:
+ return 0x10447; // [C] DESERET CAPITAL LETTER ESH
+ case 0x10420:
+ return 0x10448; // [C] DESERET CAPITAL LETTER ZHEE
+ case 0x10421:
+ return 0x10449; // [C] DESERET CAPITAL LETTER ER
+ case 0x10422:
+ return 0x1044A; // [C] DESERET CAPITAL LETTER EL
+ case 0x10423:
+ return 0x1044B; // [C] DESERET CAPITAL LETTER EM
+ case 0x10424:
+ return 0x1044C; // [C] DESERET CAPITAL LETTER EN
+ case 0x10425:
+ return 0x1044D; // [C] DESERET CAPITAL LETTER ENG
+ case 0x10426:
+ return 0x1044E; // [C] DESERET CAPITAL LETTER OI
+ case 0x10427:
+ return 0x1044F; // [C] DESERET CAPITAL LETTER EW
+ case 0x104B0:
+ return 0x104D8; // [C] OSAGE CAPITAL LETTER A
+ case 0x104B1:
+ return 0x104D9; // [C] OSAGE CAPITAL LETTER AI
+ case 0x104B2:
+ return 0x104DA; // [C] OSAGE CAPITAL LETTER AIN
+ case 0x104B3:
+ return 0x104DB; // [C] OSAGE CAPITAL LETTER AH
+ case 0x104B4:
+ return 0x104DC; // [C] OSAGE CAPITAL LETTER BRA
+ case 0x104B5:
+ return 0x104DD; // [C] OSAGE CAPITAL LETTER CHA
+ case 0x104B6:
+ return 0x104DE; // [C] OSAGE CAPITAL LETTER EHCHA
+ case 0x104B7:
+ return 0x104DF; // [C] OSAGE CAPITAL LETTER E
+ case 0x104B8:
+ return 0x104E0; // [C] OSAGE CAPITAL LETTER EIN
+ case 0x104B9:
+ return 0x104E1; // [C] OSAGE CAPITAL LETTER HA
+ case 0x104BA:
+ return 0x104E2; // [C] OSAGE CAPITAL LETTER HYA
+ case 0x104BB:
+ return 0x104E3; // [C] OSAGE CAPITAL LETTER I
+ case 0x104BC:
+ return 0x104E4; // [C] OSAGE CAPITAL LETTER KA
+ case 0x104BD:
+ return 0x104E5; // [C] OSAGE CAPITAL LETTER EHKA
+ case 0x104BE:
+ return 0x104E6; // [C] OSAGE CAPITAL LETTER KYA
+ case 0x104BF:
+ return 0x104E7; // [C] OSAGE CAPITAL LETTER LA
+ case 0x104C0:
+ return 0x104E8; // [C] OSAGE CAPITAL LETTER MA
+ case 0x104C1:
+ return 0x104E9; // [C] OSAGE CAPITAL LETTER NA
+ case 0x104C2:
+ return 0x104EA; // [C] OSAGE CAPITAL LETTER O
+ case 0x104C3:
+ return 0x104EB; // [C] OSAGE CAPITAL LETTER OIN
+ case 0x104C4:
+ return 0x104EC; // [C] OSAGE CAPITAL LETTER PA
+ case 0x104C5:
+ return 0x104ED; // [C] OSAGE CAPITAL LETTER EHPA
+ case 0x104C6:
+ return 0x104EE; // [C] OSAGE CAPITAL LETTER SA
+ case 0x104C7:
+ return 0x104EF; // [C] OSAGE CAPITAL LETTER SHA
+ case 0x104C8:
+ return 0x104F0; // [C] OSAGE CAPITAL LETTER TA
+ case 0x104C9:
+ return 0x104F1; // [C] OSAGE CAPITAL LETTER EHTA
+ case 0x104CA:
+ return 0x104F2; // [C] OSAGE CAPITAL LETTER TSA
+ case 0x104CB:
+ return 0x104F3; // [C] OSAGE CAPITAL LETTER EHTSA
+ case 0x104CC:
+ return 0x104F4; // [C] OSAGE CAPITAL LETTER TSHA
+ case 0x104CD:
+ return 0x104F5; // [C] OSAGE CAPITAL LETTER DHA
+ case 0x104CE:
+ return 0x104F6; // [C] OSAGE CAPITAL LETTER U
+ case 0x104CF:
+ return 0x104F7; // [C] OSAGE CAPITAL LETTER WA
+ case 0x104D0:
+ return 0x104F8; // [C] OSAGE CAPITAL LETTER KHA
+ case 0x104D1:
+ return 0x104F9; // [C] OSAGE CAPITAL LETTER GHA
+ case 0x104D2:
+ return 0x104FA; // [C] OSAGE CAPITAL LETTER ZA
+ case 0x104D3:
+ return 0x104FB; // [C] OSAGE CAPITAL LETTER ZHA
+ case 0x10570:
+ return 0x10597; // [C] VITHKUQI CAPITAL LETTER A
+ case 0x10571:
+ return 0x10598; // [C] VITHKUQI CAPITAL LETTER BBE
+ case 0x10572:
+ return 0x10599; // [C] VITHKUQI CAPITAL LETTER BE
+ case 0x10573:
+ return 0x1059A; // [C] VITHKUQI CAPITAL LETTER CE
+ case 0x10574:
+ return 0x1059B; // [C] VITHKUQI CAPITAL LETTER CHE
+ case 0x10575:
+ return 0x1059C; // [C] VITHKUQI CAPITAL LETTER DE
+ case 0x10576:
+ return 0x1059D; // [C] VITHKUQI CAPITAL LETTER DHE
+ case 0x10577:
+ return 0x1059E; // [C] VITHKUQI CAPITAL LETTER EI
+ case 0x10578:
+ return 0x1059F; // [C] VITHKUQI CAPITAL LETTER E
+ case 0x10579:
+ return 0x105A0; // [C] VITHKUQI CAPITAL LETTER FE
+ case 0x1057A:
+ return 0x105A1; // [C] VITHKUQI CAPITAL LETTER GA
+ case 0x1057C:
+ return 0x105A3; // [C] VITHKUQI CAPITAL LETTER HA
+ case 0x1057D:
+ return 0x105A4; // [C] VITHKUQI CAPITAL LETTER HHA
+ case 0x1057E:
+ return 0x105A5; // [C] VITHKUQI CAPITAL LETTER I
+ case 0x1057F:
+ return 0x105A6; // [C] VITHKUQI CAPITAL LETTER IJE
+ case 0x10580:
+ return 0x105A7; // [C] VITHKUQI CAPITAL LETTER JE
+ case 0x10581:
+ return 0x105A8; // [C] VITHKUQI CAPITAL LETTER KA
+ case 0x10582:
+ return 0x105A9; // [C] VITHKUQI CAPITAL LETTER LA
+ case 0x10583:
+ return 0x105AA; // [C] VITHKUQI CAPITAL LETTER LLA
+ case 0x10584:
+ return 0x105AB; // [C] VITHKUQI CAPITAL LETTER ME
+ case 0x10585:
+ return 0x105AC; // [C] VITHKUQI CAPITAL LETTER NE
+ case 0x10586:
+ return 0x105AD; // [C] VITHKUQI CAPITAL LETTER NJE
+ case 0x10587:
+ return 0x105AE; // [C] VITHKUQI CAPITAL LETTER O
+ case 0x10588:
+ return 0x105AF; // [C] VITHKUQI CAPITAL LETTER PE
+ case 0x10589:
+ return 0x105B0; // [C] VITHKUQI CAPITAL LETTER QA
+ case 0x1058A:
+ return 0x105B1; // [C] VITHKUQI CAPITAL LETTER RE
+ case 0x1058C:
+ return 0x105B3; // [C] VITHKUQI CAPITAL LETTER SE
+ case 0x1058D:
+ return 0x105B4; // [C] VITHKUQI CAPITAL LETTER SHE
+ case 0x1058E:
+ return 0x105B5; // [C] VITHKUQI CAPITAL LETTER TE
+ case 0x1058F:
+ return 0x105B6; // [C] VITHKUQI CAPITAL LETTER THE
+ case 0x10590:
+ return 0x105B7; // [C] VITHKUQI CAPITAL LETTER U
+ case 0x10591:
+ return 0x105B8; // [C] VITHKUQI CAPITAL LETTER VE
+ case 0x10592:
+ return 0x105B9; // [C] VITHKUQI CAPITAL LETTER XE
+ case 0x10594:
+ return 0x105BB; // [C] VITHKUQI CAPITAL LETTER Y
+ case 0x10595:
+ return 0x105BC; // [C] VITHKUQI CAPITAL LETTER ZE
+ case 0x10C80:
+ return 0x10CC0; // [C] OLD HUNGARIAN CAPITAL LETTER A
+ case 0x10C81:
+ return 0x10CC1; // [C] OLD HUNGARIAN CAPITAL LETTER AA
+ case 0x10C82:
+ return 0x10CC2; // [C] OLD HUNGARIAN CAPITAL LETTER EB
+ case 0x10C83:
+ return 0x10CC3; // [C] OLD HUNGARIAN CAPITAL LETTER AMB
+ case 0x10C84:
+ return 0x10CC4; // [C] OLD HUNGARIAN CAPITAL LETTER EC
+ case 0x10C85:
+ return 0x10CC5; // [C] OLD HUNGARIAN CAPITAL LETTER ENC
+ case 0x10C86:
+ return 0x10CC6; // [C] OLD HUNGARIAN CAPITAL LETTER ECS
+ case 0x10C87:
+ return 0x10CC7; // [C] OLD HUNGARIAN CAPITAL LETTER ED
+ case 0x10C88:
+ return 0x10CC8; // [C] OLD HUNGARIAN CAPITAL LETTER AND
+ case 0x10C89:
+ return 0x10CC9; // [C] OLD HUNGARIAN CAPITAL LETTER E
+ case 0x10C8A:
+ return 0x10CCA; // [C] OLD HUNGARIAN CAPITAL LETTER CLOSE E
+ case 0x10C8B:
+ return 0x10CCB; // [C] OLD HUNGARIAN CAPITAL LETTER EE
+ case 0x10C8C:
+ return 0x10CCC; // [C] OLD HUNGARIAN CAPITAL LETTER EF
+ case 0x10C8D:
+ return 0x10CCD; // [C] OLD HUNGARIAN CAPITAL LETTER EG
+ case 0x10C8E:
+ return 0x10CCE; // [C] OLD HUNGARIAN CAPITAL LETTER EGY
+ case 0x10C8F:
+ return 0x10CCF; // [C] OLD HUNGARIAN CAPITAL LETTER EH
+ case 0x10C90:
+ return 0x10CD0; // [C] OLD HUNGARIAN CAPITAL LETTER I
+ case 0x10C91:
+ return 0x10CD1; // [C] OLD HUNGARIAN CAPITAL LETTER II
+ case 0x10C92:
+ return 0x10CD2; // [C] OLD HUNGARIAN CAPITAL LETTER EJ
+ case 0x10C93:
+ return 0x10CD3; // [C] OLD HUNGARIAN CAPITAL LETTER EK
+ case 0x10C94:
+ return 0x10CD4; // [C] OLD HUNGARIAN CAPITAL LETTER AK
+ case 0x10C95:
+ return 0x10CD5; // [C] OLD HUNGARIAN CAPITAL LETTER UNK
+ case 0x10C96:
+ return 0x10CD6; // [C] OLD HUNGARIAN CAPITAL LETTER EL
+ case 0x10C97:
+ return 0x10CD7; // [C] OLD HUNGARIAN CAPITAL LETTER ELY
+ case 0x10C98:
+ return 0x10CD8; // [C] OLD HUNGARIAN CAPITAL LETTER EM
+ case 0x10C99:
+ return 0x10CD9; // [C] OLD HUNGARIAN CAPITAL LETTER EN
+ case 0x10C9A:
+ return 0x10CDA; // [C] OLD HUNGARIAN CAPITAL LETTER ENY
+ case 0x10C9B:
+ return 0x10CDB; // [C] OLD HUNGARIAN CAPITAL LETTER O
+ case 0x10C9C:
+ return 0x10CDC; // [C] OLD HUNGARIAN CAPITAL LETTER OO
+ case 0x10C9D:
+ return 0x10CDD; // [C] OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+ case 0x10C9E:
+ return 0x10CDE; // [C] OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+ case 0x10C9F:
+ return 0x10CDF; // [C] OLD HUNGARIAN CAPITAL LETTER OEE
+ case 0x10CA0:
+ return 0x10CE0; // [C] OLD HUNGARIAN CAPITAL LETTER EP
+ case 0x10CA1:
+ return 0x10CE1; // [C] OLD HUNGARIAN CAPITAL LETTER EMP
+ case 0x10CA2:
+ return 0x10CE2; // [C] OLD HUNGARIAN CAPITAL LETTER ER
+ case 0x10CA3:
+ return 0x10CE3; // [C] OLD HUNGARIAN CAPITAL LETTER SHORT ER
+ case 0x10CA4:
+ return 0x10CE4; // [C] OLD HUNGARIAN CAPITAL LETTER ES
+ case 0x10CA5:
+ return 0x10CE5; // [C] OLD HUNGARIAN CAPITAL LETTER ESZ
+ case 0x10CA6:
+ return 0x10CE6; // [C] OLD HUNGARIAN CAPITAL LETTER ET
+ case 0x10CA7:
+ return 0x10CE7; // [C] OLD HUNGARIAN CAPITAL LETTER ENT
+ case 0x10CA8:
+ return 0x10CE8; // [C] OLD HUNGARIAN CAPITAL LETTER ETY
+ case 0x10CA9:
+ return 0x10CE9; // [C] OLD HUNGARIAN CAPITAL LETTER ECH
+ case 0x10CAA:
+ return 0x10CEA; // [C] OLD HUNGARIAN CAPITAL LETTER U
+ case 0x10CAB:
+ return 0x10CEB; // [C] OLD HUNGARIAN CAPITAL LETTER UU
+ case 0x10CAC:
+ return 0x10CEC; // [C] OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+ case 0x10CAD:
+ return 0x10CED; // [C] OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+ case 0x10CAE:
+ return 0x10CEE; // [C] OLD HUNGARIAN CAPITAL LETTER EV
+ case 0x10CAF:
+ return 0x10CEF; // [C] OLD HUNGARIAN CAPITAL LETTER EZ
+ case 0x10CB0:
+ return 0x10CF0; // [C] OLD HUNGARIAN CAPITAL LETTER EZS
+ case 0x10CB1:
+ return 0x10CF1; // [C] OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
+ case 0x10CB2:
+ return 0x10CF2; // [C] OLD HUNGARIAN CAPITAL LETTER US
+ case 0x10D50:
+ return 0x10D70; // [C] GARAY CAPITAL LETTER A
+ case 0x10D51:
+ return 0x10D71; // [C] GARAY CAPITAL LETTER CA
+ case 0x10D52:
+ return 0x10D72; // [C] GARAY CAPITAL LETTER MA
+ case 0x10D53:
+ return 0x10D73; // [C] GARAY CAPITAL LETTER KA
+ case 0x10D54:
+ return 0x10D74; // [C] GARAY CAPITAL LETTER BA
+ case 0x10D55:
+ return 0x10D75; // [C] GARAY CAPITAL LETTER JA
+ case 0x10D56:
+ return 0x10D76; // [C] GARAY CAPITAL LETTER SA
+ case 0x10D57:
+ return 0x10D77; // [C] GARAY CAPITAL LETTER WA
+ case 0x10D58:
+ return 0x10D78; // [C] GARAY CAPITAL LETTER LA
+ case 0x10D59:
+ return 0x10D79; // [C] GARAY CAPITAL LETTER GA
+ case 0x10D5A:
+ return 0x10D7A; // [C] GARAY CAPITAL LETTER DA
+ case 0x10D5B:
+ return 0x10D7B; // [C] GARAY CAPITAL LETTER XA
+ case 0x10D5C:
+ return 0x10D7C; // [C] GARAY CAPITAL LETTER YA
+ case 0x10D5D:
+ return 0x10D7D; // [C] GARAY CAPITAL LETTER TA
+ case 0x10D5E:
+ return 0x10D7E; // [C] GARAY CAPITAL LETTER RA
+ case 0x10D5F:
+ return 0x10D7F; // [C] GARAY CAPITAL LETTER NYA
+ case 0x10D60:
+ return 0x10D80; // [C] GARAY CAPITAL LETTER FA
+ case 0x10D61:
+ return 0x10D81; // [C] GARAY CAPITAL LETTER NA
+ case 0x10D62:
+ return 0x10D82; // [C] GARAY CAPITAL LETTER PA
+ case 0x10D63:
+ return 0x10D83; // [C] GARAY CAPITAL LETTER HA
+ case 0x10D64:
+ return 0x10D84; // [C] GARAY CAPITAL LETTER OLD KA
+ case 0x10D65:
+ return 0x10D85; // [C] GARAY CAPITAL LETTER OLD NA
+ case 0x118A0:
+ return 0x118C0; // [C] WARANG CITI CAPITAL LETTER NGAA
+ case 0x118A1:
+ return 0x118C1; // [C] WARANG CITI CAPITAL LETTER A
+ case 0x118A2:
+ return 0x118C2; // [C] WARANG CITI CAPITAL LETTER WI
+ case 0x118A3:
+ return 0x118C3; // [C] WARANG CITI CAPITAL LETTER YU
+ case 0x118A4:
+ return 0x118C4; // [C] WARANG CITI CAPITAL LETTER YA
+ case 0x118A5:
+ return 0x118C5; // [C] WARANG CITI CAPITAL LETTER YO
+ case 0x118A6:
+ return 0x118C6; // [C] WARANG CITI CAPITAL LETTER II
+ case 0x118A7:
+ return 0x118C7; // [C] WARANG CITI CAPITAL LETTER UU
+ case 0x118A8:
+ return 0x118C8; // [C] WARANG CITI CAPITAL LETTER E
+ case 0x118A9:
+ return 0x118C9; // [C] WARANG CITI CAPITAL LETTER O
+ case 0x118AA:
+ return 0x118CA; // [C] WARANG CITI CAPITAL LETTER ANG
+ case 0x118AB:
+ return 0x118CB; // [C] WARANG CITI CAPITAL LETTER GA
+ case 0x118AC:
+ return 0x118CC; // [C] WARANG CITI CAPITAL LETTER KO
+ case 0x118AD:
+ return 0x118CD; // [C] WARANG CITI CAPITAL LETTER ENY
+ case 0x118AE:
+ return 0x118CE; // [C] WARANG CITI CAPITAL LETTER YUJ
+ case 0x118AF:
+ return 0x118CF; // [C] WARANG CITI CAPITAL LETTER UC
+ case 0x118B0:
+ return 0x118D0; // [C] WARANG CITI CAPITAL LETTER ENN
+ case 0x118B1:
+ return 0x118D1; // [C] WARANG CITI CAPITAL LETTER ODD
+ case 0x118B2:
+ return 0x118D2; // [C] WARANG CITI CAPITAL LETTER TTE
+ case 0x118B3:
+ return 0x118D3; // [C] WARANG CITI CAPITAL LETTER NUNG
+ case 0x118B4:
+ return 0x118D4; // [C] WARANG CITI CAPITAL LETTER DA
+ case 0x118B5:
+ return 0x118D5; // [C] WARANG CITI CAPITAL LETTER AT
+ case 0x118B6:
+ return 0x118D6; // [C] WARANG CITI CAPITAL LETTER AM
+ case 0x118B7:
+ return 0x118D7; // [C] WARANG CITI CAPITAL LETTER BU
+ case 0x118B8:
+ return 0x118D8; // [C] WARANG CITI CAPITAL LETTER PU
+ case 0x118B9:
+ return 0x118D9; // [C] WARANG CITI CAPITAL LETTER HIYO
+ case 0x118BA:
+ return 0x118DA; // [C] WARANG CITI CAPITAL LETTER HOLO
+ case 0x118BB:
+ return 0x118DB; // [C] WARANG CITI CAPITAL LETTER HORR
+ case 0x118BC:
+ return 0x118DC; // [C] WARANG CITI CAPITAL LETTER HAR
+ case 0x118BD:
+ return 0x118DD; // [C] WARANG CITI CAPITAL LETTER SSUU
+ case 0x118BE:
+ return 0x118DE; // [C] WARANG CITI CAPITAL LETTER SII
+ case 0x118BF:
+ return 0x118DF; // [C] WARANG CITI CAPITAL LETTER VIYO
+ case 0x16E40:
+ return 0x16E60; // [C] MEDEFAIDRIN CAPITAL LETTER M
+ case 0x16E41:
+ return 0x16E61; // [C] MEDEFAIDRIN CAPITAL LETTER S
+ case 0x16E42:
+ return 0x16E62; // [C] MEDEFAIDRIN CAPITAL LETTER V
+ case 0x16E43:
+ return 0x16E63; // [C] MEDEFAIDRIN CAPITAL LETTER W
+ case 0x16E44:
+ return 0x16E64; // [C] MEDEFAIDRIN CAPITAL LETTER ATIU
+ case 0x16E45:
+ return 0x16E65; // [C] MEDEFAIDRIN CAPITAL LETTER Z
+ case 0x16E46:
+ return 0x16E66; // [C] MEDEFAIDRIN CAPITAL LETTER KP
+ case 0x16E47:
+ return 0x16E67; // [C] MEDEFAIDRIN CAPITAL LETTER P
+ case 0x16E48:
+ return 0x16E68; // [C] MEDEFAIDRIN CAPITAL LETTER T
+ case 0x16E49:
+ return 0x16E69; // [C] MEDEFAIDRIN CAPITAL LETTER G
+ case 0x16E4A:
+ return 0x16E6A; // [C] MEDEFAIDRIN CAPITAL LETTER F
+ case 0x16E4B:
+ return 0x16E6B; // [C] MEDEFAIDRIN CAPITAL LETTER I
+ case 0x16E4C:
+ return 0x16E6C; // [C] MEDEFAIDRIN CAPITAL LETTER K
+ case 0x16E4D:
+ return 0x16E6D; // [C] MEDEFAIDRIN CAPITAL LETTER A
+ case 0x16E4E:
+ return 0x16E6E; // [C] MEDEFAIDRIN CAPITAL LETTER J
+ case 0x16E4F:
+ return 0x16E6F; // [C] MEDEFAIDRIN CAPITAL LETTER E
+ case 0x16E50:
+ return 0x16E70; // [C] MEDEFAIDRIN CAPITAL LETTER B
+ case 0x16E51:
+ return 0x16E71; // [C] MEDEFAIDRIN CAPITAL LETTER C
+ case 0x16E52:
+ return 0x16E72; // [C] MEDEFAIDRIN CAPITAL LETTER U
+ case 0x16E53:
+ return 0x16E73; // [C] MEDEFAIDRIN CAPITAL LETTER YU
+ case 0x16E54:
+ return 0x16E74; // [C] MEDEFAIDRIN CAPITAL LETTER L
+ case 0x16E55:
+ return 0x16E75; // [C] MEDEFAIDRIN CAPITAL LETTER Q
+ case 0x16E56:
+ return 0x16E76; // [C] MEDEFAIDRIN CAPITAL LETTER HP
+ case 0x16E57:
+ return 0x16E77; // [C] MEDEFAIDRIN CAPITAL LETTER NY
+ case 0x16E58:
+ return 0x16E78; // [C] MEDEFAIDRIN CAPITAL LETTER X
+ case 0x16E59:
+ return 0x16E79; // [C] MEDEFAIDRIN CAPITAL LETTER D
+ case 0x16E5A:
+ return 0x16E7A; // [C] MEDEFAIDRIN CAPITAL LETTER OE
+ case 0x16E5B:
+ return 0x16E7B; // [C] MEDEFAIDRIN CAPITAL LETTER N
+ case 0x16E5C:
+ return 0x16E7C; // [C] MEDEFAIDRIN CAPITAL LETTER R
+ case 0x16E5D:
+ return 0x16E7D; // [C] MEDEFAIDRIN CAPITAL LETTER O
+ case 0x16E5E:
+ return 0x16E7E; // [C] MEDEFAIDRIN CAPITAL LETTER AI
+ case 0x16E5F:
+ return 0x16E7F; // [C] MEDEFAIDRIN CAPITAL LETTER Y
+ case 0x1E900:
+ return 0x1E922; // [C] ADLAM CAPITAL LETTER ALIF
+ case 0x1E901:
+ return 0x1E923; // [C] ADLAM CAPITAL LETTER DAALI
+ case 0x1E902:
+ return 0x1E924; // [C] ADLAM CAPITAL LETTER LAAM
+ case 0x1E903:
+ return 0x1E925; // [C] ADLAM CAPITAL LETTER MIIM
+ case 0x1E904:
+ return 0x1E926; // [C] ADLAM CAPITAL LETTER BA
+ case 0x1E905:
+ return 0x1E927; // [C] ADLAM CAPITAL LETTER SINNYIIYHE
+ case 0x1E906:
+ return 0x1E928; // [C] ADLAM CAPITAL LETTER PE
+ case 0x1E907:
+ return 0x1E929; // [C] ADLAM CAPITAL LETTER BHE
+ case 0x1E908:
+ return 0x1E92A; // [C] ADLAM CAPITAL LETTER RA
+ case 0x1E909:
+ return 0x1E92B; // [C] ADLAM CAPITAL LETTER E
+ case 0x1E90A:
+ return 0x1E92C; // [C] ADLAM CAPITAL LETTER FA
+ case 0x1E90B:
+ return 0x1E92D; // [C] ADLAM CAPITAL LETTER I
+ case 0x1E90C:
+ return 0x1E92E; // [C] ADLAM CAPITAL LETTER O
+ case 0x1E90D:
+ return 0x1E92F; // [C] ADLAM CAPITAL LETTER DHA
+ case 0x1E90E:
+ return 0x1E930; // [C] ADLAM CAPITAL LETTER YHE
+ case 0x1E90F:
+ return 0x1E931; // [C] ADLAM CAPITAL LETTER WAW
+ case 0x1E910:
+ return 0x1E932; // [C] ADLAM CAPITAL LETTER NUN
+ case 0x1E911:
+ return 0x1E933; // [C] ADLAM CAPITAL LETTER KAF
+ case 0x1E912:
+ return 0x1E934; // [C] ADLAM CAPITAL LETTER YA
+ case 0x1E913:
+ return 0x1E935; // [C] ADLAM CAPITAL LETTER U
+ case 0x1E914:
+ return 0x1E936; // [C] ADLAM CAPITAL LETTER JIIM
+ case 0x1E915:
+ return 0x1E937; // [C] ADLAM CAPITAL LETTER CHI
+ case 0x1E916:
+ return 0x1E938; // [C] ADLAM CAPITAL LETTER HA
+ case 0x1E917:
+ return 0x1E939; // [C] ADLAM CAPITAL LETTER QAAF
+ case 0x1E918:
+ return 0x1E93A; // [C] ADLAM CAPITAL LETTER GA
+ case 0x1E919:
+ return 0x1E93B; // [C] ADLAM CAPITAL LETTER NYA
+ case 0x1E91A:
+ return 0x1E93C; // [C] ADLAM CAPITAL LETTER TU
+ case 0x1E91B:
+ return 0x1E93D; // [C] ADLAM CAPITAL LETTER NHA
+ case 0x1E91C:
+ return 0x1E93E; // [C] ADLAM CAPITAL LETTER VA
+ case 0x1E91D:
+ return 0x1E93F; // [C] ADLAM CAPITAL LETTER KHA
+ case 0x1E91E:
+ return 0x1E940; // [C] ADLAM CAPITAL LETTER GBE
+ case 0x1E91F:
+ return 0x1E941; // [C] ADLAM CAPITAL LETTER ZAL
+ case 0x1E920:
+ return 0x1E942; // [C] ADLAM CAPITAL LETTER KPO
+ case 0x1E921:
+ return 0x1E943; // [C] ADLAM CAPITAL LETTER SHA
+ default:
+ return in;
+ }
+}
+
+template
+void case_fold_impl(InputIt start, InputIt end, OutputIt out) {
+ while (start < end) {
+ auto cp = utf8::next(start, end);
+ auto folded = case_fold_char(cp);
+ out = utf8::append(folded, out);
+ }
+}
+
+template
+void case_fold_unchecked_impl(InputIt start, InputIt end, OutputIt out) {
+ while (start < end) {
+ auto cp = utf8::unchecked::next(start);
+ auto folded = case_fold_char(cp);
+ out = utf8::unchecked::append(folded, out);
+ }
+}
+
+} // namespace
+
+std::string utf8_case_fold(std::string_view in) {
+ std::string out;
+ case_fold_impl(in.begin(), in.end(), std::back_inserter(out));
+ return out;
+}
+
+std::string utf8_case_fold_unchecked(std::string_view in) {
+ std::string out;
+ case_fold_unchecked_impl(in.begin(), in.end(), std::back_inserter(out));
+ return out;
+}
+
+} // namespace dwarfs::internal
diff --git a/src/reader/internal/metadata_v2.cpp b/src/reader/internal/metadata_v2.cpp
index dec8ddd98..3c504eafa 100644
--- a/src/reader/internal/metadata_v2.cpp
+++ b/src/reader/internal/metadata_v2.cpp
@@ -60,6 +60,7 @@
#include
#include
#include
+#include
#include
#include
@@ -416,7 +417,7 @@ class metadata_ final : public metadata_v2::impl {
, symlinks_(meta_.compact_symlinks()
? string_table(lgr, "symlinks", *meta_.compact_symlinks())
: string_table(meta_.symlinks()))
- // clang-format off
+ , dir_icase_cache_{build_dir_icase_cache()} // clang-format off
PERFMON_CLS_PROXY_INIT(perfmon, "metadata_v2")
PERFMON_CLS_TIMER_INIT(find)
PERFMON_CLS_TIMER_INIT(getattr)
@@ -921,6 +922,53 @@ class metadata_ final : public metadata_v2::impl {
return packed_nlinks;
}
+ std::vector> build_dir_icase_cache() const {
+ std::vector> cache;
+
+ if (options_.case_insensitive_lookup) {
+ auto td = LOG_TIMED_DEBUG;
+ size_t num_cached_dirs = 0;
+ size_t total_cache_size = 0;
+
+ cache.resize(meta_.directories().size());
+
+ for (uint32_t inode = 0; inode < meta_.directories().size() - 1;
+ ++inode) {
+ directory_view dir{inode, global_};
+ auto range = dir.entry_range();
+
+ // Cache the folded names of the directory entries; this significantly
+ // speeds up the sorting code.
+ std::vector names(range.size());
+ std::transform(range.begin(), range.end(), names.begin(), [&](auto ix) {
+ return utf8_case_fold_unchecked(
+ dir_entry_view_impl::name(ix, global_));
+ });
+
+ // It's faster to check here if the folded names are sorted than to
+ // check later if the indices in `entries` are sorted.
+ if (!std::is_sorted(names.begin(), names.end())) {
+ std::vector entries(range.size());
+ std::iota(entries.begin(), entries.end(), 0);
+ std::stable_sort(entries.begin(), entries.end(),
+ [&](auto a, auto b) { return names[a] < names[b]; });
+ auto& pv = cache[inode];
+ pv.reset(std::bit_width(entries.size()), entries.size());
+ for (size_t i = 0; i < entries.size(); ++i) {
+ pv.set(i, entries[i]);
+ }
+ ++num_cached_dirs;
+ total_cache_size += pv.size_in_bytes();
+ }
+ }
+
+ td << "built case-insensitive directory cache for " << num_cached_dirs
+ << " directories (" << size_with_unit(total_cache_size) << ")";
+ }
+
+ return cache;
+ }
+
size_t total_file_entries() const {
return (dev_inode_offset_ - file_inode_offset_) +
(meta_.dir_entries()
@@ -944,6 +992,7 @@ class metadata_ final : public metadata_v2::impl {
const int unique_files_;
const metadata_options options_;
const string_table symlinks_;
+ std::vector> const dir_icase_cache_;
PERFMON_CLS_PROXY_DECL
PERFMON_CLS_TIMER_DECL(find)
PERFMON_CLS_TIMER_DECL(getattr)
@@ -1695,15 +1744,43 @@ metadata_::find(directory_view dir, std::string_view name) const {
auto range = dir.entry_range();
- auto it = std::lower_bound(
- range.begin(), range.end(), name, [&](auto ix, std::string_view name) {
- return internal::dir_entry_view_impl::name(ix, global_) < name;
- });
+ if (options_.case_insensitive_lookup) {
+ auto const& cache = dir_icase_cache_[dir.inode()];
+ auto ixr = boost::irange(0, range.size());
+ auto key = utf8_case_fold(name);
+
+ auto it = std::lower_bound(
+ ixr.begin(), ixr.end(), key, [&](auto ix, std::string const& key) {
+ if (!cache.empty()) {
+ ix = cache[ix];
+ }
+ return utf8_case_fold_unchecked(
+ dir_entry_view_impl::name(range[ix], global_)) < key;
+ });
- if (it != range.end()) {
- if (internal::dir_entry_view_impl::name(*it, global_) == name) {
- return dir_entry_view{dir_entry_view_impl::from_dir_entry_index_shared(
- *it, global_.self_dir_entry(dir.inode()), global_)};
+ if (it != ixr.end()) {
+ auto ix = *it;
+ if (!cache.empty()) {
+ ix = cache[ix];
+ }
+ ix = range[ix];
+ if (utf8_case_fold_unchecked(dir_entry_view_impl::name(ix, global_)) ==
+ key) {
+ return dir_entry_view{dir_entry_view_impl::from_dir_entry_index_shared(
+ ix, global_.self_dir_entry(dir.inode()), global_)};
+ }
+ }
+ } else {
+ auto it = std::lower_bound(
+ range.begin(), range.end(), name, [&](auto ix, std::string_view name) {
+ return internal::dir_entry_view_impl::name(ix, global_) < name;
+ });
+
+ if (it != range.end()) {
+ if (internal::dir_entry_view_impl::name(*it, global_) == name) {
+ return dir_entry_view{dir_entry_view_impl::from_dir_entry_index_shared(
+ *it, global_.self_dir_entry(dir.inode()), global_)};
+ }
}
}
diff --git a/test/dwarfs_test.cpp b/test/dwarfs_test.cpp
index c1d8de6c1..08104b21d 100644
--- a/test/dwarfs_test.cpp
+++ b/test/dwarfs_test.cpp
@@ -2054,3 +2054,166 @@ TEST(filesystem, multi_image) {
EXPECT_EQ("baz", fs.read_string(fs.open(baz->inode())));
}
}
+
+TEST(filesystem, case_insensitive_lookup) {
+ auto input = std::make_shared();
+
+ input->add_dir("");
+ input->add_dir(u8"hEllÖwÖrLD");
+ input->add_dir(u8"FÜñKÿStrÍñg");
+ input->add_dir(u8"unícødérøcks");
+ input->add_dir(u8"JÄLAPEÑOPEPPÉR");
+ input->add_dir(u8"SpIcYsÜsHiRoLL");
+ input->add_dir(u8"CAFÉMØCHAlatte");
+ input->add_dir(u8"ČhàŧGƤŦ");
+ input->add_dir(u8"lõREMÏpSüM");
+ input->add_dir(u8"ŠåmpŁËŠTrInG");
+ input->add_dir(u8"pythonprogramming");
+ input->add_dir(u8"DÃTâScïÊNcË");
+ input->add_dir(u8"AIISFÛTÛRË");
+ input->add_dir(u8"readability");
+ input->add_file(u8"TëStCãSeSçÉNâRïÖ", "testcasescenario");
+ input->add_file(u8"lõREMÏpSüM/ÆSTHETÎCcøding", "aestheticcoding");
+ input->add_file(u8"lõREMÏpSüM/smîLëyFÀÇë😊", "smileyface");
+ input->add_file(u8"lõREMÏpSüM/NØRTHèast", "northeast");
+ input->add_file(u8"lõREMÏpSüM/SPACEadventure", "spaceadventure");
+ input->add_file(u8"lõREMÏpSüM/cõMPLEXïTy🚀", "complexity");
+ input->add_file(u8"lõREMÏpSüM/thisisatest", "thisisatest");
+
+ std::vector case_sensitive_dirs{
+ u8"/hEllÖwÖrLD", u8"/FÜñKÿStrÍñg", u8"/unícødérøcks",
+ u8"/JÄLAPEÑOPEPPÉR", u8"/SpIcYsÜsHiRoLL", u8"/CAFÉMØCHAlatte",
+ u8"/ČhàŧGƤŦ", u8"/lõREMÏpSüM", u8"/ŠåmpŁËŠTrInG",
+ u8"/pythonprogramming", u8"/DÃTâScïÊNcË", u8"/AIISFÛTÛRË",
+ u8"/readability",
+ };
+
+ std::vector> case_sensitive_files{
+ {u8"/TëStCãSeSçÉNâRïÖ", "testcasescenario"},
+ {u8"/lõREMÏpSüM/ÆSTHETÎCcøding", "aestheticcoding"},
+ {u8"/lõREMÏpSüM/smîLëyFÀÇë😊", "smileyface"},
+ {u8"/lõREMÏpSüM/NØRTHèast", "northeast"},
+ {u8"/lõREMÏpSüM/SPACEadventure", "spaceadventure"},
+ {u8"/lõREMÏpSüM/cõMPLEXïTy🚀", "complexity"},
+ {u8"/lõREMÏpSüM/thisisatest", "thisisatest"},
+ };
+
+ std::vector case_insensitive_dirs{
+ u8"/HELlÖwÖRLD", u8"/FÜÑKÿSTríÑg", u8"/uNÍcødéRøcks",
+ u8"/JÄLApeñOPePPÉR", u8"/SpiCysÜshiRoLL", u8"/CAféMØchAlatte",
+ u8"/čhàŧgƥŧ", u8"/lõremÏpsüM", u8"/šåmpŁëšTrInG",
+ u8"/pyTHonproGRamming", u8"/DãtÂScïêNcË", u8"/AiisFÛTÛRË",
+ u8"/reADabiLIty",
+ };
+
+ std::vector> case_insensitive_files{
+ {u8"/TësTcãSeSçéNâRïÖ", "testcasescenario"},
+ {u8"/lõRemïpSüM/ÆstHETÎCcØDing", "aestheticcoding"},
+ {u8"/lõremïPSüM/smîlËYfàÇë😊", "smileyface"},
+ {u8"/lõREMÏPsÜM/NØRthÈAst", "northeast"},
+ {u8"/lõRemïPsüM/SPACEadvENTure", "spaceadventure"},
+ {u8"/LÕREMÏpSüM/CõMPlexïTy🚀", "complexity"},
+ {u8"/lõrEMÏpSüM/thiSISatest", "thisisatest"},
+ };
+
+ std::vector non_matching_entries{
+ u8"/HELlÖwÖRLDx",
+ u8"/FÜÑKÿSTríÑj",
+ u8"/uNÍcødéRcks",
+ u8"/JÄLApeñOPePPÉ",
+ u8"/SpiCysÜshiRoLLx",
+ u8"/CAféMØchAltte",
+ u8"/čhàŧgƥŧx",
+ u8"/lõremÏpsü",
+ u8"/šåmpŁëšTrnG",
+ u8"/pyTHonproGRammin",
+ u8"/DãtÂScïêNcËx",
+ u8"/AiisFÛTÛTË",
+ u8"/reADabiLItx",
+ u8"/TësRcãSeSçéNâRïÖ",
+ u8"/lõRemïpüM/ÆstHETÎCcØDing",
+ u8"/lõremïPSüM/mîlËYfàÇë😊",
+ u8"/lõRMÏPsÜM/NØRthÈAst",
+ u8"/lõRemïPsüM/SPACEadvENTurex",
+ u8"/LÕREMÏpSüM/CõMPexïTy🚀",
+ u8"/lõrEMÏpSüM/thiSISatesy",
+ };
+
+ test::test_logger lgr;
+ auto fsimage = build_dwarfs(lgr, input, "null");
+
+ auto mm = std::make_shared(std::move(fsimage));
+
+ {
+ reader::filesystem_v2 fs(lgr, *input, mm,
+ {.metadata = {.case_insensitive_lookup = false}});
+
+ for (auto const& dir : case_sensitive_dirs) {
+ auto name = u8string_to_string(dir);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ }
+
+ for (auto const& [file, content] : case_sensitive_files) {
+ auto name = u8string_to_string(file);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ EXPECT_EQ(content, fs.read_string(fs.open(dev->inode()))) << name;
+ }
+
+ for (auto const& dir : case_insensitive_dirs) {
+ auto name = u8string_to_string(dir);
+ auto dev = fs.find(name);
+ EXPECT_FALSE(dev) << name;
+ }
+
+ for (auto const& [file, content] : case_insensitive_files) {
+ auto name = u8string_to_string(file);
+ auto dev = fs.find(name);
+ EXPECT_FALSE(dev) << name;
+ }
+
+ for (auto const& ent : non_matching_entries) {
+ auto name = u8string_to_string(ent);
+ auto dev = fs.find(name);
+ EXPECT_FALSE(dev) << name;
+ }
+ }
+
+ {
+ reader::filesystem_v2 fs(lgr, *input, mm,
+ {.metadata = {.case_insensitive_lookup = true}});
+
+ for (auto const& dir : case_sensitive_dirs) {
+ auto name = u8string_to_string(dir);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ }
+
+ for (auto const& [file, content] : case_sensitive_files) {
+ auto name = u8string_to_string(file);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ EXPECT_EQ(content, fs.read_string(fs.open(dev->inode()))) << name;
+ }
+
+ for (auto const& dir : case_insensitive_dirs) {
+ auto name = u8string_to_string(dir);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ }
+
+ for (auto const& [file, content] : case_insensitive_files) {
+ auto name = u8string_to_string(file);
+ auto dev = fs.find(name);
+ EXPECT_TRUE(dev) << name;
+ EXPECT_EQ(content, fs.read_string(fs.open(dev->inode()))) << name;
+ }
+
+ for (auto const& ent : non_matching_entries) {
+ auto name = u8string_to_string(ent);
+ auto dev = fs.find(name);
+ EXPECT_FALSE(dev) << name;
+ }
+ }
+}
diff --git a/test/tools_test.cpp b/test/tools_test.cpp
index 76826085e..7d74113a5 100644
--- a/test/tools_test.cpp
+++ b/test/tools_test.cpp
@@ -1053,6 +1053,7 @@ TEST_P(tools_test, end_to_end) {
std::vector all_options{
"-s",
+ "-ocase_insensitive",
#ifndef _WIN32
"-oenable_nlink",
"-oreadonly",
@@ -1074,6 +1075,7 @@ TEST_P(tools_test, end_to_end) {
for (unsigned bitmask = 0; bitmask < combinations; ++bitmask) {
std::vector args;
+ bool case_insensitive{false};
#ifndef _WIN32
bool enable_nlink{false};
bool readonly{false};
@@ -1083,6 +1085,9 @@ TEST_P(tools_test, end_to_end) {
for (size_t i = 0; i < all_options.size(); ++i) {
if ((1 << i) & bitmask) {
auto const& opt = all_options[i];
+ if (opt == "-ocase_insensitive") {
+ case_insensitive = true;
+ }
#ifndef _WIN32
if (opt == "-oreadonly") {
readonly = true;
@@ -1139,6 +1144,12 @@ TEST_P(tools_test, end_to_end) {
EXPECT_EQ(st.st_gid, 3456) << runner.cmdline();
}
#endif
+ EXPECT_TRUE(fs::exists(mountpoint / "format.sh")) << runner.cmdline();
+ EXPECT_EQ(case_insensitive, fs::exists(mountpoint / "FORMAT.SH"))
+ << runner.cmdline();
+ EXPECT_EQ(case_insensitive, fs::exists(mountpoint / "fOrMaT.Sh"))
+ << runner.cmdline();
+
auto perfmon =
dwarfs::getxattr(mountpoint, "user.dwarfs.driver.perfmon");
#if DWARFS_PERFMON_ENABLED
diff --git a/test/unicode_test.cpp b/test/unicode_test.cpp
new file mode 100644
index 000000000..a0382d7b9
--- /dev/null
+++ b/test/unicode_test.cpp
@@ -0,0 +1,111 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/**
+ * \author Marcus Holland-Moritz (github@mhxnet.de)
+ * \copyright Copyright (c) Marcus Holland-Moritz
+ *
+ * This file is part of dwarfs.
+ *
+ * dwarfs is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * dwarfs is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with dwarfs. If not, see .
+ */
+
+#include
+#include
+
+#include
+#include
+
+#if __has_include()
+#include
+#else
+#include
+#endif
+
+#include
+
+using namespace dwarfs::internal;
+
+namespace {
+
+using namespace std::string_view_literals;
+
+std::array,
+ 26> constexpr kCaseFoldData{{
+ {u8"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058\u0059\u005A\u005B\u005C\u005D\u005E\u005F\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF"sv,
+ u8"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A\u005B\u005C\u005D\u005E\u005F\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u03BC\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00D7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF"sv},
+ {u8"\u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015A\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA\u01AB\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9\u01BA\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF"sv,
+ u8"\u0101\u0101\u0103\u0103\u0105\u0105\u0107\u0107\u0109\u0109\u010B\u010B\u010D\u010D\u010F\u010F\u0111\u0111\u0113\u0113\u0115\u0115\u0117\u0117\u0119\u0119\u011B\u011B\u011D\u011D\u011F\u011F\u0121\u0121\u0123\u0123\u0125\u0125\u0127\u0127\u0129\u0129\u012B\u012B\u012D\u012D\u012F\u012F\u0130\u0131\u0133\u0133\u0135\u0135\u0137\u0137\u0138\u013A\u013A\u013C\u013C\u013E\u013E\u0140\u0140\u0142\u0142\u0144\u0144\u0146\u0146\u0148\u0148\u0149\u014B\u014B\u014D\u014D\u014F\u014F\u0151\u0151\u0153\u0153\u0155\u0155\u0157\u0157\u0159\u0159\u015B\u015B\u015D\u015D\u015F\u015F\u0161\u0161\u0163\u0163\u0165\u0165\u0167\u0167\u0169\u0169\u016B\u016B\u016D\u016D\u016F\u016F\u0171\u0171\u0173\u0173\u0175\u0175\u0177\u0177\u00FF\u017A\u017A\u017C\u017C\u017E\u017E\u0073\u0180\u0253\u0183\u0183\u0185\u0185\u0254\u0188\u0188\u0256\u0257\u018C\u018C\u018D\u01DD\u0259\u025B\u0192\u0192\u0260\u0263\u0195\u0269\u0268\u0199\u0199\u019A\u019B\u026F\u0272\u019E\u0275\u01A1\u01A1\u01A3\u01A3\u01A5\u01A5\u0280\u01A8\u01A8\u0283\u01AA\u01AB\u01AD\u01AD\u0288\u01B0\u01B0\u028A\u028B\u01B4\u01B4\u01B6\u01B6\u0292\u01B9\u01B9\u01BA\u01BB\u01BD\u01BD\u01BE\u01BF\u01C0\u01C1\u01C2\u01C3\u01C6\u01C6\u01C6\u01C9\u01C9\u01C9\u01CC\u01CC\u01CC\u01CE\u01CE\u01D0\u01D0\u01D2\u01D2\u01D4\u01D4\u01D6\u01D6\u01D8\u01D8\u01DA\u01DA\u01DC\u01DC\u01DD\u01DF\u01DF\u01E1\u01E1\u01E3\u01E3\u01E5\u01E5\u01E7\u01E7\u01E9\u01E9\u01EB\u01EB\u01ED\u01ED\u01EF\u01EF\u01F0\u01F3\u01F3\u01F3\u01F5\u01F5\u0195\u01BF\u01F9\u01F9\u01FB\u01FB\u01FD\u01FD\u01FF\u01FF"sv},
+ {u8"\u0200\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0220\u0221\u0222\u0223\u0224\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C\u022D\u022E\u022F\u0230\u0231\u0232\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3\u02E4\u02E5\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB\u02EC\u02ED\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB\u02FC\u02FD\u02FE\u02FF"sv,
+ u8"\u0201\u0201\u0203\u0203\u0205\u0205\u0207\u0207\u0209\u0209\u020B\u020B\u020D\u020D\u020F\u020F\u0211\u0211\u0213\u0213\u0215\u0215\u0217\u0217\u0219\u0219\u021B\u021B\u021D\u021D\u021F\u021F\u019E\u0221\u0223\u0223\u0225\u0225\u0227\u0227\u0229\u0229\u022B\u022B\u022D\u022D\u022F\u022F\u0231\u0231\u0233\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u2C65\u023C\u023C\u019A\u2C66\u023F\u0240\u0242\u0242\u0180\u0289\u028C\u0247\u0247\u0249\u0249\u024B\u024B\u024D\u024D\u024F\u024F\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3\u02E4\u02E5\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB\u02EC\u02ED\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB\u02FC\u02FD\u02FE\u02FF"sv},
+ {u8"\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032A\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF"sv,
+ u8"\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032A\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341\u0342\u0343\u0344\u03B9\u0346\u0347\u0348\u0349\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036A\u036B\u036C\u036D\u036E\u036F\u0371\u0371\u0373\u0373\u0374\u0375\u0377\u0377\u0378\u0379\u037A\u037B\u037C\u037D\u037E\u03F3\u0380\u0381\u0382\u0383\u0384\u0385\u03AC\u0387\u03AD\u03AE\u03AF\u038B\u03CC\u038D\u03CD\u03CE\u0390\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03A2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\u03D7\u03B2\u03B8\u03D2\u03D3\u03D4\u03C6\u03C0\u03D7\u03D9\u03D9\u03DB\u03DB\u03DD\u03DD\u03DF\u03DF\u03E1\u03E1\u03E3\u03E3\u03E5\u03E5\u03E7\u03E7\u03E9\u03E9\u03EB\u03EB\u03ED\u03ED\u03EF\u03EF\u03BA\u03C1\u03F2\u03F3\u03B8\u03B5\u03F6\u03F8\u03F8\u03F2\u03FB\u03FB\u03FC\u037B\u037C\u037D"sv},
+ {u8"\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF"sv,
+ u8"\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u045D\u045E\u045F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u045D\u045E\u045F\u0461\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469\u0469\u046B\u046B\u046D\u046D\u046F\u046F\u0471\u0471\u0473\u0473\u0475\u0475\u0477\u0477\u0479\u0479\u047B\u047B\u047D\u047D\u047F\u047F\u0481\u0481\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489\u048B\u048B\u048D\u048D\u048F\u048F\u0491\u0491\u0493\u0493\u0495\u0495\u0497\u0497\u0499\u0499\u049B\u049B\u049D\u049D\u049F\u049F\u04A1\u04A1\u04A3\u04A3\u04A5\u04A5\u04A7\u04A7\u04A9\u04A9\u04AB\u04AB\u04AD\u04AD\u04AF\u04AF\u04B1\u04B1\u04B3\u04B3\u04B5\u04B5\u04B7\u04B7\u04B9\u04B9\u04BB\u04BB\u04BD\u04BD\u04BF\u04BF\u04CF\u04C2\u04C2\u04C4\u04C4\u04C6\u04C6\u04C8\u04C8\u04CA\u04CA\u04CC\u04CC\u04CE\u04CE\u04CF\u04D1\u04D1\u04D3\u04D3\u04D5\u04D5\u04D7\u04D7\u04D9\u04D9\u04DB\u04DB\u04DD\u04DD\u04DF\u04DF\u04E1\u04E1\u04E3\u04E3\u04E5\u04E5\u04E7\u04E7\u04E9\u04E9\u04EB\u04EB\u04ED\u04ED\u04EF\u04EF\u04F1\u04F1\u04F3\u04F3\u04F5\u04F5\u04F7\u04F7\u04F9\u04F9\u04FB\u04FB\u04FD\u04FD\u04FF\u04FF"sv},
+ {u8"\u0500\u0501\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF"sv,
+ u8"\u0501\u0501\u0503\u0503\u0505\u0505\u0507\u0507\u0509\u0509\u050B\u050B\u050D\u050D\u050F\u050F\u0511\u0511\u0513\u0513\u0515\u0515\u0517\u0517\u0519\u0519\u051B\u051B\u051D\u051D\u051F\u051F\u0521\u0521\u0523\u0523\u0525\u0525\u0527\u0527\u0529\u0529\u052B\u052B\u052D\u052D\u052F\u052F\u0530\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0557\u0558\u0559\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF"sv},
+ {u8"\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF"sv, u8"\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109A\u109B\u109C\u109D\u109E\u109F\u2D00\u2D01\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21\u2D22\u2D23\u2D24\u2D25\u10C6\u2D27\u10C8\u10C9\u10CA\u10CB\u10CC\u2D2D\u10CE\u10CF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF"sv},
+ {u8"\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF"sv,
+ u8"\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F0\u13F1\u13F2\u13F3\u13F4\u13F5\u13FE\u13FF"sv},
+ {u8"\u1C00\u1C01\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF"sv,
+ u8"\u1C00\u1C01\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u0432\u0434\u043E\u0441\u0442\u0442\u044A\u0463\uA64B\u1C8A\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA\u1CBB\u1CBC\u10FD\u10FE\u10FF\u1CC0\u1CC1\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF"sv},
+ {u8"\u1E00\u1E01\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1\u1EF2\u1EF3\u1EF4\u1EF5\u1EF6\u1EF7\u1EF8\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u1EFE\u1EFF"sv,
+ u8"\u1E01\u1E01\u1E03\u1E03\u1E05\u1E05\u1E07\u1E07\u1E09\u1E09\u1E0B\u1E0B\u1E0D\u1E0D\u1E0F\u1E0F\u1E11\u1E11\u1E13\u1E13\u1E15\u1E15\u1E17\u1E17\u1E19\u1E19\u1E1B\u1E1B\u1E1D\u1E1D\u1E1F\u1E1F\u1E21\u1E21\u1E23\u1E23\u1E25\u1E25\u1E27\u1E27\u1E29\u1E29\u1E2B\u1E2B\u1E2D\u1E2D\u1E2F\u1E2F\u1E31\u1E31\u1E33\u1E33\u1E35\u1E35\u1E37\u1E37\u1E39\u1E39\u1E3B\u1E3B\u1E3D\u1E3D\u1E3F\u1E3F\u1E41\u1E41\u1E43\u1E43\u1E45\u1E45\u1E47\u1E47\u1E49\u1E49\u1E4B\u1E4B\u1E4D\u1E4D\u1E4F\u1E4F\u1E51\u1E51\u1E53\u1E53\u1E55\u1E55\u1E57\u1E57\u1E59\u1E59\u1E5B\u1E5B\u1E5D\u1E5D\u1E5F\u1E5F\u1E61\u1E61\u1E63\u1E63\u1E65\u1E65\u1E67\u1E67\u1E69\u1E69\u1E6B\u1E6B\u1E6D\u1E6D\u1E6F\u1E6F\u1E71\u1E71\u1E73\u1E73\u1E75\u1E75\u1E77\u1E77\u1E79\u1E79\u1E7B\u1E7B\u1E7D\u1E7D\u1E7F\u1E7F\u1E81\u1E81\u1E83\u1E83\u1E85\u1E85\u1E87\u1E87\u1E89\u1E89\u1E8B\u1E8B\u1E8D\u1E8D\u1E8F\u1E8F\u1E91\u1E91\u1E93\u1E93\u1E95\u1E95\u1E96\u1E97\u1E98\u1E99\u1E9A\u1E61\u1E9C\u1E9D\u00DF\u1E9F\u1EA1\u1EA1\u1EA3\u1EA3\u1EA5\u1EA5\u1EA7\u1EA7\u1EA9\u1EA9\u1EAB\u1EAB\u1EAD\u1EAD\u1EAF\u1EAF\u1EB1\u1EB1\u1EB3\u1EB3\u1EB5\u1EB5\u1EB7\u1EB7\u1EB9\u1EB9\u1EBB\u1EBB\u1EBD\u1EBD\u1EBF\u1EBF\u1EC1\u1EC1\u1EC3\u1EC3\u1EC5\u1EC5\u1EC7\u1EC7\u1EC9\u1EC9\u1ECB\u1ECB\u1ECD\u1ECD\u1ECF\u1ECF\u1ED1\u1ED1\u1ED3\u1ED3\u1ED5\u1ED5\u1ED7\u1ED7\u1ED9\u1ED9\u1EDB\u1EDB\u1EDD\u1EDD\u1EDF\u1EDF\u1EE1\u1EE1\u1EE3\u1EE3\u1EE5\u1EE5\u1EE7\u1EE7\u1EE9\u1EE9\u1EEB\u1EEB\u1EED\u1EED\u1EEF\u1EEF\u1EF1\u1EF1\u1EF3\u1EF3\u1EF5\u1EF5\u1EF7\u1EF7\u1EF9\u1EF9\u1EFB\u1EFB\u1EFD\u1EFD\u1EFF\u1EFF"sv},
+ {u8"\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79\u1F7A\u1F7B\u1F7C\u1F7D\u1F7E\u1F7F\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0\u1FD1\u1FD2\u1FD3\u1FD4\u1FD5\u1FD6\u1FD7\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u1FE4\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC\u1FED\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB\u1FFC\u1FFD\u1FFE\u1FFF"sv,
+ u8"\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F1E\u1F1F\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45\u1F4E\u1F4F\u1F50\u1F51\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F51\u1F5A\u1F53\u1F5C\u1F55\u1F5E\u1F57\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F70\u1F71\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79\u1F7A\u1F7B\u1F7C\u1F7D\u1F7E\u1F7F\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB0\u1FB1\u1F70\u1F71\u1FB3\u1FBD\u03B9\u1FBF\u1FC0\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1F72\u1F73\u1F74\u1F75\u1FC3\u1FCD\u1FCE\u1FCF\u1FD0\u1FD1\u1FD2\u0390\u1FD4\u1FD5\u1FD6\u1FD7\u1FD0\u1FD1\u1F76\u1F77\u1FDC\u1FDD\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u03B0\u1FE4\u1FE5\u1FE6\u1FE7\u1FE0\u1FE1\u1F7A\u1F7B\u1FE5\u1FED\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3\u1FF4\u1FF5\u1FF6\u1FF7\u1F78\u1F79\u1F7C\u1F7D\u1FF3\u1FFD\u1FFE\u1FFF"sv},
+ {u8"\u2100\u2101\u2102\u2103\u2104\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C\u211D\u211E\u211F\u2120\u2121\u2122\u2123\u2124\u2125\u2126\u2127\u2128\u2129\u212A\u212B\u212C\u212D\u212E\u212F\u2130\u2131\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198\u2199\u219A\u219B\u219C\u219D\u219E\u219F\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"sv,
+ u8"\u2100\u2101\u2102\u2103\u2104\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C\u211D\u211E\u211F\u2120\u2121\u2122\u2123\u2124\u2125\u03C9\u2127\u2128\u2129\u006B\u00E5\u212C\u212D\u212E\u212F\u2130\u2131\u214E\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180\u2181\u2182\u2184\u2184\u2185\u2186\u2187\u2188\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198\u2199\u219A\u219B\u219C\u219D\u219E\u219F\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"sv},
+ {u8"\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"sv,
+ u8"\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"sv},
+ {u8"\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u2C61\u2C62\u2C63\u2C64\u2C65\u2C66\u2C67\u2C68\u2C69\u2C6A\u2C6B\u2C6C\u2C6D\u2C6E\u2C6F\u2C70\u2C71\u2C72\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A\u2C7B\u2C7C\u2C7D\u2C7E\u2C7F\u2C80\u2C81\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF"sv,
+ u8"\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C61\u2C61\u026B\u1D7D\u027D\u2C65\u2C66\u2C68\u2C68\u2C6A\u2C6A\u2C6C\u2C6C\u0251\u0271\u0250\u0252\u2C71\u2C73\u2C73\u2C74\u2C76\u2C76\u2C77\u2C78\u2C79\u2C7A\u2C7B\u2C7C\u2C7D\u023F\u0240\u2C81\u2C81\u2C83\u2C83\u2C85\u2C85\u2C87\u2C87\u2C89\u2C89\u2C8B\u2C8B\u2C8D\u2C8D\u2C8F\u2C8F\u2C91\u2C91\u2C93\u2C93\u2C95\u2C95\u2C97\u2C97\u2C99\u2C99\u2C9B\u2C9B\u2C9D\u2C9D\u2C9F\u2C9F\u2CA1\u2CA1\u2CA3\u2CA3\u2CA5\u2CA5\u2CA7\u2CA7\u2CA9\u2CA9\u2CAB\u2CAB\u2CAD\u2CAD\u2CAF\u2CAF\u2CB1\u2CB1\u2CB3\u2CB3\u2CB5\u2CB5\u2CB7\u2CB7\u2CB9\u2CB9\u2CBB\u2CBB\u2CBD\u2CBD\u2CBF\u2CBF\u2CC1\u2CC1\u2CC3\u2CC3\u2CC5\u2CC5\u2CC7\u2CC7\u2CC9\u2CC9\u2CCB\u2CCB\u2CCD\u2CCD\u2CCF\u2CCF\u2CD1\u2CD1\u2CD3\u2CD3\u2CD5\u2CD5\u2CD7\u2CD7\u2CD9\u2CD9\u2CDB\u2CDB\u2CDD\u2CDD\u2CDF\u2CDF\u2CE1\u2CE1\u2CE3\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9\u2CEA\u2CEC\u2CEC\u2CEE\u2CEE\u2CEF\u2CF0\u2CF1\u2CF3\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF"sv},
+ {u8"\uA600\uA601\uA602\uA603\uA604\uA605\uA606\uA607\uA608\uA609\uA60A\uA60B\uA60C\uA60D\uA60E\uA60F\uA610\uA611\uA612\uA613\uA614\uA615\uA616\uA617\uA618\uA619\uA61A\uA61B\uA61C\uA61D\uA61E\uA61F\uA620\uA621\uA622\uA623\uA624\uA625\uA626\uA627\uA628\uA629\uA62A\uA62B\uA62C\uA62D\uA62E\uA62F\uA630\uA631\uA632\uA633\uA634\uA635\uA636\uA637\uA638\uA639\uA63A\uA63B\uA63C\uA63D\uA63E\uA63F\uA640\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D\uA67E\uA67F\uA680\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0\uA6D1\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9\uA6DA\uA6DB\uA6DC\uA6DD\uA6DE\uA6DF\uA6E0\uA6E1\uA6E2\uA6E3\uA6E4\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F2\uA6F3\uA6F4\uA6F5\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE\uA6FF"sv,
+ u8"\uA600\uA601\uA602\uA603\uA604\uA605\uA606\uA607\uA608\uA609\uA60A\uA60B\uA60C\uA60D\uA60E\uA60F\uA610\uA611\uA612\uA613\uA614\uA615\uA616\uA617\uA618\uA619\uA61A\uA61B\uA61C\uA61D\uA61E\uA61F\uA620\uA621\uA622\uA623\uA624\uA625\uA626\uA627\uA628\uA629\uA62A\uA62B\uA62C\uA62D\uA62E\uA62F\uA630\uA631\uA632\uA633\uA634\uA635\uA636\uA637\uA638\uA639\uA63A\uA63B\uA63C\uA63D\uA63E\uA63F\uA641\uA641\uA643\uA643\uA645\uA645\uA647\uA647\uA649\uA649\uA64B\uA64B\uA64D\uA64D\uA64F\uA64F\uA651\uA651\uA653\uA653\uA655\uA655\uA657\uA657\uA659\uA659\uA65B\uA65B\uA65D\uA65D\uA65F\uA65F\uA661\uA661\uA663\uA663\uA665\uA665\uA667\uA667\uA669\uA669\uA66B\uA66B\uA66D\uA66D\uA66E\uA66F\uA670\uA671\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D\uA67E\uA67F\uA681\uA681\uA683\uA683\uA685\uA685\uA687\uA687\uA689\uA689\uA68B\uA68B\uA68D\uA68D\uA68F\uA68F\uA691\uA691\uA693\uA693\uA695\uA695\uA697\uA697\uA699\uA699\uA69B\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0\uA6D1\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9\uA6DA\uA6DB\uA6DC\uA6DD\uA6DE\uA6DF\uA6E0\uA6E1\uA6E2\uA6E3\uA6E4\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F2\uA6F3\uA6F4\uA6F5\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE\uA6FF"sv},
+ {u8"\uA700\uA701\uA702\uA703\uA704\uA705\uA706\uA707\uA708\uA709\uA70A\uA70B\uA70C\uA70D\uA70E\uA70F\uA710\uA711\uA712\uA713\uA714\uA715\uA716\uA717\uA718\uA719\uA71A\uA71B\uA71C\uA71D\uA71E\uA71F\uA720\uA721\uA722\uA723\uA724\uA725\uA726\uA727\uA728\uA729\uA72A\uA72B\uA72C\uA72D\uA72E\uA72F\uA730\uA731\uA732\uA733\uA734\uA735\uA736\uA737\uA738\uA739\uA73A\uA73B\uA73C\uA73D\uA73E\uA73F\uA740\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D\uA77E\uA77F\uA780\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D7\uA7D8\uA7D9\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1\uA7F2\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA\uA7FB\uA7FC\uA7FD\uA7FE\uA7FF"sv,
+ u8"\uA700\uA701\uA702\uA703\uA704\uA705\uA706\uA707\uA708\uA709\uA70A\uA70B\uA70C\uA70D\uA70E\uA70F\uA710\uA711\uA712\uA713\uA714\uA715\uA716\uA717\uA718\uA719\uA71A\uA71B\uA71C\uA71D\uA71E\uA71F\uA720\uA721\uA723\uA723\uA725\uA725\uA727\uA727\uA729\uA729\uA72B\uA72B\uA72D\uA72D\uA72F\uA72F\uA730\uA731\uA733\uA733\uA735\uA735\uA737\uA737\uA739\uA739\uA73B\uA73B\uA73D\uA73D\uA73F\uA73F\uA741\uA741\uA743\uA743\uA745\uA745\uA747\uA747\uA749\uA749\uA74B\uA74B\uA74D\uA74D\uA74F\uA74F\uA751\uA751\uA753\uA753\uA755\uA755\uA757\uA757\uA759\uA759\uA75B\uA75B\uA75D\uA75D\uA75F\uA75F\uA761\uA761\uA763\uA763\uA765\uA765\uA767\uA767\uA769\uA769\uA76B\uA76B\uA76D\uA76D\uA76F\uA76F\uA770\uA771\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA77A\uA77A\uA77C\uA77C\u1D79\uA77F\uA77F\uA781\uA781\uA783\uA783\uA785\uA785\uA787\uA787\uA788\uA789\uA78A\uA78C\uA78C\u0265\uA78E\uA78F\uA791\uA791\uA793\uA793\uA794\uA795\uA797\uA797\uA799\uA799\uA79B\uA79B\uA79D\uA79D\uA79F\uA79F\uA7A1\uA7A1\uA7A3\uA7A3\uA7A5\uA7A5\uA7A7\uA7A7\uA7A9\uA7A9\u0266\u025C\u0261\u026C\u026A\uA7AF\u029E\u0287\u029D\uAB53\uA7B5\uA7B5\uA7B7\uA7B7\uA7B9\uA7B9\uA7BB\uA7BB\uA7BD\uA7BD\uA7BF\uA7BF\uA7C1\uA7C1\uA7C3\uA7C3\uA794\u0282\u1D8E\uA7C8\uA7C8\uA7CA\uA7CA\u0264\uA7CD\uA7CD\uA7CE\uA7CF\uA7D1\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D7\uA7D7\uA7D9\uA7D9\uA7DB\uA7DB\u019B\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1\uA7F2\uA7F3\uA7F4\uA7F6\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA\uA7FB\uA7FC\uA7FD\uA7FE\uA7FF"sv},
+ {u8"\uAB00\uAB01\uAB02\uAB03\uAB04\uAB05\uAB06\uAB07\uAB08\uAB09\uAB0A\uAB0B\uAB0C\uAB0D\uAB0E\uAB0F\uAB10\uAB11\uAB12\uAB13\uAB14\uAB15\uAB16\uAB17\uAB18\uAB19\uAB1A\uAB1B\uAB1C\uAB1D\uAB1E\uAB1F\uAB20\uAB21\uAB22\uAB23\uAB24\uAB25\uAB26\uAB27\uAB28\uAB29\uAB2A\uAB2B\uAB2C\uAB2D\uAB2E\uAB2F\uAB30\uAB31\uAB32\uAB33\uAB34\uAB35\uAB36\uAB37\uAB38\uAB39\uAB3A\uAB3B\uAB3C\uAB3D\uAB3E\uAB3F\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB52\uAB53\uAB54\uAB55\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D\uAB5E\uAB5F\uAB60\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70\uAB71\uAB72\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E\uAB7F\uAB80\uAB81\uAB82\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB92\uAB93\uAB94\uAB95\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D\uAB9E\uAB9F\uABA0\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA\uABFB\uABFC\uABFD\uABFE\uABFF"sv,
+ u8"\uAB00\uAB01\uAB02\uAB03\uAB04\uAB05\uAB06\uAB07\uAB08\uAB09\uAB0A\uAB0B\uAB0C\uAB0D\uAB0E\uAB0F\uAB10\uAB11\uAB12\uAB13\uAB14\uAB15\uAB16\uAB17\uAB18\uAB19\uAB1A\uAB1B\uAB1C\uAB1D\uAB1E\uAB1F\uAB20\uAB21\uAB22\uAB23\uAB24\uAB25\uAB26\uAB27\uAB28\uAB29\uAB2A\uAB2B\uAB2C\uAB2D\uAB2E\uAB2F\uAB30\uAB31\uAB32\uAB33\uAB34\uAB35\uAB36\uAB37\uAB38\uAB39\uAB3A\uAB3B\uAB3C\uAB3D\uAB3E\uAB3F\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB52\uAB53\uAB54\uAB55\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D\uAB5E\uAB5F\uAB60\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\uABC0\uABC1\uABC2\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA\uABFB\uABFC\uABFD\uABFE\uABFF"sv},
+ {u8"\uFB00\uFB01\uFB02\uFB03\uFB04\uFB05\uFB06\uFB07\uFB08\uFB09\uFB0A\uFB0B\uFB0C\uFB0D\uFB0E\uFB0F\uFB10\uFB11\uFB12\uFB13\uFB14\uFB15\uFB16\uFB17\uFB18\uFB19\uFB1A\uFB1B\uFB1C\uFB1D\uFB1E\uFB1F\uFB20\uFB21\uFB22\uFB23\uFB24\uFB25\uFB26\uFB27\uFB28\uFB29\uFB2A\uFB2B\uFB2C\uFB2D\uFB2E\uFB2F\uFB30\uFB31\uFB32\uFB33\uFB34\uFB35\uFB36\uFB37\uFB38\uFB39\uFB3A\uFB3B\uFB3C\uFB3D\uFB3E\uFB3F\uFB40\uFB41\uFB42\uFB43\uFB44\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uFB5C\uFB5D\uFB5E\uFB5F\uFB60\uFB61\uFB62\uFB63\uFB64\uFB65\uFB66\uFB67\uFB68\uFB69\uFB6A\uFB6B\uFB6C\uFB6D\uFB6E\uFB6F\uFB70\uFB71\uFB72\uFB73\uFB74\uFB75\uFB76\uFB77\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uFB7E\uFB7F\uFB80\uFB81\uFB82\uFB83\uFB84\uFB85\uFB86\uFB87\uFB88\uFB89\uFB8A\uFB8B\uFB8C\uFB8D\uFB8E\uFB8F\uFB90\uFB91\uFB92\uFB93\uFB94\uFB95\uFB96\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uFB9D\uFB9E\uFB9F\uFBA0\uFBA1\uFBA2\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA\uFBFB\uFBFC\uFBFD\uFBFE\uFBFF"sv,
+ u8"\uFB00\uFB01\uFB02\uFB03\uFB04\uFB06\uFB06\uFB07\uFB08\uFB09\uFB0A\uFB0B\uFB0C\uFB0D\uFB0E\uFB0F\uFB10\uFB11\uFB12\uFB13\uFB14\uFB15\uFB16\uFB17\uFB18\uFB19\uFB1A\uFB1B\uFB1C\uFB1D\uFB1E\uFB1F\uFB20\uFB21\uFB22\uFB23\uFB24\uFB25\uFB26\uFB27\uFB28\uFB29\uFB2A\uFB2B\uFB2C\uFB2D\uFB2E\uFB2F\uFB30\uFB31\uFB32\uFB33\uFB34\uFB35\uFB36\uFB37\uFB38\uFB39\uFB3A\uFB3B\uFB3C\uFB3D\uFB3E\uFB3F\uFB40\uFB41\uFB42\uFB43\uFB44\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uFB5C\uFB5D\uFB5E\uFB5F\uFB60\uFB61\uFB62\uFB63\uFB64\uFB65\uFB66\uFB67\uFB68\uFB69\uFB6A\uFB6B\uFB6C\uFB6D\uFB6E\uFB6F\uFB70\uFB71\uFB72\uFB73\uFB74\uFB75\uFB76\uFB77\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uFB7E\uFB7F\uFB80\uFB81\uFB82\uFB83\uFB84\uFB85\uFB86\uFB87\uFB88\uFB89\uFB8A\uFB8B\uFB8C\uFB8D\uFB8E\uFB8F\uFB90\uFB91\uFB92\uFB93\uFB94\uFB95\uFB96\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uFB9D\uFB9E\uFB9F\uFBA0\uFBA1\uFBA2\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA\uFBFB\uFBFC\uFBFD\uFBFE\uFBFF"sv},
+ {u8"\uFF00\uFF01\uFF02\uFF03\uFF04\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF3B\uFF3C\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFF5E\uFF5F\uFF60\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F\uFFA0\uFFA1\uFFA2\uFFA3\uFFA4\uFFA5\uFFA6\uFFA7\uFFA8\uFFA9\uFFAA\uFFAB\uFFAC\uFFAD\uFFAE\uFFAF\uFFB0\uFFB1\uFFB2\uFFB3\uFFB4\uFFB5\uFFB6\uFFB7\uFFB8\uFFB9\uFFBA\uFFBB\uFFBC\uFFBD\uFFBE\uFFBF\uFFC0\uFFC1\uFFC2\uFFC3\uFFC4\uFFC5\uFFC6\uFFC7\uFFC8\uFFC9\uFFCA\uFFCB\uFFCC\uFFCD\uFFCE\uFFCF\uFFD0\uFFD1\uFFD2\uFFD3\uFFD4\uFFD5\uFFD6\uFFD7\uFFD8\uFFD9\uFFDA\uFFDB\uFFDC\uFFDD\uFFDE\uFFDF\uFFE0\uFFE1\uFFE2\uFFE3\uFFE4\uFFE5\uFFE6\uFFE7\uFFE8\uFFE9\uFFEA\uFFEB\uFFEC\uFFED\uFFEE\uFFEF\uFFF0\uFFF1\uFFF2\uFFF3\uFFF4\uFFF5\uFFF6\uFFF7\uFFF8\uFFF9\uFFFA\uFFFB\uFFFC\uFFFD\uFFFE\uFFFF"sv,
+ u8"\uFF00\uFF01\uFF02\uFF03\uFF04\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF3B\uFF3C\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFF5E\uFF5F\uFF60\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F\uFFA0\uFFA1\uFFA2\uFFA3\uFFA4\uFFA5\uFFA6\uFFA7\uFFA8\uFFA9\uFFAA\uFFAB\uFFAC\uFFAD\uFFAE\uFFAF\uFFB0\uFFB1\uFFB2\uFFB3\uFFB4\uFFB5\uFFB6\uFFB7\uFFB8\uFFB9\uFFBA\uFFBB\uFFBC\uFFBD\uFFBE\uFFBF\uFFC0\uFFC1\uFFC2\uFFC3\uFFC4\uFFC5\uFFC6\uFFC7\uFFC8\uFFC9\uFFCA\uFFCB\uFFCC\uFFCD\uFFCE\uFFCF\uFFD0\uFFD1\uFFD2\uFFD3\uFFD4\uFFD5\uFFD6\uFFD7\uFFD8\uFFD9\uFFDA\uFFDB\uFFDC\uFFDD\uFFDE\uFFDF\uFFE0\uFFE1\uFFE2\uFFE3\uFFE4\uFFE5\uFFE6\uFFE7\uFFE8\uFFE9\uFFEA\uFFEB\uFFEC\uFFED\uFFEE\uFFEF\uFFF0\uFFF1\uFFF2\uFFF3\uFFF4\uFFF5\uFFF6\uFFF7\uFFF8\uFFF9\uFFFA\uFFFB\uFFFC\uFFFD\uFFFE\uFFFF"sv},
+ {u8"\U00010400\U00010401\U00010402\U00010403\U00010404\U00010405\U00010406\U00010407\U00010408\U00010409\U0001040A\U0001040B\U0001040C\U0001040D\U0001040E\U0001040F\U00010410\U00010411\U00010412\U00010413\U00010414\U00010415\U00010416\U00010417\U00010418\U00010419\U0001041A\U0001041B\U0001041C\U0001041D\U0001041E\U0001041F\U00010420\U00010421\U00010422\U00010423\U00010424\U00010425\U00010426\U00010427\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E\U0001044F\U00010450\U00010451\U00010452\U00010453\U00010454\U00010455\U00010456\U00010457\U00010458\U00010459\U0001045A\U0001045B\U0001045C\U0001045D\U0001045E\U0001045F\U00010460\U00010461\U00010462\U00010463\U00010464\U00010465\U00010466\U00010467\U00010468\U00010469\U0001046A\U0001046B\U0001046C\U0001046D\U0001046E\U0001046F\U00010470\U00010471\U00010472\U00010473\U00010474\U00010475\U00010476\U00010477\U00010478\U00010479\U0001047A\U0001047B\U0001047C\U0001047D\U0001047E\U0001047F\U00010480\U00010481\U00010482\U00010483\U00010484\U00010485\U00010486\U00010487\U00010488\U00010489\U0001048A\U0001048B\U0001048C\U0001048D\U0001048E\U0001048F\U00010490\U00010491\U00010492\U00010493\U00010494\U00010495\U00010496\U00010497\U00010498\U00010499\U0001049A\U0001049B\U0001049C\U0001049D\U0001049E\U0001049F\U000104A0\U000104A1\U000104A2\U000104A3\U000104A4\U000104A5\U000104A6\U000104A7\U000104A8\U000104A9\U000104AA\U000104AB\U000104AC\U000104AD\U000104AE\U000104AF\U000104B0\U000104B1\U000104B2\U000104B3\U000104B4\U000104B5\U000104B6\U000104B7\U000104B8\U000104B9\U000104BA\U000104BB\U000104BC\U000104BD\U000104BE\U000104BF\U000104C0\U000104C1\U000104C2\U000104C3\U000104C4\U000104C5\U000104C6\U000104C7\U000104C8\U000104C9\U000104CA\U000104CB\U000104CC\U000104CD\U000104CE\U000104CF\U000104D0\U000104D1\U000104D2\U000104D3\U000104D4\U000104D5\U000104D6\U000104D7\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U000104FC\U000104FD\U000104FE\U000104FF"sv,
+ u8"\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E\U0001044F\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E\U0001044F\U00010450\U00010451\U00010452\U00010453\U00010454\U00010455\U00010456\U00010457\U00010458\U00010459\U0001045A\U0001045B\U0001045C\U0001045D\U0001045E\U0001045F\U00010460\U00010461\U00010462\U00010463\U00010464\U00010465\U00010466\U00010467\U00010468\U00010469\U0001046A\U0001046B\U0001046C\U0001046D\U0001046E\U0001046F\U00010470\U00010471\U00010472\U00010473\U00010474\U00010475\U00010476\U00010477\U00010478\U00010479\U0001047A\U0001047B\U0001047C\U0001047D\U0001047E\U0001047F\U00010480\U00010481\U00010482\U00010483\U00010484\U00010485\U00010486\U00010487\U00010488\U00010489\U0001048A\U0001048B\U0001048C\U0001048D\U0001048E\U0001048F\U00010490\U00010491\U00010492\U00010493\U00010494\U00010495\U00010496\U00010497\U00010498\U00010499\U0001049A\U0001049B\U0001049C\U0001049D\U0001049E\U0001049F\U000104A0\U000104A1\U000104A2\U000104A3\U000104A4\U000104A5\U000104A6\U000104A7\U000104A8\U000104A9\U000104AA\U000104AB\U000104AC\U000104AD\U000104AE\U000104AF\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U000104D4\U000104D5\U000104D6\U000104D7\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U000104FC\U000104FD\U000104FE\U000104FF"sv},
+ {u8"\U00010500\U00010501\U00010502\U00010503\U00010504\U00010505\U00010506\U00010507\U00010508\U00010509\U0001050A\U0001050B\U0001050C\U0001050D\U0001050E\U0001050F\U00010510\U00010511\U00010512\U00010513\U00010514\U00010515\U00010516\U00010517\U00010518\U00010519\U0001051A\U0001051B\U0001051C\U0001051D\U0001051E\U0001051F\U00010520\U00010521\U00010522\U00010523\U00010524\U00010525\U00010526\U00010527\U00010528\U00010529\U0001052A\U0001052B\U0001052C\U0001052D\U0001052E\U0001052F\U00010530\U00010531\U00010532\U00010533\U00010534\U00010535\U00010536\U00010537\U00010538\U00010539\U0001053A\U0001053B\U0001053C\U0001053D\U0001053E\U0001053F\U00010540\U00010541\U00010542\U00010543\U00010544\U00010545\U00010546\U00010547\U00010548\U00010549\U0001054A\U0001054B\U0001054C\U0001054D\U0001054E\U0001054F\U00010550\U00010551\U00010552\U00010553\U00010554\U00010555\U00010556\U00010557\U00010558\U00010559\U0001055A\U0001055B\U0001055C\U0001055D\U0001055E\U0001055F\U00010560\U00010561\U00010562\U00010563\U00010564\U00010565\U00010566\U00010567\U00010568\U00010569\U0001056A\U0001056B\U0001056C\U0001056D\U0001056E\U0001056F\U00010570\U00010571\U00010572\U00010573\U00010574\U00010575\U00010576\U00010577\U00010578\U00010579\U0001057A\U0001057B\U0001057C\U0001057D\U0001057E\U0001057F\U00010580\U00010581\U00010582\U00010583\U00010584\U00010585\U00010586\U00010587\U00010588\U00010589\U0001058A\U0001058B\U0001058C\U0001058D\U0001058E\U0001058F\U00010590\U00010591\U00010592\U00010593\U00010594\U00010595\U00010596\U00010597\U00010598\U00010599\U0001059A\U0001059B\U0001059C\U0001059D\U0001059E\U0001059F\U000105A0\U000105A1\U000105A2\U000105A3\U000105A4\U000105A5\U000105A6\U000105A7\U000105A8\U000105A9\U000105AA\U000105AB\U000105AC\U000105AD\U000105AE\U000105AF\U000105B0\U000105B1\U000105B2\U000105B3\U000105B4\U000105B5\U000105B6\U000105B7\U000105B8\U000105B9\U000105BA\U000105BB\U000105BC\U000105BD\U000105BE\U000105BF\U000105C0\U000105C1\U000105C2\U000105C3\U000105C4\U000105C5\U000105C6\U000105C7\U000105C8\U000105C9\U000105CA\U000105CB\U000105CC\U000105CD\U000105CE\U000105CF\U000105D0\U000105D1\U000105D2\U000105D3\U000105D4\U000105D5\U000105D6\U000105D7\U000105D8\U000105D9\U000105DA\U000105DB\U000105DC\U000105DD\U000105DE\U000105DF\U000105E0\U000105E1\U000105E2\U000105E3\U000105E4\U000105E5\U000105E6\U000105E7\U000105E8\U000105E9\U000105EA\U000105EB\U000105EC\U000105ED\U000105EE\U000105EF\U000105F0\U000105F1\U000105F2\U000105F3\U000105F4\U000105F5\U000105F6\U000105F7\U000105F8\U000105F9\U000105FA\U000105FB\U000105FC\U000105FD\U000105FE\U000105FF"sv,
+ u8"\U00010500\U00010501\U00010502\U00010503\U00010504\U00010505\U00010506\U00010507\U00010508\U00010509\U0001050A\U0001050B\U0001050C\U0001050D\U0001050E\U0001050F\U00010510\U00010511\U00010512\U00010513\U00010514\U00010515\U00010516\U00010517\U00010518\U00010519\U0001051A\U0001051B\U0001051C\U0001051D\U0001051E\U0001051F\U00010520\U00010521\U00010522\U00010523\U00010524\U00010525\U00010526\U00010527\U00010528\U00010529\U0001052A\U0001052B\U0001052C\U0001052D\U0001052E\U0001052F\U00010530\U00010531\U00010532\U00010533\U00010534\U00010535\U00010536\U00010537\U00010538\U00010539\U0001053A\U0001053B\U0001053C\U0001053D\U0001053E\U0001053F\U00010540\U00010541\U00010542\U00010543\U00010544\U00010545\U00010546\U00010547\U00010548\U00010549\U0001054A\U0001054B\U0001054C\U0001054D\U0001054E\U0001054F\U00010550\U00010551\U00010552\U00010553\U00010554\U00010555\U00010556\U00010557\U00010558\U00010559\U0001055A\U0001055B\U0001055C\U0001055D\U0001055E\U0001055F\U00010560\U00010561\U00010562\U00010563\U00010564\U00010565\U00010566\U00010567\U00010568\U00010569\U0001056A\U0001056B\U0001056C\U0001056D\U0001056E\U0001056F\U00010597\U00010598\U00010599\U0001059A\U0001059B\U0001059C\U0001059D\U0001059E\U0001059F\U000105A0\U000105A1\U0001057B\U000105A3\U000105A4\U000105A5\U000105A6\U000105A7\U000105A8\U000105A9\U000105AA\U000105AB\U000105AC\U000105AD\U000105AE\U000105AF\U000105B0\U000105B1\U0001058B\U000105B3\U000105B4\U000105B5\U000105B6\U000105B7\U000105B8\U000105B9\U00010593\U000105BB\U000105BC\U00010596\U00010597\U00010598\U00010599\U0001059A\U0001059B\U0001059C\U0001059D\U0001059E\U0001059F\U000105A0\U000105A1\U000105A2\U000105A3\U000105A4\U000105A5\U000105A6\U000105A7\U000105A8\U000105A9\U000105AA\U000105AB\U000105AC\U000105AD\U000105AE\U000105AF\U000105B0\U000105B1\U000105B2\U000105B3\U000105B4\U000105B5\U000105B6\U000105B7\U000105B8\U000105B9\U000105BA\U000105BB\U000105BC\U000105BD\U000105BE\U000105BF\U000105C0\U000105C1\U000105C2\U000105C3\U000105C4\U000105C5\U000105C6\U000105C7\U000105C8\U000105C9\U000105CA\U000105CB\U000105CC\U000105CD\U000105CE\U000105CF\U000105D0\U000105D1\U000105D2\U000105D3\U000105D4\U000105D5\U000105D6\U000105D7\U000105D8\U000105D9\U000105DA\U000105DB\U000105DC\U000105DD\U000105DE\U000105DF\U000105E0\U000105E1\U000105E2\U000105E3\U000105E4\U000105E5\U000105E6\U000105E7\U000105E8\U000105E9\U000105EA\U000105EB\U000105EC\U000105ED\U000105EE\U000105EF\U000105F0\U000105F1\U000105F2\U000105F3\U000105F4\U000105F5\U000105F6\U000105F7\U000105F8\U000105F9\U000105FA\U000105FB\U000105FC\U000105FD\U000105FE\U000105FF"sv},
+ {u8"\U00010C00\U00010C01\U00010C02\U00010C03\U00010C04\U00010C05\U00010C06\U00010C07\U00010C08\U00010C09\U00010C0A\U00010C0B\U00010C0C\U00010C0D\U00010C0E\U00010C0F\U00010C10\U00010C11\U00010C12\U00010C13\U00010C14\U00010C15\U00010C16\U00010C17\U00010C18\U00010C19\U00010C1A\U00010C1B\U00010C1C\U00010C1D\U00010C1E\U00010C1F\U00010C20\U00010C21\U00010C22\U00010C23\U00010C24\U00010C25\U00010C26\U00010C27\U00010C28\U00010C29\U00010C2A\U00010C2B\U00010C2C\U00010C2D\U00010C2E\U00010C2F\U00010C30\U00010C31\U00010C32\U00010C33\U00010C34\U00010C35\U00010C36\U00010C37\U00010C38\U00010C39\U00010C3A\U00010C3B\U00010C3C\U00010C3D\U00010C3E\U00010C3F\U00010C40\U00010C41\U00010C42\U00010C43\U00010C44\U00010C45\U00010C46\U00010C47\U00010C48\U00010C49\U00010C4A\U00010C4B\U00010C4C\U00010C4D\U00010C4E\U00010C4F\U00010C50\U00010C51\U00010C52\U00010C53\U00010C54\U00010C55\U00010C56\U00010C57\U00010C58\U00010C59\U00010C5A\U00010C5B\U00010C5C\U00010C5D\U00010C5E\U00010C5F\U00010C60\U00010C61\U00010C62\U00010C63\U00010C64\U00010C65\U00010C66\U00010C67\U00010C68\U00010C69\U00010C6A\U00010C6B\U00010C6C\U00010C6D\U00010C6E\U00010C6F\U00010C70\U00010C71\U00010C72\U00010C73\U00010C74\U00010C75\U00010C76\U00010C77\U00010C78\U00010C79\U00010C7A\U00010C7B\U00010C7C\U00010C7D\U00010C7E\U00010C7F\U00010C80\U00010C81\U00010C82\U00010C83\U00010C84\U00010C85\U00010C86\U00010C87\U00010C88\U00010C89\U00010C8A\U00010C8B\U00010C8C\U00010C8D\U00010C8E\U00010C8F\U00010C90\U00010C91\U00010C92\U00010C93\U00010C94\U00010C95\U00010C96\U00010C97\U00010C98\U00010C99\U00010C9A\U00010C9B\U00010C9C\U00010C9D\U00010C9E\U00010C9F\U00010CA0\U00010CA1\U00010CA2\U00010CA3\U00010CA4\U00010CA5\U00010CA6\U00010CA7\U00010CA8\U00010CA9\U00010CAA\U00010CAB\U00010CAC\U00010CAD\U00010CAE\U00010CAF\U00010CB0\U00010CB1\U00010CB2\U00010CB3\U00010CB4\U00010CB5\U00010CB6\U00010CB7\U00010CB8\U00010CB9\U00010CBA\U00010CBB\U00010CBC\U00010CBD\U00010CBE\U00010CBF\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U00010CF3\U00010CF4\U00010CF5\U00010CF6\U00010CF7\U00010CF8\U00010CF9\U00010CFA\U00010CFB\U00010CFC\U00010CFD\U00010CFE\U00010CFF"sv,
+ u8"\U00010C00\U00010C01\U00010C02\U00010C03\U00010C04\U00010C05\U00010C06\U00010C07\U00010C08\U00010C09\U00010C0A\U00010C0B\U00010C0C\U00010C0D\U00010C0E\U00010C0F\U00010C10\U00010C11\U00010C12\U00010C13\U00010C14\U00010C15\U00010C16\U00010C17\U00010C18\U00010C19\U00010C1A\U00010C1B\U00010C1C\U00010C1D\U00010C1E\U00010C1F\U00010C20\U00010C21\U00010C22\U00010C23\U00010C24\U00010C25\U00010C26\U00010C27\U00010C28\U00010C29\U00010C2A\U00010C2B\U00010C2C\U00010C2D\U00010C2E\U00010C2F\U00010C30\U00010C31\U00010C32\U00010C33\U00010C34\U00010C35\U00010C36\U00010C37\U00010C38\U00010C39\U00010C3A\U00010C3B\U00010C3C\U00010C3D\U00010C3E\U00010C3F\U00010C40\U00010C41\U00010C42\U00010C43\U00010C44\U00010C45\U00010C46\U00010C47\U00010C48\U00010C49\U00010C4A\U00010C4B\U00010C4C\U00010C4D\U00010C4E\U00010C4F\U00010C50\U00010C51\U00010C52\U00010C53\U00010C54\U00010C55\U00010C56\U00010C57\U00010C58\U00010C59\U00010C5A\U00010C5B\U00010C5C\U00010C5D\U00010C5E\U00010C5F\U00010C60\U00010C61\U00010C62\U00010C63\U00010C64\U00010C65\U00010C66\U00010C67\U00010C68\U00010C69\U00010C6A\U00010C6B\U00010C6C\U00010C6D\U00010C6E\U00010C6F\U00010C70\U00010C71\U00010C72\U00010C73\U00010C74\U00010C75\U00010C76\U00010C77\U00010C78\U00010C79\U00010C7A\U00010C7B\U00010C7C\U00010C7D\U00010C7E\U00010C7F\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U00010CB3\U00010CB4\U00010CB5\U00010CB6\U00010CB7\U00010CB8\U00010CB9\U00010CBA\U00010CBB\U00010CBC\U00010CBD\U00010CBE\U00010CBF\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U00010CF3\U00010CF4\U00010CF5\U00010CF6\U00010CF7\U00010CF8\U00010CF9\U00010CFA\U00010CFB\U00010CFC\U00010CFD\U00010CFE\U00010CFF"sv},
+ {u8"\U00010D00\U00010D01\U00010D02\U00010D03\U00010D04\U00010D05\U00010D06\U00010D07\U00010D08\U00010D09\U00010D0A\U00010D0B\U00010D0C\U00010D0D\U00010D0E\U00010D0F\U00010D10\U00010D11\U00010D12\U00010D13\U00010D14\U00010D15\U00010D16\U00010D17\U00010D18\U00010D19\U00010D1A\U00010D1B\U00010D1C\U00010D1D\U00010D1E\U00010D1F\U00010D20\U00010D21\U00010D22\U00010D23\U00010D24\U00010D25\U00010D26\U00010D27\U00010D28\U00010D29\U00010D2A\U00010D2B\U00010D2C\U00010D2D\U00010D2E\U00010D2F\U00010D30\U00010D31\U00010D32\U00010D33\U00010D34\U00010D35\U00010D36\U00010D37\U00010D38\U00010D39\U00010D3A\U00010D3B\U00010D3C\U00010D3D\U00010D3E\U00010D3F\U00010D40\U00010D41\U00010D42\U00010D43\U00010D44\U00010D45\U00010D46\U00010D47\U00010D48\U00010D49\U00010D4A\U00010D4B\U00010D4C\U00010D4D\U00010D4E\U00010D4F\U00010D50\U00010D51\U00010D52\U00010D53\U00010D54\U00010D55\U00010D56\U00010D57\U00010D58\U00010D59\U00010D5A\U00010D5B\U00010D5C\U00010D5D\U00010D5E\U00010D5F\U00010D60\U00010D61\U00010D62\U00010D63\U00010D64\U00010D65\U00010D66\U00010D67\U00010D68\U00010D69\U00010D6A\U00010D6B\U00010D6C\U00010D6D\U00010D6E\U00010D6F\U00010D70\U00010D71\U00010D72\U00010D73\U00010D74\U00010D75\U00010D76\U00010D77\U00010D78\U00010D79\U00010D7A\U00010D7B\U00010D7C\U00010D7D\U00010D7E\U00010D7F\U00010D80\U00010D81\U00010D82\U00010D83\U00010D84\U00010D85\U00010D86\U00010D87\U00010D88\U00010D89\U00010D8A\U00010D8B\U00010D8C\U00010D8D\U00010D8E\U00010D8F\U00010D90\U00010D91\U00010D92\U00010D93\U00010D94\U00010D95\U00010D96\U00010D97\U00010D98\U00010D99\U00010D9A\U00010D9B\U00010D9C\U00010D9D\U00010D9E\U00010D9F\U00010DA0\U00010DA1\U00010DA2\U00010DA3\U00010DA4\U00010DA5\U00010DA6\U00010DA7\U00010DA8\U00010DA9\U00010DAA\U00010DAB\U00010DAC\U00010DAD\U00010DAE\U00010DAF\U00010DB0\U00010DB1\U00010DB2\U00010DB3\U00010DB4\U00010DB5\U00010DB6\U00010DB7\U00010DB8\U00010DB9\U00010DBA\U00010DBB\U00010DBC\U00010DBD\U00010DBE\U00010DBF\U00010DC0\U00010DC1\U00010DC2\U00010DC3\U00010DC4\U00010DC5\U00010DC6\U00010DC7\U00010DC8\U00010DC9\U00010DCA\U00010DCB\U00010DCC\U00010DCD\U00010DCE\U00010DCF\U00010DD0\U00010DD1\U00010DD2\U00010DD3\U00010DD4\U00010DD5\U00010DD6\U00010DD7\U00010DD8\U00010DD9\U00010DDA\U00010DDB\U00010DDC\U00010DDD\U00010DDE\U00010DDF\U00010DE0\U00010DE1\U00010DE2\U00010DE3\U00010DE4\U00010DE5\U00010DE6\U00010DE7\U00010DE8\U00010DE9\U00010DEA\U00010DEB\U00010DEC\U00010DED\U00010DEE\U00010DEF\U00010DF0\U00010DF1\U00010DF2\U00010DF3\U00010DF4\U00010DF5\U00010DF6\U00010DF7\U00010DF8\U00010DF9\U00010DFA\U00010DFB\U00010DFC\U00010DFD\U00010DFE\U00010DFF"sv, u8"\U00010D00\U00010D01\U00010D02\U00010D03\U00010D04\U00010D05\U00010D06\U00010D07\U00010D08\U00010D09\U00010D0A\U00010D0B\U00010D0C\U00010D0D\U00010D0E\U00010D0F\U00010D10\U00010D11\U00010D12\U00010D13\U00010D14\U00010D15\U00010D16\U00010D17\U00010D18\U00010D19\U00010D1A\U00010D1B\U00010D1C\U00010D1D\U00010D1E\U00010D1F\U00010D20\U00010D21\U00010D22\U00010D23\U00010D24\U00010D25\U00010D26\U00010D27\U00010D28\U00010D29\U00010D2A\U00010D2B\U00010D2C\U00010D2D\U00010D2E\U00010D2F\U00010D30\U00010D31\U00010D32\U00010D33\U00010D34\U00010D35\U00010D36\U00010D37\U00010D38\U00010D39\U00010D3A\U00010D3B\U00010D3C\U00010D3D\U00010D3E\U00010D3F\U00010D40\U00010D41\U00010D42\U00010D43\U00010D44\U00010D45\U00010D46\U00010D47\U00010D48\U00010D49\U00010D4A\U00010D4B\U00010D4C\U00010D4D\U00010D4E\U00010D4F\U00010D70\U00010D71\U00010D72\U00010D73\U00010D74\U00010D75\U00010D76\U00010D77\U00010D78\U00010D79\U00010D7A\U00010D7B\U00010D7C\U00010D7D\U00010D7E\U00010D7F\U00010D80\U00010D81\U00010D82\U00010D83\U00010D84\U00010D85\U00010D66\U00010D67\U00010D68\U00010D69\U00010D6A\U00010D6B\U00010D6C\U00010D6D\U00010D6E\U00010D6F\U00010D70\U00010D71\U00010D72\U00010D73\U00010D74\U00010D75\U00010D76\U00010D77\U00010D78\U00010D79\U00010D7A\U00010D7B\U00010D7C\U00010D7D\U00010D7E\U00010D7F\U00010D80\U00010D81\U00010D82\U00010D83\U00010D84\U00010D85\U00010D86\U00010D87\U00010D88\U00010D89\U00010D8A\U00010D8B\U00010D8C\U00010D8D\U00010D8E\U00010D8F\U00010D90\U00010D91\U00010D92\U00010D93\U00010D94\U00010D95\U00010D96\U00010D97\U00010D98\U00010D99\U00010D9A\U00010D9B\U00010D9C\U00010D9D\U00010D9E\U00010D9F\U00010DA0\U00010DA1\U00010DA2\U00010DA3\U00010DA4\U00010DA5\U00010DA6\U00010DA7\U00010DA8\U00010DA9\U00010DAA\U00010DAB\U00010DAC\U00010DAD\U00010DAE\U00010DAF\U00010DB0\U00010DB1\U00010DB2\U00010DB3\U00010DB4\U00010DB5\U00010DB6\U00010DB7\U00010DB8\U00010DB9\U00010DBA\U00010DBB\U00010DBC\U00010DBD\U00010DBE\U00010DBF\U00010DC0\U00010DC1\U00010DC2\U00010DC3\U00010DC4\U00010DC5\U00010DC6\U00010DC7\U00010DC8\U00010DC9\U00010DCA\U00010DCB\U00010DCC\U00010DCD\U00010DCE\U00010DCF\U00010DD0\U00010DD1\U00010DD2\U00010DD3\U00010DD4\U00010DD5\U00010DD6\U00010DD7\U00010DD8\U00010DD9\U00010DDA\U00010DDB\U00010DDC\U00010DDD\U00010DDE\U00010DDF\U00010DE0\U00010DE1\U00010DE2\U00010DE3\U00010DE4\U00010DE5\U00010DE6\U00010DE7\U00010DE8\U00010DE9\U00010DEA\U00010DEB\U00010DEC\U00010DED\U00010DEE\U00010DEF\U00010DF0\U00010DF1\U00010DF2\U00010DF3\U00010DF4\U00010DF5\U00010DF6\U00010DF7\U00010DF8\U00010DF9\U00010DFA\U00010DFB\U00010DFC\U00010DFD\U00010DFE\U00010DFF"sv},
+ {u8"\U00011800\U00011801\U00011802\U00011803\U00011804\U00011805\U00011806\U00011807\U00011808\U00011809\U0001180A\U0001180B\U0001180C\U0001180D\U0001180E\U0001180F\U00011810\U00011811\U00011812\U00011813\U00011814\U00011815\U00011816\U00011817\U00011818\U00011819\U0001181A\U0001181B\U0001181C\U0001181D\U0001181E\U0001181F\U00011820\U00011821\U00011822\U00011823\U00011824\U00011825\U00011826\U00011827\U00011828\U00011829\U0001182A\U0001182B\U0001182C\U0001182D\U0001182E\U0001182F\U00011830\U00011831\U00011832\U00011833\U00011834\U00011835\U00011836\U00011837\U00011838\U00011839\U0001183A\U0001183B\U0001183C\U0001183D\U0001183E\U0001183F\U00011840\U00011841\U00011842\U00011843\U00011844\U00011845\U00011846\U00011847\U00011848\U00011849\U0001184A\U0001184B\U0001184C\U0001184D\U0001184E\U0001184F\U00011850\U00011851\U00011852\U00011853\U00011854\U00011855\U00011856\U00011857\U00011858\U00011859\U0001185A\U0001185B\U0001185C\U0001185D\U0001185E\U0001185F\U00011860\U00011861\U00011862\U00011863\U00011864\U00011865\U00011866\U00011867\U00011868\U00011869\U0001186A\U0001186B\U0001186C\U0001186D\U0001186E\U0001186F\U00011870\U00011871\U00011872\U00011873\U00011874\U00011875\U00011876\U00011877\U00011878\U00011879\U0001187A\U0001187B\U0001187C\U0001187D\U0001187E\U0001187F\U00011880\U00011881\U00011882\U00011883\U00011884\U00011885\U00011886\U00011887\U00011888\U00011889\U0001188A\U0001188B\U0001188C\U0001188D\U0001188E\U0001188F\U00011890\U00011891\U00011892\U00011893\U00011894\U00011895\U00011896\U00011897\U00011898\U00011899\U0001189A\U0001189B\U0001189C\U0001189D\U0001189E\U0001189F\U000118A0\U000118A1\U000118A2\U000118A3\U000118A4\U000118A5\U000118A6\U000118A7\U000118A8\U000118A9\U000118AA\U000118AB\U000118AC\U000118AD\U000118AE\U000118AF\U000118B0\U000118B1\U000118B2\U000118B3\U000118B4\U000118B5\U000118B6\U000118B7\U000118B8\U000118B9\U000118BA\U000118BB\U000118BC\U000118BD\U000118BE\U000118BF\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF\U000118E0\U000118E1\U000118E2\U000118E3\U000118E4\U000118E5\U000118E6\U000118E7\U000118E8\U000118E9\U000118EA\U000118EB\U000118EC\U000118ED\U000118EE\U000118EF\U000118F0\U000118F1\U000118F2\U000118F3\U000118F4\U000118F5\U000118F6\U000118F7\U000118F8\U000118F9\U000118FA\U000118FB\U000118FC\U000118FD\U000118FE\U000118FF"sv, u8"\U00011800\U00011801\U00011802\U00011803\U00011804\U00011805\U00011806\U00011807\U00011808\U00011809\U0001180A\U0001180B\U0001180C\U0001180D\U0001180E\U0001180F\U00011810\U00011811\U00011812\U00011813\U00011814\U00011815\U00011816\U00011817\U00011818\U00011819\U0001181A\U0001181B\U0001181C\U0001181D\U0001181E\U0001181F\U00011820\U00011821\U00011822\U00011823\U00011824\U00011825\U00011826\U00011827\U00011828\U00011829\U0001182A\U0001182B\U0001182C\U0001182D\U0001182E\U0001182F\U00011830\U00011831\U00011832\U00011833\U00011834\U00011835\U00011836\U00011837\U00011838\U00011839\U0001183A\U0001183B\U0001183C\U0001183D\U0001183E\U0001183F\U00011840\U00011841\U00011842\U00011843\U00011844\U00011845\U00011846\U00011847\U00011848\U00011849\U0001184A\U0001184B\U0001184C\U0001184D\U0001184E\U0001184F\U00011850\U00011851\U00011852\U00011853\U00011854\U00011855\U00011856\U00011857\U00011858\U00011859\U0001185A\U0001185B\U0001185C\U0001185D\U0001185E\U0001185F\U00011860\U00011861\U00011862\U00011863\U00011864\U00011865\U00011866\U00011867\U00011868\U00011869\U0001186A\U0001186B\U0001186C\U0001186D\U0001186E\U0001186F\U00011870\U00011871\U00011872\U00011873\U00011874\U00011875\U00011876\U00011877\U00011878\U00011879\U0001187A\U0001187B\U0001187C\U0001187D\U0001187E\U0001187F\U00011880\U00011881\U00011882\U00011883\U00011884\U00011885\U00011886\U00011887\U00011888\U00011889\U0001188A\U0001188B\U0001188C\U0001188D\U0001188E\U0001188F\U00011890\U00011891\U00011892\U00011893\U00011894\U00011895\U00011896\U00011897\U00011898\U00011899\U0001189A\U0001189B\U0001189C\U0001189D\U0001189E\U0001189F\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF\U000118E0\U000118E1\U000118E2\U000118E3\U000118E4\U000118E5\U000118E6\U000118E7\U000118E8\U000118E9\U000118EA\U000118EB\U000118EC\U000118ED\U000118EE\U000118EF\U000118F0\U000118F1\U000118F2\U000118F3\U000118F4\U000118F5\U000118F6\U000118F7\U000118F8\U000118F9\U000118FA\U000118FB\U000118FC\U000118FD\U000118FE\U000118FF"sv},
+ {u8"\U00016E00\U00016E01\U00016E02\U00016E03\U00016E04\U00016E05\U00016E06\U00016E07\U00016E08\U00016E09\U00016E0A\U00016E0B\U00016E0C\U00016E0D\U00016E0E\U00016E0F\U00016E10\U00016E11\U00016E12\U00016E13\U00016E14\U00016E15\U00016E16\U00016E17\U00016E18\U00016E19\U00016E1A\U00016E1B\U00016E1C\U00016E1D\U00016E1E\U00016E1F\U00016E20\U00016E21\U00016E22\U00016E23\U00016E24\U00016E25\U00016E26\U00016E27\U00016E28\U00016E29\U00016E2A\U00016E2B\U00016E2C\U00016E2D\U00016E2E\U00016E2F\U00016E30\U00016E31\U00016E32\U00016E33\U00016E34\U00016E35\U00016E36\U00016E37\U00016E38\U00016E39\U00016E3A\U00016E3B\U00016E3C\U00016E3D\U00016E3E\U00016E3F\U00016E40\U00016E41\U00016E42\U00016E43\U00016E44\U00016E45\U00016E46\U00016E47\U00016E48\U00016E49\U00016E4A\U00016E4B\U00016E4C\U00016E4D\U00016E4E\U00016E4F\U00016E50\U00016E51\U00016E52\U00016E53\U00016E54\U00016E55\U00016E56\U00016E57\U00016E58\U00016E59\U00016E5A\U00016E5B\U00016E5C\U00016E5D\U00016E5E\U00016E5F\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F\U00016E80\U00016E81\U00016E82\U00016E83\U00016E84\U00016E85\U00016E86\U00016E87\U00016E88\U00016E89\U00016E8A\U00016E8B\U00016E8C\U00016E8D\U00016E8E\U00016E8F\U00016E90\U00016E91\U00016E92\U00016E93\U00016E94\U00016E95\U00016E96\U00016E97\U00016E98\U00016E99\U00016E9A\U00016E9B\U00016E9C\U00016E9D\U00016E9E\U00016E9F\U00016EA0\U00016EA1\U00016EA2\U00016EA3\U00016EA4\U00016EA5\U00016EA6\U00016EA7\U00016EA8\U00016EA9\U00016EAA\U00016EAB\U00016EAC\U00016EAD\U00016EAE\U00016EAF\U00016EB0\U00016EB1\U00016EB2\U00016EB3\U00016EB4\U00016EB5\U00016EB6\U00016EB7\U00016EB8\U00016EB9\U00016EBA\U00016EBB\U00016EBC\U00016EBD\U00016EBE\U00016EBF\U00016EC0\U00016EC1\U00016EC2\U00016EC3\U00016EC4\U00016EC5\U00016EC6\U00016EC7\U00016EC8\U00016EC9\U00016ECA\U00016ECB\U00016ECC\U00016ECD\U00016ECE\U00016ECF\U00016ED0\U00016ED1\U00016ED2\U00016ED3\U00016ED4\U00016ED5\U00016ED6\U00016ED7\U00016ED8\U00016ED9\U00016EDA\U00016EDB\U00016EDC\U00016EDD\U00016EDE\U00016EDF\U00016EE0\U00016EE1\U00016EE2\U00016EE3\U00016EE4\U00016EE5\U00016EE6\U00016EE7\U00016EE8\U00016EE9\U00016EEA\U00016EEB\U00016EEC\U00016EED\U00016EEE\U00016EEF\U00016EF0\U00016EF1\U00016EF2\U00016EF3\U00016EF4\U00016EF5\U00016EF6\U00016EF7\U00016EF8\U00016EF9\U00016EFA\U00016EFB\U00016EFC\U00016EFD\U00016EFE\U00016EFF"sv,
+ u8"\U00016E00\U00016E01\U00016E02\U00016E03\U00016E04\U00016E05\U00016E06\U00016E07\U00016E08\U00016E09\U00016E0A\U00016E0B\U00016E0C\U00016E0D\U00016E0E\U00016E0F\U00016E10\U00016E11\U00016E12\U00016E13\U00016E14\U00016E15\U00016E16\U00016E17\U00016E18\U00016E19\U00016E1A\U00016E1B\U00016E1C\U00016E1D\U00016E1E\U00016E1F\U00016E20\U00016E21\U00016E22\U00016E23\U00016E24\U00016E25\U00016E26\U00016E27\U00016E28\U00016E29\U00016E2A\U00016E2B\U00016E2C\U00016E2D\U00016E2E\U00016E2F\U00016E30\U00016E31\U00016E32\U00016E33\U00016E34\U00016E35\U00016E36\U00016E37\U00016E38\U00016E39\U00016E3A\U00016E3B\U00016E3C\U00016E3D\U00016E3E\U00016E3F\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F\U00016E80\U00016E81\U00016E82\U00016E83\U00016E84\U00016E85\U00016E86\U00016E87\U00016E88\U00016E89\U00016E8A\U00016E8B\U00016E8C\U00016E8D\U00016E8E\U00016E8F\U00016E90\U00016E91\U00016E92\U00016E93\U00016E94\U00016E95\U00016E96\U00016E97\U00016E98\U00016E99\U00016E9A\U00016E9B\U00016E9C\U00016E9D\U00016E9E\U00016E9F\U00016EA0\U00016EA1\U00016EA2\U00016EA3\U00016EA4\U00016EA5\U00016EA6\U00016EA7\U00016EA8\U00016EA9\U00016EAA\U00016EAB\U00016EAC\U00016EAD\U00016EAE\U00016EAF\U00016EB0\U00016EB1\U00016EB2\U00016EB3\U00016EB4\U00016EB5\U00016EB6\U00016EB7\U00016EB8\U00016EB9\U00016EBA\U00016EBB\U00016EBC\U00016EBD\U00016EBE\U00016EBF\U00016EC0\U00016EC1\U00016EC2\U00016EC3\U00016EC4\U00016EC5\U00016EC6\U00016EC7\U00016EC8\U00016EC9\U00016ECA\U00016ECB\U00016ECC\U00016ECD\U00016ECE\U00016ECF\U00016ED0\U00016ED1\U00016ED2\U00016ED3\U00016ED4\U00016ED5\U00016ED6\U00016ED7\U00016ED8\U00016ED9\U00016EDA\U00016EDB\U00016EDC\U00016EDD\U00016EDE\U00016EDF\U00016EE0\U00016EE1\U00016EE2\U00016EE3\U00016EE4\U00016EE5\U00016EE6\U00016EE7\U00016EE8\U00016EE9\U00016EEA\U00016EEB\U00016EEC\U00016EED\U00016EEE\U00016EEF\U00016EF0\U00016EF1\U00016EF2\U00016EF3\U00016EF4\U00016EF5\U00016EF6\U00016EF7\U00016EF8\U00016EF9\U00016EFA\U00016EFB\U00016EFC\U00016EFD\U00016EFE\U00016EFF"sv},
+ {u8"\U0001E900\U0001E901\U0001E902\U0001E903\U0001E904\U0001E905\U0001E906\U0001E907\U0001E908\U0001E909\U0001E90A\U0001E90B\U0001E90C\U0001E90D\U0001E90E\U0001E90F\U0001E910\U0001E911\U0001E912\U0001E913\U0001E914\U0001E915\U0001E916\U0001E917\U0001E918\U0001E919\U0001E91A\U0001E91B\U0001E91C\U0001E91D\U0001E91E\U0001E91F\U0001E920\U0001E921\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943\U0001E944\U0001E945\U0001E946\U0001E947\U0001E948\U0001E949\U0001E94A\U0001E94B\U0001E94C\U0001E94D\U0001E94E\U0001E94F\U0001E950\U0001E951\U0001E952\U0001E953\U0001E954\U0001E955\U0001E956\U0001E957\U0001E958\U0001E959\U0001E95A\U0001E95B\U0001E95C\U0001E95D\U0001E95E\U0001E95F\U0001E960\U0001E961\U0001E962\U0001E963\U0001E964\U0001E965\U0001E966\U0001E967\U0001E968\U0001E969\U0001E96A\U0001E96B\U0001E96C\U0001E96D\U0001E96E\U0001E96F\U0001E970\U0001E971\U0001E972\U0001E973\U0001E974\U0001E975\U0001E976\U0001E977\U0001E978\U0001E979\U0001E97A\U0001E97B\U0001E97C\U0001E97D\U0001E97E\U0001E97F\U0001E980\U0001E981\U0001E982\U0001E983\U0001E984\U0001E985\U0001E986\U0001E987\U0001E988\U0001E989\U0001E98A\U0001E98B\U0001E98C\U0001E98D\U0001E98E\U0001E98F\U0001E990\U0001E991\U0001E992\U0001E993\U0001E994\U0001E995\U0001E996\U0001E997\U0001E998\U0001E999\U0001E99A\U0001E99B\U0001E99C\U0001E99D\U0001E99E\U0001E99F\U0001E9A0\U0001E9A1\U0001E9A2\U0001E9A3\U0001E9A4\U0001E9A5\U0001E9A6\U0001E9A7\U0001E9A8\U0001E9A9\U0001E9AA\U0001E9AB\U0001E9AC\U0001E9AD\U0001E9AE\U0001E9AF\U0001E9B0\U0001E9B1\U0001E9B2\U0001E9B3\U0001E9B4\U0001E9B5\U0001E9B6\U0001E9B7\U0001E9B8\U0001E9B9\U0001E9BA\U0001E9BB\U0001E9BC\U0001E9BD\U0001E9BE\U0001E9BF\U0001E9C0\U0001E9C1\U0001E9C2\U0001E9C3\U0001E9C4\U0001E9C5\U0001E9C6\U0001E9C7\U0001E9C8\U0001E9C9\U0001E9CA\U0001E9CB\U0001E9CC\U0001E9CD\U0001E9CE\U0001E9CF\U0001E9D0\U0001E9D1\U0001E9D2\U0001E9D3\U0001E9D4\U0001E9D5\U0001E9D6\U0001E9D7\U0001E9D8\U0001E9D9\U0001E9DA\U0001E9DB\U0001E9DC\U0001E9DD\U0001E9DE\U0001E9DF\U0001E9E0\U0001E9E1\U0001E9E2\U0001E9E3\U0001E9E4\U0001E9E5\U0001E9E6\U0001E9E7\U0001E9E8\U0001E9E9\U0001E9EA\U0001E9EB\U0001E9EC\U0001E9ED\U0001E9EE\U0001E9EF\U0001E9F0\U0001E9F1\U0001E9F2\U0001E9F3\U0001E9F4\U0001E9F5\U0001E9F6\U0001E9F7\U0001E9F8\U0001E9F9\U0001E9FA\U0001E9FB\U0001E9FC\U0001E9FD\U0001E9FE\U0001E9FF"sv,
+ u8"\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943\U0001E944\U0001E945\U0001E946\U0001E947\U0001E948\U0001E949\U0001E94A\U0001E94B\U0001E94C\U0001E94D\U0001E94E\U0001E94F\U0001E950\U0001E951\U0001E952\U0001E953\U0001E954\U0001E955\U0001E956\U0001E957\U0001E958\U0001E959\U0001E95A\U0001E95B\U0001E95C\U0001E95D\U0001E95E\U0001E95F\U0001E960\U0001E961\U0001E962\U0001E963\U0001E964\U0001E965\U0001E966\U0001E967\U0001E968\U0001E969\U0001E96A\U0001E96B\U0001E96C\U0001E96D\U0001E96E\U0001E96F\U0001E970\U0001E971\U0001E972\U0001E973\U0001E974\U0001E975\U0001E976\U0001E977\U0001E978\U0001E979\U0001E97A\U0001E97B\U0001E97C\U0001E97D\U0001E97E\U0001E97F\U0001E980\U0001E981\U0001E982\U0001E983\U0001E984\U0001E985\U0001E986\U0001E987\U0001E988\U0001E989\U0001E98A\U0001E98B\U0001E98C\U0001E98D\U0001E98E\U0001E98F\U0001E990\U0001E991\U0001E992\U0001E993\U0001E994\U0001E995\U0001E996\U0001E997\U0001E998\U0001E999\U0001E99A\U0001E99B\U0001E99C\U0001E99D\U0001E99E\U0001E99F\U0001E9A0\U0001E9A1\U0001E9A2\U0001E9A3\U0001E9A4\U0001E9A5\U0001E9A6\U0001E9A7\U0001E9A8\U0001E9A9\U0001E9AA\U0001E9AB\U0001E9AC\U0001E9AD\U0001E9AE\U0001E9AF\U0001E9B0\U0001E9B1\U0001E9B2\U0001E9B3\U0001E9B4\U0001E9B5\U0001E9B6\U0001E9B7\U0001E9B8\U0001E9B9\U0001E9BA\U0001E9BB\U0001E9BC\U0001E9BD\U0001E9BE\U0001E9BF\U0001E9C0\U0001E9C1\U0001E9C2\U0001E9C3\U0001E9C4\U0001E9C5\U0001E9C6\U0001E9C7\U0001E9C8\U0001E9C9\U0001E9CA\U0001E9CB\U0001E9CC\U0001E9CD\U0001E9CE\U0001E9CF\U0001E9D0\U0001E9D1\U0001E9D2\U0001E9D3\U0001E9D4\U0001E9D5\U0001E9D6\U0001E9D7\U0001E9D8\U0001E9D9\U0001E9DA\U0001E9DB\U0001E9DC\U0001E9DD\U0001E9DE\U0001E9DF\U0001E9E0\U0001E9E1\U0001E9E2\U0001E9E3\U0001E9E4\U0001E9E5\U0001E9E6\U0001E9E7\U0001E9E8\U0001E9E9\U0001E9EA\U0001E9EB\U0001E9EC\U0001E9ED\U0001E9EE\U0001E9EF\U0001E9F0\U0001E9F1\U0001E9F2\U0001E9F3\U0001E9F4\U0001E9F5\U0001E9F6\U0001E9F7\U0001E9F8\U0001E9F9\U0001E9FA\U0001E9FB\U0001E9FC\U0001E9FD\U0001E9FE\U0001E9FF"sv},
+}};
+
+} // namespace
+
+TEST(unicode_test, case_folding) {
+ for (const auto& [orig, folded] : kCaseFoldData) {
+ std::string_view orig_sv(reinterpret_cast(orig.data()),
+ orig.size());
+ std::string_view folded_sv(reinterpret_cast(folded.data()),
+ folded.size());
+ EXPECT_TRUE(utf8::is_valid(orig_sv));
+ EXPECT_TRUE(utf8::is_valid(folded_sv));
+ EXPECT_NE(folded_sv, orig_sv);
+ auto folded_result = utf8_case_fold(orig_sv);
+ auto folded_unchecked_result = utf8_case_fold_unchecked(orig_sv);
+ EXPECT_EQ(folded_sv, folded_result);
+ EXPECT_EQ(folded_sv, folded_unchecked_result);
+ }
+}
diff --git a/tools/src/dwarfs_main.cpp b/tools/src/dwarfs_main.cpp
index 219ba0f15..293edfebf 100644
--- a/tools/src/dwarfs_main.cpp
+++ b/tools/src/dwarfs_main.cpp
@@ -179,6 +179,7 @@ struct options {
#endif
int enable_nlink{0};
int readonly{0};
+ int case_insensitive{0};
int cache_image{0};
int cache_files{0};
size_t cachesize{0};
@@ -258,6 +259,7 @@ constexpr struct ::fuse_opt dwarfs_opts[] = {
DWARFS_OPT("seq_detector=%s", seq_detector_thresh_str, 0),
DWARFS_OPT("enable_nlink", enable_nlink, 1),
DWARFS_OPT("readonly", readonly, 1),
+ DWARFS_OPT("case_insensitive", case_insensitive, 1),
DWARFS_OPT("cache_image", cache_image, 1),
DWARFS_OPT("no_cache_image", cache_image, 0),
DWARFS_OPT("cache_files", cache_files, 1),
@@ -1224,6 +1226,7 @@ void usage(std::ostream& os, std::filesystem::path const& progname) {
<< " -o imagesize=NUM filesystem image size in bytes\n"
<< " -o enable_nlink show correct hardlink numbers\n"
<< " -o readonly show read-only file system\n"
+ << " -o case_insensitive perform case-insensitive lookups\n"
<< " -o (no_)cache_image (don't) keep image in kernel cache\n"
<< " -o (no_)cache_files (don't) keep files in kernel cache\n"
<< " -o debuglevel=NAME " << logger::all_level_names() << "\n"
@@ -1464,6 +1467,7 @@ void load_filesystem(dwarfs_userdata& userdata) {
fsopts.inode_reader.readahead = opts.readahead;
fsopts.metadata.enable_nlink = bool(opts.enable_nlink);
fsopts.metadata.readonly = bool(opts.readonly);
+ fsopts.metadata.case_insensitive_lookup = bool(opts.case_insensitive);
fsopts.metadata.block_size = opts.blocksize;
#ifndef _WIN32
fsopts.metadata.fs_uid = opts.fs_uid;